diff --git a/CMakeLists.txt b/CMakeLists.txt index 48ad5033e0..9f30f18ea5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.13) project(PrusaSlicer) include("version.inc") @@ -35,6 +35,11 @@ option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0) set(SLIC3R_GTK "2" CACHE STRING "GTK version to use with wxWidgets on Linux") +if (APPLE) + set(CMAKE_FIND_FRAMEWORK LAST) + set(CMAKE_FIND_APPBUNDLE LAST) +endif () + # Proposal for C++ unit tests and sandboxes option(SLIC3R_BUILD_SANDBOXES "Build development sandboxes" OFF) option(SLIC3R_BUILD_TESTS "Build unit tests" ON) @@ -386,7 +391,7 @@ if (NOT EXPAT_FOUND) set(EXPAT_LIBRARIES expat) endif () -find_package(PNG) +find_package(PNG REQUIRED) find_package(OpenGL REQUIRED) @@ -506,7 +511,10 @@ if (WIN32) elseif (SLIC3R_FHS) set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/PrusaSlicer") install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${SLIC3R_FHS_RESOURCES}") + install(FILES src/platform/unix/PrusaSlicer.desktop DESTINATION ${SLIC3R_FHS_RESOURCES}/applications) else () + install(FILES src/platform/unix/PrusaSlicer.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/resources/applications) install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources") endif () + configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp) diff --git a/README.md b/README.md index 6fd1af4e20..2b93a47b01 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ compatible with any modern printer based on the RepRap toolchain, including all those based on the Marlin, Prusa, Sprinter and Repetier firmware. It also works with Mach3, LinuxCNC and Machinekit controllers. -PrusaSlicer is based on [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranelucci and the RepRap community. +PrusaSlicer is based on [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community. See the [project homepage](https://www.prusa3d.com/slic3r-prusa-edition/) and the [documentation directory](doc/) for more information. diff --git a/deps/PNG/PNG.cmake b/deps/PNG/PNG.cmake index 01bd984998..3a8d22ae3a 100644 --- a/deps/PNG/PNG.cmake +++ b/deps/PNG/PNG.cmake @@ -1,3 +1,8 @@ +set(_prefix_line "") +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(_prefix_line "-DPNG_PREFIX=prusaslicer_") +endif() + prusaslicer_add_cmake_project(PNG GIT_REPOSITORY https://github.com/glennrp/libpng.git GIT_TAG v1.6.35 @@ -5,6 +10,7 @@ prusaslicer_add_cmake_project(PNG CMAKE_ARGS -DPNG_SHARED=OFF -DPNG_STATIC=ON + ${_prefix_line} -DPNG_TESTS=OFF ) diff --git a/deps/deps-linux.cmake b/deps/deps-linux.cmake index 3ad3cca64f..ae972327f8 100644 --- a/deps/deps-linux.cmake +++ b/deps/deps-linux.cmake @@ -3,10 +3,11 @@ set(DEP_CMAKE_OPTS "-DCMAKE_POSITION_INDEPENDENT_CODE=ON") include("deps-unix-common.cmake") -find_package(PNG QUIET) -if (NOT PNG_FOUND) - message(WARNING "No PNG dev package found in system, building static library. You should install the system package.") -endif () +# Some Linuxes may have very old libpng, so it's best to bundle it instead of relying on the system version. +# find_package(PNG QUIET) +# if (NOT PNG_FOUND) +# message(WARNING "No PNG dev package found in system, building static library. You should install the system package.") +# endif () #TODO UDEV diff --git a/doc/How to build - Linux et al.md b/doc/How to build - Linux et al.md index 9206ae1ed2..a8f2441be5 100644 --- a/doc/How to build - Linux et al.md +++ b/doc/How to build - Linux et al.md @@ -56,6 +56,10 @@ This is done by passing this option to CMake: Note that PrusaSlicer is tested with wxWidgets 3.0 somewhat sporadically and so there may be bugs in bleeding edge releases. +When building on ubuntu 20.04 focal fossa, the package libwxgtk3.0-gtk3-dev needs to be installed instead of libwxgtk3.0-dev and you should use: + + -DSLIC3R_WX_STABLE=1 -DSLIC3R_GTK=3 + ### Build variant By default PrusaSlicer builds the release variant. diff --git a/doc/How to build - Mac OS.md b/doc/How to build - Mac OS.md index 082c560b7a..bab40ea265 100644 --- a/doc/How to build - Mac OS.md +++ b/doc/How to build - Mac OS.md @@ -79,3 +79,29 @@ This is set in the property list file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist To remove the limitation, simply delete the key `MinimumSDKVersion` from that file. + + +# TL; DR + +Works on a fresh installation of MacOS Catalina 10.15.6 + +- Install [brew](https://brew.sh/): +- Open Terminal + +- Enter: + +```brew install cmake git gettext +brew update +brew upgrade +git clone https://github.com/prusa3d/PrusaSlicer/ +cd PrusaSlicer/deps +mkdir build +cd build +cmake .. +make +cd ../.. +mkdir build +cd build +cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" +make +src/prusa-slicer diff --git a/doc/How to build - Windows.md b/doc/How to build - Windows.md index c2dc31ce31..cd5227dafc 100644 --- a/doc/How to build - Windows.md +++ b/doc/How to build - Windows.md @@ -125,11 +125,11 @@ intermediate files, which are not handled correctly by either `b2.exe` or possib # Noob guide (step by step) Install Visual Studio Community 2019 from -visualstudio.microsoft.com/vs/ +[visualstudio.microsoft.com/vs/](https://visualstudio.microsoft.com/vs/) Select all workload options for C++ Install git for Windows from -gitforwindows.org +[gitforwindows.org](https://gitforwindows.org/) download and run the exe accepting all defaults download PrusaSlicer-master.zip from github diff --git a/resources/icons/PrusaSlicer-gcodeviewer.ico b/resources/icons/PrusaSlicer-gcodeviewer.ico new file mode 100644 index 0000000000..955b8c6dc3 Binary files /dev/null and b/resources/icons/PrusaSlicer-gcodeviewer.ico differ diff --git a/resources/icons/PrusaSlicer-gcodeviewer_128px.png b/resources/icons/PrusaSlicer-gcodeviewer_128px.png new file mode 100644 index 0000000000..f75bcfe587 Binary files /dev/null and b/resources/icons/PrusaSlicer-gcodeviewer_128px.png differ diff --git a/resources/icons/PrusaSlicer-gcodeviewer_192px.png b/resources/icons/PrusaSlicer-gcodeviewer_192px.png new file mode 100644 index 0000000000..7f4e9d6174 Binary files /dev/null and b/resources/icons/PrusaSlicer-gcodeviewer_192px.png differ diff --git a/resources/icons/PrusaSlicer-gcodeviewer_32px.png b/resources/icons/PrusaSlicer-gcodeviewer_32px.png new file mode 100644 index 0000000000..0f7e49d87a Binary files /dev/null and b/resources/icons/PrusaSlicer-gcodeviewer_32px.png differ diff --git a/resources/icons/add.svg b/resources/icons/add.svg index 8a9b253de7..37050d7481 100644 --- a/resources/icons/add.svg +++ b/resources/icons/add.svg @@ -1,17 +1,22 @@ - + - - + + + + + + + diff --git a/resources/icons/arrange.svg b/resources/icons/arrange.svg index 4f30e979e3..62cf939e9f 100644 --- a/resources/icons/arrange.svg +++ b/resources/icons/arrange.svg @@ -1,24 +1,23 @@ - + - - + - + - + - + - + diff --git a/resources/icons/cancel.svg b/resources/icons/cancel.svg new file mode 100644 index 0000000000..da44606a08 --- /dev/null +++ b/resources/icons/cancel.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/resources/icons/copy.svg b/resources/icons/copy.svg index 9b8430dd79..345c2590be 100644 --- a/resources/icons/copy.svg +++ b/resources/icons/copy.svg @@ -1,37 +1,29 @@ - + - - - - - + + - - - - - + + diff --git a/resources/icons/cross_focus_large.svg b/resources/icons/cross_focus_large.svg new file mode 100644 index 0000000000..c246f2bd9e --- /dev/null +++ b/resources/icons/cross_focus_large.svg @@ -0,0 +1,81 @@ + +image/svg+xml + + + + + + + + + + + diff --git a/resources/icons/delete_all.svg b/resources/icons/delete_all.svg index 80e2e503cb..dfa9438129 100644 --- a/resources/icons/delete_all.svg +++ b/resources/icons/delete_all.svg @@ -1,31 +1,17 @@ - + - - + - + - - - - - - - - - - + diff --git a/resources/icons/dot_small.svg b/resources/icons/dot_small.svg new file mode 100644 index 0000000000..474142a57f --- /dev/null +++ b/resources/icons/dot_small.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/resources/icons/empty.svg b/resources/icons/empty.svg new file mode 100644 index 0000000000..b8ba0a6513 --- /dev/null +++ b/resources/icons/empty.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/resources/icons/exit.svg b/resources/icons/exit.svg new file mode 100644 index 0000000000..30091b381e --- /dev/null +++ b/resources/icons/exit.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/resources/icons/instance_add.svg b/resources/icons/instance_add.svg index 5ef492cfae..a466c51dbf 100644 --- a/resources/icons/instance_add.svg +++ b/resources/icons/instance_add.svg @@ -1,50 +1,46 @@ - + - + - + - + + + + diff --git a/resources/icons/instance_remove.svg b/resources/icons/instance_remove.svg index 466752ea89..7f9b4f7e1c 100644 --- a/resources/icons/instance_remove.svg +++ b/resources/icons/instance_remove.svg @@ -1,49 +1,42 @@ - + - + - + - + diff --git a/resources/icons/ironing.svg b/resources/icons/ironing.svg new file mode 100644 index 0000000000..94917d6bfe --- /dev/null +++ b/resources/icons/ironing.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/icons/notification_close.svg b/resources/icons/notification_close.svg new file mode 100644 index 0000000000..708d8bfef1 --- /dev/null +++ b/resources/icons/notification_close.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/resources/icons/notification_close_hover.svg b/resources/icons/notification_close_hover.svg new file mode 100644 index 0000000000..a04dce21ad --- /dev/null +++ b/resources/icons/notification_close_hover.svg @@ -0,0 +1,66 @@ + +image/svg+xml + + + + + + + + + + diff --git a/resources/icons/notification_error.svg b/resources/icons/notification_error.svg new file mode 100644 index 0000000000..5356e7af6e --- /dev/null +++ b/resources/icons/notification_error.svg @@ -0,0 +1,71 @@ + +image/svg+xml + + + + + + + + + + diff --git a/resources/icons/notification_minimalize.svg b/resources/icons/notification_minimalize.svg new file mode 100644 index 0000000000..bb3ae9b7a1 --- /dev/null +++ b/resources/icons/notification_minimalize.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/resources/icons/notification_minimalize_hover.svg b/resources/icons/notification_minimalize_hover.svg new file mode 100644 index 0000000000..bc5bc6cca1 --- /dev/null +++ b/resources/icons/notification_minimalize_hover.svg @@ -0,0 +1,58 @@ + +image/svg+xml + + + + + + + diff --git a/resources/icons/notification_warning.svg b/resources/icons/notification_warning.svg new file mode 100644 index 0000000000..6ba7a046d8 --- /dev/null +++ b/resources/icons/notification_warning.svg @@ -0,0 +1,70 @@ + +image/svg+xml + + + + + + + + + + diff --git a/resources/icons/paste.svg b/resources/icons/paste.svg index 028ffb8ea0..bcfe567de3 100644 --- a/resources/icons/paste.svg +++ b/resources/icons/paste.svg @@ -1,27 +1,22 @@ - + - + - - - - - + + diff --git a/resources/icons/prusa_slicer_logo.svg b/resources/icons/prusa_slicer_logo.svg new file mode 100644 index 0000000000..927c3e70ba --- /dev/null +++ b/resources/icons/prusa_slicer_logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/icons/redo_toolbar.svg b/resources/icons/redo_toolbar.svg index d005f83736..d2aca2cc7d 100644 --- a/resources/icons/redo_toolbar.svg +++ b/resources/icons/redo_toolbar.svg @@ -1,13 +1,17 @@ - + - + viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve"> + + + + + + + + diff --git a/resources/icons/remove.svg b/resources/icons/remove.svg index acd21256cd..1bb830d91c 100644 --- a/resources/icons/remove.svg +++ b/resources/icons/remove.svg @@ -1,44 +1,60 @@ - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/icons/seam.svg b/resources/icons/seam.svg new file mode 100644 index 0000000000..a7e7980cc0 --- /dev/null +++ b/resources/icons/seam.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/icons/search_.svg b/resources/icons/search_.svg index 679bb30f71..2985ceb561 100644 --- a/resources/icons/search_.svg +++ b/resources/icons/search_.svg @@ -1,4 +1,26 @@ - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + diff --git a/resources/icons/search_blink.svg b/resources/icons/search_blink.svg new file mode 100644 index 0000000000..d005f83736 --- /dev/null +++ b/resources/icons/search_blink.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/resources/icons/settings.svg b/resources/icons/settings.svg new file mode 100644 index 0000000000..db5bf458d7 --- /dev/null +++ b/resources/icons/settings.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/icons/splashscreen-gcodepreview.jpg b/resources/icons/splashscreen-gcodepreview.jpg new file mode 100644 index 0000000000..3bae384935 Binary files /dev/null and b/resources/icons/splashscreen-gcodepreview.jpg differ diff --git a/resources/icons/splashscreen.jpg b/resources/icons/splashscreen.jpg new file mode 100644 index 0000000000..754e245880 Binary files /dev/null and b/resources/icons/splashscreen.jpg differ diff --git a/resources/icons/split_objects.svg b/resources/icons/split_objects.svg index a7ccc5df86..e822fd35aa 100644 --- a/resources/icons/split_objects.svg +++ b/resources/icons/split_objects.svg @@ -1,19 +1,20 @@ - + - + - + - - + + + + diff --git a/resources/icons/split_parts.svg b/resources/icons/split_parts.svg index 82a2927706..5cfef0f330 100644 --- a/resources/icons/split_parts.svg +++ b/resources/icons/split_parts.svg @@ -1,18 +1,20 @@ - + - + - + - - + + + + diff --git a/resources/icons/switch_presets.svg b/resources/icons/switch_presets.svg new file mode 100644 index 0000000000..a5f3fbefbb --- /dev/null +++ b/resources/icons/switch_presets.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + diff --git a/resources/icons/thumb_left.svg b/resources/icons/thumb_left.svg new file mode 100644 index 0000000000..ef78bd1410 --- /dev/null +++ b/resources/icons/thumb_left.svg @@ -0,0 +1,54 @@ + +image/svg+xml + + + + + + diff --git a/resources/icons/thumb_right.svg b/resources/icons/thumb_right.svg new file mode 100644 index 0000000000..f3748525d2 --- /dev/null +++ b/resources/icons/thumb_right.svg @@ -0,0 +1,54 @@ + +image/svg+xml + + + + + + diff --git a/resources/icons/tick_mark.svg b/resources/icons/tick_mark.svg new file mode 100644 index 0000000000..4ccab2192d --- /dev/null +++ b/resources/icons/tick_mark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/icons/timer_dot.svg b/resources/icons/timer_dot.svg new file mode 100644 index 0000000000..3a77962b60 --- /dev/null +++ b/resources/icons/timer_dot.svg @@ -0,0 +1,72 @@ + +image/svg+xml + + + + diff --git a/resources/icons/timer_dot_empty.svg b/resources/icons/timer_dot_empty.svg new file mode 100644 index 0000000000..a8e776b49e --- /dev/null +++ b/resources/icons/timer_dot_empty.svg @@ -0,0 +1,73 @@ + + + +image/svg+xml + + + + \ No newline at end of file diff --git a/resources/icons/undo_toolbar.svg b/resources/icons/undo_toolbar.svg index 15778a7baf..2fc25bf737 100644 --- a/resources/icons/undo_toolbar.svg +++ b/resources/icons/undo_toolbar.svg @@ -1,13 +1,17 @@ - + - + viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve"> + + + + + + + + diff --git a/resources/icons/white/dot_small.svg b/resources/icons/white/dot_small.svg new file mode 100644 index 0000000000..74df442086 --- /dev/null +++ b/resources/icons/white/dot_small.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/resources/icons/white/exit.svg b/resources/icons/white/exit.svg new file mode 100644 index 0000000000..e5aebcfc22 --- /dev/null +++ b/resources/icons/white/exit.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/resources/icons/white/switch_presets.svg b/resources/icons/white/switch_presets.svg new file mode 100644 index 0000000000..efcc3670cc --- /dev/null +++ b/resources/icons/white/switch_presets.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + diff --git a/resources/localization/PrusaSlicer.pot b/resources/localization/PrusaSlicer.pot index aef39c253f..a111c8fa09 100644 --- a/resources/localization/PrusaSlicer.pot +++ b/resources/localization/PrusaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-16 11:29+0200\n" +"POT-Creation-Date: 2020-10-19 13:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,109 +18,55 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/slic3r/GUI/AboutDialog.cpp:42 src/slic3r/GUI/AboutDialog.cpp:295 +#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48 +#: src/slic3r/GUI/AboutDialog.cpp:317 msgid "Portions copyright" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:130 src/slic3r/GUI/AboutDialog.cpp:259 +#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281 msgid "Copyright" msgstr "" #. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:132 +#: src/slic3r/GUI/AboutDialog.cpp:141 msgid "" "License agreements of all following programs (libraries) are part of " "application license agreement" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:202 +#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215 #, possible-c-format msgid "About %s" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:234 src/slic3r/GUI/MainFrame.cpp:70 +#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239 +#: src/slic3r/GUI/MainFrame.cpp:164 msgid "Version" msgstr "" #. TRN "Slic3r _is licensed under the_ License" -#: src/slic3r/GUI/AboutDialog.cpp:261 +#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244 msgid "is licensed under the" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:262 +#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244 msgid "GNU Affero General Public License, version 3" msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:263 +#: src/slic3r/GUI/AboutDialog.cpp:285 msgid "" "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap " "community." msgstr "" -#: src/slic3r/GUI/AboutDialog.cpp:264 +#: src/slic3r/GUI/AboutDialog.cpp:286 msgid "" "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, " "Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and " "numerous others." msgstr "" -#: src/slic3r/GUI/AppConfig.cpp:110 -msgid "" -"Error parsing PrusaSlicer config file, it is probably corrupted. Try to " -"manually delete the file to recover from the error. Your user profiles will " -"not be affected." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:101 -msgid "" -"Copying of the temporary G-code to the output G-code failed. Maybe the SD " -"card is write locked?" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:104 -msgid "" -"Copying of the temporary G-code to the output G-code failed. There might be " -"problem with target device, please try exporting again or using different " -"device. The corrupted output G-code is at %1%.tmp." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:107 -msgid "" -"Renaming of the G-code after copying to the selected destination folder has " -"failed. Current path is %1%.tmp. Please try exporting again." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:110 -msgid "" -"Copying of the temporary G-code has finished but the original code at %1% " -"couldn't be opened during copy check. The output G-code is at %2%.tmp." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113 -msgid "" -"Copying of the temporary G-code has finished but the exported code couldn't " -"be opened during copy check. The output G-code is at %1%.tmp." -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:120 -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:468 -msgid "Running post-processing scripts" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:122 -msgid "G-code file exported to %1%" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:126 -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:172 -msgid "Slicing complete" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:168 -msgid "Masked SLA file exported to %1%" -msgstr "" - -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:210 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62 #, possible-c-format msgid "" "%s has encountered an error. It was likely caused by running out of memory. " @@ -128,161 +74,219 @@ msgid "" "and we would be glad if you reported it." msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:470 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:144 +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147 +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150 +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153 +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156 +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520 +msgid "Running post-processing scripts" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165 +msgid "G-code file exported to %1%" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219 +msgid "Slicing complete" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214 +msgid "Masked SLA file exported to %1%" +msgstr "" + +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522 msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" -#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:493 +#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2073 -msgid "Shape" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:73 -msgid "Rectangular" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:79 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:162 -#: src/slic3r/GUI/Tab.cpp:2319 +#: src/slic3r/GUI/BedShapeDialog.cpp:93 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166 +#: src/slic3r/GUI/Tab.cpp:2493 msgid "Size" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:80 -msgid "Size in X and Y of the rectangular plate." -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:88 +#: src/slic3r/GUI/BedShapeDialog.cpp:94 msgid "Origin" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:89 +#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745 +msgid "Diameter" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:110 +msgid "Size in X and Y of the rectangular plate." +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:121 msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:93 -msgid "Circular" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:96 src/slic3r/GUI/ConfigWizard.cpp:233 -#: src/slic3r/GUI/ConfigWizard.cpp:985 src/slic3r/GUI/ConfigWizard.cpp:999 +#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236 +#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:142 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333 +#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189 +#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487 #: src/slic3r/GUI/ObjectDataViewModel.cpp:96 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75 -#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91 -#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188 -#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321 -#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379 -#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516 -#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712 -#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292 -#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328 -#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394 -#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524 -#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573 -#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591 -#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682 -#: src/libslic3r/PrintConfig.cpp:1921 src/libslic3r/PrintConfig.cpp:1992 -#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2154 -#: src/libslic3r/PrintConfig.cpp:2233 src/libslic3r/PrintConfig.cpp:2240 -#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2277 -#: src/libslic3r/PrintConfig.cpp:2287 src/libslic3r/PrintConfig.cpp:2297 -#: src/libslic3r/PrintConfig.cpp:2457 src/libslic3r/PrintConfig.cpp:2491 -#: src/libslic3r/PrintConfig.cpp:2630 src/libslic3r/PrintConfig.cpp:2639 -#: src/libslic3r/PrintConfig.cpp:2648 src/libslic3r/PrintConfig.cpp:2658 -#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2722 -#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2754 -#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2774 -#: src/libslic3r/PrintConfig.cpp:2792 src/libslic3r/PrintConfig.cpp:2807 -#: src/libslic3r/PrintConfig.cpp:2821 src/libslic3r/PrintConfig.cpp:2832 -#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2890 -#: src/libslic3r/PrintConfig.cpp:2900 src/libslic3r/PrintConfig.cpp:2909 -#: src/libslic3r/PrintConfig.cpp:2919 src/libslic3r/PrintConfig.cpp:2935 -#: src/libslic3r/PrintConfig.cpp:2959 +#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93 +#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222 +#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355 +#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413 +#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552 +#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748 +#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339 +#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418 +#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492 +#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624 +#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673 +#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691 +#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707 +#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056 +#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161 +#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369 +#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383 +#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423 +#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593 +#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766 +#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784 +#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859 +#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881 +#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911 +#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939 +#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968 +#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992 +#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047 +#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066 +#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106 msgid "mm" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:97 src/libslic3r/PrintConfig.cpp:709 -msgid "Diameter" -msgstr "" - -#: src/slic3r/GUI/BedShapeDialog.cpp:98 +#: src/slic3r/GUI/BedShapeDialog.cpp:131 msgid "" "Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:102 src/slic3r/GUI/GUI_Preview.cpp:308 -#: src/libslic3r/ExtrusionEntity.cpp:322 +#: src/slic3r/GUI/BedShapeDialog.cpp:141 +msgid "Rectangular" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:142 +msgid "Circular" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314 +#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362 msgid "Custom" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:106 +#: src/slic3r/GUI/BedShapeDialog.cpp:145 +msgid "Invalid" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2215 +msgid "Shape" +msgstr "" + +#: src/slic3r/GUI/BedShapeDialog.cpp:243 msgid "Load shape from STL..." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:159 +#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969 msgid "Settings" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:176 +#: src/slic3r/GUI/BedShapeDialog.cpp:315 msgid "Texture" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:186 src/slic3r/GUI/BedShapeDialog.cpp:265 +#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405 msgid "Load..." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:194 src/slic3r/GUI/BedShapeDialog.cpp:273 -#: src/slic3r/GUI/Tab.cpp:3155 +#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413 +#: src/slic3r/GUI/Tab.cpp:3423 msgid "Remove" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:227 src/slic3r/GUI/BedShapeDialog.cpp:306 +#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446 msgid "Not found:" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:255 +#: src/slic3r/GUI/BedShapeDialog.cpp:395 msgid "Model" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:491 +#: src/slic3r/GUI/BedShapeDialog.cpp:563 msgid "Choose an STL file to import bed shape from:" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:498 src/slic3r/GUI/BedShapeDialog.cpp:547 -#: src/slic3r/GUI/BedShapeDialog.cpp:570 +#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619 +#: src/slic3r/GUI/BedShapeDialog.cpp:642 msgid "Invalid file format." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:509 +#: src/slic3r/GUI/BedShapeDialog.cpp:581 msgid "Error! Invalid model" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:517 +#: src/slic3r/GUI/BedShapeDialog.cpp:589 msgid "The selected file contains no geometry." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:521 +#: src/slic3r/GUI/BedShapeDialog.cpp:593 msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:536 +#: src/slic3r/GUI/BedShapeDialog.cpp:608 msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.cpp:559 +#: src/slic3r/GUI/BedShapeDialog.cpp:631 msgid "Choose an STL file to import bed model from:" msgstr "" -#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:944 +#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295 msgid "Bed Shape" msgstr "" @@ -328,31 +332,31 @@ msgid "" "preset" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:48 +#: src/slic3r/GUI/ConfigManipulation.cpp:47 msgid "" "Zero layer height is not valid.\n" "\n" "The layer height will be reset to 0.01." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:49 -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1116 +#: src/slic3r/GUI/ConfigManipulation.cpp:48 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371 #: src/libslic3r/PrintConfig.cpp:71 msgid "Layer height" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:60 +#: src/slic3r/GUI/ConfigManipulation.cpp:59 msgid "" "Zero first layer height is not valid.\n" "\n" "The first layer height will be reset to 0.01." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889 +#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931 msgid "First layer height" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:81 +#: src/slic3r/GUI/ConfigManipulation.cpp:80 #, possible-c-format msgid "" "The Spiral Vase mode requires:\n" @@ -364,15 +368,15 @@ msgid "" "- Detect thin walls disabled" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:89 +#: src/slic3r/GUI/ConfigManipulation.cpp:88 msgid "Shall I adjust those settings in order to enable Spiral Vase?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:90 +#: src/slic3r/GUI/ConfigManipulation.cpp:89 msgid "Spiral Vase" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:115 +#: src/slic3r/GUI/ConfigManipulation.cpp:114 msgid "" "The Wipe Tower currently supports the non-soluble supports only\n" "if they are printed with the current extruder without triggering a tool " @@ -381,74 +385,74 @@ msgid "" "to be set to 0)." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:119 +#: src/slic3r/GUI/ConfigManipulation.cpp:118 msgid "Shall I adjust those settings in order to enable the Wipe Tower?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:120 -#: src/slic3r/GUI/ConfigManipulation.cpp:140 +#: src/slic3r/GUI/ConfigManipulation.cpp:119 +#: src/slic3r/GUI/ConfigManipulation.cpp:139 msgid "Wipe Tower" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:136 +#: src/slic3r/GUI/ConfigManipulation.cpp:135 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers\n" "need to be synchronized with the object layers." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:139 +#: src/slic3r/GUI/ConfigManipulation.cpp:138 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:159 +#: src/slic3r/GUI/ConfigManipulation.cpp:158 msgid "" "Supports work better, if the following feature is enabled:\n" "- Detect bridging perimeters" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:162 +#: src/slic3r/GUI/ConfigManipulation.cpp:161 msgid "Shall I adjust those settings for supports?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:163 +#: src/slic3r/GUI/ConfigManipulation.cpp:162 msgid "Support Generator" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:208 +#: src/slic3r/GUI/ConfigManipulation.cpp:207 msgid "The %1% infill pattern is not supposed to work at 100%% density." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:210 +#: src/slic3r/GUI/ConfigManipulation.cpp:209 msgid "Shall I switch to rectilinear fill pattern?" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:211 -#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96 -#: src/slic3r/GUI/GUI_ObjectList.cpp:618 src/slic3r/GUI/Plater.cpp:534 -#: src/slic3r/GUI/Tab.cpp:1158 src/slic3r/GUI/Tab.cpp:1159 -#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416 -#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776 -#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827 -#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991 -#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028 -#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1735 -#: src/libslic3r/PrintConfig.cpp:1752 +#: src/slic3r/GUI/ConfigManipulation.cpp:210 +#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93 +#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393 +#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414 +#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450 +#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812 +#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863 +#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035 +#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072 +#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843 +#: src/libslic3r/PrintConfig.cpp:1860 msgid "Infill" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:318 +#: src/slic3r/GUI/ConfigManipulation.cpp:322 msgid "Head penetration should not be greater than the head width." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:320 +#: src/slic3r/GUI/ConfigManipulation.cpp:324 msgid "Invalid Head penetration" msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:331 +#: src/slic3r/GUI/ConfigManipulation.cpp:335 msgid "Pinhead diameter should be smaller than the pillar diameter." msgstr "" -#: src/slic3r/GUI/ConfigManipulation.cpp:333 +#: src/slic3r/GUI/ConfigManipulation.cpp:337 msgid "Invalid pinhead diameter" msgstr "" @@ -464,11 +468,12 @@ msgstr "" msgid "Before roll back" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132 msgid "User" msgstr "" #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27 +#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310 msgid "Unknown" msgstr "" @@ -480,7 +485,7 @@ msgstr "" msgid "PrusaSlicer version" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1563 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300 msgid "print" msgstr "" @@ -488,11 +493,11 @@ msgstr "" msgid "filaments" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1567 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304 msgid "printer" msgstr "" -#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1034 +#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289 msgid "vendor" msgstr "" @@ -529,104 +534,125 @@ msgstr "" msgid "Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:233 +#: src/slic3r/GUI/ConfigWizard.cpp:236 msgid "nozzle" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:237 +#: src/slic3r/GUI/ConfigWizard.cpp:240 msgid "Alternate nozzles:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:304 +#: src/slic3r/GUI/ConfigWizard.cpp:307 msgid "All standard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:304 +#: src/slic3r/GUI/ConfigWizard.cpp:307 msgid "Standard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:305 src/slic3r/GUI/ConfigWizard.cpp:588 -#: src/slic3r/GUI/Tab.cpp:3214 +#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598 +#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921 msgid "All" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:306 src/slic3r/GUI/ConfigWizard.cpp:589 -#: src/slic3r/GUI/Plater.cpp:506 src/slic3r/GUI/Plater.cpp:646 -#: src/libslic3r/ExtrusionEntity.cpp:309 +#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599 +#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505 +#: src/libslic3r/ExtrusionEntity.cpp:312 msgid "None" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:442 +#: src/slic3r/GUI/ConfigWizard.cpp:445 #, possible-c-format msgid "Welcome to the %s Configuration Assistant" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:444 +#: src/slic3r/GUI/ConfigWizard.cpp:447 #, possible-c-format msgid "Welcome to the %s Configuration Wizard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:446 +#: src/slic3r/GUI/ConfigWizard.cpp:449 msgid "Welcome" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:448 +#: src/slic3r/GUI/ConfigWizard.cpp:451 #, possible-c-format msgid "" "Hello, welcome to %s! This %s helps you with the initial configuration; just " "a few settings and you will be ready to print." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:453 +#: src/slic3r/GUI/ConfigWizard.cpp:456 msgid "Remove user profiles (a snapshot will be taken beforehand)" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:496 +#: src/slic3r/GUI/ConfigWizard.cpp:499 #, possible-c-format msgid "%s Family" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:580 +#: src/slic3r/GUI/ConfigWizard.cpp:587 +msgid "Printer:" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:589 msgid "Vendor:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:581 +#: src/slic3r/GUI/ConfigWizard.cpp:590 msgid "Profile:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:618 src/slic3r/GUI/ConfigWizard.cpp:646 +#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812 +#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007 msgid "(All)" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:747 +#: src/slic3r/GUI/ConfigWizard.cpp:691 +msgid "" +"Filaments marked with * are not compatible with some installed " +"printers." +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:694 +msgid "All installed printers are compatible with the selected filament." +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:714 +msgid "" +"Only the following installed printers are compatible with the selected " +"filament:" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:1091 msgid "Custom Printer Setup" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:747 +#: src/slic3r/GUI/ConfigWizard.cpp:1091 msgid "Custom Printer" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:749 +#: src/slic3r/GUI/ConfigWizard.cpp:1093 msgid "Define a custom printer profile" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:751 +#: src/slic3r/GUI/ConfigWizard.cpp:1095 msgid "Custom profile name:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:776 +#: src/slic3r/GUI/ConfigWizard.cpp:1120 msgid "Automatic updates" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:776 +#: src/slic3r/GUI/ConfigWizard.cpp:1120 msgid "Updates" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:784 src/slic3r/GUI/Preferences.cpp:64 +#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81 msgid "Check for application updates" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:788 +#: src/slic3r/GUI/ConfigWizard.cpp:1132 #, possible-c-format msgid "" "If enabled, %s checks for new application versions online. When a new " @@ -635,11 +661,11 @@ msgid "" "notification mechanisms, no automatic installation is done." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:794 src/slic3r/GUI/Preferences.cpp:80 +#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97 msgid "Update built-in Presets automatically" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:798 +#: src/slic3r/GUI/ConfigWizard.cpp:1142 #, possible-c-format msgid "" "If enabled, %s downloads updates of built-in system presets in the " @@ -648,30 +674,30 @@ msgid "" "startup." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:801 +#: src/slic3r/GUI/ConfigWizard.cpp:1145 msgid "" "Updates are never applied without user's consent and never overwrite user's " "customized settings." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:806 +#: src/slic3r/GUI/ConfigWizard.cpp:1150 msgid "" "Additionally a backup snapshot of the whole configuration is created before " "an update is applied." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:813 src/slic3r/GUI/GUI_ObjectList.cpp:1678 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4040 src/slic3r/GUI/Plater.cpp:3225 -#: src/slic3r/GUI/Plater.cpp:3938 src/slic3r/GUI/Plater.cpp:3967 +#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028 +#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881 msgid "Reload from disk" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:816 +#: src/slic3r/GUI/ConfigWizard.cpp:1160 msgid "" "Export full pathnames of models and parts sources into 3mf and amf files" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:820 +#: src/slic3r/GUI/ConfigWizard.cpp:1164 msgid "" "If enabled, allows the Reload from disk command to automatically find and " "load the files when invoked.\n" @@ -679,11 +705,11 @@ msgid "" "using an open file dialog." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:828 +#: src/slic3r/GUI/ConfigWizard.cpp:1172 msgid "View mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:830 +#: src/slic3r/GUI/ConfigWizard.cpp:1174 msgid "" "PrusaSlicer's user interfaces comes in three variants:\n" "Simple, Advanced, and Expert.\n" @@ -692,272 +718,285 @@ msgid "" "fine-tuning, they are suitable for advanced and expert users, respectively." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:835 +#: src/slic3r/GUI/ConfigWizard.cpp:1179 msgid "Simple mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:836 +#: src/slic3r/GUI/ConfigWizard.cpp:1180 msgid "Advanced mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:837 +#: src/slic3r/GUI/ConfigWizard.cpp:1181 msgid "Expert mode" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:871 +#: src/slic3r/GUI/ConfigWizard.cpp:1187 +msgid "The size of the object can be specified in inches" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:1188 +msgid "Use inches" +msgstr "" + +#: src/slic3r/GUI/ConfigWizard.cpp:1222 msgid "Other Vendors" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:875 +#: src/slic3r/GUI/ConfigWizard.cpp:1226 #, possible-c-format msgid "Pick another vendor supported by %s" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:906 +#: src/slic3r/GUI/ConfigWizard.cpp:1257 msgid "Firmware Type" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:906 src/slic3r/GUI/Tab.cpp:1980 +#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132 msgid "Firmware" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:910 +#: src/slic3r/GUI/ConfigWizard.cpp:1261 msgid "Choose the type of firmware used by your printer." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:944 +#: src/slic3r/GUI/ConfigWizard.cpp:1295 msgid "Bed Shape and Size" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:947 +#: src/slic3r/GUI/ConfigWizard.cpp:1298 msgid "Set the shape of your printer's bed." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:967 +#: src/slic3r/GUI/ConfigWizard.cpp:1318 msgid "Filament and Nozzle Diameters" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:967 +#: src/slic3r/GUI/ConfigWizard.cpp:1318 msgid "Print Diameters" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:981 +#: src/slic3r/GUI/ConfigWizard.cpp:1332 msgid "Enter the diameter of your printer's hot end nozzle." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:984 +#: src/slic3r/GUI/ConfigWizard.cpp:1335 msgid "Nozzle Diameter:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:994 +#: src/slic3r/GUI/ConfigWizard.cpp:1345 msgid "Enter the diameter of your filament." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:995 +#: src/slic3r/GUI/ConfigWizard.cpp:1346 msgid "" "Good precision is required, so use a caliper and do multiple measurements " "along the filament, then compute the average." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:998 +#: src/slic3r/GUI/ConfigWizard.cpp:1349 msgid "Filament Diameter:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1032 +#: src/slic3r/GUI/ConfigWizard.cpp:1383 msgid "Extruder and Bed Temperatures" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1032 +#: src/slic3r/GUI/ConfigWizard.cpp:1383 msgid "Temperatures" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1048 +#: src/slic3r/GUI/ConfigWizard.cpp:1399 msgid "Enter the temperature needed for extruding your filament." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1049 +#: src/slic3r/GUI/ConfigWizard.cpp:1400 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1052 +#: src/slic3r/GUI/ConfigWizard.cpp:1403 msgid "Extrusion Temperature:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1053 src/slic3r/GUI/ConfigWizard.cpp:1067 +#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418 +#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912 +#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209 msgid "°C" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1062 +#: src/slic3r/GUI/ConfigWizard.cpp:1413 msgid "" "Enter the bed temperature needed for getting your filament to stick to your " "heated bed." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1063 +#: src/slic3r/GUI/ConfigWizard.cpp:1414 msgid "" "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have " "no heated bed." msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1066 +#: src/slic3r/GUI/ConfigWizard.cpp:1417 msgid "Bed Temperature:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1515 src/slic3r/GUI/ConfigWizard.cpp:2097 +#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524 msgid "Filaments" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1515 src/slic3r/GUI/ConfigWizard.cpp:2099 +#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526 msgid "SLA Materials" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1569 +#: src/slic3r/GUI/ConfigWizard.cpp:1926 msgid "FFF Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1574 +#: src/slic3r/GUI/ConfigWizard.cpp:1931 msgid "SLA Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1810 src/slic3r/GUI/DoubleSlider.cpp:1907 -#: src/slic3r/GUI/DoubleSlider.cpp:1928 src/slic3r/GUI/GUI.cpp:246 +#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124 +#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244 msgid "Notice" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1830 +#: src/slic3r/GUI/ConfigWizard.cpp:2257 msgid "The following FFF printer models have no filament selected:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1834 +#: src/slic3r/GUI/ConfigWizard.cpp:2261 msgid "Do you want to select default filaments for these FFF printer models?" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1848 +#: src/slic3r/GUI/ConfigWizard.cpp:2275 msgid "The following SLA printer models have no materials selected:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:1852 +#: src/slic3r/GUI/ConfigWizard.cpp:2279 msgid "Do you want to select default SLA materials for these printer models?" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2060 +#: src/slic3r/GUI/ConfigWizard.cpp:2487 msgid "Select all standard printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2063 +#: src/slic3r/GUI/ConfigWizard.cpp:2490 msgid "< &Back" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2064 +#: src/slic3r/GUI/ConfigWizard.cpp:2491 msgid "&Next >" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2065 +#: src/slic3r/GUI/ConfigWizard.cpp:2492 msgid "&Finish" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2066 src/slic3r/GUI/FirmwareDialog.cpp:151 +#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151 +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245 #: src/slic3r/GUI/ProgressStatusBar.cpp:26 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644 msgid "Cancel" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2079 +#: src/slic3r/GUI/ConfigWizard.cpp:2506 msgid "Prusa FFF Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2082 +#: src/slic3r/GUI/ConfigWizard.cpp:2509 msgid "Prusa MSLA Technology Printers" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 +#: src/slic3r/GUI/ConfigWizard.cpp:2524 msgid "Filament Profiles Selection" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2097 src/slic3r/GUI/GUI_ObjectList.cpp:3637 +#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4016 msgid "Type:" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2099 +#: src/slic3r/GUI/ConfigWizard.cpp:2526 msgid "SLA Material Profiles Selection" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2099 -msgid "Layer height:" -msgstr "" - -#: src/slic3r/GUI/ConfigWizard.cpp:2196 +#: src/slic3r/GUI/ConfigWizard.cpp:2624 msgid "Configuration Assistant" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2197 +#: src/slic3r/GUI/ConfigWizard.cpp:2625 msgid "Configuration &Assistant" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2199 +#: src/slic3r/GUI/ConfigWizard.cpp:2627 msgid "Configuration Wizard" msgstr "" -#: src/slic3r/GUI/ConfigWizard.cpp:2200 +#: src/slic3r/GUI/ConfigWizard.cpp:2628 msgid "Configuration &Wizard" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:81 +#: src/slic3r/GUI/DoubleSlider.cpp:110 msgid "Place bearings in slots and resume printing" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:952 +#: src/slic3r/GUI/DoubleSlider.cpp:1064 msgid "One layer mode" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:954 +#: src/slic3r/GUI/DoubleSlider.cpp:1066 msgid "Discard all custom changes" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:957 +#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852 +msgid "Jump to move" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1075 #, possible-c-format msgid "Jump to height %s or Set extruder sequence for the entire print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:959 src/slic3r/GUI/DoubleSlider.cpp:1531 -#: src/slic3r/GUI/DoubleSlider.cpp:1653 +#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721 +#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856 msgid "Jump to height" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:962 +#: src/slic3r/GUI/DoubleSlider.cpp:1083 msgid "Edit current color - Right click the colored slider segment" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:972 +#: src/slic3r/GUI/DoubleSlider.cpp:1093 msgid "Print mode" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:986 +#: src/slic3r/GUI/DoubleSlider.cpp:1107 msgid "Add extruder change - Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:988 +#: src/slic3r/GUI/DoubleSlider.cpp:1109 msgid "" "Add color change - Left click for predefined color or Shift + Left click for " "custom color selection" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:990 +#: src/slic3r/GUI/DoubleSlider.cpp:1111 msgid "Add color change - Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:991 +#: src/slic3r/GUI/DoubleSlider.cpp:1112 msgid "or press \"+\" key" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:993 +#: src/slic3r/GUI/DoubleSlider.cpp:1114 msgid "Add another code - Ctrl + Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:994 +#: src/slic3r/GUI/DoubleSlider.cpp:1115 msgid "Add another code - Right click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1000 +#: src/slic3r/GUI/DoubleSlider.cpp:1121 msgid "" "The sequential print is on.\n" "It's impossible to apply any custom G-code for objects printing " @@ -965,203 +1004,227 @@ msgid "" "This code won't be processed during G-code generation." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1009 +#: src/slic3r/GUI/DoubleSlider.cpp:1130 msgid "Color change (\"%1%\")" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1010 +#: src/slic3r/GUI/DoubleSlider.cpp:1131 msgid "Color change (\"%1%\") for Extruder %2%" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1012 +#: src/slic3r/GUI/DoubleSlider.cpp:1133 msgid "Pause print (\"%1%\")" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1014 +#: src/slic3r/GUI/DoubleSlider.cpp:1135 +msgid "Custom template (\"%1%\")" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1137 msgid "Extruder (tool) is changed to Extruder \"%1%\"" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1021 +#: src/slic3r/GUI/DoubleSlider.cpp:1144 msgid "Note" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1023 +#: src/slic3r/GUI/DoubleSlider.cpp:1146 msgid "" "G-code associated to this tick mark is in a conflict with print mode.\n" "Editing it will cause changes of Slider data." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1026 +#: src/slic3r/GUI/DoubleSlider.cpp:1149 msgid "" "There is a color change for extruder that won't be used till the end of " "print job.\n" "This code won't be processed during G-code generation." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1029 +#: src/slic3r/GUI/DoubleSlider.cpp:1152 msgid "" "There is an extruder change set to the same extruder.\n" "This code won't be processed during G-code generation." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1032 +#: src/slic3r/GUI/DoubleSlider.cpp:1155 msgid "" "There is a color change for extruder that has not been used before.\n" "Check your settings to avoid redundant color changes." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1037 +#: src/slic3r/GUI/DoubleSlider.cpp:1160 msgid "Delete tick mark - Left click or press \"-\" key" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1039 +#: src/slic3r/GUI/DoubleSlider.cpp:1162 msgid "Edit tick mark - Ctrl + Left click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1040 +#: src/slic3r/GUI/DoubleSlider.cpp:1163 msgid "Edit tick mark - Right click" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1136 src/slic3r/GUI/DoubleSlider.cpp:1172 -#: src/slic3r/GUI/GLCanvas3D.cpp:996 src/slic3r/GUI/GUI_ObjectList.cpp:1718 -#: src/slic3r/GUI/Tab.cpp:2315 src/libslic3r/GCode/PreviewData.cpp:446 +#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297 +#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832 +#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450 #, possible-c-format msgid "Extruder %d" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1137 src/slic3r/GUI/GUI_ObjectList.cpp:1719 +#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833 msgid "active" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1146 +#: src/slic3r/GUI/DoubleSlider.cpp:1273 msgid "Switch code to Change extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1146 src/slic3r/GUI/GUI_ObjectList.cpp:1685 +#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800 msgid "Change extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1147 +#: src/slic3r/GUI/DoubleSlider.cpp:1274 msgid "Change extruder (N/A)" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1149 +#: src/slic3r/GUI/DoubleSlider.cpp:1276 msgid "Use another extruder" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1173 +#: src/slic3r/GUI/DoubleSlider.cpp:1298 msgid "used" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1181 +#: src/slic3r/GUI/DoubleSlider.cpp:1306 msgid "Switch code to Color change (%1%) for:" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1182 +#: src/slic3r/GUI/DoubleSlider.cpp:1307 msgid "Add color change (%1%) for:" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1479 +#: src/slic3r/GUI/DoubleSlider.cpp:1665 msgid "Add color change" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1489 +#: src/slic3r/GUI/DoubleSlider.cpp:1675 msgid "Add pause print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1492 +#: src/slic3r/GUI/DoubleSlider.cpp:1679 +msgid "Add custom template" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1682 msgid "Add custom G-code" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1510 +#: src/slic3r/GUI/DoubleSlider.cpp:1700 msgid "Edit color" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1511 +#: src/slic3r/GUI/DoubleSlider.cpp:1701 msgid "Edit pause print message" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1512 +#: src/slic3r/GUI/DoubleSlider.cpp:1702 msgid "Edit custom G-code" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1518 +#: src/slic3r/GUI/DoubleSlider.cpp:1708 msgid "Delete color change" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1519 +#: src/slic3r/GUI/DoubleSlider.cpp:1709 msgid "Delete tool change" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1520 +#: src/slic3r/GUI/DoubleSlider.cpp:1710 msgid "Delete pause print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1521 +#: src/slic3r/GUI/DoubleSlider.cpp:1711 msgid "Delete custom G-code" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1534 +#: src/slic3r/GUI/DoubleSlider.cpp:1728 msgid "Set extruder sequence for the entire print" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1620 +#: src/slic3r/GUI/DoubleSlider.cpp:1814 msgid "Enter custom G-code used on current layer" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1621 +#: src/slic3r/GUI/DoubleSlider.cpp:1815 msgid "Custom G-code on current layer (%1% mm)." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1636 +#: src/slic3r/GUI/DoubleSlider.cpp:1830 msgid "Enter short message shown on Printer display when a print is paused" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1637 +#: src/slic3r/GUI/DoubleSlider.cpp:1831 msgid "Message for pause print on current layer (%1% mm)." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1652 +#: src/slic3r/GUI/DoubleSlider.cpp:1851 +msgid "Enter the move you want to jump to" +msgstr "" + +#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855 msgid "Enter the height you want to jump to" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1901 +#: src/slic3r/GUI/DoubleSlider.cpp:2118 msgid "The last color change data was saved for a single extruder printing." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1902 src/slic3r/GUI/DoubleSlider.cpp:1918 +#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134 msgid "The last color change data was saved for a multi extruder printing." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1904 +#: src/slic3r/GUI/DoubleSlider.cpp:2121 msgid "Your current changes will delete all saved color changes." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1905 src/slic3r/GUI/DoubleSlider.cpp:1926 +#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142 msgid "Are you sure you want to continue?" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1919 +#: src/slic3r/GUI/DoubleSlider.cpp:2135 msgid "" "Select YES if you want to delete all saved tool changes, \n" "NO if you want all tool changes switch to color changes, \n" "or CANCEL to leave it unchanged." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1922 +#: src/slic3r/GUI/DoubleSlider.cpp:2138 msgid "Do you want to delete all saved tool changes?" msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1924 +#: src/slic3r/GUI/DoubleSlider.cpp:2140 msgid "" "The last color change data was saved for a multi extruder printing with tool " "changes for whole print." msgstr "" -#: src/slic3r/GUI/DoubleSlider.cpp:1925 +#: src/slic3r/GUI/DoubleSlider.cpp:2141 msgid "Your current changes will delete all saved extruder (tool) changes." msgstr "" +#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496 +#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4454 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4464 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4499 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:202 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:259 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:284 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:492 +msgid "default" +msgstr "" + #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:23 msgid "Set extruder sequence" msgstr "" @@ -1171,10 +1234,10 @@ msgid "Set extruder change for every" msgstr "" #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52 -#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994 -#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690 -#: src/libslic3r/PrintConfig.cpp:1757 src/libslic3r/PrintConfig.cpp:1937 -#: src/libslic3r/PrintConfig.cpp:1983 +#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038 +#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798 +#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072 +#: src/libslic3r/PrintConfig.cpp:2118 msgid "layers" msgstr "" @@ -1190,33 +1253,34 @@ msgstr "" msgid "Add extruder to sequence" msgstr "" -#: src/slic3r/GUI/Field.cpp:136 +#: src/slic3r/GUI/Field.cpp:184 msgid "default value" msgstr "" -#: src/slic3r/GUI/Field.cpp:139 +#: src/slic3r/GUI/Field.cpp:187 msgid "parameter name" msgstr "" -#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:598 +#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874 msgid "N/A" msgstr "" -#: src/slic3r/GUI/Field.cpp:175 +#: src/slic3r/GUI/Field.cpp:223 #, possible-c-format msgid "%s doesn't support percentage" msgstr "" -#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226 -#: src/slic3r/GUI/Field.cpp:1298 src/slic3r/GUI/GUI_ObjectLayers.cpp:383 +#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274 +#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413 msgid "Invalid numeric input." msgstr "" -#: src/slic3r/GUI/Field.cpp:204 src/slic3r/GUI/Field.cpp:1310 +#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370 msgid "Input value is out of range" msgstr "" -#: src/slic3r/GUI/Field.cpp:240 +#: src/slic3r/GUI/Field.cpp:288 #, possible-c-format msgid "" "Do you mean %s%% instead of %s %s?\n" @@ -1224,7 +1288,7 @@ msgid "" "or NO if you are sure that %s %s is a correct value." msgstr "" -#: src/slic3r/GUI/Field.cpp:243 +#: src/slic3r/GUI/Field.cpp:291 msgid "Parameter validation" msgstr "" @@ -1300,8 +1364,9 @@ msgstr "" msgid "Firmware image:" msgstr "" -#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1716 -#: src/slic3r/GUI/Tab.cpp:1778 +#: src/slic3r/GUI/FirmwareDialog.cpp:805 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327 msgid "Browse" msgstr "" @@ -1334,8 +1399,8 @@ msgid "Advanced: Output log" msgstr "" #: src/slic3r/GUI/FirmwareDialog.cpp:852 -#: src/slic3r/GUI/Mouse3DController.cpp:371 -#: src/slic3r/GUI/PrintHostDialogs.cpp:161 +#: src/slic3r/GUI/Mouse3DController.cpp:353 +#: src/slic3r/GUI/PrintHostDialogs.cpp:159 msgid "Close" msgstr "" @@ -1353,405 +1418,715 @@ msgstr "" msgid "Cancelling..." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:238 src/slic3r/GUI/GLCanvas3D.cpp:4962 +#: src/slic3r/GUI/GCodeViewer.cpp:223 +msgid "Tool position" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:933 +msgid "Generating toolpaths" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:1318 +msgid "Generating vertex buffer" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:1392 +msgid "Generating index buffers" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2071 +msgid "Click to hide" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2071 +msgid "Click to show" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2183 +msgid "up to" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2189 +msgid "above" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2197 +msgid "from" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2197 +msgid "to" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233 +#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787 +#: src/libslic3r/GCode/PreviewData.cpp:350 +msgid "Feature type" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233 +#: src/slic3r/GUI/RammingChart.cpp:76 +msgid "Time" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2233 +msgid "Percentage" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352 +msgid "Height (mm)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354 +msgid "Width (mm)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356 +msgid "Speed (mm/s)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358 +msgid "Fan Speed (%)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360 +msgid "Volumetric flow rate (mm³/s)" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281 +#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693 +#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270 +#: src/libslic3r/GCode/PreviewData.cpp:362 +msgid "Tool" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282 +#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364 +msgid "Color Print" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313 +#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296 +#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515 +#: src/libslic3r/PrintConfig.cpp:523 +msgid "Extruder" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2289 +msgid "Default color" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2313 +msgid "default color" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438 +msgid "Color change" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451 +msgid "Print" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460 +#: src/slic3r/GUI/Plater.cpp:1199 +msgid "Pause" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445 +msgid "Event" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445 +msgid "Remaining time" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2445 +msgid "Duration" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335 +#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295 +msgid "Travel" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2492 +msgid "Movement" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2493 +msgid "Extrusion" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670 +#: src/slic3r/GUI/Tab.cpp:2539 +msgid "Retraction" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320 +#: src/slic3r/GUI/GUI_Preview.cpp:333 +msgid "Options" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336 +#: src/slic3r/GUI/GUI_Preview.cpp:1472 +msgid "Retractions" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337 +#: src/slic3r/GUI/GUI_Preview.cpp:1473 +msgid "Deretractions" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474 +msgid "Tool changes" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475 +msgid "Color changes" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2532 src/slic3r/GUI/GUI_Preview.cpp:1476 +msgid "Pause prints" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2533 src/slic3r/GUI/GUI_Preview.cpp:1477 +msgid "Custom GCodes" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557 +#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125 +#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196 +msgid "Estimated printing time" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2552 +msgid "Normal mode" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2557 +msgid "Stealth mode" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2586 +msgid "Show stealth mode" +msgstr "" + +#: src/slic3r/GUI/GCodeViewer.cpp:2591 +msgid "Show normal mode" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978 msgid "Variable layer height" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:241 +#: src/slic3r/GUI/GLCanvas3D.cpp:233 msgid "Left mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:244 +#: src/slic3r/GUI/GLCanvas3D.cpp:235 msgid "Add detail" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:247 +#: src/slic3r/GUI/GLCanvas3D.cpp:237 msgid "Right mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:250 +#: src/slic3r/GUI/GLCanvas3D.cpp:239 msgid "Remove detail" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:253 +#: src/slic3r/GUI/GLCanvas3D.cpp:241 msgid "Shift + Left mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:256 +#: src/slic3r/GUI/GLCanvas3D.cpp:243 msgid "Reset to base" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:259 +#: src/slic3r/GUI/GLCanvas3D.cpp:245 msgid "Shift + Right mouse button:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:262 +#: src/slic3r/GUI/GLCanvas3D.cpp:247 msgid "Smoothing" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:265 +#: src/slic3r/GUI/GLCanvas3D.cpp:249 msgid "Mouse wheel:" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:268 +#: src/slic3r/GUI/GLCanvas3D.cpp:251 msgid "Increase/decrease edit area" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:271 +#: src/slic3r/GUI/GLCanvas3D.cpp:254 msgid "Adaptive" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:277 +#: src/slic3r/GUI/GLCanvas3D.cpp:260 msgid "Quality / Speed" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:281 +#: src/slic3r/GUI/GLCanvas3D.cpp:263 msgid "Higher print quality versus higher print speed." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:292 +#: src/slic3r/GUI/GLCanvas3D.cpp:274 msgid "Smooth" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:298 src/libslic3r/PrintConfig.cpp:511 +#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547 msgid "Radius" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:308 +#: src/slic3r/GUI/GLCanvas3D.cpp:290 msgid "Keep min" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:317 +#: src/slic3r/GUI/GLCanvas3D.cpp:299 msgid "Reset" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:607 +#: src/slic3r/GUI/GLCanvas3D.cpp:565 msgid "Variable layer height - Manual edit" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:693 -msgid "An object outside the print area was detected" +#: src/slic3r/GUI/GLCanvas3D.cpp:633 +msgid "An object outside the print area was detected." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:694 -msgid "A toolpath outside the print area was detected" +#: src/slic3r/GUI/GLCanvas3D.cpp:634 +msgid "A toolpath outside the print area was detected." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:695 -msgid "SLA supports outside the print area were detected" +#: src/slic3r/GUI/GLCanvas3D.cpp:635 +msgid "SLA supports outside the print area were detected." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:696 -msgid "Some objects are not visible" +#: src/slic3r/GUI/GLCanvas3D.cpp:636 +msgid "Some objects are not visible." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:698 +#: src/slic3r/GUI/GLCanvas3D.cpp:638 msgid "" -"An object outside the print area was detected\n" -"Resolve the current problem to continue slicing" +"An object outside the print area was detected.\n" +"Resolve the current problem to continue slicing." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:923 src/slic3r/GUI/GLCanvas3D.cpp:952 +#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939 msgid "Default print color" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:953 src/slic3r/GUI/GLCanvas3D.cpp:962 -#: src/slic3r/GUI/GLCanvas3D.cpp:1001 +#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949 +#: src/slic3r/GUI/GLCanvas3D.cpp:988 msgid "Pause print or custom G-code" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:974 +#: src/slic3r/GUI/GLCanvas3D.cpp:961 #, possible-c-format msgid "up to %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:978 +#: src/slic3r/GUI/GLCanvas3D.cpp:965 #, possible-c-format msgid "above %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:982 +#: src/slic3r/GUI/GLCanvas3D.cpp:969 #, possible-c-format msgid "%.2f - %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1014 +#: src/slic3r/GUI/GLCanvas3D.cpp:1001 #, possible-c-format msgid "Color change for Extruder %d at %.2f mm" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1332 +#: src/slic3r/GUI/GLCanvas3D.cpp:1312 msgid "Seq." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1439 +#: src/slic3r/GUI/GLCanvas3D.cpp:1418 msgid "canvas_tooltip" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1466 -msgid "Slope visualization" -msgstr "" - -#: src/slic3r/GUI/GLCanvas3D.cpp:1468 -msgid "Facets' normal angle range (degrees)" -msgstr "" - -#: src/slic3r/GUI/GLCanvas3D.cpp:1495 src/slic3r/GUI/GUI_ObjectList.cpp:1718 -#: src/libslic3r/PrintConfig.cpp:335 -msgid "Default" -msgstr "" - -#: src/slic3r/GUI/GLCanvas3D.cpp:1880 +#: src/slic3r/GUI/GLCanvas3D.cpp:1778 msgid "Variable layer height - Reset" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1888 +#: src/slic3r/GUI/GLCanvas3D.cpp:1786 msgid "Variable layer height - Adaptive" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:1896 +#: src/slic3r/GUI/GLCanvas3D.cpp:1794 msgid "Variable layer height - Smooth all" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:2332 +#: src/slic3r/GUI/GLCanvas3D.cpp:2226 msgid "Mirror Object" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:3224 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:519 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:746 +#: src/slic3r/GUI/GLCanvas3D.cpp:3165 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520 msgid "Gizmo-Move" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:3308 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:748 +#: src/slic3r/GUI/GLCanvas3D.cpp:3249 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522 msgid "Gizmo-Rotate" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:3880 +#: src/slic3r/GUI/GLCanvas3D.cpp:3810 msgid "Move Object" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4425 +#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939 +msgid "Switch to Settings" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939 +msgid "Print Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940 +msgid "Filament Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940 +msgid "Material Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941 +msgid "Printer Settings Tab" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4361 msgid "Undo History" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4425 +#: src/slic3r/GUI/GLCanvas3D.cpp:4361 msgid "Redo History" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4446 +#: src/slic3r/GUI/GLCanvas3D.cpp:4382 #, possible-c-format msgid "Undo %1$d Action" msgid_plural "Undo %1$d Actions" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4446 +#: src/slic3r/GUI/GLCanvas3D.cpp:4382 #, possible-c-format msgid "Redo %1$d Action" msgid_plural "Redo %1$d Actions" msgstr[0] "" msgstr[1] "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4856 +#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426 +msgid "Search" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4416 src/slic3r/GUI/GLCanvas3D.cpp:4424 +#: src/slic3r/GUI/Search.cpp:433 +msgid "Type here to search" +msgstr "" + +#: src/slic3r/GUI/GLCanvas3D.cpp:4833 msgid "Add..." msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4864 src/slic3r/GUI/GUI_ObjectList.cpp:1732 -#: src/slic3r/GUI/Plater.cpp:3935 src/slic3r/GUI/Plater.cpp:3957 -#: src/slic3r/GUI/Tab.cpp:3155 +#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846 +#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871 +#: src/slic3r/GUI/Tab.cpp:3423 msgid "Delete" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4873 src/slic3r/GUI/KBShortcutsDialog.cpp:131 -#: src/slic3r/GUI/Plater.cpp:4705 +#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124 +#: src/slic3r/GUI/Plater.cpp:4774 msgid "Delete all" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4882 src/slic3r/GUI/KBShortcutsDialog.cpp:160 -#: src/slic3r/GUI/Plater.cpp:2815 +#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151 +#: src/slic3r/GUI/Plater.cpp:1549 msgid "Arrange" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4882 src/slic3r/GUI/KBShortcutsDialog.cpp:161 +#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152 msgid "Arrange selection" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4894 +#: src/slic3r/GUI/GLCanvas3D.cpp:4871 msgid "Copy" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4903 +#: src/slic3r/GUI/GLCanvas3D.cpp:4880 msgid "Paste" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4915 src/slic3r/GUI/Plater.cpp:3794 -#: src/slic3r/GUI/Plater.cpp:3806 src/slic3r/GUI/Plater.cpp:3944 +#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708 +#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858 msgid "Add instance" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/Plater.cpp:3946 +#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860 msgid "Remove instance" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4939 +#: src/slic3r/GUI/GLCanvas3D.cpp:4916 msgid "Split to objects" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:4949 src/slic3r/GUI/GUI_ObjectList.cpp:1501 +#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618 msgid "Split to parts" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5013 src/slic3r/GUI/KBShortcutsDialog.cpp:132 -#: src/slic3r/GUI/MainFrame.cpp:717 +#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125 +#: src/slic3r/GUI/MainFrame.cpp:1187 msgid "Undo" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5013 src/slic3r/GUI/GLCanvas3D.cpp:5052 +#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067 msgid "Click right mouse button to open/close History" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5036 +#: src/slic3r/GUI/GLCanvas3D.cpp:5051 msgid "Next Undo action: %1%" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5052 src/slic3r/GUI/KBShortcutsDialog.cpp:133 -#: src/slic3r/GUI/MainFrame.cpp:720 +#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126 +#: src/slic3r/GUI/MainFrame.cpp:1190 msgid "Redo" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:5074 +#: src/slic3r/GUI/GLCanvas3D.cpp:5089 msgid "Next Redo action: %1%" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:7064 +#: src/slic3r/GUI/GLCanvas3D.cpp:7193 msgid "Selection-Add from rectangle" msgstr "" -#: src/slic3r/GUI/GLCanvas3D.cpp:7083 +#: src/slic3r/GUI/GLCanvas3D.cpp:7212 msgid "Selection-Remove from rectangle" msgstr "" -#: src/slic3r/GUI/GLCanvas3DManager.cpp:365 -#, possible-c-format -msgid "" -"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n" -"while OpenGL version %s, render %s, vendor %s was detected." -msgstr "" - -#: src/slic3r/GUI/GLCanvas3DManager.cpp:368 -msgid "You may need to update your graphics card driver." -msgstr "" - -#: src/slic3r/GUI/GLCanvas3DManager.cpp:371 -msgid "" -"As a workaround, you may run PrusaSlicer with a software rendered 3D " -"graphics by running prusa-slicer.exe with the --sw_renderer parameter." -msgstr "" - -#: src/slic3r/GUI/GLCanvas3DManager.cpp:373 -msgid "Unsupported OpenGL version" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:47 -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:145 src/libslic3r/PrintConfig.cpp:3424 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601 msgid "Cut" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170 msgid "Keep upper part" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171 msgid "Keep lower part" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172 msgid "Rotate lower part upwards" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:176 +#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177 msgid "Perform cut" msgstr "" +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33 +msgid "FDM Support Editing" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57 +msgid "Clipping of view" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58 +msgid "Reset direction" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27 +msgid "Cursor size" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28 +msgid "Cursor type" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29 +msgid "Left mouse button" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47 +msgid "Enforce supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31 +msgid "Right mouse button" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373 +msgid "Block supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33 +msgid "Shift + Left mouse button" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378 +msgid "Remove selection" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35 +msgid "Remove all selection" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36 +msgid "Circle" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 +msgid "Sphere" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118 +msgid "Reset selection" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141 +msgid "Alt + Mouse wheel" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159 +msgid "Paints all facets inside, regardless of their orientation." +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173 +msgid "Ignores facets facing away from the camera." +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225 +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203 +msgid "Ctrl + Mouse wheel" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233 +msgid "Autoset custom supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235 +msgid "Threshold:" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235 +msgid "deg" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239 +msgid "Enforce" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242 +msgid "Block" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292 +msgid "Block supports by angle" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293 +msgid "Add supports by angle" +msgstr "" + #: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41 msgid "Place on face" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:38 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40 msgid "Hollow this object" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:39 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41 msgid "Preview hollowed and drilled model" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42 msgid "Offset" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43 msgid "Quality" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42 -#: src/libslic3r/PrintConfig.cpp:2951 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 +#: src/libslic3r/PrintConfig.cpp:3098 msgid "Closing distance" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45 msgid "Hole diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46 msgid "Hole depth" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47 msgid "Remove selected holes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48 msgid "Remove all holes" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56 -msgid "Clipping of view" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57 -msgid "Reset direction" -msgstr "" - -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51 msgid "Show supports" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:307 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308 msgid "Add drainage hole" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:428 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424 msgid "Delete drainage hole" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:628 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624 msgid "Hollowing parameter change" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:699 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693 msgid "Change drainage hole diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:791 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785 msgid "Hollow and drill" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:846 +#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835 msgid "Move drainage hole" msgstr "" @@ -1759,211 +2134,284 @@ msgstr "" msgid "Move" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517 -#: src/libslic3r/PrintConfig.cpp:3473 +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506 +#: src/slic3r/GUI/Mouse3DController.cpp:288 +#: src/slic3r/GUI/Mouse3DController.cpp:309 +msgid "Rotation" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961 +msgid "Optimize orientation" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221 +#: src/libslic3r/PrintConfig.cpp:3089 +msgid "Accuracy" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:233 +msgid "Least supports" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:234 +msgid "Suface quality" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562 +#: src/libslic3r/PrintConfig.cpp:3650 msgid "Rotate" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:79 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518 -#: src/libslic3r/PrintConfig.cpp:3488 +#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563 +#: src/libslic3r/PrintConfig.cpp:3665 msgid "Scale" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:46 -msgid "Head diameter" +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381 +msgid "Enforce seam" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383 +msgid "Block seam" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46 +msgid "Seam Editing" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47 -msgid "Lock supports under new islands" +msgid "Head diameter" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216 -msgid "Remove selected points" +msgid "Lock supports under new islands" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49 -msgid "Remove all points" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 +msgid "Remove selected points" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 -msgid "Apply changes" +msgid "Remove all points" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220 -msgid "Discard changes" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221 +msgid "Apply changes" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52 -msgid "Minimal points distance" +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222 +msgid "Discard changes" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53 -#: src/libslic3r/PrintConfig.cpp:2781 -msgid "Support points density" +msgid "Minimal points distance" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222 -msgid "Auto-generate points" +#: src/libslic3r/PrintConfig.cpp:2928 +msgid "Support points density" msgstr "" #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224 +msgid "Auto-generate points" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56 msgid "Manual editing" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:373 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374 msgid "Add support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:513 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514 msgid "Delete support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:693 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694 msgid "Change point head diameter" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:761 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762 msgid "Support parameter change" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:868 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869 msgid "SLA Support Points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:893 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897 msgid "SLA gizmo turned on" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:909 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911 msgid "Do you want to save your manually edited support points?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:910 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912 msgid "Save changes?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:922 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924 msgid "SLA gizmo turned off" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:953 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955 msgid "Move support point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048 msgid "Support points edit" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1125 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127 msgid "Autogeneration will erase all manually edited points." msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1126 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128 msgid "Are you sure you want to do it?" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127 src/slic3r/GUI/GUI.cpp:258 -#: src/slic3r/GUI/Tab.cpp:3085 src/slic3r/GUI/WipeTowerDialog.cpp:45 -#: src/slic3r/GUI/WipeTowerDialog.cpp:366 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502 +#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366 msgid "Warning" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1132 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134 msgid "Autogenerate support points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1179 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181 msgid "SLA gizmo keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1190 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192 msgid "Note: some shortcuts work in (non)editing mode only." msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1208 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 msgid "Left click" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1208 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 msgid "Add point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1209 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 msgid "Right click" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1209 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 msgid "Remove point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216 msgid "Drag" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 msgid "Move point" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 msgid "Add point to selection" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 msgid "Remove point from selection" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 msgid "Select by rectangle" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216 msgid "Deselect by rectangle" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 msgid "Select all points" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 msgid "Mouse wheel" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219 msgid "Move clipping plane" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220 msgid "Reset clipping plane" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221 +#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223 msgid "Switch to editing mode" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520 -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:747 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521 msgid "Gizmo-Scale" msgstr "" -#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:662 +#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639 msgid "Gizmo-Place on Face" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:234 +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39 +msgid "Supports gizmo turned on" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40 +msgid "Seam gizmo turned on" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47 +msgid "Seam gizmo turned off" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48 +msgid "Supports gizmo turned off" +msgstr "" + +#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371 +msgid "Add supports" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:243 +msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:245 +msgid "" +"Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas " +"Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:246 +msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:528 #, possible-c-format msgid "" "%s has encountered an error. It was likely caused by running out of memory. " @@ -1973,228 +2421,284 @@ msgid "" "The application will now terminate." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:237 +#: src/slic3r/GUI/GUI_App.cpp:531 msgid "Fatal error" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:554 -msgid "Changing of an application language" +#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670 +msgid "" +"Error parsing PrusaSlicer config file, it is probably corrupted. Try to " +"manually delete the file to recover from the error. Your user profiles will " +"not be affected." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:557 src/slic3r/GUI/GUI_App.cpp:565 +#: src/slic3r/GUI/GUI_App.cpp:661 +msgid "" +"Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to " +"manually delete the file to recover from the error." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:718 +#, possible-c-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653 +msgid "Remember my choice" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:759 +msgid "Loading configuration..." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:825 +msgid "Creating settings tabs..." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1078 +msgid "" +"You have the following presets with saved options for \"Print Host upload\"" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1082 +msgid "" +"But from this version of PrusaSlicer we don't show/use this information in " +"Printer Settings.\n" +"Now, this information will be exposed in physical printers settings." +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1084 +msgid "" +"By default new Printer devices will be named as \"Printer N\" during its " +"creation.\n" +"Note: This name can be changed later from the physical printers settings" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435 +msgid "Information" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115 msgid "Recreating" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:570 +#: src/slic3r/GUI/GUI_App.cpp:1120 msgid "Loading of current presets" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:575 +#: src/slic3r/GUI/GUI_App.cpp:1125 msgid "Loading of a mode view" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:654 +#: src/slic3r/GUI/GUI_App.cpp:1208 msgid "Choose one file (3MF/AMF):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:672 +#: src/slic3r/GUI/GUI_App.cpp:1220 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:733 +#: src/slic3r/GUI/GUI_App.cpp:1233 +msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1245 +msgid "Changing of an application language" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1295 msgid "Select the language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:733 +#: src/slic3r/GUI/GUI_App.cpp:1295 msgid "Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:911 +#: src/slic3r/GUI/GUI_App.cpp:1425 +msgid "modified" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1474 #, possible-c-format msgid "Run %s" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:914 +#: src/slic3r/GUI/GUI_App.cpp:1480 msgid "&Configuration Snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:914 +#: src/slic3r/GUI/GUI_App.cpp:1480 msgid "Inspect / activate configuration snapshots" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:915 +#: src/slic3r/GUI/GUI_App.cpp:1481 msgid "Take Configuration &Snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:915 +#: src/slic3r/GUI/GUI_App.cpp:1481 msgid "Capture a configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:916 +#: src/slic3r/GUI/GUI_App.cpp:1482 msgid "Check for updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:916 +#: src/slic3r/GUI/GUI_App.cpp:1482 msgid "Check for configuration updates" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:918 +#: src/slic3r/GUI/GUI_App.cpp:1487 msgid "&Preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:924 +#: src/slic3r/GUI/GUI_App.cpp:1493 msgid "Application preferences" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:927 src/slic3r/GUI/wxExtensions.cpp:756 +#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673 msgid "Simple" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:927 +#: src/slic3r/GUI/GUI_App.cpp:1504 msgid "Simple View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:929 src/slic3r/GUI/wxExtensions.cpp:758 +#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675 msgctxt "Mode" msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:929 +#: src/slic3r/GUI/GUI_App.cpp:1506 msgid "Advanced View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:930 src/slic3r/GUI/wxExtensions.cpp:759 +#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676 msgid "Expert" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:930 +#: src/slic3r/GUI/GUI_App.cpp:1507 msgid "Expert View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:935 +#: src/slic3r/GUI/GUI_App.cpp:1512 msgid "Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:935 +#: src/slic3r/GUI/GUI_App.cpp:1512 #, possible-c-format msgid "%s View Mode" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:937 +#: src/slic3r/GUI/GUI_App.cpp:1517 msgid "&Language" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:939 +#: src/slic3r/GUI/GUI_App.cpp:1522 msgid "Flash printer &firmware" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:939 +#: src/slic3r/GUI/GUI_App.cpp:1522 msgid "Upload a firmware image into an Arduino based printer" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:1540 msgid "Taking configuration snapshot" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:954 +#: src/slic3r/GUI/GUI_App.cpp:1540 msgid "Snapshot name" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1001 +#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614 +msgid "Language selection" +msgstr "" + +#: src/slic3r/GUI/GUI_App.cpp:1608 msgid "" "Switching the language will trigger application restart.\n" "You will lose content of the plater." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1003 +#: src/slic3r/GUI/GUI_App.cpp:1610 msgid "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1004 -msgid "Language selection" -msgstr "" - -#: src/slic3r/GUI/GUI_App.cpp:1028 +#: src/slic3r/GUI/GUI_App.cpp:1645 msgid "&Configuration" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1052 -msgid "The presets on the following tabs were modified" +#: src/slic3r/GUI/GUI_App.cpp:1676 +msgid "The preset(s) modifications are successfully saved" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1052 src/slic3r/GUI/Tab.cpp:2945 -msgid "Discard changes and continue anyway?" -msgstr "" - -#: src/slic3r/GUI/GUI_App.cpp:1055 -msgid "Unsaved Presets" -msgstr "" - -#: src/slic3r/GUI/GUI_App.cpp:1204 src/slic3r/GUI/Tab.cpp:2957 +#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187 msgid "It's impossible to print multi-part object(s) with SLA technology." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1205 +#: src/slic3r/GUI/GUI_App.cpp:1877 msgid "Please check and fix your object list." msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1206 src/slic3r/GUI/Plater.cpp:2377 -#: src/slic3r/GUI/Tab.cpp:2959 +#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210 +#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189 msgid "Attention!" msgstr "" -#: src/slic3r/GUI/GUI_App.cpp:1223 +#: src/slic3r/GUI/GUI_App.cpp:1895 msgid "Select a gcode file:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 msgid "Start at height" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 msgid "Stop at height" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:158 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161 msgid "Remove layer range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162 +#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165 msgid "Add layer range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95 -#: src/slic3r/GUI/GUI_ObjectList.cpp:617 src/libslic3r/PrintConfig.cpp:72 -#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184 -#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470 -#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890 -#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374 -#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622 -#: src/libslic3r/PrintConfig.cpp:2081 src/libslic3r/PrintConfig.cpp:2140 -#: src/libslic3r/PrintConfig.cpp:2149 +#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92 +#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72 +#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218 +#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506 +#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932 +#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482 +#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730 +#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276 +#: src/libslic3r/PrintConfig.cpp:2285 msgid "Layers and Perimeters" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97 -#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/slic3r/GUI/GUI_Preview.cpp:305 -#: src/slic3r/GUI/Tab.cpp:1188 src/slic3r/GUI/Tab.cpp:1189 -#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370 -#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1873 -#: src/libslic3r/PrintConfig.cpp:1879 src/libslic3r/PrintConfig.cpp:1887 -#: src/libslic3r/PrintConfig.cpp:1899 src/libslic3r/PrintConfig.cpp:1909 -#: src/libslic3r/PrintConfig.cpp:1917 src/libslic3r/PrintConfig.cpp:1932 -#: src/libslic3r/PrintConfig.cpp:1953 src/libslic3r/PrintConfig.cpp:1965 -#: src/libslic3r/PrintConfig.cpp:1981 src/libslic3r/PrintConfig.cpp:1990 -#: src/libslic3r/PrintConfig.cpp:1999 src/libslic3r/PrintConfig.cpp:2010 -#: src/libslic3r/PrintConfig.cpp:2024 src/libslic3r/PrintConfig.cpp:2032 -#: src/libslic3r/PrintConfig.cpp:2033 src/libslic3r/PrintConfig.cpp:2042 -#: src/libslic3r/PrintConfig.cpp:2050 src/libslic3r/PrintConfig.cpp:2064 +#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95 +#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311 +#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450 +#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356 +#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610 +#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014 +#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034 +#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052 +#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088 +#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116 +#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134 +#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159 +#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168 +#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185 +#: src/libslic3r/PrintConfig.cpp:2199 msgid "Support material" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101 -#: src/slic3r/GUI/GUI_ObjectList.cpp:623 src/libslic3r/PrintConfig.cpp:2259 -#: src/libslic3r/PrintConfig.cpp:2267 +#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99 +#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395 +#: src/libslic3r/PrintConfig.cpp:2403 msgid "Wipe options" msgstr "" @@ -2218,411 +2722,432 @@ msgstr "" msgid "Add support blocker" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:620 -#: src/slic3r/GUI/GUI_Preview.cpp:283 src/slic3r/GUI/Tab.cpp:1213 -#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458 -#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048 -#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668 -#: src/libslic3r/PrintConfig.cpp:1723 src/libslic3r/PrintConfig.cpp:1775 -#: src/libslic3r/PrintConfig.cpp:2125 +#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653 +#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420 +#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348 +#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132 +#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156 +msgid "Ironing" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655 +#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474 +#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494 +#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092 +#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539 +#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831 +#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261 msgid "Speed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:621 -#: src/slic3r/GUI/Tab.cpp:1248 src/slic3r/GUI/Tab.cpp:1871 -#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002 -#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1744 -#: src/libslic3r/PrintConfig.cpp:1945 src/libslic3r/PrintConfig.cpp:1972 +#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656 +#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072 +#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046 +#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852 +#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107 msgid "Extruders" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:622 -#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555 -#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010 -#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1764 -#: src/libslic3r/PrintConfig.cpp:1954 src/libslic3r/PrintConfig.cpp:2113 +#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657 +#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591 +#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054 +#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872 +#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249 msgid "Extrusion Width" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:626 -#: src/slic3r/GUI/Tab.cpp:1154 src/slic3r/GUI/Tab.cpp:1169 -#: src/slic3r/GUI/Tab.cpp:1269 src/slic3r/GUI/Tab.cpp:1272 -#: src/slic3r/GUI/Tab.cpp:1536 src/slic3r/GUI/Tab.cpp:2000 -#: src/slic3r/GUI/Tab.cpp:3730 src/libslic3r/PrintConfig.cpp:88 -#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223 -#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2283 -#: src/libslic3r/PrintConfig.cpp:2455 +#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661 +#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430 +#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534 +#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152 +#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90 +#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257 +#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419 +#: src/libslic3r/PrintConfig.cpp:2591 msgid "Advanced" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:628 -#: src/slic3r/GUI/Plater.cpp:502 src/slic3r/GUI/Tab.cpp:3671 -#: src/slic3r/GUI/Tab.cpp:3672 src/libslic3r/PrintConfig.cpp:2621 -#: src/libslic3r/PrintConfig.cpp:2628 src/libslic3r/PrintConfig.cpp:2637 -#: src/libslic3r/PrintConfig.cpp:2646 src/libslic3r/PrintConfig.cpp:2656 -#: src/libslic3r/PrintConfig.cpp:2692 src/libslic3r/PrintConfig.cpp:2699 -#: src/libslic3r/PrintConfig.cpp:2710 src/libslic3r/PrintConfig.cpp:2720 -#: src/libslic3r/PrintConfig.cpp:2729 src/libslic3r/PrintConfig.cpp:2742 -#: src/libslic3r/PrintConfig.cpp:2752 src/libslic3r/PrintConfig.cpp:2761 -#: src/libslic3r/PrintConfig.cpp:2771 src/libslic3r/PrintConfig.cpp:2782 -#: src/libslic3r/PrintConfig.cpp:2790 +#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663 +#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014 +#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757 +#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773 +#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792 +#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839 +#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857 +#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876 +#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899 +#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918 +#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937 msgid "Supports" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:629 -#: src/slic3r/GUI/Plater.cpp:642 src/slic3r/GUI/Tab.cpp:3705 -#: src/slic3r/GUI/Tab.cpp:3706 src/libslic3r/PrintConfig.cpp:2798 -#: src/libslic3r/PrintConfig.cpp:2805 src/libslic3r/PrintConfig.cpp:2819 -#: src/libslic3r/PrintConfig.cpp:2830 src/libslic3r/PrintConfig.cpp:2840 -#: src/libslic3r/PrintConfig.cpp:2862 src/libslic3r/PrintConfig.cpp:2873 -#: src/libslic3r/PrintConfig.cpp:2880 src/libslic3r/PrintConfig.cpp:2887 -#: src/libslic3r/PrintConfig.cpp:2898 src/libslic3r/PrintConfig.cpp:2907 -#: src/libslic3r/PrintConfig.cpp:2916 +#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664 +#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055 +#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127 +#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952 +#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977 +#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009 +#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027 +#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045 +#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063 msgid "Pad" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3723 -#: src/slic3r/GUI/Tab.cpp:3724 src/libslic3r/SLA/Hollowing.cpp:46 -#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67 -#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2926 -#: src/libslic3r/PrintConfig.cpp:2933 src/libslic3r/PrintConfig.cpp:2943 -#: src/libslic3r/PrintConfig.cpp:2952 +#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073 +#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45 +#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66 +#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073 +#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090 +#: src/libslic3r/PrintConfig.cpp:3099 msgid "Hollowing" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:282 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153 +#: src/slic3r/GUI/GUI_ObjectList.cpp:284 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161 msgid "Name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:290 src/slic3r/GUI/Tab.cpp:1500 -#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487 -msgid "Extruder" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:294 src/slic3r/GUI/GUI_ObjectList.cpp:407 +#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441 msgid "Editing" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:352 +#: src/slic3r/GUI/GUI_ObjectList.cpp:386 #, possible-c-format msgid "Auto-repaired (%d errors):" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:359 +#: src/slic3r/GUI/GUI_ObjectList.cpp:393 msgid "degenerate facets" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:360 +#: src/slic3r/GUI/GUI_ObjectList.cpp:394 msgid "edges fixed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:361 +#: src/slic3r/GUI/GUI_ObjectList.cpp:395 msgid "facets removed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:362 +#: src/slic3r/GUI/GUI_ObjectList.cpp:396 msgid "facets added" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:363 +#: src/slic3r/GUI/GUI_ObjectList.cpp:397 msgid "facets reversed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:364 +#: src/slic3r/GUI/GUI_ObjectList.cpp:398 msgid "backwards edges" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:372 +#: src/slic3r/GUI/GUI_ObjectList.cpp:406 msgid "Right button click the icon to fix STL through Netfabb" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:409 +#: src/slic3r/GUI/GUI_ObjectList.cpp:443 msgid "Right button click the icon to change the object settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:411 +#: src/slic3r/GUI/GUI_ObjectList.cpp:445 msgid "Click the icon to change the object settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:415 +#: src/slic3r/GUI/GUI_ObjectList.cpp:449 msgid "Right button click the icon to change the object printable property" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:417 +#: src/slic3r/GUI/GUI_ObjectList.cpp:451 msgid "Click the icon to change the object printable property" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:462 src/slic3r/GUI/GUI_ObjectList.cpp:474 -#: src/slic3r/GUI/GUI_ObjectList.cpp:931 src/slic3r/GUI/GUI_ObjectList.cpp:4051 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4061 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4096 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:202 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:259 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:284 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:492 -#: src/slic3r/GUI/ObjectDataViewModel.cpp:1755 -msgid "default" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:540 +#: src/slic3r/GUI/GUI_ObjectList.cpp:574 msgid "Change Extruder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:555 +#: src/slic3r/GUI/GUI_ObjectList.cpp:589 msgid "Rename Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:555 +#: src/slic3r/GUI/GUI_ObjectList.cpp:589 msgid "Rename Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1105 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3865 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1215 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4244 msgid "Instances to Separated Objects" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1120 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1230 msgid "Volumes in Object reordered" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1120 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1230 msgid "Object reordered" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1196 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1544 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1550 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1863 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1306 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1661 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1667 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2008 #, possible-c-format msgid "Quick Add Settings (%s)" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1279 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1396 msgid "Select showing settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1328 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1445 msgid "Add Settings for Layers" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1329 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 msgid "Add Settings for Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1330 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1447 msgid "Add Settings for Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1400 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1517 msgid "Add Settings Bundle for Height range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1401 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1518 msgid "Add Settings Bundle for Sub-object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1402 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1519 msgid "Add Settings Bundle for Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1441 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1558 msgid "Load" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1478 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1482 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1595 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1599 msgid "Box" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 msgid "Cylinder" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 -msgid "Sphere" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectList.cpp:1446 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 msgid "Slab" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1514 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1631 msgid "Height range Modifier" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1523 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1640 msgid "Add settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1603 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1718 msgid "Change type" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1613 -#: src/slic3r/GUI/GUI_ObjectList.cpp:1625 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1728 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1740 msgid "Set as a Separated Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1625 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1740 msgid "Set as a Separated Objects" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1750 msgid "Printable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1650 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1765 msgid "Rename" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1661 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1776 msgid "Fix through the Netfabb" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1671 src/slic3r/GUI/Plater.cpp:3970 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884 msgid "Export as STL" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1678 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4040 src/slic3r/GUI/Plater.cpp:3938 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1793 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852 msgid "Reload the selected volumes from disk" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1685 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1800 msgid "Set extruder for selected items" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1738 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369 +msgid "Default" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1852 msgid "Scale to print volume" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1738 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1852 msgid "Scale the selected object to fit the print volume" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1807 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2065 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886 +msgid "Convert from imperial units" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886 +msgid "Revert conversion from imperial units" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1868 +#: src/slic3r/GUI/GUI_ObjectList.cpp:1876 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641 +msgid "Merge" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1868 +msgid "Merge objects to the one multipart object" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1876 +msgid "Merge objects to the one single object" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:1953 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2210 msgid "Add Shape" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1893 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2038 msgid "Load Part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:1932 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2077 msgid "Error!" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2007 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2152 msgid "Add Generic Subobject" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2036 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2181 msgid "Generic" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2154 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2256 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2307 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2408 msgid "Last instance of an object cannot be deleted." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2166 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2319 msgid "Delete Settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2190 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2341 msgid "Delete All Instances from Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2206 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2357 msgid "Delete Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2237 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2389 msgid "From Object List You can't delete the last solid part from object." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2241 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2393 msgid "Delete Subobject" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2260 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2412 msgid "Delete Instance" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2284 src/slic3r/GUI/Plater.cpp:2978 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771 msgid "" "The selected object couldn't be split because it contains only one part." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2288 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2440 msgid "Split to Parts" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2342 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2576 +msgid "Merged" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2660 +msgid "Merge all parts to the one single object" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectList.cpp:2692 msgid "Add Layers" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2468 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2846 msgid "Group manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2480 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2858 msgid "Object manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2493 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2871 msgid "Object Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2497 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2875 msgid "Part Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2502 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2880 msgid "Layer range Settings to modify" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2508 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2886 msgid "Part manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2514 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2892 msgid "Instance manipulation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2521 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2899 msgid "Height ranges" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2521 +#: src/slic3r/GUI/GUI_ObjectList.cpp:2899 msgid "Settings for height range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2707 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3083 msgid "Delete Selected Item" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2844 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3221 msgid "Delete Selected" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:2920 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2948 -#: src/slic3r/GUI/GUI_ObjectList.cpp:2968 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3297 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3325 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3345 msgid "Add Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3014 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3391 msgid "" "Cannot insert a new layer range after the current layer range.\n" "The next layer range is too thin to be split to two\n" "without violating the minimum layer height." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3018 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3395 msgid "" "Cannot insert a new layer range between the current and the next layer " "range.\n" @@ -2630,206 +3155,208 @@ msgid "" "is thinner than the minimum layer height allowed." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3023 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3400 msgid "" "Cannot insert a new layer range after the current layer range.\n" "Current layer range overlaps with the next layer range." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3082 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3459 msgid "Edit Height Range" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3375 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3754 msgid "Selection-Remove from list" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3383 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3762 msgid "Selection-Add from list" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3501 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3880 msgid "Object or Instance" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3502 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3881 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3502 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3881 msgid "Layer" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3504 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3883 msgid "Unsupported selection" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3884 #, possible-c-format msgid "You started your selection with %s Item." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3506 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3885 #, possible-c-format msgid "In this mode you can select only other %s Items%s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3509 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3888 msgid "of a current Object" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3514 -#: src/slic3r/GUI/GUI_ObjectList.cpp:3589 src/slic3r/GUI/Plater.cpp:143 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3893 +#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147 msgid "Info" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3630 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4009 msgid "You can't change a type of the last solid part of the object." msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Modifier" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Support Enforcer" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3635 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4014 msgid "Support Blocker" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3637 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4016 msgid "Select type of part" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3642 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4021 msgid "Change Part Type" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3887 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4266 msgid "Enter new name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3887 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4266 msgid "Renaming" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3903 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4010 src/slic3r/GUI/Tab.cpp:3529 -#: src/slic3r/GUI/Tab.cpp:3533 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4409 +#: src/slic3r/GUI/SavePresetDialog.cpp:116 +#: src/slic3r/GUI/SavePresetDialog.cpp:124 msgid "The supplied name is not valid;" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:3904 -#: src/slic3r/GUI/GUI_ObjectList.cpp:4011 src/slic3r/GUI/Tab.cpp:3530 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4283 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4410 +#: src/slic3r/GUI/SavePresetDialog.cpp:117 msgid "the following characters are not allowed:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4055 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4458 msgid "Select extruder number:" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4056 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4459 msgid "This extruder will be set for selected items" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4081 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4484 msgid "Change Extruders" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4178 src/slic3r/GUI/Selection.cpp:1481 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513 msgid "Set Printable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectList.cpp:4178 src/slic3r/GUI/Selection.cpp:1481 +#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513 msgid "Set Unprintable" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111 msgid "World coordinates" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112 msgid "Local coordinates" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88 msgid "Select coordinate space, in which the transformation will be performed." msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623 msgid "Object name" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505 msgid "Position" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458 -#: src/slic3r/GUI/Mouse3DController.cpp:295 -#: src/slic3r/GUI/Mouse3DController.cpp:318 -msgid "Rotation" -msgstr "" - -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271 #, possible-c-format msgid "Toggle %c axis mirroring" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305 msgid "Set Mirror" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487 +msgid "in" +msgstr "" + +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357 msgid "Drop to bed" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372 msgid "Reset rotation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394 msgid "Reset Rotation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397 -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409 msgid "Reset scale" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507 msgid "Scale factors" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561 msgid "Translate" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625 msgid "" "You cannot use non-uniform scaling mode for multiple objects/parts selection" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797 msgid "Set Position" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828 msgid "Set Orientation" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893 msgid "Set Scale" msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925 msgid "" "The currently manipulated object is tilted (rotation angles are not " "multiples of 90°).\n" @@ -2838,1122 +3365,1312 @@ msgid "" "once the rotation is embedded into the object coordinates." msgstr "" -#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878 +#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928 msgid "" "This operation is irreversible.\n" "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62 msgid "Additional Settings" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98 msgid "Remove parameter" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104 #, possible-c-format msgid "Delete Option %s" msgstr "" -#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152 +#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157 #, possible-c-format msgid "Change Option %s" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:277 +#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271 msgid "View" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:280 src/slic3r/GUI/GUI_Preview.cpp:641 -#: src/libslic3r/GCode/PreviewData.cpp:346 -msgid "Feature type" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:281 src/libslic3r/PrintConfig.cpp:500 +#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536 msgid "Height" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:282 src/libslic3r/PrintConfig.cpp:2245 +#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381 msgid "Width" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:284 src/slic3r/GUI/Tab.cpp:1523 +#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803 msgid "Fan speed" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:285 +#: src/slic3r/GUI/GUI_Preview.cpp:280 msgid "Volumetric flow rate" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:401 -#: src/slic3r/GUI/GUI_Preview.cpp:585 src/slic3r/GUI/GUI_Preview.cpp:640 -#: src/slic3r/GUI/GUI_Preview.cpp:901 src/libslic3r/GCode/PreviewData.cpp:358 -msgid "Tool" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:287 src/slic3r/GUI/GUI_Preview.cpp:638 -#: src/libslic3r/GCode/PreviewData.cpp:360 -msgid "Color Print" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:290 +#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288 msgid "Show" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:294 +#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295 +#: src/slic3r/GUI/GUI_Preview.cpp:316 msgid "Feature types" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:296 src/libslic3r/ExtrusionEntity.cpp:310 +#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314 +#: src/libslic3r/ExtrusionEntity.cpp:336 msgid "Perimeter" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:297 src/libslic3r/ExtrusionEntity.cpp:311 +#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315 +#: src/libslic3r/ExtrusionEntity.cpp:338 msgid "External perimeter" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:298 src/libslic3r/ExtrusionEntity.cpp:312 +#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316 +#: src/libslic3r/ExtrusionEntity.cpp:340 msgid "Overhang perimeter" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:313 +#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317 +#: src/libslic3r/ExtrusionEntity.cpp:342 msgid "Internal infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:300 src/libslic3r/ExtrusionEntity.cpp:314 -#: src/libslic3r/PrintConfig.cpp:1763 src/libslic3r/PrintConfig.cpp:1774 +#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318 +#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871 +#: src/libslic3r/PrintConfig.cpp:1882 msgid "Solid infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:315 -#: src/libslic3r/PrintConfig.cpp:2112 src/libslic3r/PrintConfig.cpp:2124 +#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319 +#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248 +#: src/libslic3r/PrintConfig.cpp:2260 msgid "Top solid infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:316 +#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321 +#: src/libslic3r/ExtrusionEntity.cpp:350 msgid "Bridge infill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:317 -#: src/libslic3r/PrintConfig.cpp:918 +#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322 +#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962 msgid "Gap fill" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:304 src/slic3r/GUI/Tab.cpp:1178 -#: src/libslic3r/ExtrusionEntity.cpp:318 +#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439 +#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354 msgid "Skirt" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:320 -#: src/libslic3r/PrintConfig.cpp:1998 +#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325 +#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133 msgid "Support material interface" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1259 -#: src/libslic3r/ExtrusionEntity.cpp:321 +#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521 +#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360 msgid "Wipe tower" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/PrintConfig.cpp:2159 -msgid "Travel" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:313 -msgid "Retractions" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:314 -msgid "Unretractions" -msgstr "" - -#: src/slic3r/GUI/GUI_Preview.cpp:315 +#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478 msgid "Shells" msgstr "" -#: src/slic3r/GUI/GUI_Preview.cpp:316 +#: src/slic3r/GUI/GUI_Preview.cpp:339 msgid "Legend" msgstr "" -#: src/slic3r/GUI/Job.hpp:123 +#: src/slic3r/GUI/GUI_Preview.cpp:1479 +msgid "Tool marker" +msgstr "" + +#: src/slic3r/GUI/GUI_Preview.cpp:1480 +msgid "Legend/Estimated printing time" +msgstr "" + +#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464 +msgid "Use for search" +msgstr "" + +#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458 +msgid "Category" +msgstr "" + +#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460 +msgid "Search in English" +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149 +msgid "Arranging" +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176 +msgid "Could not arrange model objects! Some geometries may be invalid." +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182 +msgid "Arranging canceled." +msgstr "" + +#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183 +msgid "Arranging done." +msgstr "" + +#: src/slic3r/GUI/Jobs/Job.cpp:74 msgid "ERROR: not enough resources to execute a new job." msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:855 +#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41 +msgid "Searching for optimal orientation" +msgstr "" + +#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73 +msgid "Orientation search canceled." +msgstr "" + +#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74 +msgid "Orientation found." +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35 +msgid "Choose SLA archive:" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39 +msgid "Import file: " +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46 +msgid "Import model and profile" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47 +msgid "Import profile only" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48 +msgid "Import model only" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:56 +msgid "Quality: " +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59 +msgid "Accurate" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60 +msgid "Balanced" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61 +msgid "Quick" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135 +msgid "Importing SLA archive" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159 +msgid "Importing canceled." +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160 +msgid "Importing done." +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254 +msgid "You cannot load SLA project with a multi-part object on the bed" +msgstr "" + +#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255 +#: src/slic3r/GUI/Tab.cpp:3188 +msgid "Please check your object list before preset changing." +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:37 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941 +#: src/slic3r/GUI/MainFrame.cpp:1332 msgid "Keyboard Shortcuts" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:112 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:105 msgid "New project, clear plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:113 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:106 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:114 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:107 msgid "Save project (3mf)" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:108 msgid "Save project as (3mf)" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:109 msgid "(Re)slice" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:111 msgid "Import STL/OBJ/AMF/3MF without config, keep plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:119 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:112 msgid "Import Config from ini/amf/3mf/gcode" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:120 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:113 msgid "Load Config from ini/amf/3mf/gcode and merge" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:898 -#: src/slic3r/GUI/Plater.cpp:5531 src/libslic3r/PrintConfig.cpp:3375 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766 +#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546 msgid "Export G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5532 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707 msgid "Send G-code" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:124 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:117 msgid "Export config" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:125 src/slic3r/GUI/Plater.cpp:887 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755 msgid "Export to SD card / Flash drive" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:126 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:119 msgid "Eject SD card / Flash drive" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:128 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:121 msgid "Select all objects" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:129 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 msgid "Deselect all" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 msgid "Delete selected" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:127 msgid "Copy to clipboard" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:128 msgid "Paste from clipboard" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:136 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:129 msgid "Reload plater from disk" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:138 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:132 msgid "Select Plater Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:139 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:133 msgid "Select Print Settings Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:140 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:134 msgid "Select Filament Settings Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:141 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:135 msgid "Select Printer Settings Tab" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:142 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:136 msgid "Switch to 3D" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:137 msgid "Switch to Preview" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:144 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:138 #: src/slic3r/GUI/PrintHostDialogs.cpp:136 msgid "Print host upload queue" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:146 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:140 msgid "Camera view" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:147 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:141 msgid "Show/Hide object/instance labels" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 -msgid "Turn On/Off facets' slope rendering" -msgstr "" - -#: src/slic3r/GUI/KBShortcutsDialog.cpp:152 src/slic3r/GUI/Preferences.cpp:10 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12 msgid "Preferences" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:154 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:145 msgid "Show keyboard shortcuts list" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:157 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:148 msgid "Commands" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:162 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:153 msgid "Add Instance of the selected object" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:163 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:154 msgid "Remove Instance of the selected object" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:164 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:155 msgid "" "Press to select multiple objects\n" "or move multiple objects with mouse" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:165 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:156 msgid "Press to activate selection rectangle" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:166 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:157 msgid "Press to activate deselection rectangle" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:167 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:209 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:205 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:215 msgid "Arrow Up" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:167 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:158 msgid "Move selection 10 mm in positive Y direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:168 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:210 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:220 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:159 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:206 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:216 msgid "Arrow Down" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:168 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:159 msgid "Move selection 10 mm in negative Y direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:169 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:221 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:160 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:217 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:229 msgid "Arrow Left" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:169 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:160 msgid "Move selection 10 mm in negative X direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:170 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:222 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:161 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:218 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 msgid "Arrow Right" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:170 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:161 msgid "Move selection 10 mm in positive X direction" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:171 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:172 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:162 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:163 msgid "Any arrow" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:171 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:162 msgid "Movement step set to 1 mm" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:172 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:163 msgid "Movement in camera space" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:173 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:164 msgid "Page Up" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:173 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:164 msgid "Rotate selection 45 degrees CCW" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:174 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:165 msgid "Page Down" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:174 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:165 msgid "Rotate selection 45 degrees CW" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:175 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:166 msgid "Gizmo move" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:176 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:167 msgid "Gizmo scale" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:177 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:168 msgid "Gizmo rotate" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:178 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:169 msgid "Gizmo cut" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:179 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:170 msgid "Gizmo Place face on bed" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:180 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:171 msgid "Gizmo SLA hollow" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:181 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:172 msgid "Gizmo SLA support points" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:182 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:173 msgid "Unselect gizmo or clear selection" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:183 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:174 msgid "Change camera type (perspective, orthographic)" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:184 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:175 msgid "Zoom to Bed" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:185 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:176 msgid "" "Zoom to selected object\n" "or all objects in scene, if none selected" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:186 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:177 msgid "Zoom in" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:187 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:178 msgid "Zoom out" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:189 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:179 +msgid "Switch between Editor/Preview" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:180 +msgid "Collapse/Expand the sidebar" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:182 msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:197 src/slic3r/GUI/MainFrame.cpp:311 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340 +#: src/slic3r/GUI/MainFrame.cpp:352 msgid "Plater" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:200 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:193 #, possible-c-format msgid "" "Press to snap by 5% in Gizmo scale\n" "or to snap by 1mm in Gizmo move" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:201 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:194 msgid "" "Scale selection to fit print volume\n" "in Gizmo scale" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:202 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:195 msgid "Press to activate one direction scaling in Gizmo scale" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:203 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:196 msgid "" "Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n" "selected objects around their own center" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:206 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:199 msgid "Gizmos" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:209 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:205 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:207 msgid "Upper Layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:210 -#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:206 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:208 msgid "Lower Layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:213 -msgid "Show/Hide Legend" +#: src/slic3r/GUI/KBShortcutsDialog.cpp:209 +msgid "Show/Hide Legend/Estimated printing time" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:216 src/slic3r/GUI/Plater.cpp:4129 -#: src/slic3r/GUI/Tab.cpp:2385 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052 +#: src/slic3r/GUI/Tab.cpp:2559 msgid "Preview" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:215 msgid "Move current slider thumb Up" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:220 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:216 msgid "Move current slider thumb Down" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:221 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:217 msgid "Set upper thumb to current slider thumb" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:222 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:218 msgid "Set lower thumb to current slider thumb" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:223 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 msgid "Add color change marker for current layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:224 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:220 msgid "Delete color change marker for current layer" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:227 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:221 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:222 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:231 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:232 +msgid "" +"Press to speed up 5 times while moving thumb\n" +"with arrow keys or mouse wheel" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:225 msgid "Layers Slider" msgstr "" -#: src/slic3r/GUI/KBShortcutsDialog.cpp:250 +#: src/slic3r/GUI/KBShortcutsDialog.cpp:229 +msgid "Move current slider thumb Left" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:230 +msgid "Move current slider thumb Right" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:235 +msgid "Sequential Slider" +msgstr "" + +#: src/slic3r/GUI/KBShortcutsDialog.cpp:259 msgid "Keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:72 +#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262 +msgid "Open new instance" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77 +#: src/slic3r/GUI/MainFrame.cpp:1262 +msgid "Open a new PrusaSlicer instance" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79 +msgid "G-code preview" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141 +msgid "Open G-code viewer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398 +msgid "Open PrusaSlicer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:79 +msgid "Open new G-code viewer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:166 msgid "" -" - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/" +" - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/" "releases" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:281 +#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537 msgid "based on Slic3r" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:533 -msgid "&New Project" +#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308 +msgid "Prusa 3D &Drivers" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:533 -msgid "Start a new project" +#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308 +msgid "Open the Prusa3D drivers download page in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:536 -msgid "&Open Project" +#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310 +msgid "Software &Releases" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:536 -msgid "Open a project file" +#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310 +msgid "Open the software releases page in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:541 -msgid "Recent projects" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:550 -msgid "" -"The selected project is no longer available.\n" -"Do you want to remove it from the recent projects list?" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:550 src/slic3r/GUI/MainFrame.cpp:932 -#: src/slic3r/GUI/PrintHostDialogs.cpp:231 -msgid "Error" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:575 -msgid "&Save Project" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:575 -msgid "Save current project file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:579 src/slic3r/GUI/MainFrame.cpp:581 -msgid "Save Project &as" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:579 src/slic3r/GUI/MainFrame.cpp:581 -msgid "Save current project file as" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:589 -msgid "Import STL/OBJ/AM&F/3MF" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:589 -msgid "Load a model" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:593 -msgid "Import &Config" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:593 -msgid "Load exported configuration file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:596 -msgid "Import Config from &project" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:596 -msgid "Load configuration from project file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:600 -msgid "Import Config &Bundle" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:600 -msgid "Load presets from a bundle" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:603 -msgid "&Import" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:606 src/slic3r/GUI/MainFrame.cpp:896 -msgid "Export &G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:606 -msgid "Export current plate as G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:610 src/slic3r/GUI/MainFrame.cpp:897 -msgid "S&end G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:610 -msgid "Send to print current plate as G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:614 -msgid "Export G-code to SD card / Flash drive" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:614 -msgid "Export current plate as G-code to SD card / Flash drive" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:618 -msgid "Export plate as &STL" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:618 -msgid "Export current plate as STL" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:621 -msgid "Export plate as STL &including supports" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:621 -msgid "Export current plate as STL including supports" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:624 -msgid "Export plate as &AMF" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:624 -msgid "Export current plate as AMF" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:628 -msgid "Export &toolpaths as OBJ" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:628 -msgid "Export toolpaths as OBJ" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:632 -msgid "Export &Config" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:632 -msgid "Export current configuration to file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:635 -msgid "Export Config &Bundle" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:635 -msgid "Export all presets to file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:638 -msgid "&Export" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:640 -msgid "Ejec&t SD card / Flash drive" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:640 -msgid "Eject SD card / Flash drive after the G-code was exported to it." -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:648 -msgid "Quick Slice" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:648 -msgid "Slice a file into a G-code" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:654 -msgid "Quick Slice and Save As" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:654 -msgid "Slice a file into a G-code, save as" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:660 -msgid "Repeat Last Quick Slice" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:660 -msgid "Repeat last quick slice" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:668 -msgid "(Re)Slice No&w" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:668 -msgid "Start new slicing process" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:672 -msgid "&Repair STL file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:672 -msgid "Automatically repair an STL file" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:676 -msgid "&Quit" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:676 +#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316 #, possible-c-format -msgid "Quit %s" +msgid "%s &Website" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:701 -msgid "&Select all" +#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317 +#, possible-c-format +msgid "Open the %s website in your browser" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:702 -msgid "Selects all objects" +#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323 +msgid "System &Info" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:704 -msgid "D&eselect all" +#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323 +msgid "Show system information" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:705 -msgid "Deselects all objects" +#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325 +msgid "Show &Configuration Folder" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:708 -msgid "&Delete selected" +#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325 +msgid "Show user configuration folder (datadir)" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:709 -msgid "Deletes the current selection" +#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327 +msgid "Report an I&ssue" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:711 -msgid "Delete &all" +#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327 +#, possible-c-format +msgid "Report an issue on %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:712 -msgid "Deletes all objects" +#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1329 +#, possible-c-format +msgid "&About %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:716 -msgid "&Undo" +#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1329 +msgid "Show about dialog" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:719 -msgid "&Redo" +#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332 +msgid "Show the list of the keyboard shortcuts" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:724 -msgid "&Copy" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:725 -msgid "Copy selection to clipboard" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:727 -msgid "&Paste" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:728 -msgid "Paste clipboard" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:732 -msgid "Re&load from disk" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:733 -msgid "Reload the plater from disk" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:742 -msgid "&Plater Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:742 -msgid "Show the plater" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:750 -msgid "P&rint Settings Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:750 -msgid "Show the print settings" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:753 src/slic3r/GUI/MainFrame.cpp:899 -msgid "&Filament Settings Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:753 -msgid "Show the filament settings" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:757 -msgid "Print&er Settings Tab" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:757 -msgid "Show the printer settings" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:762 -msgid "3&D" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:762 -msgid "Show the 3D editing view" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:765 -msgid "Pre&view" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:765 -msgid "Show the 3D slices preview" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:784 -msgid "Print &Host Upload Queue" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:784 -msgid "Display the Print Host Upload Queue window" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:794 +#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275 msgid "Iso" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:794 +#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275 msgid "Iso View" msgstr "" #. TRN To be shown in the main menu View->Top #. TRN To be shown in Print Settings "Top solid layers" -#: src/slic3r/GUI/MainFrame.cpp:798 src/libslic3r/PrintConfig.cpp:2139 -#: src/libslic3r/PrintConfig.cpp:2148 +#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279 +#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284 msgid "Top" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:798 +#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279 msgid "Top View" msgstr "" #. TRN To be shown in the main menu View->Bottom #. TRN To be shown in Print Settings "Bottom solid layers" #. TRN To be shown in Print Settings "Top solid layers" -#: src/slic3r/GUI/MainFrame.cpp:801 src/libslic3r/PrintConfig.cpp:174 -#: src/libslic3r/PrintConfig.cpp:183 +#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282 +#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217 msgid "Bottom" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:801 +#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282 msgid "Bottom View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:803 +#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284 msgid "Front" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:803 +#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284 msgid "Front View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:805 src/libslic3r/PrintConfig.cpp:1632 +#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286 +#: src/libslic3r/PrintConfig.cpp:1740 msgid "Rear" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:805 +#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286 msgid "Rear View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:807 +#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288 msgid "Left" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:807 +#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288 msgid "Left View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:809 +#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290 msgid "Right" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:809 +#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290 msgid "Right View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:814 src/slic3r/GUI/MainFrame.cpp:822 +#: src/slic3r/GUI/MainFrame.cpp:986 +msgid "&New Project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:986 +msgid "Start a new project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:989 +msgid "&Open Project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:989 +msgid "Open a project file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:994 +msgid "Recent projects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1003 +msgid "" +"The selected project is no longer available.\n" +"Do you want to remove it from the recent projects list?" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486 +#: src/slic3r/GUI/PrintHostDialogs.cpp:231 +msgid "Error" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1028 +msgid "&Save Project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1028 +msgid "Save current project file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034 +msgid "Save Project &as" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034 +msgid "Save current project file as" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1042 +msgid "Import STL/OBJ/AM&F/3MF" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1042 +msgid "Load a model" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1046 +msgid "Import STL (imperial units)" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1046 +msgid "Load an model saved with imperial units" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1050 +msgid "Import SL1 archive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1050 +msgid "Load an SL1 output archive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1055 +msgid "Import &Config" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1055 +msgid "Load exported configuration file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1058 +msgid "Import Config from &project" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1058 +msgid "Load configuration from project file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1062 +msgid "Import Config &Bundle" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1062 +msgid "Load presets from a bundle" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1065 +msgid "&Import" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448 +msgid "Export &G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1068 +msgid "Export current plate as G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449 +msgid "S&end G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1072 +msgid "Send to print current plate as G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1076 +msgid "Export G-code to SD card / Flash drive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1076 +msgid "Export current plate as G-code to SD card / Flash drive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1080 +msgid "Export plate as &STL" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1080 +msgid "Export current plate as STL" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1083 +msgid "Export plate as STL &including supports" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1083 +msgid "Export current plate as STL including supports" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1086 +msgid "Export plate as &AMF" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1086 +msgid "Export current plate as AMF" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395 +msgid "Export &toolpaths as OBJ" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395 +msgid "Export toolpaths as OBJ" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1094 +msgid "Export &Config" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1094 +msgid "Export current configuration to file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Export Config &Bundle" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1097 +msgid "Export all presets to file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1100 +msgid "Export Config Bundle With Physical Printers" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1100 +msgid "Export all presets including physical printers to file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1103 +msgid "&Export" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1105 +msgid "Ejec&t SD card / Flash drive" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1105 +msgid "Eject SD card / Flash drive after the G-code was exported to it." +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1113 +msgid "Quick Slice" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1113 +msgid "Slice a file into a G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1119 +msgid "Quick Slice and Save As" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1119 +msgid "Slice a file into a G-code, save as" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1125 +msgid "Repeat Last Quick Slice" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1125 +msgid "Repeat last quick slice" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1133 +msgid "(Re)Slice No&w" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1133 +msgid "Start new slicing process" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1137 +msgid "&Repair STL file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1137 +msgid "Automatically repair an STL file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1141 +msgid "&G-code preview" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402 +msgid "&Quit" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402 +#, possible-c-format +msgid "Quit %s" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1171 +msgid "&Select all" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1172 +msgid "Selects all objects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1174 +msgid "D&eselect all" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1175 +msgid "Deselects all objects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1178 +msgid "&Delete selected" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1179 +msgid "Deletes the current selection" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1181 +msgid "Delete &all" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1182 +msgid "Deletes all objects" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1186 +msgid "&Undo" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1189 +msgid "&Redo" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1194 +msgid "&Copy" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1195 +msgid "Copy selection to clipboard" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1197 +msgid "&Paste" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1198 +msgid "Paste clipboard" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1202 +msgid "Re&load from disk" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1203 +msgid "Reload the plater from disk" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1207 +msgid "Searc&h" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1208 +msgid "Find option" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1216 +msgid "&Plater Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1216 +msgid "Show the plater" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1221 +msgid "P&rint Settings Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1221 +msgid "Show the print settings" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451 +msgid "&Filament Settings Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1224 +msgid "Show the filament settings" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1228 +msgid "Print&er Settings Tab" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1228 +msgid "Show the printer settings" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1234 +msgid "3&D" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1234 +msgid "Show the 3D editing view" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1237 +msgid "Pre&view" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1237 +msgid "Show the 3D slices preview" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1258 +msgid "Print &Host Upload Queue" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1258 +msgid "Display the Print Host Upload Queue window" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1294 msgid "Show &labels" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:814 src/slic3r/GUI/MainFrame.cpp:822 +#: src/slic3r/GUI/MainFrame.cpp:1294 msgid "Show object/instance labels in 3D scene" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:817 -msgid "Show &slope" +#: src/slic3r/GUI/MainFrame.cpp:1297 +msgid "&Collapse sidebar" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:817 -msgid "Objects coloring using faces' slope" +#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144 +msgid "Collapse sidebar" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:820 -msgid "&Options" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:831 -msgid "Prusa 3D &Drivers" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:831 -msgid "Open the Prusa3D drivers download page in your browser" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:833 -msgid "Software &Releases" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:833 -msgid "Open the software releases page in your browser" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:839 -#, possible-c-format -msgid "%s &Website" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:840 -#, possible-c-format -msgid "Open the %s website in your browser" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:846 -msgid "System &Info" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:846 -msgid "Show system information" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:848 -msgid "Show &Configuration Folder" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:848 -msgid "Show user configuration folder (datadir)" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:850 -msgid "Report an I&ssue" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:850 -#, possible-c-format -msgid "Report an issue on %s" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:852 -#, possible-c-format -msgid "&About %s" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:852 -msgid "Show about dialog" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:855 -msgid "Show the list of the keyboard shortcuts" -msgstr "" - -#: src/slic3r/GUI/MainFrame.cpp:868 +#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357 +#: src/slic3r/GUI/MainFrame.cpp:1417 msgid "&File" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:869 +#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358 msgid "&Edit" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:870 +#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359 msgid "&Window" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:871 +#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360 +#: src/slic3r/GUI/MainFrame.cpp:1418 msgid "&View" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:874 +#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363 +#: src/slic3r/GUI/MainFrame.cpp:1423 msgid "&Help" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:896 +#: src/slic3r/GUI/MainFrame.cpp:1391 +msgid "&Open G-code" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1391 +msgid "Open a G-code file" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1398 +msgid "Open &PrusaSlicer" +msgstr "" + +#: src/slic3r/GUI/MainFrame.cpp:1448 msgid "E&xport" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:897 +#: src/slic3r/GUI/MainFrame.cpp:1449 msgid "S&end to print" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:899 +#: src/slic3r/GUI/MainFrame.cpp:1451 msgid "Mate&rial Settings Tab" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:920 +#: src/slic3r/GUI/MainFrame.cpp:1474 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:931 +#: src/slic3r/GUI/MainFrame.cpp:1485 msgid "No previously sliced file." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1491 msgid "Previously sliced file (" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:937 +#: src/slic3r/GUI/MainFrame.cpp:1491 msgid ") not found." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:938 +#: src/slic3r/GUI/MainFrame.cpp:1492 msgid "File Not Found" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:973 +#: src/slic3r/GUI/MainFrame.cpp:1527 #, possible-c-format msgid "Save %s file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:973 +#: src/slic3r/GUI/MainFrame.cpp:1527 msgid "SVG" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:973 +#: src/slic3r/GUI/MainFrame.cpp:1527 msgid "G-code" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:985 +#: src/slic3r/GUI/MainFrame.cpp:1539 msgid "Save zip file as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:994 src/slic3r/GUI/Plater.cpp:3121 -#: src/slic3r/GUI/Plater.cpp:5122 src/slic3r/GUI/Tab.cpp:1289 -#: src/slic3r/GUI/Tab.cpp:3731 +#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921 +#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551 +#: src/slic3r/GUI/Tab.cpp:4081 msgid "Slicing" msgstr "" #. TRN "Processing input_file_basename" -#: src/slic3r/GUI/MainFrame.cpp:996 +#: src/slic3r/GUI/MainFrame.cpp:1550 #, possible-c-format msgid "Processing %s" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1019 +#: src/slic3r/GUI/MainFrame.cpp:1573 msgid " was successfully sliced." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1021 +#: src/slic3r/GUI/MainFrame.cpp:1575 msgid "Slicing Done!" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1036 +#: src/slic3r/GUI/MainFrame.cpp:1590 msgid "Select the STL file to repair:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1046 +#: src/slic3r/GUI/MainFrame.cpp:1600 msgid "Save OBJ file (less prone to coordinate errors than STL) as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1058 +#: src/slic3r/GUI/MainFrame.cpp:1612 msgid "Your file was repaired." msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1058 src/libslic3r/PrintConfig.cpp:3469 +#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646 msgid "Repair" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1072 +#: src/slic3r/GUI/MainFrame.cpp:1626 msgid "Save configuration as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1091 src/slic3r/GUI/MainFrame.cpp:1153 +#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707 msgid "Select configuration to load:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1127 +#: src/slic3r/GUI/MainFrame.cpp:1681 msgid "Save presets bundle as:" msgstr "" -#: src/slic3r/GUI/MainFrame.cpp:1174 +#: src/slic3r/GUI/MainFrame.cpp:1728 #, possible-c-format msgid "%d presets successfully imported." msgstr "" @@ -3962,32 +4679,36 @@ msgstr "" msgid "3Dconnexion settings" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:278 +#: src/slic3r/GUI/Mouse3DController.cpp:274 msgid "Device:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:285 +#: src/slic3r/GUI/Mouse3DController.cpp:279 msgid "Speed:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:289 -#: src/slic3r/GUI/Mouse3DController.cpp:312 +#: src/slic3r/GUI/Mouse3DController.cpp:282 +#: src/slic3r/GUI/Mouse3DController.cpp:303 msgid "Translation" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:301 -#: src/slic3r/GUI/Mouse3DController.cpp:312 +#: src/slic3r/GUI/Mouse3DController.cpp:294 +#: src/slic3r/GUI/Mouse3DController.cpp:303 msgid "Zoom" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:308 +#: src/slic3r/GUI/Mouse3DController.cpp:300 msgid "Deadzone:" msgstr "" -#: src/slic3r/GUI/Mouse3DController.cpp:325 +#: src/slic3r/GUI/Mouse3DController.cpp:315 msgid "Options:" msgstr "" +#: src/slic3r/GUI/Mouse3DController.cpp:318 +msgid "Swap Y/Z axes" +msgstr "" + #: src/slic3r/GUI/MsgDialog.cpp:73 #, possible-c-format msgid "%s error" @@ -3998,6 +4719,60 @@ msgstr "" msgid "%s has encountered an error" msgstr "" +#: src/slic3r/GUI/NotificationManager.hpp:317 +msgid "Exporting finished." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:317 +msgid "Eject drive." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:318 +msgid "3D Mouse disconnected." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:321 +msgid "Configuration update is available." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:321 +msgid "See more." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:322 +msgid "New version is available." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.hpp:322 +msgid "See Releases page." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:305 +#: src/slic3r/GUI/NotificationManager.cpp:315 +msgid "More" +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:631 +#: src/slic3r/GUI/NotificationManager.cpp:748 +msgid "Export G-Code." +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:667 +#: src/slic3r/GUI/NotificationManager.cpp:683 +#: src/slic3r/GUI/NotificationManager.cpp:694 +msgid "ERROR:" +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:672 +#: src/slic3r/GUI/NotificationManager.cpp:687 +#: src/slic3r/GUI/NotificationManager.cpp:702 +msgid "WARNING:" +msgstr "" + +#: src/slic3r/GUI/NotificationManager.cpp:751 +msgid "Slicing finished." +msgstr "" + #: src/slic3r/GUI/ObjectDataViewModel.cpp:58 msgid "Instances" msgstr "" @@ -4008,8 +4783,8 @@ msgstr "" msgid "Instance %d" msgstr "" -#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3585 -#: src/slic3r/GUI/Tab.cpp:3667 +#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928 +#: src/slic3r/GUI/Tab.cpp:4010 msgid "Layers" msgstr "" @@ -4017,649 +4792,769 @@ msgstr "" msgid "Range" msgstr "" -#: src/slic3r/GUI/OptionsGroup.cpp:274 +#: src/slic3r/GUI/OpenGLManager.cpp:259 +#, possible-c-format +msgid "" +"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n" +"while OpenGL version %s, render %s, vendor %s was detected." +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:262 +msgid "You may need to update your graphics card driver." +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:265 +msgid "" +"As a workaround, you may run PrusaSlicer with a software rendered 3D " +"graphics by running prusa-slicer.exe with the --sw_renderer parameter." +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:267 +msgid "Unsupported OpenGL version" +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:275 +#, possible-c-format +msgid "" +"Unable to load the following shaders:\n" +"%s" +msgstr "" + +#: src/slic3r/GUI/OpenGLManager.cpp:276 +msgid "Error loading shaders" +msgstr "" + +#: src/slic3r/GUI/OptionsGroup.cpp:293 msgctxt "Layers" msgid "Top" msgstr "" -#: src/slic3r/GUI/OptionsGroup.cpp:274 +#: src/slic3r/GUI/OptionsGroup.cpp:293 msgctxt "Layers" msgid "Bottom" msgstr "" -#: src/slic3r/GUI/Plater.cpp:163 +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55 +msgid "Delete this preset from this printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85 +msgid "This printer will be shown in the presets list as" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159 +msgid "Physical Printer" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165 +msgid "Type here the name of your printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:176 +msgid "Descriptive name for the printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180 +msgid "Add preset for this printer device" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024 +msgid "Print Host upload" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284 +msgid "Test" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289 +msgid "Could not get a valid Printer Host reference" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295 +msgid "Success!" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319 +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329 +msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330 +msgid "Open CA certificate file" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358 +#: src/libslic3r/PrintConfig.cpp:113 +msgid "HTTPS CA File" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359 +#, possible-c-format +msgid "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360 +msgid "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464 +msgid "The supplied name is empty. It can't be saved." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468 +msgid "You should to change a name of your printer device. It can't be saved." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476 +msgid "Printer with name \"%1%\" already exists." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477 +msgid "Replace?" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:500 +msgid "" +"Next printer preset(s) is(are) duplicated:%1%Should I add it(they) just once " +"for the printer \"%2%\" and close the Editing Dialog?" +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:546 +msgid "It's not possible to delete last related preset for the printer." +msgstr "" + +#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547 +msgid "Infornation" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:167 msgid "Volume" msgstr "" -#: src/slic3r/GUI/Plater.cpp:164 +#: src/slic3r/GUI/Plater.cpp:168 msgid "Facets" msgstr "" -#: src/slic3r/GUI/Plater.cpp:165 +#: src/slic3r/GUI/Plater.cpp:169 msgid "Materials" msgstr "" -#: src/slic3r/GUI/Plater.cpp:168 +#: src/slic3r/GUI/Plater.cpp:172 msgid "Manifold" msgstr "" -#: src/slic3r/GUI/Plater.cpp:218 +#: src/slic3r/GUI/Plater.cpp:222 msgid "Sliced Info" msgstr "" -#: src/slic3r/GUI/Plater.cpp:237 src/slic3r/GUI/Plater.cpp:1236 +#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141 msgid "Used Filament (m)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:238 +#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153 msgid "Used Filament (mm³)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:239 +#: src/slic3r/GUI/Plater.cpp:243 msgid "Used Filament (g)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:240 +#: src/slic3r/GUI/Plater.cpp:244 msgid "Used Material (unit)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:241 +#: src/slic3r/GUI/Plater.cpp:245 msgid "Cost (money)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1223 -#: src/slic3r/GUI/Plater.cpp:1265 -msgid "Estimated printing time" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:243 +#: src/slic3r/GUI/Plater.cpp:247 msgid "Number of tool changes" msgstr "" -#: src/slic3r/GUI/Plater.cpp:350 -msgid "Click to edit preset" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:505 +#: src/slic3r/GUI/Plater.cpp:364 msgid "Select what kind of support do you need" msgstr "" -#: src/slic3r/GUI/Plater.cpp:507 src/libslic3r/PrintConfig.cpp:1908 -#: src/libslic3r/PrintConfig.cpp:2691 +#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043 +#: src/libslic3r/PrintConfig.cpp:2838 msgid "Support on build plate only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:508 src/slic3r/GUI/Plater.cpp:631 +#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490 msgid "For support enforcers only" msgstr "" -#: src/slic3r/GUI/Plater.cpp:509 +#: src/slic3r/GUI/Plater.cpp:368 msgid "Everywhere" msgstr "" -#: src/slic3r/GUI/Plater.cpp:541 src/slic3r/GUI/Tab.cpp:1185 +#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446 msgid "Brim" msgstr "" -#: src/slic3r/GUI/Plater.cpp:543 +#: src/slic3r/GUI/Plater.cpp:402 msgid "" "This flag enables the brim that will be printed around each object on the " "first layer." msgstr "" -#: src/slic3r/GUI/Plater.cpp:551 +#: src/slic3r/GUI/Plater.cpp:410 msgid "Purging volumes" msgstr "" -#: src/slic3r/GUI/Plater.cpp:645 +#: src/slic3r/GUI/Plater.cpp:504 msgid "Select what kind of pad do you need" msgstr "" -#: src/slic3r/GUI/Plater.cpp:647 +#: src/slic3r/GUI/Plater.cpp:506 msgid "Below object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:648 +#: src/slic3r/GUI/Plater.cpp:507 msgid "Around object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:822 +#: src/slic3r/GUI/Plater.cpp:690 msgid "Print settings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:823 src/slic3r/GUI/Tab.cpp:1491 -#: src/slic3r/GUI/Tab.cpp:1492 +#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770 +#: src/slic3r/GUI/Tab.cpp:1771 msgid "Filament" msgstr "" -#: src/slic3r/GUI/Plater.cpp:824 +#: src/slic3r/GUI/Plater.cpp:692 msgid "SLA print settings" msgstr "" -#: src/slic3r/GUI/Plater.cpp:825 src/slic3r/GUI/Preset.cpp:1566 +#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303 msgid "SLA material" msgstr "" -#: src/slic3r/GUI/Plater.cpp:826 +#: src/slic3r/GUI/Plater.cpp:694 msgid "Printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:885 src/slic3r/GUI/Plater.cpp:5532 +#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707 msgid "Send to printer" msgstr "" -#: src/slic3r/GUI/Plater.cpp:886 +#: src/slic3r/GUI/Plater.cpp:754 msgid "Remove device" msgstr "" -#: src/slic3r/GUI/Plater.cpp:899 src/slic3r/GUI/Plater.cpp:3121 -#: src/slic3r/GUI/Plater.cpp:5125 +#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921 +#: src/slic3r/GUI/Plater.cpp:5237 msgid "Slice now" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1049 +#: src/slic3r/GUI/Plater.cpp:916 msgid "Hold Shift to Slice & Export G-code" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1159 +#: src/slic3r/GUI/Plater.cpp:1061 #, possible-c-format msgid "%d (%d shells)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1164 +#: src/slic3r/GUI/Plater.cpp:1066 #, possible-c-format msgid "Auto-repaired (%d errors)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1167 +#: src/slic3r/GUI/Plater.cpp:1069 #, possible-c-format msgid "" "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d " "facets reversed, %d backwards edges" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1177 +#: src/slic3r/GUI/Plater.cpp:1079 msgid "Yes" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1198 +#: src/slic3r/GUI/Plater.cpp:1100 msgid "Used Material (ml)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1201 +#: src/slic3r/GUI/Plater.cpp:1103 msgid "object(s)" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1201 +#: src/slic3r/GUI/Plater.cpp:1103 msgid "supports and pad" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1238 src/slic3r/GUI/Plater.cpp:1252 +#: src/slic3r/GUI/Plater.cpp:1141 +msgid "Used Filament (in)" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160 msgid "objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1238 src/slic3r/GUI/Plater.cpp:1252 +#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160 msgid "wipe tower" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1250 src/libslic3r/PrintConfig.cpp:760 -#: src/libslic3r/PrintConfig.cpp:2517 src/libslic3r/PrintConfig.cpp:2518 +#: src/slic3r/GUI/Plater.cpp:1153 +msgid "Used Filament (in³)" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796 +#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654 msgid "Cost" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1267 src/libslic3r/PrintConfig.cpp:582 -msgid "Color" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:1268 -msgid "Pause" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:1293 +#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224 msgid "normal mode" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1298 +#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235 msgid "stealth mode" msgstr "" -#: src/slic3r/GUI/Plater.cpp:1402 -msgid "Load File" +#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618 +msgid "Color" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1405 +msgid "You can open only one .gcode file at a time." msgstr "" #: src/slic3r/GUI/Plater.cpp:1406 +msgid "Drag and drop G-code file" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1436 +msgid "Load File" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1440 msgid "Load Files" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2207 +#: src/slic3r/GUI/Plater.cpp:1555 +msgid "Optimize Rotation" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:1561 +msgid "Import SLA archive" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:2031 #, possible-c-format msgid "" "Unmounting successful. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2210 +#: src/slic3r/GUI/Plater.cpp:2034 #, possible-c-format msgid "Ejecting of device %s(%s) has failed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2223 +#: src/slic3r/GUI/Plater.cpp:2056 msgid "New Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2337 +#: src/slic3r/GUI/Plater.cpp:2143 +msgid "Expand sidebar" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:2216 msgid "Loading" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2347 +#: src/slic3r/GUI/Plater.cpp:2226 +msgid "Loading file" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:2309 #, possible-c-format -msgid "Processing input file %s" +msgid "" +"Some object(s) in file %s looks like saved in inches.\n" +"Should I consider them as a saved in inches and convert them?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2375 -msgid "You cannot load SLA project with a multi-part object on the bed" +#: src/slic3r/GUI/Plater.cpp:2311 +msgid "Saved in inches object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2376 src/slic3r/GUI/Tab.cpp:2958 -msgid "Please check your object list before preset changing." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2421 +#: src/slic3r/GUI/Plater.cpp:2319 msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should I consider\n" "this file as a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2424 src/slic3r/GUI/Plater.cpp:2477 +#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375 msgid "Multi-part object detected" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2431 +#: src/slic3r/GUI/Plater.cpp:2329 msgid "" "This file cannot be loaded in a simple mode. Do you want to switch to an " "advanced mode?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2432 +#: src/slic3r/GUI/Plater.cpp:2330 msgid "Detected advanced data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2454 +#: src/slic3r/GUI/Plater.cpp:2352 #, possible-c-format msgid "" "You can't to add the object(s) from %s because of one or some of them " "is(are) multi-part" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2474 +#: src/slic3r/GUI/Plater.cpp:2372 msgid "" "Multiple objects were loaded for a multi-material printer.\n" "Instead of considering them as multiple objects, should I consider\n" "these files to represent a single object having multiple parts?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2490 +#: src/slic3r/GUI/Plater.cpp:2388 msgid "Loaded" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2592 +#: src/slic3r/GUI/Plater.cpp:2490 msgid "" "Your object appears to be too large, so it was automatically scaled down to " "fit your print bed." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2593 +#: src/slic3r/GUI/Plater.cpp:2491 msgid "Object too large?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2655 +#: src/slic3r/GUI/Plater.cpp:2553 msgid "Export STL file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2662 +#: src/slic3r/GUI/Plater.cpp:2560 msgid "Export AMF file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2668 +#: src/slic3r/GUI/Plater.cpp:2566 msgid "Save file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2674 +#: src/slic3r/GUI/Plater.cpp:2572 msgid "Export OBJ file:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2773 +#: src/slic3r/GUI/Plater.cpp:2673 msgid "Delete Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2784 +#: src/slic3r/GUI/Plater.cpp:2684 msgid "Reset Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:2823 -msgid "Optimize Rotation" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2869 -msgid "Arranging" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2896 -msgid "Could not arrange model objects! Some geometries may be invalid." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2902 -msgid "Arranging canceled." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2903 -msgid "Arranging done." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2919 -msgid "Searching for optimal orientation" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2952 -msgid "Orientation search canceled." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2953 -msgid "Orientation found." -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:2970 +#: src/slic3r/GUI/Plater.cpp:2763 msgid "" "The selected object can't be split because it contains more than one volume/" "material." msgstr "" -#: src/slic3r/GUI/Plater.cpp:2981 +#: src/slic3r/GUI/Plater.cpp:2774 msgid "Split to Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3106 +#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583 msgid "Invalid data" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3115 +#: src/slic3r/GUI/Plater.cpp:2915 msgid "Ready to slice" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232 +#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232 msgid "Cancelling" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3170 +#: src/slic3r/GUI/Plater.cpp:2972 msgid "Another export job is currently running." msgstr "" -#: src/slic3r/GUI/Plater.cpp:3286 +#: src/slic3r/GUI/Plater.cpp:3089 msgid "Please select the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3321 +#: src/slic3r/GUI/Plater.cpp:3124 msgid "It is not allowed to change the file to reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3321 +#: src/slic3r/GUI/Plater.cpp:3124 msgid "Do you want to retry" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3339 +#: src/slic3r/GUI/Plater.cpp:3142 msgid "Reload from:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3428 +#: src/slic3r/GUI/Plater.cpp:3233 msgid "Unable to reload:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3433 +#: src/slic3r/GUI/Plater.cpp:3238 msgid "Error during reload" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3452 +#: src/slic3r/GUI/Plater.cpp:3257 msgid "Reload all from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3473 +#: src/slic3r/GUI/Plater.cpp:3278 msgid "Fix Throught NetFabb" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3672 -msgid "Export failed" +#: src/slic3r/GUI/Plater.cpp:3543 +msgid "There are active warnings concerning sliced models:\n" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3682 src/slic3r/GUI/PrintHostDialogs.cpp:233 +#: src/slic3r/GUI/Plater.cpp:3554 +msgid "generated warnings" +msgstr "" + +#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233 msgid "Cancelled" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3935 src/slic3r/GUI/Plater.cpp:3957 +#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871 msgid "Remove the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3944 +#: src/slic3r/GUI/Plater.cpp:3858 msgid "Add one more instance of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3946 +#: src/slic3r/GUI/Plater.cpp:3860 msgid "Remove one instance of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3948 +#: src/slic3r/GUI/Plater.cpp:3862 msgid "Set number of instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3948 +#: src/slic3r/GUI/Plater.cpp:3862 msgid "Change the number of instances of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3967 +#: src/slic3r/GUI/Plater.cpp:3881 msgid "Reload the selected object from disk" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3970 +#: src/slic3r/GUI/Plater.cpp:3884 msgid "Export the selected object as STL file" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3999 +#: src/slic3r/GUI/Plater.cpp:3915 msgid "Along X axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:3999 +#: src/slic3r/GUI/Plater.cpp:3915 msgid "Mirror the selected object along the X axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4001 +#: src/slic3r/GUI/Plater.cpp:3917 msgid "Along Y axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4001 +#: src/slic3r/GUI/Plater.cpp:3917 msgid "Mirror the selected object along the Y axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4003 +#: src/slic3r/GUI/Plater.cpp:3919 msgid "Along Z axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4003 +#: src/slic3r/GUI/Plater.cpp:3919 msgid "Mirror the selected object along the Z axis" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4006 +#: src/slic3r/GUI/Plater.cpp:3922 msgid "Mirror" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4006 +#: src/slic3r/GUI/Plater.cpp:3922 msgid "Mirror the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4018 +#: src/slic3r/GUI/Plater.cpp:3934 msgid "To objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4018 src/slic3r/GUI/Plater.cpp:4038 +#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954 msgid "Split the selected object into individual objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4020 +#: src/slic3r/GUI/Plater.cpp:3936 msgid "To parts" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4020 src/slic3r/GUI/Plater.cpp:4052 +#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972 msgid "Split the selected object into individual sub-parts" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4023 src/slic3r/GUI/Plater.cpp:4038 -#: src/slic3r/GUI/Plater.cpp:4052 src/libslic3r/PrintConfig.cpp:3493 +#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954 +#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670 msgid "Split" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4023 +#: src/slic3r/GUI/Plater.cpp:3939 msgid "Split the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4044 -msgid "Optimize orientation" -msgstr "" - -#: src/slic3r/GUI/Plater.cpp:4044 +#: src/slic3r/GUI/Plater.cpp:3962 msgid "Optimize the rotation of the object for better print results." msgstr "" -#: src/slic3r/GUI/Plater.cpp:4121 +#: src/slic3r/GUI/Plater.cpp:4044 msgid "3D editor view" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4428 +#: src/slic3r/GUI/Plater.cpp:4423 msgid "" "%1% printer was active at the time the target Undo / Redo snapshot was " "taken. Switching to %1% printer requires reloading of %1% presets." msgstr "" -#: src/slic3r/GUI/Plater.cpp:4604 +#: src/slic3r/GUI/Plater.cpp:4627 msgid "Load Project" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4632 +#: src/slic3r/GUI/Plater.cpp:4655 msgid "Import Object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4636 +#: src/slic3r/GUI/Plater.cpp:4659 msgid "Import Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4705 +#: src/slic3r/GUI/Plater.cpp:4774 msgid "All objects will be removed, continue?" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4713 +#: src/slic3r/GUI/Plater.cpp:4782 msgid "Delete Selected Objects" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4721 +#: src/slic3r/GUI/Plater.cpp:4790 msgid "Increase Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4756 +#: src/slic3r/GUI/Plater.cpp:4824 msgid "Decrease Instances" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4787 +#: src/slic3r/GUI/Plater.cpp:4855 msgid "Enter the number of copies:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4788 +#: src/slic3r/GUI/Plater.cpp:4856 msgid "Copies of the selected object" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4792 +#: src/slic3r/GUI/Plater.cpp:4860 #, possible-c-format msgid "Set numbers of copies to %d" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4822 +#: src/slic3r/GUI/Plater.cpp:4921 msgid "Cut by Plane" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4873 +#: src/slic3r/GUI/Plater.cpp:4975 msgid "Save G-code file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:4873 +#: src/slic3r/GUI/Plater.cpp:4975 msgid "Save SL1 file as:" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5008 +#: src/slic3r/GUI/Plater.cpp:5118 #, possible-c-format msgid "STL file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5025 +#: src/slic3r/GUI/Plater.cpp:5135 #, possible-c-format msgid "AMF file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5028 +#: src/slic3r/GUI/Plater.cpp:5138 #, possible-c-format msgid "Error exporting AMF file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5057 +#: src/slic3r/GUI/Plater.cpp:5167 #, possible-c-format msgid "3MF file exported to %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5062 +#: src/slic3r/GUI/Plater.cpp:5172 #, possible-c-format msgid "Error exporting 3MF file %s" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5531 +#: src/slic3r/GUI/Plater.cpp:5706 msgid "Export" msgstr "" -#: src/slic3r/GUI/Plater.cpp:5617 +#: src/slic3r/GUI/Plater.cpp:5803 msgid "Paste From Clipboard" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1857 -#: src/slic3r/GUI/Tab.cpp:2069 +#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058 +#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 msgid "General" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:39 +#: src/slic3r/GUI/Preferences.cpp:52 msgid "Remember output directory" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:41 +#: src/slic3r/GUI/Preferences.cpp:54 msgid "" "If this is enabled, Slic3r will prompt the last output directory instead of " "the one containing the input files." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:47 +#: src/slic3r/GUI/Preferences.cpp:64 msgid "Auto-center parts" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:49 +#: src/slic3r/GUI/Preferences.cpp:66 msgid "" "If this is enabled, Slic3r will auto-center objects around the print bed " "center." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:55 +#: src/slic3r/GUI/Preferences.cpp:72 msgid "Background processing" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:57 +#: src/slic3r/GUI/Preferences.cpp:74 msgid "" "If this is enabled, Slic3r will pre-process objects as soon as they're " "loaded in order to save time when exporting G-code." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:66 +#: src/slic3r/GUI/Preferences.cpp:83 msgid "" "If enabled, PrusaSlicer will check for the new versions of itself online. " "When a new version becomes available a notification is displayed at the next " @@ -4667,17 +5562,17 @@ msgid "" "notification mechanisms, no automatic installation is done." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:72 +#: src/slic3r/GUI/Preferences.cpp:89 msgid "Export sources full pathnames to 3mf and amf" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:74 +#: src/slic3r/GUI/Preferences.cpp:91 msgid "" "If enabled, allows the Reload from disk command to automatically find and " "load the files when invoked." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:82 +#: src/slic3r/GUI/Preferences.cpp:99 msgid "" "If enabled, Slic3r downloads updates of built-in system presets in the " "background. These updates are downloaded into a separate temporary location. " @@ -4685,263 +5580,383 @@ msgid "" "startup." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:87 +#: src/slic3r/GUI/Preferences.cpp:104 msgid "Suppress \" - default - \" presets" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:89 +#: src/slic3r/GUI/Preferences.cpp:106 msgid "" "Suppress \" - default - \" presets in the Print / Filament / Printer " "selections once there are any other valid presets available." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:95 +#: src/slic3r/GUI/Preferences.cpp:112 msgid "Show incompatible print and filament presets" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:97 +#: src/slic3r/GUI/Preferences.cpp:114 msgid "" "When checked, the print and filament presets are shown in the preset editor " "even if they are marked as incompatible with the active printer" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:104 +#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3697 +msgid "Single Instance" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:123 +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:125 +msgid "" +"If this is enabled, when staring PrusaSlicer and another instance of same " +"PrusaSlicer is running, that instance will be reactivated instead." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:135 msgid "Use Retina resolution for the 3D scene" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:106 +#: src/slic3r/GUI/Preferences.cpp:137 msgid "" "If enabled, the 3D scene will be rendered in Retina resolution. If you are " "experiencing 3D performance problems, disabling this option may help." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:113 +#: src/slic3r/GUI/Preferences.cpp:154 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659 +msgid "Ask for unsaved changes when closing application" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:156 +msgid "Always ask for unsaved changes when closing application" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:161 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660 +msgid "Ask for unsaved changes when selecting new preset" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:163 +msgid "Always ask for unsaved changes when selecting new preset" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171 +msgid "Show splash screen" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:178 msgid "Camera" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:119 +#: src/slic3r/GUI/Preferences.cpp:184 msgid "Use perspective camera" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:121 +#: src/slic3r/GUI/Preferences.cpp:186 msgid "" "If enabled, use perspective camera. If not enabled, use orthographic camera." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:126 +#: src/slic3r/GUI/Preferences.cpp:191 msgid "Use free camera" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:128 +#: src/slic3r/GUI/Preferences.cpp:193 msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:133 +#: src/slic3r/GUI/Preferences.cpp:200 msgid "GUI" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:143 +#: src/slic3r/GUI/Preferences.cpp:213 +msgid "Show sidebar collapse/expand button" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:215 +msgid "" +"If enabled, the button for the collapse sidebar will be appeared in top " +"right corner of the 3D Scene" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:220 msgid "Use custom size for toolbar icons" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:145 +#: src/slic3r/GUI/Preferences.cpp:222 msgid "If enabled, you can change size of toolbar icons manually." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:172 +#: src/slic3r/GUI/Preferences.cpp:230 +msgid "Sequential slider applied only to top layer" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:232 +msgid "" +"If enabled, changes made using the sequential slider, in preview, apply only " +"to gcode top layer, if disabled, changes made using the sequential slider, " +"in preview, apply to the whole gcode." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:255 +msgid "Render" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:261 +msgid "Use environment map" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:263 +msgid "If enabled, renders object using the environment map." +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:299 #, possible-c-format msgid "You need to restart %s to make the changes effective." msgstr "" -#: src/slic3r/GUI/Preferences.cpp:222 +#: src/slic3r/GUI/Preferences.cpp:376 msgid "Icon size in a respect to the default size" msgstr "" -#: src/slic3r/GUI/Preferences.cpp:237 +#: src/slic3r/GUI/Preferences.cpp:391 msgid "Select toolbar icon size in respect to the default one." msgstr "" -#: src/slic3r/GUI/Preset.cpp:250 -msgid "modified" +#: src/slic3r/GUI/Preferences.cpp:422 +msgid "Old regular layout with the tab bar" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1151 src/slic3r/GUI/Preset.cpp:1206 -#: src/slic3r/GUI/Preset.cpp:1284 src/slic3r/GUI/Preset.cpp:1326 -#: src/slic3r/GUI/PresetBundle.cpp:1599 src/slic3r/GUI/PresetBundle.cpp:1697 +#: src/slic3r/GUI/Preferences.cpp:423 +msgid "New layout without the tab bar on the plater" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:424 +msgid "Settings will be shown in the non-modal dialog" +msgstr "" + +#: src/slic3r/GUI/Preferences.cpp:433 +msgid "Settings layout mode" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:188 +#: src/slic3r/GUI/PresetComboBoxes.cpp:226 +#: src/slic3r/GUI/PresetComboBoxes.cpp:724 +#: src/slic3r/GUI/PresetComboBoxes.cpp:774 +#: src/slic3r/GUI/PresetComboBoxes.cpp:886 +#: src/slic3r/GUI/PresetComboBoxes.cpp:930 msgid "System presets" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1210 src/slic3r/GUI/Preset.cpp:1330 -#: src/slic3r/GUI/PresetBundle.cpp:1702 +#: src/slic3r/GUI/PresetComboBoxes.cpp:230 +#: src/slic3r/GUI/PresetComboBoxes.cpp:778 +#: src/slic3r/GUI/PresetComboBoxes.cpp:934 msgid "User presets" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1243 +#: src/slic3r/GUI/PresetComboBoxes.cpp:241 +msgid "Incompatible presets" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:566 +msgid "Click to edit preset" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:622 +#: src/slic3r/GUI/PresetComboBoxes.cpp:669 +msgid "Add/Remove presets" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:627 +#: src/slic3r/GUI/PresetComboBoxes.cpp:674 +msgid "Add physical printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:641 +msgid "Edit preset" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:645 +msgid "Edit physical printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:652 +msgid "Delete physical printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:658 +msgid "Are you sure you want to delete \"%1%\" printer?" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:659 +msgid "Delete Physical Printer" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:789 +#: src/slic3r/GUI/PresetComboBoxes.cpp:948 +msgid "Physical printers" +msgstr "" + +#: src/slic3r/GUI/PresetComboBoxes.cpp:813 msgid "Add/Remove materials" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1245 +#: src/slic3r/GUI/PresetComboBoxes.cpp:815 +#: src/slic3r/GUI/PresetComboBoxes.cpp:972 msgid "Add/Remove printers" msgstr "" -#: src/slic3r/GUI/Preset.cpp:1564 -msgid "filament" -msgstr "" - -#: src/slic3r/GUI/Preset.cpp:1565 -msgid "SLA print" -msgstr "" - -#: src/slic3r/GUI/PresetBundle.cpp:1729 -msgid "Add/Remove filaments" -msgstr "" - -#: src/slic3r/GUI/PresetHints.cpp:29 +#: src/slic3r/GUI/PresetHints.cpp:28 msgid "" "If estimated layer time is below ~%1%s, fan will run at %2%%% and print " "speed will be reduced so that no less than %3%s are spent on that layer " "(however, speed will never be reduced below %4%mm/s)." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:36 +#: src/slic3r/GUI/PresetHints.cpp:35 msgid "" "If estimated layer time is greater, but still below ~%1%s, fan will run at a " "proportionally decreasing speed between %2%%% and %3%%%." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:40 +#: src/slic3r/GUI/PresetHints.cpp:39 msgid "During the other layers, fan" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:42 +#: src/slic3r/GUI/PresetHints.cpp:41 msgid "Fan" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:48 +#: src/slic3r/GUI/PresetHints.cpp:47 msgid "will always run at %1%%%" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:51 +#: src/slic3r/GUI/PresetHints.cpp:50 msgid "except for the first %1% layers." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:53 +#: src/slic3r/GUI/PresetHints.cpp:52 msgid "except for the first layer." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:55 +#: src/slic3r/GUI/PresetHints.cpp:54 msgid "will be turned off." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:156 +#: src/slic3r/GUI/PresetHints.cpp:155 msgid "external perimeters" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:165 +#: src/slic3r/GUI/PresetHints.cpp:164 msgid "perimeters" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:174 +#: src/slic3r/GUI/PresetHints.cpp:173 msgid "infill" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:184 +#: src/slic3r/GUI/PresetHints.cpp:183 msgid "solid infill" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:192 +#: src/slic3r/GUI/PresetHints.cpp:191 msgid "top solid infill" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:203 +#: src/slic3r/GUI/PresetHints.cpp:202 msgid "support" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:213 +#: src/slic3r/GUI/PresetHints.cpp:212 msgid "support interface" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:219 +#: src/slic3r/GUI/PresetHints.cpp:218 msgid "First layer volumetric" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:219 +#: src/slic3r/GUI/PresetHints.cpp:218 msgid "Bridging volumetric" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:219 +#: src/slic3r/GUI/PresetHints.cpp:218 msgid "Volumetric" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:220 +#: src/slic3r/GUI/PresetHints.cpp:219 msgid "flow rate is maximized" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:223 +#: src/slic3r/GUI/PresetHints.cpp:222 msgid "by the print profile maximum" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:224 +#: src/slic3r/GUI/PresetHints.cpp:223 msgid "when printing" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:225 +#: src/slic3r/GUI/PresetHints.cpp:224 msgid "with a volumetric rate" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:229 +#: src/slic3r/GUI/PresetHints.cpp:228 #, possible-c-format msgid "%3.2f mm³/s at filament speed %3.2f mm/s." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:247 +#: src/slic3r/GUI/PresetHints.cpp:246 msgid "" "Recommended object thin wall thickness: Not available due to invalid layer " "height." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:263 +#: src/slic3r/GUI/PresetHints.cpp:262 #, possible-c-format msgid "Recommended object thin wall thickness for layer height %.2f and" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:270 +#: src/slic3r/GUI/PresetHints.cpp:269 #, possible-c-format msgid "%d lines: %.2f mm" msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:274 +#: src/slic3r/GUI/PresetHints.cpp:273 msgid "" "Recommended object thin wall thickness: Not available due to excessively " "small extrusion width." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:304 +#: src/slic3r/GUI/PresetHints.cpp:302 msgid "" "Top / bottom shell thickness hint: Not available due to invalid layer height." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:317 +#: src/slic3r/GUI/PresetHints.cpp:315 msgid "Top shell is %1% mm thick for layer height %2% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:320 +#: src/slic3r/GUI/PresetHints.cpp:318 msgid "Minimum top shell thickness is %1% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:323 +#: src/slic3r/GUI/PresetHints.cpp:321 msgid "Top is open." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:336 +#: src/slic3r/GUI/PresetHints.cpp:334 msgid "Bottom shell is %1% mm thick for layer height %2% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:339 +#: src/slic3r/GUI/PresetHints.cpp:337 msgid "Minimum bottom shell thickness is %1% mm." msgstr "" -#: src/slic3r/GUI/PresetHints.cpp:342 +#: src/slic3r/GUI/PresetHints.cpp:340 msgid "Bottom is open." msgstr "" @@ -4961,35 +5976,35 @@ msgstr "" msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:149 +#: src/slic3r/GUI/PrintHostDialogs.cpp:147 msgid "ID" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:150 +#: src/slic3r/GUI/PrintHostDialogs.cpp:148 msgid "Progress" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:151 +#: src/slic3r/GUI/PrintHostDialogs.cpp:149 msgid "Status" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:152 +#: src/slic3r/GUI/PrintHostDialogs.cpp:150 msgid "Host" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:153 +#: src/slic3r/GUI/PrintHostDialogs.cpp:151 msgid "Filename" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:154 +#: src/slic3r/GUI/PrintHostDialogs.cpp:152 msgid "Error Message" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:157 +#: src/slic3r/GUI/PrintHostDialogs.cpp:155 msgid "Cancel selected" msgstr "" -#: src/slic3r/GUI/PrintHostDialogs.cpp:159 +#: src/slic3r/GUI/PrintHostDialogs.cpp:157 msgid "Show error message" msgstr "" @@ -5014,17 +6029,13 @@ msgstr "" msgid "NO RAMMING AT ALL" msgstr "" -#: src/slic3r/GUI/RammingChart.cpp:76 -msgid "Time" -msgstr "" - #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83 -#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688 -#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2415 -#: src/libslic3r/PrintConfig.cpp:2424 src/libslic3r/PrintConfig.cpp:2534 -#: src/libslic3r/PrintConfig.cpp:2542 src/libslic3r/PrintConfig.cpp:2550 -#: src/libslic3r/PrintConfig.cpp:2557 src/libslic3r/PrintConfig.cpp:2565 -#: src/libslic3r/PrintConfig.cpp:2573 +#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724 +#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551 +#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670 +#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686 +#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701 +#: src/libslic3r/PrintConfig.cpp:2709 msgid "s" msgstr "" @@ -5032,441 +6043,484 @@ msgstr "" msgid "Volumetric speed" msgstr "" -#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601 -#: src/libslic3r/PrintConfig.cpp:1250 +#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637 +#: src/libslic3r/PrintConfig.cpp:1358 msgid "mm³/s" msgstr "" -#: src/slic3r/GUI/Selection.cpp:147 +#: src/slic3r/GUI/SavePresetDialog.cpp:72 +#, possible-c-format +msgid "Save %s as:" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:125 +msgid "the following suffix is not allowed:" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:131 +msgid "The supplied name is not available." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:137 +msgid "Cannot overwrite a system profile." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:142 +msgid "Cannot overwrite an external profile." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:148 +msgid "Preset with name \"%1%\" already exists." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:150 +msgid "And selected preset is imcopatible with selected printer." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:151 +msgid "Note: This preset will be replaced after saving" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:156 +msgid "The empty name is not available." +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:190 +#: src/slic3r/GUI/SavePresetDialog.cpp:196 +msgid "Save preset" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:219 +msgctxt "PresetName" +msgid "Copy" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:277 +msgid "" +"You have selected physical printer \"%1%\" \n" +"with related printer preset \"%2%\"" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:310 +msgid "What would you like to do with \"%1%\" preset after saving?" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:313 +msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:314 +msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\"" +msgstr "" + +#: src/slic3r/GUI/SavePresetDialog.cpp:315 +msgid "Just switch to \"%1%\" preset" +msgstr "" + +#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378 +msgid "Stealth" +msgstr "" + +#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372 +msgid "Normal" +msgstr "" + +#: src/slic3r/GUI/Selection.cpp:191 msgid "Selection-Add" msgstr "" -#: src/slic3r/GUI/Selection.cpp:188 +#: src/slic3r/GUI/Selection.cpp:232 msgid "Selection-Remove" msgstr "" -#: src/slic3r/GUI/Selection.cpp:220 +#: src/slic3r/GUI/Selection.cpp:264 msgid "Selection-Add Object" msgstr "" -#: src/slic3r/GUI/Selection.cpp:239 +#: src/slic3r/GUI/Selection.cpp:283 msgid "Selection-Remove Object" msgstr "" -#: src/slic3r/GUI/Selection.cpp:257 +#: src/slic3r/GUI/Selection.cpp:301 msgid "Selection-Add Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:276 +#: src/slic3r/GUI/Selection.cpp:320 msgid "Selection-Remove Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:377 +#: src/slic3r/GUI/Selection.cpp:421 msgid "Selection-Add All" msgstr "" -#: src/slic3r/GUI/Selection.cpp:403 +#: src/slic3r/GUI/Selection.cpp:447 msgid "Selection-Remove All" msgstr "" -#: src/slic3r/GUI/Selection.cpp:946 +#: src/slic3r/GUI/Selection.cpp:988 msgid "Scale To Fit" msgstr "" -#: src/slic3r/GUI/Selection.cpp:1483 +#: src/slic3r/GUI/Selection.cpp:1515 msgid "Set Printable Instance" msgstr "" -#: src/slic3r/GUI/Selection.cpp:1483 +#: src/slic3r/GUI/Selection.cpp:1515 msgid "Set Unprintable Instance" msgstr "" -#: src/slic3r/GUI/SysInfoDialog.cpp:78 +#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92 msgid "System Information" msgstr "" -#: src/slic3r/GUI/SysInfoDialog.cpp:158 +#: src/slic3r/GUI/SysInfoDialog.cpp:177 msgid "Copy to Clipboard" msgstr "" -#: src/slic3r/GUI/Tab.cpp:51 src/libslic3r/PrintConfig.cpp:265 +#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299 msgid "Compatible printers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:52 +#: src/slic3r/GUI/Tab.cpp:102 msgid "Select the printers this profile is compatible with." msgstr "" -#: src/slic3r/GUI/Tab.cpp:57 src/libslic3r/PrintConfig.cpp:280 +#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314 msgid "Compatible print profiles" msgstr "" -#: src/slic3r/GUI/Tab.cpp:58 +#: src/slic3r/GUI/Tab.cpp:108 msgid "Select the print profiles this profile is compatible with." msgstr "" #. TRN "Save current Settings" -#: src/slic3r/GUI/Tab.cpp:134 +#: src/slic3r/GUI/Tab.cpp:203 #, possible-c-format msgid "Save current %s" msgstr "" -#: src/slic3r/GUI/Tab.cpp:135 +#: src/slic3r/GUI/Tab.cpp:204 msgid "Delete this preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:140 +#: src/slic3r/GUI/Tab.cpp:210 msgid "" "Hover the cursor over buttons to find more information \n" "or click this button." msgstr "" -#: src/slic3r/GUI/Tab.cpp:248 -msgid "Add a new printer" +#: src/slic3r/GUI/Tab.cpp:214 +msgid "Click to start a search or use %1% shortcut" msgstr "" -#: src/slic3r/GUI/Tab.cpp:970 +#: src/slic3r/GUI/Tab.cpp:1224 msgid "Detach from system preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:982 +#: src/slic3r/GUI/Tab.cpp:1237 msgid "" "A copy of the current system preset will be created, which will be detached " "from the system preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:983 +#: src/slic3r/GUI/Tab.cpp:1238 msgid "" "The current custom preset will be detached from the parent system preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:986 +#: src/slic3r/GUI/Tab.cpp:1241 msgid "Modifications to the current profile will be saved." msgstr "" -#: src/slic3r/GUI/Tab.cpp:989 +#: src/slic3r/GUI/Tab.cpp:1244 msgid "" "This action is not revertable.\n" "Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:991 +#: src/slic3r/GUI/Tab.cpp:1246 msgid "Detach preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1017 +#: src/slic3r/GUI/Tab.cpp:1272 msgid "This is a default preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1019 +#: src/slic3r/GUI/Tab.cpp:1274 msgid "This is a system preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1021 +#: src/slic3r/GUI/Tab.cpp:1276 msgid "Current preset is inherited from the default preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1023 +#: src/slic3r/GUI/Tab.cpp:1278 msgid "Current preset is inherited from" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1027 +#: src/slic3r/GUI/Tab.cpp:1282 msgid "It can't be deleted or modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1028 +#: src/slic3r/GUI/Tab.cpp:1283 msgid "" "Any modifications should be saved as a new preset inherited from this one." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1029 +#: src/slic3r/GUI/Tab.cpp:1284 msgid "To do that please specify a new name for the preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1033 +#: src/slic3r/GUI/Tab.cpp:1288 msgid "Additional information:" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1039 +#: src/slic3r/GUI/Tab.cpp:1294 msgid "printer model" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1047 +#: src/slic3r/GUI/Tab.cpp:1302 msgid "default print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1050 +#: src/slic3r/GUI/Tab.cpp:1305 msgid "default filament profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1064 +#: src/slic3r/GUI/Tab.cpp:1319 msgid "default SLA material profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1068 +#: src/slic3r/GUI/Tab.cpp:1323 msgid "default SLA print profile" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1076 +#: src/slic3r/GUI/Tab.cpp:1331 msgid "full profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1077 +#: src/slic3r/GUI/Tab.cpp:1332 msgid "symbolic profile name" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1115 src/slic3r/GUI/Tab.cpp:3665 +#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008 msgid "Layers and perimeters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1120 +#: src/slic3r/GUI/Tab.cpp:1375 msgid "Vertical shells" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1131 +#: src/slic3r/GUI/Tab.cpp:1386 msgid "Horizontal shells" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1132 src/libslic3r/PrintConfig.cpp:1787 +#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895 msgid "Solid layers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1136 +#: src/slic3r/GUI/Tab.cpp:1391 msgid "Minimum shell thickness" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1147 +#: src/slic3r/GUI/Tab.cpp:1402 msgid "Quality (slower slicing)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1165 +#: src/slic3r/GUI/Tab.cpp:1426 msgid "Reducing printing time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1177 +#: src/slic3r/GUI/Tab.cpp:1438 msgid "Skirt and brim" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1195 +#: src/slic3r/GUI/Tab.cpp:1456 msgid "Raft" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1199 +#: src/slic3r/GUI/Tab.cpp:1460 msgid "Options for support material and raft" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1214 +#: src/slic3r/GUI/Tab.cpp:1475 msgid "Speed for print moves" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1226 +#: src/slic3r/GUI/Tab.cpp:1488 msgid "Speed for non-print moves" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1229 +#: src/slic3r/GUI/Tab.cpp:1491 msgid "Modifiers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1232 +#: src/slic3r/GUI/Tab.cpp:1494 msgid "Acceleration control (advanced)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1239 +#: src/slic3r/GUI/Tab.cpp:1501 msgid "Autospeed (advanced)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1247 +#: src/slic3r/GUI/Tab.cpp:1509 msgid "Multiple Extruders" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1255 +#: src/slic3r/GUI/Tab.cpp:1517 msgid "Ooze prevention" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1273 +#: src/slic3r/GUI/Tab.cpp:1535 msgid "Extrusion width" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1283 +#: src/slic3r/GUI/Tab.cpp:1545 msgid "Overlap" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1286 +#: src/slic3r/GUI/Tab.cpp:1548 msgid "Flow" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1295 +#: src/slic3r/GUI/Tab.cpp:1557 msgid "Other" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1298 src/slic3r/GUI/Tab.cpp:3734 +#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084 msgid "Output options" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1299 +#: src/slic3r/GUI/Tab.cpp:1561 msgid "Sequential printing" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1301 +#: src/slic3r/GUI/Tab.cpp:1563 msgid "Extruder clearance (mm)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1306 src/slic3r/GUI/Tab.cpp:3735 +#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085 msgid "Output file" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1313 src/libslic3r/PrintConfig.cpp:1453 +#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561 msgid "Post-processing scripts" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1319 src/slic3r/GUI/Tab.cpp:1320 -#: src/slic3r/GUI/Tab.cpp:1606 src/slic3r/GUI/Tab.cpp:1607 -#: src/slic3r/GUI/Tab.cpp:2045 src/slic3r/GUI/Tab.cpp:2046 -#: src/slic3r/GUI/Tab.cpp:2127 src/slic3r/GUI/Tab.cpp:2128 -#: src/slic3r/GUI/Tab.cpp:3608 src/slic3r/GUI/Tab.cpp:3609 +#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582 +#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888 +#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222 +#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298 +#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952 msgid "Notes" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1326 src/slic3r/GUI/Tab.cpp:1614 -#: src/slic3r/GUI/Tab.cpp:2052 src/slic3r/GUI/Tab.cpp:2134 -#: src/slic3r/GUI/Tab.cpp:3616 src/slic3r/GUI/Tab.cpp:3740 +#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895 +#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304 +#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090 msgid "Dependencies" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1327 src/slic3r/GUI/Tab.cpp:1615 -#: src/slic3r/GUI/Tab.cpp:2053 src/slic3r/GUI/Tab.cpp:2135 -#: src/slic3r/GUI/Tab.cpp:3617 src/slic3r/GUI/Tab.cpp:3741 +#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896 +#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305 +#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091 msgid "Profile dependencies" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1389 src/slic3r/GUI/Tab.cpp:1444 +#: src/slic3r/GUI/Tab.cpp:1669 msgid "Filament Overrides" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1390 src/slic3r/GUI/Tab.cpp:1449 -#: src/slic3r/GUI/Tab.cpp:2365 -msgid "Retraction" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1499 src/libslic3r/PrintConfig.cpp:2074 +#: src/slic3r/GUI/Tab.cpp:1779 msgid "Temperature" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1505 +#: src/slic3r/GUI/Tab.cpp:1785 msgid "Bed" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1510 +#: src/slic3r/GUI/Tab.cpp:1790 msgid "Cooling" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1511 src/libslic3r/PrintConfig.cpp:1355 -#: src/libslic3r/PrintConfig.cpp:2207 +#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463 +#: src/libslic3r/PrintConfig.cpp:2343 msgid "Enable" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1522 +#: src/slic3r/GUI/Tab.cpp:1802 msgid "Fan settings" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1531 +#: src/slic3r/GUI/Tab.cpp:1811 msgid "Cooling thresholds" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1537 +#: src/slic3r/GUI/Tab.cpp:1817 msgid "Filament properties" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1544 +#: src/slic3r/GUI/Tab.cpp:1824 msgid "Print speed override" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1554 +#: src/slic3r/GUI/Tab.cpp:1834 msgid "Wipe tower parameters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1557 +#: src/slic3r/GUI/Tab.cpp:1837 msgid "Toolchange parameters with single extruder MM printers" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1571 +#: src/slic3r/GUI/Tab.cpp:1850 msgid "Ramming settings" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1593 src/slic3r/GUI/Tab.cpp:2008 +#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160 +#: src/libslic3r/PrintConfig.cpp:1978 msgid "Custom G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1594 src/slic3r/GUI/Tab.cpp:2009 -#: src/libslic3r/PrintConfig.cpp:1820 src/libslic3r/PrintConfig.cpp:1835 +#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161 +#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943 msgid "Start G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1600 src/slic3r/GUI/Tab.cpp:2015 -#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395 +#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168 +#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429 msgid "End G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1649 +#: src/slic3r/GUI/Tab.cpp:1930 msgid "Volumetric flow hints not available" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1735 src/slic3r/GUI/Tab.cpp:1948 -msgid "Test" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1744 -msgid "Could not get a valid Printer Host reference" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1750 src/slic3r/GUI/Tab.cpp:1961 -msgid "Success!" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1770 +#: src/slic3r/GUI/Tab.cpp:2026 msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +"Note: All parameters from this group are moved to the Physical Printer " +"settings (see changelog).\n" +"\n" +"A new Physical Printer profile is created by clicking on the \"cog\" icon " +"right of the Printer profiles combo box, by selecting the \"add or remove " +"printers\" item in the Printer combo box. The Physical Printer profile " +"editor opens also when clicking on the \"cog\" icon in the Printer settings " +"tab. The Physical Printer profiles are being stored into PrusaSlicer/" +"physical_printer directory." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1785 -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1786 -msgid "Open CA certificate file" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1813 src/libslic3r/PrintConfig.cpp:111 -msgid "HTTPS CA File" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1814 -#, possible-c-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1815 -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1858 src/slic3r/GUI/Tab.cpp:2070 +#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241 msgid "Size and coordinates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1867 +#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066 msgid "Capabilities" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1872 +#: src/slic3r/GUI/Tab.cpp:2073 msgid "Number of extruders of the printer." msgstr "" -#: src/slic3r/GUI/Tab.cpp:1900 +#: src/slic3r/GUI/Tab.cpp:2101 msgid "" "Single Extruder Multi Material is selected, \n" "and all extruders must have the same diameter.\n" @@ -5474,256 +6528,227 @@ msgid "" "nozzle diameter value?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1903 src/slic3r/GUI/Tab.cpp:2335 -#: src/libslic3r/PrintConfig.cpp:1326 +#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509 +#: src/libslic3r/PrintConfig.cpp:1434 msgid "Nozzle diameter" msgstr "" -#: src/slic3r/GUI/Tab.cpp:1933 -msgid "USB/Serial connection" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1934 src/libslic3r/PrintConfig.cpp:1661 -msgid "Serial port" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1939 -msgid "Rescan serial ports" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1961 -msgid "Connection to printer works correctly." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1964 -msgid "Connection failed." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:1977 src/slic3r/GUI/Tab.cpp:2122 -msgid "Print Host upload" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2021 src/libslic3r/PrintConfig.cpp:153 +#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187 msgid "Before layer change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2027 src/libslic3r/PrintConfig.cpp:1080 +#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173 msgid "After layer change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2033 src/libslic3r/PrintConfig.cpp:2100 +#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236 msgid "Tool change G-code" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2039 +#: src/slic3r/GUI/Tab.cpp:2196 msgid "Between objects G-code (for sequential printing)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2077 +#: src/slic3r/GUI/Tab.cpp:2203 +msgid "Color Change G-code" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969 +msgid "Pause Print G-code" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:2215 +msgid "Template Custom G-code" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:2248 msgid "Display" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2092 +#: src/slic3r/GUI/Tab.cpp:2263 msgid "Tilt" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2093 +#: src/slic3r/GUI/Tab.cpp:2264 msgid "Tilt time" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2099 src/slic3r/GUI/Tab.cpp:3592 +#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935 msgid "Corrections" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2116 src/slic3r/GUI/Tab.cpp:3588 +#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931 msgid "Exposure" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2183 src/slic3r/GUI/Tab.cpp:2268 -#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146 -#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179 -#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199 -#: src/libslic3r/PrintConfig.cpp:1209 +#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442 +#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237 +#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271 +#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297 +#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317 msgid "Machine limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2197 +#: src/slic3r/GUI/Tab.cpp:2371 msgid "Values in this column are for Normal mode" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2198 -msgid "Normal" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2203 +#: src/slic3r/GUI/Tab.cpp:2377 msgid "Values in this column are for Stealth mode" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2204 -msgid "Stealth" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2212 +#: src/slic3r/GUI/Tab.cpp:2386 msgid "Maximum feedrates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2217 +#: src/slic3r/GUI/Tab.cpp:2391 msgid "Maximum accelerations" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2224 +#: src/slic3r/GUI/Tab.cpp:2398 msgid "Jerk limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2229 +#: src/slic3r/GUI/Tab.cpp:2403 msgid "Minimum feedrates" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2293 src/slic3r/GUI/Tab.cpp:2301 +#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475 msgid "Single extruder MM setup" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2302 +#: src/slic3r/GUI/Tab.cpp:2476 msgid "Single extruder multimaterial parameters" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2333 +#: src/slic3r/GUI/Tab.cpp:2507 msgid "" "This is a single extruder multimaterial printer, diameters of all extruders " "will be set to the new value. Do you want to proceed?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2357 +#: src/slic3r/GUI/Tab.cpp:2531 msgid "Layer height limits" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2362 +#: src/slic3r/GUI/Tab.cpp:2536 msgid "Position (for multi-extruder printers)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2368 +#: src/slic3r/GUI/Tab.cpp:2542 msgid "Only lift Z" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2381 +#: src/slic3r/GUI/Tab.cpp:2555 msgid "" "Retraction when tool is disabled (advanced settings for multi-extruder " "setups)" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2389 +#: src/slic3r/GUI/Tab.cpp:2564 msgid "Reset to Filament Color" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2570 +#: src/slic3r/GUI/Tab.cpp:2731 msgid "" "The Wipe option is not available when using the Firmware Retraction mode.\n" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2572 +#: src/slic3r/GUI/Tab.cpp:2733 msgid "Firmware Retraction" msgstr "" -#: src/slic3r/GUI/Tab.cpp:2918 -#, possible-c-format -msgid "Default preset (%s)" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2919 -#, possible-c-format -msgid "Preset (%s)" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2936 -msgid "has the following unsaved changes:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2939 -msgid "is not compatible with printer" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2940 -msgid "is not compatible with print profile" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2942 -msgid "and it has the following unsaved changes:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:2946 -msgid "Unsaved Changes" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3040 +#: src/slic3r/GUI/Tab.cpp:3323 msgid "Detached" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3040 -msgctxt "PresetName" -msgid "Copy" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3069 -msgid "The supplied name is empty. It can't be saved." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3074 -msgid "Cannot overwrite a system profile." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3078 -msgid "Cannot overwrite an external profile." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3083 -msgid "Preset with name \"%1%\" already exists." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3084 -msgid "Replace?" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3152 +#: src/slic3r/GUI/Tab.cpp:3386 msgid "remove" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3152 +#: src/slic3r/GUI/Tab.cpp:3386 msgid "delete" msgstr "" -#. TRN remove/delete -#: src/slic3r/GUI/Tab.cpp:3154 +#: src/slic3r/GUI/Tab.cpp:3392 +msgid "" +"Are you sure you want to delete \"%1%\" preset from the physical printer " +"\"%2%\"?" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3404 +msgid "Next physical printer(s) has/have selected preset" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3408 +msgid "" +"Note, that selected preset will be deleted from this/those printer(s) too." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3412 +msgid "Next physical printer(s) has/have one and only selected preset" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3416 +msgid "" +"Note, that this/those printer(s) will be deleted after deleting of the " +"selected preset." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3420 msgid "Are you sure you want to %1% the selected preset?" msgstr "" #. TRN Remove/Delete -#: src/slic3r/GUI/Tab.cpp:3157 +#: src/slic3r/GUI/Tab.cpp:3425 msgid "%1% Preset" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3216 src/slic3r/GUI/Tab.cpp:3286 +#: src/slic3r/GUI/Tab.cpp:3435 +msgid "It's a last for this physical printer. We can't delete it" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588 msgid "Set" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3325 +#: src/slic3r/GUI/Tab.cpp:3660 +msgid "" +"Machine limits will be emitted to G-code and used to estimate print time." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3663 +msgid "" +"Machine limits will NOT be emitted to G-code, however they will be used to " +"estimate print time, which may therefore not be accurate as the printer may " +"apply a different set of machine limits." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3667 +msgid "" +"Machine limits are not set, therefore the print time estimate may not be " +"accurate." +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:3689 msgid "LOCKED LOCK" msgstr "" #. TRN Description for "LOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:3327 +#: src/slic3r/GUI/Tab.cpp:3691 msgid "" "indicates that the settings are the same as the system (or default) values " "for the current option group" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3329 +#: src/slic3r/GUI/Tab.cpp:3693 msgid "UNLOCKED LOCK" msgstr "" #. TRN Description for "UNLOCKED LOCK" -#: src/slic3r/GUI/Tab.cpp:3331 +#: src/slic3r/GUI/Tab.cpp:3695 msgid "" "indicates that some settings were changed and are not equal to the system " "(or default) values for the current option group.\n" @@ -5731,23 +6756,23 @@ msgid "" "to the system (or default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3336 +#: src/slic3r/GUI/Tab.cpp:3700 msgid "WHITE BULLET" msgstr "" #. TRN Description for "WHITE BULLET" -#: src/slic3r/GUI/Tab.cpp:3338 +#: src/slic3r/GUI/Tab.cpp:3702 msgid "" "for the left button: indicates a non-system (or non-default) preset,\n" "for the right button: indicates that the settings hasn't been modified." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3341 +#: src/slic3r/GUI/Tab.cpp:3705 msgid "BACK ARROW" msgstr "" #. TRN Description for "BACK ARROW" -#: src/slic3r/GUI/Tab.cpp:3343 +#: src/slic3r/GUI/Tab.cpp:3707 msgid "" "indicates that the settings were changed and are not equal to the last saved " "preset for the current option group.\n" @@ -5755,13 +6780,13 @@ msgid "" "to the last saved preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3353 +#: src/slic3r/GUI/Tab.cpp:3717 msgid "" "LOCKED LOCK icon indicates that the settings are the same as the system (or " "default) values for the current option group" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3355 +#: src/slic3r/GUI/Tab.cpp:3719 msgid "" "UNLOCKED LOCK icon indicates that some settings were changed and are not " "equal to the system (or default) values for the current option group.\n" @@ -5769,17 +6794,17 @@ msgid "" "default) values." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3358 +#: src/slic3r/GUI/Tab.cpp:3722 msgid "WHITE BULLET icon indicates a non system (or non default) preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3361 +#: src/slic3r/GUI/Tab.cpp:3725 msgid "" "WHITE BULLET icon indicates that the settings are the same as in the last " "saved preset for the current option group." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3363 +#: src/slic3r/GUI/Tab.cpp:3727 msgid "" "BACK ARROW icon indicates that the settings were changed and are not equal " "to the last saved preset for the current option group.\n" @@ -5787,84 +6812,197 @@ msgid "" "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3369 +#: src/slic3r/GUI/Tab.cpp:3733 msgid "" "LOCKED LOCK icon indicates that the value is the same as the system (or " "default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3370 +#: src/slic3r/GUI/Tab.cpp:3734 msgid "" "UNLOCKED LOCK icon indicates that the value was changed and is not equal to " "the system (or default) value.\n" "Click to reset current value to the system (or default) value." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3376 +#: src/slic3r/GUI/Tab.cpp:3740 msgid "" "WHITE BULLET icon indicates that the value is the same as in the last saved " "preset." msgstr "" -#: src/slic3r/GUI/Tab.cpp:3377 +#: src/slic3r/GUI/Tab.cpp:3741 msgid "" "BACK ARROW icon indicates that the value was changed and is not equal to the " "last saved preset.\n" "Click to reset current value to the last saved preset." msgstr "" -#. TRN Preset -#: src/slic3r/GUI/Tab.cpp:3490 -#, possible-c-format -msgid "Save %s as:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3534 -msgid "the following suffix is not allowed:" -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3538 -msgid "The supplied name is not available." -msgstr "" - -#: src/slic3r/GUI/Tab.cpp:3551 src/slic3r/GUI/Tab.cpp:3553 +#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896 msgid "Material" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3675 +#: src/slic3r/GUI/Tab.cpp:4018 msgid "Support head" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3680 +#: src/slic3r/GUI/Tab.cpp:4023 msgid "Support pillar" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3696 +#: src/slic3r/GUI/Tab.cpp:4046 msgid "Connection of the support sticks and junctions" msgstr "" -#: src/slic3r/GUI/Tab.cpp:3701 +#: src/slic3r/GUI/Tab.cpp:4051 msgid "Automatic generation" msgstr "" -#: src/slic3r/GUI/Tab.hpp:336 src/slic3r/GUI/Tab.hpp:441 +#: src/slic3r/GUI/Tab.cpp:4125 +msgid "" +"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" +"To enable \"%1%\", please switch off \"%2%\"" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917 +msgid "Object elevation" +msgstr "" + +#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019 +msgid "Pad around object" +msgstr "" + +#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502 msgid "Print Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:363 +#: src/slic3r/GUI/Tab.hpp:409 msgid "Filament Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:399 +#: src/slic3r/GUI/Tab.hpp:453 msgid "Printer Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:426 +#: src/slic3r/GUI/Tab.hpp:486 msgid "Material Settings" msgstr "" -#: src/slic3r/GUI/Tab.hpp:453 -msgid "Save preset" +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146 +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845 +msgid "Undef" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525 +msgid "Closing PrusaSlicer: Unsaved Changes" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542 +msgid "Switching Presets: Unsaved Changes" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608 +msgid "Old Value" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609 +msgid "New Value" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640 +msgid "Transfer" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641 +msgid "Discard" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642 +msgid "Save" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662 +msgid "PrusaSlicer will remember your action." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664 +msgid "" +"You will not be asked about the unsaved changes the next time you close " +"PrusaSlicer." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665 +msgid "" +"You will not be asked about the unsaved changes the next time you switch a " +"preset." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666 +msgid "" +"Visit \"Preferences\" and check \"%1%\"\n" +"to be asked about unsaved changes again." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668 +msgid "PrusaSlicer: Don't ask me again" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735 +msgid "" +"Some fields are too long to fit. Right mouse click reveals the full text." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737 +msgid "All modified options will be reverted." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740 +msgid "Save the selected options." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740 +msgid "Transfer the selected options to the newly selected presets." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744 +msgid "Save the selected options to preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745 +msgid "Transfer the selected options to the newly selected preset \"%1%\"." +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004 +msgid "The following presets were modified:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009 +msgid "Preset \"%1%\" has the following unsaved changes:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013 +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it has the " +"following unsaved changes:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014 +msgid "" +"Preset \"%1%\" is not compatible with the new print profile and it has the " +"following unsaved changes:" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061 +msgid "Extruders count" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177 +msgid "Old value" +msgstr "" + +#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178 +msgid "New value" msgstr "" #: src/slic3r/GUI/UpdateDialogs.cpp:38 @@ -6101,17 +7239,17 @@ msgstr "" msgid "Show advanced settings" msgstr "" -#: src/slic3r/GUI/wxExtensions.cpp:706 +#: src/slic3r/GUI/wxExtensions.cpp:623 #, possible-c-format msgid "Switch to the %s mode" msgstr "" -#: src/slic3r/GUI/wxExtensions.cpp:707 +#: src/slic3r/GUI/wxExtensions.cpp:624 #, possible-c-format msgid "Current mode is %s" msgstr "" -#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:69 +#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68 #, possible-c-format msgid "Mismatched type of print host: %s" msgstr "" @@ -6183,7 +7321,7 @@ msgid "Model fixing" msgstr "" #: src/slic3r/Utils/FixModelByWin10.cpp:341 -msgid "Exporting model..." +msgid "Exporting model" msgstr "" #: src/slic3r/Utils/FixModelByWin10.cpp:368 @@ -6249,188 +7387,86 @@ msgid "" "is required." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:84 +#: src/slic3r/Utils/OctoPrint.cpp:83 msgid "Connection to OctoPrint works correctly." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:90 +#: src/slic3r/Utils/OctoPrint.cpp:89 msgid "Could not connect to OctoPrint" msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:92 +#: src/slic3r/Utils/OctoPrint.cpp:91 msgid "Note: OctoPrint version at least 1.1.0 is required." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:179 +#: src/slic3r/Utils/OctoPrint.cpp:185 msgid "Connection to Prusa SL1 works correctly." msgstr "" -#: src/slic3r/Utils/OctoPrint.cpp:185 +#: src/slic3r/Utils/OctoPrint.cpp:191 msgid "Could not connect to Prusa SLA" msgstr "" -#: src/slic3r/Utils/PresetUpdater.cpp:706 +#: src/slic3r/Utils/PresetUpdater.cpp:726 #, possible-c-format msgid "requires min. %s and max. %s" msgstr "" -#: src/slic3r/Utils/PresetUpdater.cpp:710 +#: src/slic3r/Utils/PresetUpdater.cpp:730 #, possible-c-format msgid "requires min. %s" msgstr "" -#: src/slic3r/Utils/PresetUpdater.cpp:713 +#: src/slic3r/Utils/PresetUpdater.cpp:733 #, possible-c-format msgid "requires max. %s" msgstr "" -#: src/libslic3r/SLA/Pad.cpp:691 -msgid "Pad brim size is too small for the current configuration." +#: src/slic3r/Utils/Http.cpp:73 +msgid "" +"Could not detect system SSL certificate store. PrusaSlicer will be unable to " +"establish secure network connections." msgstr "" -#: src/libslic3r/Zipper.cpp:32 -msgid "undefined error" +#: src/slic3r/Utils/Http.cpp:78 +msgid "PrusaSlicer detected system SSL certificate store in: %1%" msgstr "" -#: src/libslic3r/Zipper.cpp:34 -msgid "too many files" +#: src/slic3r/Utils/Http.cpp:82 +msgid "" +"To specify the system certificate store manually, please set the %1% " +"environment variable to the correct CA bundle and restart the application." msgstr "" -#: src/libslic3r/Zipper.cpp:36 -msgid "file too large" +#: src/slic3r/Utils/Http.cpp:91 +msgid "" +"CURL init has failed. PrusaSlicer will be unable to establish network " +"connections. See logs for additional details." msgstr "" -#: src/libslic3r/Zipper.cpp:38 -msgid "unsupported method" +#: src/slic3r/Utils/Process.cpp:151 +msgid "Open G-code file:" msgstr "" -#: src/libslic3r/Zipper.cpp:40 -msgid "unsupported encryption" +#: src/libslic3r/GCode.cpp:604 +msgid "There is an object with no extrusions on the first layer." msgstr "" -#: src/libslic3r/Zipper.cpp:42 -msgid "unsupported feature" -msgstr "" - -#: src/libslic3r/Zipper.cpp:44 -msgid "failed finding central directory" -msgstr "" - -#: src/libslic3r/Zipper.cpp:46 -msgid "not a ZIP archive" -msgstr "" - -#: src/libslic3r/Zipper.cpp:48 -msgid "invalid header or archive is corrupted" -msgstr "" - -#: src/libslic3r/Zipper.cpp:50 -msgid "unsupported multidisk archive" -msgstr "" - -#: src/libslic3r/Zipper.cpp:52 -msgid "decompression failed or archive is corrupted" -msgstr "" - -#: src/libslic3r/Zipper.cpp:54 -msgid "compression failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:56 -msgid "unexpected decompressed size" -msgstr "" - -#: src/libslic3r/Zipper.cpp:58 -msgid "CRC-32 check failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:60 -msgid "unsupported central directory size" -msgstr "" - -#: src/libslic3r/Zipper.cpp:62 -msgid "allocation failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:64 -msgid "file open failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:66 -msgid "file create failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:68 -msgid "file write failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:70 -msgid "file read failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:72 -msgid "file close failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:74 -msgid "file seek failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:76 -msgid "file stat failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:78 -msgid "invalid parameter" -msgstr "" - -#: src/libslic3r/Zipper.cpp:80 -msgid "invalid filename" -msgstr "" - -#: src/libslic3r/Zipper.cpp:82 -msgid "buffer too small" -msgstr "" - -#: src/libslic3r/Zipper.cpp:84 -msgid "internal error" -msgstr "" - -#: src/libslic3r/Zipper.cpp:86 -msgid "file not found" -msgstr "" - -#: src/libslic3r/Zipper.cpp:88 -msgid "archive is too large" -msgstr "" - -#: src/libslic3r/Zipper.cpp:90 -msgid "validation failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:92 -msgid "write calledback failed" -msgstr "" - -#: src/libslic3r/Zipper.cpp:102 -msgid "Error with zip archive" -msgstr "" - -#: src/libslic3r/GCode.cpp:637 +#: src/libslic3r/GCode.cpp:622 msgid "Empty layers detected, the output would not be printable." msgstr "" -#: src/libslic3r/GCode.cpp:638 +#: src/libslic3r/GCode.cpp:623 msgid "Print z" msgstr "" -#: src/libslic3r/GCode.cpp:639 +#: src/libslic3r/GCode.cpp:624 msgid "" "This is usually caused by negligibly small extrusions or by a faulty model. " "Try to repair the model or change its orientation on the bed." msgstr "" -#: src/libslic3r/ExtrusionEntity.cpp:323 +#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364 msgid "Mixed" msgstr "" @@ -6439,122 +7475,254 @@ msgid "" "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible." msgstr "" -#: src/libslic3r/Format/3mf.cpp:1626 +#: src/libslic3r/Format/3mf.cpp:1667 msgid "" "The selected 3mf file has been saved with a newer version of %1% and is not " "compatible." msgstr "" -#: src/libslic3r/Format/AMF.cpp:934 +#: src/libslic3r/Format/AMF.cpp:955 msgid "" "The selected amf file has been saved with a newer version of %1% and is not " "compatible." msgstr "" -#: src/libslic3r/Print.cpp:1218 +#: src/libslic3r/miniz_extension.cpp:91 +msgid "undefined error" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:93 +msgid "too many files" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:95 +msgid "file too large" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:97 +msgid "unsupported method" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:99 +msgid "unsupported encryption" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:101 +msgid "unsupported feature" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:103 +msgid "failed finding central directory" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:105 +msgid "not a ZIP archive" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:107 +msgid "invalid header or archive is corrupted" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:109 +msgid "unsupported multidisk archive" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:111 +msgid "decompression failed or archive is corrupted" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:113 +msgid "compression failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:115 +msgid "unexpected decompressed size" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:117 +msgid "CRC-32 check failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:119 +msgid "unsupported central directory size" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:121 +msgid "allocation failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:123 +msgid "file open failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:125 +msgid "file create failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:127 +msgid "file write failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:129 +msgid "file read failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:131 +msgid "file close failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:133 +msgid "file seek failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:135 +msgid "file stat failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:137 +msgid "invalid parameter" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:139 +msgid "invalid filename" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:141 +msgid "buffer too small" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:143 +msgid "internal error" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:145 +msgid "file not found" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:147 +msgid "archive is too large" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:149 +msgid "validation failed" +msgstr "" + +#: src/libslic3r/miniz_extension.cpp:151 +msgid "write calledback failed" +msgstr "" + +#: src/libslic3r/Preset.cpp:1301 +msgid "filament" +msgstr "" + +#: src/libslic3r/Preset.cpp:1302 +msgid "SLA print" +msgstr "" + +#: src/libslic3r/Print.cpp:1245 msgid "All objects are outside of the print volume." msgstr "" -#: src/libslic3r/Print.cpp:1221 +#: src/libslic3r/Print.cpp:1248 msgid "The supplied settings will cause an empty print." msgstr "" -#: src/libslic3r/Print.cpp:1225 +#: src/libslic3r/Print.cpp:1252 msgid "Some objects are too close; your extruder will collide with them." msgstr "" -#: src/libslic3r/Print.cpp:1227 +#: src/libslic3r/Print.cpp:1254 msgid "" "Some objects are too tall and cannot be printed without extruder collisions." msgstr "" -#: src/libslic3r/Print.cpp:1236 +#: src/libslic3r/Print.cpp:1263 msgid "The Spiral Vase option can only be used when printing a single object." msgstr "" -#: src/libslic3r/Print.cpp:1243 +#: src/libslic3r/Print.cpp:1270 msgid "" "The Spiral Vase option can only be used when printing single material " "objects." msgstr "" -#: src/libslic3r/Print.cpp:1256 +#: src/libslic3r/Print.cpp:1283 msgid "" "The wipe tower is only supported if all extruders have the same nozzle " "diameter and use filaments of the same diameter." msgstr "" -#: src/libslic3r/Print.cpp:1261 +#: src/libslic3r/Print.cpp:1288 msgid "" "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter " "and Repetier G-code flavors." msgstr "" -#: src/libslic3r/Print.cpp:1263 +#: src/libslic3r/Print.cpp:1290 msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" -#: src/libslic3r/Print.cpp:1265 +#: src/libslic3r/Print.cpp:1292 msgid "Ooze prevention is currently not supported with the wipe tower enabled." msgstr "" -#: src/libslic3r/Print.cpp:1267 +#: src/libslic3r/Print.cpp:1294 msgid "" "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)." msgstr "" -#: src/libslic3r/Print.cpp:1269 +#: src/libslic3r/Print.cpp:1296 msgid "" "The Wipe Tower is currently not supported for multimaterial sequential " "prints." msgstr "" -#: src/libslic3r/Print.cpp:1290 +#: src/libslic3r/Print.cpp:1317 msgid "" "The Wipe Tower is only supported for multiple objects if they have equal " "layer heights" msgstr "" -#: src/libslic3r/Print.cpp:1292 +#: src/libslic3r/Print.cpp:1319 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "over an equal number of raft layers" msgstr "" -#: src/libslic3r/Print.cpp:1294 +#: src/libslic3r/Print.cpp:1321 msgid "" "The Wipe Tower is only supported for multiple objects if they are printed " "with the same support_material_contact_distance" msgstr "" -#: src/libslic3r/Print.cpp:1296 +#: src/libslic3r/Print.cpp:1323 msgid "" "The Wipe Tower is only supported for multiple objects if they are sliced " "equally." msgstr "" -#: src/libslic3r/Print.cpp:1338 +#: src/libslic3r/Print.cpp:1365 msgid "" "The Wipe tower is only supported if all objects have the same variable layer " "height" msgstr "" -#: src/libslic3r/Print.cpp:1364 +#: src/libslic3r/Print.cpp:1391 msgid "" "One or more object were assigned an extruder that the printer does not have." msgstr "" -#: src/libslic3r/Print.cpp:1373 +#: src/libslic3r/Print.cpp:1400 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:1376 +#: src/libslic3r/Print.cpp:1403 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm" msgstr "" -#: src/libslic3r/Print.cpp:1387 +#: src/libslic3r/Print.cpp:1414 msgid "" "Printing with multiple extruders of differing nozzle diameters. If support " "is to be printed with the current extruder (support_material_extruder == 0 " @@ -6562,13 +7730,13 @@ msgid "" "same diameter." msgstr "" -#: src/libslic3r/Print.cpp:1395 +#: src/libslic3r/Print.cpp:1422 msgid "" "For the Wipe Tower to work with the soluble supports, the support layers " "need to be synchronized with the object layers." msgstr "" -#: src/libslic3r/Print.cpp:1399 +#: src/libslic3r/Print.cpp:1426 msgid "" "The Wipe Tower currently supports the non-soluble supports only if they are " "printed with the current extruder without triggering a tool change. (both " @@ -6576,132 +7744,136 @@ msgid "" "set to 0)." msgstr "" -#: src/libslic3r/Print.cpp:1421 +#: src/libslic3r/Print.cpp:1448 msgid "First layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:1426 +#: src/libslic3r/Print.cpp:1453 msgid "Layer height can't be greater than nozzle diameter" msgstr "" -#: src/libslic3r/Print.cpp:1583 +#: src/libslic3r/Print.cpp:1610 msgid "Infilling layers" msgstr "" -#: src/libslic3r/Print.cpp:1605 +#: src/libslic3r/Print.cpp:1636 msgid "Generating skirt" msgstr "" -#: src/libslic3r/Print.cpp:1613 +#: src/libslic3r/Print.cpp:1645 msgid "Generating brim" msgstr "" -#: src/libslic3r/Print.cpp:1633 +#: src/libslic3r/Print.cpp:1676 msgid "Exporting G-code" msgstr "" -#: src/libslic3r/Print.cpp:1637 +#: src/libslic3r/Print.cpp:1680 msgid "Generating G-code" msgstr "" -#: src/libslic3r/SLAPrint.cpp:615 +#: src/libslic3r/SLA/Pad.cpp:532 +msgid "Pad brim size is too small for the current configuration." +msgstr "" + +#: src/libslic3r/SLAPrint.cpp:627 msgid "" "Cannot proceed without support points! Add support points or disable support " "generation." msgstr "" -#: src/libslic3r/SLAPrint.cpp:627 +#: src/libslic3r/SLAPrint.cpp:639 msgid "" "Elevation is too low for object. Use the \"Pad around object\" feature to " "print the object without elevation." msgstr "" -#: src/libslic3r/SLAPrint.cpp:633 +#: src/libslic3r/SLAPrint.cpp:645 msgid "" "The endings of the support pillars will be deployed on the gap between the " "object and the pad. 'Support base safety distance' has to be greater than " "the 'Pad object gap' parameter to avoid this." msgstr "" -#: src/libslic3r/SLAPrint.cpp:648 +#: src/libslic3r/SLAPrint.cpp:660 msgid "Exposition time is out of printer profile bounds." msgstr "" -#: src/libslic3r/SLAPrint.cpp:655 +#: src/libslic3r/SLAPrint.cpp:667 msgid "Initial exposition time is out of printer profile bounds." msgstr "" -#: src/libslic3r/SLAPrint.cpp:762 +#: src/libslic3r/SLAPrint.cpp:780 msgid "Slicing done" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:43 +#: src/libslic3r/SLAPrintSteps.cpp:44 msgid "Hollowing model" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:44 +#: src/libslic3r/SLAPrintSteps.cpp:45 msgid "Drilling holes into model." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:45 +#: src/libslic3r/SLAPrintSteps.cpp:46 msgid "Slicing model" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356 +#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359 msgid "Generating support points" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:47 +#: src/libslic3r/SLAPrintSteps.cpp:48 msgid "Generating support tree" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:48 +#: src/libslic3r/SLAPrintSteps.cpp:49 msgid "Generating pad" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:49 +#: src/libslic3r/SLAPrintSteps.cpp:50 msgid "Slicing supports" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:64 +#: src/libslic3r/SLAPrintSteps.cpp:65 msgid "Merging slices and calculating statistics" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:65 +#: src/libslic3r/SLAPrintSteps.cpp:66 msgid "Rasterizing layers" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:190 -msgid "Too much overlapping holes." +#: src/libslic3r/SLAPrintSteps.cpp:192 +msgid "Too many overlapping holes." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:199 +#: src/libslic3r/SLAPrintSteps.cpp:201 msgid "" "Drilling holes into the mesh failed. This is usually caused by broken model. " "Try to fix it first." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:245 +#: src/libslic3r/SLAPrintSteps.cpp:247 msgid "" "Slicing had to be stopped due to an internal error: Inconsistent slice index." msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422 -#: src/libslic3r/SLAPrintSteps.cpp:461 +#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420 +#: src/libslic3r/SLAPrintSteps.cpp:459 msgid "Visualizing supports" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:453 +#: src/libslic3r/SLAPrintSteps.cpp:451 msgid "No pad can be generated for this model with the current configuration" msgstr "" -#: src/libslic3r/SLAPrintSteps.cpp:621 +#: src/libslic3r/SLAPrintSteps.cpp:619 msgid "" "There are unprintable objects. Try to adjust support settings to make the " "objects printable." msgstr "" -#: src/libslic3r/PrintBase.cpp:71 +#: src/libslic3r/PrintBase.cpp:72 msgid "Failed processing of the output_filename_format template." msgstr "" @@ -6741,91 +7913,107 @@ msgid "" "printing." msgstr "" -#: src/libslic3r/PrintConfig.cpp:87 +#: src/libslic3r/PrintConfig.cpp:89 msgid "Slice gap closing radius" msgstr "" -#: src/libslic3r/PrintConfig.cpp:89 +#: src/libslic3r/PrintConfig.cpp:91 msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -#: src/libslic3r/PrintConfig.cpp:97 +#: src/libslic3r/PrintConfig.cpp:99 msgid "Hostname, IP or URL" msgstr "" -#: src/libslic3r/PrintConfig.cpp:98 +#: src/libslic3r/PrintConfig.cpp:100 msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the hostname, IP address or URL of the printer host instance." msgstr "" -#: src/libslic3r/PrintConfig.cpp:104 +#: src/libslic3r/PrintConfig.cpp:106 msgid "API Key / Password" msgstr "" -#: src/libslic3r/PrintConfig.cpp:105 +#: src/libslic3r/PrintConfig.cpp:107 msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -#: src/libslic3r/PrintConfig.cpp:112 +#: src/libslic3r/PrintConfig.cpp:114 msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -#: src/libslic3r/PrintConfig.cpp:118 +#: src/libslic3r/PrintConfig.cpp:120 msgid "Elephant foot compensation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:120 +#: src/libslic3r/PrintConfig.cpp:122 msgid "" "The first layer will be shrunk in the XY plane by the configured value to " "compensate for the 1st layer squish aka an Elephant Foot effect." msgstr "" -#: src/libslic3r/PrintConfig.cpp:136 +#: src/libslic3r/PrintConfig.cpp:138 +msgid "Password" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:144 +msgid "Printer preset name" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:145 +msgid "Related printer preset name" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:150 +msgid "Authorization Type" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:169 msgid "Avoid crossing perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:137 +#: src/libslic3r/PrintConfig.cpp:170 msgid "" "Optimize travel moves in order to minimize the crossing of perimeters. This " "is mostly useful with Bowden extruders which suffer from oozing. This " "feature slows down both the print and the G-code generation." msgstr "" -#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2071 +#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206 msgid "Other layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:145 +#: src/libslic3r/PrintConfig.cpp:178 msgid "" "Bed temperature for layers after the first one. Set this to zero to disable " "bed temperature control commands in the output." msgstr "" -#: src/libslic3r/PrintConfig.cpp:147 +#: src/libslic3r/PrintConfig.cpp:181 msgid "Bed temperature" msgstr "" -#: src/libslic3r/PrintConfig.cpp:154 +#: src/libslic3r/PrintConfig.cpp:188 msgid "" "This custom code is inserted at every layer change, right before the Z move. " "Note that you can use placeholder variables for all Slic3r settings as well " "as [layer_num] and [layer_z]." msgstr "" -#: src/libslic3r/PrintConfig.cpp:164 +#: src/libslic3r/PrintConfig.cpp:198 msgid "Between objects G-code" msgstr "" -#: src/libslic3r/PrintConfig.cpp:165 +#: src/libslic3r/PrintConfig.cpp:199 msgid "" "This code is inserted between objects when using sequential printing. By " "default extruder and bed temperature are reset using non-wait command; " @@ -6835,80 +8023,81 @@ msgid "" "S[first_layer_temperature]\" command wherever you want." msgstr "" -#: src/libslic3r/PrintConfig.cpp:176 +#: src/libslic3r/PrintConfig.cpp:210 msgid "Number of solid layers to generate on bottom surfaces." msgstr "" -#: src/libslic3r/PrintConfig.cpp:177 +#: src/libslic3r/PrintConfig.cpp:211 msgid "Bottom solid layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:185 +#: src/libslic3r/PrintConfig.cpp:219 msgid "" "The number of bottom solid layers is increased above bottom_solid_layers if " "necessary to satisfy minimum thickness of bottom shell." msgstr "" -#: src/libslic3r/PrintConfig.cpp:187 +#: src/libslic3r/PrintConfig.cpp:221 msgid "Minimum bottom shell thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:193 +#: src/libslic3r/PrintConfig.cpp:227 msgid "Bridge" msgstr "" -#: src/libslic3r/PrintConfig.cpp:194 +#: src/libslic3r/PrintConfig.cpp:228 msgid "" "This is the acceleration your printer will use for bridges. Set zero to " "disable acceleration control for bridges." msgstr "" -#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339 -#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984 -#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201 -#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403 +#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373 +#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028 +#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309 +#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511 msgid "mm/s²" msgstr "" -#: src/libslic3r/PrintConfig.cpp:202 +#: src/libslic3r/PrintConfig.cpp:236 msgid "Bridging angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:204 +#: src/libslic3r/PrintConfig.cpp:238 msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for all " "bridges. Use 180° for zero angle." msgstr "" -#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780 -#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650 -#: src/libslic3r/PrintConfig.cpp:1901 src/libslic3r/PrintConfig.cpp:2056 -#: src/libslic3r/PrintConfig.cpp:2254 src/libslic3r/PrintConfig.cpp:2744 -#: src/libslic3r/PrintConfig.cpp:2865 +#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816 +#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758 +#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191 +#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891 +#: src/libslic3r/PrintConfig.cpp:3012 msgid "°" msgstr "" -#: src/libslic3r/PrintConfig.cpp:213 +#: src/libslic3r/PrintConfig.cpp:247 msgid "Bridges fan speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:214 +#: src/libslic3r/PrintConfig.cpp:248 msgid "This fan speed is enforced during all bridges and overhangs." msgstr "" -#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792 -#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282 -#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2432 -#: src/libslic3r/PrintConfig.cpp:2784 +#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828 +#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327 +#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640 +#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805 +#: src/libslic3r/PrintConfig.cpp:2931 msgid "%" msgstr "" -#: src/libslic3r/PrintConfig.cpp:222 +#: src/libslic3r/PrintConfig.cpp:256 msgid "Bridge flow ratio" msgstr "" -#: src/libslic3r/PrintConfig.cpp:224 +#: src/libslic3r/PrintConfig.cpp:258 msgid "" "This factor affects the amount of plastic for bridging. You can decrease it " "slightly to pull the extrudates and prevent sagging, although default " @@ -6916,83 +8105,84 @@ msgid "" "before tweaking this." msgstr "" -#: src/libslic3r/PrintConfig.cpp:234 +#: src/libslic3r/PrintConfig.cpp:268 msgid "Bridges" msgstr "" -#: src/libslic3r/PrintConfig.cpp:236 +#: src/libslic3r/PrintConfig.cpp:270 msgid "Speed for printing bridges." msgstr "" -#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609 -#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626 -#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661 -#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922 -#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135 -#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181 -#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241 -#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433 -#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616 -#: src/libslic3r/PrintConfig.cpp:2035 src/libslic3r/PrintConfig.cpp:2161 +#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645 +#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662 +#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697 +#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966 +#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167 +#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277 +#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299 +#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408 +#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715 +#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170 +#: src/libslic3r/PrintConfig.cpp:2297 msgid "mm/s" msgstr "" -#: src/libslic3r/PrintConfig.cpp:244 +#: src/libslic3r/PrintConfig.cpp:278 msgid "Brim width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:245 +#: src/libslic3r/PrintConfig.cpp:279 msgid "" "Horizontal width of the brim that will be printed around each object on the " "first layer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:252 +#: src/libslic3r/PrintConfig.cpp:286 msgid "Clip multi-part objects" msgstr "" -#: src/libslic3r/PrintConfig.cpp:253 +#: src/libslic3r/PrintConfig.cpp:287 msgid "" "When printing multi-material objects, this settings will make Slic3r to clip " "the overlapping object parts one by the other (2nd part will be clipped by " "the 1st, 3rd part will be clipped by the 1st and 2nd etc)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:260 +#: src/libslic3r/PrintConfig.cpp:294 msgid "Colorprint height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:261 +#: src/libslic3r/PrintConfig.cpp:295 msgid "Heights at which a filament change is to occur." msgstr "" -#: src/libslic3r/PrintConfig.cpp:271 +#: src/libslic3r/PrintConfig.cpp:305 msgid "Compatible printers condition" msgstr "" -#: src/libslic3r/PrintConfig.cpp:272 +#: src/libslic3r/PrintConfig.cpp:306 msgid "" "A boolean expression using the configuration values of an active printer " "profile. If this expression evaluates to true, this profile is considered " "compatible with the active printer profile." msgstr "" -#: src/libslic3r/PrintConfig.cpp:286 +#: src/libslic3r/PrintConfig.cpp:320 msgid "Compatible print profiles condition" msgstr "" -#: src/libslic3r/PrintConfig.cpp:287 +#: src/libslic3r/PrintConfig.cpp:321 msgid "" "A boolean expression using the configuration values of an active print " "profile. If this expression evaluates to true, this profile is considered " "compatible with the active print profile." msgstr "" -#: src/libslic3r/PrintConfig.cpp:304 +#: src/libslic3r/PrintConfig.cpp:338 msgid "Complete individual objects" msgstr "" -#: src/libslic3r/PrintConfig.cpp:305 +#: src/libslic3r/PrintConfig.cpp:339 msgid "" "When printing multiple objects or copies, this feature will complete each " "object before moving onto next one (and starting it from its bottom layer). " @@ -7000,97 +8190,97 @@ msgid "" "warn and prevent you from extruder collisions, but beware." msgstr "" -#: src/libslic3r/PrintConfig.cpp:313 +#: src/libslic3r/PrintConfig.cpp:347 msgid "Enable auto cooling" msgstr "" -#: src/libslic3r/PrintConfig.cpp:314 +#: src/libslic3r/PrintConfig.cpp:348 msgid "" "This flag enables the automatic cooling logic that adjusts print speed and " "fan speed according to layer printing time." msgstr "" -#: src/libslic3r/PrintConfig.cpp:319 +#: src/libslic3r/PrintConfig.cpp:353 msgid "Cooling tube position" msgstr "" -#: src/libslic3r/PrintConfig.cpp:320 +#: src/libslic3r/PrintConfig.cpp:354 msgid "Distance of the center-point of the cooling tube from the extruder tip." msgstr "" -#: src/libslic3r/PrintConfig.cpp:327 +#: src/libslic3r/PrintConfig.cpp:361 msgid "Cooling tube length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:328 +#: src/libslic3r/PrintConfig.cpp:362 msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" -#: src/libslic3r/PrintConfig.cpp:336 +#: src/libslic3r/PrintConfig.cpp:370 msgid "" "This is the acceleration your printer will be reset to after the role-" "specific acceleration values are used (perimeter/infill). Set zero to " "prevent resetting acceleration at all." msgstr "" -#: src/libslic3r/PrintConfig.cpp:345 +#: src/libslic3r/PrintConfig.cpp:379 msgid "Default filament profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:346 +#: src/libslic3r/PrintConfig.cpp:380 msgid "" "Default filament profile associated with the current printer profile. On " "selection of the current printer profile, this filament profile will be " "activated." msgstr "" -#: src/libslic3r/PrintConfig.cpp:352 +#: src/libslic3r/PrintConfig.cpp:386 msgid "Default print profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2599 -#: src/libslic3r/PrintConfig.cpp:2610 +#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735 +#: src/libslic3r/PrintConfig.cpp:2746 msgid "" "Default print profile associated with the current printer profile. On " "selection of the current printer profile, this print profile will be " "activated." msgstr "" -#: src/libslic3r/PrintConfig.cpp:359 +#: src/libslic3r/PrintConfig.cpp:393 msgid "Disable fan for the first" msgstr "" -#: src/libslic3r/PrintConfig.cpp:360 +#: src/libslic3r/PrintConfig.cpp:394 msgid "" "You can set this to a positive value to disable fan at all during the first " "layers, so that it does not make adhesion worse." msgstr "" -#: src/libslic3r/PrintConfig.cpp:369 +#: src/libslic3r/PrintConfig.cpp:403 msgid "Don't support bridges" msgstr "" -#: src/libslic3r/PrintConfig.cpp:371 +#: src/libslic3r/PrintConfig.cpp:405 msgid "" "Experimental option for preventing support material from being generated " "under bridged areas." msgstr "" -#: src/libslic3r/PrintConfig.cpp:377 +#: src/libslic3r/PrintConfig.cpp:411 msgid "Distance between copies" msgstr "" -#: src/libslic3r/PrintConfig.cpp:378 +#: src/libslic3r/PrintConfig.cpp:412 msgid "Distance used for the auto-arrange feature of the plater." msgstr "" -#: src/libslic3r/PrintConfig.cpp:386 +#: src/libslic3r/PrintConfig.cpp:420 msgid "" "This end procedure is inserted at the end of the output file. Note that you " "can use placeholder variables for all PrusaSlicer settings." msgstr "" -#: src/libslic3r/PrintConfig.cpp:396 +#: src/libslic3r/PrintConfig.cpp:430 msgid "" "This end procedure is inserted at the end of the output file, before the " "printer end gcode (and before any toolchange from this filament in case of " @@ -7099,62 +8289,66 @@ msgid "" "in extruder order." msgstr "" -#: src/libslic3r/PrintConfig.cpp:407 +#: src/libslic3r/PrintConfig.cpp:441 msgid "Ensure vertical shell thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:409 +#: src/libslic3r/PrintConfig.cpp:443 msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:415 +#: src/libslic3r/PrintConfig.cpp:449 msgid "Top fill pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:417 +#: src/libslic3r/PrintConfig.cpp:451 msgid "" "Fill pattern for top infill. This only affects the top visible layer, and " "not its adjacent solid shells." msgstr "" -#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843 -#: src/libslic3r/PrintConfig.cpp:2016 +#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881 +#: src/libslic3r/PrintConfig.cpp:2151 msgid "Rectilinear" msgstr "" -#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849 +#: src/libslic3r/PrintConfig.cpp:461 +msgid "Monotonic" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887 msgid "Concentric" msgstr "" -#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853 +#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891 msgid "Hilbert Curve" msgstr "" -#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854 +#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892 msgid "Archimedean Chords" msgstr "" -#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855 +#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893 msgid "Octagram Spiral" msgstr "" -#: src/libslic3r/PrintConfig.cpp:435 +#: src/libslic3r/PrintConfig.cpp:471 msgid "Bottom fill pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:437 +#: src/libslic3r/PrintConfig.cpp:473 msgid "" "Fill pattern for bottom infill. This only affects the bottom external " "visible layer, and not its adjacent solid shells." msgstr "" -#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457 +#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493 msgid "External perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:448 +#: src/libslic3r/PrintConfig.cpp:484 msgid "" "Set this to a non-zero value to set a manual extrusion width for external " "perimeters. If left zero, default extrusion width will be used if set, " @@ -7162,43 +8356,43 @@ msgid "" "(for example 200%), it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560 -#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895 -#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041 -#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1768 -#: src/libslic3r/PrintConfig.cpp:1890 src/libslic3r/PrintConfig.cpp:1958 -#: src/libslic3r/PrintConfig.cpp:2118 +#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596 +#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937 +#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085 +#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876 +#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093 +#: src/libslic3r/PrintConfig.cpp:2254 msgid "mm or %" msgstr "" -#: src/libslic3r/PrintConfig.cpp:459 +#: src/libslic3r/PrintConfig.cpp:495 msgid "" "This separate setting will affect the speed of external perimeters (the " "visible ones). If expressed as percentage (for example: 80%) it will be " "calculated on the perimeters speed setting above. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904 -#: src/libslic3r/PrintConfig.cpp:1727 src/libslic3r/PrintConfig.cpp:1779 -#: src/libslic3r/PrintConfig.cpp:2002 src/libslic3r/PrintConfig.cpp:2131 +#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946 +#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887 +#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267 msgid "mm/s or %" msgstr "" -#: src/libslic3r/PrintConfig.cpp:469 +#: src/libslic3r/PrintConfig.cpp:505 msgid "External perimeters first" msgstr "" -#: src/libslic3r/PrintConfig.cpp:471 +#: src/libslic3r/PrintConfig.cpp:507 msgid "" "Print contour perimeters from the outermost one to the innermost one instead " "of the default inverse order." msgstr "" -#: src/libslic3r/PrintConfig.cpp:477 +#: src/libslic3r/PrintConfig.cpp:513 msgid "Extra perimeters if needed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:479 +#: src/libslic3r/PrintConfig.cpp:515 #, possible-c-format msgid "" "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r " @@ -7206,14 +8400,14 @@ msgid "" "is supported." msgstr "" -#: src/libslic3r/PrintConfig.cpp:489 +#: src/libslic3r/PrintConfig.cpp:525 msgid "" "The extruder to use (unless more specific extruder settings are specified). " "This value overrides perimeter and infill extruders, but not the support " "extruders." msgstr "" -#: src/libslic3r/PrintConfig.cpp:501 +#: src/libslic3r/PrintConfig.cpp:537 msgid "" "Set this to the vertical distance between your nozzle tip and (usually) the " "X carriage rods. In other words, this is the height of the clearance " @@ -7221,26 +8415,26 @@ msgid "" "extruder can peek before colliding with other printed objects." msgstr "" -#: src/libslic3r/PrintConfig.cpp:512 +#: src/libslic3r/PrintConfig.cpp:548 msgid "" "Set this to the clearance radius around your extruder. If the extruder is " "not centered, choose the largest value for safety. This setting is used to " "check for collisions and to display the graphical preview in the plater." msgstr "" -#: src/libslic3r/PrintConfig.cpp:522 +#: src/libslic3r/PrintConfig.cpp:558 msgid "Extruder Color" msgstr "" -#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583 +#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619 msgid "This is only used in the Slic3r interface as a visual help." msgstr "" -#: src/libslic3r/PrintConfig.cpp:529 +#: src/libslic3r/PrintConfig.cpp:565 msgid "Extruder offset" msgstr "" -#: src/libslic3r/PrintConfig.cpp:530 +#: src/libslic3r/PrintConfig.cpp:566 msgid "" "If your firmware doesn't handle the extruder displacement you need the G-" "code to take it into account. This option lets you specify the displacement " @@ -7248,21 +8442,21 @@ msgid "" "coordinates (they will be subtracted from the XY coordinate)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:539 +#: src/libslic3r/PrintConfig.cpp:575 msgid "Extrusion axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:540 +#: src/libslic3r/PrintConfig.cpp:576 msgid "" "Use this option to set the axis letter associated to your printer's extruder " "(usually E but some printers use A)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:545 +#: src/libslic3r/PrintConfig.cpp:581 msgid "Extrusion multiplier" msgstr "" -#: src/libslic3r/PrintConfig.cpp:546 +#: src/libslic3r/PrintConfig.cpp:582 msgid "" "This factor changes the amount of flow proportionally. You may need to tweak " "this setting to get nice surface finish and correct single wall widths. " @@ -7270,11 +8464,11 @@ msgid "" "more, check filament diameter and your firmware E steps." msgstr "" -#: src/libslic3r/PrintConfig.cpp:554 +#: src/libslic3r/PrintConfig.cpp:590 msgid "Default extrusion width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:556 +#: src/libslic3r/PrintConfig.cpp:592 msgid "" "Set this to a non-zero value to allow a manual extrusion width. If left to " "zero, Slic3r derives extrusion widths from the nozzle diameter (see the " @@ -7283,119 +8477,119 @@ msgid "" "height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:566 +#: src/libslic3r/PrintConfig.cpp:602 msgid "Keep fan always on" msgstr "" -#: src/libslic3r/PrintConfig.cpp:567 +#: src/libslic3r/PrintConfig.cpp:603 msgid "" "If this is enabled, fan will never be disabled and will be kept running at " "least at its minimum speed. Useful for PLA, harmful for ABS." msgstr "" -#: src/libslic3r/PrintConfig.cpp:572 +#: src/libslic3r/PrintConfig.cpp:608 msgid "Enable fan if layer print time is below" msgstr "" -#: src/libslic3r/PrintConfig.cpp:573 +#: src/libslic3r/PrintConfig.cpp:609 msgid "" "If layer print time is estimated below this number of seconds, fan will be " "enabled and its speed will be calculated by interpolating the minimum and " "maximum speeds." msgstr "" -#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1715 +#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823 msgid "approximate seconds" msgstr "" -#: src/libslic3r/PrintConfig.cpp:588 +#: src/libslic3r/PrintConfig.cpp:624 msgid "Filament notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:589 +#: src/libslic3r/PrintConfig.cpp:625 msgid "You can put your notes regarding the filament here." msgstr "" -#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247 +#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355 msgid "Max volumetric speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:598 +#: src/libslic3r/PrintConfig.cpp:634 msgid "" "Maximum volumetric speed allowed for this filament. Limits the maximum " "volumetric speed of a print to the minimum of print and filament volumetric " "speed. Set to zero for no limit." msgstr "" -#: src/libslic3r/PrintConfig.cpp:607 +#: src/libslic3r/PrintConfig.cpp:643 msgid "Loading speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:608 +#: src/libslic3r/PrintConfig.cpp:644 msgid "Speed used for loading the filament on the wipe tower." msgstr "" -#: src/libslic3r/PrintConfig.cpp:615 +#: src/libslic3r/PrintConfig.cpp:651 msgid "Loading speed at the start" msgstr "" -#: src/libslic3r/PrintConfig.cpp:616 +#: src/libslic3r/PrintConfig.cpp:652 msgid "Speed used at the very beginning of loading phase." msgstr "" -#: src/libslic3r/PrintConfig.cpp:623 +#: src/libslic3r/PrintConfig.cpp:659 msgid "Unloading speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:624 +#: src/libslic3r/PrintConfig.cpp:660 msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:632 +#: src/libslic3r/PrintConfig.cpp:668 msgid "Unloading speed at the start" msgstr "" -#: src/libslic3r/PrintConfig.cpp:633 +#: src/libslic3r/PrintConfig.cpp:669 msgid "" "Speed used for unloading the tip of the filament immediately after ramming." msgstr "" -#: src/libslic3r/PrintConfig.cpp:640 +#: src/libslic3r/PrintConfig.cpp:676 msgid "Delay after unloading" msgstr "" -#: src/libslic3r/PrintConfig.cpp:641 +#: src/libslic3r/PrintConfig.cpp:677 msgid "" "Time to wait after the filament is unloaded. May help to get reliable " "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" -#: src/libslic3r/PrintConfig.cpp:650 +#: src/libslic3r/PrintConfig.cpp:686 msgid "Number of cooling moves" msgstr "" -#: src/libslic3r/PrintConfig.cpp:651 +#: src/libslic3r/PrintConfig.cpp:687 msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" -#: src/libslic3r/PrintConfig.cpp:659 +#: src/libslic3r/PrintConfig.cpp:695 msgid "Speed of the first cooling move" msgstr "" -#: src/libslic3r/PrintConfig.cpp:660 +#: src/libslic3r/PrintConfig.cpp:696 msgid "Cooling moves are gradually accelerating beginning at this speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:667 +#: src/libslic3r/PrintConfig.cpp:703 msgid "Minimal purge on wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:668 +#: src/libslic3r/PrintConfig.cpp:704 msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " @@ -7404,63 +8598,63 @@ msgid "" "to produce successive infill or sacrificial object extrusions reliably." msgstr "" -#: src/libslic3r/PrintConfig.cpp:672 +#: src/libslic3r/PrintConfig.cpp:708 msgid "mm³" msgstr "" -#: src/libslic3r/PrintConfig.cpp:678 +#: src/libslic3r/PrintConfig.cpp:714 msgid "Speed of the last cooling move" msgstr "" -#: src/libslic3r/PrintConfig.cpp:679 +#: src/libslic3r/PrintConfig.cpp:715 msgid "Cooling moves are gradually accelerating towards this speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:686 +#: src/libslic3r/PrintConfig.cpp:722 msgid "Filament load time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:687 +#: src/libslic3r/PrintConfig.cpp:723 msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" -#: src/libslic3r/PrintConfig.cpp:694 +#: src/libslic3r/PrintConfig.cpp:730 msgid "Ramming parameters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:695 +#: src/libslic3r/PrintConfig.cpp:731 msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." msgstr "" -#: src/libslic3r/PrintConfig.cpp:701 +#: src/libslic3r/PrintConfig.cpp:737 msgid "Filament unload time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:702 +#: src/libslic3r/PrintConfig.cpp:738 msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" -#: src/libslic3r/PrintConfig.cpp:710 +#: src/libslic3r/PrintConfig.cpp:746 msgid "" "Enter your filament diameter here. Good precision is required, so use a " "caliper and do multiple measurements along the filament, then compute the " "average." msgstr "" -#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2510 -#: src/libslic3r/PrintConfig.cpp:2511 +#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646 +#: src/libslic3r/PrintConfig.cpp:2647 msgid "Density" msgstr "" -#: src/libslic3r/PrintConfig.cpp:718 +#: src/libslic3r/PrintConfig.cpp:754 msgid "" "Enter your filament density here. This is only for statistical information. " "A decent way is to weigh a known length of filament and compute the ratio of " @@ -7468,117 +8662,129 @@ msgid "" "displacement." msgstr "" -#: src/libslic3r/PrintConfig.cpp:721 +#: src/libslic3r/PrintConfig.cpp:757 msgid "g/cm³" msgstr "" -#: src/libslic3r/PrintConfig.cpp:726 +#: src/libslic3r/PrintConfig.cpp:762 msgid "Filament type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:727 +#: src/libslic3r/PrintConfig.cpp:763 msgid "The filament material type for use in custom G-codes." msgstr "" -#: src/libslic3r/PrintConfig.cpp:754 +#: src/libslic3r/PrintConfig.cpp:790 msgid "Soluble material" msgstr "" -#: src/libslic3r/PrintConfig.cpp:755 +#: src/libslic3r/PrintConfig.cpp:791 msgid "Soluble material is most likely used for a soluble support." msgstr "" -#: src/libslic3r/PrintConfig.cpp:761 +#: src/libslic3r/PrintConfig.cpp:797 msgid "" "Enter your filament cost per kg here. This is only for statistical " "information." msgstr "" -#: src/libslic3r/PrintConfig.cpp:762 +#: src/libslic3r/PrintConfig.cpp:798 msgid "money/kg" msgstr "" -#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2594 +#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730 msgid "(Unknown)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:775 +#: src/libslic3r/PrintConfig.cpp:811 msgid "Fill angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:777 +#: src/libslic3r/PrintConfig.cpp:813 msgid "" "Default base angle for infill orientation. Cross-hatching will be applied to " "this. Bridges will be infilled using the best direction Slic3r can detect, " "so this setting does not affect them." msgstr "" -#: src/libslic3r/PrintConfig.cpp:789 +#: src/libslic3r/PrintConfig.cpp:825 msgid "Fill density" msgstr "" -#: src/libslic3r/PrintConfig.cpp:791 +#: src/libslic3r/PrintConfig.cpp:827 msgid "Density of internal infill, expressed in the range 0% - 100%." msgstr "" -#: src/libslic3r/PrintConfig.cpp:826 +#: src/libslic3r/PrintConfig.cpp:862 msgid "Fill pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:828 +#: src/libslic3r/PrintConfig.cpp:864 msgid "Fill pattern for general low-density infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:844 +#: src/libslic3r/PrintConfig.cpp:882 msgid "Grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:845 +#: src/libslic3r/PrintConfig.cpp:883 msgid "Triangles" msgstr "" -#: src/libslic3r/PrintConfig.cpp:846 +#: src/libslic3r/PrintConfig.cpp:884 msgid "Stars" msgstr "" -#: src/libslic3r/PrintConfig.cpp:847 +#: src/libslic3r/PrintConfig.cpp:885 msgid "Cubic" msgstr "" -#: src/libslic3r/PrintConfig.cpp:848 +#: src/libslic3r/PrintConfig.cpp:886 msgid "Line" msgstr "" -#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2018 +#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153 msgid "Honeycomb" msgstr "" -#: src/libslic3r/PrintConfig.cpp:851 +#: src/libslic3r/PrintConfig.cpp:889 msgid "3D Honeycomb" msgstr "" -#: src/libslic3r/PrintConfig.cpp:852 +#: src/libslic3r/PrintConfig.cpp:890 msgid "Gyroid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868 -#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910 +#: src/libslic3r/PrintConfig.cpp:894 +msgid "Adaptive Cubic" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:895 +msgid "Support Cubic" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908 +#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952 msgid "First layer" msgstr "" -#: src/libslic3r/PrintConfig.cpp:860 +#: src/libslic3r/PrintConfig.cpp:900 msgid "" "This is the acceleration your printer will use for first layer. Set zero to " "disable acceleration control for first layer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:869 +#: src/libslic3r/PrintConfig.cpp:909 +msgid "First layer bed temperature" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:910 msgid "" "Heated build plate temperature for the first layer. Set this to zero to " "disable bed temperature control commands in the output." msgstr "" -#: src/libslic3r/PrintConfig.cpp:878 +#: src/libslic3r/PrintConfig.cpp:920 msgid "" "Set this to a non-zero value to set a manual extrusion width for first " "layer. You can use this to force fatter extrudates for better adhesion. If " @@ -7586,7 +8792,7 @@ msgid "" "layer height. If set to zero, it will use the default extrusion width." msgstr "" -#: src/libslic3r/PrintConfig.cpp:891 +#: src/libslic3r/PrintConfig.cpp:933 msgid "" "When printing with very low layer heights, you might still want to print a " "thicker bottom layer to improve adhesion and tolerance for non perfect build " @@ -7594,47 +8800,51 @@ msgid "" "example: 150%) over the default layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:900 +#: src/libslic3r/PrintConfig.cpp:942 msgid "First layer speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:901 +#: src/libslic3r/PrintConfig.cpp:943 msgid "" "If expressed as absolute value in mm/s, this speed will be applied to all " "the print moves of the first layer, regardless of their type. If expressed " "as a percentage (for example: 40%) it will scale the default speeds." msgstr "" -#: src/libslic3r/PrintConfig.cpp:911 +#: src/libslic3r/PrintConfig.cpp:953 +msgid "First layer extruder temperature" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:954 msgid "" "Extruder temperature for first layer. If you want to control temperature " "manually during print, set this to zero to disable temperature control " "commands in the output file." msgstr "" -#: src/libslic3r/PrintConfig.cpp:920 +#: src/libslic3r/PrintConfig.cpp:964 msgid "" "Speed for filling small gaps using short zigzag moves. Keep this reasonably " "low to avoid too much shaking and resonance issues. Set zero to disable gaps " "filling." msgstr "" -#: src/libslic3r/PrintConfig.cpp:928 +#: src/libslic3r/PrintConfig.cpp:972 msgid "Verbose G-code" msgstr "" -#: src/libslic3r/PrintConfig.cpp:929 +#: src/libslic3r/PrintConfig.cpp:973 msgid "" "Enable this to get a commented G-code file, with each line explained by a " "descriptive text. If you print from SD card, the additional weight of the " "file could make your firmware slow down." msgstr "" -#: src/libslic3r/PrintConfig.cpp:936 +#: src/libslic3r/PrintConfig.cpp:980 msgid "G-code flavor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:937 +#: src/libslic3r/PrintConfig.cpp:981 msgid "" "Some G/M-code commands, including temperature control and others, are not " "universal. Set this option to your printer's firmware to get a compatible " @@ -7642,15 +8852,15 @@ msgid "" "extrusion value at all." msgstr "" -#: src/libslic3r/PrintConfig.cpp:960 +#: src/libslic3r/PrintConfig.cpp:1004 msgid "No extrusion" msgstr "" -#: src/libslic3r/PrintConfig.cpp:965 +#: src/libslic3r/PrintConfig.cpp:1009 msgid "Label objects" msgstr "" -#: src/libslic3r/PrintConfig.cpp:966 +#: src/libslic3r/PrintConfig.cpp:1010 msgid "" "Enable this to add comments into the G-Code labeling print moves with what " "object they belong to, which is useful for the Octoprint CancelObject " @@ -7658,46 +8868,46 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:973 +#: src/libslic3r/PrintConfig.cpp:1017 msgid "High extruder current on filament swap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:974 +#: src/libslic3r/PrintConfig.cpp:1018 msgid "" "It may be beneficial to increase the extruder motor current during the " "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" -#: src/libslic3r/PrintConfig.cpp:982 +#: src/libslic3r/PrintConfig.cpp:1026 msgid "" "This is the acceleration your printer will use for infill. Set zero to " "disable acceleration control for infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:990 +#: src/libslic3r/PrintConfig.cpp:1034 msgid "Combine infill every" msgstr "" -#: src/libslic3r/PrintConfig.cpp:992 +#: src/libslic3r/PrintConfig.cpp:1036 msgid "" "This feature allows to combine infill and speed up your print by extruding " "thicker infill layers while preserving thin perimeters, thus accuracy." msgstr "" -#: src/libslic3r/PrintConfig.cpp:995 +#: src/libslic3r/PrintConfig.cpp:1039 msgid "Combine infill every n layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1001 +#: src/libslic3r/PrintConfig.cpp:1045 msgid "Infill extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1003 +#: src/libslic3r/PrintConfig.cpp:1047 msgid "The extruder to use when printing infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1011 +#: src/libslic3r/PrintConfig.cpp:1055 msgid "" "Set this to a non-zero value to set a manual extrusion width for infill. If " "left zero, default extrusion width will be used if set, otherwise 1.125 x " @@ -7706,32 +8916,32 @@ msgid "" "example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1021 +#: src/libslic3r/PrintConfig.cpp:1065 msgid "Infill before perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1022 +#: src/libslic3r/PrintConfig.cpp:1066 msgid "" "This option will switch the print order of perimeters and infill, making the " "latter first." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1027 +#: src/libslic3r/PrintConfig.cpp:1071 msgid "Only infill where needed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1029 +#: src/libslic3r/PrintConfig.cpp:1073 msgid "" "This option will limit infill to the areas actually needed for supporting " "ceilings (it will act as internal support material). If enabled, slows down " "the G-code generation due to the multiple checks involved." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1036 +#: src/libslic3r/PrintConfig.cpp:1080 msgid "Infill/perimeters overlap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1038 +#: src/libslic3r/PrintConfig.cpp:1082 msgid "" "This setting applies an additional overlap between infill and perimeters for " "better bonding. Theoretically this shouldn't be needed, but backlash might " @@ -7739,30 +8949,63 @@ msgid "" "perimeter extrusion width." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1049 +#: src/libslic3r/PrintConfig.cpp:1093 msgid "Speed for printing the internal fill. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1057 +#: src/libslic3r/PrintConfig.cpp:1101 msgid "Inherits profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1058 +#: src/libslic3r/PrintConfig.cpp:1102 msgid "Name of the profile, from which this profile inherits." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1071 +#: src/libslic3r/PrintConfig.cpp:1115 msgid "Interface shells" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1072 +#: src/libslic3r/PrintConfig.cpp:1116 msgid "" "Force the generation of solid shells between adjacent materials/volumes. " "Useful for multi-extruder prints with translucent materials or manual " "soluble support material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1081 +#: src/libslic3r/PrintConfig.cpp:1124 +msgid "Enable ironing" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1125 +msgid "" +"Enable ironing of the top layers with the hot print head for smooth surface" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133 +msgid "Ironing Type" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1145 +msgid "Flow rate" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1147 +msgid "Percent of a flow rate relative to object's normal layer height." +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1155 +msgid "Spacing between ironing passes" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1157 +msgid "Distance between ironing lines" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1164 src/libslic3r/PrintConfig.cpp:1166 +msgid "Ironing speed" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1174 msgid "" "This custom code is inserted at every layer change, right after the Z move " "and before the extruder moves to the first layer point. Note that you can " @@ -7770,11 +9013,11 @@ msgid "" "[layer_z]." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1092 +#: src/libslic3r/PrintConfig.cpp:1185 msgid "Supports remaining times" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1093 +#: src/libslic3r/PrintConfig.cpp:1186 msgid "" "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute " "intervals into the G-code to let the firmware show accurate remaining time. " @@ -7782,151 +9025,163 @@ msgid "" "firmware supports M73 Qxx Sxx for the silent mode." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1101 +#: src/libslic3r/PrintConfig.cpp:1194 msgid "Supports stealth mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1102 +#: src/libslic3r/PrintConfig.cpp:1195 msgid "The firmware supports stealth mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1125 +#: src/libslic3r/PrintConfig.cpp:1200 +msgid "How to apply" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1201 +msgid "Purpose of Machine Limits" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1203 +msgid "How to apply the Machine Limits" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1233 msgid "Maximum feedrate X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1126 +#: src/libslic3r/PrintConfig.cpp:1234 msgid "Maximum feedrate Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1127 +#: src/libslic3r/PrintConfig.cpp:1235 msgid "Maximum feedrate Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1128 +#: src/libslic3r/PrintConfig.cpp:1236 msgid "Maximum feedrate E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1131 +#: src/libslic3r/PrintConfig.cpp:1239 msgid "Maximum feedrate of the X axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1132 +#: src/libslic3r/PrintConfig.cpp:1240 msgid "Maximum feedrate of the Y axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1133 +#: src/libslic3r/PrintConfig.cpp:1241 msgid "Maximum feedrate of the Z axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1134 +#: src/libslic3r/PrintConfig.cpp:1242 msgid "Maximum feedrate of the E axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1142 +#: src/libslic3r/PrintConfig.cpp:1250 msgid "Maximum acceleration X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1143 +#: src/libslic3r/PrintConfig.cpp:1251 msgid "Maximum acceleration Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1144 +#: src/libslic3r/PrintConfig.cpp:1252 msgid "Maximum acceleration Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1145 +#: src/libslic3r/PrintConfig.cpp:1253 msgid "Maximum acceleration E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1148 +#: src/libslic3r/PrintConfig.cpp:1256 msgid "Maximum acceleration of the X axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1149 +#: src/libslic3r/PrintConfig.cpp:1257 msgid "Maximum acceleration of the Y axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1150 +#: src/libslic3r/PrintConfig.cpp:1258 msgid "Maximum acceleration of the Z axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1151 +#: src/libslic3r/PrintConfig.cpp:1259 msgid "Maximum acceleration of the E axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1159 +#: src/libslic3r/PrintConfig.cpp:1267 msgid "Maximum jerk X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1160 +#: src/libslic3r/PrintConfig.cpp:1268 msgid "Maximum jerk Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1161 +#: src/libslic3r/PrintConfig.cpp:1269 msgid "Maximum jerk Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1162 +#: src/libslic3r/PrintConfig.cpp:1270 msgid "Maximum jerk E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1165 +#: src/libslic3r/PrintConfig.cpp:1273 msgid "Maximum jerk of the X axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1166 +#: src/libslic3r/PrintConfig.cpp:1274 msgid "Maximum jerk of the Y axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1167 +#: src/libslic3r/PrintConfig.cpp:1275 msgid "Maximum jerk of the Z axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1168 +#: src/libslic3r/PrintConfig.cpp:1276 msgid "Maximum jerk of the E axis" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1178 +#: src/libslic3r/PrintConfig.cpp:1286 msgid "Minimum feedrate when extruding" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1180 +#: src/libslic3r/PrintConfig.cpp:1288 msgid "Minimum feedrate when extruding (M205 S)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1188 +#: src/libslic3r/PrintConfig.cpp:1296 msgid "Minimum travel feedrate" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1190 +#: src/libslic3r/PrintConfig.cpp:1298 msgid "Minimum travel feedrate (M205 T)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1198 +#: src/libslic3r/PrintConfig.cpp:1306 msgid "Maximum acceleration when extruding" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1200 +#: src/libslic3r/PrintConfig.cpp:1308 msgid "Maximum acceleration when extruding (M204 S)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1208 +#: src/libslic3r/PrintConfig.cpp:1316 msgid "Maximum acceleration when retracting" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1210 +#: src/libslic3r/PrintConfig.cpp:1318 msgid "Maximum acceleration when retracting (M204 T)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226 +#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334 msgid "Max" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1218 +#: src/libslic3r/PrintConfig.cpp:1326 msgid "This setting represents the maximum speed of your fan." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1227 +#: src/libslic3r/PrintConfig.cpp:1335 #, possible-c-format msgid "" "This is the highest printable layer height for this extruder, used to cap " @@ -7935,28 +9190,28 @@ msgid "" "adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1237 +#: src/libslic3r/PrintConfig.cpp:1345 msgid "Max print speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1238 +#: src/libslic3r/PrintConfig.cpp:1346 msgid "" "When setting other speed settings to 0 Slic3r will autocalculate the optimal " "speed in order to keep constant extruder pressure. This experimental setting " "is used to set the highest print speed you want to allow." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1248 +#: src/libslic3r/PrintConfig.cpp:1356 msgid "" "This experimental setting is used to set the maximum volumetric speed your " "extruder supports." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1257 +#: src/libslic3r/PrintConfig.cpp:1365 msgid "Max volumetric slope positive" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269 +#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377 msgid "" "This experimental setting is used to limit the speed of change in extrusion " "rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate " @@ -7964,95 +9219,95 @@ msgid "" "s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273 +#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381 msgid "mm³/s²" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1268 +#: src/libslic3r/PrintConfig.cpp:1376 msgid "Max volumetric slope negative" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289 +#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397 msgid "Min" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1281 +#: src/libslic3r/PrintConfig.cpp:1389 msgid "This setting represents the minimum PWM your fan needs to work." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1290 +#: src/libslic3r/PrintConfig.cpp:1398 msgid "" "This is the lowest printable layer height for this extruder and limits the " "resolution for variable layer height. Typical values are between 0.05 mm and " "0.1 mm." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1298 +#: src/libslic3r/PrintConfig.cpp:1406 msgid "Min print speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1299 +#: src/libslic3r/PrintConfig.cpp:1407 msgid "Slic3r will not scale speed down below this speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1306 +#: src/libslic3r/PrintConfig.cpp:1414 msgid "Minimal filament extrusion length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1307 +#: src/libslic3r/PrintConfig.cpp:1415 msgid "" "Generate no less than the number of skirt loops required to consume the " "specified amount of filament on the bottom layer. For multi-extruder " "machines, this minimum applies to each extruder." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1316 +#: src/libslic3r/PrintConfig.cpp:1424 msgid "Configuration notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1317 +#: src/libslic3r/PrintConfig.cpp:1425 msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1327 +#: src/libslic3r/PrintConfig.cpp:1435 msgid "" "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1332 +#: src/libslic3r/PrintConfig.cpp:1440 msgid "Host Type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1333 +#: src/libslic3r/PrintConfig.cpp:1441 msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1348 +#: src/libslic3r/PrintConfig.cpp:1456 msgid "Only retract when crossing perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1349 +#: src/libslic3r/PrintConfig.cpp:1457 msgid "" "Disables retraction when the travel path does not exceed the upper layer's " "perimeters (and thus any ooze will be probably invisible)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1356 +#: src/libslic3r/PrintConfig.cpp:1464 msgid "" "This option will drop the temperature of the inactive extruders to prevent " "oozing. It will enable a tall skirt automatically and move extruders outside " "such skirt when changing temperatures." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1363 +#: src/libslic3r/PrintConfig.cpp:1471 msgid "Output filename format" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1364 +#: src/libslic3r/PrintConfig.cpp:1472 msgid "" "You can use all configuration options as variables inside this template. For " "example: [layer_height], [fill_density] etc. You can also use [timestamp], " @@ -8060,31 +9315,31 @@ msgid "" "[input_filename], [input_filename_base]." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1373 +#: src/libslic3r/PrintConfig.cpp:1481 msgid "Detect bridging perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1375 +#: src/libslic3r/PrintConfig.cpp:1483 msgid "" "Experimental option to adjust flow for overhangs (bridge flow will be used), " "to apply bridge speed to them and enable fan." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1381 +#: src/libslic3r/PrintConfig.cpp:1489 msgid "Filament parking position" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1382 +#: src/libslic3r/PrintConfig.cpp:1490 msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1390 +#: src/libslic3r/PrintConfig.cpp:1498 msgid "Extra loading distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1391 +#: src/libslic3r/PrintConfig.cpp:1499 msgid "" "When set to zero, the distance the filament is moved from parking position " "during load is exactly the same as it was moved back during unload. When " @@ -8092,28 +9347,28 @@ msgid "" "than unloading." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417 -#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440 +#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525 +#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548 msgid "Perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1400 +#: src/libslic3r/PrintConfig.cpp:1508 msgid "" "This is the acceleration your printer will use for perimeters. A high value " "like 9000 usually gives good results if your hardware is up to the job. Set " "zero to disable acceleration control for perimeters." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1408 +#: src/libslic3r/PrintConfig.cpp:1516 msgid "Perimeter extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1410 +#: src/libslic3r/PrintConfig.cpp:1518 msgid "" "The extruder to use when printing perimeters and brim. First extruder is 1." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1419 +#: src/libslic3r/PrintConfig.cpp:1527 msgid "" "Set this to a non-zero value to set a manual extrusion width for perimeters. " "You may want to use thinner extrudates to get more accurate surfaces. If " @@ -8122,12 +9377,12 @@ msgid "" "it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1432 +#: src/libslic3r/PrintConfig.cpp:1540 msgid "" "Speed for perimeters (contours, aka vertical shells). Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1442 +#: src/libslic3r/PrintConfig.cpp:1550 msgid "" "This option sets the number of perimeters to generate for each layer. Note " "that Slic3r may increase this number automatically when it detects sloping " @@ -8135,11 +9390,11 @@ msgid "" "Perimeters option is enabled." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1446 +#: src/libslic3r/PrintConfig.cpp:1554 msgid "(minimum)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1454 +#: src/libslic3r/PrintConfig.cpp:1562 msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " @@ -8148,55 +9403,55 @@ msgid "" "environment variables." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1466 +#: src/libslic3r/PrintConfig.cpp:1574 msgid "Printer type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1467 +#: src/libslic3r/PrintConfig.cpp:1575 msgid "Type of the printer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1472 +#: src/libslic3r/PrintConfig.cpp:1580 msgid "Printer notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1473 +#: src/libslic3r/PrintConfig.cpp:1581 msgid "You can put your notes regarding the printer here." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1481 +#: src/libslic3r/PrintConfig.cpp:1589 msgid "Printer vendor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1482 +#: src/libslic3r/PrintConfig.cpp:1590 msgid "Name of the printer vendor." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1487 +#: src/libslic3r/PrintConfig.cpp:1595 msgid "Printer variant" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1488 +#: src/libslic3r/PrintConfig.cpp:1596 msgid "" "Name of the printer variant. For example, the printer variants may be " "differentiated by a nozzle diameter." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1501 +#: src/libslic3r/PrintConfig.cpp:1609 msgid "Raft layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1503 +#: src/libslic3r/PrintConfig.cpp:1611 msgid "" "The object will be raised by this number of layers, and support material " "will be generated under it." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1511 +#: src/libslic3r/PrintConfig.cpp:1619 msgid "Resolution" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1512 +#: src/libslic3r/PrintConfig.cpp:1620 msgid "" "Minimum detail resolution, used to simplify the input file for speeding up " "the slicing job and reducing memory usage. High-resolution models often " @@ -8204,289 +9459,293 @@ msgid "" "simplification and use full resolution from input." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1522 +#: src/libslic3r/PrintConfig.cpp:1630 msgid "Minimum travel after retraction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1523 +#: src/libslic3r/PrintConfig.cpp:1631 msgid "" "Retraction is not triggered when travel moves are shorter than this length." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1529 +#: src/libslic3r/PrintConfig.cpp:1637 msgid "Retract amount before wipe" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1530 +#: src/libslic3r/PrintConfig.cpp:1638 msgid "" "With bowden extruders, it may be wise to do some amount of quick retract " "before doing the wipe movement." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1537 +#: src/libslic3r/PrintConfig.cpp:1645 msgid "Retract on layer change" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1538 +#: src/libslic3r/PrintConfig.cpp:1646 msgid "This flag enforces a retraction whenever a Z move is done." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551 +#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659 msgid "Length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1544 +#: src/libslic3r/PrintConfig.cpp:1652 msgid "Retraction Length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1545 +#: src/libslic3r/PrintConfig.cpp:1653 msgid "" "When retraction is triggered, filament is pulled back by the specified " "amount (the length is measured on raw filament, before it enters the " "extruder)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556 +#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664 msgid "mm (zero to disable)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1552 +#: src/libslic3r/PrintConfig.cpp:1660 msgid "Retraction Length (Toolchange)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1553 +#: src/libslic3r/PrintConfig.cpp:1661 msgid "" "When retraction is triggered before changing tool, filament is pulled back " "by the specified amount (the length is measured on raw filament, before it " "enters the extruder)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1561 +#: src/libslic3r/PrintConfig.cpp:1669 msgid "Lift Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1562 +#: src/libslic3r/PrintConfig.cpp:1670 msgid "" "If you set this to a positive value, Z is quickly raised every time a " "retraction is triggered. When using multiple extruders, only the setting for " "the first extruder will be considered." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1569 +#: src/libslic3r/PrintConfig.cpp:1677 msgid "Above Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1570 +#: src/libslic3r/PrintConfig.cpp:1678 msgid "Only lift Z above" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1571 +#: src/libslic3r/PrintConfig.cpp:1679 msgid "" "If you set this to a positive value, Z lift will only take place above the " "specified absolute Z. You can tune this setting for skipping lift on the " "first layers." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1578 +#: src/libslic3r/PrintConfig.cpp:1686 msgid "Below Z" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1579 +#: src/libslic3r/PrintConfig.cpp:1687 msgid "Only lift Z below" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1580 +#: src/libslic3r/PrintConfig.cpp:1688 msgid "" "If you set this to a positive value, Z lift will only take place below the " "specified absolute Z. You can tune this setting for limiting lift to the " "first layers." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596 +#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704 msgid "Extra length on restart" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1589 +#: src/libslic3r/PrintConfig.cpp:1697 msgid "" "When the retraction is compensated after the travel move, the extruder will " "push this additional amount of filament. This setting is rarely needed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1597 +#: src/libslic3r/PrintConfig.cpp:1705 msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605 +#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713 msgid "Retraction Speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1606 +#: src/libslic3r/PrintConfig.cpp:1714 msgid "The speed for retractions (it only applies to the extruder motor)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613 +#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721 msgid "Deretraction Speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1614 +#: src/libslic3r/PrintConfig.cpp:1722 msgid "" "The speed for loading of a filament into extruder after retraction (it only " "applies to the extruder motor). If left to zero, the retraction speed is " "used." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1621 +#: src/libslic3r/PrintConfig.cpp:1729 msgid "Seam position" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1623 +#: src/libslic3r/PrintConfig.cpp:1731 msgid "Position of perimeters starting points." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1629 +#: src/libslic3r/PrintConfig.cpp:1737 msgid "Random" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1630 +#: src/libslic3r/PrintConfig.cpp:1738 msgid "Nearest" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1631 +#: src/libslic3r/PrintConfig.cpp:1739 msgid "Aligned" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1639 +#: src/libslic3r/PrintConfig.cpp:1747 msgid "Direction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1641 +#: src/libslic3r/PrintConfig.cpp:1749 msgid "Preferred direction of the seam" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1642 +#: src/libslic3r/PrintConfig.cpp:1750 msgid "Seam preferred direction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1649 +#: src/libslic3r/PrintConfig.cpp:1757 msgid "Jitter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1651 +#: src/libslic3r/PrintConfig.cpp:1759 msgid "Seam preferred direction jitter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1652 +#: src/libslic3r/PrintConfig.cpp:1760 msgid "Preferred direction of the seam - jitter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1662 +#: src/libslic3r/PrintConfig.cpp:1769 +msgid "Serial port" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1770 msgid "USB/serial port for printer connection." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1669 +#: src/libslic3r/PrintConfig.cpp:1777 msgid "Serial port speed" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1670 +#: src/libslic3r/PrintConfig.cpp:1778 msgid "Speed (baud) of USB/serial port for printer connection." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1679 +#: src/libslic3r/PrintConfig.cpp:1787 msgid "Distance from object" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1680 +#: src/libslic3r/PrintConfig.cpp:1788 msgid "" "Distance between skirt and object(s). Set this to zero to attach the skirt " "to the object(s) and get a brim for better adhesion." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1687 +#: src/libslic3r/PrintConfig.cpp:1795 msgid "Skirt height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1688 +#: src/libslic3r/PrintConfig.cpp:1796 msgid "" "Height of skirt expressed in layers. Set this to a tall value to use skirt " "as a shield against drafts." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1695 +#: src/libslic3r/PrintConfig.cpp:1803 msgid "Draft shield" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1696 +#: src/libslic3r/PrintConfig.cpp:1804 msgid "" "If enabled, the skirt will be as tall as a highest printed object. This is " "useful to protect an ABS or ASA print from warping and detaching from print " "bed due to wind draft." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1702 +#: src/libslic3r/PrintConfig.cpp:1810 msgid "Loops (minimum)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1703 +#: src/libslic3r/PrintConfig.cpp:1811 msgid "Skirt Loops" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1704 +#: src/libslic3r/PrintConfig.cpp:1812 msgid "" "Number of loops for the skirt. If the Minimum Extrusion Length option is " "set, the number of loops might be greater than the one configured here. Set " "this to zero to disable skirt completely." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1712 +#: src/libslic3r/PrintConfig.cpp:1820 msgid "Slow down if layer print time is below" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1713 +#: src/libslic3r/PrintConfig.cpp:1821 msgid "" "If layer print time is estimated below this number of seconds, print moves " "speed will be scaled down to extend duration to this value." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1722 +#: src/libslic3r/PrintConfig.cpp:1830 msgid "Small perimeters" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1724 +#: src/libslic3r/PrintConfig.cpp:1832 msgid "" "This separate setting will affect the speed of perimeters having radius <= " "6.5mm (usually holes). If expressed as percentage (for example: 80%) it will " "be calculated on the perimeters speed setting above. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1734 +#: src/libslic3r/PrintConfig.cpp:1842 msgid "Solid infill threshold area" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1736 +#: src/libslic3r/PrintConfig.cpp:1844 msgid "" "Force solid infill for regions having a smaller area than the specified " "threshold." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1737 +#: src/libslic3r/PrintConfig.cpp:1845 msgid "mm²" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1743 +#: src/libslic3r/PrintConfig.cpp:1851 msgid "Solid infill extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1745 +#: src/libslic3r/PrintConfig.cpp:1853 msgid "The extruder to use when printing solid infill." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1751 +#: src/libslic3r/PrintConfig.cpp:1859 msgid "Solid infill every" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1753 +#: src/libslic3r/PrintConfig.cpp:1861 msgid "" "This feature allows to force a solid layer every given number of layers. " "Zero to disable. You can set this to any value (for example 9999); Slic3r " @@ -8494,7 +9753,7 @@ msgid "" "according to nozzle diameter and layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1765 +#: src/libslic3r/PrintConfig.cpp:1873 msgid "" "Set this to a non-zero value to set a manual extrusion width for infill for " "solid surfaces. If left zero, default extrusion width will be used if set, " @@ -8502,26 +9761,26 @@ msgid "" "(for example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1776 +#: src/libslic3r/PrintConfig.cpp:1884 msgid "" "Speed for printing solid regions (top/bottom/internal horizontal shells). " "This can be expressed as a percentage (for example: 80%) over the default " "infill speed above. Set to zero for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1788 +#: src/libslic3r/PrintConfig.cpp:1896 msgid "Number of solid layers to generate on top and bottom surfaces." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1794 src/libslic3r/PrintConfig.cpp:1795 +#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903 msgid "Minimum thickness of a top / bottom shell" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1801 +#: src/libslic3r/PrintConfig.cpp:1909 msgid "Spiral vase" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1802 +#: src/libslic3r/PrintConfig.cpp:1910 msgid "" "This feature will raise Z gradually while printing a single-walled object in " "order to remove any visible seam. This option requires a single perimeter, " @@ -8530,18 +9789,18 @@ msgid "" "when printing more than an object." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1810 +#: src/libslic3r/PrintConfig.cpp:1918 msgid "Temperature variation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1811 +#: src/libslic3r/PrintConfig.cpp:1919 msgid "" "Temperature difference to be applied when an extruder is not active. Enables " "a full-height \"sacrificial\" skirt on which the nozzles are periodically " "wiped." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1821 +#: src/libslic3r/PrintConfig.cpp:1929 msgid "" "This start procedure is inserted at the beginning, after bed has reached the " "target temperature and extruder just started heating, and before extruder " @@ -8552,7 +9811,7 @@ msgid "" "put a \"M109 S[first_layer_temperature]\" command wherever you want." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1836 +#: src/libslic3r/PrintConfig.cpp:1944 msgid "" "This start procedure is inserted at the beginning, after any printer start " "gcode (and after any toolchange to this filament in case of multi-material " @@ -8565,29 +9824,45 @@ msgid "" "extruders, the gcode is processed in extruder order." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1852 +#: src/libslic3r/PrintConfig.cpp:1960 +msgid "Color change G-code" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1961 +msgid "This G-code will be used as a code for the color change" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1970 +msgid "This G-code will be used as a code for the pause print" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1979 +msgid "This G-code will be used as a custom code" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:1987 msgid "Single Extruder Multi Material" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1853 +#: src/libslic3r/PrintConfig.cpp:1988 msgid "The printer multiplexes filaments into a single hot end." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1858 +#: src/libslic3r/PrintConfig.cpp:1993 msgid "Prime all printing extruders" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1859 +#: src/libslic3r/PrintConfig.cpp:1994 msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1864 +#: src/libslic3r/PrintConfig.cpp:1999 msgid "No sparse layers (EXPERIMENTAL)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1865 +#: src/libslic3r/PrintConfig.cpp:2000 msgid "" "If enabled, the wipe tower will not be printed on layers with no " "toolchanges. On layers with a toolchange, extruder will travel downward to " @@ -8595,75 +9870,75 @@ msgid "" "with the print." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1872 +#: src/libslic3r/PrintConfig.cpp:2007 msgid "Generate support material" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1874 +#: src/libslic3r/PrintConfig.cpp:2009 msgid "Enable support material generation." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1878 +#: src/libslic3r/PrintConfig.cpp:2013 msgid "Auto generated supports" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1880 +#: src/libslic3r/PrintConfig.cpp:2015 msgid "" "If checked, supports will be generated automatically based on the overhang " "threshold value. If unchecked, supports will be generated inside the " "\"Support Enforcer\" volumes only." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1886 +#: src/libslic3r/PrintConfig.cpp:2021 msgid "XY separation between an object and its support" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1888 +#: src/libslic3r/PrintConfig.cpp:2023 msgid "" "XY separation between an object and its support. If expressed as percentage " "(for example 50%), it will be calculated over external perimeter width." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1898 +#: src/libslic3r/PrintConfig.cpp:2033 msgid "Pattern angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1900 +#: src/libslic3r/PrintConfig.cpp:2035 msgid "" "Use this setting to rotate the support material pattern on the horizontal " "plane." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:2693 +#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840 msgid "" "Only create support if it lies on a build plate. Don't create support on a " "print." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1916 +#: src/libslic3r/PrintConfig.cpp:2051 msgid "Contact Z distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1918 +#: src/libslic3r/PrintConfig.cpp:2053 msgid "" "The vertical distance between object and support material interface. Setting " "this to 0 will also prevent Slic3r from using bridge flow and speed for the " "first object layer." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1925 +#: src/libslic3r/PrintConfig.cpp:2060 msgid "0 (soluble)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1926 +#: src/libslic3r/PrintConfig.cpp:2061 msgid "0.2 (detachable)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1931 +#: src/libslic3r/PrintConfig.cpp:2066 msgid "Enforce support for the first" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1933 +#: src/libslic3r/PrintConfig.cpp:2068 msgid "" "Generate support material for the specified number of layers counting from " "bottom, regardless of whether normal support material is enabled or not and " @@ -8671,21 +9946,21 @@ msgid "" "of objects having a very thin or poor footprint on the build plate." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1938 +#: src/libslic3r/PrintConfig.cpp:2073 msgid "Enforce support for the first n layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1944 +#: src/libslic3r/PrintConfig.cpp:2079 msgid "Support material/raft/skirt extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1946 +#: src/libslic3r/PrintConfig.cpp:2081 msgid "" "The extruder to use when printing support material, raft and skirt (1+, 0 to " "use the current extruder to minimize tool changes)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1955 +#: src/libslic3r/PrintConfig.cpp:2090 msgid "" "Set this to a non-zero value to set a manual extrusion width for support " "material. If left zero, default extrusion width will be used if set, " @@ -8693,89 +9968,89 @@ msgid "" "example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1964 +#: src/libslic3r/PrintConfig.cpp:2099 msgid "Interface loops" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1966 +#: src/libslic3r/PrintConfig.cpp:2101 msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1971 +#: src/libslic3r/PrintConfig.cpp:2106 msgid "Support material/raft interface extruder" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1973 +#: src/libslic3r/PrintConfig.cpp:2108 msgid "" "The extruder to use when printing support material interface (1+, 0 to use " "the current extruder to minimize tool changes). This affects raft too." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1980 +#: src/libslic3r/PrintConfig.cpp:2115 msgid "Interface layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1982 +#: src/libslic3r/PrintConfig.cpp:2117 msgid "" "Number of interface layers to insert between the object(s) and support " "material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:1989 +#: src/libslic3r/PrintConfig.cpp:2124 msgid "Interface pattern spacing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:1991 +#: src/libslic3r/PrintConfig.cpp:2126 msgid "Spacing between interface lines. Set zero to get a solid interface." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2000 +#: src/libslic3r/PrintConfig.cpp:2135 msgid "" "Speed for printing support material interface layers. If expressed as " "percentage (for example 50%) it will be calculated over support material " "speed." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2009 +#: src/libslic3r/PrintConfig.cpp:2144 msgid "Pattern" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2011 +#: src/libslic3r/PrintConfig.cpp:2146 msgid "Pattern used to generate support material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2017 +#: src/libslic3r/PrintConfig.cpp:2152 msgid "Rectilinear grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2023 +#: src/libslic3r/PrintConfig.cpp:2158 msgid "Pattern spacing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2025 +#: src/libslic3r/PrintConfig.cpp:2160 msgid "Spacing between support material lines." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2034 +#: src/libslic3r/PrintConfig.cpp:2169 msgid "Speed for printing support material." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2041 +#: src/libslic3r/PrintConfig.cpp:2176 msgid "Synchronize with object layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2043 +#: src/libslic3r/PrintConfig.cpp:2178 msgid "" "Synchronize support layers with the object print layers. This is useful with " "multi-material printers, where the extruder switch is expensive." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2049 +#: src/libslic3r/PrintConfig.cpp:2184 msgid "Overhang threshold" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2051 +#: src/libslic3r/PrintConfig.cpp:2186 msgid "" "Support material will not be generated for overhangs whose slope angle (90° " "= vertical) is above the given threshold. In other words, this value " @@ -8784,43 +10059,47 @@ msgid "" "detection (recommended)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2063 +#: src/libslic3r/PrintConfig.cpp:2198 msgid "With sheath around the support" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2065 +#: src/libslic3r/PrintConfig.cpp:2200 msgid "" "Add a sheath (a single perimeter line) around the base support. This makes " "the support more reliable, but also more difficult to remove." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2072 +#: src/libslic3r/PrintConfig.cpp:2207 msgid "" "Extruder temperature for layers after the first one. Set this to zero to " "disable temperature control commands in the output." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2080 +#: src/libslic3r/PrintConfig.cpp:2210 +msgid "Extruder temperature" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2216 msgid "Detect thin walls" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2082 +#: src/libslic3r/PrintConfig.cpp:2218 msgid "" "Detect single-width walls (parts where two extrusions don't fit and we need " "to collapse them into a single trace)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2088 +#: src/libslic3r/PrintConfig.cpp:2224 msgid "Threads" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2089 +#: src/libslic3r/PrintConfig.cpp:2225 msgid "" "Threads are used to parallelize long-running tasks. Optimal threads number " "is slightly above the number of available cores/processors." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2101 +#: src/libslic3r/PrintConfig.cpp:2237 msgid "" "This custom code is inserted before every toolchange. Placeholder variables " "for all PrusaSlicer settings as well as {previous_extruder} and " @@ -8830,7 +10109,7 @@ msgid "" "behaviour both before and after the toolchange." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2114 +#: src/libslic3r/PrintConfig.cpp:2250 msgid "" "Set this to a non-zero value to set a manual extrusion width for infill for " "top surfaces. You may want to use thinner extrudates to fill all narrow " @@ -8839,7 +10118,7 @@ msgid "" "percentage (for example 90%) it will be computed over layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2126 +#: src/libslic3r/PrintConfig.cpp:2262 msgid "" "Speed for printing top solid layers (it only applies to the uppermost " "external layers and not to their internal solid layers). You may want to " @@ -8848,54 +10127,54 @@ msgid "" "for auto." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2141 +#: src/libslic3r/PrintConfig.cpp:2277 msgid "Number of solid layers to generate on top surfaces." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2142 +#: src/libslic3r/PrintConfig.cpp:2278 msgid "Top solid layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2150 +#: src/libslic3r/PrintConfig.cpp:2286 msgid "" "The number of top solid layers is increased above top_solid_layers if " "necessary to satisfy minimum thickness of top shell. This is useful to " "prevent pillowing effect when printing with variable layer height." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2153 +#: src/libslic3r/PrintConfig.cpp:2289 msgid "Minimum top shell thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2160 +#: src/libslic3r/PrintConfig.cpp:2296 msgid "Speed for travel moves (jumps between distant extrusion points)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2168 +#: src/libslic3r/PrintConfig.cpp:2304 msgid "Use firmware retraction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2169 +#: src/libslic3r/PrintConfig.cpp:2305 msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " "handle the retraction. This is only supported in recent Marlin." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2175 +#: src/libslic3r/PrintConfig.cpp:2311 msgid "Use relative E distances" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2176 +#: src/libslic3r/PrintConfig.cpp:2312 msgid "" "If your firmware requires relative E values, check this, otherwise leave it " "unchecked. Most firmwares use absolute values." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2182 +#: src/libslic3r/PrintConfig.cpp:2318 msgid "Use volumetric E" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2183 +#: src/libslic3r/PrintConfig.cpp:2319 msgid "" "This experimental setting uses outputs the E values in cubic millimeters " "instead of linear millimeters. If your firmware doesn't already know " @@ -8905,127 +10184,127 @@ msgid "" "only supported in recent Marlin." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2193 +#: src/libslic3r/PrintConfig.cpp:2329 msgid "Enable variable layer height feature" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2194 +#: src/libslic3r/PrintConfig.cpp:2330 msgid "" "Some printers or printer setups may have difficulties printing with a " "variable layer height. Enabled by default." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2200 +#: src/libslic3r/PrintConfig.cpp:2336 msgid "Wipe while retracting" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2201 +#: src/libslic3r/PrintConfig.cpp:2337 msgid "" "This flag will move the nozzle while retracting to minimize the possible " "blob on leaky extruders." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2208 +#: src/libslic3r/PrintConfig.cpp:2344 msgid "" "Multi material printers may need to prime or purge extruders on tool " "changes. Extrude the excess material into the wipe tower." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2214 +#: src/libslic3r/PrintConfig.cpp:2350 msgid "Purging volumes - load/unload volumes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2215 +#: src/libslic3r/PrintConfig.cpp:2351 msgid "" "This vector saves required volumes to change from/to each tool used on the " "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2221 +#: src/libslic3r/PrintConfig.cpp:2357 msgid "Purging volumes - matrix" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2222 +#: src/libslic3r/PrintConfig.cpp:2358 msgid "" "This matrix describes volumes (in cubic milimetres) required to purge the " "new filament on the wipe tower for any given pair of tools." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2231 +#: src/libslic3r/PrintConfig.cpp:2367 msgid "Position X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2232 +#: src/libslic3r/PrintConfig.cpp:2368 msgid "X coordinate of the left front corner of a wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2238 +#: src/libslic3r/PrintConfig.cpp:2374 msgid "Position Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2239 +#: src/libslic3r/PrintConfig.cpp:2375 msgid "Y coordinate of the left front corner of a wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2246 +#: src/libslic3r/PrintConfig.cpp:2382 msgid "Width of a wipe tower" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2252 +#: src/libslic3r/PrintConfig.cpp:2388 msgid "Wipe tower rotation angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2253 +#: src/libslic3r/PrintConfig.cpp:2389 msgid "Wipe tower rotation angle with respect to x-axis." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2260 +#: src/libslic3r/PrintConfig.cpp:2396 msgid "Wipe into this object's infill" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2261 +#: src/libslic3r/PrintConfig.cpp:2397 msgid "" "Purging after toolchange will done inside this object's infills. This lowers " "the amount of waste but may result in longer print time due to additional " "travel moves." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2268 +#: src/libslic3r/PrintConfig.cpp:2404 msgid "Wipe into this object" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2269 +#: src/libslic3r/PrintConfig.cpp:2405 msgid "" "Object will be used to purge the nozzle after a toolchange to save material " "that would otherwise end up in the wipe tower and decrease print time. " "Colours of the objects will be mixed as a result." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2275 +#: src/libslic3r/PrintConfig.cpp:2411 msgid "Maximal bridging distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2276 +#: src/libslic3r/PrintConfig.cpp:2412 msgid "Maximal distance between supports on sparse infill sections." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2282 +#: src/libslic3r/PrintConfig.cpp:2418 msgid "XY Size Compensation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2284 +#: src/libslic3r/PrintConfig.cpp:2420 msgid "" "The object will be grown/shrunk in the XY plane by the configured value " "(negative = inwards, positive = outwards). This might be useful for fine-" "tuning hole sizes." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2292 +#: src/libslic3r/PrintConfig.cpp:2428 msgid "Z offset" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2293 +#: src/libslic3r/PrintConfig.cpp:2429 msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " "output G-code. It is used to compensate for bad Z endstop position: for " @@ -9033,408 +10312,414 @@ msgid "" "print bed, set this to -0.3 (or fix your endstop)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2360 +#: src/libslic3r/PrintConfig.cpp:2496 msgid "Display width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2361 +#: src/libslic3r/PrintConfig.cpp:2497 msgid "Width of the display" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2366 +#: src/libslic3r/PrintConfig.cpp:2502 msgid "Display height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2367 +#: src/libslic3r/PrintConfig.cpp:2503 msgid "Height of the display" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2372 +#: src/libslic3r/PrintConfig.cpp:2508 msgid "Number of pixels in" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2374 +#: src/libslic3r/PrintConfig.cpp:2510 msgid "Number of pixels in X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2380 +#: src/libslic3r/PrintConfig.cpp:2516 msgid "Number of pixels in Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2385 +#: src/libslic3r/PrintConfig.cpp:2521 msgid "Display horizontal mirroring" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2386 +#: src/libslic3r/PrintConfig.cpp:2522 msgid "Mirror horizontally" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2387 +#: src/libslic3r/PrintConfig.cpp:2523 msgid "Enable horizontal mirroring of output images" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2392 +#: src/libslic3r/PrintConfig.cpp:2528 msgid "Display vertical mirroring" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2393 +#: src/libslic3r/PrintConfig.cpp:2529 msgid "Mirror vertically" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2394 +#: src/libslic3r/PrintConfig.cpp:2530 msgid "Enable vertical mirroring of output images" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2399 +#: src/libslic3r/PrintConfig.cpp:2535 msgid "Display orientation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2400 +#: src/libslic3r/PrintConfig.cpp:2536 msgid "" "Set the actual LCD display orientation inside the SLA printer. Portrait mode " "will flip the meaning of display width and height parameters and the output " "images will be rotated by 90 degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2406 +#: src/libslic3r/PrintConfig.cpp:2542 msgid "Landscape" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2407 +#: src/libslic3r/PrintConfig.cpp:2543 msgid "Portrait" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2412 +#: src/libslic3r/PrintConfig.cpp:2548 msgid "Fast" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2413 +#: src/libslic3r/PrintConfig.cpp:2549 msgid "Fast tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2414 +#: src/libslic3r/PrintConfig.cpp:2550 msgid "Time of the fast tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2421 +#: src/libslic3r/PrintConfig.cpp:2557 msgid "Slow" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2422 +#: src/libslic3r/PrintConfig.cpp:2558 msgid "Slow tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2423 +#: src/libslic3r/PrintConfig.cpp:2559 msgid "Time of the slow tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2430 +#: src/libslic3r/PrintConfig.cpp:2566 msgid "Area fill" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2431 +#: src/libslic3r/PrintConfig.cpp:2567 msgid "" "The percentage of the bed area. \n" "If the print area exceeds the specified value, \n" "then a slow tilt will be used, otherwise - a fast tilt" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2438 src/libslic3r/PrintConfig.cpp:2439 -#: src/libslic3r/PrintConfig.cpp:2440 +#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575 +#: src/libslic3r/PrintConfig.cpp:2576 msgid "Printer scaling correction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2446 src/libslic3r/PrintConfig.cpp:2447 +#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583 msgid "Printer absolute correction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2448 +#: src/libslic3r/PrintConfig.cpp:2584 msgid "" "Will inflate or deflate the sliced 2D polygons according to the sign of the " "correction." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2454 +#: src/libslic3r/PrintConfig.cpp:2590 msgid "Elephant foot minimum width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2456 +#: src/libslic3r/PrintConfig.cpp:2592 msgid "" "Minimum width of features to maintain when doing elephant foot compensation." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2463 src/libslic3r/PrintConfig.cpp:2464 +#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600 msgid "Printer gamma correction" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2465 +#: src/libslic3r/PrintConfig.cpp:2601 msgid "" "This will apply a gamma correction to the rasterized 2D polygons. A gamma " "value of zero means thresholding with the threshold in the middle. This " "behaviour eliminates antialiasing without losing holes in polygons." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2477 src/libslic3r/PrintConfig.cpp:2478 +#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614 msgid "SLA material type" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490 +#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626 msgid "Initial layer height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497 +#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633 msgid "Bottle volume" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2498 +#: src/libslic3r/PrintConfig.cpp:2634 msgid "ml" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2503 src/libslic3r/PrintConfig.cpp:2504 +#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640 msgid "Bottle weight" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2505 +#: src/libslic3r/PrintConfig.cpp:2641 msgid "kg" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2512 +#: src/libslic3r/PrintConfig.cpp:2648 msgid "g/ml" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2519 +#: src/libslic3r/PrintConfig.cpp:2655 msgid "money/bottle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2524 +#: src/libslic3r/PrintConfig.cpp:2660 msgid "Faded layers" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2525 +#: src/libslic3r/PrintConfig.cpp:2661 msgid "" "Number of the layers needed for the exposure time fade from initial exposure " "time to the exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2532 src/libslic3r/PrintConfig.cpp:2533 +#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669 msgid "Minimum exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2540 src/libslic3r/PrintConfig.cpp:2541 +#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677 msgid "Maximum exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549 +#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685 msgid "Exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2555 src/libslic3r/PrintConfig.cpp:2556 +#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692 msgid "Minimum initial exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2563 src/libslic3r/PrintConfig.cpp:2564 +#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700 msgid "Maximum initial exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572 +#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708 msgid "Initial exposure time" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2578 src/libslic3r/PrintConfig.cpp:2579 +#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715 msgid "Correction for expansion" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2585 +#: src/libslic3r/PrintConfig.cpp:2721 msgid "SLA print material notes" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2586 +#: src/libslic3r/PrintConfig.cpp:2722 msgid "You can put your notes regarding the SLA print material here." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2598 src/libslic3r/PrintConfig.cpp:2609 +#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745 msgid "Default SLA material profile" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2620 +#: src/libslic3r/PrintConfig.cpp:2756 msgid "Generate supports" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2622 +#: src/libslic3r/PrintConfig.cpp:2758 msgid "Generate supports for the models" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2627 -msgid "Support head front diameter" +#: src/libslic3r/PrintConfig.cpp:2763 +msgid "Pinhead front diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2629 +#: src/libslic3r/PrintConfig.cpp:2765 msgid "Diameter of the pointing side of the head" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2636 -msgid "Support head penetration" +#: src/libslic3r/PrintConfig.cpp:2772 +msgid "Head penetration" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2638 +#: src/libslic3r/PrintConfig.cpp:2774 msgid "How much the pinhead has to penetrate the model surface" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2645 -msgid "Support head width" +#: src/libslic3r/PrintConfig.cpp:2781 +msgid "Pinhead width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2647 +#: src/libslic3r/PrintConfig.cpp:2783 msgid "Width from the back sphere center to the front sphere center" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2655 -msgid "Support pillar diameter" +#: src/libslic3r/PrintConfig.cpp:2791 +msgid "Pillar diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2657 +#: src/libslic3r/PrintConfig.cpp:2793 msgid "Diameter in mm of the support pillars" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2665 +#: src/libslic3r/PrintConfig.cpp:2801 +msgid "Small pillar diameter percent" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2803 +msgid "" +"The percentage of smaller pillars compared to the normal pillar diameter " +"which are used in problematic areas where a normal pilla cannot fit." +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:2812 msgid "Max bridges on a pillar" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2667 +#: src/libslic3r/PrintConfig.cpp:2814 msgid "" "Maximum number of bridges that can be placed on a pillar. Bridges hold " "support point pinheads and connect to pillars as small branches." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2675 -msgid "Support pillar connection mode" +#: src/libslic3r/PrintConfig.cpp:2822 +msgid "Pillar connection mode" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2676 +#: src/libslic3r/PrintConfig.cpp:2823 msgid "" "Controls the bridge type between two neighboring pillars. Can be zig-zag, " "cross (double zig-zag) or dynamic which will automatically switch between " "the first two depending on the distance of the two pillars." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2684 +#: src/libslic3r/PrintConfig.cpp:2831 msgid "Zig-Zag" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2685 +#: src/libslic3r/PrintConfig.cpp:2832 msgid "Cross" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2686 +#: src/libslic3r/PrintConfig.cpp:2833 msgid "Dynamic" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2698 +#: src/libslic3r/PrintConfig.cpp:2845 msgid "Pillar widening factor" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2700 +#: src/libslic3r/PrintConfig.cpp:2847 msgid "" "Merging bridges or pillars into another pillars can increase the radius. " "Zero means no increase, one means full increase." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2709 +#: src/libslic3r/PrintConfig.cpp:2856 msgid "Support base diameter" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2711 +#: src/libslic3r/PrintConfig.cpp:2858 msgid "Diameter in mm of the pillar base" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2719 +#: src/libslic3r/PrintConfig.cpp:2866 msgid "Support base height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2721 +#: src/libslic3r/PrintConfig.cpp:2868 msgid "The height of the pillar base cone" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2728 +#: src/libslic3r/PrintConfig.cpp:2875 msgid "Support base safety distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2731 +#: src/libslic3r/PrintConfig.cpp:2878 msgid "" "The minimum distance of the pillar base from the model in mm. Makes sense in " "zero elevation mode where a gap according to this parameter is inserted " "between the model and the pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2741 +#: src/libslic3r/PrintConfig.cpp:2888 msgid "Critical angle" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2743 +#: src/libslic3r/PrintConfig.cpp:2890 msgid "The default angle for connecting support sticks and junctions." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2751 +#: src/libslic3r/PrintConfig.cpp:2898 msgid "Max bridge length" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2753 +#: src/libslic3r/PrintConfig.cpp:2900 msgid "The max length of a bridge" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2760 +#: src/libslic3r/PrintConfig.cpp:2907 msgid "Max pillar linking distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2762 +#: src/libslic3r/PrintConfig.cpp:2909 msgid "" "The max distance of two pillars to get linked with each other. A zero value " "will prohibit pillar cascading." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2770 -msgid "Object elevation" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:2772 +#: src/libslic3r/PrintConfig.cpp:2919 msgid "" "How much the supports should lift up the supported object. If \"Pad around " "object\" is enabled, this value is ignored." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2783 +#: src/libslic3r/PrintConfig.cpp:2930 msgid "This is a relative measure of support points density." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2789 +#: src/libslic3r/PrintConfig.cpp:2936 msgid "Minimal distance of the support points" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2791 +#: src/libslic3r/PrintConfig.cpp:2938 msgid "No support points will be placed closer than this threshold." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2797 +#: src/libslic3r/PrintConfig.cpp:2944 msgid "Use pad" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2799 +#: src/libslic3r/PrintConfig.cpp:2946 msgid "Add a pad underneath the supported model" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2804 +#: src/libslic3r/PrintConfig.cpp:2951 msgid "Pad wall thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2806 +#: src/libslic3r/PrintConfig.cpp:2953 msgid "The thickness of the pad and its optional cavity walls." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2814 +#: src/libslic3r/PrintConfig.cpp:2961 msgid "Pad wall height" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2815 +#: src/libslic3r/PrintConfig.cpp:2962 msgid "" "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful " "when enabling this feature, as some resins may produce an extreme suction " @@ -9442,115 +10727,107 @@ msgid "" "difficult." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2828 +#: src/libslic3r/PrintConfig.cpp:2975 msgid "Pad brim size" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2829 +#: src/libslic3r/PrintConfig.cpp:2976 msgid "How far should the pad extend around the contained geometry" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2839 +#: src/libslic3r/PrintConfig.cpp:2986 msgid "Max merge distance" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2841 +#: src/libslic3r/PrintConfig.cpp:2988 msgid "" "Some objects can get along with a few smaller pads instead of a single big " "one. This parameter defines how far the center of two smaller pads should " "be. If theyare closer, they will get merged into one pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2861 +#: src/libslic3r/PrintConfig.cpp:3008 msgid "Pad wall slope" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2863 +#: src/libslic3r/PrintConfig.cpp:3010 msgid "" "The slope of the pad wall relative to the bed plane. 90 degrees means " "straight walls." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2872 -msgid "Pad around object" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:2874 +#: src/libslic3r/PrintConfig.cpp:3021 msgid "Create pad around object and ignore the support elevation" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2879 +#: src/libslic3r/PrintConfig.cpp:3026 msgid "Pad around object everywhere" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2881 +#: src/libslic3r/PrintConfig.cpp:3028 msgid "Force pad around object everywhere" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2886 +#: src/libslic3r/PrintConfig.cpp:3033 msgid "Pad object gap" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2888 +#: src/libslic3r/PrintConfig.cpp:3035 msgid "" "The gap between the object bottom and the generated pad in zero elevation " "mode." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2897 +#: src/libslic3r/PrintConfig.cpp:3044 msgid "Pad object connector stride" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2899 +#: src/libslic3r/PrintConfig.cpp:3046 msgid "" "Distance between two connector sticks which connect the object and the " "generated pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2906 +#: src/libslic3r/PrintConfig.cpp:3053 msgid "Pad object connector width" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2908 +#: src/libslic3r/PrintConfig.cpp:3055 msgid "" "Width of the connector sticks which connect the object and the generated pad." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2915 +#: src/libslic3r/PrintConfig.cpp:3062 msgid "Pad object connector penetration" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2918 +#: src/libslic3r/PrintConfig.cpp:3065 msgid "How much should the tiny connectors penetrate into the model body." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2925 +#: src/libslic3r/PrintConfig.cpp:3072 msgid "Enable hollowing" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2927 +#: src/libslic3r/PrintConfig.cpp:3074 msgid "Hollow out a model to have an empty interior" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2932 +#: src/libslic3r/PrintConfig.cpp:3079 msgid "Wall thickness" msgstr "" -#: src/libslic3r/PrintConfig.cpp:2934 +#: src/libslic3r/PrintConfig.cpp:3081 msgid "Minimum wall thickness of a hollowed model." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2942 -msgid "Accuracy" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:2944 +#: src/libslic3r/PrintConfig.cpp:3091 msgid "" "Performance vs accuracy of calculation. Lower values may produce unwanted " "artifacts." msgstr "" -#: src/libslic3r/PrintConfig.cpp:2954 +#: src/libslic3r/PrintConfig.cpp:3101 msgid "" "Hollowing is done in two steps: first, an imaginary interior is calculated " "deeper (offset plus the closing distance) in the object and then it's " @@ -9559,292 +10836,287 @@ msgid "" "most." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3342 +#: src/libslic3r/PrintConfig.cpp:3513 msgid "Export OBJ" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3343 +#: src/libslic3r/PrintConfig.cpp:3514 msgid "Export the model(s) as OBJ." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3354 +#: src/libslic3r/PrintConfig.cpp:3525 msgid "Export SLA" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3355 +#: src/libslic3r/PrintConfig.cpp:3526 msgid "Slice the model and export SLA printing layers as PNG." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3360 +#: src/libslic3r/PrintConfig.cpp:3531 msgid "Export 3MF" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3361 +#: src/libslic3r/PrintConfig.cpp:3532 msgid "Export the model(s) as 3MF." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3365 +#: src/libslic3r/PrintConfig.cpp:3536 msgid "Export AMF" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3366 +#: src/libslic3r/PrintConfig.cpp:3537 msgid "Export the model(s) as AMF." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3370 +#: src/libslic3r/PrintConfig.cpp:3541 msgid "Export STL" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3371 +#: src/libslic3r/PrintConfig.cpp:3542 msgid "Export the model(s) as STL." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3376 +#: src/libslic3r/PrintConfig.cpp:3547 msgid "Slice the model and export toolpaths as G-code." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3381 +#: src/libslic3r/PrintConfig.cpp:3552 +msgid "G-code viewer" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:3553 +msgid "Visualize an already sliced and saved G-code" +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:3558 msgid "Slice" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3382 +#: src/libslic3r/PrintConfig.cpp:3559 msgid "" "Slice the model as FFF or SLA based on the printer_technology configuration " "value." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3387 +#: src/libslic3r/PrintConfig.cpp:3564 msgid "Help" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3388 +#: src/libslic3r/PrintConfig.cpp:3565 msgid "Show this help." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3393 +#: src/libslic3r/PrintConfig.cpp:3570 msgid "Help (FFF options)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3394 +#: src/libslic3r/PrintConfig.cpp:3571 msgid "Show the full list of print/G-code configuration options." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3398 +#: src/libslic3r/PrintConfig.cpp:3575 msgid "Help (SLA options)" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3399 +#: src/libslic3r/PrintConfig.cpp:3576 msgid "Show the full list of SLA print configuration options." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3403 +#: src/libslic3r/PrintConfig.cpp:3580 msgid "Output Model Info" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3404 +#: src/libslic3r/PrintConfig.cpp:3581 msgid "Write information about the model to the console." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3408 +#: src/libslic3r/PrintConfig.cpp:3585 msgid "Save config file" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3409 +#: src/libslic3r/PrintConfig.cpp:3586 msgid "Save configuration to the specified file." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3419 +#: src/libslic3r/PrintConfig.cpp:3596 msgid "Align XY" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3420 +#: src/libslic3r/PrintConfig.cpp:3597 msgid "Align the model to the given point." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3425 +#: src/libslic3r/PrintConfig.cpp:3602 msgid "Cut model at the given Z." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3446 +#: src/libslic3r/PrintConfig.cpp:3623 msgid "Center" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3447 +#: src/libslic3r/PrintConfig.cpp:3624 msgid "Center the print around the given center." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3451 +#: src/libslic3r/PrintConfig.cpp:3628 msgid "Don't arrange" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3452 +#: src/libslic3r/PrintConfig.cpp:3629 msgid "" "Do not rearrange the given models before merging and keep their original XY " "coordinates." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3455 +#: src/libslic3r/PrintConfig.cpp:3632 msgid "Duplicate" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3456 +#: src/libslic3r/PrintConfig.cpp:3633 msgid "Multiply copies by this factor." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3460 +#: src/libslic3r/PrintConfig.cpp:3637 msgid "Duplicate by grid" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3461 +#: src/libslic3r/PrintConfig.cpp:3638 msgid "Multiply copies by creating a grid." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3464 -msgid "Merge" -msgstr "" - -#: src/libslic3r/PrintConfig.cpp:3465 +#: src/libslic3r/PrintConfig.cpp:3642 msgid "" "Arrange the supplied models in a plate and merge them in a single model in " "order to perform actions once." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3470 +#: src/libslic3r/PrintConfig.cpp:3647 msgid "" "Try to repair any non-manifold meshes (this option is implicitly added " "whenever we need to slice the model to perform the requested action)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3474 +#: src/libslic3r/PrintConfig.cpp:3651 msgid "Rotation angle around the Z axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3478 +#: src/libslic3r/PrintConfig.cpp:3655 msgid "Rotate around X" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3479 +#: src/libslic3r/PrintConfig.cpp:3656 msgid "Rotation angle around the X axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3483 +#: src/libslic3r/PrintConfig.cpp:3660 msgid "Rotate around Y" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3484 +#: src/libslic3r/PrintConfig.cpp:3661 msgid "Rotation angle around the Y axis in degrees." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3489 +#: src/libslic3r/PrintConfig.cpp:3666 msgid "Scaling factor or percentage." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3494 +#: src/libslic3r/PrintConfig.cpp:3671 msgid "" "Detect unconnected parts in the given model(s) and split them into separate " "objects." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3497 +#: src/libslic3r/PrintConfig.cpp:3674 msgid "Scale to Fit" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3498 +#: src/libslic3r/PrintConfig.cpp:3675 msgid "Scale to fit the given volume." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3507 +#: src/libslic3r/PrintConfig.cpp:3684 msgid "Ignore non-existent config files" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3508 +#: src/libslic3r/PrintConfig.cpp:3685 msgid "Do not fail if a file supplied to --load does not exist." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3511 +#: src/libslic3r/PrintConfig.cpp:3688 msgid "Load config file" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3512 +#: src/libslic3r/PrintConfig.cpp:3689 msgid "" "Load configuration from the specified file. It can be used more than once to " "load options from multiple files." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3515 +#: src/libslic3r/PrintConfig.cpp:3692 msgid "Output File" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3516 +#: src/libslic3r/PrintConfig.cpp:3693 msgid "" "The file where the output will be written (if not specified, it will be " "based on the input file)." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3526 +#: src/libslic3r/PrintConfig.cpp:3698 +msgid "" +"If enabled, the command line arguments are sent to an existing instance of " +"GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides " +"the \"single_instance\" configuration value from application preferences." +msgstr "" + +#: src/libslic3r/PrintConfig.cpp:3709 msgid "Data directory" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3527 +#: src/libslic3r/PrintConfig.cpp:3710 msgid "" "Load and store settings at the given directory. This is useful for " "maintaining different profiles or including configurations from a network " "storage." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3530 +#: src/libslic3r/PrintConfig.cpp:3713 msgid "Logging level" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3531 +#: src/libslic3r/PrintConfig.cpp:3714 msgid "" "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" "trace\n" "For example. loglevel=2 logs fatal, error and warning level messages." msgstr "" -#: src/libslic3r/PrintConfig.cpp:3537 +#: src/libslic3r/PrintConfig.cpp:3720 msgid "Render with a software renderer" msgstr "" -#: src/libslic3r/PrintConfig.cpp:3538 +#: src/libslic3r/PrintConfig.cpp:3721 msgid "" "Render with a software renderer. The bundled MESA software renderer is " "loaded instead of the default OpenGL driver." msgstr "" -#: src/libslic3r/PrintObject.cpp:108 +#: src/libslic3r/Zipper.cpp:27 +msgid "Error with zip archive" +msgstr "" + +#: src/libslic3r/PrintObject.cpp:114 msgid "Processing triangulated mesh" msgstr "" -#: src/libslic3r/PrintObject.cpp:152 +#: src/libslic3r/PrintObject.cpp:158 msgid "Generating perimeters" msgstr "" -#: src/libslic3r/PrintObject.cpp:255 +#: src/libslic3r/PrintObject.cpp:261 msgid "Preparing infill" msgstr "" -#: src/libslic3r/PrintObject.cpp:395 +#: src/libslic3r/PrintObject.cpp:422 msgid "Generating support material" msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:348 -msgid "Height (mm)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:350 -msgid "Width (mm)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:352 -msgid "Speed (mm/s)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:354 -msgid "Fan Speed (%)" -msgstr "" - -#: src/libslic3r/GCode/PreviewData.cpp:356 -msgid "Volumetric flow rate (mm³/s)" -msgstr "" diff --git a/resources/localization/list.txt b/resources/localization/list.txt index 3c2a956385..6950dc7098 100644 --- a/resources/localization/list.txt +++ b/resources/localization/list.txt @@ -1,5 +1,4 @@ src/slic3r/GUI/AboutDialog.cpp -src/slic3r/GUI/AppConfig.cpp src/slic3r/GUI/BackgroundSlicingProcess.cpp src/slic3r/GUI/BedShapeDialog.cpp src/slic3r/GUI/BedShapeDialog.hpp @@ -9,45 +8,60 @@ src/slic3r/GUI/ConfigManipulation.cpp src/slic3r/GUI/ConfigSnapshotDialog.cpp src/slic3r/GUI/ConfigWizard.cpp src/slic3r/GUI/DoubleSlider.cpp +src/slic3r/GUI/ExtraRenderers.cpp src/slic3r/GUI/ExtruderSequenceDialog.cpp src/slic3r/GUI/Field.cpp src/slic3r/GUI/FirmwareDialog.cpp +src/slic3r/GUI/GCodeViewer.cpp src/slic3r/GUI/GLCanvas3D.cpp -src/slic3r/GUI/GLCanvas3DManager.cpp src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp src/slic3r/GUI/Gizmos/GLGizmoMove.cpp src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI_App.cpp +src/slic3r/GUI/GUI_Init.cpp src/slic3r/GUI/GUI_ObjectLayers.cpp src/slic3r/GUI/GUI_ObjectList.cpp src/slic3r/GUI/GUI_ObjectManipulation.cpp src/slic3r/GUI/GUI_ObjectSettings.cpp src/slic3r/GUI/GUI_Preview.cpp -src/slic3r/GUI/Job.hpp +src/slic3r/GUI/ImGuiWrapper.cpp +src/slic3r/GUI/Jobs/ArrangeJob.cpp +src/slic3r/GUI/Jobs/Job.cpp +src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +src/slic3r/GUI/Jobs/SLAImportJob.cpp src/slic3r/GUI/KBShortcutsDialog.cpp src/slic3r/GUI/MainFrame.cpp src/slic3r/GUI/Mouse3DController.cpp src/slic3r/GUI/MsgDialog.cpp +src/slic3r/GUI/NotificationManager.hpp +src/slic3r/GUI/NotificationManager.cpp src/slic3r/GUI/ObjectDataViewModel.cpp +src/slic3r/GUI/OpenGLManager.cpp src/slic3r/GUI/OptionsGroup.cpp +src/slic3r/GUI/PhysicalPrinterDialog.cpp src/slic3r/GUI/Plater.cpp src/slic3r/GUI/Preferences.cpp -src/slic3r/GUI/Preset.cpp -src/slic3r/GUI/PresetBundle.cpp +src/slic3r/GUI/PresetComboBoxes.cpp src/slic3r/GUI/PresetHints.cpp src/slic3r/GUI/PrintHostDialogs.cpp src/slic3r/GUI/ProgressStatusBar.cpp src/slic3r/GUI/RammingChart.cpp +src/slic3r/GUI/SavePresetDialog.cpp +src/slic3r/GUI/Search.cpp src/slic3r/GUI/Selection.cpp src/slic3r/GUI/SysInfoDialog.cpp src/slic3r/GUI/Tab.cpp src/slic3r/GUI/Tab.hpp +src/slic3r/GUI/UnsavedChangesDialog.cpp src/slic3r/GUI/UpdateDialogs.cpp src/slic3r/GUI/WipeTowerDialog.cpp src/slic3r/GUI/wxExtensions.cpp @@ -57,18 +71,22 @@ src/slic3r/Utils/FixModelByWin10.cpp src/slic3r/Utils/FlashAir.cpp src/slic3r/Utils/OctoPrint.cpp src/slic3r/Utils/PresetUpdater.cpp -src/libslic3r/SLA/Pad.cpp -src/libslic3r/SLA/Hollowing.cpp -src/libslic3r/Zipper.cpp +src/slic3r/Utils/Http.cpp +src/slic3r/Utils/Process.cpp src/libslic3r/GCode.cpp src/libslic3r/ExtrusionEntity.cpp src/libslic3r/Flow.cpp src/libslic3r/Format/3mf.cpp src/libslic3r/Format/AMF.cpp +src/libslic3r/GCode/PreviewData.cpp +src/libslic3r/miniz_extension.cpp +src/libslic3r/Preset.cpp src/libslic3r/Print.cpp +src/libslic3r/SLA/Pad.cpp +src/libslic3r/SLA/Hollowing.cpp src/libslic3r/SLAPrint.cpp src/libslic3r/SLAPrintSteps.cpp src/libslic3r/PrintBase.cpp src/libslic3r/PrintConfig.cpp +src/libslic3r/Zipper.cpp src/libslic3r/PrintObject.cpp -src/libslic3r/GCode/PreviewData.cpp diff --git a/resources/profiles/Anycubic.idx b/resources/profiles/Anycubic.idx new file mode 100644 index 0000000000..01a6c8f7e9 --- /dev/null +++ b/resources/profiles/Anycubic.idx @@ -0,0 +1,2 @@ +min_slic3r_version = 2.3.0-alpha0 +0.0.1 Initial Version diff --git a/resources/profiles/Anycubic.ini b/resources/profiles/Anycubic.ini new file mode 100644 index 0000000000..69abb525a8 --- /dev/null +++ b/resources/profiles/Anycubic.ini @@ -0,0 +1,1098 @@ +# Print profiles for the Anycubic printers. + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = Anycubic +# Configuration version of this file. Config file will only be installed, if the config_version differs. +# This means, the server may force the PrusaSlicer configuration to be downgraded. +config_version = 0.0.1 +# Where to get the updates from? +config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/ +# changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% + +# The printer models will be shown by the Configuration Wizard in this order, +# also the first model installed & the first nozzle installed will be activated after install. +# Printer model name will be shown by the installation wizard. + +[printer_model:AKLP] +name = Anycubic Kossel Linear Plus +variants = 0.4 +technology = FFF +family = KOSSEL +bed_model = AKLP_Bed.stl +bed_texture = AK.png +default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL + +[printer_model:AK] +name = Anycubic Kossel Pulley (Linear) +variants = 0.4 +technology = FFF +family = KOSSEL +bed_model = AK_Bed.stl +bed_texture = AK.png +default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL + +[printer_model:MEGA0] +name = Anycubic Mega Zero +variants = 0.4 +technology = FFF +family = MEGA +bed_model = mega0_bed.stl +bed_texture = mega0.svg +default_materials = Generic PLA @MEGA0; Generic PETG @MEGA0; Anycubic PLA @MEGA0; Prusament PLA @MEGA0; Prusament PETG @MEGA0 + +[printer_model:I3MEGA] +name = Anycubic i3 Mega +variants = 0.4 +technology = FFF +family = MEGA + +[printer_model:I3MEGAS] +name = Anycubic i3 Mega S +variants = 0.4 +technology = FFF +family = MEGA + +# All presets starting with asterisk, for example *common*, are intermediate and they will +# not make it into the user interface. + +## Anycubic KOSSEL +## Author: https://github.com/tc0fh +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4220 + +# Common print preset +[print:*common_akossel*] +avoid_crossing_perimeters = 0 +bottom_solid_min_thickness = 0.5 +bridge_angle = 0 +bridge_flow_ratio = 0.8 +bridge_speed = 30 +brim_width = 0 +clip_multipart_objects = 1 +compatible_printers = +complete_objects = 0 +dont_support_bridges = 1 +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 1 +external_fill_pattern = rectilinear +external_perimeters_first = 0 +external_perimeter_extrusion_width = 0.45 +extra_perimeters = 0 +extruder_clearance_height = 25 +extruder_clearance_radius = 45 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = grid +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +first_layer_speed = 20 +gap_fill_speed = 40 +gcode_comments = 0 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +interface_shells = 0 +max_print_speed = 200 +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +max_volumetric_speed = 0 +min_skirt_length = 4 +notes = +overhangs = 0 +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{print_preset}_{filament_type[0]}_{printer_model}_{print_time}.gcode +perimeters = 2 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +perimeter_speed = 45 +post_process = +print_settings_id = +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 0 +skirts = 2 +skirt_distance = 5 +skirt_height = 1 +small_perimeter_speed = 25 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_extruder = 0 +support_material_extrusion_width = 0.38 +support_material_interface_extruder = 0 +support_material_angle = 0 +support_material_buildplate_only = 0 +support_material_enforce_layers = 0 +support_material_contact_distance = 0.15 +support_material_interface_contact_loops = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2 +support_material_speed = 50 +support_material_synchronize_layers = 0 +support_material_threshold = 45 +support_material_with_sheath = 0 +support_material_xy_spacing = 60% +thin_walls = 0 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +top_solid_min_thickness = 0.6 +travel_speed = 180 +wipe_tower = 1 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 170 +wipe_tower_y = 140 +xy_size_compensation = 0 +bridge_acceleration = 1000 +default_acceleration = 1500 +first_layer_acceleration = 1000 +infill_acceleration = 1500 +perimeter_acceleration = 800 + +[print:*0.08mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 10 +bridge_acceleration = 300 +bridge_flow_ratio = 0.7 +bridge_speed = 20 +external_perimeter_speed = 20 +first_layer_acceleration = 500 +gap_fill_speed = 20 +infill_acceleration = 800 +infill_speed = 40 +layer_height = 0.08 +max_print_speed = 80 +perimeter_acceleration = 300 +perimeter_speed = 30 +perimeters = 3 +small_perimeter_speed = 20 +solid_infill_speed = 40 +support_material_extrusion_width = 0.3 +support_material_spacing = 1.5 +support_material_speed = 40 +top_solid_infill_speed = 30 +top_solid_layers = 12 + +[print:*0.16mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 5 +layer_height = 0.16 +top_solid_layers = 6 + +[print:*0.20mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +layer_height = 0.20 +top_solid_layers = 5 + +[print:*0.24mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +layer_height = 0.24 +perimeter_speed = 50 +external_perimeter_speed = 35 +top_solid_layers = 4 +infill_speed = 100 +solid_infill_speed = 100 +top_solid_infill_speed = 40 + +[print:*0.30mm_akossel*] +inherits = *common_akossel* +bottom_solid_layers = 3 +bridge_flow_ratio = 0.95 +external_perimeter_extrusion_width = 0.6 +external_perimeter_speed = 35 +extrusion_width = 0.5 +infill_extrusion_width = 0.5 +infill_speed = 70 +layer_height = 0.30 +perimeter_extrusion_width = 0.5 +perimeter_speed = 50 +small_perimeter_speed = 30 +solid_infill_extrusion_width = 0.5 +solid_infill_speed = 70 +support_material_speed = 45 +top_infill_extrusion_width = 0.45 +top_solid_infill_speed = 50 +top_solid_layers = 3 + +[print:0.08mm ULTRADETAIL @AKOSSEL] +inherits = *0.08mm_akossel* +fill_density = 15% +fill_pattern = gyroid +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.16mm QUALITY @AKOSSEL] +inherits = *0.16mm_akossel* +external_perimeter_speed = 25 +fill_density = 15% +fill_pattern = gyroid +infill_speed = 80 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.16mm SPEED @AKOSSEL] +inherits = *0.16mm_akossel* +external_perimeter_speed = 35 +infill_speed = 120 +perimeter_speed = 60 +solid_infill_speed = 120 +top_solid_infill_speed = 50 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.20mm QUALITY @AKOSSEL] +inherits = *0.20mm_akossel* +external_perimeter_speed = 25 +fill_density = 15% +fill_pattern = gyroid +infill_speed = 80 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.20mm SPEED @AKOSSEL] +inherits = *0.20mm_akossel* +external_perimeter_speed = 35 +infill_speed = 120 +perimeter_speed = 60 +solid_infill_speed = 120 +top_solid_infill_speed = 50 +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.24mm DRAFT @AKOSSEL] +inherits = *0.24mm_akossel* +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +[print:0.30mm FAST @AKOSSEL] +inherits = *0.30mm_akossel* +compatible_printers_condition = printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ and nozzle_diameter[0]==0.4 + +# Common filament preset +[filament:*common_akossel*] +cooling = 0 +compatible_printers = +extrusion_multiplier = 1 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 20 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_Anycubic.*/ and printer_notes=~/.*PRINTER_MODEL_AK(|LP).*/ + +[filament:*PLA_akossel*] +inherits = *common_akossel* +bed_temperature = 60 +fan_below_layer_time = 100 +filament_colour = #FF3232 +filament_max_volumetric_speed = 10 +filament_type = PLA +filament_density = 1.24 +filament_cost = 20 +first_layer_bed_temperature = 60 +first_layer_temperature = 200 +fan_always_on = 1 +cooling = 1 +max_fan_speed = 100 +min_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +temperature = 200 + +[filament:*PET_akossel*] +inherits = *common_akossel* +bed_temperature = 70 +cooling = 1 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +filament_density = 1.27 +filament_cost = 30 +first_layer_bed_temperature =70 +first_layer_temperature = 240 +fan_always_on = 1 +max_fan_speed = 50 +min_fan_speed = 20 +bridge_fan_speed = 100 +temperature = 240 + +[filament:*ABS_akossel*] +inherits = *common_akossel* +bed_temperature = 100 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #3A80CA +filament_max_volumetric_speed = 10 +filament_type = ABS +filament_density = 1.04 +filament_cost = 20 +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + +[filament:Generic PLA @AKOSSEL] +inherits = *PLA_akossel* +filament_vendor = Generic + +[filament:Generic PETG @AKOSSEL] +inherits = *PET_akossel* +filament_vendor = Generic + +[filament:Generic ABS @AKOSSEL] +inherits = *ABS_akossel* +filament_vendor = Generic + +# Common printer preset +[printer:*common_akossel*] +printer_technology = FFF +bed_shape = +before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n +between_objects_gcode = +deretract_speed = 40 +extruder_colour = #FFFF00 +extruder_offset = 0x0 +gcode_flavor = marlin +silent_mode = 0 +remaining_times = 0 +machine_max_acceleration_e = 3000 +machine_max_acceleration_extruding = 1000 +machine_max_acceleration_retracting = 1000 +machine_max_acceleration_x = 1500 +machine_max_acceleration_y = 1500 +machine_max_acceleration_z = 1500 +machine_max_feedrate_e = 60 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 200 +machine_max_jerk_e = 5 +machine_max_jerk_x = 5 +machine_max_jerk_y = 5 +machine_max_jerk_z = 5 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] +max_layer_height = 0.3 +min_layer_height = 0.08 +max_print_height = 300 +nozzle_diameter = 0.4 +octoprint_apikey = +octoprint_host = +printer_notes = +printer_settings_id = +retract_before_travel = 2 +retract_before_wipe = 70% +retract_layer_change = 1 +retract_length = 5 +retract_length_toolchange = 1 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 60 +serial_port = +serial_speed = 250000 +single_extruder_multi_material = 0 +start_gcode = +end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+10, max_print_height)} F600{endif} ; Move print head up\nG1 X0 Y100 F3000 ; present print\nM84 ; disable motors +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 +default_print_profile = 0.20mm QUALITY @AKOSSEL +default_filament_profile = Generic PLA @AKOSSEL + +[printer:Anycubic Kossel Linear Plus] +inherits = *common_akossel* +printer_model = AKLP +printer_variant = 0.4 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_Anycubic\nPRINTER_MODEL_AKLP\nPRINTER_HAS_BOWDEN\n +bed_shape = 114.562x10.0229,113.253x19.9695,111.081x29.7642,108.065x39.3323,104.225x48.6011,99.5929x57.5,94.2025x65.9613,88.0951x73.9206,81.3173x81.3173,73.9206x88.0951,65.9613x94.2025,57.5x99.5929,48.6011x104.225,39.3323x108.065,29.7642x111.081,19.9695x113.253,10.0229x114.562,7.04172e-15x115,-10.0229x114.562,-19.9695x113.253,-29.7642x111.081,-39.3323x108.065,-48.6011x104.225,-57.5x99.5929,-65.9613x94.2025,-73.9206x88.0951,-81.3173x81.3173,-88.0951x73.9206,-94.2025x65.9613,-99.5929x57.5,-104.225x48.6011,-108.065x39.3323,-111.081x29.7642,-113.253x19.9695,-114.562x10.0229,-115x1.40834e-14,-114.562x-10.0229,-113.253x-19.9695,-111.081x-29.7642,-108.065x-39.3323,-104.225x-48.6011,-99.5929x-57.5,-94.2025x-65.9613,-88.0951x-73.9206,-81.3173x-81.3173,-73.9206x-88.0951,-65.9613x-94.2025,-57.5x-99.5929,-48.6011x-104.225,-39.3323x-108.065,-29.7642x-111.081,-19.9695x-113.253,-10.0229x-114.562,-2.11252e-14x-115,10.0229x-114.562,19.9695x-113.253,29.7642x-111.081,39.3323x-108.065,48.6011x-104.225,57.5x-99.5929,65.9613x-94.2025,73.9206x-88.0951,81.3173x-81.3173,88.0951x-73.9206,94.2025x-65.9613,99.5929x-57.5,104.225x-48.6011,108.065x-39.3323,111.081x-29.7642,113.253x-19.9695,114.562x-10.0229,115x-2.81669e-14 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home\nG1 X-54.672 Y95.203 Z0.3 F9000\nG92 E0.0\nG1 F1000\nG1 X-52.931 Y96.185 E0.300\nG1 X-50.985 Y97.231 E0.331\nG1 X-49.018 Y98.238 E0.331\nG1 X-47.032 Y99.205 E0.331\nG1 X-45.026 Y100.132 E0.331\nG1 X-43.003 Y101.019 E0.331\nG1 X-40.961 Y101.864 E0.331\nG1 X-38.904 Y102.668 E0.331\nG1 X-36.83 Y103.431 E0.331\nG1 X-34.742 Y104.152 E0.331\nG1 X-32.639 Y104.83 E0.331\nG1 X-30.523 Y105.466 E0.331\nG1 X-28.395 Y106.06 E0.331\nG1 X-26.255 Y106.61 E0.331\nG1 X-24.105 Y107.117 E0.331\nG1 X-21.945 Y107.581 E0.331\nG1 X-19.776 Y108.001 E0.331\nG1 X-17.599 Y108.377 E0.331\nG1 X-15.415 Y108.71 E0.331\nG1 X-13.224 Y108.998 E0.331\nG1 X-11.028 Y109.242 E0.331\nG1 X-8.828 Y109.442 E0.331\nG1 X-6.624 Y109.598 E0.331\nG1 X-4.418 Y109.709 E0.331\nG1 X-2.209 Y109.776 E0.332\nG1 X0 Y109.798 E0.331\nG1 X2.209 Y109.776 E0.690\nG1 X4.418 Y109.709 E0.691\nG1 X6.624 Y109.598 E0.690\nG1 X8.828 Y109.442 E0.690\nG1 X11.028 Y109.242 E0.690\nG1 X13.224 Y108.998 E0.690\nG1 X15.415 Y108.71 E0.691\nG1 X17.599 Y108.377 E0.690\nG1 X19.776 Y108.001 E0.690\nG1 X21.945 Y107.581 E0.690\nG1 X24.105 Y107.117 E0.690\nG1 X26.255 Y106.61 E0.690\nG1 X28.395 Y106.06 E0.690\nG1 X30.523 Y105.466 E0.690\nG1 X32.639 Y104.83 E0.690\nG1 X34.742 Y104.152 E0.690\nG1 X36.83 Y103.431 E0.690\nG1 X38.904 Y102.668 E0.691\nG1 X40.961 Y101.864 E0.690\nG1 X43.003 Y101.019 E0.691\nG1 X45.026 Y100.132 E0.690\nG1 X47.032 Y99.205 E0.691\nG1 X49.018 Y98.238 E0.690\nG1 X50.985 Y97.231 E0.691\nG1 X52.931 Y96.185 E0.690\nG1 X54.672 Y95.203 E0.625\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y96.185 F1000 ; wipe\nG1 X50.985 Y97.231 F1000 ; wipe\nG1 X49.018 Y98.238 F1000 ; wipe\nG1 X0 Y109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\nM221 S{if layer_height<0.075}100{else}95{endif} + +[printer:Anycubic Kossel Pulley (Linear)] +inherits = *common_akossel* +printer_model = AK +printer_variant = 0.4 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_Anycubic\nPRINTER_MODEL_AK\nPRINTER_HAS_BOWDEN\n +bed_shape = 89.6575x7.84402,88.6327x15.6283,86.9333x23.2937,84.5723x30.7818,81.5677x38.0356,77.9423x45,73.7237x51.6219,68.944x57.8509,63.6396x63.6396,57.8509x68.944,51.6219x73.7237,45x77.9423,38.0356x81.5677,30.7818x84.5723,23.2937x86.9333,15.6283x88.6327,7.84402x89.6575,5.51091e-15x90,-7.84402x89.6575,-15.6283x88.6327,-23.2937x86.9333,-30.7818x84.5723,-38.0356x81.5677,-45x77.9423,-51.6219x73.7237,-57.8509x68.944,-63.6396x63.6396,-68.944x57.8509,-73.7237x51.6219,-77.9423x45,-81.5677x38.0356,-84.5723x30.7818,-86.9333x23.2937,-88.6327x15.6283,-89.6575x7.84402,-90x1.10218e-14,-89.6575x-7.84402,-88.6327x-15.6283,-86.9333x-23.2937,-84.5723x-30.7818,-81.5677x-38.0356,-77.9423x-45,-73.7237x-51.6219,-68.944x-57.8509,-63.6396x-63.6396,-57.8509x-68.944,-51.6219x-73.7237,-45x-77.9423,-38.0356x-81.5677,-30.7818x-84.5723,-23.2937x-86.9333,-15.6283x-88.6327,-7.84402x-89.6575,-1.65327e-14x-90,7.84402x-89.6575,15.6283x-88.6327,23.2937x-86.9333,30.7818x-84.5723,38.0356x-81.5677,45x-77.9423,51.6219x-73.7237,57.8509x-68.944,63.6396x-63.6396,68.944x-57.8509,73.7237x-51.6219,77.9423x-45,81.5677x-38.0356,84.5723x-30.7818,86.9333x-23.2937,88.6327x-15.6283,89.6575x-7.84402,90x-2.20436e-14 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home\nG1 X-39.672 Y69.712 Z0.3 F9000\nG92 E0.0\nG1 F1000\nG1 X-38.457 Y70.397 E0.209\nG1 X-37.043 Y71.157 E0.241\nG1 X-35.614 Y71.889 E0.241\nG1 X-34.171 Y72.591 E0.241\nG1 X-32.714 Y73.265 E0.241\nG1 X-31.244 Y73.909 E0.241\nG1 X-29.761 Y74.523 E0.241\nG1 X-28.266 Y75.108 E0.241\nG1 X-26.759 Y75.662 E0.241\nG1 X-25.242 Y76.185 E0.241\nG1 X-23.714 Y76.678 E0.241\nG1 X-22.177 Y77.14 E0.241\nG1 X-20.63 Y77.571 E0.241\nG1 X-19.076 Y77.971 E0.241\nG1 X-17.514 Y78.34 E0.241\nG1 X-15.944 Y78.677 E0.241\nG1 X-14.368 Y78.982 E0.241\nG1 X-12.786 Y79.255 E0.241\nG1 X-11.199 Y79.497 E0.241\nG1 X-9.608 Y79.706 E0.241\nG1 X-8.013 Y79.884 E0.241\nG1 X-6.414 Y80.029 E0.241\nG1 X-4.813 Y80.142 E0.241\nG1 X-3.21 Y80.223 E0.241\nG1 X-1.605 Y80.271 E0.241\nG1 X0 Y80.287 E0.241\nG1 X1.605 Y80.271 E0.502\nG1 X3.21 Y80.223 E0.502\nG1 X4.813 Y80.142 E0.502\nG1 X6.414 Y80.029 E0.502\nG1 X8.013 Y79.884 E0.502\nG1 X9.608 Y79.706 E0.502\nG1 X11.199 Y79.497 E0.501\nG1 X12.786 Y79.255 E0.502\nG1 X14.368 Y78.982 E0.502\nG1 X15.944 Y78.677 E0.502\nG1 X17.514 Y78.34 E0.502\nG1 X19.076 Y77.971 E0.502\nG1 X20.63 Y77.571 E0.501\nG1 X22.177 Y77.14 E0.502\nG1 X23.714 Y76.678 E0.502\nG1 X25.242 Y76.185 E0.502\nG1 X26.759 Y75.662 E0.501\nG1 X28.266 Y75.108 E0.502\nG1 X29.761 Y74.523 E0.502\nG1 X31.244 Y73.909 E0.502\nG1 X32.714 Y73.265 E0.502\nG1 X34.171 Y72.591 E0.502\nG1 X35.614 Y71.889 E0.501\nG1 X37.043 Y71.157 E0.502\nG1 X38.457 Y70.397 E0.502\nG1 X39.672 Y69.712 E0.436\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif} + +## Anycubic MEGA ZERO +## Author: https://github.com/kad +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4057 + +# Common print preset +[print:*common_mega0*] +avoid_crossing_perimeters = 1 +bridge_angle = 0 +bridge_flow_ratio = 0.7 +bridge_speed = 25 +brim_width = 0 +clip_multipart_objects = 1 +compatible_printers = +complete_objects = 0 +dont_support_bridges = 1 +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 1 +external_fill_pattern = rectilinear +external_perimeters_first = 0 +external_perimeter_extrusion_width = 0.45 +extra_perimeters = 0 +extruder_clearance_height = 25 +extruder_clearance_radius = 45 +extrusion_width = 0.45 +fill_angle = 45 +fill_density = 20% +fill_pattern = grid +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +first_layer_speed = 20 +gap_fill_speed = 30 +gcode_comments = 0 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.45 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +interface_shells = 0 +max_print_speed = 100 +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +max_volumetric_speed = 0 +min_skirt_length = 4 +notes = +overhangs = 1 +only_retract_when_crossing_perimeters = 0 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode +perimeters = 2 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.45 +post_process = +print_settings_id = +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 1 +skirts = 2 +skirt_distance = 2 +skirt_height = 2 +small_perimeter_speed = 25 +solid_infill_below_area = 0 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.45 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_extruder = 0 +support_material_extrusion_width = 0.4 +support_material_interface_extruder = 0 +support_material_angle = 0 +support_material_buildplate_only = 0 +support_material_enforce_layers = 0 +support_material_contact_distance = 0.15 +support_material_interface_contact_loops = 0 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2 +support_material_speed = 40 +support_material_synchronize_layers = 0 +support_material_threshold = 45 +support_material_with_sheath = 0 +support_material_xy_spacing = 60% +thin_walls = 0 +top_infill_extrusion_width = 0.45 +top_solid_infill_speed = 40 +travel_speed = 100 +wipe_tower = 0 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 170 +wipe_tower_y = 140 +xy_size_compensation = 0 + +[print:*0.10mm_mega0*] +inherits = *common_mega0* +perimeter_speed = 40 +external_perimeter_speed = 25 +infill_speed = 50 +solid_infill_speed = 40 +layer_height = 0.10 +perimeters = 3 +top_infill_extrusion_width = 0.4 +bottom_solid_layers = 6 +top_solid_layers = 7 + +[print:*0.20mm_mega0*] +inherits = *common_mega0* +perimeter_speed = 40 +external_perimeter_speed = 25 +infill_speed = 50 +solid_infill_speed = 40 +layer_height = 0.20 +top_infill_extrusion_width = 0.4 +bottom_solid_layers = 4 +top_solid_layers = 5 + +[print:*0.30mm_mega0*] +inherits = *common_mega0* +perimeter_speed = 40 +external_perimeter_speed = 25 +infill_speed = 50 +solid_infill_speed = 40 +layer_height = 0.24 +top_infill_extrusion_width = 0.45 +bottom_solid_layers = 3 +top_solid_layers = 4 + +[print:0.10mm DETAIL @MEGA0] +inherits = *0.10mm_mega0* +travel_speed = 120 +infill_speed = 50 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 + +[print:0.20mm NORMAL @MEGA0] +inherits = *0.20mm_mega0* +travel_speed = 120 +infill_speed = 50 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 + +[print:0.30mm DRAFT @MEGA0] +inherits = *0.30mm_mega0* +travel_speed = 120 +infill_speed = 50 +solid_infill_speed = 40 +top_solid_infill_speed = 30 +support_material_extrusion_width = 0.38 +compatible_printers_condition = printer_model=="MEGA0" and nozzle_diameter[0]==0.4 + +# Common filament preset +[filament:*common_mega0*] +cooling = 0 +compatible_printers = +extrusion_multiplier = 1 +filament_cost = 0 +filament_density = 0 +filament_diameter = 1.75 +filament_notes = "" +filament_settings_id = "" +filament_soluble = 0 +min_print_speed = 15 +slowdown_below_layer_time = 20 +compatible_printers_condition = printer_model=="MEGA0" + +[filament:*PLA_mega0*] +inherits = *common_mega0* +bed_temperature = 40 +fan_below_layer_time = 100 +filament_colour = #FF3232 +filament_max_volumetric_speed = 15 +filament_type = PLA +filament_density = 1.24 +filament_cost = 20 +first_layer_bed_temperature = 40 +first_layer_temperature = 215 +fan_always_on = 1 +cooling = 1 +max_fan_speed = 100 +min_fan_speed = 100 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +temperature = 210 + +[filament:*PET_mega0*] +inherits = *common_mega0* +bed_temperature = 70 +cooling = 1 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #FF8000 +filament_max_volumetric_speed = 8 +filament_type = PETG +filament_density = 1.27 +filament_cost = 30 +first_layer_bed_temperature =70 +first_layer_temperature = 240 +fan_always_on = 1 +max_fan_speed = 50 +min_fan_speed = 20 +bridge_fan_speed = 100 +temperature = 240 + +[filament:*ABS_mega0*] +inherits = *common_mega0* +bed_temperature = 100 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #3A80CA +filament_max_volumetric_speed = 11 +filament_type = ABS +filament_density = 1.04 +filament_cost = 20 +first_layer_bed_temperature = 100 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + +[filament:Generic PLA @MEGA0] +inherits = *PLA_mega0* +filament_vendor = Generic + +[filament:Generic PETG @MEGA0] +inherits = *PET_mega0* +filament_vendor = Generic + +[filament:Generic ABS @MEGA0] +inherits = *ABS_mega0* +filament_vendor = Generic + +[filament:Anycubic PLA @MEGA0] +inherits = *PLA_mega0* +filament_vendor = Anycubic +temperature = 190 +first_layer_temperature = 195 +filament_cost = 24.99 +filament_density = 1.25 + +[filament:Prusament PLA @MEGA0] +inherits = *PLA_mega0* +filament_vendor = Prusa Polymers +temperature = 215 +bed_temperature = 40 +first_layer_temperature = 215 +filament_cost = 24.99 +filament_density = 1.24 + +[filament:Prusament PETG @MEGA0] +inherits = *PET_mega0* +filament_vendor = Prusa Polymers +temperature = 245 +bed_temperature = 70 +first_layer_temperature = 245 +filament_cost = 24.99 +filament_density = 1.27 + +# Common printer preset +[printer:*common_mega0*] +printer_technology = FFF +bed_shape = 0x0,220x0,220x220,0x220 +before_layer_gcode = ; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm +between_objects_gcode = +deretract_speed = 0 +extruder_colour = #FFFF00 +extruder_offset = 0x0 +gcode_flavor = marlin +silent_mode = 0 +remaining_times = 0 +machine_max_acceleration_e = 10000 +machine_max_acceleration_extruding = 2000 +machine_max_acceleration_retracting = 1500 +machine_max_acceleration_x = 3000 +machine_max_acceleration_y = 3000 +machine_max_acceleration_z = 500 +machine_max_feedrate_e = 120 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 12 +machine_max_jerk_e = 2.5 +machine_max_jerk_x = 20 +machine_max_jerk_y = 20 +machine_max_jerk_z = 0.4 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +layer_gcode = ; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm +max_layer_height = 0.3 +min_layer_height = 0.1 +max_print_height = 200 +nozzle_diameter = 0.4 +octoprint_apikey = +octoprint_host = +printer_notes = +printer_settings_id = +retract_before_travel = 1 +retract_before_wipe = 0% +retract_layer_change = 1 +retract_length = 6 +retract_length_toolchange = 1 +retract_lift = 0 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 30 +serial_port = +serial_speed = 115200 +single_extruder_multi_material = 0 +start_gcode = G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F240 ;move the platform down 15mm\nM117 Heating ...\nM104 S[first_layer_temperature]\n ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature]\n ; wait for extruder temp\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z[first_layer_height] F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z[first_layer_height] F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z[first_layer_height] F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3[first_layer_height] F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F240 ; Move over to prevent blob squish\nG92 E0 ; Reset Extruder\nM117 Printing...\n +end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; Fan off\nM84 ; disable motors\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F240 ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 1 +wipe = 1 +z_offset = 0 +printer_model = +default_print_profile = +default_filament_profile = + +[printer:Anycubic Mega Zero] +inherits = *common_mega0* +printer_model = MEGA0 +printer_variant = 0.4 +max_layer_height = 0.3 +min_layer_height = 0.1 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_MEGA0 +bed_shape = 0x0,220x0,220x220,0x220 +max_print_height = 250 +machine_max_acceleration_e = 5000 +machine_max_acceleration_extruding = 500 +machine_max_acceleration_retracting = 500 +machine_max_acceleration_x = 500 +machine_max_acceleration_y = 500 +machine_max_acceleration_z = 100 +machine_max_feedrate_e = 25 +machine_max_feedrate_x = 500 +machine_max_feedrate_y = 500 +machine_max_feedrate_z = 5 +machine_max_jerk_e = 5 +machine_max_jerk_x = 10 +machine_max_jerk_y = 10 +machine_max_jerk_z = 0.4 +machine_min_extruding_rate = 0 +machine_min_travel_rate = 0 +nozzle_diameter = 0.4 +retract_before_travel = 2 +retract_layer_change = 0 +retract_length = 7 +retract_speed = 30 +retract_lift = 0.2 +deretract_speed = 30 +retract_before_wipe = 70% +default_print_profile = 0.20mm NORMAL @MEGA0 +default_filament_profile = Anycubic PLA @MEGA0 +start_gcode = G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F240 ;move the platform down 15mm\nM117 Heating ...\nM104 S[first_layer_temperature]\n ; set extruder temp\nM109 S[first_layer_temperature]\n ; wait for extruder temp\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z[first_layer_height] F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z[first_layer_height] F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z[first_layer_height] F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3[first_layer_height] F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F240 ; Move over to prevent blob squish\nG92 E0 ; Reset Extruder\nM117 Printing...\n +end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM107 ; Fan off\nM84 ; disable motors\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F240 ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n + +## Anycubic i3 Mega and i3 Mega S +## Author: https://github.com/Igami +## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4619 + +[print:*common_mega*] +bottom_solid_min_thickness = 0.5 +bridge_acceleration = 1800 +bridge_flow_ratio = 0.8 +bridge_speed = 30 +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ and nozzle_diameter[0]==0.4 +default_acceleration = 1800 +ensure_vertical_shell_thickness = 1 +external_perimeter_extrusion_width = 0.6 +external_perimeter_speed = 40 +extruder_clearance_height = 35 +extruder_clearance_radius = 60 +extrusion_width = 0.45 +fill_density = 15% +fill_pattern = gyroid +first_layer_acceleration = 1800 +first_layer_extrusion_width = 0.42 +first_layer_height = 0.2 +gap_fill_speed = 40 +gcode_comments = 1 +infill_acceleration = 1800 +infill_extrusion_width = 0.45 +infill_speed = 60 +only_retract_when_crossing_perimeters = 0 +output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode +perimeter_acceleration = 1800 +perimeter_extrusion_width = 0.45 +perimeters = 2 +seam_position = nearest +skirts = 0 +slice_closing_radius = 0.05 +small_perimeter_speed = 30 +solid_infill_below_area = 0 +solid_infill_speed = 60 +support_material_buildplate_only = 1 +support_material_contact_distance = 0.1 +support_material_extrusion_width = 0.35 +support_material_interface_layers = 2 +support_material_interface_spacing = 0.2 +support_material_spacing = 2 +support_material_threshold = 55 +support_material_with_sheath = 0 +thin_walls = 0 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 40 +top_solid_min_thickness = 0.6 +travel_speed = 180 + +[print:*supported_mega*] +raft_layers = 2 +support_material = 1 + +# XXXXXXXXXXXXXXXXXXXX +# XXX--- 0.15mm ---XXX +# XXXXXXXXXXXXXXXXXXXX + +[print:*0.15mm_mega*] +inherits = *common_mega* +bottom_solid_layers = 5 +layer_height = 0.15 +top_solid_layers = 7 + +[print:0.15mm QUALITY @MEGA] +inherits = *0.15mm_mega* + +[print:0.15mm QUALITY SUPPORTED @MEGA] +inherits = *0.15mm_mega*;*supported_mega* + +# XXXXXXXXXXXXXXXXXXXX +# XXX--- 0.20mm ---XXX +# XXXXXXXXXXXXXXXXXXXX + +[print:*0.20mm_mega*] +inherits = *common_mega* +bottom_solid_layers = 4 +layer_height = 0.2 +top_solid_layers = 5 + +[print:0.20mm QUALITY @MEGA] +inherits = *0.20mm_mega* + +[print:0.20mm QUALITY SUPPORTED @MEGA] +inherits = *0.20mm_mega*;*supported_mega* + +# XXXXXXXXXXXXXXXXXXXX +# XXX--- 0.30mm ---XXX +# XXXXXXXXXXXXXXXXXXXX + +[print:*0.30mm_mega*] +inherits = *common_mega* +bottom_solid_layers = 4 +bridge_flow_ratio = 0.95 +top_solid_layers = 4 + +[print:0.30mm DRAFT @MEGA] +inherits = *0.30mm_mega* + +[print:0.30mm DRAFT SUPPORTED @MEGA] +inherits = *0.30mm_mega*;*supported_mega* + +# XXXXXXXXXXXXXXXXXXXXXX +# XXX--- filament ---XXX +# XXXXXXXXXXXXXXXXXXXXXX + +[filament:*common_mega*] +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ +end_filament_gcode = "; Filament-specific end gcode" +fan_always_on = 1 +fan_below_layer_time = 100 +filament_colour = #FF8000 +filament_vendor = Generic +min_print_speed = 15 +slowdown_below_layer_time = 20 + +[filament:*ABS_mega*] + inherits = *common_mega* + bed_temperature = 110 + bridge_fan_speed = 25 + cooling = 0 + fan_always_on = 0 + fan_below_layer_time = 20 + filament_colour = #FFF2EC + filament_cost = 27.82 + filament_density = 1.04 + filament_max_volumetric_speed = 11 + filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + filament_type = ABS + first_layer_bed_temperature = 100 + first_layer_temperature = 255 + max_fan_speed = 30 + min_fan_speed = 20 + temperature = 255 + +[filament:Generic ABS @MEGA] +inherits = *ABS_mega* + +[filament:*FLEX_mega*] +inherits = *common_mega* +bed_temperature = 50 +bridge_fan_speed = 80 +cooling = 0 +extrusion_multiplier = 1.15 +fan_always_on = 0 +filament_colour = #008000 +filament_cost = 82.00 +filament_density = 1.22 +filament_deretract_speed = 25 +filament_max_volumetric_speed = 1.2 +filament_retract_length = 0.8 +filament_type = FLEX +first_layer_bed_temperature = 50 +first_layer_temperature = 240 +max_fan_speed = 90 +min_fan_speed = 70 +temperature = 240 + +[filament:Generic FLEX @MEGA] +inherits = *FLEX_mega* + +[filament:*PETG_mega*] +inherits = *common_mega* +bed_temperature = 90 +bridge_fan_speed = 50 +fan_below_layer_time = 20 +filament_cost = 27.82 +filament_density = 1.27 +filament_max_volumetric_speed = 8 +filament_type = PETG +first_layer_bed_temperature = 85 +first_layer_temperature = 230 +max_fan_speed = 50 +min_fan_speed = 30 +temperature = 240 + +[filament:Generic PETG @MEGA] +inherits = *PETG_mega* + +[filament:*PLA_mega*] +inherits = *common_mega* +bed_temperature = 60 +disable_fan_first_layers = 1 +filament_cost = 25.40 +filament_density = 1.24 +filament_max_volumetric_speed = 10 +first_layer_bed_temperature = 60 +first_layer_temperature = 215 +min_fan_speed = 100 +temperature = 210 + +[filament:Generic PLA @MEGA] +inherits = *PLA_mega* + +[filament:*3Dmensionals PLA_mega*] +inherits = *PLA_mega* +filament_vendor = 3Dmensionals +filament_cost = 23.35 + +[filament:3Dmensionals PLA @MEGA] +inherits = *3Dmensionals PLA_mega* + +[filament:3Dmensionals PLA blue @MEGA] +inherits = *3Dmensionals PLA_mega* +filament_colour = #4155FB + +[filament:3Dmensionals PLA silver @MEGA] +inherits = *3Dmensionals PLA_mega* +filament_colour = #B9B5B4 + +[filament:3Dmensionals PLA white @MEGA] +inherits = *3Dmensionals PLA_mega* +filament_colour = #FEFEFD + +[filament:*Verbatim PLA_mega*] +inherits = *PLA_mega* +filament_vendor = Verbatim +filament_cost = 23.88 + +[filament:Verbatim PLA @MEGA] +inherits = *Verbatim PLA_mega* + +[filament:Verbatim PLA black @MEGA] +inherits = *Verbatim PLA_mega* +filament_colour = #333333 + +[printer:*common_mega*] +printer_technology = FFF +bed_shape = 0x0,210x0,210x210,0x210 +before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z] +default_filament_profile = Generic PLA @MEGA +default_print_profile = 0.15mm QUALITY @MEGA +deretract_speed = 50 +end_gcode = G4 ; wait\nG92 E0\nG1{if layer_z < max_print_height} Z{z_offset+min(layer_z+30, max_print_height)}{endif} E-35 F1000 ; move print head up & retract filament\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors +extruder_colour = #808080 +gcode_flavor = marlin +layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z] +max_layer_height = 0.36 +max_print_height = 205 +retract_before_wipe = 60% +retract_layer_change = 1 +retract_length = 6 +retract_lift = 0.075 +retract_lift_below = 204 +silent_mode = 0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y0 Z1 F100 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0\nG1 E38 F1000; deretract filament\nG92 E0\nG1 X60 Z0 E9 ; intro line\nG1 X100 E12.5 ; intro line\nG92 E0 +use_relative_e_distances = 1 +wipe = 1 +machine_max_acceleration_e = 5000 +machine_max_acceleration_extruding = 1250 +machine_max_acceleration_retracting = 1250 +machine_max_acceleration_x = 1000 +machine_max_acceleration_y = 1000 +machine_max_acceleration_z = 200 +machine_max_feedrate_e = 60 +machine_max_feedrate_x = 200 +machine_max_feedrate_y = 200 +machine_max_feedrate_z = 6 +machine_max_jerk_e = 5 +machine_max_jerk_x = 8 +machine_max_jerk_y = 8 +machine_max_jerk_z = 0.4 + +[printer:Anycubic i3 Mega] +inherits = *common_mega* +printer_model = I3MEGA +printer_variant = 0.4 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA\nPRINTER_HAS_BOWDEN + +[printer:Anycubic i3 Mega S] +inherits = *common_mega* +printer_model = I3MEGAS +printer_variant = 0.4 +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA_S\nPRINTER_HAS_BOWDEN +machine_max_feedrate_z = 8 + + diff --git a/resources/profiles/Anycubic/AK.png b/resources/profiles/Anycubic/AK.png new file mode 100644 index 0000000000..a3837ba7ab Binary files /dev/null and b/resources/profiles/Anycubic/AK.png differ diff --git a/resources/profiles/Anycubic/AKLP_Bed.stl b/resources/profiles/Anycubic/AKLP_Bed.stl new file mode 100644 index 0000000000..07abce367f --- /dev/null +++ b/resources/profiles/Anycubic/AKLP_Bed.stl @@ -0,0 +1,145756 @@ +solid Anycubic lineal plus cerramiento +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.04752841003284 -70.98664256999803 -43.00000000000016 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.49940999781728 -68.99369780608006 -43.254518677937675 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + vertex -180.49940999781728 -68.99369780608006 -43.254518677937675 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.6472706712258 -67.75362986810595 -43.10000000000016 + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.16521986365692 -69.18664256999809 -43.41435935394508 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -180.49940999781728 -68.99369780608006 -43.254518677937675 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.87824428957117 -69.35232799494727 -43.6686291501017 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -180.16521986365692 -69.18664256999809 -43.41435935394508 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.65804018668445 -69.4794628930256 -44.0000000000002 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -179.87824428957117 -69.35232799494727 -43.6686291501017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.51961410070393 -69.55938323102929 -44.38588952783616 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -179.65804018668445 -69.4794628930256 -44.0000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -178.95278429835867 -69.88664256999802 -44.40000000000017 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -179.51961410070393 -69.55938323102929 -44.38588952783616 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.4723995406293 -69.58664256999803 -44.800000000000196 + vertex -178.95278429835867 -69.88664256999802 -44.40000000000017 + vertex -179.51961410070393 -69.55938323102929 -44.38588952783616 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -178.95278429835867 -69.88664256999802 -44.40000000000017 + vertex -179.4723995406293 -69.58664256999803 -44.800000000000196 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.51961410070393 -69.55938323102926 -45.21411047216423 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -179.4723995406293 -69.58664256999803 -44.800000000000196 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.65804018668445 -69.47946289302554 -45.60000000000019 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -179.51961410070393 -69.55938323102926 -45.21411047216423 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.87824428957114 -69.35232799494723 -45.931370849898656 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -179.65804018668445 -69.47946289302554 -45.60000000000019 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.16521986365683 -69.18664256999797 -46.1856406460553 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -179.87824428957114 -69.35232799494723 -45.931370849898656 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.49940999781717 -68.99369780608001 -46.3454813220627 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -180.16521986365683 -69.18664256999797 -46.1856406460553 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -180.49940999781717 -68.99369780608001 -46.3454813220627 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.30881340310572 -77.18664256999767 -42.60000000000018 + vertex -170.81214550278483 -74.58664256999784 -42.60000000000017 + vertex -166.08466953506365 -77.31605209254894 -42.63407417371111 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + vertex -166.08466953506365 -77.31605209254894 -42.63407417371111 + vertex -170.81214550278483 -74.58664256999784 -42.60000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.87580070121342 -77.43664256999769 -42.73397459621574 + vertex -166.08466953506365 -77.31605209254894 -42.63407417371111 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.69644096740984 -77.54019596059094 -42.892893218813626 + vertex -165.87580070121342 -77.43664256999769 -42.73397459621574 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.55881340310563 -77.61965527188991 -43.10000000000017 + vertex -165.69644096740984 -77.54019596059094 -42.892893218813626 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + vertex -165.55881340310563 -77.61965527188991 -43.10000000000017 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + vertex -165.55881340310563 -77.61965527188991 -43.10000000000017 + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.70667407651422 -76.37958733391568 -43.25451867793767 + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + vertex -167.70667407651422 -76.37958733391568 -43.25451867793767 + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.04086421067456 -76.18664256999774 -43.41435935394507 + vertex -167.70667407651422 -76.37958733391568 -43.25451867793767 + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.32783978476027 -76.02095714504847 -43.668629150101715 + vertex -168.04086421067456 -76.18664256999774 -43.41435935394507 + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.54804388764703 -75.89382224697016 -44.000000000000185 + vertex -168.32783978476027 -76.02095714504847 -43.668629150101715 + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + vertex -168.54804388764703 -75.89382224697016 -44.000000000000185 + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -169.25329977597278 -75.48664256999771 -44.40000000000018 + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.7336845337021 -75.7866425699977 -44.8000000000002 + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + vertex -169.25329977597278 -75.48664256999771 -44.40000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + vertex -168.7336845337021 -75.7866425699977 -44.8000000000002 + vertex -169.25329977597278 -75.48664256999771 -44.40000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.68646997362748 -75.81390190896644 -45.214110472164236 + vertex -168.7336845337021 -75.7866425699977 -44.8000000000002 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.54804388764697 -75.89382224697013 -45.60000000000021 + vertex -168.68646997362748 -75.81390190896644 -45.214110472164236 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.32783978476022 -76.02095714504841 -45.93137084989868 + vertex -168.54804388764697 -75.89382224697013 -45.60000000000021 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.0408642106745 -76.18664256999763 -46.18564064605529 + vertex -168.32783978476022 -76.02095714504841 -45.93137084989868 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.70667407651416 -76.37958733391561 -46.345481322062696 + vertex -168.0408642106745 -76.18664256999763 -46.18564064605529 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + vertex -167.70667407651416 -76.37958733391561 -46.345481322062696 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.44278799932096 -77.68664256999723 -56.400000000000205 + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.15855566429826 -74.38664256999729 -60.80000000000016 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -171.15855566429826 -74.38664256999729 -60.80000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.81214550278446 -74.5866425699972 -62.6000000000002 + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.87580070121308 -77.43664256999705 -62.46602540378463 + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + vertex -170.81214550278446 -74.5866425699972 -62.6000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.0846695350633 -77.31605209254832 -62.56592582628924 + vertex -165.87580070121308 -77.43664256999705 -62.46602540378463 + vertex -170.81214550278446 -74.5866425699972 -62.6000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.30881340310532 -77.18664256999705 -62.60000000000018 + vertex -166.0846695350633 -77.31605209254832 -62.56592582628924 + vertex -170.81214550278446 -74.5866425699972 -62.6000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -176.81743808261146 -71.11948528247241 -48.900000000000155 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -176.81743808261146 -71.11948528247241 -48.900000000000155 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + vertex -176.81743808261146 -71.11948528247241 -48.900000000000155 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -174.1030420371656 -72.6866425699977 -49.90000000000019 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -173.49785359345213 -73.03604828088608 -49.9920002690197 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -174.1030420371656 -72.6866425699977 -49.90000000000019 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -172.93390774205662 -73.36164256999763 -50.2617314097822 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -173.49785359345213 -73.03604828088608 -49.9920002690197 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -172.4496364607869 -73.64123672459945 -50.69081169079649 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -172.93390774205662 -73.36164256999763 -50.2617314097822 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -172.07804203716555 -73.8557768651066 -51.25000000000016 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -172.4496364607869 -73.64123672459945 -50.69081169079649 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -172.07804203716555 -73.8557768651066 -51.25000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.76477344694757 -74.03664256999754 -52.60000000000017 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.8444480170734 -73.99064243548774 -53.298811421776996 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -171.76477344694757 -74.03664256999754 -52.60000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -172.07804203716555 -73.85577686510648 -53.95000000000018 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -171.8444480170734 -73.99064243548774 -53.298811421776996 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -172.44963646078688 -73.64123672459934 -54.509188309203864 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -172.07804203716555 -73.85577686510648 -53.95000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -172.9339077420565 -73.3616425699975 -54.93826859021815 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -172.44963646078688 -73.64123672459934 -54.509188309203864 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -173.49785359345208 -73.03604828088592 -55.20799973098066 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -172.9339077420565 -73.3616425699975 -54.93826859021815 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -174.10304203716552 -72.68664256999753 -55.30000000000017 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -173.49785359345208 -73.03604828088592 -55.20799973098066 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.39393857154667 -70.78664256999807 -42.600000000000165 + vertex -181.89727067122584 -68.18664256999816 -42.60000000000016 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.12141453926785 -68.05723304744691 -42.6340741737111 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -181.89727067122584 -68.18664256999816 -42.60000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.33028337311805 -67.93664256999818 -42.733974596215724 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -182.12141453926785 -68.05723304744691 -42.6340741737111 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.5096431069216 -67.8330891794049 -42.892893218813605 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -182.33028337311805 -67.93664256999818 -42.733974596215724 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.6472706712258 -67.75362986810595 -43.10000000000016 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -182.5096431069216 -67.8330891794049 -42.892893218813605 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.55881340310563 -77.61965527188991 -43.10000000000017 + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.98941369877977 -76.7936978060797 -43.25451867793765 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.65522356461943 -76.9866425699977 -43.414359353945066 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + vertex -166.98941369877977 -76.7936978060797 -43.25451867793765 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + vertex -166.65522356461943 -76.9866425699977 -43.414359353945066 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.3682479905337 -77.15232799494687 -43.66862915010168 + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -166.65522356461943 -76.9866425699977 -43.414359353945066 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.14804388764696 -77.2794628930252 -44.00000000000015 + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -166.3682479905337 -77.15232799494687 -43.66862915010168 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.00961780166648 -77.3593832310289 -44.38588952783612 + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -166.14804388764696 -77.2794628930252 -44.00000000000015 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -166.00961780166648 -77.3593832310289 -44.38588952783612 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.96240324159183 -77.38664256999762 -44.800000000000146 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -166.00961780166648 -77.3593832310289 -44.38588952783612 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.00961780166642 -77.3593832310289 -45.21411047216418 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -165.96240324159183 -77.38664256999762 -44.800000000000146 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.14804388764693 -77.27946289302517 -45.60000000000017 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -166.00961780166642 -77.3593832310289 -45.21411047216418 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.36824799053363 -77.15232799494682 -45.93137084989864 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -166.14804388764693 -77.27946289302517 -45.60000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.65522356461935 -76.98664256999758 -46.185640646055276 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -166.36824799053363 -77.15232799494682 -45.93137084989864 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -166.98941369877969 -76.79369780607962 -46.345481322062675 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -166.65522356461935 -76.98664256999758 -46.185640646055276 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -166.98941369877969 -76.79369780607962 -46.345481322062675 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.78919816083487 -77.48664256999749 -48.80000000000017 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.00163372613312 -76.7866425699975 -49.200000000000166 + vertex -165.78919816083487 -77.48664256999749 -48.80000000000017 + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.78919816083487 -77.48664256999749 -49.200000000000166 + vertex -165.78919816083487 -77.48664256999749 -48.80000000000017 + vertex -167.00163372613312 -76.7866425699975 -49.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -176.12804203716564 -71.51750827488873 -51.25000000000016 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -175.75644761354428 -71.73204841539585 -50.69081169079648 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -176.12804203716564 -71.51750827488873 -51.25000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -175.27217633227463 -72.01164256999769 -50.2617314097822 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -175.75644761354428 -71.73204841539585 -50.69081169079648 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -174.70823048087905 -72.33723685910932 -49.99200026901969 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -175.27217633227463 -72.01164256999769 -50.2617314097822 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -174.1030420371656 -72.6866425699977 -49.90000000000019 + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -174.70823048087905 -72.33723685910932 -49.99200026901969 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -176.44131062738361 -71.3366425699977 -52.60000000000017 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -176.36163605725767 -71.38264270450739 -53.29881142177697 + vertex -176.44131062738361 -71.3366425699977 -52.60000000000017 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -176.12804203716556 -71.51750827488863 -53.95000000000018 + vertex -176.36163605725767 -71.38264270450739 -53.29881142177697 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -175.75644761354422 -71.73204841539575 -54.509188309203864 + vertex -176.12804203716556 -71.51750827488863 -53.95000000000018 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -175.27217633227454 -72.01164256999756 -54.93826859021815 + vertex -175.75644761354422 -71.73204841539575 -54.509188309203864 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -174.70823048087897 -72.33723685910915 -55.20799973098066 + vertex -175.27217633227454 -72.01164256999756 -54.93826859021815 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -174.10304203716552 -72.68664256999753 -55.30000000000017 + vertex -174.70823048087897 -72.33723685910915 -55.20799973098066 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -174.10304203716552 -72.68664256999753 -55.30000000000017 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.00163372613298 -76.7866425699973 -56.00000000000017 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + vertex -165.78919816083476 -77.48664256999727 -56.0000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + vertex -165.78919816083476 -77.48664256999727 -56.0000000000002 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.44268224691507 -69.60379985752294 -58.20000000000017 + vertex -176.8174380826113 -71.1194852824722 -56.30000000000017 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + vertex -176.8174380826113 -71.1194852824722 -56.30000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -176.8174380826113 -71.1194852824722 -56.30000000000017 + vertex -179.44268224691507 -69.60379985752294 -58.20000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -179.44268224691507 -69.60379985752294 -58.20000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.04752841003258 -70.98664256999746 -60.80000000000018 + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.51961410070365 -69.55938323102878 -60.8141104721642 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.6580401866841 -69.47946289302507 -61.20000000000017 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -179.51961410070365 -69.55938323102878 -60.8141104721642 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.87824428957083 -69.35232799494672 -61.53137084989864 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -179.6580401866841 -69.47946289302507 -61.20000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.16521986365657 -69.18664256999752 -61.78564064605528 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -179.87824428957083 -69.35232799494672 -61.53137084989864 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.49940999781688 -68.99369780607951 -61.945481322062676 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -180.16521986365657 -69.18664256999752 -61.78564064605528 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.85804018668415 -68.78664256999754 -62.00000000000017 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -180.49940999781688 -68.99369780607951 -61.945481322062676 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -180.85804018668415 -68.78664256999754 -62.00000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.39393857154636 -70.78664256999738 -62.20000000000018 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.5096431069213 -67.8330891794043 -62.30710678118673 + vertex -177.39393857154636 -70.78664256999738 -62.20000000000018 + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + vertex -177.39393857154636 -70.78664256999738 -62.20000000000018 + vertex -182.5096431069213 -67.8330891794043 -62.30710678118673 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.3302833731177 -67.93664256999756 -62.46602540378461 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + vertex -182.5096431069213 -67.8330891794043 -62.30710678118673 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.1214145392675 -68.05723304744627 -62.56592582628924 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + vertex -182.3302833731177 -67.93664256999756 -62.46602540378461 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.8972706712255 -68.18664256999753 -62.60000000000018 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + vertex -182.1214145392675 -68.05723304744627 -62.56592582628924 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.4168859134963 -67.88664256999775 -56.00000000000017 + vertex -182.4168859134963 -67.88664256999773 -56.40000000000017 + vertex -181.20445034819804 -68.58664256999772 -56.0000000000002 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -181.20445034819804 -68.58664256999772 -56.0000000000002 + vertex -182.4168859134963 -67.88664256999773 -56.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.76329607501006 -67.68664256999776 -56.40000000000017 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -182.4168859134963 -67.88664256999773 -56.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.05804018668422 -68.09382224697006 -59.600000000000186 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -182.76329607501006 -67.68664256999776 -56.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.1964662726647 -68.01390190896635 -59.98588952783617 + vertex -182.05804018668422 -68.09382224697006 -59.600000000000186 + vertex -182.76329607501006 -67.68664256999776 -56.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + vertex -182.1964662726647 -68.01390190896635 -59.98588952783617 + vertex -182.76329607501006 -67.68664256999776 -56.40000000000017 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.83783608379747 -68.22095714504837 -59.26862915010171 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -182.05804018668422 -68.09382224697006 -59.600000000000186 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.55086050971178 -68.38664256999762 -59.014359353945075 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -181.83783608379747 -68.22095714504837 -59.26862915010171 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.21667037555144 -68.57958733391561 -58.85451867793769 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -181.55086050971178 -68.38664256999762 -59.014359353945075 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.8580401866842 -68.7866425699976 -58.800000000000175 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -181.21667037555144 -68.57958733391561 -58.85451867793769 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -180.8580401866842 -68.7866425699976 -58.800000000000175 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.2436808327393 -67.9866425699976 -60.400000000000205 + vertex -182.1964662726647 -68.01390190896635 -59.98588952783617 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.19646627266468 -68.01390190896635 -60.81411047216424 + vertex -182.2436808327393 -67.9866425699976 -60.400000000000205 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.0580401866842 -68.09382224697002 -61.2000000000002 + vertex -182.19646627266468 -68.01390190896635 -60.81411047216424 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.8378360837974 -68.22095714504832 -61.53137084989868 + vertex -182.0580401866842 -68.09382224697002 -61.2000000000002 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.55086050971173 -68.38664256999753 -61.78564064605529 + vertex -181.8378360837974 -68.22095714504832 -61.53137084989868 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.73378697496332 -67.70367965685304 -61.85881904510269 + vertex -181.55086050971173 -68.38664256999753 -61.78564064605529 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.21667037555136 -68.5795873339155 -61.94548132206272 + vertex -181.55086050971173 -68.38664256999753 -61.78564064605529 + vertex -182.73378697496332 -67.70367965685304 -61.85881904510269 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + vertex -181.21667037555136 -68.5795873339155 -61.94548132206272 + vertex -182.73378697496332 -67.70367965685304 -61.85881904510269 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.85804018668415 -68.78664256999754 -62.00000000000017 + vertex -181.21667037555136 -68.5795873339155 -61.94548132206272 + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.8580401866842 -68.7866425699976 -58.800000000000175 + vertex -180.49940999781697 -68.99369780607962 -58.85451867793765 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.16521986365666 -69.18664256999759 -59.01435935394506 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -180.49940999781697 -68.99369780607962 -58.85451867793765 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.87824428957092 -69.3523279949468 -59.26862915010168 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -180.16521986365666 -69.18664256999759 -59.01435935394506 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.65804018668416 -69.47946289302509 -59.60000000000015 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -179.87824428957092 -69.3523279949468 -59.26862915010168 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -179.65804018668416 -69.47946289302509 -59.60000000000015 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.51961410070365 -69.5593832310288 -59.985889527836115 + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -179.65804018668416 -69.47946289302509 -59.60000000000015 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.47239954062903 -69.58664256999755 -60.40000000000015 + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -179.51961410070365 -69.5593832310288 -59.985889527836115 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -179.51961410070365 -69.55938323102878 -60.8141104721642 + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -179.47239954062903 -69.58664256999755 -60.40000000000015 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + vertex -168.76340182741606 -75.76948528247226 -47.00000000000018 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + vertex -168.76340182741606 -75.76948528247226 -47.00000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -168.76340182741606 -75.76948528247226 -47.00000000000018 + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + vertex -181.20445034819815 -68.58664256999792 -49.200000000000145 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.41688591349637 -67.88664256999797 -49.200000000000124 + vertex -181.20445034819815 -68.58664256999792 -49.200000000000145 + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.6472706712258 -67.75362986810595 -43.10000000000016 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.21667037555173 -68.57958733391607 -43.254518677937675 + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.55086050971207 -68.38664256999812 -43.414359353945095 + vertex -181.21667037555173 -68.57958733391607 -43.254518677937675 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + vertex -181.55086050971207 -68.38664256999812 -43.414359353945095 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.83783608379778 -68.22095714504887 -43.66862915010171 + vertex -181.55086050971207 -68.38664256999812 -43.414359353945095 + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.05804018668448 -68.09382224697055 -44.0000000000002 + vertex -181.83783608379778 -68.22095714504887 -43.66862915010171 + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.196466272665 -68.01390190896684 -44.38588952783617 + vertex -182.05804018668448 -68.09382224697055 -44.0000000000002 + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + vertex -182.196466272665 -68.01390190896684 -44.38588952783617 + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.24368083273959 -67.98664256999808 -44.8000000000002 + vertex -182.196466272665 -68.01390190896684 -44.38588952783617 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.19646627266496 -68.01390190896683 -45.21411047216423 + vertex -182.24368083273959 -67.98664256999808 -44.8000000000002 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.05804018668445 -68.09382224697053 -45.6000000000002 + vertex -182.19646627266496 -68.01390190896683 -45.21411047216423 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.8378360837977 -68.2209571450488 -45.93137084989867 + vertex -182.05804018668445 -68.09382224697053 -45.6000000000002 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.550860509712 -68.38664256999806 -46.185640646055305 + vertex -181.8378360837977 -68.2209571450488 -45.93137084989867 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.21667037555162 -68.57958733391597 -46.3454813220627 + vertex -181.550860509712 -68.38664256999806 -46.185640646055305 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + vertex -181.21667037555162 -68.57958733391597 -46.3454813220627 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.9750497701033076e-16 + outer loop + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -181.89727067122584 -68.18664256999816 -42.60000000000016 + vertex -177.39393857154667 -70.78664256999807 -42.600000000000165 + vertex -31.897270671226583 191.62097856533254 -42.600000000000065 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -27.393938571547345 189.02097856533265 -42.60000000000007 + vertex -31.897270671226583 191.62097856533254 -42.600000000000065 + vertex -177.39393857154667 -70.78664256999807 -42.600000000000165 + endloop +endfacet +facet normal -0.11303899832185417 0.06526309610999999 0.9914448613738078 + outer loop + vertex -182.12141453926785 -68.05723304744691 -42.6340741737111 + vertex -181.89727067122584 -68.18664256999816 -42.60000000000016 + vertex -32.12141453926859 191.75038808788375 -42.63407417371101 + endloop +endfacet +facet normal -0.11303899832185417 0.06526309610999999 0.9914448613738078 + outer loop + vertex -31.897270671226583 191.62097856533254 -42.600000000000065 + vertex -32.12141453926859 191.75038808788375 -42.63407417371101 + vertex -181.89727067122584 -68.18664256999816 -42.60000000000016 + endloop +endfacet +facet normal -1.4032362957362874e-14 -3.338242996024358e-14 1.0 + outer loop + vertex -176.81743808261146 -71.11948528247241 -48.900000000000155 + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + vertex -26.81743808261221 188.68813585285818 -48.90000000000006 + endloop +endfacet +facet normal -1.4032362957362874e-14 -3.338242996024358e-14 1.0 + outer loop + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + vertex -26.81743808261221 188.68813585285818 -48.90000000000006 + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + endloop +endfacet +facet normal -0.33141357403561217 0.19134171618249274 0.9238795325112902 + outer loop + vertex -182.33028337311805 -67.93664256999818 -42.733974596215724 + vertex -182.12141453926785 -68.05723304744691 -42.6340741737111 + vertex -32.33028337311875 191.87097856533256 -42.73397459621563 + endloop +endfacet +facet normal -0.33141357403561217 0.19134171618249274 0.9238795325112902 + outer loop + vertex -32.12141453926859 191.75038808788375 -42.63407417371101 + vertex -32.33028337311875 191.87097856533256 -42.73397459621563 + vertex -182.12141453926785 -68.05723304744691 -42.6340741737111 + endloop +endfacet +facet normal -0.5272028623656807 0.30438071450430654 0.7933533402912483 + outer loop + vertex -182.5096431069216 -67.8330891794049 -42.892893218813605 + vertex -182.33028337311805 -67.93664256999818 -42.733974596215724 + vertex -32.509643106922326 191.9745319559258 -42.89289321881352 + endloop +endfacet +facet normal -0.5272028623656807 0.30438071450430654 0.7933533402912483 + outer loop + vertex -32.33028337311875 191.87097856533256 -42.73397459621563 + vertex -32.509643106922326 191.9745319559258 -42.89289321881352 + vertex -182.33028337311805 -67.93664256999818 -42.733974596215724 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -7.797766215937039e-16 + outer loop + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + vertex -181.20445034819815 -68.58664256999792 -49.200000000000145 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -7.797766215937039e-16 + outer loop + vertex -31.204450348198883 191.22097856533276 -49.20000000000007 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + vertex -181.20445034819815 -68.58664256999792 -49.200000000000145 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -6.227439144697606e-15 + outer loop + vertex -177.39393857154667 -70.78664256999807 -42.600000000000165 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -27.393938571547345 189.02097856533265 -42.60000000000007 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -6.227439144697606e-15 + outer loop + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + vertex -27.393938571547345 189.02097856533265 -42.60000000000007 + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -178.95278429835867 -69.88664256999802 -44.40000000000017 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -169.25329977597278 -75.48664256999771 -44.40000000000018 + vertex -19.253299775973456 184.32097856533298 -44.40000000000009 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + vertex -19.253299775973456 184.32097856533298 -44.40000000000009 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -181.20445034819818 -68.58664256999799 -47.00000000000015 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -29.442682246915975 190.20382127780732 -47.00000000000008 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -178.95278429835867 -69.88664256999802 -44.40000000000017 + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -170.81214550278483 -74.58664256999784 -42.60000000000017 + vertex -20.812145502785523 185.2209785653329 -42.600000000000094 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + vertex -20.812145502785523 185.2209785653329 -42.600000000000094 + endloop +endfacet +facet normal -0.8001031451912931 0.46193976625560507 0.38268343236507835 + outer loop + vertex -182.6472706712258 -67.75362986810595 -43.10000000000016 + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + endloop +endfacet +facet normal -0.8001031451912931 0.46193976625560507 0.38268343236507835 + outer loop + vertex -32.73378697496435 192.10394147847708 -43.34118095489755 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + endloop +endfacet +facet normal -0.6123724356957986 0.3535533905932744 -0.7071067811865439 + outer loop + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + endloop +endfacet +facet normal -0.6123724356957986 0.3535533905932744 -0.7071067811865439 + outer loop + vertex -29.442682246915975 190.20382127780732 -47.00000000000008 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -179.44268224691524 -69.60379985752333 -47.00000000000017 + endloop +endfacet +facet normal 0.6123724356957958 -0.3535533905932728 0.7071067811865469 + outer loop + vertex -178.9527842983586 -69.88664256999792 -46.43431457505091 + vertex -176.81743808261146 -71.11948528247241 -48.900000000000155 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.6123724356957958 -0.3535533905932728 0.7071067811865469 + outer loop + vertex -26.81743808261221 188.68813585285818 -48.90000000000006 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + vertex -176.81743808261146 -71.11948528247241 -48.900000000000155 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -32.4168859134971 191.92097856533272 -48.80000000000003 + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + vertex -21.158555664299303 185.4209785653328 -43.00000000000008 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -21.158555664299303 185.4209785653328 -43.00000000000008 + vertex -170.8121455027848 -74.58664256999782 -43.00000000000017 + endloop +endfacet +facet normal 3.1938264052333316e-15 3.964006195623638e-14 -1.0 + outer loop + vertex -182.41688591349637 -67.88664256999797 -49.200000000000124 + vertex -32.4168859134971 191.9209785653327 -49.20000000000003 + vertex -181.20445034819815 -68.58664256999792 -49.200000000000145 + endloop +endfacet +facet normal 3.1938264052333316e-15 3.964006195623638e-14 -1.0 + outer loop + vertex -31.204450348198883 191.22097856533276 -49.20000000000007 + vertex -181.20445034819815 -68.58664256999792 -49.200000000000145 + vertex -32.4168859134971 191.9209785653327 -49.20000000000003 + endloop +endfacet +facet normal -0.6123724356958149 0.35355339059323304 0.7071067811865502 + outer loop + vertex -171.3886459917198 -74.25379985752299 -48.90000000000018 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + endloop +endfacet +facet normal -0.6123724356958149 0.35355339059323304 0.7071067811865502 + outer loop + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + vertex -169.25329977597272 -75.48664256999764 -46.43431457505094 + endloop +endfacet +facet normal 0.11303899832181934 -0.06526309611006442 0.9914448613738074 + outer loop + vertex -166.30881340310572 -77.18664256999767 -42.60000000000018 + vertex -166.08466953506365 -77.31605209254894 -42.63407417371111 + vertex -16.308813403106395 182.62097856533293 -42.60000000000009 + endloop +endfacet +facet normal 0.11303899832181934 -0.06526309611006442 0.9914448613738074 + outer loop + vertex -16.084669535064364 182.4915690427817 -42.63407417371102 + vertex -16.308813403106395 182.62097856533293 -42.60000000000009 + vertex -166.08466953506365 -77.31605209254894 -42.63407417371111 + endloop +endfacet +facet normal 0.3314135740355757 -0.1913417161825591 0.9238795325112896 + outer loop + vertex -166.08466953506365 -77.31605209254894 -42.63407417371111 + vertex -165.87580070121342 -77.43664256999769 -42.73397459621574 + vertex -16.084669535064364 182.4915690427817 -42.63407417371102 + endloop +endfacet +facet normal 0.3314135740355757 -0.1913417161825591 0.9238795325112896 + outer loop + vertex -15.875800701214178 182.370978565333 -42.73397459621565 + vertex -16.084669535064364 182.4915690427817 -42.63407417371102 + vertex -165.87580070121342 -77.43664256999769 -42.73397459621574 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 -2.4387889803801352e-15 + outer loop + vertex -182.76329607501015 -67.68664256999799 -48.800000000000125 + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 -2.4387889803801352e-15 + outer loop + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -177.3939385715466 -70.78664256999802 -43.00000000000016 + vertex -177.04752841003284 -70.98664256999803 -43.00000000000016 + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + vertex -177.04752841003284 -70.98664256999803 -43.00000000000016 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868709 0.1305261922200573 + outer loop + vertex -182.76329607501026 -67.68664256999813 -43.60000000000016 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868709 0.1305261922200573 + outer loop + vertex -32.73378697496435 192.10394147847708 -43.34118095489755 + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -182.73378697496364 -67.70367965685361 -43.341180954897645 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -21.158555664299303 185.4209785653328 -43.00000000000008 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -171.15855566429858 -74.38664256999785 -43.00000000000017 + endloop +endfacet +facet normal 0.5272028623656503 -0.30438071450436227 0.7933533402912472 + outer loop + vertex -165.87580070121342 -77.43664256999769 -42.73397459621574 + vertex -165.69644096740984 -77.54019596059094 -42.892893218813626 + vertex -15.875800701214178 182.370978565333 -42.73397459621565 + endloop +endfacet +facet normal 0.5272028623656503 -0.30438071450436227 0.7933533402912472 + outer loop + vertex -15.696440967410565 182.26742517473969 -42.89289321881353 + vertex -15.875800701214178 182.370978565333 -42.73397459621565 + vertex -165.69644096740984 -77.54019596059094 -42.892893218813626 + endloop +endfacet +facet normal 0.687064146869451 -0.396676670145619 0.6087614290087188 + outer loop + vertex -165.55881340310563 -77.61965527188991 -43.10000000000017 + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + vertex -165.69644096740984 -77.54019596059094 -42.892893218813626 + endloop +endfacet +facet normal 0.687064146869451 -0.396676670145619 0.6087614290087188 + outer loop + vertex -15.696440967410565 182.26742517473969 -42.89289321881353 + vertex -165.69644096740984 -77.54019596059094 -42.892893218813626 + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + endloop +endfacet +facet normal -0.6870641468694724 0.39667667014558616 0.6087614290087162 + outer loop + vertex -182.6472706712258 -67.75362986810595 -43.10000000000016 + vertex -182.5096431069216 -67.8330891794049 -42.892893218813605 + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + endloop +endfacet +facet normal -0.6870641468694724 0.39667667014558616 0.6087614290087162 + outer loop + vertex -32.509643106922326 191.9745319559258 -42.89289321881352 + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + vertex -182.5096431069216 -67.8330891794049 -42.892893218813605 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -4.1225237454890334e-14 + outer loop + vertex -177.04752841003284 -70.98664256999803 -43.00000000000016 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -4.1225237454890334e-14 + outer loop + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + vertex -177.04752841003287 -70.98664256999795 -44.40000000000016 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 6.007129263248552e-15 + outer loop + vertex -182.41688591349637 -67.88664256999797 -49.200000000000124 + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + vertex -32.4168859134971 191.9209785653327 -49.20000000000003 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 6.007129263248552e-15 + outer loop + vertex -32.4168859134971 191.92097856533272 -48.80000000000003 + vertex -32.4168859134971 191.9209785653327 -49.20000000000003 + vertex -182.41688591349637 -67.88664256999797 -48.800000000000125 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -171.15855566429855 -74.38664256999782 -44.40000000000017 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -169.25329977597278 -75.48664256999771 -44.40000000000018 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -19.253299775973456 184.32097856533298 -44.40000000000009 + vertex -169.25329977597278 -75.48664256999771 -44.40000000000018 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -170.81214550278483 -74.58664256999784 -42.60000000000017 + vertex -166.30881340310572 -77.18664256999767 -42.60000000000018 + vertex -20.812145502785523 185.2209785653329 -42.600000000000094 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -16.308813403106395 182.62097856533293 -42.60000000000009 + vertex -20.812145502785523 185.2209785653329 -42.600000000000094 + vertex -166.30881340310572 -77.18664256999767 -42.60000000000018 + endloop +endfacet +facet normal 0.11303899832184441 -0.06526309610999435 -0.9914448613738092 + outer loop + vertex -167.70667407651422 -76.37958733391568 -43.25451867793767 + vertex -17.70667407651493 183.42803380141493 -43.25451867793758 + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + endloop +endfacet +facet normal 0.11303899832184441 -0.06526309610999435 -0.9914448613738092 + outer loop + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + vertex -17.70667407651493 183.42803380141493 -43.25451867793758 + endloop +endfacet +facet normal 0.8586164364012806 -0.4957224306868712 0.1305261922200513 + outer loop + vertex -176.44131062738361 -71.3366425699977 -52.60000000000017 + vertex -176.36163605725767 -71.38264270450739 -53.29881142177697 + vertex -26.44131062738434 188.47097856533296 -52.60000000000009 + endloop +endfacet +facet normal 0.8586164364012806 -0.4957224306868712 0.1305261922200513 + outer loop + vertex -26.36163605725843 188.42497843082322 -53.29881142177688 + vertex -26.44131062738434 188.47097856533296 -52.60000000000009 + vertex -176.36163605725767 -71.38264270450739 -53.29881142177697 + endloop +endfacet +facet normal 0.52720286236568 -0.3043807145043062 -0.7933533402912488 + outer loop + vertex -175.75644761354428 -71.73204841539585 -50.69081169079648 + vertex -25.756447613545006 188.07557271993477 -50.690811690796394 + vertex -175.27217633227463 -72.01164256999769 -50.2617314097822 + endloop +endfacet +facet normal 0.52720286236568 -0.3043807145043062 -0.7933533402912488 + outer loop + vertex -25.272176332275354 187.79597856533294 -50.26173140978212 + vertex -175.27217633227463 -72.01164256999769 -50.2617314097822 + vertex -25.756447613545006 188.07557271993477 -50.690811690796394 + endloop +endfacet +facet normal 0.8001031451912727 -0.46193976625563826 0.38268343236508084 + outer loop + vertex -176.12804203716556 -71.51750827488863 -53.95000000000018 + vertex -26.12804203716631 188.29011286044204 -53.950000000000095 + vertex -176.36163605725767 -71.38264270450739 -53.29881142177697 + endloop +endfacet +facet normal 0.8001031451912727 -0.46193976625563826 0.38268343236508084 + outer loop + vertex -26.36163605725843 188.42497843082322 -53.29881142177688 + vertex -176.36163605725767 -71.38264270450739 -53.29881142177697 + vertex -26.12804203716631 188.29011286044204 -53.950000000000095 + endloop +endfacet +facet normal 0.8001031451912782 -0.46193976625563016 0.38268343236507885 + outer loop + vertex -165.55881340310563 -77.61965527188991 -43.10000000000017 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + endloop +endfacet +facet normal 0.8001031451912782 -0.46193976625563016 0.38268343236507885 + outer loop + vertex -15.472297099368534 182.13801565218847 -43.34118095489759 + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + endloop +endfacet +facet normal 0.11303899832179293 -0.06526309611005199 0.9914448613738114 + outer loop + vertex -174.70823048087897 -72.33723685910915 -55.20799973098066 + vertex -174.10304203716552 -72.68664256999753 -55.30000000000017 + vertex -24.708230480879674 187.47038427622155 -55.20799973098057 + endloop +endfacet +facet normal 0.11303899832179293 -0.06526309611005199 0.9914448613738114 + outer loop + vertex -24.103042037166208 187.1209785653331 -55.30000000000008 + vertex -24.708230480879674 187.47038427622155 -55.20799973098057 + vertex -174.10304203716552 -72.68664256999753 -55.30000000000017 + endloop +endfacet +facet normal -0.52720286236568 0.3043807145043062 0.7933533402912488 + outer loop + vertex -172.9339077420565 -73.3616425699975 -54.93826859021815 + vertex -172.44963646078688 -73.64123672459934 -54.509188309203864 + vertex -22.93390774205722 186.4459785653332 -54.93826859021808 + endloop +endfacet +facet normal -0.52720286236568 0.3043807145043062 0.7933533402912488 + outer loop + vertex -22.449636460787566 186.16638441073135 -54.50918830920379 + vertex -22.93390774205722 186.4459785653332 -54.93826859021808 + vertex -172.44963646078688 -73.64123672459934 -54.509188309203864 + endloop +endfacet +facet normal 0.8001031451912971 -0.461939766255596 -0.3826834323650809 + outer loop + vertex -176.12804203716564 -71.51750827488873 -51.25000000000016 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + vertex -26.128042037166377 188.29011286044195 -51.25000000000008 + endloop +endfacet +facet normal 0.8001031451912971 -0.461939766255596 -0.3826834323650809 + outer loop + vertex -26.36163605725845 188.42497843082322 -51.901188578223284 + vertex -26.128042037166377 188.29011286044195 -51.25000000000008 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + endloop +endfacet +facet normal 0.3314135740355923 -0.19134171618256868 0.9238795325112817 + outer loop + vertex -175.27217633227454 -72.01164256999756 -54.93826859021815 + vertex -174.70823048087897 -72.33723685910915 -55.20799973098066 + vertex -25.272176332275286 187.79597856533303 -54.93826859021806 + endloop +endfacet +facet normal 0.3314135740355923 -0.19134171618256868 0.9238795325112817 + outer loop + vertex -24.708230480879674 187.47038427622155 -55.20799973098057 + vertex -25.272176332275286 187.79597856533303 -54.93826859021806 + vertex -174.70823048087897 -72.33723685910915 -55.20799973098066 + endloop +endfacet +facet normal -0.11303899832179376 0.06526309611005106 -0.9914448613738113 + outer loop + vertex -174.1030420371656 -72.6866425699977 -49.90000000000019 + vertex -24.103042037166343 187.12097856533296 -49.90000000000009 + vertex -173.49785359345213 -73.03604828088608 -49.9920002690197 + endloop +endfacet +facet normal -0.11303899832179376 0.06526309611005106 -0.9914448613738113 + outer loop + vertex -23.4978535934529 186.77157285444457 -49.9920002690196 + vertex -173.49785359345213 -73.03604828088608 -49.9920002690197 + vertex -24.103042037166343 187.12097856533296 -49.90000000000009 + endloop +endfacet +facet normal -0.8001031451912727 0.46193976625563826 -0.38268343236508084 + outer loop + vertex -172.07804203716555 -73.8557768651066 -51.25000000000016 + vertex -22.078042037166306 185.95184427022406 -51.25000000000008 + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + endloop +endfacet +facet normal -0.8001031451912727 0.46193976625563826 -0.38268343236508084 + outer loop + vertex -21.84444801707419 185.81697869984285 -51.90118857822331 + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + vertex -22.078042037166306 185.95184427022406 -51.25000000000008 + endloop +endfacet +facet normal -0.33141357403562627 0.19134171618250656 0.9238795325112824 + outer loop + vertex -173.49785359345208 -73.03604828088592 -55.20799973098066 + vertex -172.9339077420565 -73.3616425699975 -54.93826859021815 + vertex -23.497853593452785 186.77157285444477 -55.20799973098057 + endloop +endfacet +facet normal -0.33141357403562627 0.19134171618250656 0.9238795325112824 + outer loop + vertex -22.93390774205722 186.4459785653332 -54.93826859021808 + vertex -23.497853593452785 186.77157285444477 -55.20799973098057 + vertex -172.9339077420565 -73.3616425699975 -54.93826859021815 + endloop +endfacet +facet normal 0.6870641468694538 -0.39667667014561503 0.6087614290087181 + outer loop + vertex -176.12804203716556 -71.51750827488863 -53.95000000000018 + vertex -175.75644761354422 -71.73204841539575 -54.509188309203864 + vertex -26.12804203716631 188.29011286044204 -53.950000000000095 + endloop +endfacet +facet normal 0.6870641468694538 -0.39667667014561503 0.6087614290087181 + outer loop + vertex -25.756447613544914 188.0755727199349 -54.50918830920377 + vertex -26.12804203716631 188.29011286044204 -53.950000000000095 + vertex -175.75644761354422 -71.73204841539575 -54.509188309203864 + endloop +endfacet +facet normal 0.8586164364012753 -0.4957224306868794 -0.13052619222005518 + outer loop + vertex -176.44131062738361 -71.3366425699977 -52.60000000000017 + vertex -26.44131062738434 188.47097856533296 -52.60000000000009 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + endloop +endfacet +facet normal 0.8586164364012753 -0.4957224306868794 -0.13052619222005518 + outer loop + vertex -26.36163605725845 188.42497843082322 -51.901188578223284 + vertex -176.36163605725767 -71.38264270450745 -51.901188578223376 + vertex -26.44131062738434 188.47097856533296 -52.60000000000009 + endloop +endfacet +facet normal -0.8001031451912881 0.4619397662556022 0.38268343236509217 + outer loop + vertex -172.07804203716555 -73.85577686510648 -53.95000000000018 + vertex -171.8444480170734 -73.99064243548774 -53.298811421776996 + vertex -22.078042037166238 185.95184427022414 -53.95000000000012 + endloop +endfacet +facet normal -0.8001031451912881 0.4619397662556022 0.38268343236509217 + outer loop + vertex -21.844448017074168 185.81697869984293 -53.298811421776925 + vertex -22.078042037166238 185.95184427022414 -53.95000000000012 + vertex -171.8444480170734 -73.99064243548774 -53.298811421776996 + endloop +endfacet +facet normal -0.11303899832176341 0.06526309611003213 -0.9914448613738159 + outer loop + vertex -167.34804388764698 -76.58664256999771 -43.20000000000017 + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + vertex -166.98941369877977 -76.7936978060797 -43.25451867793765 + endloop +endfacet +facet normal -0.11303899832176341 0.06526309611003213 -0.9914448613738159 + outer loop + vertex -16.989413698780513 183.01392332925096 -43.254518677937554 + vertex -166.98941369877977 -76.7936978060797 -43.25451867793765 + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + endloop +endfacet +facet normal -0.6870641468694506 0.39667667014561886 -0.6087614290087194 + outer loop + vertex -172.07804203716555 -73.8557768651066 -51.25000000000016 + vertex -172.4496364607869 -73.64123672459945 -50.69081169079649 + vertex -22.078042037166306 185.95184427022406 -51.25000000000008 + endloop +endfacet +facet normal -0.6870641468694506 0.39667667014561886 -0.6087614290087194 + outer loop + vertex -22.449636460787655 186.16638441073113 -50.690811690796394 + vertex -22.078042037166306 185.95184427022406 -51.25000000000008 + vertex -172.4496364607869 -73.64123672459945 -50.69081169079649 + endloop +endfacet +facet normal 0.527202862365652 -0.30438071450435766 0.7933533402912477 + outer loop + vertex -175.75644761354422 -71.73204841539575 -54.509188309203864 + vertex -175.27217633227454 -72.01164256999756 -54.93826859021815 + vertex -25.756447613544914 188.0755727199349 -54.50918830920377 + endloop +endfacet +facet normal 0.527202862365652 -0.30438071450435766 0.7933533402912477 + outer loop + vertex -25.272176332275286 187.79597856533303 -54.93826859021806 + vertex -25.756447613544914 188.0755727199349 -54.50918830920377 + vertex -175.27217633227454 -72.01164256999756 -54.93826859021815 + endloop +endfacet +facet normal 0.11303899832182902 -0.06526309610998687 -0.9914448613738115 + outer loop + vertex -174.70823048087905 -72.33723685910932 -49.99200026901969 + vertex -24.708230480879788 187.47038427622132 -49.99200026901961 + vertex -174.1030420371656 -72.6866425699977 -49.90000000000019 + endloop +endfacet +facet normal 0.11303899832182902 -0.06526309610998687 -0.9914448613738115 + outer loop + vertex -24.103042037166343 187.12097856533296 -49.90000000000009 + vertex -174.1030420371656 -72.6866425699977 -49.90000000000019 + vertex -24.708230480879788 187.47038427622132 -49.99200026901961 + endloop +endfacet +facet normal -0.6870641468694684 0.39667667014558383 0.6087614290087221 + outer loop + vertex -172.44963646078688 -73.64123672459934 -54.509188309203864 + vertex -172.07804203716555 -73.85577686510648 -53.95000000000018 + vertex -22.449636460787566 186.16638441073135 -54.50918830920379 + endloop +endfacet +facet normal -0.6870641468694684 0.39667667014558383 0.6087614290087221 + outer loop + vertex -22.078042037166238 185.95184427022414 -53.95000000000012 + vertex -22.449636460787566 186.16638441073135 -54.50918830920379 + vertex -172.07804203716555 -73.85577686510648 -53.95000000000018 + endloop +endfacet +facet normal -0.8586164364012806 0.4957224306868712 0.13052619222005102 + outer loop + vertex -171.76477344694757 -74.03664256999754 -52.60000000000017 + vertex -21.764773446948276 185.77097856533308 -52.60000000000011 + vertex -171.8444480170734 -73.99064243548774 -53.298811421776996 + endloop +endfacet +facet normal -0.8586164364012806 0.4957224306868712 0.13052619222005102 + outer loop + vertex -21.844448017074168 185.81697869984293 -53.298811421776925 + vertex -171.8444480170734 -73.99064243548774 -53.298811421776996 + vertex -21.764773446948276 185.77097856533308 -52.60000000000011 + endloop +endfacet +facet normal -0.11303899832182902 0.06526309610998687 0.9914448613738115 + outer loop + vertex -174.10304203716552 -72.68664256999753 -55.30000000000017 + vertex -173.49785359345208 -73.03604828088592 -55.20799973098066 + vertex -24.103042037166208 187.1209785653331 -55.30000000000008 + endloop +endfacet +facet normal -0.11303899832182902 0.06526309610998687 0.9914448613738115 + outer loop + vertex -23.497853593452785 186.77157285444477 -55.20799973098057 + vertex -24.103042037166208 187.1209785653331 -55.30000000000008 + vertex -173.49785359345208 -73.03604828088592 -55.20799973098066 + endloop +endfacet +facet normal -0.33141357403559885 0.19134171618256962 -0.9238795325112792 + outer loop + vertex -166.98941369877977 -76.7936978060797 -43.25451867793765 + vertex -16.989413698780513 183.01392332925096 -43.254518677937554 + vertex -166.65522356461943 -76.9866425699977 -43.414359353945066 + endloop +endfacet +facet normal -0.33141357403559885 0.19134171618256962 -0.9238795325112792 + outer loop + vertex -16.655223564620155 182.8209785653329 -43.414359353944974 + vertex -166.65522356461943 -76.9866425699977 -43.414359353945066 + vertex -16.989413698780513 183.01392332925096 -43.254518677937554 + endloop +endfacet +facet normal 0.6870641468694717 -0.3966766701455802 -0.6087614290087209 + outer loop + vertex -176.12804203716564 -71.51750827488873 -51.25000000000016 + vertex -26.128042037166377 188.29011286044195 -51.25000000000008 + vertex -175.75644761354428 -71.73204841539585 -50.69081169079648 + endloop +endfacet +facet normal 0.6870641468694717 -0.3966766701455802 -0.6087614290087209 + outer loop + vertex -25.756447613545006 188.07557271993477 -50.690811690796394 + vertex -175.75644761354428 -71.73204841539585 -50.69081169079648 + vertex -26.128042037166377 188.29011286044195 -51.25000000000008 + endloop +endfacet +facet normal -0.5272028623656437 0.30438071450436416 -0.7933533402912507 + outer loop + vertex -166.65522356461943 -76.9866425699977 -43.414359353945066 + vertex -16.655223564620155 182.8209785653329 -43.414359353944974 + vertex -166.3682479905337 -77.15232799494687 -43.66862915010168 + endloop +endfacet +facet normal -0.5272028623656437 0.30438071450436416 -0.7933533402912507 + outer loop + vertex -16.36824799053443 182.6552931403837 -43.66862915010159 + vertex -166.3682479905337 -77.15232799494687 -43.66862915010168 + vertex -16.655223564620155 182.8209785653329 -43.414359353944974 + endloop +endfacet +facet normal 0.3314135740355925 -0.19134171618248988 -0.923879532511298 + outer loop + vertex -168.04086421067456 -76.18664256999774 -43.41435935394507 + vertex -18.040864210675263 183.62097856533293 -43.414359353944974 + vertex -167.70667407651422 -76.37958733391568 -43.25451867793767 + endloop +endfacet +facet normal 0.3314135740355925 -0.19134171618248988 -0.923879532511298 + outer loop + vertex -17.70667407651493 183.42803380141493 -43.25451867793758 + vertex -167.70667407651422 -76.37958733391568 -43.25451867793767 + vertex -18.040864210675263 183.62097856533293 -43.414359353944974 + endloop +endfacet +facet normal -0.527202862365652 0.30438071450435766 -0.7933533402912477 + outer loop + vertex -172.93390774205662 -73.36164256999763 -50.2617314097822 + vertex -22.933907742057333 186.44597856533304 -50.26173140978211 + vertex -172.4496364607869 -73.64123672459945 -50.69081169079649 + endloop +endfacet +facet normal -0.527202862365652 0.30438071450435766 -0.7933533402912477 + outer loop + vertex -22.449636460787655 186.16638441073113 -50.690811690796394 + vertex -172.4496364607869 -73.64123672459945 -50.69081169079649 + vertex -22.933907742057333 186.44597856533304 -50.26173140978211 + endloop +endfacet +facet normal -0.3314135740355923 0.19134171618256868 -0.9238795325112817 + outer loop + vertex -173.49785359345213 -73.03604828088608 -49.9920002690197 + vertex -23.4978535934529 186.77157285444457 -49.9920002690196 + vertex -172.93390774205662 -73.36164256999763 -50.2617314097822 + endloop +endfacet +facet normal -0.3314135740355923 0.19134171618256868 -0.9238795325112817 + outer loop + vertex -22.933907742057333 186.44597856533304 -50.26173140978211 + vertex -172.93390774205662 -73.36164256999763 -50.2617314097822 + vertex -23.4978535934529 186.77157285444457 -49.9920002690196 + endloop +endfacet +facet normal -0.8586164364012806 0.4957224306868712 -0.1305261922200513 + outer loop + vertex -171.76477344694757 -74.03664256999754 -52.60000000000017 + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + vertex -21.764773446948276 185.77097856533308 -52.60000000000011 + endloop +endfacet +facet normal -0.8586164364012806 0.4957224306868712 -0.1305261922200513 + outer loop + vertex -21.84444801707419 185.81697869984285 -51.90118857822331 + vertex -21.764773446948276 185.77097856533308 -52.60000000000011 + vertex -171.84444801707346 -73.99064243548779 -51.901188578223376 + endloop +endfacet +facet normal 0.8586164364012802 -0.49572243068687094 0.13052619222005538 + outer loop + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + endloop +endfacet +facet normal 0.8586164364012802 -0.49572243068687094 0.13052619222005538 + outer loop + vertex -15.472297099368534 182.13801565218847 -43.34118095489759 + vertex -165.4722970993678 -77.66960548314219 -43.34118095489766 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + endloop +endfacet +facet normal -0.6870641468694431 0.3966766701456088 -0.6087614290087343 + outer loop + vertex -166.14804388764696 -77.2794628930252 -44.00000000000015 + vertex -166.3682479905337 -77.15232799494687 -43.66862915010168 + vertex -16.148043887647678 182.52815824230547 -44.00000000000006 + endloop +endfacet +facet normal -0.6870641468694431 0.3966766701456088 -0.6087614290087343 + outer loop + vertex -16.36824799053443 182.6552931403837 -43.66862915010159 + vertex -16.148043887647678 182.52815824230547 -44.00000000000006 + vertex -166.3682479905337 -77.15232799494687 -43.66862915010168 + endloop +endfacet +facet normal 0.33141357403562205 -0.19134171618251256 -0.9238795325112827 + outer loop + vertex -175.27217633227463 -72.01164256999769 -50.2617314097822 + vertex -25.272176332275354 187.79597856533294 -50.26173140978212 + vertex -174.70823048087905 -72.33723685910932 -49.99200026901969 + endloop +endfacet +facet normal 0.33141357403562205 -0.19134171618251256 -0.9238795325112827 + outer loop + vertex -24.708230480879788 187.47038427622132 -49.99200026901961 + vertex -174.70823048087905 -72.33723685910932 -49.99200026901969 + vertex -25.272176332275354 187.79597856533294 -50.26173140978212 + endloop +endfacet +facet normal 0.33141357403559885 -0.19134171618256962 0.9238795325112792 + outer loop + vertex -168.0408642106745 -76.18664256999763 -46.18564064605529 + vertex -167.70667407651416 -76.37958733391561 -46.345481322062696 + vertex -18.040864210675217 183.620978565333 -46.18564064605519 + endloop +endfacet +facet normal 0.33141357403559885 -0.19134171618256962 0.9238795325112792 + outer loop + vertex -17.706674076514883 183.42803380141498 -46.345481322062604 + vertex -18.040864210675217 183.620978565333 -46.18564064605519 + vertex -167.70667407651416 -76.37958733391561 -46.345481322062696 + endloop +endfacet +facet normal -0.1130389983218446 0.06526309610999587 0.9914448613738092 + outer loop + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + vertex -166.98941369877969 -76.79369780607962 -46.345481322062675 + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + endloop +endfacet +facet normal -0.1130389983218446 0.06526309610999587 0.9914448613738092 + outer loop + vertex -16.9894136987804 183.013923329251 -46.34548132206258 + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + vertex -166.98941369877969 -76.79369780607962 -46.345481322062675 + endloop +endfacet +facet normal -0.8586164364012766 0.49572243068688016 0.1305261922200438 + outer loop + vertex -166.00961780166642 -77.3593832310289 -45.21411047216418 + vertex -165.96240324159183 -77.38664256999762 -44.800000000000146 + vertex -16.009617801667133 182.44823790430183 -45.214110472164094 + endloop +endfacet +facet normal -0.8586164364012766 0.49572243068688016 0.1305261922200438 + outer loop + vertex -15.962403241592522 182.4209785653331 -44.80000000000006 + vertex -16.009617801667133 182.44823790430183 -45.214110472164094 + vertex -165.96240324159183 -77.38664256999762 -44.800000000000146 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.13052619222006182 + outer loop + vertex -168.7336845337021 -75.7866425699977 -44.8000000000002 + vertex -168.68646997362748 -75.81390190896644 -45.214110472164236 + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.13052619222006182 + outer loop + vertex -18.68646997362817 183.99371922636428 -45.21411047216414 + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + vertex -168.68646997362748 -75.81390190896644 -45.214110472164236 + endloop +endfacet +facet normal 0.6870641468694701 -0.3966766701455793 -0.608761429008723 + outer loop + vertex -168.32783978476027 -76.02095714504847 -43.668629150101715 + vertex -168.54804388764703 -75.89382224697016 -44.000000000000185 + vertex -18.327839784760986 183.78666399028216 -43.66862915010161 + endloop +endfacet +facet normal 0.6870641468694701 -0.3966766701455793 -0.608761429008723 + outer loop + vertex -18.548043887647765 183.91379888836047 -44.000000000000085 + vertex -18.327839784760986 183.78666399028216 -43.66862915010161 + vertex -168.54804388764703 -75.89382224697016 -44.000000000000185 + endloop +endfacet +facet normal -0.8586164364012804 0.4957224306868824 0.13052619222001063 + outer loop + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + vertex -16.009617801666863 182.44823790430226 -60.8141104721641 + endloop +endfacet +facet normal -0.8586164364012804 0.4957224306868824 0.13052619222001063 + outer loop + vertex -15.96240324159232 182.42097856533348 -60.40000000000007 + vertex -16.009617801666863 182.44823790430226 -60.8141104721641 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + endloop +endfacet +facet normal -0.5272028623657167 0.3043807145043161 0.7933533402912207 + outer loop + vertex -166.65522356461935 -76.98664256999758 -46.185640646055276 + vertex -166.36824799053363 -77.15232799494682 -45.93137084989864 + vertex -16.655223564620087 182.82097856533304 -46.18564064605519 + endloop +endfacet +facet normal -0.5272028623657167 0.3043807145043161 0.7933533402912207 + outer loop + vertex -16.36824799053434 182.65529314038386 -45.93137084989855 + vertex -16.655223564620087 182.82097856533304 -46.18564064605519 + vertex -166.36824799053363 -77.15232799494682 -45.93137084989864 + endloop +endfacet +facet normal 0.11303899832176205 -0.06526309611003275 0.991444861373816 + outer loop + vertex -167.70667407651416 -76.37958733391561 -46.345481322062696 + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + vertex -17.706674076514883 183.42803380141498 -46.345481322062604 + endloop +endfacet +facet normal 0.11303899832176205 -0.06526309611003275 0.991444861373816 + outer loop + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + vertex -17.706674076514883 183.42803380141498 -46.345481322062604 + vertex -167.3480438876469 -76.5866425699976 -46.40000000000017 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -166.00961780166648 -77.3593832310289 -44.38588952783612 + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + vertex -165.96240324159183 -77.38664256999762 -44.800000000000146 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -15.962403241592522 182.4209785653331 -44.80000000000006 + vertex -165.96240324159183 -77.38664256999762 -44.800000000000146 + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + endloop +endfacet +facet normal 0.3314135740355432 -0.1913417161825403 0.9238795325113052 + outer loop + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + vertex -18.040864210674947 183.62097856533347 -61.7856406460552 + endloop +endfacet +facet normal 0.3314135740355432 -0.1913417161825403 0.9238795325113052 + outer loop + vertex -17.706674076514588 183.42803380141552 -61.94548132206259 + vertex -18.040864210674947 183.62097856533347 -61.7856406460552 + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + endloop +endfacet +facet normal -0.6870641468694701 0.3966766701455793 0.608761429008723 + outer loop + vertex -166.14804388764693 -77.27946289302517 -45.60000000000017 + vertex -16.14804388764763 182.52815824230547 -45.60000000000008 + vertex -166.36824799053363 -77.15232799494682 -45.93137084989864 + endloop +endfacet +facet normal -0.6870641468694701 0.3966766701455793 0.608761429008723 + outer loop + vertex -16.36824799053434 182.65529314038386 -45.93137084989855 + vertex -166.36824799053363 -77.15232799494682 -45.93137084989864 + vertex -16.14804388764763 182.52815824230547 -45.60000000000008 + endloop +endfacet +facet normal -0.6870641468694763 0.3966766701455884 0.6087614290087102 + outer loop + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + vertex -16.14804388764743 182.52815824230598 -61.20000000000007 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + endloop +endfacet +facet normal -0.6870641468694763 0.3966766701455884 0.6087614290087102 + outer loop + vertex -16.36824799053407 182.6552931403843 -61.531370849898536 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + vertex -16.14804388764743 182.52815824230598 -61.20000000000007 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.13052619222006182 + outer loop + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -18.73368453370258 184.0209785653334 -60.40000000000009 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.13052619222006182 + outer loop + vertex -18.6864699736279 183.99371922636468 -60.814110472164124 + vertex -18.73368453370258 184.0209785653334 -60.40000000000009 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + endloop +endfacet +facet normal -0.33141357403563115 0.191341716182515 0.9238795325112789 + outer loop + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + vertex -16.98941369878013 183.01392332925155 -61.94548132206259 + endloop +endfacet +facet normal -0.33141357403563115 0.191341716182515 0.9238795325112789 + outer loop + vertex -16.655223564619817 182.82097856533352 -61.78564064605518 + vertex -16.98941369878013 183.01392332925155 -61.94548132206259 + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + endloop +endfacet +facet normal -0.8001031451912816 0.4619397662555984 0.38268343236511065 + outer loop + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + vertex -16.009617801666863 182.44823790430226 -60.8141104721641 + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + endloop +endfacet +facet normal -0.8001031451912816 0.4619397662555984 0.38268343236511065 + outer loop + vertex -16.14804388764743 182.52815824230598 -61.20000000000007 + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + vertex -16.009617801666863 182.44823790430226 -60.8141104721641 + endloop +endfacet +facet normal -0.3314135740355904 0.19134171618248866 0.923879532511299 + outer loop + vertex -166.98941369877969 -76.79369780607962 -46.345481322062675 + vertex -166.65522356461935 -76.98664256999758 -46.185640646055276 + vertex -16.9894136987804 183.013923329251 -46.34548132206258 + endloop +endfacet +facet normal -0.3314135740355904 0.19134171618248866 0.923879532511299 + outer loop + vertex -16.655223564620087 182.82097856533304 -46.18564064605519 + vertex -16.9894136987804 183.013923329251 -46.34548132206258 + vertex -166.65522356461935 -76.98664256999758 -46.185640646055276 + endloop +endfacet +facet normal 0.5272028623656437 -0.30438071450436416 0.7933533402912507 + outer loop + vertex -168.32783978476022 -76.02095714504841 -45.93137084989868 + vertex -168.0408642106745 -76.18664256999763 -46.18564064605529 + vertex -18.327839784760965 183.78666399028225 -45.93137084989857 + endloop +endfacet +facet normal 0.5272028623656437 -0.30438071450436416 0.7933533402912507 + outer loop + vertex -18.040864210675217 183.620978565333 -46.18564064605519 + vertex -18.327839784760965 183.78666399028225 -45.93137084989857 + vertex -168.0408642106745 -76.18664256999763 -46.18564064605529 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -15.96240324159232 182.42097856533348 -60.40000000000007 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + endloop +endfacet +facet normal 0.527202862365657 -0.3043807145043606 0.7933533402912432 + outer loop + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + vertex -18.32783978476067 183.7866639902828 -61.531370849898586 + endloop +endfacet +facet normal 0.527202862365657 -0.3043807145043606 0.7933533402912432 + outer loop + vertex -18.040864210674947 183.62097856533347 -61.7856406460552 + vertex -18.32783978476067 183.7866639902828 -61.531370849898586 + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + endloop +endfacet +facet normal 0.800103145191289 -0.46193976625562516 0.38268343236506275 + outer loop + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + vertex -18.6864699736279 183.99371922636468 -60.814110472164124 + endloop +endfacet +facet normal 0.800103145191289 -0.46193976625562516 0.38268343236506275 + outer loop + vertex -18.54804388764747 183.91379888836101 -61.20000000000009 + vertex -18.6864699736279 183.99371922636468 -60.814110472164124 + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + endloop +endfacet +facet normal 0.8586164364012767 -0.4957224306868802 -0.13052619222004344 + outer loop + vertex -168.7336845337021 -75.7866425699977 -44.8000000000002 + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + endloop +endfacet +facet normal 0.8586164364012767 -0.4957224306868802 -0.13052619222004344 + outer loop + vertex -18.686469973628217 183.99371922636428 -44.38588952783605 + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + endloop +endfacet +facet normal 0.8001031451912766 -0.46193976625561795 0.3826834323650973 + outer loop + vertex -168.68646997362748 -75.81390190896644 -45.214110472164236 + vertex -168.54804388764697 -75.89382224697013 -45.60000000000021 + vertex -18.68646997362817 183.99371922636428 -45.21411047216414 + endloop +endfacet +facet normal 0.8001031451912766 -0.46193976625561795 0.3826834323650973 + outer loop + vertex -18.548043887647673 183.9137988883606 -45.6000000000001 + vertex -18.68646997362817 183.99371922636428 -45.21411047216414 + vertex -168.54804388764697 -75.89382224697013 -45.60000000000021 + endloop +endfacet +facet normal -0.8001031451913015 0.4619397662555986 0.3826834323650685 + outer loop + vertex -166.00961780166642 -77.3593832310289 -45.21411047216418 + vertex -16.009617801667133 182.44823790430183 -45.214110472164094 + vertex -166.14804388764693 -77.27946289302517 -45.60000000000017 + endloop +endfacet +facet normal -0.8001031451913015 0.4619397662555986 0.3826834323650685 + outer loop + vertex -16.14804388764763 182.52815824230547 -45.60000000000008 + vertex -166.14804388764693 -77.27946289302517 -45.60000000000017 + vertex -16.009617801667133 182.44823790430183 -45.214110472164094 + endloop +endfacet +facet normal 0.11303899832181018 -0.06526309611005914 0.9914448613738089 + outer loop + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + vertex -17.706674076514588 183.42803380141552 -61.94548132206259 + endloop +endfacet +facet normal 0.11303899832181018 -0.06526309611005914 0.9914448613738089 + outer loop + vertex -17.34804388764736 183.22097856533352 -62.00000000000009 + vertex -17.706674076514588 183.42803380141552 -61.94548132206259 + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + endloop +endfacet +facet normal -0.1130389983218446 0.06526309610999587 0.9914448613738092 + outer loop + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + vertex -17.34804388764736 183.22097856533352 -62.00000000000009 + endloop +endfacet +facet normal -0.1130389983218446 0.06526309610999587 0.9914448613738092 + outer loop + vertex -16.98941369878013 183.01392332925155 -61.94548132206259 + vertex -17.34804388764736 183.22097856533352 -62.00000000000009 + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + endloop +endfacet +facet normal 0.800103145191292 -0.4619397662556044 -0.3826834323650818 + outer loop + vertex -168.54804388764703 -75.89382224697016 -44.000000000000185 + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + vertex -18.548043887647765 183.91379888836047 -44.000000000000085 + endloop +endfacet +facet normal 0.800103145191292 -0.4619397662556044 -0.3826834323650818 + outer loop + vertex -18.686469973628217 183.99371922636428 -44.38588952783605 + vertex -18.548043887647765 183.91379888836047 -44.000000000000085 + vertex -168.68646997362748 -75.81390190896644 -44.38588952783615 + endloop +endfacet +facet normal 0.5272028623657089 -0.30438071450432286 -0.7933533402912231 + outer loop + vertex -168.32783978476027 -76.02095714504847 -43.668629150101715 + vertex -18.327839784760986 183.78666399028216 -43.66862915010161 + vertex -168.04086421067456 -76.18664256999774 -43.41435935394507 + endloop +endfacet +facet normal 0.5272028623657089 -0.30438071450432286 -0.7933533402912231 + outer loop + vertex -18.040864210675263 183.62097856533293 -43.414359353944974 + vertex -168.04086421067456 -76.18664256999774 -43.41435935394507 + vertex -18.327839784760986 183.78666399028216 -43.66862915010161 + endloop +endfacet +facet normal -0.5272028623657145 0.3043807145043261 0.7933533402912182 + outer loop + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + vertex -16.655223564619817 182.82097856533352 -61.78564064605518 + endloop +endfacet +facet normal -0.5272028623657145 0.3043807145043261 0.7933533402912182 + outer loop + vertex -16.36824799053407 182.6552931403843 -61.531370849898536 + vertex -16.655223564619817 182.82097856533352 -61.78564064605518 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + endloop +endfacet +facet normal -0.8001031451912766 0.46193976625561795 -0.3826834323650973 + outer loop + vertex -166.00961780166648 -77.3593832310289 -44.38588952783612 + vertex -166.14804388764696 -77.2794628930252 -44.00000000000015 + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + endloop +endfacet +facet normal -0.8001031451912766 0.46193976625561795 -0.3826834323650973 + outer loop + vertex -16.148043887647678 182.52815824230547 -44.00000000000006 + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + vertex -166.14804388764696 -77.2794628930252 -44.00000000000015 + endloop +endfacet +facet normal -0.800103145191289 0.46193976625562516 -0.38268343236506275 + outer loop + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + endloop +endfacet +facet normal -0.800103145191289 0.46193976625562516 -0.38268343236506275 + outer loop + vertex -16.14804388764743 182.52815824230586 -59.60000000000007 + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + endloop +endfacet +facet normal 0.6870641468694548 -0.3966766701456156 0.6087614290087167 + outer loop + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + vertex -18.54804388764747 183.91379888836101 -61.20000000000009 + endloop +endfacet +facet normal 0.6870641468694548 -0.3966766701456156 0.6087614290087167 + outer loop + vertex -18.32783978476067 183.7866639902828 -61.531370849898586 + vertex -18.54804388764747 183.91379888836101 -61.20000000000009 + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + endloop +endfacet +facet normal 0.6870641468694431 -0.3966766701456088 0.6087614290087343 + outer loop + vertex -168.54804388764697 -75.89382224697013 -45.60000000000021 + vertex -168.32783978476022 -76.02095714504841 -45.93137084989868 + vertex -18.548043887647673 183.9137988883606 -45.6000000000001 + endloop +endfacet +facet normal 0.6870641468694431 -0.3966766701456088 0.6087614290087343 + outer loop + vertex -18.327839784760965 183.78666399028225 -45.93137084989857 + vertex -18.548043887647673 183.9137988883606 -45.6000000000001 + vertex -168.32783978476022 -76.02095714504841 -45.93137084989868 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.13052619222006182 + outer loop + vertex -182.19646627266468 -68.01390190896635 -60.81411047216424 + vertex -32.19646627266542 191.79371922636432 -60.814110472164145 + vertex -182.2436808327393 -67.9866425699976 -60.400000000000205 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.13052619222006182 + outer loop + vertex -32.24368083274005 191.82097856533298 -60.40000000000011 + vertex -182.2436808327393 -67.9866425699976 -60.400000000000205 + vertex -32.19646627266542 191.79371922636432 -60.814110472164145 + endloop +endfacet +facet normal -0.5272028623657089 0.30438071450432286 0.7933533402912231 + outer loop + vertex -180.16521986365657 -69.18664256999752 -61.78564064605528 + vertex -179.87824428957083 -69.35232799494672 -61.53137084989864 + vertex -30.16521986365729 190.6209785653331 -61.785640646055185 + endloop +endfacet +facet normal -0.5272028623657089 0.30438071450432286 0.7933533402912231 + outer loop + vertex -29.878244289571587 190.4552931403839 -61.53137084989855 + vertex -30.16521986365729 190.6209785653331 -61.785640646055185 + vertex -179.87824428957083 -69.35232799494672 -61.53137084989864 + endloop +endfacet +facet normal 0.33141357403563115 -0.191341716182515 -0.9238795325112789 + outer loop + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + vertex -18.040864210674993 183.62097856533347 -59.01435935394498 + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + endloop +endfacet +facet normal 0.33141357403563115 -0.191341716182515 -0.9238795325112789 + outer loop + vertex -17.7066740765147 183.42803380141538 -58.85451867793757 + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + vertex -18.040864210674993 183.62097856533347 -59.01435935394498 + endloop +endfacet +facet normal -0.5272028623656507 0.3043807145043513 -0.7933533402912508 + outer loop + vertex -180.16521986365666 -69.18664256999759 -59.01435935394506 + vertex -30.165219863657356 190.62097856533308 -59.014359353944975 + vertex -179.87824428957092 -69.3523279949468 -59.26862915010168 + endloop +endfacet +facet normal -0.5272028623656507 0.3043807145043513 -0.7933533402912508 + outer loop + vertex -29.87824428957163 190.45529314038384 -59.26862915010159 + vertex -179.87824428957092 -69.3523279949468 -59.26862915010168 + vertex -30.165219863657356 190.62097856533308 -59.014359353944975 + endloop +endfacet +facet normal -0.5272028623656865 0.3043807145043776 -0.7933533402912171 + outer loop + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -16.655223564619863 182.82097856533343 -59.01435935394496 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + endloop +endfacet +facet normal -0.5272028623656865 0.3043807145043776 -0.7933533402912171 + outer loop + vertex -16.368247990534137 182.65529314038423 -59.2686291501016 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -16.655223564619863 182.82097856533343 -59.01435935394496 + endloop +endfacet +facet normal 0.6870641468694763 -0.3966766701455884 -0.6087614290087102 + outer loop + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + vertex -18.327839784760762 183.78666399028262 -59.268629150101624 + endloop +endfacet +facet normal 0.6870641468694763 -0.3966766701455884 -0.6087614290087102 + outer loop + vertex -18.54804388764747 183.91379888836096 -59.600000000000094 + vertex -18.327839784760762 183.78666399028262 -59.268629150101624 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + endloop +endfacet +facet normal 0.33141357403559885 -0.19134171618256962 0.9238795325112792 + outer loop + vertex -181.55086050971173 -68.38664256999753 -61.78564064605529 + vertex -181.21667037555136 -68.5795873339155 -61.94548132206272 + vertex -31.55086050971244 191.42097856533306 -61.785640646055185 + endloop +endfacet +facet normal 0.33141357403559885 -0.19134171618256962 0.9238795325112792 + outer loop + vertex -31.216670375552106 191.22803380141514 -61.945481322062605 + vertex -31.55086050971244 191.42097856533306 -61.785640646055185 + vertex -181.21667037555136 -68.5795873339155 -61.94548132206272 + endloop +endfacet +facet normal 0.6870641468694431 -0.3966766701456088 0.6087614290087343 + outer loop + vertex -182.0580401866842 -68.09382224697002 -61.2000000000002 + vertex -181.8378360837974 -68.22095714504832 -61.53137084989868 + vertex -32.05804018668492 191.71379888836057 -61.20000000000012 + endloop +endfacet +facet normal 0.6870641468694431 -0.3966766701456088 0.6087614290087343 + outer loop + vertex -31.83783608379814 191.58666399028237 -61.53137084989857 + vertex -32.05804018668492 191.71379888836057 -61.20000000000012 + vertex -181.8378360837974 -68.22095714504832 -61.53137084989868 + endloop +endfacet +facet normal -0.3314135740355925 0.19134171618248988 0.923879532511298 + outer loop + vertex -180.49940999781688 -68.99369780607951 -61.945481322062676 + vertex -180.16521986365657 -69.18664256999752 -61.78564064605528 + vertex -30.49940999781767 190.81392332925108 -61.945481322062584 + endloop +endfacet +facet normal -0.3314135740355925 0.19134171618248988 0.923879532511298 + outer loop + vertex -30.16521986365729 190.6209785653331 -61.785640646055185 + vertex -30.49940999781767 190.81392332925108 -61.945481322062584 + vertex -180.16521986365657 -69.18664256999752 -61.78564064605528 + endloop +endfacet +facet normal -0.11303899832180349 0.06526309611005668 -0.9914448613738097 + outer loop + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + vertex -17.34804388764747 183.2209785653335 -58.800000000000075 + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + endloop +endfacet +facet normal -0.11303899832180349 0.06526309611005668 -0.9914448613738097 + outer loop + vertex -16.98941369878022 183.0139233292514 -58.85451867793757 + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + vertex -17.34804388764747 183.2209785653335 -58.800000000000075 + endloop +endfacet +facet normal -0.6870641468694701 0.3966766701455793 0.608761429008723 + outer loop + vertex -179.6580401866841 -69.47946289302507 -61.20000000000017 + vertex -29.6580401866849 190.32815824230553 -61.20000000000008 + vertex -179.87824428957083 -69.35232799494672 -61.53137084989864 + endloop +endfacet +facet normal -0.6870641468694701 0.3966766701455793 0.608761429008723 + outer loop + vertex -29.878244289571587 190.4552931403839 -61.53137084989855 + vertex -179.87824428957083 -69.35232799494672 -61.53137084989864 + vertex -29.6580401866849 190.32815824230553 -61.20000000000008 + endloop +endfacet +facet normal -0.800103145191292 0.4619397662556044 0.3826834323650818 + outer loop + vertex -179.51961410070365 -69.55938323102878 -60.8141104721642 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + vertex -179.6580401866841 -69.47946289302507 -61.20000000000017 + endloop +endfacet +facet normal -0.800103145191292 0.4619397662556044 0.3826834323650818 + outer loop + vertex -29.6580401866849 190.32815824230553 -61.20000000000008 + vertex -179.6580401866841 -69.47946289302507 -61.20000000000017 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + endloop +endfacet +facet normal -0.8586164364012767 0.4957224306868802 0.13052619222004344 + outer loop + vertex -179.51961410070365 -69.55938323102878 -60.8141104721642 + vertex -179.47239954062903 -69.58664256999755 -60.40000000000015 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + endloop +endfacet +facet normal -0.8586164364012767 0.4957224306868802 0.13052619222004344 + outer loop + vertex -29.47239954062979 190.22097856533307 -60.400000000000055 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + vertex -179.47239954062903 -69.58664256999755 -60.40000000000015 + endloop +endfacet +facet normal -0.6870641468694375 0.3966766701456056 -0.6087614290087427 + outer loop + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -16.14804388764743 182.52815824230586 -59.60000000000007 + endloop +endfacet +facet normal -0.6870641468694375 0.3966766701456056 -0.6087614290087427 + outer loop + vertex -16.368247990534137 182.65529314038423 -59.2686291501016 + vertex -16.14804388764743 182.52815824230586 -59.60000000000007 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + endloop +endfacet +facet normal 0.8586164364012804 -0.4957224306868824 -0.13052619222001063 + outer loop + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + vertex -18.686469973627926 183.99371922636473 -59.98588952783606 + endloop +endfacet +facet normal 0.8586164364012804 -0.4957224306868824 -0.13052619222001063 + outer loop + vertex -18.73368453370258 184.0209785653334 -60.40000000000009 + vertex -18.686469973627926 183.99371922636473 -59.98588952783606 + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + endloop +endfacet +facet normal 0.3314135740355904 -0.19134171618248866 -0.923879532511299 + outer loop + vertex -181.55086050971178 -68.38664256999762 -59.014359353945075 + vertex -31.55086050971253 191.42097856533306 -59.014359353944975 + vertex -181.21667037555144 -68.57958733391561 -58.85451867793769 + endloop +endfacet +facet normal 0.3314135740355904 -0.19134171618248866 -0.923879532511299 + outer loop + vertex -31.216670375552173 191.22803380141505 -58.85451867793758 + vertex -181.21667037555144 -68.57958733391561 -58.85451867793769 + vertex -31.55086050971253 191.42097856533306 -59.014359353944975 + endloop +endfacet +facet normal 0.6870641468694701 -0.3966766701455793 -0.608761429008723 + outer loop + vertex -181.83783608379747 -68.22095714504837 -59.26862915010171 + vertex -182.05804018668422 -68.09382224697006 -59.600000000000186 + vertex -31.83783608379823 191.58666399028223 -59.26862915010161 + endloop +endfacet +facet normal 0.6870641468694701 -0.3966766701455793 -0.608761429008723 + outer loop + vertex -32.05804018668494 191.71379888836057 -59.600000000000094 + vertex -31.83783608379823 191.58666399028223 -59.26862915010161 + vertex -182.05804018668422 -68.09382224697006 -59.600000000000186 + endloop +endfacet +facet normal -0.11303899832184441 0.06526309610999435 0.9914448613738092 + outer loop + vertex -180.85804018668415 -68.78664256999754 -62.00000000000017 + vertex -180.49940999781688 -68.99369780607951 -61.945481322062676 + vertex -30.858040186684896 191.02097856533317 -62.00000000000008 + endloop +endfacet +facet normal -0.11303899832184441 0.06526309610999435 0.9914448613738092 + outer loop + vertex -30.49940999781767 190.81392332925108 -61.945481322062584 + vertex -30.858040186684896 191.02097856533317 -62.00000000000008 + vertex -180.49940999781688 -68.99369780607951 -61.945481322062676 + endloop +endfacet +facet normal -0.6870641468694431 0.3966766701456088 -0.6087614290087343 + outer loop + vertex -179.65804018668416 -69.47946289302509 -59.60000000000015 + vertex -179.87824428957092 -69.3523279949468 -59.26862915010168 + vertex -29.658040186684875 190.32815824230553 -59.60000000000006 + endloop +endfacet +facet normal -0.6870641468694431 0.3966766701456088 -0.6087614290087343 + outer loop + vertex -29.87824428957163 190.45529314038384 -59.26862915010159 + vertex -29.658040186684875 190.32815824230553 -59.60000000000006 + vertex -179.87824428957092 -69.3523279949468 -59.26862915010168 + endloop +endfacet +facet normal 0.5272028623657167 -0.3043807145043161 -0.7933533402912207 + outer loop + vertex -181.83783608379747 -68.22095714504837 -59.26862915010171 + vertex -31.83783608379823 191.58666399028223 -59.26862915010161 + vertex -181.55086050971178 -68.38664256999762 -59.014359353945075 + endloop +endfacet +facet normal 0.5272028623657167 -0.3043807145043161 -0.7933533402912207 + outer loop + vertex -31.55086050971253 191.42097856533306 -59.014359353944975 + vertex -181.55086050971178 -68.38664256999762 -59.014359353945075 + vertex -31.83783608379823 191.58666399028223 -59.26862915010161 + endloop +endfacet +facet normal -0.33141357403555854 0.191341716182552 -0.9238795325112973 + outer loop + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + vertex -16.98941369878022 183.0139233292514 -58.85451867793757 + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + endloop +endfacet +facet normal -0.33141357403555854 0.191341716182552 -0.9238795325112973 + outer loop + vertex -16.655223564619863 182.82097856533343 -59.01435935394496 + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -16.98941369878022 183.0139233292514 -58.85451867793757 + endloop +endfacet +facet normal 0.5272028623657145 -0.3043807145043261 -0.7933533402912182 + outer loop + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + vertex -18.327839784760762 183.78666399028262 -59.268629150101624 + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + endloop +endfacet +facet normal 0.5272028623657145 -0.3043807145043261 -0.7933533402912182 + outer loop + vertex -18.040864210674993 183.62097856533347 -59.01435935394498 + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + vertex -18.327839784760762 183.78666399028262 -59.268629150101624 + endloop +endfacet +facet normal 0.8001031451912766 -0.46193976625561795 0.3826834323650973 + outer loop + vertex -182.19646627266468 -68.01390190896635 -60.81411047216424 + vertex -182.0580401866842 -68.09382224697002 -61.2000000000002 + vertex -32.19646627266542 191.79371922636432 -60.814110472164145 + endloop +endfacet +facet normal 0.8001031451912766 -0.46193976625561795 0.3826834323650973 + outer loop + vertex -32.05804018668492 191.71379888836057 -61.20000000000012 + vertex -32.19646627266542 191.79371922636432 -60.814110472164145 + vertex -182.0580401866842 -68.09382224697002 -61.2000000000002 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -179.47239954062903 -69.58664256999755 -60.40000000000015 + vertex -179.51961410070365 -69.5593832310288 -59.985889527836115 + vertex -29.47239954062979 190.22097856533307 -60.400000000000055 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -29.519614100704377 190.24823790430187 -59.98588952783603 + vertex -29.47239954062979 190.22097856533307 -60.400000000000055 + vertex -179.51961410070365 -69.5593832310288 -59.985889527836115 + endloop +endfacet +facet normal 0.5272028623656437 -0.30438071450436416 0.7933533402912507 + outer loop + vertex -181.8378360837974 -68.22095714504832 -61.53137084989868 + vertex -181.55086050971173 -68.38664256999753 -61.78564064605529 + vertex -31.83783608379814 191.58666399028237 -61.53137084989857 + endloop +endfacet +facet normal 0.5272028623656437 -0.30438071450436416 0.7933533402912507 + outer loop + vertex -31.55086050971244 191.42097856533306 -61.785640646055185 + vertex -31.83783608379814 191.58666399028237 -61.53137084989857 + vertex -181.55086050971173 -68.38664256999753 -61.78564064605529 + endloop +endfacet +facet normal 0.1130389983218446 -0.06526309610999587 -0.9914448613738092 + outer loop + vertex -181.21667037555144 -68.57958733391561 -58.85451867793769 + vertex -31.216670375552173 191.22803380141505 -58.85451867793758 + vertex -180.8580401866842 -68.7866425699976 -58.800000000000175 + endloop +endfacet +facet normal 0.1130389983218446 -0.06526309610999587 -0.9914448613738092 + outer loop + vertex -30.858040186684942 191.02097856533302 -58.80000000000008 + vertex -180.8580401866842 -68.7866425699976 -58.800000000000175 + vertex -31.216670375552173 191.22803380141505 -58.85451867793758 + endloop +endfacet +facet normal 0.8586164364012767 -0.4957224306868802 -0.13052619222004297 + outer loop + vertex -182.1964662726647 -68.01390190896635 -59.98588952783617 + vertex -182.2436808327393 -67.9866425699976 -60.400000000000205 + vertex -32.19646627266542 191.79371922636426 -59.985889527836086 + endloop +endfacet +facet normal 0.8586164364012767 -0.4957224306868802 -0.13052619222004297 + outer loop + vertex -32.24368083274005 191.82097856533298 -60.40000000000011 + vertex -32.19646627266542 191.79371922636426 -59.985889527836086 + vertex -182.2436808327393 -67.9866425699976 -60.400000000000205 + endloop +endfacet +facet normal 0.8001031451912816 -0.4619397662555984 -0.38268343236511065 + outer loop + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + vertex -18.686469973627926 183.99371922636473 -59.98588952783606 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + endloop +endfacet +facet normal 0.8001031451912816 -0.4619397662555984 -0.38268343236511065 + outer loop + vertex -18.54804388764747 183.91379888836096 -59.600000000000094 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + vertex -18.686469973627926 183.99371922636473 -59.98588952783606 + endloop +endfacet +facet normal 0.11303899832176341 -0.06526309611003213 0.9914448613738159 + outer loop + vertex -181.21667037555136 -68.5795873339155 -61.94548132206272 + vertex -180.85804018668415 -68.78664256999754 -62.00000000000017 + vertex -31.216670375552106 191.22803380141514 -61.945481322062605 + endloop +endfacet +facet normal 0.11303899832176341 -0.06526309611003213 0.9914448613738159 + outer loop + vertex -30.858040186684896 191.02097856533317 -62.00000000000008 + vertex -31.216670375552106 191.22803380141514 -61.945481322062605 + vertex -180.85804018668415 -68.78664256999754 -62.00000000000017 + endloop +endfacet +facet normal 0.8001031451913015 -0.4619397662555986 -0.3826834323650685 + outer loop + vertex -182.05804018668422 -68.09382224697006 -59.600000000000186 + vertex -182.1964662726647 -68.01390190896635 -59.98588952783617 + vertex -32.05804018668494 191.71379888836057 -59.600000000000094 + endloop +endfacet +facet normal 0.8001031451913015 -0.4619397662555986 -0.3826834323650685 + outer loop + vertex -32.19646627266542 191.79371922636426 -59.985889527836086 + vertex -32.05804018668494 191.71379888836057 -59.600000000000094 + vertex -182.1964662726647 -68.01390190896635 -59.98588952783617 + endloop +endfacet +facet normal -0.8001031451912766 0.46193976625561795 -0.3826834323650973 + outer loop + vertex -179.51961410070365 -69.5593832310288 -59.985889527836115 + vertex -179.65804018668416 -69.47946289302509 -59.60000000000015 + vertex -29.519614100704377 190.24823790430187 -59.98588952783603 + endloop +endfacet +facet normal -0.8001031451912766 0.46193976625561795 -0.3826834323650973 + outer loop + vertex -29.658040186684875 190.32815824230553 -59.60000000000006 + vertex -29.519614100704377 190.24823790430187 -59.98588952783603 + vertex -179.65804018668416 -69.47946289302509 -59.60000000000015 + endloop +endfacet +facet normal 0.1130389983218446 -0.06526309610999587 -0.9914448613738092 + outer loop + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + vertex -17.7066740765147 183.42803380141538 -58.85451867793757 + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + endloop +endfacet +facet normal 0.1130389983218446 -0.06526309610999587 -0.9914448613738092 + outer loop + vertex -17.34804388764747 183.2209785653335 -58.800000000000075 + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + vertex -17.7066740765147 183.42803380141538 -58.85451867793757 + endloop +endfacet +facet normal -0.8001031451912816 0.4619397662555984 0.38268343236511065 + outer loop + vertex -179.65804018668445 -69.47946289302554 -45.60000000000019 + vertex -179.51961410070393 -69.55938323102926 -45.21411047216423 + vertex -29.658040186685124 190.3281582423051 -45.6000000000001 + endloop +endfacet +facet normal -0.8001031451912816 0.4619397662555984 0.38268343236511065 + outer loop + vertex -29.519614100704626 190.24823790430136 -45.21411047216414 + vertex -29.658040186685124 190.3281582423051 -45.6000000000001 + vertex -179.51961410070393 -69.55938323102926 -45.21411047216423 + endloop +endfacet +facet normal -0.8586164364012804 0.4957224306868824 0.13052619222001063 + outer loop + vertex -179.51961410070393 -69.55938323102926 -45.21411047216423 + vertex -179.4723995406293 -69.58664256999803 -44.800000000000196 + vertex -29.519614100704626 190.24823790430136 -45.21411047216414 + endloop +endfacet +facet normal -0.8586164364012804 0.4957224306868824 0.13052619222001063 + outer loop + vertex -29.47239954063004 190.22097856533262 -44.800000000000104 + vertex -29.519614100704626 190.24823790430136 -45.21411047216414 + vertex -179.4723995406293 -69.58664256999803 -44.800000000000196 + endloop +endfacet +facet normal -0.800103145191289 0.46193976625562516 -0.38268343236506275 + outer loop + vertex -179.51961410070393 -69.55938323102929 -44.38588952783616 + vertex -179.65804018668445 -69.4794628930256 -44.0000000000002 + vertex -29.519614100704672 190.24823790430136 -44.38588952783607 + endloop +endfacet +facet normal -0.800103145191289 0.46193976625562516 -0.38268343236506275 + outer loop + vertex -29.65804018668519 190.32815824230505 -44.00000000000011 + vertex -29.519614100704672 190.24823790430136 -44.38588952783607 + vertex -179.65804018668445 -69.4794628930256 -44.0000000000002 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -179.4723995406293 -69.58664256999803 -44.800000000000196 + vertex -179.51961410070393 -69.55938323102929 -44.38588952783616 + vertex -29.47239954063004 190.22097856533262 -44.800000000000104 + endloop +endfacet +facet normal -0.8586164364012794 0.4957224306868705 -0.13052619222006182 + outer loop + vertex -29.519614100704672 190.24823790430136 -44.38588952783607 + vertex -29.47239954063004 190.22097856533262 -44.800000000000104 + vertex -179.51961410070393 -69.55938323102929 -44.38588952783616 + endloop +endfacet +facet normal -0.11303899832176205 0.06526309611003275 -0.991444861373816 + outer loop + vertex -180.8580401866842 -68.7866425699976 -58.800000000000175 + vertex -30.858040186684942 191.02097856533302 -58.80000000000008 + vertex -180.49940999781697 -68.99369780607962 -58.85451867793765 + endloop +endfacet +facet normal -0.11303899832176205 0.06526309611003275 -0.991444861373816 + outer loop + vertex -30.49940999781769 190.81392332925108 -58.854518677937556 + vertex -180.49940999781697 -68.99369780607962 -58.85451867793765 + vertex -30.858040186684942 191.02097856533302 -58.80000000000008 + endloop +endfacet +facet normal -0.11303899832181018 0.06526309611005914 -0.9914448613738089 + outer loop + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + vertex -180.49940999781728 -68.99369780608006 -43.254518677937675 + endloop +endfacet +facet normal -0.11303899832181018 0.06526309611005914 -0.9914448613738089 + outer loop + vertex -30.49940999781798 190.81392332925054 -43.254518677937604 + vertex -180.49940999781728 -68.99369780608006 -43.254518677937675 + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + endloop +endfacet +facet normal 0.8586164364012804 -0.4957224306868823 -0.13052619222001038 + outer loop + vertex -182.196466272665 -68.01390190896684 -44.38588952783617 + vertex -182.24368083273959 -67.98664256999808 -44.8000000000002 + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + endloop +endfacet +facet normal 0.8586164364012804 -0.4957224306868823 -0.13052619222001038 + outer loop + vertex -32.243680832740345 191.82097856533252 -44.80000000000011 + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + vertex -182.24368083273959 -67.98664256999808 -44.8000000000002 + endloop +endfacet +facet normal 0.6870641468694348 -0.39667667014560976 0.6087614290087431 + outer loop + vertex -182.05804018668445 -68.09382224697053 -45.6000000000002 + vertex -181.8378360837977 -68.2209571450488 -45.93137084989867 + vertex -32.05804018668523 191.7137988883601 -45.60000000000011 + endloop +endfacet +facet normal 0.6870641468694348 -0.39667667014560976 0.6087614290087431 + outer loop + vertex -31.837836083798436 191.58666399028183 -45.93137084989858 + vertex -32.05804018668523 191.7137988883601 -45.60000000000011 + vertex -181.8378360837977 -68.2209571450488 -45.93137084989867 + endloop +endfacet +facet normal -0.3314135740355432 0.1913417161825403 -0.9238795325113052 + outer loop + vertex -180.49940999781728 -68.99369780608006 -43.254518677937675 + vertex -30.49940999781798 190.81392332925054 -43.254518677937604 + vertex -180.16521986365692 -69.18664256999809 -43.41435935394508 + endloop +endfacet +facet normal -0.3314135740355432 0.1913417161825403 -0.9238795325113052 + outer loop + vertex -30.165219863657626 190.62097856533256 -43.414359353944995 + vertex -180.16521986365692 -69.18664256999809 -43.41435935394508 + vertex -30.49940999781798 190.81392332925054 -43.254518677937604 + endloop +endfacet +facet normal 0.5272028623656865 -0.3043807145043776 0.7933533402912171 + outer loop + vertex -181.8378360837977 -68.2209571450488 -45.93137084989867 + vertex -181.550860509712 -68.38664256999806 -46.185640646055305 + vertex -31.837836083798436 191.58666399028183 -45.93137084989858 + endloop +endfacet +facet normal 0.5272028623656865 -0.3043807145043776 0.7933533402912171 + outer loop + vertex -31.55086050971271 191.42097856533266 -46.18564064605523 + vertex -31.837836083798436 191.58666399028183 -45.93137084989858 + vertex -181.550860509712 -68.38664256999806 -46.185640646055305 + endloop +endfacet +facet normal 0.527202862365685 -0.3043807145043091 -0.7933533402912443 + outer loop + vertex -181.83783608379778 -68.22095714504887 -43.66862915010171 + vertex -31.837836083798525 191.58666399028175 -43.668629150101616 + vertex -181.55086050971207 -68.38664256999812 -43.414359353945095 + endloop +endfacet +facet normal 0.527202862365685 -0.3043807145043091 -0.7933533402912443 + outer loop + vertex -31.550860509712756 191.42097856533258 -43.414359353945 + vertex -181.55086050971207 -68.38664256999812 -43.414359353945095 + vertex -31.837836083798525 191.58666399028175 -43.668629150101616 + endloop +endfacet +facet normal 0.11303899832180349 -0.06526309611005668 0.9914448613738097 + outer loop + vertex -181.21667037555162 -68.57958733391597 -46.3454813220627 + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + vertex -31.21667037555242 191.2280338014146 -46.345481322062625 + endloop +endfacet +facet normal 0.11303899832180349 -0.06526309611005668 0.9914448613738097 + outer loop + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + vertex -31.21667037555242 191.2280338014146 -46.345481322062625 + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + endloop +endfacet +facet normal -0.5272028623657145 0.3043807145043261 0.7933533402912182 + outer loop + vertex -180.16521986365683 -69.18664256999797 -46.1856406460553 + vertex -179.87824428957114 -69.35232799494723 -45.931370849898656 + vertex -30.16521986365756 190.6209785653327 -46.18564064605521 + endloop +endfacet +facet normal -0.5272028623657145 0.3043807145043261 0.7933533402912182 + outer loop + vertex -29.878244289571878 190.4552931403834 -45.93137084989857 + vertex -30.16521986365756 190.6209785653327 -46.18564064605521 + vertex -179.87824428957114 -69.35232799494723 -45.931370849898656 + endloop +endfacet +facet normal -0.6870641468694763 0.3966766701455884 0.6087614290087102 + outer loop + vertex -179.65804018668445 -69.47946289302554 -45.60000000000019 + vertex -29.658040186685124 190.3281582423051 -45.6000000000001 + vertex -179.87824428957114 -69.35232799494723 -45.931370849898656 + endloop +endfacet +facet normal -0.6870641468694763 0.3966766701455884 0.6087614290087102 + outer loop + vertex -29.878244289571878 190.4552931403834 -45.93137084989857 + vertex -179.87824428957114 -69.35232799494723 -45.931370849898656 + vertex -29.658040186685124 190.3281582423051 -45.6000000000001 + endloop +endfacet +facet normal 0.687064146869501 -0.39667667014558583 -0.6087614290086841 + outer loop + vertex -181.83783608379778 -68.22095714504887 -43.66862915010171 + vertex -182.05804018668448 -68.09382224697055 -44.0000000000002 + vertex -31.837836083798525 191.58666399028175 -43.668629150101616 + endloop +endfacet +facet normal 0.687064146869501 -0.39667667014558583 -0.6087614290086841 + outer loop + vertex -32.058040186685254 191.71379888836003 -44.000000000000114 + vertex -31.837836083798525 191.58666399028175 -43.668629150101616 + vertex -182.05804018668448 -68.09382224697055 -44.0000000000002 + endloop +endfacet +facet normal 0.3314135740356313 -0.1913417161825151 -0.9238795325112787 + outer loop + vertex -181.55086050971207 -68.38664256999812 -43.414359353945095 + vertex -31.550860509712756 191.42097856533258 -43.414359353945 + vertex -181.21667037555173 -68.57958733391607 -43.254518677937675 + endloop +endfacet +facet normal 0.3314135740356313 -0.1913417161825151 -0.9238795325112787 + outer loop + vertex -31.216670375552443 191.22803380141454 -43.2545186779376 + vertex -181.21667037555173 -68.57958733391607 -43.254518677937675 + vertex -31.550860509712756 191.42097856533258 -43.414359353945 + endloop +endfacet +facet normal -0.5272028623656588 0.304380714504356 -0.7933533402912438 + outer loop + vertex -180.16521986365692 -69.18664256999809 -43.41435935394508 + vertex -30.165219863657626 190.62097856533256 -43.414359353944995 + vertex -179.87824428957117 -69.35232799494727 -43.6686291501017 + endloop +endfacet +facet normal -0.5272028623656588 0.304380714504356 -0.7933533402912438 + outer loop + vertex -29.8782442895719 190.45529314038336 -43.66862915010161 + vertex -179.87824428957117 -69.35232799494727 -43.6686291501017 + vertex -30.165219863657626 190.62097856533256 -43.414359353944995 + endloop +endfacet +facet normal 0.8001031451912816 -0.46193976625559835 -0.38268343236511043 + outer loop + vertex -182.196466272665 -68.01390190896684 -44.38588952783617 + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + vertex -182.05804018668448 -68.09382224697055 -44.0000000000002 + endloop +endfacet +facet normal 0.8001031451912816 -0.46193976625559835 -0.38268343236511043 + outer loop + vertex -32.058040186685254 191.71379888836003 -44.000000000000114 + vertex -182.05804018668448 -68.09382224697055 -44.0000000000002 + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + endloop +endfacet +facet normal 0.800103145191289 -0.46193976625562516 0.38268343236506275 + outer loop + vertex -182.05804018668445 -68.09382224697053 -45.6000000000002 + vertex -32.05804018668523 191.7137988883601 -45.60000000000011 + vertex -182.19646627266496 -68.01390190896683 -45.21411047216423 + endloop +endfacet +facet normal 0.800103145191289 -0.46193976625562516 0.38268343236506275 + outer loop + vertex -32.19646627266567 191.79371922636386 -45.214110472164144 + vertex -182.19646627266496 -68.01390190896683 -45.21411047216423 + vertex -32.05804018668523 191.7137988883601 -45.60000000000011 + endloop +endfacet +facet normal -0.33141357403559885 0.19134171618256962 -0.9238795325112792 + outer loop + vertex -180.49940999781697 -68.99369780607962 -58.85451867793765 + vertex -30.49940999781769 190.81392332925108 -58.854518677937556 + vertex -180.16521986365666 -69.18664256999759 -59.01435935394506 + endloop +endfacet +facet normal -0.33141357403559885 0.19134171618256962 -0.9238795325112792 + outer loop + vertex -30.165219863657356 190.62097856533308 -59.014359353944975 + vertex -180.16521986365666 -69.18664256999759 -59.01435935394506 + vertex -30.49940999781769 190.81392332925108 -58.854518677937556 + endloop +endfacet +facet normal -0.6870641468694548 0.3966766701456156 -0.6087614290087167 + outer loop + vertex -179.65804018668445 -69.4794628930256 -44.0000000000002 + vertex -179.87824428957117 -69.35232799494727 -43.6686291501017 + vertex -29.65804018668519 190.32815824230505 -44.00000000000011 + endloop +endfacet +facet normal -0.6870641468694548 0.3966766701456156 -0.6087614290087167 + outer loop + vertex -29.8782442895719 190.45529314038336 -43.66862915010161 + vertex -29.65804018668519 190.32815824230505 -44.00000000000011 + vertex -179.87824428957117 -69.35232799494727 -43.6686291501017 + endloop +endfacet +facet normal 0.1130389983218446 -0.06526309610999587 -0.9914448613738092 + outer loop + vertex -181.21667037555173 -68.57958733391607 -43.254518677937675 + vertex -31.216670375552443 191.22803380141454 -43.2545186779376 + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + endloop +endfacet +facet normal 0.1130389983218446 -0.06526309610999587 -0.9914448613738092 + outer loop + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + vertex -180.8580401866845 -68.7866425699981 -43.20000000000018 + vertex -31.216670375552443 191.22803380141454 -43.2545186779376 + endloop +endfacet +facet normal 0.33141357403555854 -0.191341716182552 0.9238795325112973 + outer loop + vertex -181.550860509712 -68.38664256999806 -46.185640646055305 + vertex -181.21667037555162 -68.57958733391597 -46.3454813220627 + vertex -31.55086050971271 191.42097856533266 -46.18564064605523 + endloop +endfacet +facet normal 0.33141357403555854 -0.191341716182552 0.9238795325112973 + outer loop + vertex -31.21667037555242 191.2280338014146 -46.345481322062625 + vertex -31.55086050971271 191.42097856533266 -46.18564064605523 + vertex -181.21667037555162 -68.57958733391597 -46.3454813220627 + endloop +endfacet +facet normal -0.33141357403563115 0.191341716182515 0.9238795325112789 + outer loop + vertex -180.49940999781717 -68.99369780608001 -46.3454813220627 + vertex -180.16521986365683 -69.18664256999797 -46.1856406460553 + vertex -30.499409997817892 190.81392332925068 -46.345481322062625 + endloop +endfacet +facet normal -0.33141357403563115 0.191341716182515 0.9238795325112789 + outer loop + vertex -30.16521986365756 190.6209785653327 -46.18564064605521 + vertex -30.499409997817892 190.81392332925068 -46.345481322062625 + vertex -180.16521986365683 -69.18664256999797 -46.1856406460553 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.130526192220062 + outer loop + vertex -182.19646627266496 -68.01390190896683 -45.21411047216423 + vertex -32.19646627266567 191.79371922636386 -45.214110472164144 + vertex -182.24368083273959 -67.98664256999808 -44.8000000000002 + endloop +endfacet +facet normal 0.8586164364012794 -0.4957224306868705 0.130526192220062 + outer loop + vertex -32.243680832740345 191.82097856533252 -44.80000000000011 + vertex -182.24368083273959 -67.98664256999808 -44.8000000000002 + vertex -32.19646627266567 191.79371922636386 -45.214110472164144 + endloop +endfacet +facet normal -0.1130389983218446 0.06526309610999587 0.9914448613738092 + outer loop + vertex -180.85804018668438 -68.78664256999798 -46.4000000000002 + vertex -180.49940999781717 -68.99369780608001 -46.3454813220627 + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + endloop +endfacet +facet normal -0.1130389983218446 0.06526309610999587 0.9914448613738092 + outer loop + vertex -30.499409997817892 190.81392332925068 -46.345481322062625 + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + vertex -180.49940999781717 -68.99369780608001 -46.3454813220627 + endloop +endfacet +facet normal -0.8586164364012802 0.49572243068687094 -0.13052619222005538 + outer loop + vertex -182.73378697496332 -67.70367965685304 -61.85881904510269 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + vertex -32.73378697496404 192.1039414784776 -61.8588190451026 + endloop +endfacet +facet normal -0.8586164364012802 0.49572243068687094 -0.13052619222005538 + outer loop + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -32.73378697496404 192.1039414784776 -61.8588190451026 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 -1.5003536199769236e-15 + outer loop + vertex -182.76329607501006 -67.68664256999776 -56.40000000000017 + vertex -32.76329607501074 192.12097856533296 -56.40000000000008 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 -1.5003536199769236e-15 + outer loop + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -182.76329607500998 -67.68664256999759 -61.60000000000018 + vertex -32.76329607501074 192.12097856533296 -56.40000000000008 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 4.464960093105168e-15 + outer loop + vertex -182.4168859134963 -67.88664256999773 -56.40000000000017 + vertex -182.4168859134963 -67.88664256999775 -56.00000000000017 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 4.464960093105168e-15 + outer loop + vertex -32.41688591349703 191.92097856533286 -56.00000000000008 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + vertex -182.4168859134963 -67.88664256999775 -56.00000000000017 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -179.44268224691507 -69.60379985752294 -58.20000000000017 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + vertex -179.44268224691507 -69.60379985752294 -58.20000000000017 + endloop +endfacet +facet normal -0.8001031451912836 0.461939766255622 -0.3826834323650778 + outer loop + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + vertex -182.73378697496332 -67.70367965685304 -61.85881904510269 + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + endloop +endfacet +facet normal -0.8001031451912836 0.461939766255622 -0.3826834323650778 + outer loop + vertex -32.73378697496404 192.1039414784776 -61.8588190451026 + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -182.73378697496332 -67.70367965685304 -61.85881904510269 + endloop +endfacet +facet normal -0.6123724356958129 0.3535533905932375 0.7071067811865498 + outer loop + vertex -179.44268224691507 -69.60379985752294 -58.20000000000017 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + endloop +endfacet +facet normal -0.6123724356958129 0.3535533905932375 0.7071067811865498 + outer loop + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -3.1938264052337197e-15 -3.964006195623615e-14 1.0 + outer loop + vertex -182.4168859134963 -67.88664256999775 -56.00000000000017 + vertex -181.20445034819804 -68.58664256999772 -56.0000000000002 + vertex -32.41688591349703 191.92097856533286 -56.00000000000008 + endloop +endfacet +facet normal -3.1938264052337197e-15 -3.964006195623615e-14 1.0 + outer loop + vertex -31.204450348198748 191.22097856533293 -56.00000000000009 + vertex -32.41688591349703 191.92097856533286 -56.00000000000008 + vertex -181.20445034819804 -68.58664256999772 -56.0000000000002 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -182.76329607501006 -67.68664256999776 -56.40000000000017 + vertex -182.4168859134963 -67.88664256999773 -56.40000000000017 + vertex -32.76329607501074 192.12097856533296 -56.40000000000008 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + vertex -32.76329607501074 192.12097856533296 -56.40000000000008 + vertex -182.4168859134963 -67.88664256999773 -56.40000000000017 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -181.204450348198 -68.58664256999766 -58.200000000000195 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + vertex -181.20445034819804 -68.58664256999772 -56.0000000000002 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -31.204450348198748 191.22097856533293 -56.00000000000009 + vertex -181.20445034819804 -68.58664256999772 -56.0000000000002 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 1.052465433482836e-15 + outer loop + vertex -177.30733603116812 -70.83664256999782 -49.465685424949434 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 1.052465433482836e-15 + outer loop + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -177.307336031168 -70.83664256999761 -55.73431457505093 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -165.44278799932118 -77.68664256999766 -43.60000000000017 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -165.78919816083487 -77.48664256999749 -48.80000000000017 + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + vertex -165.4427879993211 -77.6866425699975 -48.80000000000017 + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -2.7394170869210427e-15 + outer loop + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -2.7394170869210427e-15 + outer loop + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -167.00163372613312 -76.7866425699975 -49.200000000000166 + vertex -17.001633726133825 183.02097856533314 -49.200000000000074 + vertex -165.78919816083487 -77.48664256999749 -49.200000000000166 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -15.789198160835609 182.3209785653332 -49.20000000000008 + vertex -165.78919816083487 -77.48664256999749 -49.200000000000166 + vertex -17.001633726133825 183.02097856533314 -49.200000000000074 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -167.00163372613295 -76.7866425699972 -58.200000000000166 + vertex -167.00163372613298 -76.7866425699973 -56.00000000000017 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -17.00163372613369 183.02097856533337 -56.00000000000008 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -167.00163372613298 -76.7866425699973 -56.00000000000017 + endloop +endfacet +facet normal -3.1938264052335588e-15 -3.964006195623625e-14 1.0 + outer loop + vertex -167.00163372613298 -76.7866425699973 -56.00000000000017 + vertex -165.78919816083476 -77.48664256999727 -56.0000000000002 + vertex -17.00163372613369 183.02097856533337 -56.00000000000008 + endloop +endfacet +facet normal -3.1938264052335588e-15 -3.964006195623625e-14 1.0 + outer loop + vertex -15.78919816083545 182.32097856533338 -56.000000000000114 + vertex -17.00163372613369 183.02097856533337 -56.00000000000008 + vertex -165.78919816083476 -77.48664256999727 -56.0000000000002 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -168.76340182741606 -75.76948528247226 -47.00000000000018 + vertex -18.763401827416754 184.03813585285843 -47.00000000000008 + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + vertex -18.763401827416754 184.03813585285843 -47.00000000000008 + endloop +endfacet +facet normal 0.6123724356958129 -0.3535533905932375 -0.7071067811865498 + outer loop + vertex -170.89874804316315 -74.53664256999762 -49.46568542494941 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + vertex -168.76340182741606 -75.76948528247226 -47.00000000000018 + endloop +endfacet +facet normal 0.6123724356958129 -0.3535533905932375 -0.7071067811865498 + outer loop + vertex -18.763401827416754 184.03813585285843 -47.00000000000008 + vertex -168.76340182741606 -75.76948528247226 -47.00000000000018 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.6123724356957987 -0.35355339059327445 0.7071067811865437 + outer loop + vertex -168.7634018274159 -75.7694852824719 -58.200000000000166 + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + endloop +endfacet +facet normal 0.6123724356957987 -0.35355339059327445 0.7071067811865437 + outer loop + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + vertex -170.89874804316304 -74.53664256999741 -55.73431457505091 + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + vertex -15.78919816083545 182.32097856533338 -56.40000000000011 + vertex -165.78919816083476 -77.48664256999727 -56.0000000000002 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -15.78919816083545 182.32097856533338 -56.000000000000114 + vertex -165.78919816083476 -77.48664256999727 -56.0000000000002 + vertex -15.78919816083545 182.32097856533338 -56.40000000000011 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -165.78919816083476 -77.48664256999727 -56.400000000000205 + vertex -165.44278799932096 -77.68664256999723 -56.400000000000205 + vertex -15.78919816083545 182.32097856533338 -56.40000000000011 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -15.442787999321691 182.12097856533347 -56.40000000000011 + vertex -15.78919816083545 182.32097856533338 -56.40000000000011 + vertex -165.44278799932096 -77.68664256999723 -56.400000000000205 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -165.78919816083487 -77.48664256999749 -48.80000000000017 + vertex -165.78919816083487 -77.48664256999749 -49.200000000000166 + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -15.789198160835609 182.3209785653332 -49.20000000000008 + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + vertex -165.78919816083487 -77.48664256999749 -49.200000000000166 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -167.00163372613315 -76.78664256999758 -47.00000000000017 + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + vertex -167.00163372613312 -76.7866425699975 -49.200000000000166 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -17.001633726133825 183.02097856533314 -49.200000000000074 + vertex -167.00163372613312 -76.7866425699975 -49.200000000000166 + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + endloop +endfacet +facet normal 0.6870641468694697 -0.3966766701455846 -0.6087614290087203 + outer loop + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + endloop +endfacet +facet normal 0.6870641468694697 -0.3966766701455846 -0.6087614290087203 + outer loop + vertex -15.696440967410249 182.26742517474028 -62.307106781186654 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + endloop +endfacet +facet normal 0.3314135740356084 -0.19134171618249907 -0.9238795325112903 + outer loop + vertex -166.0846695350633 -77.31605209254832 -62.56592582628924 + vertex -16.084669535064027 182.49156904278234 -62.56592582628915 + vertex -165.87580070121308 -77.43664256999705 -62.46602540378463 + endloop +endfacet +facet normal 0.3314135740356084 -0.19134171618249907 -0.9238795325112903 + outer loop + vertex -15.875800701213794 182.37097856533364 -62.466025403784535 + vertex -165.87580070121308 -77.43664256999705 -62.46602540378463 + vertex -16.084669535064027 182.49156904278234 -62.56592582628915 + endloop +endfacet +facet normal 0.1130389983218544 -0.06526309611000013 -0.9914448613738078 + outer loop + vertex -166.30881340310532 -77.18664256999705 -62.60000000000018 + vertex -16.308813403106058 182.6209785653336 -62.60000000000009 + vertex -166.0846695350633 -77.31605209254832 -62.56592582628924 + endloop +endfacet +facet normal 0.1130389983218544 -0.06526309611000013 -0.9914448613738078 + outer loop + vertex -16.084669535064027 182.49156904278234 -62.56592582628915 + vertex -166.0846695350633 -77.31605209254832 -62.56592582628924 + vertex -16.308813403106058 182.6209785653336 -62.60000000000009 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -170.81214550278446 -74.5866425699972 -62.6000000000002 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + vertex -166.30881340310532 -77.18664256999705 -62.60000000000018 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -16.308813403106058 182.6209785653336 -62.60000000000009 + vertex -166.30881340310532 -77.18664256999705 -62.60000000000018 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + endloop +endfacet +facet normal 0.5272028623656807 -0.30438071450430654 -0.7933533402912483 + outer loop + vertex -165.87580070121308 -77.43664256999705 -62.46602540378463 + vertex -15.875800701213794 182.37097856533364 -62.466025403784535 + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + endloop +endfacet +facet normal 0.5272028623656807 -0.30438071450430654 -0.7933533402912483 + outer loop + vertex -15.696440967410249 182.26742517474028 -62.307106781186654 + vertex -165.69644096740947 -77.54019596059028 -62.30710678118674 + vertex -15.875800701213794 182.37097856533364 -62.466025403784535 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + vertex -165.44278799932096 -77.68664256999723 -56.400000000000205 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -15.442787999321691 182.12097856533347 -56.40000000000011 + vertex -165.44278799932096 -77.68664256999723 -56.400000000000205 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.8001031451912876 -0.46193976625561306 -0.3826834323650808 + outer loop + vertex -165.55881340310532 -77.61965527188926 -62.10000000000019 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + endloop +endfacet +facet normal 0.8001031451912876 -0.46193976625561306 -0.3826834323650808 + outer loop + vertex -15.472297099368218 182.13801565218895 -61.858819045102614 + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + endloop +endfacet +facet normal 0.85861643640128 -0.4957224306868709 -0.1305261922200573 + outer loop + vertex -165.44278799932087 -77.68664256999709 -61.60000000000019 + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.85861643640128 -0.4957224306868709 -0.1305261922200573 + outer loop + vertex -15.472297099368218 182.13801565218895 -61.858819045102614 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + vertex -165.47229709936752 -77.66960548314157 -61.858819045102706 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -20.812145502785185 185.22097856533344 -62.20000000000009 + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -170.81214550278446 -74.5866425699972 -62.6000000000002 + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 9.400019899202893e-16 + outer loop + vertex -20.812145502785185 185.22097856533344 -62.20000000000009 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + vertex -170.8121455027845 -74.5866425699972 -62.2000000000002 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -171.15855566429826 -74.38664256999729 -60.80000000000016 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + vertex -21.158555664299012 185.4209785653334 -60.80000000000006 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -21.158555664299012 185.4209785653334 -60.80000000000006 + vertex -169.2532997759725 -75.4866425699972 -60.80000000000016 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -176.8174380826113 -71.1194852824722 -56.30000000000017 + vertex -26.817438082612004 188.6881358528584 -56.300000000000075 + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + vertex -26.817438082612004 188.6881358528584 -56.300000000000075 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 8.997049082914166e-15 + outer loop + vertex -171.15855566429826 -74.38664256999729 -60.80000000000016 + vertex -21.158555664299012 185.4209785653334 -60.80000000000006 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + endloop +endfacet +facet normal -0.8660254037844584 0.49999999999996575 8.997049082914166e-15 + outer loop + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -171.15855566429823 -74.3866425699972 -62.20000000000018 + vertex -21.158555664299012 185.4209785653334 -60.80000000000006 + endloop +endfacet +facet normal -0.6123724356957958 0.3535533905932728 -0.7071067811865469 + outer loop + vertex -171.38864599171967 -74.25379985752278 -56.30000000000017 + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + endloop +endfacet +facet normal -0.6123724356957958 0.3535533905932728 -0.7071067811865469 + outer loop + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -169.25329977597252 -75.48664256999727 -58.765685424949424 + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + endloop +endfacet +facet normal 0.6123724356958177 -0.353553390593229 -0.70710678118655 + outer loop + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -176.8174380826113 -71.1194852824722 -56.30000000000017 + endloop +endfacet +facet normal 0.6123724356958177 -0.353553390593229 -0.70710678118655 + outer loop + vertex -26.817438082612004 188.6881358528584 -56.300000000000075 + vertex -176.8174380826113 -71.1194852824722 -56.30000000000017 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -177.04752841003258 -70.98664256999746 -60.80000000000018 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + endloop +endfacet +facet normal -1.7149041329274714e-14 -3.158301486324295e-14 1.0 + outer loop + vertex -27.04752841003327 188.82097856533326 -60.80000000000009 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + vertex -177.04752841003258 -70.98664256999746 -60.80000000000018 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -2.6118274155526564e-14 + outer loop + vertex -177.04752841003258 -70.98664256999746 -60.80000000000018 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -27.04752841003327 188.82097856533326 -60.80000000000009 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -2.6118274155526564e-14 + outer loop + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + vertex -27.04752841003327 188.82097856533326 -60.80000000000009 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -178.95278429835838 -69.8866425699975 -60.80000000000017 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -9.400019899202893e-16 + outer loop + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -178.95278429835838 -69.88664256999755 -58.76568542494941 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -177.39393857154636 -70.78664256999738 -62.20000000000018 + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + vertex -177.04752841003258 -70.98664256999737 -62.20000000000018 + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -4.464960093105168e-15 + outer loop + vertex -177.39393857154636 -70.78664256999738 -62.20000000000018 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + endloop +endfacet +facet normal 0.8660254037844584 -0.49999999999996575 -4.464960093105168e-15 + outer loop + vertex -27.39393857154707 189.02097856533325 -62.60000000000009 + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -181.8972706712255 -68.18664256999753 -62.60000000000018 + vertex -31.8972706712262 191.6209785653332 -62.60000000000008 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + endloop +endfacet +facet normal 1.7149041329274714e-14 3.158301486324295e-14 -1.0 + outer loop + vertex -27.39393857154707 189.02097856533325 -62.60000000000009 + vertex -177.39393857154636 -70.78664256999735 -62.60000000000018 + vertex -31.8972706712262 191.6209785653332 -62.60000000000008 + endloop +endfacet +facet normal -0.11303899832181775 0.06526309611006632 -0.9914448613738075 + outer loop + vertex -182.1214145392675 -68.05723304744627 -62.56592582628924 + vertex -32.12141453926823 191.75038808788443 -62.56592582628915 + vertex -181.8972706712255 -68.18664256999753 -62.60000000000018 + endloop +endfacet +facet normal -0.11303899832181775 0.06526309611006632 -0.9914448613738075 + outer loop + vertex -31.8972706712262 191.6209785653332 -62.60000000000008 + vertex -181.8972706712255 -68.18664256999753 -62.60000000000018 + vertex -32.12141453926823 191.75038808788443 -62.56592582628915 + endloop +endfacet +facet normal -0.3314135740355742 0.19134171618256102 -0.9238795325112896 + outer loop + vertex -182.3302833731177 -67.93664256999756 -62.46602540378461 + vertex -32.33028337311846 191.87097856533305 -62.46602540378452 + vertex -182.1214145392675 -68.05723304744627 -62.56592582628924 + endloop +endfacet +facet normal -0.3314135740355742 0.19134171618256102 -0.9238795325112896 + outer loop + vertex -32.12141453926823 191.75038808788443 -62.56592582628915 + vertex -182.1214145392675 -68.05723304744627 -62.56592582628924 + vertex -32.33028337311846 191.87097856533305 -62.46602540378452 + endloop +endfacet +facet normal -0.5272028623656496 0.30438071450436194 -0.7933533402912476 + outer loop + vertex -182.5096431069213 -67.8330891794043 -62.30710678118673 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + vertex -182.3302833731177 -67.93664256999756 -62.46602540378461 + endloop +endfacet +facet normal -0.5272028623656496 0.30438071450436194 -0.7933533402912476 + outer loop + vertex -32.33028337311846 191.87097856533305 -62.46602540378452 + vertex -182.3302833731177 -67.93664256999756 -62.46602540378461 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + endloop +endfacet +facet normal -0.6870641468694534 0.39667667014562047 -0.6087614290087151 + outer loop + vertex -182.5096431069213 -67.8330891794043 -62.30710678118673 + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + endloop +endfacet +facet normal -0.6870641468694534 0.39667667014562047 -0.6087614290087151 + outer loop + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + vertex -182.6472706712255 -67.75362986810535 -62.10000000000018 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.76329607501074 192.12097856533296 -56.40000000000008 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.19646627266542 191.79371922636426 -59.985889527836086 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.05804018668494 191.71379888836057 -59.600000000000094 + vertex -32.19646627266542 191.79371922636426 -59.985889527836086 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + vertex -32.05804018668494 191.71379888836057 -59.600000000000094 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.83783608379823 191.58666399028223 -59.26862915010161 + vertex -32.05804018668494 191.71379888836057 -59.600000000000094 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.55086050971253 191.42097856533306 -59.014359353944975 + vertex -31.83783608379823 191.58666399028223 -59.26862915010161 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.216670375552173 191.22803380141505 -58.85451867793758 + vertex -31.55086050971253 191.42097856533306 -59.014359353944975 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + vertex -31.216670375552173 191.22803380141505 -58.85451867793758 + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186684942 191.02097856533302 -58.80000000000008 + vertex -31.216670375552173 191.22803380141505 -58.85451867793758 + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -30.858040186684942 191.02097856533302 -58.80000000000008 + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.24368083274005 191.82097856533298 -60.40000000000011 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -32.19646627266542 191.79371922636426 -59.985889527836086 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.19646627266542 191.79371922636432 -60.814110472164145 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -32.24368083274005 191.82097856533298 -60.40000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.05804018668492 191.71379888836057 -61.20000000000012 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -32.19646627266542 191.79371922636432 -60.814110472164145 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.83783608379814 191.58666399028237 -61.53137084989857 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -32.05804018668492 191.71379888836057 -61.20000000000012 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.55086050971244 191.42097856533306 -61.785640646055185 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -31.83783608379814 191.58666399028237 -61.53137084989857 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.73378697496404 192.1039414784776 -61.8588190451026 + vertex -32.76329607501068 192.12097856533305 -61.60000000000009 + vertex -31.55086050971244 191.42097856533306 -61.785640646055185 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.216670375552106 191.22803380141514 -61.945481322062605 + vertex -32.73378697496404 192.1039414784776 -61.8588190451026 + vertex -31.55086050971244 191.42097856533306 -61.785640646055185 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -32.73378697496404 192.1039414784776 -61.8588190451026 + vertex -31.216670375552106 191.22803380141514 -61.945481322062605 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186684896 191.02097856533317 -62.00000000000008 + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -31.216670375552106 191.22803380141514 -61.945481322062605 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.39393857154707 189.02097856533325 -62.60000000000009 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.33028337311846 191.87097856533305 -62.46602540378452 + vertex -32.509643106922006 191.9745319559264 -62.30710678118664 + vertex -27.39393857154707 189.02097856533325 -62.60000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.12141453926823 191.75038808788443 -62.56592582628915 + vertex -32.33028337311846 191.87097856533305 -62.46602540378452 + vertex -27.39393857154707 189.02097856533325 -62.60000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.8972706712262 191.6209785653332 -62.60000000000008 + vertex -32.12141453926823 191.75038808788443 -62.56592582628915 + vertex -27.39393857154707 189.02097856533325 -62.60000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + vertex -29.658040186684875 190.32815824230553 -59.60000000000006 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.87824428957163 190.45529314038384 -59.26862915010159 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -29.658040186684875 190.32815824230553 -59.60000000000006 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.165219863657356 190.62097856533308 -59.014359353944975 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -29.87824428957163 190.45529314038384 -59.26862915010159 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.49940999781769 190.81392332925108 -58.854518677937556 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -30.165219863657356 190.62097856533308 -59.014359353944975 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186684942 191.02097856533302 -58.80000000000008 + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -30.49940999781769 190.81392332925108 -58.854518677937556 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.519614100704377 190.24823790430187 -59.98588952783603 + vertex -29.658040186684875 190.32815824230553 -59.60000000000006 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.47239954062979 190.22097856533307 -60.400000000000055 + vertex -29.519614100704377 190.24823790430187 -59.98588952783603 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + vertex -29.47239954062979 190.22097856533307 -60.400000000000055 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.04752841003327 188.82097856533326 -60.80000000000009 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + vertex -28.952784298359095 189.92097856533314 -60.80000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + vertex -27.04752841003327 188.82097856533326 -60.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.6580401866849 190.32815824230553 -61.20000000000008 + vertex -29.519614100704356 190.24823790430187 -60.81411047216411 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.878244289571587 190.4552931403839 -61.53137084989855 + vertex -29.6580401866849 190.32815824230553 -61.20000000000008 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.16521986365729 190.6209785653331 -61.785640646055185 + vertex -29.878244289571587 190.4552931403839 -61.53137084989855 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.49940999781767 190.81392332925108 -61.945481322062584 + vertex -30.16521986365729 190.6209785653331 -61.785640646055185 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186684896 191.02097856533317 -62.00000000000008 + vertex -30.49940999781767 190.81392332925108 -61.945481322062584 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -30.858040186684896 191.02097856533317 -62.00000000000008 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.393938571547096 189.02097856533325 -62.20000000000009 + vertex -32.64727067122623 192.0539912672253 -62.10000000000009 + vertex -27.04752841003329 188.82097856533326 -62.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.158555664299303 185.4209785653328 -43.00000000000008 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.70667407651493 183.42803380141493 -43.25451867793758 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + vertex -17.70667407651493 183.42803380141493 -43.25451867793758 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.040864210675263 183.62097856533293 -43.414359353944974 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -17.70667407651493 183.42803380141493 -43.25451867793758 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.327839784760986 183.78666399028216 -43.66862915010161 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -18.040864210675263 183.62097856533293 -43.414359353944974 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.548043887647765 183.91379888836047 -44.000000000000085 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -18.327839784760986 183.78666399028216 -43.66862915010161 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.686469973628217 183.99371922636428 -44.38588952783605 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -18.548043887647765 183.91379888836047 -44.000000000000085 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973456 184.32097856533298 -44.40000000000009 + vertex -21.15855566429926 185.4209785653329 -44.40000000000008 + vertex -18.686469973628217 183.99371922636428 -44.38588952783605 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + vertex -19.253299775973456 184.32097856533298 -44.40000000000009 + vertex -18.686469973628217 183.99371922636428 -44.38588952783605 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -19.253299775973456 184.32097856533298 -44.40000000000009 + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.68646997362817 183.99371922636428 -45.21411047216414 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -18.733684533702807 184.020978565333 -44.800000000000104 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.548043887647673 183.9137988883606 -45.6000000000001 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -18.68646997362817 183.99371922636428 -45.21411047216414 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.327839784760965 183.78666399028225 -45.93137084989857 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -18.548043887647673 183.9137988883606 -45.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.040864210675217 183.620978565333 -46.18564064605519 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -18.327839784760965 183.78666399028225 -45.93137084989857 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.706674076514883 183.42803380141498 -46.345481322062604 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -18.040864210675217 183.620978565333 -46.18564064605519 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -17.706674076514883 183.42803380141498 -46.345481322062604 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + vertex -17.001633726133825 183.02097856533314 -49.200000000000074 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.789198160835609 182.3209785653332 -49.20000000000008 + vertex -17.001633726133825 183.02097856533314 -49.200000000000074 + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + vertex -15.472297099368534 182.13801565218847 -43.34118095489759 + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.989413698780513 183.01392332925096 -43.254518677937554 + vertex -17.34804388764772 183.22097856533296 -43.20000000000008 + vertex -15.472297099368534 182.13801565218847 -43.34118095489759 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.655223564620155 182.8209785653329 -43.414359353944974 + vertex -16.989413698780513 183.01392332925096 -43.254518677937554 + vertex -15.472297099368534 182.13801565218847 -43.34118095489759 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + vertex -16.655223564620155 182.8209785653329 -43.414359353944974 + vertex -15.472297099368534 182.13801565218847 -43.34118095489759 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.36824799053443 182.6552931403837 -43.66862915010159 + vertex -16.655223564620155 182.8209785653329 -43.414359353944974 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.148043887647678 182.52815824230547 -44.00000000000006 + vertex -16.36824799053443 182.6552931403837 -43.66862915010159 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + vertex -16.148043887647678 182.52815824230547 -44.00000000000006 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + vertex -15.442787999321872 182.12097856533305 -43.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.962403241592522 182.4209785653331 -44.80000000000006 + vertex -16.009617801667133 182.4482379043018 -44.38588952783603 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.009617801667133 182.44823790430183 -45.214110472164094 + vertex -15.962403241592522 182.4209785653331 -44.80000000000006 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.14804388764763 182.52815824230547 -45.60000000000008 + vertex -16.009617801667133 182.44823790430183 -45.214110472164094 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.36824799053434 182.65529314038386 -45.93137084989855 + vertex -16.14804388764763 182.52815824230547 -45.60000000000008 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.655223564620087 182.82097856533304 -46.18564064605519 + vertex -16.36824799053434 182.65529314038386 -45.93137084989855 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.9894136987804 183.013923329251 -46.34548132206258 + vertex -16.655223564620087 182.82097856533304 -46.18564064605519 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + vertex -16.9894136987804 183.013923329251 -46.34548132206258 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -17.348043887647652 183.22097856533298 -46.40000000000008 + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.763401827416754 184.03813585285843 -47.00000000000008 + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.789198160835587 182.3209785653332 -48.80000000000008 + vertex -17.00163372613387 183.02097856533308 -47.00000000000008 + vertex -15.442787999321826 182.12097856533316 -48.80000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.519614100704672 190.24823790430136 -44.38588952783607 + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + vertex -29.47239954063004 190.22097856533262 -44.800000000000104 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + vertex -29.47239954063004 190.22097856533262 -44.800000000000104 + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.519614100704626 190.24823790430136 -45.21411047216414 + vertex -29.47239954063004 190.22097856533262 -44.800000000000104 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.658040186685124 190.3281582423051 -45.6000000000001 + vertex -29.519614100704626 190.24823790430136 -45.21411047216414 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.878244289571878 190.4552931403834 -45.93137084989857 + vertex -29.658040186685124 190.3281582423051 -45.6000000000001 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.16521986365756 190.6209785653327 -46.18564064605521 + vertex -29.878244289571878 190.4552931403834 -45.93137084989857 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.499409997817892 190.81392332925068 -46.345481322062625 + vertex -30.16521986365756 190.6209785653327 -46.18564064605521 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + vertex -30.499409997817892 190.81392332925068 -46.345481322062625 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.897270671226583 191.62097856533254 -42.600000000000065 + vertex -27.393938571547345 189.02097856533265 -42.60000000000007 + vertex -32.12141453926859 191.75038808788375 -42.63407417371101 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + vertex -32.12141453926859 191.75038808788375 -42.63407417371101 + vertex -27.393938571547345 189.02097856533265 -42.60000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.33028337311875 191.87097856533256 -42.73397459621563 + vertex -32.12141453926859 191.75038808788375 -42.63407417371101 + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.509643106922326 191.9745319559258 -42.89289321881352 + vertex -32.33028337311875 191.87097856533256 -42.73397459621563 + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + vertex -32.509643106922326 191.9745319559258 -42.89289321881352 + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + vertex -27.393938571547366 189.02097856533257 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.49940999781798 190.81392332925054 -43.254518677937604 + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + vertex -30.49940999781798 190.81392332925054 -43.254518677937604 + vertex -27.04752841003356 188.8209785653326 -43.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.165219863657626 190.62097856533256 -43.414359353944995 + vertex -30.49940999781798 190.81392332925054 -43.254518677937604 + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.8782442895719 190.45529314038336 -43.66862915010161 + vertex -30.165219863657626 190.62097856533256 -43.414359353944995 + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.65804018668519 190.32815824230505 -44.00000000000011 + vertex -29.8782442895719 190.45529314038336 -43.66862915010161 + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.519614100704672 190.24823790430136 -44.38588952783607 + vertex -29.65804018668519 190.32815824230505 -44.00000000000011 + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -28.952784298359386 189.92097856533263 -44.40000000000007 + vertex -29.519614100704672 190.24823790430136 -44.38588952783607 + vertex -27.047528410033582 188.82097856533272 -44.40000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.308813403106395 182.62097856533293 -42.60000000000009 + vertex -16.084669535064364 182.4915690427817 -42.63407417371102 + vertex -20.812145502785523 185.2209785653329 -42.600000000000094 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -20.812145502785523 185.2209785653329 -42.600000000000094 + vertex -16.084669535064364 182.4915690427817 -42.63407417371102 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.875800701214178 182.370978565333 -42.73397459621565 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -16.084669535064364 182.4915690427817 -42.63407417371102 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.696440967410565 182.26742517473969 -42.89289321881353 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -15.875800701214178 182.370978565333 -42.73397459621565 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.558813403106363 182.18796586344075 -43.1000000000001 + vertex -20.812145502785523 185.2209785653328 -43.00000000000009 + vertex -15.696440967410565 182.26742517473969 -42.89289321881353 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.64727067122652 192.05399126722477 -43.100000000000065 + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + vertex -32.73378697496435 192.10394147847708 -43.34118095489755 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.216670375552443 191.22803380141454 -43.2545186779376 + vertex -32.73378697496435 192.10394147847708 -43.34118095489755 + vertex -30.858040186685212 191.02097856533263 -43.20000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.550860509712756 191.42097856533258 -43.414359353945 + vertex -32.73378697496435 192.10394147847708 -43.34118095489755 + vertex -31.216670375552443 191.22803380141454 -43.2545186779376 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -32.73378697496435 192.10394147847708 -43.34118095489755 + vertex -31.550860509712756 191.42097856533258 -43.414359353945 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.837836083798525 191.58666399028175 -43.668629150101616 + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -31.550860509712756 191.42097856533258 -43.414359353945 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.058040186685254 191.71379888836003 -44.000000000000114 + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -31.837836083798525 191.58666399028175 -43.668629150101616 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -32.058040186685254 191.71379888836003 -44.000000000000114 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -32.76329607501097 192.1209785653325 -43.600000000000065 + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.243680832740345 191.82097856533252 -44.80000000000011 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -32.19646627266571 191.7937192263638 -44.38588952783608 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.19646627266567 191.79371922636386 -45.214110472164144 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -32.243680832740345 191.82097856533252 -44.80000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.05804018668523 191.7137988883601 -45.60000000000011 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -32.19646627266567 191.79371922636386 -45.214110472164144 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.837836083798436 191.58666399028183 -45.93137084989858 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -32.05804018668523 191.7137988883601 -45.60000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.55086050971271 191.42097856533266 -46.18564064605523 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -31.837836083798436 191.58666399028183 -45.93137084989858 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.21667037555242 191.2280338014146 -46.345481322062625 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -31.55086050971271 191.42097856533266 -46.18564064605523 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -31.21667037555242 191.2280338014146 -46.345481322062625 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + vertex -30.858040186685145 191.02097856533257 -46.40000000000013 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.4168859134971 191.92097856533272 -48.80000000000003 + vertex -32.76329607501086 192.12097856533268 -48.80000000000003 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.204450348198883 191.22097856533276 -49.20000000000007 + vertex -32.4168859134971 191.92097856533272 -48.80000000000003 + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.4168859134971 191.9209785653327 -49.20000000000003 + vertex -32.4168859134971 191.92097856533272 -48.80000000000003 + vertex -31.204450348198883 191.22097856533276 -49.20000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + vertex -26.817438082612004 188.6881358528584 -56.300000000000075 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -26.817438082612004 188.6881358528584 -56.300000000000075 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -28.952784298359116 189.9209785653331 -58.76568542494932 + vertex -29.442682246915794 190.20382127780772 -58.20000000000009 + vertex -26.817438082612004 188.6881358528584 -56.300000000000075 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -32.41688591349703 191.92097856533286 -56.00000000000008 + vertex -31.204450348198748 191.22097856533293 -56.00000000000009 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.204450348198748 191.22097856533298 -58.20000000000009 + vertex -32.416885913496984 191.92097856533292 -56.40000000000008 + vertex -31.204450348198748 191.22097856533293 -56.00000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -24.103042037166343 187.12097856533296 -49.90000000000009 + vertex -24.708230480879788 187.47038427622132 -49.99200026901961 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -25.272176332275354 187.79597856533294 -50.26173140978212 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -24.708230480879788 187.47038427622132 -49.99200026901961 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -25.756447613545006 188.07557271993477 -50.690811690796394 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -25.272176332275354 187.79597856533294 -50.26173140978212 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -26.128042037166377 188.29011286044195 -51.25000000000008 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -25.756447613545006 188.07557271993477 -50.690811690796394 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -26.36163605725845 188.42497843082322 -51.901188578223284 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -26.128042037166377 188.29011286044195 -51.25000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -26.36163605725845 188.42497843082322 -51.901188578223284 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -26.44131062738434 188.47097856533296 -52.60000000000009 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -26.36163605725845 188.42497843082322 -51.901188578223284 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -26.36163605725843 188.42497843082322 -53.29881142177688 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -26.44131062738434 188.47097856533296 -52.60000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -26.12804203716631 188.29011286044204 -53.950000000000095 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -26.36163605725843 188.42497843082322 -53.29881142177688 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -25.756447613544914 188.0755727199349 -54.50918830920377 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -26.12804203716631 188.29011286044204 -53.950000000000095 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -25.272176332275286 187.79597856533303 -54.93826859021806 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -25.756447613544914 188.0755727199349 -54.50918830920377 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -24.708230480879674 187.47038427622155 -55.20799973098057 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -25.272176332275286 187.79597856533303 -54.93826859021806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -24.103042037166208 187.1209785653331 -55.30000000000008 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -24.708230480879674 187.47038427622155 -55.20799973098057 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -24.103042037166208 187.1209785653331 -55.30000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + vertex -27.307336031168706 188.97097856533304 -55.734314575050846 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -21.388645991720363 185.5538212778079 -56.30000000000007 + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -18.763401827416597 184.03813585285874 -58.200000000000074 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.158555664299012 185.4209785653334 -60.80000000000006 + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.6864699736279 183.99371922636468 -60.814110472164124 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.54804388764747 183.91379888836101 -61.20000000000009 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -18.6864699736279 183.99371922636468 -60.814110472164124 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.32783978476067 183.7866639902828 -61.531370849898586 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -18.54804388764747 183.91379888836101 -61.20000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.040864210674947 183.62097856533347 -61.7856406460552 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -18.32783978476067 183.7866639902828 -61.531370849898586 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.706674076514588 183.42803380141552 -61.94548132206259 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -18.040864210674947 183.62097856533347 -61.7856406460552 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.34804388764736 183.22097856533352 -62.00000000000009 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -17.706674076514588 183.42803380141552 -61.94548132206259 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -17.34804388764736 183.22097856533352 -62.00000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.812145502785185 185.22097856533344 -62.20000000000009 + vertex -21.158555664298987 185.42097856533343 -62.20000000000008 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.696440967410249 182.26742517474028 -62.307106781186654 + vertex -20.812145502785185 185.22097856533344 -62.20000000000009 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + vertex -20.812145502785185 185.22097856533344 -62.20000000000009 + vertex -15.696440967410249 182.26742517474028 -62.307106781186654 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.875800701213794 182.37097856533364 -62.466025403784535 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + vertex -15.696440967410249 182.26742517474028 -62.307106781186654 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.084669535064027 182.49156904278234 -62.56592582628915 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + vertex -15.875800701213794 182.37097856533364 -62.466025403784535 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.308813403106058 182.6209785653336 -62.60000000000009 + vertex -20.812145502785206 185.22097856533344 -62.60000000000009 + vertex -16.084669535064027 182.49156904278234 -62.56592582628915 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.00163372613369 183.02097856533337 -56.00000000000008 + vertex -15.78919816083545 182.32097856533338 -56.000000000000114 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.78919816083545 182.32097856533338 -56.40000000000011 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -15.78919816083545 182.32097856533338 -56.000000000000114 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.442787999321691 182.12097856533347 -56.40000000000011 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -15.78919816083545 182.32097856533338 -56.40000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.14804388764743 182.52815824230586 -59.60000000000007 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -15.442787999321691 182.12097856533347 -56.40000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + vertex -16.14804388764743 182.52815824230586 -59.60000000000007 + vertex -15.442787999321691 182.12097856533347 -56.40000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + vertex -15.442787999321691 182.12097856533347 -56.40000000000011 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.368247990534137 182.65529314038423 -59.2686291501016 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -16.14804388764743 182.52815824230586 -59.60000000000007 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.655223564619863 182.82097856533343 -59.01435935394496 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -16.368247990534137 182.65529314038423 -59.2686291501016 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.98941369878022 183.0139233292514 -58.85451867793757 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -16.655223564619863 182.82097856533343 -59.01435935394496 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.34804388764747 183.2209785653335 -58.800000000000075 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -16.98941369878022 183.0139233292514 -58.85451867793757 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -17.00163372613369 183.02097856533345 -58.200000000000074 + vertex -17.34804388764747 183.2209785653335 -58.800000000000075 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.96240324159232 182.42097856533348 -60.40000000000007 + vertex -16.00961780166693 182.44823790430226 -59.98588952783604 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.009617801666863 182.44823790430226 -60.8141104721641 + vertex -15.96240324159232 182.42097856533348 -60.40000000000007 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.14804388764743 182.52815824230598 -61.20000000000007 + vertex -16.009617801666863 182.44823790430226 -60.8141104721641 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.36824799053407 182.6552931403843 -61.531370849898536 + vertex -16.14804388764743 182.52815824230598 -61.20000000000007 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.655223564619817 182.82097856533352 -61.78564064605518 + vertex -16.36824799053407 182.6552931403843 -61.531370849898536 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.472297099368218 182.13801565218895 -61.858819045102614 + vertex -16.655223564619817 182.82097856533352 -61.78564064605518 + vertex -15.44278799932158 182.12097856533364 -61.6000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -16.98941369878013 183.01392332925155 -61.94548132206259 + vertex -16.655223564619817 182.82097856533352 -61.78564064605518 + vertex -15.472297099368218 182.13801565218895 -61.858819045102614 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + vertex -16.98941369878013 183.01392332925155 -61.94548132206259 + vertex -15.472297099368218 182.13801565218895 -61.858819045102614 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.34804388764736 183.22097856533352 -62.00000000000009 + vertex -16.98941369878013 183.01392332925155 -61.94548132206259 + vertex -15.558813403106026 182.18796586344138 -62.1000000000001 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -17.34804388764747 183.2209785653335 -58.800000000000075 + vertex -17.7066740765147 183.42803380141538 -58.85451867793757 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.040864210674993 183.62097856533347 -59.01435935394498 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -17.7066740765147 183.42803380141538 -58.85451867793757 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.327839784760762 183.78666399028262 -59.268629150101624 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -18.040864210674993 183.62097856533347 -59.01435935394498 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.54804388764747 183.91379888836096 -59.600000000000094 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -18.327839784760762 183.78666399028262 -59.268629150101624 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -19.253299775973254 184.32097856533338 -58.76568542494933 + vertex -18.54804388764747 183.91379888836096 -59.600000000000094 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.686469973627926 183.99371922636473 -59.98588952783606 + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -18.54804388764747 183.91379888836096 -59.600000000000094 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.73368453370258 184.0209785653334 -60.40000000000009 + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -18.686469973627926 183.99371922636473 -59.98588952783606 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -18.6864699736279 183.99371922636468 -60.814110472164124 + vertex -19.253299775973186 184.3209785653334 -60.80000000000007 + vertex -18.73368453370258 184.0209785653334 -60.40000000000009 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -26.81743808261221 188.68813585285818 -48.90000000000006 + vertex -29.442682246915975 190.20382127780732 -47.00000000000008 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -31.204450348198904 191.2209785653327 -47.00000000000007 + vertex -28.952784298359365 189.92097856533272 -46.434314575050806 + vertex -29.442682246915975 190.20382127780732 -47.00000000000008 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -29.442682246915975 190.20382127780732 -47.00000000000008 + vertex -26.81743808261221 188.68813585285818 -48.90000000000006 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -26.81743808261221 188.68813585285818 -48.90000000000006 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -24.103042037166343 187.12097856533296 -49.90000000000009 + vertex -27.30733603116882 188.97097856533284 -49.46568542494934 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -23.4978535934529 186.77157285444457 -49.9920002690196 + vertex -24.103042037166343 187.12097856533296 -49.90000000000009 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -22.933907742057333 186.44597856533304 -50.26173140978211 + vertex -23.4978535934529 186.77157285444457 -49.9920002690196 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -22.449636460787655 186.16638441073113 -50.690811690796394 + vertex -22.933907742057333 186.44597856533304 -50.26173140978211 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -22.078042037166306 185.95184427022406 -51.25000000000008 + vertex -22.449636460787655 186.16638441073113 -50.690811690796394 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.84444801707419 185.81697869984285 -51.90118857822331 + vertex -22.078042037166306 185.95184427022406 -51.25000000000008 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + vertex -21.84444801707419 185.81697869984285 -51.90118857822331 + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.764773446948276 185.77097856533308 -52.60000000000011 + vertex -21.84444801707419 185.81697869984285 -51.90118857822331 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -21.844448017074168 185.81697869984293 -53.298811421776925 + vertex -21.764773446948276 185.77097856533308 -52.60000000000011 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -22.078042037166238 185.95184427022414 -53.95000000000012 + vertex -21.844448017074168 185.81697869984293 -53.298811421776925 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -22.449636460787566 186.16638441073135 -54.50918830920379 + vertex -22.078042037166238 185.95184427022414 -53.95000000000012 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -22.93390774205722 186.4459785653332 -54.93826859021808 + vertex -22.449636460787566 186.16638441073135 -54.50918830920379 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -23.497853593452785 186.77157285444477 -55.20799973098057 + vertex -22.93390774205722 186.4459785653332 -54.93826859021808 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -24.103042037166208 187.1209785653331 -55.30000000000008 + vertex -23.497853593452785 186.77157285444477 -55.20799973098057 + vertex -20.8987480431638 185.2709785653332 -55.734314575050796 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -19.253299775973435 184.32097856533298 -46.434314575050855 + vertex -18.763401827416754 184.03813585285843 -47.00000000000008 + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + endloop +endfacet +facet normal 0.49999999999999944 0.866025403784439 2.9750497701033076e-16 + outer loop + vertex -20.898748043163867 185.27097856533302 -49.465685424949335 + vertex -21.38864599172057 185.5538212778076 -48.900000000000105 + vertex -18.763401827416754 184.03813585285843 -47.00000000000008 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -167.34804388764675 -76.5866425699972 -58.80000000000016 + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -166.9894136987795 -76.79369780607921 -58.854518677937655 + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -167.70667407651396 -76.37958733391518 -58.854518677937655 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -166.65522356461918 -76.98664256999719 -59.01435935394505 + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -168.0408642106743 -76.18664256999723 -59.014359353945075 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -166.36824799053343 -77.15232799494639 -59.26862915010169 + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -168.32783978476002 -76.02095714504797 -59.26862915010171 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -166.14804388764668 -77.2794628930247 -59.600000000000165 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -168.54804388764674 -75.89382224696966 -59.600000000000186 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + vertex -166.0096178016662 -77.3593832310284 -59.98588952783613 + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + vertex -168.68646997362725 -75.81390190896596 -59.98588952783615 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + vertex -165.96240324159157 -77.38664256999711 -60.40000000000016 + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + vertex -168.73368453370182 -75.78664256999723 -60.40000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + vertex -166.0096178016662 -77.35938323102839 -60.814110472164195 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + vertex -168.68646997362723 -75.81390190896595 -60.81411047216422 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + vertex -166.14804388764665 -77.27946289302466 -61.20000000000016 + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + vertex -168.5480438876467 -75.89382224696963 -61.20000000000018 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + vertex -166.36824799053338 -77.15232799494633 -61.53137084989863 + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + vertex -168.32783978475996 -76.02095714504792 -61.53137084989868 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + vertex -166.6552235646191 -76.98664256999713 -61.78564064605527 + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + vertex -168.04086421067421 -76.18664256999713 -61.78564064605529 + endloop +endfacet +facet normal -0.49999999999999944 -0.866025403784439 -2.970018574227152e-16 + outer loop + vertex -167.34804388764667 -76.58664256999714 -62.00000000000018 + vertex -166.9894136987794 -76.7936978060791 -61.94548132206268 + vertex -167.70667407651388 -76.37958733391513 -61.94548132206268 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -161.91257279904332 -89.55428566022329 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.12593720379286 -86.22966341140767 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -164.12593720379286 -86.22966341140767 -62.60000000000005 + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + vertex -165.232188041314 -84.0045433990304 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.12593720379286 -86.22966341140767 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.07141852585536 -86.64377388357171 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.07141852585536 -86.64377388357171 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.12593720379283 -87.05788435573575 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.12593720379283 -87.05788435573575 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.28577787980024 -87.44377388357172 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.28577787980024 -87.44377388357172 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.54004767595688 -87.7751447334702 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.54004767595688 -87.7751447334702 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.22500836434156 -88.34902977189748 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.54004767595688 -87.7751447334702 -62.60000000000005 + vertex -164.22500836434156 -88.34902977189748 -62.60000000000005 + vertex -164.87141852585535 -88.02941452962682 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.87141852585535 -88.02941452962682 -62.60000000000005 + vertex -164.22500836434156 -88.34902977189748 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.87141852585535 -88.02941452962682 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -165.25730805369133 -88.18925520563424 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.25730805369133 -88.18925520563424 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -165.67141852585536 -88.24377388357172 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.67141852585536 -88.24377388357172 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -166.08552899801936 -88.18925520563424 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.08552899801936 -88.18925520563424 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -166.47141852585534 -88.02941452962685 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.47141852585534 -88.02941452962685 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -166.80278937575383 -87.77514473347021 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.80278937575383 -87.77514473347021 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.67141852585536 -98.76812953655387 -62.60000000000005 + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + vertex -158.28552899801937 -98.60828886054645 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + vertex -158.67141852585536 -98.76812953655387 -62.60000000000005 + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -158.67141852585536 -98.76812953655387 -62.60000000000005 + vertex -159.00278937575385 -99.0223993327105 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -159.00278937575385 -99.0223993327105 -62.60000000000005 + vertex -159.25705917191047 -99.35377018260897 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -159.25705917191047 -99.35377018260897 -62.60000000000005 + vertex -159.41689984791785 -99.73965971044495 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -159.41689984791785 -99.73965971044495 -62.60000000000005 + vertex -159.47141852585534 -100.15377018260898 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -159.47141852585534 -100.15377018260898 -62.60000000000005 + vertex -159.41689984791785 -100.56788065477302 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -159.41689984791785 -100.56788065477302 -62.60000000000005 + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -155.26626221502494 -100.33418162204778 -62.60000000000005 + vertex -157.96616263752958 -95.58966856747121 -62.60000000000005 + vertex -155.36616263752956 -100.09300066715029 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -157.96616263752958 -95.58966856747121 -62.60000000000005 + vertex -155.26626221502494 -100.33418162204778 -62.60000000000005 + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + vertex -155.26626221502494 -100.33418162204778 -62.60000000000005 + vertex -155.232188041314 -100.59300066715029 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + vertex -155.232188041314 -100.59300066715029 -62.600000000000065 + vertex -155.26626221502494 -100.85181971225282 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + vertex -155.26626221502494 -100.85181971225282 -62.600000000000065 + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + vertex -156.74004767595687 -99.02239933271049 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -156.74004767595687 -99.02239933271049 -62.60000000000005 + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + vertex -156.74004767595687 -99.02239933271049 -62.60000000000005 + vertex -157.07141852585534 -98.76812953655386 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + vertex -157.07141852585534 -98.76812953655386 -62.60000000000005 + vertex -157.45730805369132 -98.60828886054645 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + vertex -157.45730805369132 -98.60828886054645 -62.60000000000005 + vertex -157.87141852585535 -98.55377018260896 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + vertex -157.87141852585535 -98.55377018260896 -62.60000000000005 + vertex -158.28552899801937 -98.60828886054645 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + vertex -158.28552899801937 -98.60828886054645 -62.60000000000005 + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -166.81731320975484 -107.85902607093475 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -171.5618262643314 -110.55892649343936 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + vertex -171.5618262643314 -110.55892649343936 -62.600000000000044 + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + vertex -171.5618262643314 -110.55892649343936 -62.600000000000044 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -174.9402605517046 -105.38966856747122 -62.60000000000005 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -174.9402605517046 -105.38966856747122 -62.60000000000005 + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -172.32064530943393 -110.45902607093474 -62.60000000000002 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + vertex -172.32064530943393 -110.45902607093474 -62.60000000000002 + vertex -172.52775209062048 -110.30010744833685 -62.60000000000002 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + vertex -172.52775209062048 -110.30010744833685 -62.60000000000002 + vertex -172.68667071321835 -110.0930006671503 -62.60000000000002 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -173.92782498640634 -104.34325840595744 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.92782498640634 -104.34325840595744 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + vertex -174.9402605517046 -105.38966856747122 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.88927996889691 -92.73437598764454 -62.60000000000005 + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + vertex -166.88927996889691 -92.73437598764454 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -166.88927996889691 -92.73437598764454 -62.60000000000005 + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -166.188148085156 -95.94877203309035 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.188148085156 -95.94877203309035 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -165.91841694439347 -96.59996061131355 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.91841694439347 -96.59996061131355 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -165.82641667537396 -97.29877203309034 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.82641667537396 -97.29877203309034 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -165.91841694439347 -97.99758345486715 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.91841694439347 -97.99758345486715 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -166.18814808515597 -98.64877203309035 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.18814808515597 -98.64877203309035 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -166.6172283661703 -99.20796034229403 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.6172283661703 -99.20796034229403 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.6172283661703 -99.20796034229403 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -167.17641667537396 -99.63704062330834 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.17641667537396 -99.63704062330834 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -167.82760525359717 -99.90677176407084 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.82760525359717 -99.90677176407084 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -168.52641667537395 -99.99877203309036 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -168.52641667537395 -99.99877203309036 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -169.2252280971508 -99.90677176407084 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.2252280971508 -99.90677176407084 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -169.87641667537395 -99.63704062330832 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.87641667537395 -99.63704062330832 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -170.43560498457765 -99.20796034229403 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.43560498457765 -99.20796034229403 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -170.86468526559193 -98.64877203309034 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -164.36616263752958 -84.5045433990304 -62.600000000000044 + vertex -161.76616263752956 -89.00787549870951 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.36616263752958 -84.5045433990304 -62.600000000000044 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -164.52508126012745 -84.29743661784386 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.52508126012745 -84.29743661784386 -62.600000000000044 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -164.732188041314 -84.13851799524596 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.732188041314 -84.13851799524596 -62.600000000000044 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -164.97336899621146 -84.03861757274133 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.97336899621146 -84.03861757274133 -62.600000000000044 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -165.232188041314 -84.0045433990304 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + vertex -156.32593720379282 -99.73965971044491 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.32593720379282 -99.73965971044491 -62.60000000000005 + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + vertex -156.27141852585532 -100.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.27141852585532 -100.15377018260895 -62.60000000000005 + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.27141852585532 -100.15377018260895 -62.60000000000005 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + vertex -156.32593720379282 -100.56788065477299 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.32593720379282 -100.56788065477299 -62.60000000000005 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + vertex -156.48577787980022 -100.95377018260896 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.48577787980022 -100.95377018260896 -62.60000000000005 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + vertex -156.74004767595684 -101.28514103250744 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.74004767595684 -101.28514103250744 -62.60000000000005 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -156.74004767595684 -101.28514103250744 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -157.0714185258553 -101.53941082866406 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -157.0714185258553 -101.53941082866406 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -157.45730805369126 -101.69925150467147 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -157.45730805369126 -101.69925150467147 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -157.87141852585532 -101.75377018260896 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -157.87141852585532 -101.75377018260896 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -158.28552899801934 -101.6992515046715 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.28552899801934 -101.6992515046715 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -158.67141852585533 -101.53941082866409 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -158.67141852585533 -101.53941082866409 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -159.0027893757538 -101.28514103250745 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.0027893757538 -101.28514103250745 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -160.43552014099308 -103.71261590942096 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -160.43552014099308 -103.71261590942096 -62.60000000000005 + vertex -161.48193030250687 -102.70018034412274 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -161.48193030250687 -102.70018034412274 -62.60000000000005 + vertex -160.43552014099308 -103.71261590942096 -62.60000000000005 + vertex -160.78193030250688 -103.91261590942096 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -169.2252280971508 -94.69077230210986 -62.60000000000005 + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.2252280971508 -94.69077230210986 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -168.52641667537395 -94.59877203309034 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -168.52641667537395 -94.59877203309034 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -167.82760525359714 -94.69077230210985 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.82760525359714 -94.69077230210985 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -167.17641667537399 -94.96050344287237 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.17641667537399 -94.96050344287237 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -166.61722836617028 -95.38958372388667 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.61722836617028 -95.38958372388667 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -166.188148085156 -95.94877203309035 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -169.2252280971508 -94.69077230210986 -62.60000000000005 + vertex -169.87641667537397 -94.96050344287237 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -169.87641667537397 -94.96050344287237 -62.60000000000005 + vertex -170.43560498457762 -95.38958372388666 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -170.43560498457762 -95.38958372388666 -62.60000000000005 + vertex -170.86468526559196 -95.94877203309034 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -170.86468526559196 -95.94877203309034 -62.60000000000005 + vertex -171.13441640635446 -96.59996061131355 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -171.13441640635446 -96.59996061131355 -62.60000000000005 + vertex -171.22641667537397 -97.29877203309034 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -171.22641667537397 -97.29877203309034 -62.60000000000005 + vertex -171.13441640635446 -97.99758345486715 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -171.13441640635446 -97.99758345486715 -62.60000000000005 + vertex -170.86468526559193 -98.64877203309034 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -170.86468526559193 -98.64877203309034 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -166.6709030482411 -107.31261590942096 -62.60000000000005 + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + vertex -167.37090304824105 -106.10018034412275 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + vertex -166.6709030482411 -107.31261590942096 -62.60000000000005 + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -173.29786795690174 -96.43437598764457 -62.60000000000005 + vertex -176.45900164904148 -94.75913182334084 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -173.29786795690174 -96.43437598764457 -62.60000000000005 + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.45900164904148 -94.75913182334084 -62.60000000000005 + vertex -173.29786795690174 -96.43437598764457 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.45900164904148 -94.75913182334084 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -177.32782498640637 -98.45428566022325 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -178.76730435272856 -95.98925520563425 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.76730435272856 -95.98925520563425 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -179.18141482489258 -96.04377388357173 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -179.18141482489258 -96.04377388357173 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -179.5955252970566 -95.98925520563425 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -179.5955252970566 -95.98925520563425 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -179.98141482489257 -95.82941452962685 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -179.98141482489257 -95.82941452962685 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -180.31278567479106 -95.5751447334702 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -180.31278567479106 -95.5751447334702 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -180.56705547094768 -95.24377388357173 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -180.56705547094768 -95.24377388357173 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -178.7402605517046 -98.80787549870945 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + vertex -178.7402605517046 -98.80787549870945 -62.60000000000005 + vertex -181.786571135723 -93.74572435392787 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.786571135723 -93.74572435392787 -62.600000000000065 + vertex -178.7402605517046 -98.80787549870945 -62.60000000000005 + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.786571135723 -93.74572435392787 -62.600000000000065 + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -181.82064530943393 -94.00454339903038 -62.60000000000008 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.82064530943393 -94.00454339903038 -62.60000000000008 + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -181.786571135723 -94.26336244413291 -62.60000000000008 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.786571135723 -94.26336244413291 -62.60000000000008 + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -181.68667071321835 -94.5045433990304 -62.60000000000008 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -175.57090304824106 -91.89736372205796 -62.60000000000005 + vertex -176.61731320975483 -90.88492815675971 -62.60000000000005 + vertex -176.27090304824105 -90.68492815675971 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.61731320975483 -90.88492815675971 -62.60000000000005 + vertex -175.57090304824106 -91.89736372205796 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.61731320975483 -90.88492815675971 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -179.1814148248926 -92.84377388357171 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + vertex -179.1814148248926 -92.84377388357171 -62.60000000000005 + vertex -179.59552529705667 -92.89829256150922 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + vertex -179.59552529705667 -92.89829256150922 -62.60000000000005 + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -179.1814148248926 -92.84377388357171 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -178.76730435272856 -92.89829256150921 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.76730435272856 -92.89829256150921 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -178.3814148248926 -93.0581332375166 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.3814148248926 -93.0581332375166 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -178.05004397499414 -93.31240303367323 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.05004397499414 -93.31240303367323 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -177.7957741788375 -93.64377388357171 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -177.7957741788375 -93.64377388357171 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -179.59552529705667 -92.89829256150922 -62.60000000000005 + vertex -179.98141482489262 -93.05813323751663 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -179.98141482489262 -93.05813323751663 -62.60000000000005 + vertex -180.3127856747911 -93.31240303367325 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -180.3127856747911 -93.31240303367325 -62.60000000000005 + vertex -180.5670554709477 -93.64377388357174 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -180.5670554709477 -93.64377388357174 -62.60000000000005 + vertex -180.7268961469551 -94.0296634114077 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -180.7268961469551 -94.0296634114077 -62.60000000000005 + vertex -180.7814148248926 -94.44377388357174 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -180.7814148248926 -94.44377388357174 -62.60000000000005 + vertex -181.52775209062045 -93.29743661784383 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.52775209062045 -93.29743661784383 -62.60000000000005 + vertex -180.7814148248926 -94.44377388357174 -62.60000000000005 + vertex -180.7268961469551 -94.85788435573578 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.52775209062045 -93.29743661784383 -62.60000000000005 + vertex -180.7268961469551 -94.85788435573578 -62.60000000000005 + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + vertex -180.7268961469551 -94.85788435573578 -62.60000000000005 + vertex -180.56705547094768 -95.24377388357173 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + vertex -177.63593350283008 -94.02966341140768 -62.60000000000005 + vertex -177.7957741788375 -93.64377388357171 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -177.63593350283008 -94.02966341140768 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + vertex -177.5814148248926 -94.44377388357171 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -177.5814148248926 -94.44377388357171 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + vertex -177.63593350283008 -94.85788435573575 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -177.63593350283008 -94.85788435573575 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + vertex -177.79577417883746 -95.2437738835717 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -177.79577417883746 -95.2437738835717 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -177.79577417883746 -95.2437738835717 -62.60000000000005 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -178.0500439749941 -95.5751447334702 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.0500439749941 -95.5751447334702 -62.60000000000005 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -178.38141482489257 -95.82941452962682 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -178.38141482489257 -95.82941452962682 -62.60000000000005 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -178.76730435272856 -95.98925520563425 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -160.59383170170645 -99.83841224283987 -62.60000000000005 + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -160.59383170170645 -99.83841224283987 -62.60000000000005 + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + vertex -160.59383170170645 -99.83841224283987 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -169.68193030250686 -88.49736372205793 -62.60000000000005 + vertex -170.03552014099304 -87.08492815675972 -62.60000000000005 + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.03552014099304 -87.08492815675972 -62.60000000000005 + vertex -169.68193030250686 -88.49736372205793 -62.60000000000005 + vertex -170.38193030250682 -87.28492815675972 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + vertex -165.232188041314 -84.0045433990304 -62.600000000000044 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + vertex -164.54004767595688 -85.51240303367324 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + vertex -164.54004767595688 -85.51240303367324 -62.60000000000005 + vertex -164.87141852585538 -85.2581332375166 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + vertex -164.87141852585538 -85.2581332375166 -62.60000000000005 + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + vertex -164.87141852585538 -85.2581332375166 -62.60000000000005 + vertex -165.25730805369133 -85.0982925615092 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + vertex -165.25730805369133 -85.0982925615092 -62.60000000000005 + vertex -165.6714185258554 -85.04377388357173 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + vertex -165.6714185258554 -85.04377388357173 -62.60000000000005 + vertex -166.0855289980194 -85.09829256150921 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + vertex -166.0855289980194 -85.09829256150921 -62.60000000000005 + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -166.0855289980194 -85.09829256150921 -62.60000000000005 + vertex -166.47141852585537 -85.25813323751663 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -166.47141852585537 -85.25813323751663 -62.60000000000005 + vertex -166.80278937575386 -85.51240303367325 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -166.80278937575386 -85.51240303367325 -62.60000000000005 + vertex -167.05705917191048 -85.84377388357173 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -167.05705917191048 -85.84377388357173 -62.60000000000005 + vertex -167.2168998479179 -86.2296634114077 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -167.2168998479179 -86.2296634114077 -62.60000000000005 + vertex -167.27141852585538 -86.64377388357174 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -167.27141852585538 -86.64377388357174 -62.60000000000005 + vertex -167.2168998479179 -87.05788435573575 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -167.2168998479179 -87.05788435573575 -62.60000000000005 + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + endloop +endfacet +facet normal -2.455826945656519e-20 -4.0139287745165085e-19 -1.0 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + vertex -170.03552014099304 -87.08492815675972 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -161.76616263752956 -89.00787549870951 617.3999999999999 + vertex -164.36616263752958 -84.5045433990304 -62.600000000000044 + vertex -164.36616263752958 -84.5045433990304 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -164.36616263752958 -84.5045433990304 -62.600000000000044 + vertex -161.76616263752956 -89.00787549870951 617.3999999999999 + vertex -161.76616263752956 -89.00787549870951 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912223 0.6087614290087374 -1.636916019876929e-16 + outer loop + vertex -164.36616263752958 -84.5045433990304 617.3999999999999 + vertex -164.52508126012745 -84.29743661784386 -62.600000000000044 + vertex -164.52508126012745 -84.29743661784386 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912223 0.6087614290087374 -1.636916019876929e-16 + outer loop + vertex -164.52508126012745 -84.29743661784386 -62.600000000000044 + vertex -164.36616263752958 -84.5045433990304 617.3999999999999 + vertex -164.36616263752958 -84.5045433990304 -62.600000000000044 + endloop +endfacet +facet normal 0.8660254037844408 0.4999999999999964 -1.37713367781116e-16 + outer loop + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + vertex -166.88927996889691 -92.73437598764454 -62.60000000000005 + vertex -166.88927996889691 -92.73437598764454 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844408 0.4999999999999964 -1.37713367781116e-16 + outer loop + vertex -166.88927996889691 -92.73437598764454 -62.60000000000005 + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087277 0.7933533402912298 -2.0684907214262717e-16 + outer loop + vertex -164.52508126012745 -84.29743661784386 617.3999999999999 + vertex -164.732188041314 -84.13851799524596 -62.600000000000044 + vertex -164.732188041314 -84.13851799524596 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087277 0.7933533402912298 -2.0684907214262717e-16 + outer loop + vertex -164.732188041314 -84.13851799524596 -62.600000000000044 + vertex -164.52508126012745 -84.29743661784386 617.3999999999999 + vertex -164.52508126012745 -84.29743661784386 -62.600000000000044 + endloop +endfacet +facet normal 0.3826834323651092 0.9238795325112787 -2.3591011986530023e-16 + outer loop + vertex -164.732188041314 -84.13851799524596 617.3999999999999 + vertex -164.97336899621146 -84.03861757274133 -62.600000000000044 + vertex -164.97336899621146 -84.03861757274133 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651092 0.9238795325112787 -2.3591011986530023e-16 + outer loop + vertex -164.97336899621146 -84.03861757274133 -62.600000000000044 + vertex -164.732188041314 -84.13851799524596 617.3999999999999 + vertex -164.732188041314 -84.13851799524596 -62.600000000000044 + endloop +endfacet +facet normal 0.4999999999999998 -0.8660254037844387 2.0805319374395384e-16 + outer loop + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -169.68193030250686 -88.49736372205793 -62.60000000000005 + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + endloop +endfacet +facet normal 0.4999999999999998 -0.8660254037844387 2.0805319374395384e-16 + outer loop + vertex -169.68193030250686 -88.49736372205793 -62.60000000000005 + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -169.68193030250686 -88.49736372205793 617.3999999999999 + endloop +endfacet +facet normal 0.4999999999999951 -0.8660254037844415 2.0805319374395458e-16 + outer loop + vertex -161.76616263752956 -89.00787549870951 -62.60000000000005 + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + endloop +endfacet +facet normal 0.4999999999999951 -0.8660254037844415 2.0805319374395458e-16 + outer loop + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + vertex -161.76616263752956 -89.00787549870951 -62.60000000000005 + vertex -161.76616263752956 -89.00787549870951 617.3999999999999 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -164.22500836434156 -88.34902977189748 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -158.62500836434157 -98.04851429428321 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111678e-16 + outer loop + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -167.7766744141811 -87.39736372205793 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111678e-16 + outer loop + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + vertex -166.75951712665574 -89.15913182334084 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + vertex -164.22500836434156 -88.34902977189748 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -157.96616263752958 -95.58966856747121 -62.60000000000005 + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -157.96616263752958 -95.58966856747121 -62.60000000000005 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -157.96616263752958 -95.58966856747121 617.3999999999999 + endloop +endfacet +facet normal -0.1305261922200643 0.9914448613738087 -2.4491671163867733e-16 + outer loop + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + vertex -165.232188041314 -84.0045433990304 -62.600000000000044 + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + endloop +endfacet +facet normal -0.1305261922200643 0.9914448613738087 -2.4491671163867733e-16 + outer loop + vertex -165.232188041314 -84.0045433990304 -62.600000000000044 + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + endloop +endfacet +facet normal -0.9659258262890671 0.2588190451025256 -4.973776792580478e-17 + outer loop + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + endloop +endfacet +facet normal -0.9659258262890671 0.2588190451025256 -4.973776792580478e-17 + outer loop + vertex -166.75951712665574 -89.15913182334084 -62.60000000000005 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -166.75951712665574 -89.15913182334084 617.3999999999999 + endloop +endfacet +facet normal 0.9659258262890682 -0.2588190451025213 4.973776792580366e-17 + outer loop + vertex -166.88927996889691 -92.73437598764454 617.3999999999999 + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + endloop +endfacet +facet normal 0.9659258262890682 -0.2588190451025213 4.973776792580366e-17 + outer loop + vertex -165.98677646562444 -89.36618705942284 -62.60000000000005 + vertex -166.88927996889691 -92.73437598764454 617.3999999999999 + vertex -166.88927996889691 -92.73437598764454 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -170.03552014099304 -87.08492815675972 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -170.03552014099304 -87.08492815675972 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + vertex -170.03552014099304 -87.08492815675972 -62.60000000000005 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -158.51257279904334 -95.44325840595744 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -158.31257279904335 -95.78966856747121 -62.60000000000005 + endloop +endfacet +facet normal -0.8660254037844469 -0.49999999999998546 1.377133677811134e-16 + outer loop + vertex -169.68193030250686 -88.49736372205793 -62.60000000000005 + vertex -170.38193030250682 -87.28492815675972 617.3999999999999 + vertex -170.38193030250682 -87.28492815675972 -62.60000000000005 + endloop +endfacet +facet normal -0.8660254037844469 -0.49999999999998546 1.377133677811134e-16 + outer loop + vertex -170.38193030250682 -87.28492815675972 617.3999999999999 + vertex -169.68193030250686 -88.49736372205793 -62.60000000000005 + vertex -169.68193030250686 -88.49736372205793 617.3999999999999 + endloop +endfacet +facet normal 0.25881904510252396 0.9659258262890675 -2.4449388036193293e-16 + outer loop + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + endloop +endfacet +facet normal 0.25881904510252396 0.9659258262890675 -2.4449388036193293e-16 + outer loop + vertex -163.75496539384616 -98.1631680785361 -62.60000000000005 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112955 0.38268343236506885 -1.0937881967044597e-16 + outer loop + vertex -155.26626221502494 -100.33418162204778 617.3999999999999 + vertex -155.36616263752956 -100.09300066715029 -62.60000000000005 + vertex -155.36616263752956 -100.09300066715029 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112955 0.38268343236506885 -1.0937881967044597e-16 + outer loop + vertex -155.36616263752956 -100.09300066715029 -62.60000000000005 + vertex -155.26626221502494 -100.33418162204778 617.3999999999999 + vertex -155.26626221502494 -100.33418162204778 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738094 0.13052619222005926 -4.761205154971978e-17 + outer loop + vertex -155.232188041314 -100.59300066715029 617.3999999999999 + vertex -155.26626221502494 -100.33418162204778 -62.60000000000005 + vertex -155.26626221502494 -100.33418162204778 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738094 0.13052619222005926 -4.761205154971978e-17 + outer loop + vertex -155.26626221502494 -100.33418162204778 -62.60000000000005 + vertex -155.232188041314 -100.59300066715029 617.3999999999999 + vertex -155.232188041314 -100.59300066715029 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000026 0.8660254037844372 -2.080531937439534e-16 + outer loop + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + vertex -170.23552014099303 -86.73851799524596 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000026 0.8660254037844372 -2.080531937439534e-16 + outer loop + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -162.1125727990433 -89.20787549870951 -62.60000000000005 + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -161.91257279904332 -89.55428566022329 -62.60000000000005 + endloop +endfacet +facet normal -0.382683432365085 0.9238795325112886 -2.2424847134412203e-16 + outer loop + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + vertex -165.732188041314 -84.13851799524596 -62.60000000000005 + endloop +endfacet +facet normal -0.382683432365085 0.9238795325112886 -2.2424847134412203e-16 + outer loop + vertex -165.49100708641654 -84.03861757274133 -62.600000000000044 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -158.51257279904334 -95.44325840595744 -62.60000000000005 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -158.51257279904334 -95.44325840595744 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 -0.13052619222003178 1.739939920148812e-17 + outer loop + vertex -155.26626221502494 -100.85181971225282 617.3999999999999 + vertex -155.232188041314 -100.59300066715029 -62.600000000000065 + vertex -155.232188041314 -100.59300066715029 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 -0.13052619222003178 1.739939920148812e-17 + outer loop + vertex -155.232188041314 -100.59300066715029 -62.600000000000065 + vertex -155.26626221502494 -100.85181971225282 617.3999999999999 + vertex -155.26626221502494 -100.85181971225282 -62.600000000000065 + endloop +endfacet +facet normal 0.9238795325112861 -0.38268343236509156 8.122510965098952e-17 + outer loop + vertex -155.26626221502494 -100.85181971225282 -62.600000000000065 + vertex -155.36616263752956 -101.09300066715029 617.3999999999999 + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + endloop +endfacet +facet normal 0.9238795325112861 -0.38268343236509156 8.122510965098952e-17 + outer loop + vertex -155.36616263752956 -101.09300066715029 617.3999999999999 + vertex -155.26626221502494 -100.85181971225282 -62.600000000000065 + vertex -155.26626221502494 -100.85181971225282 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004552 0.9914448613738113 -2.4889428277906157e-16 + outer loop + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + vertex -164.97336899621146 -84.03861757274133 -62.600000000000044 + vertex -165.232188041314 -84.0045433990304 -62.600000000000044 + endloop +endfacet +facet normal 0.13052619222004552 0.9914448613738113 -2.4889428277906157e-16 + outer loop + vertex -164.97336899621146 -84.03861757274133 -62.600000000000044 + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + vertex -164.97336899621146 -84.03861757274133 617.3999999999999 + endloop +endfacet +facet normal 0.4999999999999648 -0.8660254037844589 2.0805319374395936e-16 + outer loop + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -161.91257279904332 -89.55428566022329 -62.60000000000005 + endloop +endfacet +facet normal 0.4999999999999648 -0.8660254037844589 2.0805319374395936e-16 + outer loop + vertex -163.12500836434157 -90.25428566022323 -62.60000000000005 + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + endloop +endfacet +facet normal -0.4999999999999953 0.8660254037844414 -2.0805319374395453e-16 + outer loop + vertex -170.38193030250682 -87.28492815675972 617.3999999999999 + vertex -170.03552014099304 -87.08492815675972 -62.60000000000005 + vertex -170.38193030250682 -87.28492815675972 -62.60000000000005 + endloop +endfacet +facet normal -0.4999999999999953 0.8660254037844414 -2.0805319374395453e-16 + outer loop + vertex -170.03552014099304 -87.08492815675972 -62.60000000000005 + vertex -170.38193030250682 -87.28492815675972 617.3999999999999 + vertex -170.03552014099304 -87.08492815675972 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111678e-16 + outer loop + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111678e-16 + outer loop + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -158.62500836434157 -98.04851429428321 -62.60000000000005 + vertex -158.62500836434157 -98.04851429428321 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -155.36616263752956 -100.09300066715029 617.3999999999999 + vertex -157.96616263752958 -95.58966856747121 -62.60000000000005 + vertex -157.96616263752958 -95.58966856747121 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -157.96616263752958 -95.58966856747121 -62.60000000000005 + vertex -155.36616263752956 -100.09300066715029 617.3999999999999 + vertex -155.36616263752956 -100.09300066715029 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912293 -0.6087614290087284 1.6369160198769076e-16 + outer loop + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + vertex -156.74004767595687 -99.02239933271049 617.3999999999999 + vertex -156.74004767595687 -99.02239933271049 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912293 -0.6087614290087284 1.6369160198769076e-16 + outer loop + vertex -156.74004767595687 -99.02239933271049 617.3999999999999 + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087209 -0.793353340291235 1.8829806831558401e-16 + outer loop + vertex -169.87641667537397 -94.96050344287237 617.3999999999999 + vertex -170.43560498457762 -95.38958372388666 -62.60000000000005 + vertex -169.87641667537397 -94.96050344287237 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087209 -0.793353340291235 1.8829806831558401e-16 + outer loop + vertex -170.43560498457762 -95.38958372388666 -62.60000000000005 + vertex -169.87641667537397 -94.96050344287237 617.3999999999999 + vertex -170.43560498457762 -95.38958372388666 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236510993 -0.9238795325112785 2.359101198653002e-16 + outer loop + vertex -167.17641667537399 -94.96050344287237 -62.60000000000005 + vertex -167.82760525359714 -94.69077230210985 617.3999999999999 + vertex -167.82760525359714 -94.69077230210985 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510993 -0.9238795325112785 2.359101198653002e-16 + outer loop + vertex -167.82760525359714 -94.69077230210985 617.3999999999999 + vertex -167.17641667537399 -94.96050344287237 -62.60000000000005 + vertex -167.17641667537399 -94.96050344287237 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912297 -0.608761429008728 1.3951546310861233e-16 + outer loop + vertex -170.43560498457762 -95.38958372388666 617.3999999999999 + vertex -170.86468526559196 -95.94877203309034 -62.60000000000005 + vertex -170.43560498457762 -95.38958372388666 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912297 -0.608761429008728 1.3951546310861233e-16 + outer loop + vertex -170.86468526559196 -95.94877203309034 -62.60000000000005 + vertex -170.43560498457762 -95.38958372388666 617.3999999999999 + vertex -170.86468526559196 -95.94877203309034 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912283 -0.6087614290087296 1.3951546310861272e-16 + outer loop + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + endloop +endfacet +facet normal 0.7933533402912283 -0.6087614290087296 1.3951546310861272e-16 + outer loop + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + vertex -155.36616263752956 -101.09300066715029 -62.600000000000065 + vertex -155.36616263752956 -101.09300066715029 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112842 0.38268343236509594 -1.0937881967045255e-16 + outer loop + vertex -170.86468526559193 -98.64877203309034 617.3999999999999 + vertex -171.13441640635446 -97.99758345486715 -62.60000000000005 + vertex -171.13441640635446 -97.99758345486715 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112842 0.38268343236509594 -1.0937881967045255e-16 + outer loop + vertex -171.13441640635446 -97.99758345486715 -62.60000000000005 + vertex -170.86468526559193 -98.64877203309034 617.3999999999999 + vertex -170.86468526559193 -98.64877203309034 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236510993 0.9238795325112785 -2.359101198653002e-16 + outer loop + vertex -169.2252280971508 -99.90677176407084 617.3999999999999 + vertex -169.87641667537395 -99.63704062330832 -62.60000000000005 + vertex -169.87641667537395 -99.63704062330832 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236510993 0.9238795325112785 -2.359101198653002e-16 + outer loop + vertex -169.87641667537395 -99.63704062330832 -62.60000000000005 + vertex -169.2252280971508 -99.90677176407084 617.3999999999999 + vertex -169.2252280971508 -99.90677176407084 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006162 -0.9914448613738092 2.4491671163867753e-16 + outer loop + vertex -168.52641667537395 -94.59877203309034 617.3999999999999 + vertex -169.2252280971508 -94.69077230210986 -62.60000000000005 + vertex -168.52641667537395 -94.59877203309034 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006162 -0.9914448613738092 2.4491671163867753e-16 + outer loop + vertex -169.2252280971508 -94.69077230210986 -62.60000000000005 + vertex -168.52641667537395 -94.59877203309034 617.3999999999999 + vertex -169.2252280971508 -94.69077230210986 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738122 0.13052619222003867 -4.7612051549714715e-17 + outer loop + vertex -171.13441640635446 -97.99758345486715 617.3999999999999 + vertex -171.22641667537397 -97.29877203309034 -62.60000000000005 + vertex -171.22641667537397 -97.29877203309034 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738122 0.13052619222003867 -4.7612051549714715e-17 + outer loop + vertex -171.22641667537397 -97.29877203309034 -62.60000000000005 + vertex -171.13441640635446 -97.99758345486715 617.3999999999999 + vertex -171.13441640635446 -97.99758345486715 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112844 -0.38268343236509583 1.0937881967045252e-16 + outer loop + vertex -165.91841694439347 -96.59996061131355 -62.60000000000005 + vertex -166.188148085156 -95.94877203309035 617.3999999999999 + vertex -166.188148085156 -95.94877203309035 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112844 -0.38268343236509583 1.0937881967045252e-16 + outer loop + vertex -166.188148085156 -95.94877203309035 617.3999999999999 + vertex -165.91841694439347 -96.59996061131355 -62.60000000000005 + vertex -165.91841694439347 -96.59996061131355 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912297 0.608761429008728 -1.3951546310861233e-16 + outer loop + vertex -166.6172283661703 -99.20796034229403 617.3999999999999 + vertex -166.18814808515597 -98.64877203309035 -62.60000000000005 + vertex -166.6172283661703 -99.20796034229403 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912297 0.608761429008728 -1.3951546310861233e-16 + outer loop + vertex -166.18814808515597 -98.64877203309035 -62.60000000000005 + vertex -166.6172283661703 -99.20796034229403 617.3999999999999 + vertex -166.18814808515597 -98.64877203309035 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087112 0.7933533402912425 -2.068490721426301e-16 + outer loop + vertex -169.87641667537395 -99.63704062330832 617.3999999999999 + vertex -170.43560498457765 -99.20796034229403 -62.60000000000005 + vertex -170.43560498457765 -99.20796034229403 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087112 0.7933533402912425 -2.068490721426301e-16 + outer loop + vertex -170.43560498457765 -99.20796034229403 -62.60000000000005 + vertex -169.87641667537395 -99.63704062330832 617.3999999999999 + vertex -169.87641667537395 -99.63704062330832 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112856 -0.3826834323650923 8.122510965098968e-17 + outer loop + vertex -170.86468526559196 -95.94877203309034 617.3999999999999 + vertex -171.13441640635446 -96.59996061131355 -62.60000000000005 + vertex -170.86468526559196 -95.94877203309034 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112856 -0.3826834323650923 8.122510965098968e-17 + outer loop + vertex -171.13441640635446 -96.59996061131355 -62.60000000000005 + vertex -170.86468526559196 -95.94877203309034 617.3999999999999 + vertex -171.13441640635446 -96.59996061131355 617.3999999999999 + endloop +endfacet +facet normal 0.382683432365087 -0.9238795325112881 2.2424847134412183e-16 + outer loop + vertex -169.2252280971508 -94.69077230210986 617.3999999999999 + vertex -169.87641667537397 -94.96050344287237 -62.60000000000005 + vertex -169.2252280971508 -94.69077230210986 -62.60000000000005 + endloop +endfacet +facet normal 0.382683432365087 -0.9238795325112881 2.2424847134412183e-16 + outer loop + vertex -169.87641667537397 -94.96050344287237 -62.60000000000005 + vertex -169.2252280971508 -94.69077230210986 617.3999999999999 + vertex -169.87641667537397 -94.96050344287237 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222004946 0.9914448613738108 -2.449167116386781e-16 + outer loop + vertex -168.52641667537395 -99.99877203309036 617.3999999999999 + vertex -167.82760525359717 -99.90677176407084 -62.60000000000005 + vertex -168.52641667537395 -99.99877203309036 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004946 0.9914448613738108 -2.449167116386781e-16 + outer loop + vertex -167.82760525359717 -99.90677176407084 -62.60000000000005 + vertex -168.52641667537395 -99.99877203309036 617.3999999999999 + vertex -167.82760525359717 -99.90677176407084 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112706 -0.3826834323651291 1.093788196704606e-16 + outer loop + vertex -156.32593720379282 -99.73965971044491 -62.60000000000005 + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + vertex -156.48577787980025 -99.35377018260895 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112706 -0.3826834323651291 1.093788196704606e-16 + outer loop + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + vertex -156.32593720379282 -99.73965971044491 -62.60000000000005 + vertex -156.32593720379282 -99.73965971044491 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112863 0.38268343236509095 -8.122510965098934e-17 + outer loop + vertex -166.18814808515597 -98.64877203309035 617.3999999999999 + vertex -165.91841694439347 -97.99758345486715 -62.60000000000005 + vertex -166.18814808515597 -98.64877203309035 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112863 0.38268343236509095 -8.122510965098934e-17 + outer loop + vertex -165.91841694439347 -97.99758345486715 -62.60000000000005 + vertex -166.18814808515597 -98.64877203309035 617.3999999999999 + vertex -165.91841694439347 -97.99758345486715 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738133 -0.13052619222003106 1.7399399201487936e-17 + outer loop + vertex -171.22641667537397 -97.29877203309034 617.3999999999999 + vertex -171.13441640635446 -96.59996061131355 -62.60000000000005 + vertex -171.13441640635446 -96.59996061131355 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738133 -0.13052619222003106 1.7399399201487936e-17 + outer loop + vertex -171.13441640635446 -96.59996061131355 -62.60000000000005 + vertex -171.22641667537397 -97.29877203309034 617.3999999999999 + vertex -171.22641667537397 -97.29877203309034 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912398 -0.6087614290087148 1.6369160198768753e-16 + outer loop + vertex -166.188148085156 -95.94877203309035 -62.60000000000005 + vertex -166.61722836617028 -95.38958372388667 617.3999999999999 + vertex -166.61722836617028 -95.38958372388667 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912398 -0.6087614290087148 1.6369160198768753e-16 + outer loop + vertex -166.61722836617028 -95.38958372388667 617.3999999999999 + vertex -166.188148085156 -95.94877203309035 -62.60000000000005 + vertex -166.188148085156 -95.94877203309035 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222005302 0.9914448613738104 -2.4889428277906147e-16 + outer loop + vertex -169.2252280971508 -99.90677176407084 617.3999999999999 + vertex -168.52641667537395 -99.99877203309036 -62.60000000000005 + vertex -169.2252280971508 -99.90677176407084 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222005302 0.9914448613738104 -2.4889428277906147e-16 + outer loop + vertex -168.52641667537395 -99.99877203309036 -62.60000000000005 + vertex -169.2252280971508 -99.90677176407084 617.3999999999999 + vertex -168.52641667537395 -99.99877203309036 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650908 0.9238795325112863 -2.2424847134412134e-16 + outer loop + vertex -167.82760525359717 -99.90677176407084 617.3999999999999 + vertex -167.17641667537396 -99.63704062330834 -62.60000000000005 + vertex -167.82760525359717 -99.90677176407084 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650908 0.9238795325112863 -2.2424847134412134e-16 + outer loop + vertex -167.17641667537396 -99.63704062330834 -62.60000000000005 + vertex -167.82760525359717 -99.90677176407084 617.3999999999999 + vertex -167.17641667537396 -99.63704062330834 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912398 0.6087614290087148 -1.6369160198768753e-16 + outer loop + vertex -170.43560498457765 -99.20796034229403 617.3999999999999 + vertex -170.86468526559193 -98.64877203309034 -62.60000000000005 + vertex -170.86468526559193 -98.64877203309034 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912398 0.6087614290087148 -1.6369160198768753e-16 + outer loop + vertex -170.86468526559193 -98.64877203309034 -62.60000000000005 + vertex -170.43560498457765 -99.20796034229403 617.3999999999999 + vertex -170.43560498457765 -99.20796034229403 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738132 -0.13052619222003214 4.7612051549713106e-17 + outer loop + vertex -156.27141852585532 -100.15377018260895 -62.60000000000005 + vertex -156.32593720379282 -99.73965971044491 617.3999999999999 + vertex -156.32593720379282 -99.73965971044491 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738132 -0.13052619222003214 4.7612051549713106e-17 + outer loop + vertex -156.32593720379282 -99.73965971044491 617.3999999999999 + vertex -156.27141852585532 -100.15377018260895 -62.60000000000005 + vertex -156.27141852585532 -100.15377018260895 617.3999999999999 + endloop +endfacet +facet normal -0.1305261922200513 -0.9914448613738106 2.4889428277906147e-16 + outer loop + vertex -167.82760525359714 -94.69077230210985 617.3999999999999 + vertex -168.52641667537395 -94.59877203309034 -62.60000000000005 + vertex -167.82760525359714 -94.69077230210985 -62.60000000000005 + endloop +endfacet +facet normal -0.1305261922200513 -0.9914448613738106 2.4889428277906147e-16 + outer loop + vertex -168.52641667537395 -94.59877203309034 -62.60000000000005 + vertex -167.82760525359714 -94.69077230210985 617.3999999999999 + vertex -168.52641667537395 -94.59877203309034 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738139 0.13052619222002612 -1.739939920148668e-17 + outer loop + vertex -156.32593720379282 -100.56788065477299 -62.60000000000005 + vertex -156.27141852585532 -100.15377018260895 617.3999999999999 + vertex -156.27141852585532 -100.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738139 0.13052619222002612 -1.739939920148668e-17 + outer loop + vertex -156.27141852585532 -100.15377018260895 617.3999999999999 + vertex -156.32593720379282 -100.56788065477299 -62.60000000000005 + vertex -156.32593720379282 -100.56788065477299 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087435 -0.7933533402912177 2.0684907214262443e-16 + outer loop + vertex -156.74004767595687 -99.02239933271049 -62.60000000000005 + vertex -157.07141852585534 -98.76812953655386 617.3999999999999 + vertex -157.07141852585534 -98.76812953655386 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087435 -0.7933533402912177 2.0684907214262443e-16 + outer loop + vertex -157.07141852585534 -98.76812953655386 617.3999999999999 + vertex -156.74004767595687 -99.02239933271049 -62.60000000000005 + vertex -156.74004767595687 -99.02239933271049 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738133 0.13052619222003106 -1.7399399201487936e-17 + outer loop + vertex -165.91841694439347 -97.99758345486715 -62.60000000000005 + vertex -165.82641667537396 -97.29877203309034 617.3999999999999 + vertex -165.82641667537396 -97.29877203309034 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738133 0.13052619222003106 -1.7399399201487936e-17 + outer loop + vertex -165.82641667537396 -97.29877203309034 617.3999999999999 + vertex -165.91841694439347 -97.99758345486715 -62.60000000000005 + vertex -165.91841694439347 -97.99758345486715 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738122 -0.13052619222003867 4.7612051549714715e-17 + outer loop + vertex -165.82641667537396 -97.29877203309034 -62.60000000000005 + vertex -165.91841694439347 -96.59996061131355 617.3999999999999 + vertex -165.91841694439347 -96.59996061131355 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738122 -0.13052619222003867 4.7612051549714715e-17 + outer loop + vertex -165.91841694439347 -96.59996061131355 617.3999999999999 + vertex -165.82641667537396 -97.29877203309034 -62.60000000000005 + vertex -165.82641667537396 -97.29877203309034 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087209 0.793353340291235 -1.8829806831558401e-16 + outer loop + vertex -167.17641667537396 -99.63704062330834 617.3999999999999 + vertex -166.6172283661703 -99.20796034229403 -62.60000000000005 + vertex -167.17641667537396 -99.63704062330834 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087209 0.793353340291235 -1.8829806831558401e-16 + outer loop + vertex -166.6172283661703 -99.20796034229403 -62.60000000000005 + vertex -167.17641667537396 -99.63704062330834 617.3999999999999 + vertex -166.6172283661703 -99.20796034229403 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087241 -0.7933533402912325 1.8829806831558332e-16 + outer loop + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + endloop +endfacet +facet normal 0.6087614290087241 -0.7933533402912325 1.8829806831558332e-16 + outer loop + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -155.52508126012748 -101.30010744833686 -62.60000000000008 + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112936 0.38268343236507346 -8.122510965098492e-17 + outer loop + vertex -156.48577787980022 -100.95377018260896 617.3999999999999 + vertex -156.32593720379282 -100.56788065477299 -62.60000000000005 + vertex -156.48577787980022 -100.95377018260896 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112936 0.38268343236507346 -8.122510965098492e-17 + outer loop + vertex -156.32593720379282 -100.56788065477299 -62.60000000000005 + vertex -156.48577787980022 -100.95377018260896 617.3999999999999 + vertex -156.32593720379282 -100.56788065477299 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087119 -0.7933533402912418 2.0684907214262993e-16 + outer loop + vertex -166.61722836617028 -95.38958372388667 -62.60000000000005 + vertex -167.17641667537399 -94.96050344287237 617.3999999999999 + vertex -167.17641667537399 -94.96050344287237 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087119 -0.7933533402912418 2.0684907214262993e-16 + outer loop + vertex -167.17641667537399 -94.96050344287237 617.3999999999999 + vertex -166.61722836617028 -95.38958372388667 -62.60000000000005 + vertex -166.61722836617028 -95.38958372388667 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 0.13052619222003214 -4.7612051549713106e-17 + outer loop + vertex -159.41689984791785 -100.56788065477302 617.3999999999999 + vertex -159.47141852585534 -100.15377018260898 -62.60000000000005 + vertex -159.47141852585534 -100.15377018260898 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 0.13052619222003214 -4.7612051549713106e-17 + outer loop + vertex -159.47141852585534 -100.15377018260898 -62.60000000000005 + vertex -159.41689984791785 -100.56788065477302 617.3999999999999 + vertex -159.41689984791785 -100.56788065477302 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912286 0.6087614290087291 -1.6369160198769096e-16 + outer loop + vertex -159.0027893757538 -101.28514103250745 617.3999999999999 + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912286 0.6087614290087291 -1.6369160198769096e-16 + outer loop + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + vertex -159.0027893757538 -101.28514103250745 617.3999999999999 + vertex -159.0027893757538 -101.28514103250745 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236509755 0.9238795325112835 -2.242484713441206e-16 + outer loop + vertex -157.45730805369126 -101.69925150467147 617.3999999999999 + vertex -157.0714185258553 -101.53941082866406 -62.60000000000005 + vertex -157.45730805369126 -101.69925150467147 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236509755 0.9238795325112835 -2.242484713441206e-16 + outer loop + vertex -157.0714185258553 -101.53941082866406 -62.60000000000005 + vertex -157.45730805369126 -101.69925150467147 617.3999999999999 + vertex -157.0714185258553 -101.53941082866406 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087293 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -158.67141852585536 -98.76812953655387 617.3999999999999 + vertex -159.00278937575385 -99.0223993327105 -62.60000000000005 + vertex -158.67141852585536 -98.76812953655387 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087293 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -159.00278937575385 -99.0223993327105 -62.60000000000005 + vertex -158.67141852585536 -98.76812953655387 617.3999999999999 + vertex -159.00278937575385 -99.0223993327105 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222005393 -0.99144486137381 2.488942827790614e-16 + outer loop + vertex -157.45730805369132 -98.60828886054645 617.3999999999999 + vertex -157.87141852585535 -98.55377018260896 -62.60000000000005 + vertex -157.45730805369132 -98.60828886054645 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222005393 -0.99144486137381 2.488942827790614e-16 + outer loop + vertex -157.87141852585535 -98.55377018260896 -62.60000000000005 + vertex -157.45730805369132 -98.60828886054645 617.3999999999999 + vertex -157.87141852585535 -98.55377018260896 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651285 0.9238795325112709 -2.2424847134411695e-16 + outer loop + vertex -170.96730435272855 -109.49925150467148 617.3999999999999 + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323651285 0.9238795325112709 -2.2424847134411695e-16 + outer loop + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + vertex -170.96730435272855 -109.49925150467148 617.3999999999999 + vertex -170.58141482489256 -109.33941082866406 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236506736 0.9238795325112962 -2.3591011986530397e-16 + outer loop + vertex -158.28552899801934 -101.6992515046715 617.3999999999999 + vertex -158.67141852585533 -101.53941082866409 -62.60000000000005 + vertex -158.67141852585533 -101.53941082866409 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236506736 0.9238795325112962 -2.3591011986530397e-16 + outer loop + vertex -158.67141852585533 -101.53941082866409 -62.60000000000005 + vertex -158.28552899801934 -101.6992515046715 617.3999999999999 + vertex -158.28552899801934 -101.6992515046715 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112702 0.3826834323651299 -1.093788196704608e-16 + outer loop + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + vertex -159.41689984791785 -100.56788065477302 -62.60000000000005 + vertex -159.41689984791785 -100.56788065477302 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112702 0.3826834323651299 -1.093788196704608e-16 + outer loop + vertex -159.41689984791785 -100.56788065477302 -62.60000000000005 + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + vertex -159.25705917191044 -100.95377018260898 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -157.0714185258553 -101.53941082866406 617.3999999999999 + vertex -156.74004767595684 -101.28514103250744 -62.60000000000005 + vertex -157.0714185258553 -101.53941082866406 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -156.74004767595684 -101.28514103250744 -62.60000000000005 + vertex -157.0714185258553 -101.53941082866406 617.3999999999999 + vertex -156.74004767595684 -101.28514103250744 617.3999999999999 + endloop +endfacet +facet normal 0.991444861373804 0.1305261922200995 -4.761205154972974e-17 + outer loop + vertex -172.9268961469551 -108.367880654773 617.3999999999999 + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + vertex -172.9814148248926 -107.95377018260898 617.3999999999999 + endloop +endfacet +facet normal 0.991444861373804 0.1305261922200995 -4.761205154972974e-17 + outer loop + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + vertex -172.9268961469551 -108.367880654773 617.3999999999999 + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222005393 0.99144486137381 -2.488942827790614e-16 + outer loop + vertex -158.28552899801934 -101.6992515046715 617.3999999999999 + vertex -157.87141852585532 -101.75377018260896 -62.60000000000005 + vertex -158.28552899801934 -101.6992515046715 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222005393 0.99144486137381 -2.488942827790614e-16 + outer loop + vertex -157.87141852585532 -101.75377018260896 -62.60000000000005 + vertex -158.28552899801934 -101.6992515046715 617.3999999999999 + vertex -157.87141852585532 -101.75377018260896 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222003814 0.9914448613738123 -2.488942827790617e-16 + outer loop + vertex -171.7955252970566 -109.49925150467148 617.3999999999999 + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222003814 0.9914448613738123 -2.488942827790617e-16 + outer loop + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 617.3999999999999 + vertex -171.38141482489257 -109.55377018260897 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087293 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -172.18141482489258 -106.56812953655387 617.3999999999999 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087293 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + vertex -172.18141482489258 -106.56812953655387 617.3999999999999 + vertex -172.51278567479108 -106.8223993327105 617.3999999999999 + endloop +endfacet +facet normal 0.608761429008704 0.793353340291248 -2.0684907214263136e-16 + outer loop + vertex -172.18141482489256 -109.33941082866409 617.3999999999999 + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + vertex -172.51278567479108 -109.08514103250747 617.3999999999999 + endloop +endfacet +facet normal 0.608761429008704 0.793353340291248 -2.0684907214263136e-16 + outer loop + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + vertex -172.18141482489256 -109.33941082866409 617.3999999999999 + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222002979 0.9914448613738133 -2.44916711638679e-16 + outer loop + vertex -171.38141482489257 -109.55377018260897 617.3999999999999 + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + vertex -171.38141482489257 -109.55377018260897 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222002979 0.9914448613738133 -2.44916711638679e-16 + outer loop + vertex -170.96730435272855 -109.49925150467148 -62.60000000000005 + vertex -171.38141482489257 -109.55377018260897 617.3999999999999 + vertex -170.96730435272855 -109.49925150467148 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087455 0.7933533402912161 -2.0684907214262404e-16 + outer loop + vertex -158.67141852585533 -101.53941082866409 617.3999999999999 + vertex -159.0027893757538 -101.28514103250745 -62.60000000000005 + vertex -159.0027893757538 -101.28514103250745 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087455 0.7933533402912161 -2.0684907214262404e-16 + outer loop + vertex -159.0027893757538 -101.28514103250745 -62.60000000000005 + vertex -158.67141852585533 -101.53941082866409 617.3999999999999 + vertex -158.67141852585533 -101.53941082866409 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738139 -0.13052619222002612 1.739939920148668e-17 + outer loop + vertex -159.47141852585534 -100.15377018260898 617.3999999999999 + vertex -159.41689984791785 -99.73965971044495 -62.60000000000005 + vertex -159.41689984791785 -99.73965971044495 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738139 -0.13052619222002612 1.739939920148668e-17 + outer loop + vertex -159.41689984791785 -99.73965971044495 -62.60000000000005 + vertex -159.47141852585534 -100.15377018260898 617.3999999999999 + vertex -159.47141852585534 -100.15377018260898 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -170.58141482489256 -109.33941082866406 617.3999999999999 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + vertex -170.58141482489256 -109.33941082866406 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + vertex -170.58141482489256 -109.33941082866406 617.3999999999999 + vertex -170.2500439749941 -109.08514103250742 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738123 -0.13052619222003833 1.7399399201489748e-17 + outer loop + vertex -172.9814148248926 -107.95377018260898 617.3999999999999 + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -172.92689614695513 -107.53965971044495 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738123 -0.13052619222003833 1.7399399201489748e-17 + outer loop + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -172.9814148248926 -107.95377018260898 617.3999999999999 + vertex -172.9814148248926 -107.95377018260898 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912176 -0.6087614290087435 1.3951546310861635e-16 + outer loop + vertex -172.51278567479108 -106.8223993327105 617.3999999999999 + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912176 -0.6087614290087435 1.3951546310861635e-16 + outer loop + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + vertex -172.51278567479108 -106.8223993327105 617.3999999999999 + vertex -172.7670554709477 -107.15377018260895 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236509794 -0.9238795325112834 2.242484713441205e-16 + outer loop + vertex -158.28552899801937 -98.60828886054645 617.3999999999999 + vertex -158.67141852585536 -98.76812953655387 -62.60000000000005 + vertex -158.28552899801937 -98.60828886054645 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236509794 -0.9238795325112834 2.242484713441205e-16 + outer loop + vertex -158.67141852585536 -98.76812953655387 -62.60000000000005 + vertex -158.28552899801937 -98.60828886054645 617.3999999999999 + vertex -158.67141852585536 -98.76812953655387 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912404 -0.6087614290087139 1.3951546310860865e-16 + outer loop + vertex -159.00278937575385 -99.0223993327105 617.3999999999999 + vertex -159.25705917191047 -99.35377018260897 -62.60000000000005 + vertex -159.00278937575385 -99.0223993327105 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912404 -0.6087614290087139 1.3951546310860865e-16 + outer loop + vertex -159.25705917191047 -99.35377018260897 -62.60000000000005 + vertex -159.00278937575385 -99.0223993327105 617.3999999999999 + vertex -159.25705917191047 -99.35377018260897 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222007497 0.9914448613738074 -2.4491671163867684e-16 + outer loop + vertex -157.87141852585532 -101.75377018260896 617.3999999999999 + vertex -157.45730805369126 -101.69925150467147 -62.60000000000005 + vertex -157.87141852585532 -101.75377018260896 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222007497 0.9914448613738074 -2.4491671163867684e-16 + outer loop + vertex -157.45730805369126 -101.69925150467147 -62.60000000000005 + vertex -157.87141852585532 -101.75377018260896 617.3999999999999 + vertex -157.45730805369126 -101.69925150467147 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112913 0.38268343236507874 -1.0937881967044837e-16 + outer loop + vertex -172.76705547094767 -108.753770182609 617.3999999999999 + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + vertex -172.9268961469551 -108.367880654773 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112913 0.38268343236507874 -1.0937881967044837e-16 + outer loop + vertex -172.9268961469551 -108.367880654773 -62.60000000000005 + vertex -172.76705547094767 -108.753770182609 617.3999999999999 + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912286 0.6087614290087291 -1.6369160198769096e-16 + outer loop + vertex -172.51278567479108 -109.08514103250747 617.3999999999999 + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + vertex -172.76705547094767 -108.753770182609 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912286 0.6087614290087291 -1.6369160198769096e-16 + outer loop + vertex -172.76705547094767 -108.753770182609 -62.60000000000005 + vertex -172.51278567479108 -109.08514103250747 617.3999999999999 + vertex -172.51278567479108 -109.08514103250747 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006068 -0.9914448613738093 2.449167116386776e-16 + outer loop + vertex -157.87141852585535 -98.55377018260896 617.3999999999999 + vertex -158.28552899801937 -98.60828886054645 -62.60000000000005 + vertex -157.87141852585535 -98.55377018260896 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006068 -0.9914448613738093 2.449167116386776e-16 + outer loop + vertex -158.28552899801937 -98.60828886054645 -62.60000000000005 + vertex -157.87141852585535 -98.55377018260896 617.3999999999999 + vertex -158.28552899801937 -98.60828886054645 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650711 -0.9238795325112945 2.359101198653036e-16 + outer loop + vertex -157.07141852585534 -98.76812953655386 -62.60000000000005 + vertex -157.45730805369132 -98.60828886054645 617.3999999999999 + vertex -157.45730805369132 -98.60828886054645 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650711 -0.9238795325112945 2.359101198653036e-16 + outer loop + vertex -157.45730805369132 -98.60828886054645 617.3999999999999 + vertex -157.07141852585534 -98.76812953655386 -62.60000000000005 + vertex -157.07141852585534 -98.76812953655386 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650635 0.9238795325112976 -2.3591011986530427e-16 + outer loop + vertex -171.7955252970566 -109.49925150467148 617.3999999999999 + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + vertex -172.18141482489256 -109.33941082866409 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650635 0.9238795325112976 -2.3591011986530427e-16 + outer loop + vertex -172.18141482489256 -109.33941082866409 -62.60000000000005 + vertex -171.7955252970566 -109.49925150467148 617.3999999999999 + vertex -171.7955252970566 -109.49925150467148 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912404 0.6087614290087139 -1.3951546310860865e-16 + outer loop + vertex -156.74004767595684 -101.28514103250744 617.3999999999999 + vertex -156.48577787980022 -100.95377018260896 -62.60000000000005 + vertex -156.74004767595684 -101.28514103250744 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912404 0.6087614290087139 -1.3951546310860865e-16 + outer loop + vertex -156.48577787980022 -100.95377018260896 -62.60000000000005 + vertex -156.74004767595684 -101.28514103250744 617.3999999999999 + vertex -156.48577787980022 -100.95377018260896 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912176 0.6087614290087435 -1.3951546310861635e-16 + outer loop + vertex -170.2500439749941 -109.08514103250742 617.3999999999999 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912176 0.6087614290087435 -1.3951546310861635e-16 + outer loop + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + vertex -170.2500439749941 -109.08514103250742 617.3999999999999 + vertex -169.99577417883745 -108.75377018260897 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112851 -0.38268343236509406 8.122510965099015e-17 + outer loop + vertex -172.7670554709477 -107.15377018260895 617.3999999999999 + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -172.7670554709477 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112851 -0.38268343236509406 8.122510965099015e-17 + outer loop + vertex -172.92689614695513 -107.53965971044495 -62.60000000000005 + vertex -172.7670554709477 -107.15377018260895 617.3999999999999 + vertex -172.92689614695513 -107.53965971044495 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112936 -0.38268343236507346 8.122510965098492e-17 + outer loop + vertex -159.25705917191047 -99.35377018260897 617.3999999999999 + vertex -159.41689984791785 -99.73965971044495 -62.60000000000005 + vertex -159.25705917191047 -99.35377018260897 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112936 -0.38268343236507346 8.122510965098492e-17 + outer loop + vertex -159.41689984791785 -99.73965971044495 -62.60000000000005 + vertex -159.25705917191047 -99.35377018260897 617.3999999999999 + vertex -159.41689984791785 -99.73965971044495 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087293 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -179.98141482489262 -93.05813323751663 617.3999999999999 + vertex -180.3127856747911 -93.31240303367325 -62.60000000000005 + vertex -179.98141482489262 -93.05813323751663 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087293 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -180.3127856747911 -93.31240303367325 -62.60000000000005 + vertex -179.98141482489262 -93.05813323751663 617.3999999999999 + vertex -180.3127856747911 -93.31240303367325 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650711 0.9238795325112945 -2.359101198653036e-16 + outer loop + vertex -179.5955252970566 -95.98925520563425 617.3999999999999 + vertex -179.98141482489257 -95.82941452962685 -62.60000000000005 + vertex -179.98141482489257 -95.82941452962685 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650711 0.9238795325112945 -2.359101198653036e-16 + outer loop + vertex -179.98141482489257 -95.82941452962685 -62.60000000000005 + vertex -179.5955252970566 -95.98925520563425 617.3999999999999 + vertex -179.5955252970566 -95.98925520563425 -62.60000000000005 + endloop +endfacet +facet normal -0.608761429008704 -0.793353340291248 2.0684907214263136e-16 + outer loop + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + vertex -170.5814148248926 -106.56812953655385 617.3999999999999 + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + endloop +endfacet +facet normal -0.608761429008704 -0.793353340291248 2.0684907214263136e-16 + outer loop + vertex -170.5814148248926 -106.56812953655385 617.3999999999999 + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + vertex -170.25004397499413 -106.82239933271049 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738139 0.1305261922200255 -1.739939920148656e-17 + outer loop + vertex -177.63593350283008 -94.85788435573575 -62.60000000000005 + vertex -177.5814148248926 -94.44377388357171 617.3999999999999 + vertex -177.5814148248926 -94.44377388357171 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738139 0.1305261922200255 -1.739939920148656e-17 + outer loop + vertex -177.5814148248926 -94.44377388357171 617.3999999999999 + vertex -177.63593350283008 -94.85788435573575 -62.60000000000005 + vertex -177.63593350283008 -94.85788435573575 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738066 0.1305261922200808 -1.7399399201500422e-17 + outer loop + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 617.3999999999999 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738066 0.1305261922200808 -1.7399399201500422e-17 + outer loop + vertex -169.78141482489258 -107.95377018260895 617.3999999999999 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -169.83593350283007 -108.36788065477299 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222003814 -0.9914448613738123 2.488942827790617e-16 + outer loop + vertex -170.96730435272858 -106.40828886054645 617.3999999999999 + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222003814 -0.9914448613738123 2.488942827790617e-16 + outer loop + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + vertex -170.96730435272858 -106.40828886054645 617.3999999999999 + vertex -171.3814148248926 -106.35377018260895 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 0.13052619222003214 -4.7612051549713106e-17 + outer loop + vertex -180.7268961469551 -94.85788435573578 617.3999999999999 + vertex -180.7814148248926 -94.44377388357174 -62.60000000000005 + vertex -180.7814148248926 -94.44377388357174 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 0.13052619222003214 -4.7612051549713106e-17 + outer loop + vertex -180.7814148248926 -94.44377388357174 -62.60000000000005 + vertex -180.7268961469551 -94.85788435573578 617.3999999999999 + vertex -180.7268961469551 -94.85788435573578 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112936 -0.38268343236507346 8.122510965098492e-17 + outer loop + vertex -180.5670554709477 -93.64377388357174 617.3999999999999 + vertex -180.7268961469551 -94.0296634114077 -62.60000000000005 + vertex -180.5670554709477 -93.64377388357174 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112936 -0.38268343236507346 8.122510965098492e-17 + outer loop + vertex -180.7268961469551 -94.0296634114077 -62.60000000000005 + vertex -180.5670554709477 -93.64377388357174 617.3999999999999 + vertex -180.7268961469551 -94.0296634114077 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087435 0.7933533402912177 -2.0684907214262443e-16 + outer loop + vertex -179.98141482489257 -95.82941452962685 617.3999999999999 + vertex -180.31278567479106 -95.5751447334702 -62.60000000000005 + vertex -180.31278567479106 -95.5751447334702 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087435 0.7933533402912177 -2.0684907214262443e-16 + outer loop + vertex -180.31278567479106 -95.5751447334702 -62.60000000000005 + vertex -179.98141482489257 -95.82941452962685 617.3999999999999 + vertex -179.98141482489257 -95.82941452962685 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112887 -0.3826834323650853 1.0937881967044996e-16 + outer loop + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + vertex -169.99577417883748 -107.15377018260895 617.3999999999999 + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112887 -0.3826834323650853 1.0937881967044996e-16 + outer loop + vertex -169.99577417883748 -107.15377018260895 617.3999999999999 + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + vertex -169.83593350283007 -107.53965971044492 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222005393 0.99144486137381 -2.488942827790614e-16 + outer loop + vertex -179.5955252970566 -95.98925520563425 617.3999999999999 + vertex -179.18141482489258 -96.04377388357173 -62.60000000000005 + vertex -179.5955252970566 -95.98925520563425 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222005393 0.99144486137381 -2.488942827790614e-16 + outer loop + vertex -179.18141482489258 -96.04377388357173 -62.60000000000005 + vertex -179.5955252970566 -95.98925520563425 617.3999999999999 + vertex -179.18141482489258 -96.04377388357173 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006068 0.9914448613738093 -2.449167116386776e-16 + outer loop + vertex -179.18141482489258 -96.04377388357173 617.3999999999999 + vertex -178.76730435272856 -95.98925520563425 -62.60000000000005 + vertex -179.18141482489258 -96.04377388357173 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006068 0.9914448613738093 -2.449167116386776e-16 + outer loop + vertex -178.76730435272856 -95.98925520563425 -62.60000000000005 + vertex -179.18141482489258 -96.04377388357173 617.3999999999999 + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236509794 0.9238795325112834 -2.242484713441205e-16 + outer loop + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + vertex -178.38141482489257 -95.82941452962682 -62.60000000000005 + vertex -178.76730435272856 -95.98925520563425 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236509794 0.9238795325112834 -2.242484713441205e-16 + outer loop + vertex -178.38141482489257 -95.82941452962682 -62.60000000000005 + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + vertex -178.38141482489257 -95.82941452962682 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112976 0.3826834323650636 -8.122510965098238e-17 + outer loop + vertex -169.99577417883745 -108.75377018260897 617.3999999999999 + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112976 0.3826834323650636 -8.122510965098238e-17 + outer loop + vertex -169.83593350283007 -108.36788065477299 -62.60000000000005 + vertex -169.99577417883745 -108.75377018260897 617.3999999999999 + vertex -169.83593350283007 -108.36788065477299 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651285 -0.9238795325112709 2.2424847134411695e-16 + outer loop + vertex -171.79552529705666 -106.40828886054645 617.3999999999999 + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651285 -0.9238795325112709 2.2424847134411695e-16 + outer loop + vertex -172.18141482489258 -106.56812953655387 -62.60000000000005 + vertex -171.79552529705666 -106.40828886054645 617.3999999999999 + vertex -172.18141482489258 -106.56812953655387 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087455 -0.7933533402912161 2.0684907214262404e-16 + outer loop + vertex -178.05004397499414 -93.31240303367323 -62.60000000000005 + vertex -178.3814148248926 -93.0581332375166 617.3999999999999 + vertex -178.3814148248926 -93.0581332375166 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087455 -0.7933533402912161 2.0684907214262404e-16 + outer loop + vertex -178.3814148248926 -93.0581332375166 617.3999999999999 + vertex -178.05004397499414 -93.31240303367323 -62.60000000000005 + vertex -178.05004397499414 -93.31240303367323 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222005393 -0.99144486137381 2.488942827790614e-16 + outer loop + vertex -178.76730435272856 -92.89829256150921 617.3999999999999 + vertex -179.1814148248926 -92.84377388357171 -62.60000000000005 + vertex -178.76730435272856 -92.89829256150921 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222005393 -0.99144486137381 2.488942827790614e-16 + outer loop + vertex -179.1814148248926 -92.84377388357171 -62.60000000000005 + vertex -178.76730435272856 -92.89829256150921 617.3999999999999 + vertex -179.1814148248926 -92.84377388357171 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912293 0.6087614290087284 -1.6369160198769076e-16 + outer loop + vertex -180.31278567479106 -95.5751447334702 617.3999999999999 + vertex -180.56705547094768 -95.24377388357173 -62.60000000000005 + vertex -180.56705547094768 -95.24377388357173 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912293 0.6087614290087284 -1.6369160198769076e-16 + outer loop + vertex -180.56705547094768 -95.24377388357173 -62.60000000000005 + vertex -180.31278567479106 -95.5751447334702 617.3999999999999 + vertex -180.31278567479106 -95.5751447334702 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112936 0.38268343236507346 -8.122510965098492e-17 + outer loop + vertex -177.79577417883746 -95.2437738835717 617.3999999999999 + vertex -177.63593350283008 -94.85788435573575 -62.60000000000005 + vertex -177.79577417883746 -95.2437738835717 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112936 0.38268343236507346 -8.122510965098492e-17 + outer loop + vertex -177.63593350283008 -94.85788435573575 -62.60000000000005 + vertex -177.79577417883746 -95.2437738835717 617.3999999999999 + vertex -177.63593350283008 -94.85788435573575 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236506736 -0.9238795325112962 2.3591011986530397e-16 + outer loop + vertex -178.3814148248926 -93.0581332375166 -62.60000000000005 + vertex -178.76730435272856 -92.89829256150921 617.3999999999999 + vertex -178.76730435272856 -92.89829256150921 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236506736 -0.9238795325112962 2.3591011986530397e-16 + outer loop + vertex -178.76730435272856 -92.89829256150921 617.3999999999999 + vertex -178.3814148248926 -93.0581332375166 -62.60000000000005 + vertex -178.3814148248926 -93.0581332375166 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738069 -0.13052619222007897 4.7612051549724674e-17 + outer loop + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + vertex -169.83593350283007 -107.53965971044492 617.3999999999999 + vertex -169.83593350283007 -107.53965971044492 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738069 -0.13052619222007897 4.7612051549724674e-17 + outer loop + vertex -169.83593350283007 -107.53965971044492 617.3999999999999 + vertex -169.78141482489258 -107.95377018260895 -62.60000000000005 + vertex -169.78141482489258 -107.95377018260895 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650635 -0.9238795325112976 2.3591011986530427e-16 + outer loop + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + vertex -170.96730435272858 -106.40828886054645 617.3999999999999 + vertex -170.96730435272858 -106.40828886054645 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650635 -0.9238795325112976 2.3591011986530427e-16 + outer loop + vertex -170.96730435272858 -106.40828886054645 617.3999999999999 + vertex -170.5814148248926 -106.56812953655385 -62.60000000000005 + vertex -170.5814148248926 -106.56812953655385 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912404 -0.6087614290087139 1.3951546310860865e-16 + outer loop + vertex -180.3127856747911 -93.31240303367325 617.3999999999999 + vertex -180.5670554709477 -93.64377388357174 -62.60000000000005 + vertex -180.3127856747911 -93.31240303367325 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912404 -0.6087614290087139 1.3951546310860865e-16 + outer loop + vertex -180.5670554709477 -93.64377388357174 -62.60000000000005 + vertex -180.3127856747911 -93.31240303367325 617.3999999999999 + vertex -180.5670554709477 -93.64377388357174 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -178.38141482489257 -95.82941452962682 617.3999999999999 + vertex -178.0500439749941 -95.5751447334702 -62.60000000000005 + vertex -178.38141482489257 -95.82941452962682 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -178.0500439749941 -95.5751447334702 -62.60000000000005 + vertex -178.38141482489257 -95.82941452962682 617.3999999999999 + vertex -178.0500439749941 -95.5751447334702 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738139 -0.13052619222002612 1.739939920148668e-17 + outer loop + vertex -180.7814148248926 -94.44377388357174 617.3999999999999 + vertex -180.7268961469551 -94.0296634114077 -62.60000000000005 + vertex -180.7268961469551 -94.0296634114077 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738139 -0.13052619222002612 1.739939920148668e-17 + outer loop + vertex -180.7268961469551 -94.0296634114077 -62.60000000000005 + vertex -180.7814148248926 -94.44377388357174 617.3999999999999 + vertex -180.7814148248926 -94.44377388357174 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912286 -0.6087614290087291 1.6369160198769096e-16 + outer loop + vertex -177.7957741788375 -93.64377388357171 -62.60000000000005 + vertex -178.05004397499414 -93.31240303367323 617.3999999999999 + vertex -178.05004397499414 -93.31240303367323 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912286 -0.6087614290087291 1.6369160198769096e-16 + outer loop + vertex -178.05004397499414 -93.31240303367323 617.3999999999999 + vertex -177.7957741788375 -93.64377388357171 -62.60000000000005 + vertex -177.7957741788375 -93.64377388357171 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236509833 -0.9238795325112832 2.2424847134412045e-16 + outer loop + vertex -179.59552529705667 -92.89829256150922 617.3999999999999 + vertex -179.98141482489262 -93.05813323751663 -62.60000000000005 + vertex -179.59552529705667 -92.89829256150922 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236509833 -0.9238795325112832 2.2424847134412045e-16 + outer loop + vertex -179.98141482489262 -93.05813323751663 -62.60000000000005 + vertex -179.59552529705667 -92.89829256150922 617.3999999999999 + vertex -179.98141482489262 -93.05813323751663 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222002979 -0.9914448613738133 2.44916711638679e-16 + outer loop + vertex -171.3814148248926 -106.35377018260895 617.3999999999999 + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + vertex -171.3814148248926 -106.35377018260895 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222002979 -0.9914448613738133 2.44916711638679e-16 + outer loop + vertex -171.79552529705666 -106.40828886054645 -62.60000000000005 + vertex -171.3814148248926 -106.35377018260895 617.3999999999999 + vertex -171.79552529705666 -106.40828886054645 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112706 0.3826834323651291 -1.093788196704606e-16 + outer loop + vertex -180.56705547094768 -95.24377388357173 617.3999999999999 + vertex -180.7268961469551 -94.85788435573578 -62.60000000000005 + vertex -180.7268961469551 -94.85788435573578 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112706 0.3826834323651291 -1.093788196704606e-16 + outer loop + vertex -180.7268961469551 -94.85788435573578 -62.60000000000005 + vertex -180.56705547094768 -95.24377388357173 617.3999999999999 + vertex -180.56705547094768 -95.24377388357173 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222007497 -0.9914448613738074 2.4491671163867684e-16 + outer loop + vertex -179.1814148248926 -92.84377388357171 617.3999999999999 + vertex -179.59552529705667 -92.89829256150922 -62.60000000000005 + vertex -179.1814148248926 -92.84377388357171 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222007497 -0.9914448613738074 2.4491671163867684e-16 + outer loop + vertex -179.59552529705667 -92.89829256150922 -62.60000000000005 + vertex -179.1814148248926 -92.84377388357171 617.3999999999999 + vertex -179.59552529705667 -92.89829256150922 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912404 0.6087614290087139 -1.3951546310860865e-16 + outer loop + vertex -178.0500439749941 -95.5751447334702 617.3999999999999 + vertex -177.79577417883746 -95.2437738835717 -62.60000000000005 + vertex -178.0500439749941 -95.5751447334702 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912404 0.6087614290087139 -1.3951546310860865e-16 + outer loop + vertex -177.79577417883746 -95.2437738835717 -62.60000000000005 + vertex -178.0500439749941 -95.5751447334702 617.3999999999999 + vertex -177.79577417883746 -95.2437738835717 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912286 -0.6087614290087291 1.6369160198769096e-16 + outer loop + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + vertex -170.25004397499413 -106.82239933271049 617.3999999999999 + vertex -170.25004397499413 -106.82239933271049 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912286 -0.6087614290087291 1.6369160198769096e-16 + outer loop + vertex -170.25004397499413 -106.82239933271049 617.3999999999999 + vertex -169.99577417883748 -107.15377018260895 -62.60000000000005 + vertex -169.99577417883748 -107.15377018260895 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222002979 0.9914448613738133 -2.44916711638679e-16 + outer loop + vertex -165.67141852585536 -88.24377388357172 617.3999999999999 + vertex -165.25730805369133 -88.18925520563424 -62.60000000000005 + vertex -165.67141852585536 -88.24377388357172 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222002979 0.9914448613738133 -2.44916711638679e-16 + outer loop + vertex -165.25730805369133 -88.18925520563424 -62.60000000000005 + vertex -165.67141852585536 -88.24377388357172 617.3999999999999 + vertex -165.25730805369133 -88.18925520563424 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651285 0.9238795325112709 -2.2424847134411695e-16 + outer loop + vertex -165.25730805369133 -88.18925520563424 617.3999999999999 + vertex -164.87141852585535 -88.02941452962682 -62.60000000000005 + vertex -165.25730805369133 -88.18925520563424 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323651285 0.9238795325112709 -2.2424847134411695e-16 + outer loop + vertex -164.87141852585535 -88.02941452962682 -62.60000000000005 + vertex -165.25730805369133 -88.18925520563424 617.3999999999999 + vertex -164.87141852585535 -88.02941452962682 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912176 0.6087614290087435 -1.3951546310861635e-16 + outer loop + vertex -164.54004767595688 -87.7751447334702 617.3999999999999 + vertex -164.28577787980024 -87.44377388357172 -62.60000000000005 + vertex -164.54004767595688 -87.7751447334702 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912176 0.6087614290087435 -1.3951546310861635e-16 + outer loop + vertex -164.28577787980024 -87.44377388357172 -62.60000000000005 + vertex -164.54004767595688 -87.7751447334702 617.3999999999999 + vertex -164.28577787980024 -87.44377388357172 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -164.87141852585535 -88.02941452962682 617.3999999999999 + vertex -164.54004767595688 -87.7751447334702 -62.60000000000005 + vertex -164.87141852585535 -88.02941452962682 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087293 0.7933533402912285 -1.8829806831558229e-16 + outer loop + vertex -164.54004767595688 -87.7751447334702 -62.60000000000005 + vertex -164.87141852585535 -88.02941452962682 617.3999999999999 + vertex -164.54004767595688 -87.7751447334702 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112702 -0.3826834323651299 1.093788196704608e-16 + outer loop + vertex -177.63593350283008 -94.02966341140768 -62.60000000000005 + vertex -177.7957741788375 -93.64377388357171 617.3999999999999 + vertex -177.7957741788375 -93.64377388357171 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112702 -0.3826834323651299 1.093788196704608e-16 + outer loop + vertex -177.7957741788375 -93.64377388357171 617.3999999999999 + vertex -177.63593350283008 -94.02966341140768 -62.60000000000005 + vertex -177.63593350283008 -94.02966341140768 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112913 -0.38268343236507874 1.0937881967044837e-16 + outer loop + vertex -164.12593720379286 -86.22966341140767 -62.60000000000005 + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112913 -0.38268343236507874 1.0937881967044837e-16 + outer loop + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + vertex -164.12593720379286 -86.22966341140767 -62.60000000000005 + vertex -164.12593720379286 -86.22966341140767 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651287 -0.9238795325112708 2.2424847134411695e-16 + outer loop + vertex -166.0855289980194 -85.09829256150921 617.3999999999999 + vertex -166.47141852585537 -85.25813323751663 -62.60000000000005 + vertex -166.0855289980194 -85.09829256150921 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651287 -0.9238795325112708 2.2424847134411695e-16 + outer loop + vertex -166.47141852585537 -85.25813323751663 -62.60000000000005 + vertex -166.0855289980194 -85.09829256150921 617.3999999999999 + vertex -166.47141852585537 -85.25813323751663 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112978 -0.38268343236506336 8.12251096509823e-17 + outer loop + vertex -167.05705917191048 -85.84377388357173 617.3999999999999 + vertex -167.2168998479179 -86.2296634114077 -62.60000000000005 + vertex -167.05705917191048 -85.84377388357173 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112978 -0.38268343236506336 8.12251096509823e-17 + outer loop + vertex -167.2168998479179 -86.2296634114077 -62.60000000000005 + vertex -167.05705917191048 -85.84377388357173 617.3999999999999 + vertex -167.2168998479179 -86.2296634114077 617.3999999999999 + endloop +endfacet +facet normal -0.991444861373804 -0.1305261922200995 4.761205154972974e-17 + outer loop + vertex -164.07141852585536 -86.64377388357171 -62.60000000000005 + vertex -164.12593720379286 -86.22966341140767 617.3999999999999 + vertex -164.12593720379286 -86.22966341140767 -62.60000000000005 + endloop +endfacet +facet normal -0.991444861373804 -0.1305261922200995 4.761205154972974e-17 + outer loop + vertex -164.12593720379286 -86.22966341140767 617.3999999999999 + vertex -164.07141852585536 -86.64377388357171 -62.60000000000005 + vertex -164.07141852585536 -86.64377388357171 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738066 -0.1305261922200808 1.7399399201500422e-17 + outer loop + vertex -167.27141852585538 -86.64377388357174 617.3999999999999 + vertex -167.2168998479179 -86.2296634114077 -62.60000000000005 + vertex -167.2168998479179 -86.2296634114077 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738066 -0.1305261922200808 1.7399399201500422e-17 + outer loop + vertex -167.2168998479179 -86.2296634114077 -62.60000000000005 + vertex -167.27141852585538 -86.64377388357174 617.3999999999999 + vertex -167.27141852585538 -86.64377388357174 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510316 -0.9238795325112813 2.359101198653008e-16 + outer loop + vertex -164.87141852585538 -85.2581332375166 -62.60000000000005 + vertex -165.25730805369133 -85.0982925615092 617.3999999999999 + vertex -165.25730805369133 -85.0982925615092 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510316 -0.9238795325112813 2.359101198653008e-16 + outer loop + vertex -165.25730805369133 -85.0982925615092 617.3999999999999 + vertex -164.87141852585538 -85.2581332375166 -62.60000000000005 + vertex -164.87141852585538 -85.2581332375166 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112887 0.3826834323650853 -1.0937881967044996e-16 + outer loop + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + vertex -167.2168998479179 -87.05788435573575 -62.60000000000005 + vertex -167.2168998479179 -87.05788435573575 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112887 0.3826834323650853 -1.0937881967044996e-16 + outer loop + vertex -167.2168998479179 -87.05788435573575 -62.60000000000005 + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323650635 0.9238795325112976 -2.3591011986530427e-16 + outer loop + vertex -166.08552899801936 -88.18925520563424 617.3999999999999 + vertex -166.47141852585534 -88.02941452962685 -62.60000000000005 + vertex -166.47141852585534 -88.02941452962685 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650635 0.9238795325112976 -2.3591011986530427e-16 + outer loop + vertex -166.47141852585534 -88.02941452962685 -62.60000000000005 + vertex -166.08552899801936 -88.18925520563424 617.3999999999999 + vertex -166.08552899801936 -88.18925520563424 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222003814 0.9914448613738123 -2.488942827790617e-16 + outer loop + vertex -166.08552899801936 -88.18925520563424 617.3999999999999 + vertex -165.67141852585536 -88.24377388357172 -62.60000000000005 + vertex -166.08552899801936 -88.18925520563424 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222003814 0.9914448613738123 -2.488942827790617e-16 + outer loop + vertex -165.67141852585536 -88.24377388357172 -62.60000000000005 + vertex -166.08552899801936 -88.18925520563424 617.3999999999999 + vertex -165.67141852585536 -88.24377388357172 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222000525 -0.9914448613738165 2.4889428277906226e-16 + outer loop + vertex -165.25730805369133 -85.0982925615092 617.3999999999999 + vertex -165.6714185258554 -85.04377388357173 -62.60000000000005 + vertex -165.25730805369133 -85.0982925615092 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222000525 -0.9914448613738165 2.4889428277906226e-16 + outer loop + vertex -165.6714185258554 -85.04377388357173 -62.60000000000005 + vertex -165.25730805369133 -85.0982925615092 617.3999999999999 + vertex -165.6714185258554 -85.04377388357173 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087038 -0.7933533402912482 2.0684907214263136e-16 + outer loop + vertex -164.54004767595688 -85.51240303367324 -62.60000000000005 + vertex -164.87141852585538 -85.2581332375166 617.3999999999999 + vertex -164.87141852585538 -85.2581332375166 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087038 -0.7933533402912482 2.0684907214263136e-16 + outer loop + vertex -164.87141852585538 -85.2581332375166 617.3999999999999 + vertex -164.54004767595688 -85.51240303367324 -62.60000000000005 + vertex -164.54004767595688 -85.51240303367324 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738123 0.1305261922200373 -1.7399399201489483e-17 + outer loop + vertex -164.12593720379283 -87.05788435573575 -62.60000000000005 + vertex -164.07141852585536 -86.64377388357171 617.3999999999999 + vertex -164.07141852585536 -86.64377388357171 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738123 0.1305261922200373 -1.7399399201489483e-17 + outer loop + vertex -164.07141852585536 -86.64377388357171 617.3999999999999 + vertex -164.12593720379283 -87.05788435573575 -62.60000000000005 + vertex -164.12593720379283 -87.05788435573575 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222002995 -0.9914448613738134 2.44916711638679e-16 + outer loop + vertex -165.6714185258554 -85.04377388357173 617.3999999999999 + vertex -166.0855289980194 -85.09829256150921 -62.60000000000005 + vertex -165.6714185258554 -85.04377388357173 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222002995 -0.9914448613738134 2.44916711638679e-16 + outer loop + vertex -166.0855289980194 -85.09829256150921 -62.60000000000005 + vertex -165.6714185258554 -85.04377388357173 617.3999999999999 + vertex -166.0855289980194 -85.09829256150921 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912176 -0.6087614290087435 1.3951546310861635e-16 + outer loop + vertex -166.80278937575386 -85.51240303367325 617.3999999999999 + vertex -167.05705917191048 -85.84377388357173 -62.60000000000005 + vertex -166.80278937575386 -85.51240303367325 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912176 -0.6087614290087435 1.3951546310861635e-16 + outer loop + vertex -167.05705917191048 -85.84377388357173 -62.60000000000005 + vertex -166.80278937575386 -85.51240303367325 617.3999999999999 + vertex -167.05705917191048 -85.84377388357173 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738132 -0.13052619222003214 4.7612051549713106e-17 + outer loop + vertex -177.5814148248926 -94.44377388357171 -62.60000000000005 + vertex -177.63593350283008 -94.02966341140768 617.3999999999999 + vertex -177.63593350283008 -94.02966341140768 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738132 -0.13052619222003214 4.7612051549713106e-17 + outer loop + vertex -177.63593350283008 -94.02966341140768 617.3999999999999 + vertex -177.5814148248926 -94.44377388357171 -62.60000000000005 + vertex -177.5814148248926 -94.44377388357171 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112851 0.38268343236509406 -8.122510965099015e-17 + outer loop + vertex -164.28577787980024 -87.44377388357172 617.3999999999999 + vertex -164.12593720379283 -87.05788435573575 -62.60000000000005 + vertex -164.28577787980024 -87.44377388357172 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112851 0.38268343236509406 -8.122510965099015e-17 + outer loop + vertex -164.12593720379283 -87.05788435573575 -62.60000000000005 + vertex -164.28577787980024 -87.44377388357172 617.3999999999999 + vertex -164.12593720379283 -87.05788435573575 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912286 -0.6087614290087291 1.6369160198769096e-16 + outer loop + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + vertex -164.54004767595688 -85.51240303367324 617.3999999999999 + vertex -164.54004767595688 -85.51240303367324 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912286 -0.6087614290087291 1.6369160198769096e-16 + outer loop + vertex -164.54004767595688 -85.51240303367324 617.3999999999999 + vertex -164.28577787980026 -85.8437738835717 -62.60000000000005 + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738069 0.13052619222007897 -4.7612051549724674e-17 + outer loop + vertex -167.2168998479179 -87.05788435573575 617.3999999999999 + vertex -167.27141852585538 -86.64377388357174 -62.60000000000005 + vertex -167.27141852585538 -86.64377388357174 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738069 0.13052619222007897 -4.7612051549724674e-17 + outer loop + vertex -167.27141852585538 -86.64377388357174 -62.60000000000005 + vertex -167.2168998479179 -87.05788435573575 617.3999999999999 + vertex -167.2168998479179 -87.05788435573575 -62.60000000000005 + endloop +endfacet +facet normal 0.608761429008704 0.793353340291248 -2.0684907214263136e-16 + outer loop + vertex -166.47141852585534 -88.02941452962685 617.3999999999999 + vertex -166.80278937575383 -87.77514473347021 -62.60000000000005 + vertex -166.80278937575383 -87.77514473347021 617.3999999999999 + endloop +endfacet +facet normal 0.608761429008704 0.793353340291248 -2.0684907214263136e-16 + outer loop + vertex -166.80278937575383 -87.77514473347021 -62.60000000000005 + vertex -166.47141852585534 -88.02941452962685 617.3999999999999 + vertex -166.47141852585534 -88.02941452962685 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087295 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -166.47141852585537 -85.25813323751663 617.3999999999999 + vertex -166.80278937575386 -85.51240303367325 -62.60000000000005 + vertex -166.47141852585537 -85.25813323751663 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087295 -0.7933533402912285 1.8829806831558229e-16 + outer loop + vertex -166.80278937575386 -85.51240303367325 -62.60000000000005 + vertex -166.47141852585537 -85.25813323751663 617.3999999999999 + vertex -166.80278937575386 -85.51240303367325 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912286 0.6087614290087291 -1.6369160198769096e-16 + outer loop + vertex -166.80278937575383 -87.77514473347021 617.3999999999999 + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912286 0.6087614290087291 -1.6369160198769096e-16 + outer loop + vertex -167.05705917191045 -87.44377388357175 -62.60000000000005 + vertex -166.80278937575383 -87.77514473347021 617.3999999999999 + vertex -166.80278937575383 -87.77514473347021 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087241 0.7933533402912325 -1.8829806831558332e-16 + outer loop + vertex -181.52775209062045 -93.29743661784383 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -181.52775209062045 -93.29743661784383 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087241 0.7933533402912325 -1.8829806831558332e-16 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -181.52775209062045 -93.29743661784383 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000018 0.8660254037844376 -2.0805319374395354e-16 + outer loop + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -176.81731320975481 -90.53851799524594 617.3999999999999 + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000018 0.8660254037844376 -2.0805319374395354e-16 + outer loop + vertex -176.81731320975481 -90.53851799524594 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 -62.60000000000005 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + endloop +endfacet +facet normal -0.4999999999999966 0.8660254037844406 -2.0805319374395436e-16 + outer loop + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -176.27090304824105 -90.68492815675971 -62.60000000000005 + vertex -176.61731320975483 -90.88492815675971 -62.60000000000005 + endloop +endfacet +facet normal -0.4999999999999966 0.8660254037844406 -2.0805319374395436e-16 + outer loop + vertex -176.27090304824105 -90.68492815675971 -62.60000000000005 + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -176.27090304824105 -90.68492815675971 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + vertex -176.45900164904148 -94.75913182334084 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912276 0.6087614290087306 -1.39515463108613e-16 + outer loop + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + vertex -181.52775209062045 -93.29743661784383 -62.60000000000005 + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + endloop +endfacet +facet normal -0.7933533402912276 0.6087614290087306 -1.39515463108613e-16 + outer loop + vertex -181.52775209062045 -93.29743661784383 -62.60000000000005 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + vertex -181.52775209062045 -93.29743661784383 617.3999999999999 + endloop +endfacet +facet normal 0.2588190451025234 0.9659258262890678 -2.44493880361933e-16 + outer loop + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -176.45900164904148 -94.75913182334084 -62.60000000000005 + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + endloop +endfacet +facet normal 0.2588190451025234 0.9659258262890678 -2.44493880361933e-16 + outer loop + vertex -176.45900164904148 -94.75913182334084 -62.60000000000005 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844469 0.49999999999998546 -1.3771336778111338e-16 + outer loop + vertex -175.57090304824106 -91.89736372205796 617.3999999999999 + vertex -176.27090304824105 -90.68492815675971 -62.60000000000005 + vertex -176.27090304824105 -90.68492815675971 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844469 0.49999999999998546 -1.3771336778111338e-16 + outer loop + vertex -176.27090304824105 -90.68492815675971 -62.60000000000005 + vertex -175.57090304824106 -91.89736372205796 617.3999999999999 + vertex -175.57090304824106 -91.89736372205796 -62.60000000000005 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + vertex -176.81731320975481 -90.53851799524594 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -176.81731320975481 -90.53851799524594 -62.60000000000005 + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -176.61731320975483 -90.88492815675971 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -175.57090304824106 -91.89736372205796 617.3999999999999 + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -175.57090304824106 -91.89736372205796 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -177.47615893656683 -92.99736372205795 -62.60000000000005 + vertex -175.57090304824106 -91.89736372205796 617.3999999999999 + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999956 0.8660254037844389 -2.0805319374395384e-16 + outer loop + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -173.09081272081974 -95.6616353266133 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999956 0.8660254037844389 -2.0805319374395384e-16 + outer loop + vertex -167.6620206299282 -92.52732075156256 -62.60000000000005 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.080531937439539e-16 + outer loop + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -155.732188041314 -101.45902607093474 -62.60000000000008 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.080531937439539e-16 + outer loop + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + vertex -160.43552014099308 -103.71261590942096 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + vertex -160.2355201409931 -104.05902607093472 -62.60000000000005 + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + endloop +endfacet +facet normal 0.4999999999999981 -0.8660254037844397 2.080531937439541e-16 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + endloop +endfacet +facet normal 0.4999999999999981 -0.8660254037844397 2.080531937439541e-16 + outer loop + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -160.78193030250688 -103.91261590942096 -62.60000000000005 + vertex -161.48193030250687 -102.70018034412274 617.3999999999999 + vertex -161.48193030250687 -102.70018034412274 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -161.48193030250687 -102.70018034412274 617.3999999999999 + vertex -160.78193030250688 -103.91261590942096 -62.60000000000005 + vertex -160.78193030250688 -103.91261590942096 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -170.2933162240922 -105.43841224283983 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -167.37090304824105 -106.10018034412275 -62.60000000000005 + vertex -169.27615893656682 -107.20018034412274 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -167.37090304824105 -106.10018034412275 -62.60000000000005 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -167.37090304824105 -106.10018034412275 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844469 0.49999999999998546 -1.3771336778111338e-16 + outer loop + vertex -166.6709030482411 -107.31261590942096 617.3999999999999 + vertex -167.37090304824105 -106.10018034412275 -62.60000000000005 + vertex -167.37090304824105 -106.10018034412275 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844469 0.49999999999998546 -1.3771336778111338e-16 + outer loop + vertex -167.37090304824105 -106.10018034412275 -62.60000000000005 + vertex -166.6709030482411 -107.31261590942096 617.3999999999999 + vertex -166.6709030482411 -107.31261590942096 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -160.59383170170645 -99.83841224283987 617.3999999999999 + vertex -160.59383170170645 -99.83841224283987 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -160.59383170170645 -99.83841224283987 617.3999999999999 + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + endloop +endfacet +facet normal -0.2588190451025234 -0.9659258262890678 2.44493880361933e-16 + outer loop + vertex -160.59383170170645 -99.83841224283987 -62.60000000000005 + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -163.9620206299282 -98.9359087395674 -62.60000000000005 + endloop +endfacet +facet normal -0.2588190451025234 -0.9659258262890678 2.44493880361933e-16 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -160.59383170170645 -99.83841224283987 -62.60000000000005 + vertex -160.59383170170645 -99.83841224283987 617.3999999999999 + endloop +endfacet +facet normal 0.9659258262890671 -0.2588190451025257 4.973776792580483e-17 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 -62.60000000000005 + endloop +endfacet +facet normal 0.9659258262890671 -0.2588190451025257 4.973776792580483e-17 + outer loop + vertex -170.2933162240922 -105.43841224283983 -62.60000000000005 + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -170.2933162240922 -105.43841224283983 617.3999999999999 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -166.6709030482411 -107.31261590942096 617.3999999999999 + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -166.6709030482411 -107.31261590942096 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -166.6709030482411 -107.31261590942096 617.3999999999999 + vertex -167.01731320975483 -107.51261590942096 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -167.01731320975483 -107.51261590942096 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111675e-16 + outer loop + vertex -167.01731320975483 -107.51261590942096 -62.60000000000005 + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -166.81731320975484 -107.85902607093475 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + vertex -160.78193030250688 -103.91261590942096 -62.60000000000005 + vertex -160.43552014099308 -103.71261590942096 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -160.78193030250688 -103.91261590942096 -62.60000000000005 + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + vertex -160.78193030250688 -103.91261590942096 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -161.48193030250687 -102.70018034412274 617.3999999999999 + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -161.48193030250687 -102.70018034412274 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -159.57667441418107 -101.60018034412275 -62.60000000000005 + vertex -161.48193030250687 -102.70018034412274 617.3999999999999 + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + endloop +endfacet +facet normal -0.1305261922200506 -0.9914448613738105 2.4889428277906147e-16 + outer loop + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + endloop +endfacet +facet normal -0.1305261922200506 -0.9914448613738105 2.4889428277906147e-16 + outer loop + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + vertex -172.07946435453644 -110.55892649343936 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087278 -0.7933533402912298 2.068490721426272e-16 + outer loop + vertex -172.32064530943393 -110.45902607093474 -62.60000000000002 + vertex -172.52775209062048 -110.30010744833685 617.3999999999999 + vertex -172.52775209062048 -110.30010744833685 -62.60000000000002 + endloop +endfacet +facet normal -0.6087614290087278 -0.7933533402912298 2.068490721426272e-16 + outer loop + vertex -172.52775209062048 -110.30010744833685 617.3999999999999 + vertex -172.32064530943393 -110.45902607093474 -62.60000000000002 + vertex -172.32064530943393 -110.45902607093474 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912222 -0.6087614290087376 1.6369160198769298e-16 + outer loop + vertex -172.52775209062048 -110.30010744833685 -62.60000000000002 + vertex -172.68667071321835 -110.0930006671503 617.3999999999999 + vertex -172.68667071321835 -110.0930006671503 -62.60000000000002 + endloop +endfacet +facet normal -0.7933533402912222 -0.6087614290087376 1.6369160198769298e-16 + outer loop + vertex -172.68667071321835 -110.0930006671503 617.3999999999999 + vertex -172.52775209062048 -110.30010744833685 -62.60000000000002 + vertex -172.52775209062048 -110.30010744833685 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111678e-16 + outer loop + vertex -172.68667071321835 -110.0930006671503 -62.60000000000002 + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111678e-16 + outer loop + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + vertex -172.68667071321835 -110.0930006671503 -62.60000000000002 + vertex -172.68667071321835 -110.0930006671503 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651092 -0.9238795325112787 2.3591011986530023e-16 + outer loop + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -172.32064530943393 -110.45902607093474 617.3999999999999 + vertex -172.32064530943393 -110.45902607093474 -62.60000000000002 + endloop +endfacet +facet normal -0.3826834323651092 -0.9238795325112787 2.3591011986530023e-16 + outer loop + vertex -172.32064530943393 -110.45902607093474 617.3999999999999 + vertex -172.07946435453644 -110.55892649343936 -62.60000000000003 + vertex -172.07946435453644 -110.55892649343936 617.3999999999999 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.080531937439539e-16 + outer loop + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -166.81731320975484 -107.85902607093475 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.080531937439539e-16 + outer loop + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006187 -0.991444861373809 2.449167116386775e-16 + outer loop + vertex -171.5618262643314 -110.55892649343936 617.3999999999999 + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + vertex -171.5618262643314 -110.55892649343936 -62.600000000000044 + endloop +endfacet +facet normal 0.13052619222006187 -0.991444861373809 2.449167116386775e-16 + outer loop + vertex -171.82064530943393 -110.59300066715029 -62.60000000000003 + vertex -171.5618262643314 -110.55892649343936 617.3999999999999 + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + endloop +endfacet +facet normal 0.382683432365085 -0.9238795325112886 2.2424847134412203e-16 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -171.5618262643314 -110.55892649343936 -62.600000000000044 + vertex -171.32064530943393 -110.45902607093474 -62.60000000000005 + endloop +endfacet +facet normal 0.382683432365085 -0.9238795325112886 2.2424847134412203e-16 + outer loop + vertex -171.5618262643314 -110.55892649343936 -62.600000000000044 + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -171.5618262643314 -110.55892649343936 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -174.9402605517046 -105.38966856747122 -62.60000000000005 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -174.9402605517046 -105.38966856747122 -62.60000000000005 + vertex -174.9402605517046 -105.38966856747122 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + vertex -174.9402605517046 -105.38966856747122 617.3999999999999 + vertex -174.9402605517046 -105.38966856747122 -62.60000000000005 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 -2.0805319374395384e-16 + outer loop + vertex -174.9402605517046 -105.38966856747122 617.3999999999999 + vertex -175.28667071321837 -105.58966856747122 -62.60000000000005 + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -173.92782498640634 -104.34325840595744 -62.60000000000005 + vertex -173.92782498640634 -104.34325840595744 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -173.92782498640634 -104.34325840595744 -62.60000000000005 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -172.82782498640634 -106.2485142942832 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + vertex -173.29786795690174 -96.43437598764457 617.3999999999999 + vertex -173.29786795690174 -96.43437598764457 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -173.29786795690174 -96.43437598764457 617.3999999999999 + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + endloop +endfacet +facet normal -0.4999999999999927 0.8660254037844428 -2.0805319374395492e-16 + outer loop + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -173.92782498640634 -104.34325840595744 -62.60000000000005 + vertex -175.14026055170459 -105.04325840595743 -62.60000000000005 + endloop +endfacet +facet normal -0.4999999999999927 0.8660254037844428 -2.0805319374395492e-16 + outer loop + vertex -173.92782498640634 -104.34325840595744 -62.60000000000005 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -173.92782498640634 -104.34325840595744 617.3999999999999 + endloop +endfacet +facet normal -0.9659258262890682 0.2588190451025213 -4.97377679258037e-17 + outer loop + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + vertex -170.16355338185102 -101.86316807853612 -62.60000000000005 + endloop +endfacet +facet normal -0.9659258262890682 0.2588190451025213 -4.97377679258037e-17 + outer loop + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 -62.60000000000005 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + endloop +endfacet +facet normal -0.2588190451025237 -0.9659258262890675 2.4449388036193293e-16 + outer loop + vertex -173.29786795690174 -96.43437598764457 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + endloop +endfacet +facet normal -0.2588190451025237 -0.9659258262890675 2.4449388036193293e-16 + outer loop + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -173.29786795690174 -96.43437598764457 -62.60000000000005 + vertex -173.29786795690174 -96.43437598764457 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -177.32782498640637 -98.45428566022325 617.3999999999999 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 -1.3771336778111678e-16 + outer loop + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -177.32782498640637 -98.45428566022325 617.3999999999999 + vertex -177.32782498640637 -98.45428566022325 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999997785 -0.8660254037844514 2.0805319374395734e-16 + outer loop + vertex -177.32782498640637 -98.45428566022325 617.3999999999999 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -177.32782498640637 -98.45428566022325 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999997785 -0.8660254037844514 2.0805319374395734e-16 + outer loop + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -177.32782498640637 -98.45428566022325 617.3999999999999 + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 -62.60000000000005 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 2.0805319374395384e-16 + outer loop + vertex -178.42782498640636 -96.5490297718975 -62.60000000000005 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + vertex -178.7402605517046 -98.80787549870945 -62.60000000000005 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + vertex -178.5402605517046 -99.15428566022322 -62.60000000000005 + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + endloop +endfacet +facet normal 0.4999999999999966 -0.8660254037844406 2.0805319374395436e-16 + outer loop + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -178.7402605517046 -98.80787549870945 -62.60000000000005 + endloop +endfacet +facet normal 0.4999999999999966 -0.8660254037844406 2.0805319374395436e-16 + outer loop + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + vertex -179.08667071321835 -99.00787549870944 617.3999999999999 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -181.68667071321835 -94.5045433990304 617.3999999999999 + vertex -181.68667071321835 -94.5045433990304 -62.60000000000008 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 1.3771336778111675e-16 + outer loop + vertex -181.68667071321835 -94.5045433990304 617.3999999999999 + vertex -179.08667071321835 -99.00787549870944 -62.60000000000005 + vertex -179.08667071321835 -99.00787549870944 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112954 -0.3826834323650693 1.0937881967044609e-16 + outer loop + vertex -181.68667071321835 -94.5045433990304 -62.60000000000008 + vertex -181.786571135723 -94.26336244413291 617.3999999999999 + vertex -181.786571135723 -94.26336244413291 -62.60000000000008 + endloop +endfacet +facet normal -0.9238795325112954 -0.3826834323650693 1.0937881967044609e-16 + outer loop + vertex -181.786571135723 -94.26336244413291 617.3999999999999 + vertex -181.68667071321835 -94.5045433990304 -62.60000000000008 + vertex -181.68667071321835 -94.5045433990304 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738095 -0.1305261922200596 4.7612051549719885e-17 + outer loop + vertex -181.786571135723 -94.26336244413291 -62.60000000000008 + vertex -181.82064530943393 -94.00454339903038 617.3999999999999 + vertex -181.82064530943393 -94.00454339903038 -62.60000000000008 + endloop +endfacet +facet normal -0.9914448613738095 -0.1305261922200596 4.7612051549719885e-17 + outer loop + vertex -181.82064530943393 -94.00454339903038 617.3999999999999 + vertex -181.786571135723 -94.26336244413291 -62.60000000000008 + vertex -181.786571135723 -94.26336244413291 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738132 0.130526192220031 -1.7399399201487912e-17 + outer loop + vertex -181.82064530943393 -94.00454339903038 -62.60000000000008 + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -181.786571135723 -93.74572435392787 -62.600000000000065 + endloop +endfacet +facet normal -0.9914448613738132 0.130526192220031 -1.7399399201487912e-17 + outer loop + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -181.82064530943393 -94.00454339903038 -62.60000000000008 + vertex -181.82064530943393 -94.00454339903038 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112843 0.38268343236509583 -8.12251096509906e-17 + outer loop + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + vertex -181.786571135723 -93.74572435392787 -62.600000000000065 + endloop +endfacet +facet normal -0.9238795325112843 0.38268343236509583 -8.12251096509906e-17 + outer loop + vertex -181.68667071321835 -93.50454339903038 -62.600000000000065 + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -176.81731320975481 -90.53851799524594 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -179.59552529705667 -92.89829256150922 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -179.59552529705667 -92.89829256150922 617.3999999999999 + vertex -179.1814148248926 -92.84377388357171 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -179.1814148248926 -92.84377388357171 617.3999999999999 + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + vertex -179.1814148248926 -92.84377388357171 617.3999999999999 + vertex -178.76730435272856 -92.89829256150921 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + vertex -178.76730435272856 -92.89829256150921 617.3999999999999 + vertex -178.3814148248926 -93.0581332375166 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + vertex -178.3814148248926 -93.0581332375166 617.3999999999999 + vertex -178.05004397499414 -93.31240303367323 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + vertex -178.05004397499414 -93.31240303367323 617.3999999999999 + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + vertex -178.05004397499414 -93.31240303367323 617.3999999999999 + vertex -177.7957741788375 -93.64377388357171 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + vertex -177.7957741788375 -93.64377388357171 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -179.59552529705667 -92.89829256150922 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -179.98141482489262 -93.05813323751663 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -179.98141482489262 -93.05813323751663 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -180.3127856747911 -93.31240303367325 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.3127856747911 -93.31240303367325 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -180.5670554709477 -93.64377388357174 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.5670554709477 -93.64377388357174 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -180.7268961469551 -94.0296634114077 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.7268961469551 -94.0296634114077 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -180.7814148248926 -94.44377388357174 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.7814148248926 -94.44377388357174 617.3999999999999 + vertex -181.32064530943393 -93.13851799524595 617.3999999999999 + vertex -181.52775209062045 -93.29743661784383 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.7814148248926 -94.44377388357174 617.3999999999999 + vertex -181.52775209062045 -93.29743661784383 617.3999999999999 + vertex -180.7268961469551 -94.85788435573578 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.7268961469551 -94.85788435573578 617.3999999999999 + vertex -181.52775209062045 -93.29743661784383 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -180.7268961469551 -94.85788435573578 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + vertex -180.56705547094768 -95.24377388357173 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -179.08667071321835 -99.00787549870944 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -179.08667071321835 -99.00787549870944 617.3999999999999 + vertex -181.786571135723 -93.74572435392787 617.3999999999999 + vertex -181.82064530943393 -94.00454339903038 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -179.08667071321835 -99.00787549870944 617.3999999999999 + vertex -181.82064530943393 -94.00454339903038 617.3999999999999 + vertex -181.786571135723 -94.26336244413291 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -179.08667071321835 -99.00787549870944 617.3999999999999 + vertex -181.786571135723 -94.26336244413291 617.3999999999999 + vertex -181.68667071321835 -94.5045433990304 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -177.79577417883746 -95.2437738835717 617.3999999999999 + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.79577417883746 -95.2437738835717 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -177.63593350283008 -94.85788435573575 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.63593350283008 -94.85788435573575 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -177.5814148248926 -94.44377388357171 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.5814148248926 -94.44377388357171 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -177.63593350283008 -94.02966341140768 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.63593350283008 -94.02966341140768 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + vertex -177.7957741788375 -93.64377388357171 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + vertex -177.79577417883746 -95.2437738835717 617.3999999999999 + vertex -178.0500439749941 -95.5751447334702 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + vertex -178.0500439749941 -95.5751447334702 617.3999999999999 + vertex -178.38141482489257 -95.82941452962682 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + vertex -178.38141482489257 -95.82941452962682 617.3999999999999 + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.42782498640636 -96.5490297718975 617.3999999999999 + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + vertex -177.32782498640637 -98.45428566022325 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -177.32782498640637 -98.45428566022325 617.3999999999999 + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -178.76730435272856 -95.98925520563425 617.3999999999999 + vertex -179.18141482489258 -96.04377388357173 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -179.18141482489258 -96.04377388357173 617.3999999999999 + vertex -179.5955252970566 -95.98925520563425 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -179.5955252970566 -95.98925520563425 617.3999999999999 + vertex -179.98141482489257 -95.82941452962685 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -179.98141482489257 -95.82941452962685 617.3999999999999 + vertex -180.31278567479106 -95.5751447334702 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -180.31278567479106 -95.5751447334702 617.3999999999999 + vertex -180.56705547094768 -95.24377388357173 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -180.56705547094768 -95.24377388357173 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -178.5402605517046 -99.15428566022322 617.3999999999999 + vertex -181.68667071321835 -93.50454339903038 617.3999999999999 + vertex -178.7402605517046 -98.80787549870945 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -158.51257279904334 -95.44325840595744 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -156.74004767595687 -99.02239933271049 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -156.74004767595687 -99.02239933271049 617.3999999999999 + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + vertex -155.36616263752956 -101.09300066715029 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -156.74004767595687 -99.02239933271049 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -157.07141852585534 -98.76812953655386 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -157.07141852585534 -98.76812953655386 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -157.45730805369132 -98.60828886054645 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -157.45730805369132 -98.60828886054645 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -157.87141852585535 -98.55377018260896 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -157.87141852585535 -98.55377018260896 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -158.28552899801937 -98.60828886054645 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.28552899801937 -98.60828886054645 617.3999999999999 + vertex -159.72500836434156 -96.14325840595744 617.3999999999999 + vertex -158.62500836434157 -98.04851429428321 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.28552899801937 -98.60828886054645 617.3999999999999 + vertex -158.62500836434157 -98.04851429428321 617.3999999999999 + vertex -158.67141852585536 -98.76812953655387 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.67141852585536 -98.76812953655387 617.3999999999999 + vertex -158.62500836434157 -98.04851429428321 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.67141852585536 -98.76812953655387 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -159.00278937575385 -99.0223993327105 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.00278937575385 -99.0223993327105 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -159.25705917191047 -99.35377018260897 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.25705917191047 -99.35377018260897 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -159.41689984791785 -99.73965971044495 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.41689984791785 -99.73965971044495 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -159.47141852585534 -100.15377018260898 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.47141852585534 -100.15377018260898 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -159.41689984791785 -100.56788065477302 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.41689984791785 -100.56788065477302 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.87141852585535 -88.02941452962682 617.3999999999999 + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + vertex -164.54004767595688 -87.7751447334702 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + vertex -164.87141852585535 -88.02941452962682 617.3999999999999 + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -164.87141852585535 -88.02941452962682 617.3999999999999 + vertex -165.25730805369133 -88.18925520563424 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -165.25730805369133 -88.18925520563424 617.3999999999999 + vertex -165.67141852585536 -88.24377388357172 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -165.67141852585536 -88.24377388357172 617.3999999999999 + vertex -166.08552899801936 -88.18925520563424 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -166.08552899801936 -88.18925520563424 617.3999999999999 + vertex -166.47141852585534 -88.02941452962685 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -166.47141852585534 -88.02941452962685 617.3999999999999 + vertex -166.80278937575383 -87.77514473347021 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -166.80278937575383 -87.77514473347021 617.3999999999999 + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.52508126012745 -84.29743661784386 617.3999999999999 + vertex -161.76616263752956 -89.00787549870951 617.3999999999999 + vertex -164.36616263752958 -84.5045433990304 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -161.76616263752956 -89.00787549870951 617.3999999999999 + vertex -164.52508126012745 -84.29743661784386 617.3999999999999 + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + vertex -164.52508126012745 -84.29743661784386 617.3999999999999 + vertex -164.732188041314 -84.13851799524596 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + vertex -164.732188041314 -84.13851799524596 617.3999999999999 + vertex -164.97336899621146 -84.03861757274133 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + vertex -164.97336899621146 -84.03861757274133 617.3999999999999 + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -162.1125727990433 -89.20787549870951 617.3999999999999 + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + vertex -164.12593720379286 -86.22966341140767 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -161.91257279904332 -89.55428566022329 617.3999999999999 + vertex -164.12593720379286 -86.22966341140767 617.3999999999999 + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + vertex -164.12593720379286 -86.22966341140767 617.3999999999999 + vertex -164.07141852585536 -86.64377388357171 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + vertex -164.07141852585536 -86.64377388357171 617.3999999999999 + vertex -164.12593720379283 -87.05788435573575 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + vertex -164.12593720379283 -87.05788435573575 617.3999999999999 + vertex -164.28577787980024 -87.44377388357172 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + vertex -164.28577787980024 -87.44377388357172 617.3999999999999 + vertex -164.54004767595688 -87.7751447334702 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.12500836434157 -90.25428566022323 617.3999999999999 + vertex -164.54004767595688 -87.7751447334702 617.3999999999999 + vertex -164.22500836434156 -88.34902977189748 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -155.36616263752956 -100.09300066715029 617.3999999999999 + vertex -157.96616263752958 -95.58966856747121 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.36616263752956 -100.09300066715029 617.3999999999999 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -155.26626221502494 -100.33418162204778 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.26626221502494 -100.33418162204778 617.3999999999999 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -155.232188041314 -100.59300066715029 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.232188041314 -100.59300066715029 617.3999999999999 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -155.26626221502494 -100.85181971225282 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.26626221502494 -100.85181971225282 617.3999999999999 + vertex -158.31257279904335 -95.78966856747121 617.3999999999999 + vertex -155.36616263752956 -101.09300066715029 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + vertex -165.232188041314 -84.0045433990304 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.28577787980026 -85.8437738835717 617.3999999999999 + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + vertex -164.54004767595688 -85.51240303367324 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.54004767595688 -85.51240303367324 617.3999999999999 + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + vertex -164.87141852585538 -85.2581332375166 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.87141852585538 -85.2581332375166 617.3999999999999 + vertex -165.49100708641654 -84.03861757274133 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -164.87141852585538 -85.2581332375166 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + vertex -165.25730805369133 -85.0982925615092 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.25730805369133 -85.0982925615092 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + vertex -165.6714185258554 -85.04377388357173 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.6714185258554 -85.04377388357173 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + vertex -166.0855289980194 -85.09829256150921 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.0855289980194 -85.09829256150921 617.3999999999999 + vertex -165.732188041314 -84.13851799524596 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.0855289980194 -85.09829256150921 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -166.47141852585537 -85.25813323751663 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.47141852585537 -85.25813323751663 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -166.80278937575386 -85.51240303367325 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.80278937575386 -85.51240303367325 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -167.05705917191048 -85.84377388357173 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.05705917191048 -85.84377388357173 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -167.2168998479179 -86.2296634114077 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.2168998479179 -86.2296634114077 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -167.27141852585538 -86.64377388357174 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.27141852585538 -86.64377388357174 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -167.2168998479179 -87.05788435573575 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.2168998479179 -87.05788435573575 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.05705917191045 -87.44377388357175 617.3999999999999 + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -170.23552014099303 -86.73851799524596 617.3999999999999 + vertex -170.03552014099304 -87.08492815675972 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + vertex -170.03552014099304 -87.08492815675972 617.3999999999999 + vertex -169.68193030250686 -88.49736372205793 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.68193030250686 -88.49736372205793 617.3999999999999 + vertex -170.03552014099304 -87.08492815675972 617.3999999999999 + vertex -170.38193030250682 -87.28492815675972 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + vertex -173.29786795690174 -96.43437598764457 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -173.29786795690174 -96.43437598764457 617.3999999999999 + vertex -176.45900164904148 -94.75913182334084 617.3999999999999 + vertex -176.66605688512345 -95.53187248437212 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -175.57090304824106 -91.89736372205796 617.3999999999999 + vertex -176.27090304824105 -90.68492815675971 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -175.57090304824106 -91.89736372205796 617.3999999999999 + vertex -176.61731320975483 -90.88492815675971 617.3999999999999 + vertex -177.47615893656683 -92.99736372205795 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -166.61722836617028 -95.38958372388667 617.3999999999999 + vertex -166.188148085156 -95.94877203309035 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.61722836617028 -95.38958372388667 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -167.17641667537399 -94.96050344287237 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.17641667537399 -94.96050344287237 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -167.82760525359714 -94.69077230210985 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.82760525359714 -94.69077230210985 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -168.52641667537395 -94.59877203309034 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -168.52641667537395 -94.59877203309034 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -169.2252280971508 -94.69077230210986 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.2252280971508 -94.69077230210986 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.2252280971508 -94.69077230210986 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -169.87641667537397 -94.96050344287237 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.87641667537397 -94.96050344287237 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -170.43560498457762 -95.38958372388666 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.43560498457762 -95.38958372388666 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -170.86468526559196 -95.94877203309034 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.86468526559196 -95.94877203309034 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -171.13441640635446 -96.59996061131355 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.13441640635446 -96.59996061131355 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -171.22641667537397 -97.29877203309034 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.22641667537397 -97.29877203309034 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -171.13441640635446 -97.99758345486715 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.13441640635446 -97.99758345486715 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -170.86468526559193 -98.64877203309034 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.86468526559193 -98.64877203309034 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + vertex -170.2933162240922 -105.43841224283983 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + vertex -173.09081272081974 -95.6616353266133 617.3999999999999 + vertex -173.29786795690174 -96.43437598764457 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.2933162240922 -105.43841224283983 617.3999999999999 + vertex -170.16355338185102 -101.86316807853612 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.2933162240922 -105.43841224283983 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -173.92782498640634 -104.34325840595744 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.51278567479108 -106.8223993327105 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.51278567479108 -106.8223993327105 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.7670554709477 -107.15377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.7670554709477 -107.15377018260895 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.92689614695513 -107.53965971044495 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.92689614695513 -107.53965971044495 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.9814148248926 -107.95377018260898 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.9814148248926 -107.95377018260898 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.9268961469551 -108.367880654773 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.9268961469551 -108.367880654773 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -172.76705547094767 -108.753770182609 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.76705547094767 -108.753770182609 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + vertex -175.14026055170459 -105.04325840595743 617.3999999999999 + vertex -174.9402605517046 -105.38966856747122 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + vertex -174.9402605517046 -105.38966856747122 617.3999999999999 + vertex -172.07946435453644 -110.55892649343936 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.07946435453644 -110.55892649343936 617.3999999999999 + vertex -174.9402605517046 -105.38966856747122 617.3999999999999 + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.07946435453644 -110.55892649343936 617.3999999999999 + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + vertex -172.32064530943393 -110.45902607093474 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.32064530943393 -110.45902607093474 617.3999999999999 + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + vertex -172.52775209062048 -110.30010744833685 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.52775209062048 -110.30010744833685 617.3999999999999 + vertex -175.28667071321837 -105.58966856747122 617.3999999999999 + vertex -172.68667071321835 -110.0930006671503 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -166.6709030482411 -107.31261590942096 617.3999999999999 + vertex -167.37090304824105 -106.10018034412275 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.6709030482411 -107.31261590942096 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -167.01731320975483 -107.51261590942096 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -167.01731320975483 -107.51261590942096 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -169.99577417883745 -108.75377018260897 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -169.99577417883745 -108.75377018260897 617.3999999999999 + vertex -170.2500439749941 -109.08514103250742 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.81731320975484 -107.85902607093475 617.3999999999999 + vertex -170.2500439749941 -109.08514103250742 617.3999999999999 + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.99577417883745 -108.75377018260897 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -169.83593350283007 -108.36788065477299 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.83593350283007 -108.36788065477299 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -169.78141482489258 -107.95377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.78141482489258 -107.95377018260895 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -169.83593350283007 -107.53965971044492 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.83593350283007 -107.53965971044492 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -169.99577417883748 -107.15377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.99577417883748 -107.15377018260895 617.3999999999999 + vertex -169.27615893656682 -107.20018034412274 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -170.2500439749941 -109.08514103250742 617.3999999999999 + vertex -170.58141482489256 -109.33941082866406 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -170.58141482489256 -109.33941082866406 617.3999999999999 + vertex -170.96730435272855 -109.49925150467148 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -170.96730435272855 -109.49925150467148 617.3999999999999 + vertex -171.38141482489257 -109.55377018260897 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -171.38141482489257 -109.55377018260897 617.3999999999999 + vertex -171.7955252970566 -109.49925150467148 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -171.7955252970566 -109.49925150467148 617.3999999999999 + vertex -172.18141482489256 -109.33941082866409 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.32064530943393 -110.45902607093474 617.3999999999999 + vertex -172.18141482489256 -109.33941082866409 617.3999999999999 + vertex -171.5618262643314 -110.55892649343936 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.5618262643314 -110.55892649343936 617.3999999999999 + vertex -172.18141482489256 -109.33941082866409 617.3999999999999 + vertex -172.51278567479108 -109.08514103250747 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.5618262643314 -110.55892649343936 617.3999999999999 + vertex -172.51278567479108 -109.08514103250747 617.3999999999999 + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.82064530943393 -110.59300066715029 617.3999999999999 + vertex -172.51278567479108 -109.08514103250747 617.3999999999999 + vertex -172.76705547094767 -108.753770182609 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + vertex -170.25004397499413 -106.82239933271049 617.3999999999999 + vertex -169.99577417883748 -107.15377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.25004397499413 -106.82239933271049 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + vertex -170.5814148248926 -106.56812953655385 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.5814148248926 -106.56812953655385 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + vertex -170.96730435272858 -106.40828886054645 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -170.96730435272858 -106.40828886054645 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + vertex -171.3814148248926 -106.35377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.3814148248926 -106.35377018260895 617.3999999999999 + vertex -171.06605688512346 -105.23135700675783 617.3999999999999 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.3814148248926 -106.35377018260895 617.3999999999999 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -171.79552529705666 -106.40828886054645 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -171.79552529705666 -106.40828886054645 617.3999999999999 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -172.18141482489258 -106.56812953655387 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -172.18141482489258 -106.56812953655387 617.3999999999999 + vertex -172.82782498640634 -106.2485142942832 617.3999999999999 + vertex -172.51278567479108 -106.8223993327105 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -166.75951712665574 -89.15913182334084 617.3999999999999 + vertex -166.88927996889691 -92.73437598764454 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.75951712665574 -89.15913182334084 617.3999999999999 + vertex -165.98677646562444 -89.36618705942284 617.3999999999999 + vertex -167.7766744141811 -87.39736372205793 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.88927996889691 -92.73437598764454 617.3999999999999 + vertex -166.75951712665574 -89.15913182334084 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -166.88927996889691 -92.73437598764454 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -167.6620206299282 -92.52732075156256 617.3999999999999 + vertex -166.188148085156 -95.94877203309035 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -166.188148085156 -95.94877203309035 617.3999999999999 + vertex -165.91841694439347 -96.59996061131355 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -165.91841694439347 -96.59996061131355 617.3999999999999 + vertex -165.82641667537396 -97.29877203309034 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -165.82641667537396 -97.29877203309034 617.3999999999999 + vertex -165.91841694439347 -97.99758345486715 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -165.91841694439347 -97.99758345486715 617.3999999999999 + vertex -166.18814808515597 -98.64877203309035 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -166.18814808515597 -98.64877203309035 617.3999999999999 + vertex -166.6172283661703 -99.20796034229403 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + vertex -166.6172283661703 -99.20796034229403 617.3999999999999 + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -166.6172283661703 -99.20796034229403 617.3999999999999 + vertex -167.17641667537396 -99.63704062330834 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -167.17641667537396 -99.63704062330834 617.3999999999999 + vertex -167.82760525359717 -99.90677176407084 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -167.82760525359717 -99.90677176407084 617.3999999999999 + vertex -168.52641667537395 -99.99877203309036 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -168.52641667537395 -99.99877203309036 617.3999999999999 + vertex -169.2252280971508 -99.90677176407084 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -169.2252280971508 -99.90677176407084 617.3999999999999 + vertex -169.87641667537395 -99.63704062330832 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -169.87641667537395 -99.63704062330832 617.3999999999999 + vertex -170.43560498457765 -99.20796034229403 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -169.3908127208197 -102.0702233146181 617.3999999999999 + vertex -170.43560498457765 -99.20796034229403 617.3999999999999 + vertex -170.86468526559193 -98.64877203309034 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + vertex -160.59383170170645 -99.83841224283987 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.59383170170645 -99.83841224283987 617.3999999999999 + vertex -163.75496539384616 -98.1631680785361 617.3999999999999 + vertex -163.9620206299282 -98.9359087395674 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -161.48193030250687 -102.70018034412274 617.3999999999999 + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + vertex -161.48193030250687 -102.70018034412274 617.3999999999999 + vertex -160.78193030250688 -103.91261590942096 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + vertex -155.36616263752956 -101.09300066715029 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + vertex -156.48577787980025 -99.35377018260895 617.3999999999999 + vertex -156.32593720379282 -99.73965971044491 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + vertex -156.32593720379282 -99.73965971044491 617.3999999999999 + vertex -156.27141852585532 -100.15377018260895 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.52508126012748 -101.30010744833686 617.3999999999999 + vertex -156.27141852585532 -100.15377018260895 617.3999999999999 + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -156.27141852585532 -100.15377018260895 617.3999999999999 + vertex -156.32593720379282 -100.56788065477299 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -156.32593720379282 -100.56788065477299 617.3999999999999 + vertex -156.48577787980022 -100.95377018260896 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -156.48577787980022 -100.95377018260896 617.3999999999999 + vertex -156.74004767595684 -101.28514103250744 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -155.732188041314 -101.45902607093474 617.3999999999999 + vertex -156.74004767595684 -101.28514103250744 617.3999999999999 + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -156.74004767595684 -101.28514103250744 617.3999999999999 + vertex -157.0714185258553 -101.53941082866406 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -157.0714185258553 -101.53941082866406 617.3999999999999 + vertex -157.45730805369126 -101.69925150467147 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -157.45730805369126 -101.69925150467147 617.3999999999999 + vertex -157.87141852585532 -101.75377018260896 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -157.87141852585532 -101.75377018260896 617.3999999999999 + vertex -158.28552899801934 -101.6992515046715 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -158.28552899801934 -101.6992515046715 617.3999999999999 + vertex -158.67141852585533 -101.53941082866409 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -158.67141852585533 -101.53941082866409 617.3999999999999 + vertex -159.0027893757538 -101.28514103250745 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -159.0027893757538 -101.28514103250745 617.3999999999999 + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + vertex -159.25705917191044 -100.95377018260898 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + vertex -160.38677646562448 -99.06567158180859 617.3999999999999 + vertex -160.59383170170645 -99.83841224283987 617.3999999999999 + endloop +endfacet +facet normal 2.455826945656519e-20 4.0139287745165085e-19 1.0 + outer loop + vertex -160.2355201409931 -104.05902607093472 617.3999999999999 + vertex -159.57667441418107 -101.60018034412275 617.3999999999999 + vertex -160.43552014099308 -103.71261590942096 617.3999999999999 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 27.102597550340843 188.82097856533457 597.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 30.554479138125195 190.81392332925265 598.0545186779377 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 30.554479138125195 190.81392332925265 598.0545186779377 + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + vertex 32.70233981153365 192.05399126722693 597.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125195 190.81392332925265 598.0545186779377 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 30.220289003964815 190.62097856533464 598.214359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.220289003964815 190.62097856533464 598.214359353945 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 29.933313429879124 190.45529314038538 598.4686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.933313429879124 190.45529314038538 598.4686291501016 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 29.713109326992388 190.32815824230707 598.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992388 190.32815824230707 598.8000000000002 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 29.57468324101191 190.24823790430335 599.1858895278361 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.57468324101191 190.24823790430335 599.1858895278361 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 29.007853438666647 189.9209785653346 599.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.57468324101191 190.24823790430335 599.1858895278361 + vertex 29.007853438666647 189.9209785653346 599.2000000000002 + vertex 29.527468680937297 190.22097856533458 599.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.527468680937297 190.22097856533458 599.6000000000001 + vertex 29.007853438666647 189.9209785653346 599.2000000000002 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.527468680937297 190.22097856533458 599.6000000000001 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 29.57468324101192 190.24823790430332 600.0141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.57468324101192 190.24823790430332 600.0141104721642 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 29.713109326992434 190.32815824230704 600.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992434 190.32815824230704 600.4000000000002 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 29.933313429879142 190.45529314038532 600.7313708498986 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.933313429879142 190.45529314038532 600.7313708498986 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 30.22028900396488 190.62097856533453 600.9856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.22028900396488 190.62097856533453 600.9856406460553 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 30.554479138125185 190.81392332925253 601.1454813220627 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125185 190.81392332925253 601.1454813220627 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.13973867537202 182.49156904278303 597.434074173711 + vertex 20.86721464309301 185.22097856533443 597.4000000000001 + vertex 16.36388254341405 182.6209785653343 597.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309301 185.22097856533443 597.4000000000001 + vertex 16.13973867537202 182.49156904278303 597.434074173711 + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 16.13973867537202 182.49156904278303 597.434074173711 + vertex 15.930869841521801 182.37097856533427 597.5339745962157 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 15.930869841521801 182.37097856533427 597.5339745962157 + vertex 15.751510107718227 182.26742517474096 597.6928932188135 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 15.751510107718227 182.26742517474096 597.6928932188135 + vertex 15.613882543413997 182.187965863442 597.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 15.613882543413997 182.187965863442 597.9000000000001 + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + vertex 15.613882543413997 182.187965863442 597.9000000000001 + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + vertex 17.761743216822566 183.4280338014163 598.0545186779376 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + vertex 17.761743216822566 183.4280338014163 598.0545186779376 + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + vertex 17.761743216822566 183.4280338014163 598.0545186779376 + vertex 18.09593335098285 183.62097856533433 598.214359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + vertex 18.09593335098285 183.62097856533433 598.214359353945 + vertex 18.3829089250686 183.78666399028353 598.4686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + vertex 18.3829089250686 183.78666399028353 598.4686291501016 + vertex 18.60311302795533 183.91379888836184 598.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + vertex 18.60311302795533 183.91379888836184 598.8000000000002 + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + vertex 19.308368916281097 184.3209785653343 599.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281097 184.3209785653343 599.2000000000002 + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + vertex 18.788753674010444 184.0209785653343 599.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281097 184.3209785653343 599.2000000000002 + vertex 18.788753674010444 184.0209785653343 599.6000000000001 + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 18.788753674010444 184.0209785653343 599.6000000000001 + vertex 18.74153911393583 183.99371922636553 600.0141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 18.74153911393583 183.99371922636553 600.0141104721642 + vertex 18.60311302795535 183.91379888836178 600.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 18.60311302795535 183.91379888836178 600.4000000000002 + vertex 18.382908925068623 183.78666399028344 600.7313708498987 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 18.382908925068623 183.78666399028344 600.7313708498987 + vertex 18.095933350982918 183.6209785653342 600.9856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 18.095933350982918 183.6209785653342 600.9856406460553 + vertex 17.761743216822598 183.4280338014162 601.1454813220627 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 17.761743216822598 183.4280338014162 601.1454813220627 + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + vertex 15.497857139629847 182.12097856533381 611.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941975182 182.4482379043025 614.785889527836 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 18.095933350983174 183.62097856533384 613.814359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.095933350983174 183.62097856533384 613.814359353945 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 18.741539113936128 183.99371922636507 614.785889527836 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 18.741539113936128 183.99371922636507 614.785889527836 + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 21.21362480460709 185.42097856533385 615.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460709 185.42097856533385 615.6000000000001 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + vertex 20.86721464309339 185.22097856533378 617.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309339 185.22097856533378 617.4000000000002 + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + vertex 15.930869841522176 182.37097856533364 617.2660254037846 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309339 185.22097856533378 617.4000000000002 + vertex 15.930869841522176 182.37097856533364 617.2660254037846 + vertex 16.13973867537238 182.4915690427824 617.3659258262892 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309339 185.22097856533378 617.4000000000002 + vertex 16.13973867537238 182.4915690427824 617.3659258262892 + vertex 16.363882543414398 182.62097856533364 617.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 26.872507222919698 188.68813585285974 603.7000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 26.872507222919698 188.68813585285974 603.7000000000002 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 26.872507222919698 188.68813585285974 603.7000000000002 + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 24.15811117747396 187.12097856533427 604.7000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 24.15811117747396 187.12097856533427 604.7000000000002 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 23.552922733760536 186.77157285444585 604.7920002690196 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 23.552922733760536 186.77157285444585 604.7920002690196 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 22.98897688236502 186.44597856533423 605.0617314097822 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.98897688236502 186.44597856533423 605.0617314097822 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 22.504705601095367 186.16638441073235 605.4908116907965 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.504705601095367 186.16638441073235 605.4908116907965 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 22.13311117747401 185.9518442702252 606.0500000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.13311117747401 185.9518442702252 606.0500000000002 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 21.819842587256076 185.77097856533416 607.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.819842587256076 185.77097856533416 607.4000000000001 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 21.899517157381997 185.81697869984384 608.098811421777 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.899517157381997 185.81697869984384 608.098811421777 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 22.133111177474095 185.9518442702251 608.7500000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.133111177474095 185.9518442702251 608.7500000000001 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 22.50470560109544 186.16638441073226 609.3091883092038 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.50470560109544 186.16638441073226 609.3091883092038 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 22.988976882365094 186.4459785653341 609.7382685902181 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.988976882365094 186.4459785653341 609.7382685902181 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 23.552922733760624 186.77157285444568 610.0079997309806 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 23.552922733760624 186.77157285444568 610.0079997309806 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 24.15811117747407 187.1209785653341 610.1000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 31.952339811533662 191.62097856533472 597.4000000000001 + vertex 27.449007711854602 189.02097856533462 597.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.952339811533662 191.62097856533472 597.4000000000001 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 32.17648367957566 191.750388087886 597.434074173711 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.17648367957566 191.750388087886 597.434074173711 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 32.38535251342584 191.87097856533475 597.5339745962157 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.38535251342584 191.87097856533475 597.5339745962157 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 32.56471224722943 191.97453195592797 597.6928932188135 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.56471224722943 191.97453195592797 597.6928932188135 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 32.70233981153365 192.05399126722693 597.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + vertex 15.613882543413997 182.187965863442 597.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 17.04448283908812 183.01392332925224 598.0545186779376 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908812 183.01392332925224 598.0545186779376 + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 16.710292704927774 182.8209785653343 598.214359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704927774 182.8209785653343 598.214359353945 + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704927774 182.8209785653343 598.214359353945 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + vertex 16.42331713084209 182.65529314038497 598.4686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.42331713084209 182.65529314038497 598.4686291501016 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + vertex 16.203113027955354 182.52815824230666 598.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.203113027955354 182.52815824230666 598.8000000000001 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + vertex 16.06468694197487 182.44823790430297 599.1858895278361 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.06468694197487 182.44823790430297 599.1858895278361 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.06468694197487 182.44823790430297 599.1858895278361 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 16.01747238190026 182.42097856533417 599.6 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.01747238190026 182.42097856533417 599.6 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 16.064686941974863 182.44823790430294 600.0141104721641 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941974863 182.44823790430294 600.0141104721641 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 16.20311302795538 182.52815824230663 600.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.20311302795538 182.52815824230663 600.4000000000002 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 16.423317130842133 182.6552931403849 600.7313708498986 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.423317130842133 182.6552931403849 600.7313708498986 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 16.710292704927845 182.82097856533417 600.9856406460552 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704927845 182.82097856533417 600.9856406460552 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 17.044482839088168 183.01392332925215 601.1454813220627 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.044482839088168 183.01392332925215 601.1454813220627 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 15.844267301143471 182.3209785653341 603.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + vertex 15.844267301143471 182.3209785653341 603.6000000000001 + vertex 17.056702866441686 183.0209785653341 604.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441686 183.0209785653341 604.0000000000001 + vertex 15.844267301143471 182.3209785653341 603.6000000000001 + vertex 15.844267301143471 182.32097856533406 604.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 26.183111177473965 188.29011286044332 606.0500000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 26.183111177473965 188.29011286044332 606.0500000000002 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 25.811516753852615 188.0755727199361 605.4908116907965 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 25.811516753852615 188.0755727199361 605.4908116907965 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 25.327245472582963 187.79597856533428 605.0617314097822 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 25.327245472582963 187.79597856533428 605.0617314097822 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 24.76329962118738 187.4703842762227 604.7920002690196 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 24.76329962118738 187.4703842762227 604.7920002690196 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + vertex 24.15811117747396 187.12097856533427 604.7000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 26.49637976769196 188.47097856533426 607.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 26.49637976769196 188.47097856533426 607.4000000000001 + vertex 26.416705197566095 188.42497843082444 608.098811421777 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 26.416705197566095 188.42497843082444 608.098811421777 + vertex 26.183111177474004 188.2901128604432 608.7500000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 26.183111177474004 188.2901128604432 608.7500000000001 + vertex 25.811516753852683 188.07557271993602 609.3091883092038 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 25.811516753852683 188.07557271993602 609.3091883092038 + vertex 25.32724547258304 187.79597856533414 609.7382685902181 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 25.32724547258304 187.79597856533414 609.7382685902181 + vertex 24.763299621187485 187.47038427622252 610.0079997309806 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 24.763299621187485 187.47038427622252 610.0079997309806 + vertex 24.15811117747407 187.1209785653341 610.1000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 24.15811117747407 187.1209785653341 610.1000000000001 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143587 182.32097856533386 610.8000000000002 + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 17.056702866441796 183.02097856533388 610.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 15.844267301143587 182.32097856533386 610.8000000000002 + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 26.872507222919793 188.6881358528595 611.1000000000001 + vertex 29.497751387223563 190.20382127780877 613.0000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 26.872507222919793 188.6881358528595 611.1000000000001 + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.497751387223563 190.20382127780877 613.0000000000002 + vertex 26.872507222919793 188.6881358528595 611.1000000000001 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.497751387223563 190.20382127780877 613.0000000000002 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + vertex 27.102597550341205 188.82097856533403 615.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 29.574683241012213 190.24823790430284 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.574683241012213 190.24823790430284 615.6141104721642 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 29.713109326992683 190.32815824230653 616.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992683 190.32815824230653 616.0000000000001 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 29.93331342987943 190.4552931403848 616.3313708498987 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.93331342987943 190.4552931403848 616.3313708498987 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 30.220289003965142 190.62097856533407 616.5856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.220289003965142 190.62097856533407 616.5856406460553 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 30.554479138125483 190.81392332925202 616.7454813220626 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125483 190.81392332925202 616.7454813220626 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 30.913109326992686 191.0209785653341 616.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.913109326992686 191.0209785653341 616.8000000000002 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 27.449007711855035 189.020978565334 617.0000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + vertex 27.449007711855035 189.020978565334 617.0000000000002 + vertex 32.5647122472298 191.97453195592743 617.1071067811868 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.5647122472298 191.97453195592743 617.1071067811868 + vertex 27.449007711855035 189.020978565334 617.0000000000002 + vertex 27.44900771185507 189.020978565334 617.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.5647122472298 191.97453195592743 617.1071067811868 + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 32.38535251342622 191.87097856533413 617.2660254037846 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.38535251342622 191.87097856533413 617.2660254037846 + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 32.17648367957604 191.7503880878854 617.3659258262892 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.17648367957604 191.7503880878854 617.3659258262892 + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 31.952339811534035 191.62097856533413 617.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.25951948850635 191.2209785653343 610.8000000000002 + vertex 32.47195505380457 191.92097856533434 611.2000000000002 + vertex 32.471955053804564 191.92097856533434 610.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.47195505380457 191.92097856533434 611.2000000000002 + vertex 31.25951948850635 191.2209785653343 610.8000000000002 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.47195505380457 191.92097856533434 611.2000000000002 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 32.81836521531833 192.12097856533435 611.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531833 192.12097856533435 611.2000000000002 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 32.113109326992664 191.71379888836177 614.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531833 192.12097856533435 611.2000000000002 + vertex 32.113109326992664 191.71379888836177 614.4000000000001 + vertex 32.25153541297315 191.79371922636545 614.7858895278362 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531833 192.12097856533435 611.2000000000002 + vertex 32.25153541297315 191.79371922636545 614.7858895278362 + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.113109326992664 191.71379888836177 614.4000000000001 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 31.89290522410592 191.58666399028345 614.0686291501017 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.89290522410592 191.58666399028345 614.0686291501017 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 31.605929650020194 191.42097856533422 613.814359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.605929650020194 191.42097856533422 613.814359353945 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 31.27173951585987 191.22803380141625 613.6545186779376 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.27173951585987 191.22803380141625 613.6545186779376 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 30.913109326992664 191.0209785653342 613.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.913109326992664 191.0209785653342 613.6000000000001 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 32.25153541297315 191.79371922636545 614.7858895278362 + vertex 32.29874997304777 191.8209785653342 615.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 32.29874997304777 191.8209785653342 615.2000000000002 + vertex 32.251535412973155 191.79371922636543 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 32.251535412973155 191.79371922636543 615.6141104721642 + vertex 32.113109326992664 191.7137988883617 616.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 32.113109326992664 191.7137988883617 616.0000000000001 + vertex 31.892905224105952 191.58666399028337 616.3313708498987 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 31.892905224105952 191.58666399028337 616.3313708498987 + vertex 31.60592965002024 191.4209785653341 616.5856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 31.60592965002024 191.4209785653341 616.5856406460553 + vertex 32.788856115271805 192.1039414784787 616.6588190451026 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.788856115271805 192.1039414784787 616.6588190451026 + vertex 31.60592965002024 191.4209785653341 616.5856406460553 + vertex 31.27173951585992 191.2280338014161 616.7454813220627 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.788856115271805 192.1039414784787 616.6588190451026 + vertex 31.27173951585992 191.2280338014161 616.7454813220627 + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + vertex 31.27173951585992 191.2280338014161 616.7454813220627 + vertex 30.913109326992686 191.0209785653341 616.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 30.554479138125426 190.81392332925216 613.6545186779376 + vertex 30.913109326992664 191.0209785653342 613.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125426 190.81392332925216 613.6545186779376 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 30.22028900396512 190.62097856533418 613.814359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.22028900396512 190.62097856533418 613.814359353945 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 29.9333134298794 190.45529314038492 614.0686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.9333134298794 190.45529314038492 614.0686291501016 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 29.713109326992694 190.32815824230659 614.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992694 190.32815824230659 614.4000000000001 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992694 190.32815824230659 614.4000000000001 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + vertex 29.574683241012185 190.24823790430284 614.785889527836 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.574683241012185 190.24823790430284 614.785889527836 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + vertex 29.527468680937567 190.2209785653341 615.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.527468680937567 190.2209785653341 615.2000000000002 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + vertex 29.574683241012213 190.24823790430284 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 18.81847096772448 184.03813585285957 601.8000000000001 + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.81847096772448 184.03813585285957 601.8000000000001 + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + vertex 18.81847096772448 184.03813585285957 601.8000000000001 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.259519488506243 191.2209785653345 604.0000000000001 + vertex 32.47195505380442 191.92097856533454 603.6 + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.47195505380442 191.92097856533454 603.6 + vertex 31.259519488506243 191.2209785653345 604.0000000000001 + vertex 32.47195505380441 191.92097856533454 604.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 32.70233981153365 192.05399126722693 597.9000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + vertex 31.2717395158596 191.2280338014167 598.0545186779377 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 31.2717395158596 191.2280338014167 598.0545186779377 + vertex 31.605929650019924 191.42097856533474 598.214359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 31.605929650019924 191.42097856533474 598.214359353945 + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + vertex 31.605929650019924 191.42097856533474 598.214359353945 + vertex 31.892905224105633 191.58666399028394 598.4686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + vertex 31.892905224105633 191.58666399028394 598.4686291501016 + vertex 32.113109326992365 191.71379888836222 598.8000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + vertex 32.113109326992365 191.71379888836222 598.8000000000002 + vertex 32.251535412972856 191.79371922636597 599.1858895278361 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + vertex 32.251535412972856 191.79371922636597 599.1858895278361 + vertex 32.818365215318174 192.12097856533453 603.6 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 32.251535412972856 191.79371922636597 599.1858895278361 + vertex 32.298749973047464 191.82097856533466 599.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 32.298749973047464 191.82097856533466 599.6000000000001 + vertex 32.25153541297286 191.7937192263659 600.0141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 32.25153541297286 191.7937192263659 600.0141104721642 + vertex 32.11310932699237 191.71379888836222 600.4000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 32.11310932699237 191.71379888836222 600.4000000000002 + vertex 31.89290522410566 191.58666399028382 600.7313708498987 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 31.89290522410566 191.58666399028382 600.7313708498987 + vertex 31.60592965001994 191.42097856533462 600.9856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 31.60592965001994 191.42097856533462 600.9856406460553 + vertex 31.27173951585965 191.2280338014166 601.1454813220627 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 31.27173951585965 191.2280338014166 601.1454813220627 + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.818365215318174 192.12097856533453 603.6 + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + vertex 32.47195505380442 191.92097856533454 603.6 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 181.952339811533 -68.18664256999588 597.4 + vertex 27.449007711854602 189.02097856533462 597.4000000000001 + vertex 31.952339811533662 191.62097856533472 597.4000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 27.449007711854602 189.02097856533462 597.4000000000001 + vertex 181.952339811533 -68.18664256999588 597.4 + vertex 177.44900771185397 -70.7866425699961 597.4 + endloop +endfacet +facet normal 0.11303899832181251 0.0652630961100721 -0.9914448613738078 + outer loop + vertex 182.176483679575 -68.05723304744467 597.434074173711 + vertex 31.952339811533662 191.62097856533472 597.4000000000001 + vertex 32.17648367957566 191.750388087886 597.434074173711 + endloop +endfacet +facet normal 0.11303899832181251 0.0652630961100721 -0.9914448613738078 + outer loop + vertex 31.952339811533662 191.62097856533472 597.4000000000001 + vertex 182.176483679575 -68.05723304744467 597.434074173711 + vertex 181.952339811533 -68.18664256999588 597.4 + endloop +endfacet +facet normal -2.189385090694423e-14 2.884359777632179e-14 -1.0 + outer loop + vertex 176.87250722291898 -71.11948528247086 603.7 + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + vertex 26.872507222919698 188.68813585285974 603.7000000000002 + endloop +endfacet +facet normal -2.189385090694423e-14 2.884359777632179e-14 -1.0 + outer loop + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + vertex 176.87250722291898 -71.11948528247086 603.7 + vertex 171.4437151320275 -74.25379985752176 603.7 + endloop +endfacet +facet normal 0.33141357403555705 0.1913417161825882 -0.9238795325112902 + outer loop + vertex 182.38535251342523 -67.93664256999594 597.5339745962156 + vertex 32.17648367957566 191.750388087886 597.434074173711 + vertex 32.38535251342584 191.87097856533475 597.5339745962157 + endloop +endfacet +facet normal 0.33141357403555705 0.1913417161825882 -0.9238795325112902 + outer loop + vertex 32.17648367957566 191.750388087886 597.434074173711 + vertex 182.38535251342523 -67.93664256999594 597.5339745962156 + vertex 182.176483679575 -68.05723304744467 597.434074173711 + endloop +endfacet +facet normal 0.5272028623656286 0.3043807145043965 -0.7933533402912483 + outer loop + vertex 182.5647122472288 -67.83308917940268 597.6928932188135 + vertex 32.38535251342584 191.87097856533475 597.5339745962157 + vertex 32.56471224722943 191.97453195592797 597.6928932188135 + endloop +endfacet +facet normal 0.5272028623656286 0.3043807145043965 -0.7933533402912483 + outer loop + vertex 32.38535251342584 191.87097856533475 597.5339745962157 + vertex 182.5647122472288 -67.83308917940268 597.6928932188135 + vertex 182.38535251342523 -67.93664256999594 597.5339745962156 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 7.797766215937043e-16 + outer loop + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 31.259519488506243 191.2209785653345 604.0000000000001 + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 7.797766215937043e-16 + outer loop + vertex 31.259519488506243 191.2209785653345 604.0000000000001 + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 181.25951948850556 -68.58664256999616 604.0000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 6.227439144697608e-15 + outer loop + vertex 177.44900771185397 -70.7866425699961 597.4 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 27.449007711854602 189.02097856533462 597.4000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 6.227439144697608e-15 + outer loop + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + vertex 177.44900771185397 -70.7866425699961 597.4 + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 179.00785343866596 -69.88664256999604 599.2 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 29.007853438666647 189.9209785653346 599.2000000000002 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + vertex 179.00785343866596 -69.88664256999604 599.2 + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 169.30836891628041 -75.48664256999639 599.2 + vertex 19.308368916281097 184.3209785653343 599.2000000000002 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 169.30836891628041 -75.48664256999639 599.2 + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 31.259519488506204 191.22097856533455 601.8000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 179.49775138722262 -69.60379985752151 601.8000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 179.00785343866596 -69.88664256999604 599.2 + vertex 29.007853438666647 189.9209785653346 599.2000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 179.00785343866596 -69.88664256999604 599.2 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 177.10259755034025 -70.9866425699961 599.2 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 170.86721464309238 -74.58664256999629 597.4 + vertex 20.86721464309301 185.22097856533443 597.4000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 170.86721464309238 -74.58664256999629 597.4 + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + endloop +endfacet +facet normal 0.8001031451912467 0.46193976625568567 -0.38268343236507846 + outer loop + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 182.702339811533 -67.75362986810374 597.9 + vertex 32.70233981153365 192.05399126722693 597.9000000000001 + endloop +endfacet +facet normal 0.8001031451912467 0.46193976625568567 -0.38268343236507846 + outer loop + vertex 182.702339811533 -67.75362986810374 597.9 + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 182.78885611527082 -67.70367965685142 598.1411809548975 + endloop +endfacet +facet normal 0.6123724356957974 0.3535533905932763 0.7071067811865439 + outer loop + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + endloop +endfacet +facet normal 0.6123724356957974 0.3535533905932763 0.7071067811865439 + outer loop + vertex 29.497751387223325 190.20382127780914 601.8000000000001 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 179.49775138722262 -69.60379985752151 601.8000000000001 + endloop +endfacet +facet normal -0.6123724356957947 -0.35355339059327473 -0.707106781186547 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 26.872507222919698 188.68813585285974 603.7000000000002 + vertex 29.007853438666707 189.92097856533448 601.2343145750508 + endloop +endfacet +facet normal -0.6123724356957947 -0.35355339059327473 -0.707106781186547 + outer loop + vertex 26.872507222919698 188.68813585285974 603.7000000000002 + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 176.87250722291898 -71.11948528247086 603.7 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 32.47195505380442 191.92097856533454 603.6 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 32.818365215318174 192.12097856533453 603.6 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 32.47195505380442 191.92097856533454 603.6 + vertex 182.47195505380378 -67.88664256999614 603.6 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 171.2136248046061 -74.38664256999624 597.8000000000001 + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 20.867214643093014 185.22097856533438 597.8000000000001 + vertex 171.2136248046061 -74.38664256999624 597.8000000000001 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + endloop +endfacet +facet normal 3.2732387459073094e-14 -2.2585965780327815e-14 1.0 + outer loop + vertex 31.259519488506243 191.2209785653345 604.0000000000001 + vertex 182.47195505380373 -67.88664256999614 604.0 + vertex 32.47195505380441 191.92097856533454 604.0000000000001 + endloop +endfacet +facet normal 3.2732387459073094e-14 -2.2585965780327815e-14 1.0 + outer loop + vertex 182.47195505380373 -67.88664256999614 604.0 + vertex 31.259519488506243 191.2209785653345 604.0000000000001 + vertex 181.25951948850556 -68.58664256999616 604.0000000000001 + endloop +endfacet +facet normal 0.6123724356957699 0.35355339059331115 -0.7071067811865503 + outer loop + vertex 171.4437151320275 -74.25379985752176 603.7 + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 21.443715132028238 185.55382127780885 603.7000000000002 + endloop +endfacet +facet normal 0.6123724356957699 0.35355339059331115 -0.7071067811865503 + outer loop + vertex 19.308368916281122 184.3209785653342 601.2343145750509 + vertex 171.4437151320275 -74.25379985752176 603.7 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + endloop +endfacet +facet normal -0.1130389983218509 -0.06526309611000974 -0.9914448613738074 + outer loop + vertex 166.36388254341333 -77.18664256999637 597.4 + vertex 16.13973867537202 182.49156904278303 597.434074173711 + vertex 16.36388254341405 182.6209785653343 597.4000000000001 + endloop +endfacet +facet normal -0.1130389983218509 -0.06526309611000974 -0.9914448613738074 + outer loop + vertex 16.13973867537202 182.49156904278303 597.434074173711 + vertex 166.36388254341333 -77.18664256999637 597.4 + vertex 166.13973867537132 -77.31605209254764 597.434074173711 + endloop +endfacet +facet normal -0.3314135740355962 -0.1913417161825235 -0.9238795325112896 + outer loop + vertex 166.13973867537132 -77.31605209254764 597.434074173711 + vertex 15.930869841521801 182.37097856533427 597.5339745962157 + vertex 16.13973867537202 182.49156904278303 597.434074173711 + endloop +endfacet +facet normal -0.3314135740355962 -0.1913417161825235 -0.9238795325112896 + outer loop + vertex 15.930869841521801 182.37097856533427 597.5339745962157 + vertex 166.13973867537132 -77.31605209254764 597.434074173711 + vertex 165.93086984152112 -77.43664256999635 597.5339745962156 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 2.4387889803801352e-15 + outer loop + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + vertex 32.818365215318174 192.12097856533453 603.6 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 2.4387889803801352e-15 + outer loop + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + vertex 27.102597550340843 188.82097856533457 597.8000000000001 + vertex 27.449007711854623 189.02097856533456 597.8000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 27.102597550340843 188.82097856533457 597.8000000000001 + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + endloop +endfacet +facet normal 0.8586164364012412 0.4957224306869379 -0.1305261922200573 + outer loop + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 32.8183652153181 192.12097856533472 598.4000000000002 + endloop +endfacet +facet normal 0.8586164364012412 0.4957224306869379 -0.1305261922200573 + outer loop + vertex 32.788856115271464 192.10394147847924 598.1411809548977 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + vertex 182.78885611527082 -67.70367965685142 598.1411809548975 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 21.213624804606773 185.4209785653344 597.8000000000001 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 171.2136248046061 -74.38664256999624 597.8000000000001 + endloop +endfacet +facet normal -0.5272028623656617 -0.30438071450434234 -0.7933533402912472 + outer loop + vertex 165.93086984152112 -77.43664256999635 597.5339745962156 + vertex 15.751510107718227 182.26742517474096 597.6928932188135 + vertex 15.930869841521801 182.37097856533427 597.5339745962157 + endloop +endfacet +facet normal -0.5272028623656617 -0.30438071450434234 -0.7933533402912472 + outer loop + vertex 15.751510107718227 182.26742517474096 597.6928932188135 + vertex 165.93086984152112 -77.43664256999635 597.5339745962156 + vertex 165.75151010771754 -77.54019596058967 597.6928932188135 + endloop +endfacet +facet normal -0.6870641468694523 -0.39667667014561686 -0.6087614290087188 + outer loop + vertex 15.751510107718227 182.26742517474096 597.6928932188135 + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + vertex 15.613882543413997 182.187965863442 597.9000000000001 + endloop +endfacet +facet normal -0.6870641468694523 -0.39667667014561686 -0.6087614290087188 + outer loop + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + vertex 15.751510107718227 182.26742517474096 597.6928932188135 + vertex 165.75151010771754 -77.54019596058967 597.6928932188135 + endloop +endfacet +facet normal 0.6870641468694344 0.3966766701456517 -0.6087614290087163 + outer loop + vertex 182.702339811533 -67.75362986810374 597.9 + vertex 32.56471224722943 191.97453195592797 597.6928932188135 + vertex 32.70233981153365 192.05399126722693 597.9000000000001 + endloop +endfacet +facet normal 0.6870641468694344 0.3966766701456517 -0.6087614290087163 + outer loop + vertex 32.56471224722943 191.97453195592797 597.6928932188135 + vertex 182.702339811533 -67.75362986810374 597.9 + vertex 182.5647122472288 -67.83308917940268 597.6928932188135 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.122523745489034e-14 + outer loop + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 27.102597550340843 188.82097856533457 597.8000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.122523745489034e-14 + outer loop + vertex 27.102597550340903 188.82097856533454 599.2000000000002 + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + vertex 177.10259755034025 -70.9866425699961 599.2 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -6.007129263248553e-15 + outer loop + vertex 182.47195505380373 -67.88664256999614 604.0 + vertex 32.47195505380442 191.92097856533454 603.6 + vertex 32.47195505380441 191.92097856533454 604.0000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -6.007129263248553e-15 + outer loop + vertex 32.47195505380442 191.92097856533454 603.6 + vertex 182.47195505380373 -67.88664256999614 604.0 + vertex 182.47195505380378 -67.88664256999614 603.6 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 19.308368916281097 184.3209785653343 599.2000000000002 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 21.213624804606773 185.42097856533437 599.2000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 19.308368916281097 184.3209785653343 599.2000000000002 + vertex 169.30836891628041 -75.48664256999639 599.2 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 170.86721464309238 -74.58664256999629 597.4 + vertex 16.36388254341405 182.6209785653343 597.4000000000001 + vertex 20.86721464309301 185.22097856533443 597.4000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 16.36388254341405 182.6209785653343 597.4000000000001 + vertex 170.86721464309238 -74.58664256999629 597.4 + vertex 166.36388254341333 -77.18664256999637 597.4 + endloop +endfacet +facet normal -0.11303899832180275 -0.06526309611006646 0.9914448613738092 + outer loop + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + vertex 167.76174321682183 -76.37958733391434 598.0545186779375 + vertex 17.761743216822566 183.4280338014163 598.0545186779376 + endloop +endfacet +facet normal -0.11303899832180275 -0.06526309611006646 0.9914448613738092 + outer loop + vertex 167.76174321682183 -76.37958733391434 598.0545186779375 + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + endloop +endfacet +facet normal -0.858616436401242 -0.49572243068693833 -0.13052619222005132 + outer loop + vertex 176.49637976769128 -71.33664256999639 607.4 + vertex 26.416705197566095 188.42497843082444 608.098811421777 + vertex 26.49637976769196 188.47097856533426 607.4000000000001 + endloop +endfacet +facet normal -0.858616436401242 -0.49572243068693833 -0.13052619222005132 + outer loop + vertex 26.416705197566095 188.42497843082444 608.098811421777 + vertex 176.49637976769128 -71.33664256999639 607.4 + vertex 176.41670519756536 -71.38264270450611 608.0988114217769 + endloop +endfacet +facet normal -0.5272028623656281 -0.3043807145043962 0.7933533402912488 + outer loop + vertex 25.327245472582963 187.79597856533428 605.0617314097822 + vertex 175.81151675385192 -71.73204841539449 605.4908116907964 + vertex 25.811516753852615 188.0755727199361 605.4908116907965 + endloop +endfacet +facet normal -0.5272028623656281 -0.3043807145043962 0.7933533402912488 + outer loop + vertex 175.81151675385192 -71.73204841539449 605.4908116907964 + vertex 25.327245472582963 187.79597856533428 605.0617314097822 + vertex 175.32724547258226 -72.01164256999633 605.061731409782 + endloop +endfacet +facet normal -0.8001031451912652 -0.46193976625565125 -0.38268343236508084 + outer loop + vertex 26.416705197566095 188.42497843082444 608.098811421777 + vertex 176.18311117747334 -71.51750827488746 608.7500000000001 + vertex 26.183111177474004 188.2901128604432 608.7500000000001 + endloop +endfacet +facet normal -0.8001031451912652 -0.46193976625565125 -0.38268343236508084 + outer loop + vertex 176.18311117747334 -71.51750827488746 608.7500000000001 + vertex 26.416705197566095 188.42497843082444 608.098811421777 + vertex 176.41670519756536 -71.38264270450611 608.0988114217769 + endloop +endfacet +facet normal -0.8001031451912611 -0.46193976625566013 -0.38268343236507896 + outer loop + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 15.613882543413997 182.187965863442 597.9000000000001 + endloop +endfacet +facet normal -0.8001031451912611 -0.46193976625566013 -0.38268343236507896 + outer loop + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + vertex 165.52736623967553 -77.66960548314098 598.1411809548975 + endloop +endfacet +facet normal -0.11303899832182693 -0.06526309610999309 -0.9914448613738114 + outer loop + vertex 174.76329962118686 -72.33723685910816 610.0079997309805 + vertex 24.15811117747407 187.1209785653341 610.1000000000001 + vertex 24.763299621187485 187.47038427622252 610.0079997309806 + endloop +endfacet +facet normal -0.11303899832182693 -0.06526309610999309 -0.9914448613738114 + outer loop + vertex 24.15811117747407 187.1209785653341 610.1000000000001 + vertex 174.76329962118686 -72.33723685910816 610.0079997309805 + vertex 174.15811117747336 -72.68664256999658 610.1 + endloop +endfacet +facet normal 0.5272028623656281 0.3043807145043962 -0.7933533402912488 + outer loop + vertex 172.98897688236445 -73.3616425699966 609.7382685902181 + vertex 22.50470560109544 186.16638441073226 609.3091883092038 + vertex 22.988976882365094 186.4459785653341 609.7382685902181 + endloop +endfacet +facet normal 0.5272028623656281 0.3043807145043962 -0.7933533402912488 + outer loop + vertex 22.50470560109544 186.16638441073226 609.3091883092038 + vertex 172.98897688236445 -73.3616425699966 609.7382685902181 + vertex 172.5047056010948 -73.64123672459844 609.3091883092037 + endloop +endfacet +facet normal -0.8001031451912407 -0.4619397662556935 0.3826834323650809 + outer loop + vertex 176.1831111774733 -71.51750827488736 606.0500000000001 + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 26.183111177473965 188.29011286044332 606.0500000000002 + endloop +endfacet +facet normal -0.8001031451912407 -0.4619397662556935 0.3826834323650809 + outer loop + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 176.1831111774733 -71.51750827488736 606.0500000000001 + vertex 176.4167051975654 -71.38264270450611 606.7011885782233 + endloop +endfacet +facet normal -0.3314135740356128 -0.19134171618253307 -0.9238795325112817 + outer loop + vertex 175.3272454725823 -72.01164256999647 609.738268590218 + vertex 24.763299621187485 187.47038427622252 610.0079997309806 + vertex 25.32724547258304 187.79597856533414 609.7382685902181 + endloop +endfacet +facet normal -0.3314135740356128 -0.19134171618253307 -0.9238795325112817 + outer loop + vertex 24.763299621187485 187.47038427622252 610.0079997309806 + vertex 175.3272454725823 -72.01164256999647 609.738268590218 + vertex 174.76329962118686 -72.33723685910816 610.0079997309805 + endloop +endfacet +facet normal 0.11303899832182654 0.06526309610999427 0.9914448613738113 + outer loop + vertex 23.552922733760536 186.77157285444585 604.7920002690196 + vertex 174.15811117747327 -72.68664256999635 604.7 + vertex 24.15811117747396 187.12097856533427 604.7000000000002 + endloop +endfacet +facet normal 0.11303899832182654 0.06526309610999427 0.9914448613738113 + outer loop + vertex 174.15811117747327 -72.68664256999635 604.7 + vertex 23.552922733760536 186.77157285444585 604.7920002690196 + vertex 173.55292273375986 -73.03604828088481 604.7920002690196 + endloop +endfacet +facet normal 0.8001031451912652 0.46193976625565125 0.38268343236508084 + outer loop + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + vertex 172.13311117747335 -73.85577686510548 606.0500000000001 + vertex 22.13311117747401 185.9518442702252 606.0500000000002 + endloop +endfacet +facet normal 0.8001031451912652 0.46193976625565125 0.38268343236508084 + outer loop + vertex 172.13311117747335 -73.85577686510548 606.0500000000001 + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + vertex 171.89951715738127 -73.99064243548673 606.7011885782233 + endloop +endfacet +facet normal 0.33141357403557603 0.19134171618259352 -0.9238795325112824 + outer loop + vertex 173.55292273376 -73.036048280885 610.0079997309805 + vertex 22.988976882365094 186.4459785653341 609.7382685902181 + vertex 23.552922733760624 186.77157285444568 610.0079997309806 + endloop +endfacet +facet normal 0.33141357403557603 0.19134171618259352 -0.9238795325112824 + outer loop + vertex 22.988976882365094 186.4459785653341 609.7382685902181 + vertex 173.55292273376 -73.036048280885 610.0079997309805 + vertex 172.98897688236445 -73.3616425699966 609.7382685902181 + endloop +endfacet +facet normal -0.6870641468694503 -0.3966766701456213 -0.6087614290087181 + outer loop + vertex 176.18311117747334 -71.51750827488746 608.7500000000001 + vertex 25.811516753852683 188.07557271993602 609.3091883092038 + vertex 26.183111177474004 188.2901128604432 608.7500000000001 + endloop +endfacet +facet normal -0.6870641468694503 -0.3966766701456213 -0.6087614290087181 + outer loop + vertex 25.811516753852683 188.07557271993602 609.3091883092038 + vertex 176.18311117747334 -71.51750827488746 608.7500000000001 + vertex 175.81151675385203 -71.73204841539467 609.3091883092037 + endloop +endfacet +facet normal -0.8586164364012464 -0.4957224306869296 0.1305261922200552 + outer loop + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 176.49637976769128 -71.33664256999639 607.4 + vertex 26.49637976769196 188.47097856533426 607.4000000000001 + endloop +endfacet +facet normal -0.8586164364012464 -0.4957224306869296 0.1305261922200552 + outer loop + vertex 176.49637976769128 -71.33664256999639 607.4 + vertex 26.41670519756606 188.4249784308245 606.7011885782233 + vertex 176.4167051975654 -71.38264270450611 606.7011885782233 + endloop +endfacet +facet normal 0.8001031451912417 0.4619397662556828 -0.3826834323650923 + outer loop + vertex 172.13311117747338 -73.85577686510553 608.7500000000001 + vertex 21.899517157381997 185.81697869984384 608.098811421777 + vertex 22.133111177474095 185.9518442702251 608.7500000000001 + endloop +endfacet +facet normal 0.8001031451912417 0.4619397662556828 -0.3826834323650923 + outer loop + vertex 21.899517157381997 185.81697869984384 608.098811421777 + vertex 172.13311117747338 -73.85577686510553 608.7500000000001 + vertex 171.89951715738135 -73.99064243548682 608.0988114217769 + endloop +endfacet +facet normal 0.11303899832179497 0.06526309610997745 0.9914448613738159 + outer loop + vertex 17.04448283908812 183.01392332925224 598.0545186779376 + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + vertex 17.403113027955335 183.22097856533426 598.0000000000001 + endloop +endfacet +facet normal 0.11303899832179497 0.06526309610997745 0.9914448613738159 + outer loop + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + vertex 17.04448283908812 183.01392332925224 598.0545186779376 + vertex 167.04448283908746 -76.79369780607836 598.0545186779375 + endloop +endfacet +facet normal 0.6870641468694518 0.3966766701456166 0.6087614290087193 + outer loop + vertex 172.13311117747335 -73.85577686510548 606.0500000000001 + vertex 22.504705601095367 186.16638441073235 605.4908116907965 + vertex 22.13311117747401 185.9518442702252 606.0500000000002 + endloop +endfacet +facet normal 0.6870641468694518 0.3966766701456166 0.6087614290087193 + outer loop + vertex 22.504705601095367 186.16638441073235 605.4908116907965 + vertex 172.13311117747335 -73.85577686510548 606.0500000000001 + vertex 172.50470560109466 -73.64123672459827 605.4908116907964 + endloop +endfacet +facet normal -0.5272028623656586 -0.3043807145043462 -0.7933533402912477 + outer loop + vertex 175.81151675385203 -71.73204841539467 609.3091883092037 + vertex 25.32724547258304 187.79597856533414 609.7382685902181 + vertex 25.811516753852683 188.07557271993602 609.3091883092038 + endloop +endfacet +facet normal -0.5272028623656586 -0.3043807145043462 -0.7933533402912477 + outer loop + vertex 25.32724547258304 187.79597856533414 609.7382685902181 + vertex 175.81151675385203 -71.73204841539467 609.3091883092037 + vertex 175.3272454725823 -72.01164256999647 609.738268590218 + endloop +endfacet +facet normal -0.11303899832178858 -0.06526309611005687 0.9914448613738115 + outer loop + vertex 24.15811117747396 187.12097856533427 604.7000000000002 + vertex 174.76329962118672 -72.33723685910793 604.7920002690196 + vertex 24.76329962118738 187.4703842762227 604.7920002690196 + endloop +endfacet +facet normal -0.11303899832178858 -0.06526309611005687 0.9914448613738115 + outer loop + vertex 174.76329962118672 -72.33723685910793 604.7920002690196 + vertex 24.15811117747396 187.12097856533427 604.7000000000002 + vertex 174.15811117747327 -72.68664256999635 604.7 + endloop +endfacet +facet normal 0.6870641468694304 0.3966766701456494 -0.6087614290087222 + outer loop + vertex 172.5047056010948 -73.64123672459844 609.3091883092037 + vertex 22.133111177474095 185.9518442702251 608.7500000000001 + vertex 22.50470560109544 186.16638441073226 609.3091883092038 + endloop +endfacet +facet normal 0.6870641468694304 0.3966766701456494 -0.6087614290087222 + outer loop + vertex 22.133111177474095 185.9518442702251 608.7500000000001 + vertex 172.5047056010948 -73.64123672459844 609.3091883092037 + vertex 172.13311117747338 -73.85577686510553 608.7500000000001 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 -0.13052619222005105 + outer loop + vertex 21.899517157381997 185.81697869984384 608.098811421777 + vertex 171.81984258725538 -74.03664256999654 607.4000000000001 + vertex 21.819842587256076 185.77097856533416 607.4000000000001 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 -0.13052619222005105 + outer loop + vertex 171.81984258725538 -74.03664256999654 607.4000000000001 + vertex 21.899517157381997 185.81697869984384 608.098811421777 + vertex 171.89951715738135 -73.99064243548682 608.0988114217769 + endloop +endfacet +facet normal 0.11303899832178858 0.06526309611005687 -0.9914448613738115 + outer loop + vertex 174.15811117747336 -72.68664256999658 610.1 + vertex 23.552922733760624 186.77157285444568 610.0079997309806 + vertex 24.15811117747407 187.1209785653341 610.1000000000001 + endloop +endfacet +facet normal 0.11303899832178858 0.06526309611005687 -0.9914448613738115 + outer loop + vertex 23.552922733760624 186.77157285444568 610.0079997309806 + vertex 174.15811117747336 -72.68664256999658 610.1 + vertex 173.55292273376 -73.036048280885 610.0079997309805 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 16.710292704927774 182.8209785653343 598.214359353945 + vertex 167.04448283908746 -76.79369780607836 598.0545186779375 + vertex 17.04448283908812 183.01392332925224 598.0545186779376 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 167.04448283908746 -76.79369780607836 598.0545186779375 + vertex 16.710292704927774 182.8209785653343 598.214359353945 + vertex 166.71029270492707 -76.98664256999636 598.2143593539449 + endloop +endfacet +facet normal -0.6870641468694288 -0.3966766701456541 0.6087614290087209 + outer loop + vertex 25.811516753852615 188.0755727199361 605.4908116907965 + vertex 176.1831111774733 -71.51750827488736 606.0500000000001 + vertex 26.183111177473965 188.29011286044332 606.0500000000002 + endloop +endfacet +facet normal -0.6870641468694288 -0.3966766701456541 0.6087614290087209 + outer loop + vertex 176.1831111774733 -71.51750827488736 606.0500000000001 + vertex 25.811516753852615 188.0755727199361 605.4908116907965 + vertex 175.81151675385192 -71.73204841539449 605.4908116907964 + endloop +endfacet +facet normal 0.52720286236566 0.3043807145043358 0.7933533402912507 + outer loop + vertex 16.42331713084209 182.65529314038497 598.4686291501016 + vertex 166.71029270492707 -76.98664256999636 598.2143593539449 + vertex 16.710292704927774 182.8209785653343 598.214359353945 + endloop +endfacet +facet normal 0.52720286236566 0.3043807145043358 0.7933533402912507 + outer loop + vertex 166.71029270492707 -76.98664256999636 598.2143593539449 + vertex 16.42331713084209 182.65529314038497 598.4686291501016 + vertex 166.42331713084138 -77.15232799494558 598.4686291501016 + endloop +endfacet +facet normal -0.3314135740355447 -0.19134171618257262 0.923879532511298 + outer loop + vertex 17.761743216822566 183.4280338014163 598.0545186779376 + vertex 168.0959333509822 -76.18664256999637 598.2143593539449 + vertex 18.09593335098285 183.62097856533433 598.214359353945 + endloop +endfacet +facet normal -0.3314135740355447 -0.19134171618257262 0.923879532511298 + outer loop + vertex 168.0959333509822 -76.18664256999637 598.2143593539449 + vertex 17.761743216822566 183.4280338014163 598.0545186779376 + vertex 167.76174321682183 -76.37958733391434 598.0545186779375 + endloop +endfacet +facet normal 0.5272028623656586 0.3043807145043462 0.7933533402912477 + outer loop + vertex 22.504705601095367 186.16638441073235 605.4908116907965 + vertex 172.98897688236434 -73.36164256999642 605.061731409782 + vertex 22.98897688236502 186.44597856533423 605.0617314097822 + endloop +endfacet +facet normal 0.5272028623656586 0.3043807145043462 0.7933533402912477 + outer loop + vertex 172.98897688236434 -73.36164256999642 605.061731409782 + vertex 22.504705601095367 186.16638441073235 605.4908116907965 + vertex 172.50470560109466 -73.64123672459827 605.4908116907964 + endloop +endfacet +facet normal 0.3314135740356128 0.19134171618253307 0.9238795325112817 + outer loop + vertex 22.98897688236502 186.44597856533423 605.0617314097822 + vertex 173.55292273375986 -73.03604828088481 604.7920002690196 + vertex 23.552922733760536 186.77157285444585 604.7920002690196 + endloop +endfacet +facet normal 0.3314135740356128 0.19134171618253307 0.9238795325112817 + outer loop + vertex 173.55292273375986 -73.03604828088481 604.7920002690196 + vertex 22.98897688236502 186.44597856533423 605.0617314097822 + vertex 172.98897688236434 -73.36164256999642 605.061731409782 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 0.13052619222005132 + outer loop + vertex 171.81984258725538 -74.03664256999654 607.4000000000001 + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + vertex 21.819842587256076 185.77097856533416 607.4000000000001 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 0.13052619222005132 + outer loop + vertex 21.89951715738199 185.8169786998439 606.7011885782233 + vertex 171.81984258725538 -74.03664256999654 607.4000000000001 + vertex 171.89951715738127 -73.99064243548673 606.7011885782233 + endloop +endfacet +facet normal -0.8586164364012415 -0.49572243068693805 -0.1305261922200554 + outer loop + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + endloop +endfacet +facet normal -0.8586164364012415 -0.49572243068693805 -0.1305261922200554 + outer loop + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 15.527366239676214 182.13801565218967 598.1411809548977 + vertex 165.52736623967553 -77.66960548314098 598.1411809548975 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 166.20311302795469 -77.27946289302398 598.8 + vertex 16.42331713084209 182.65529314038497 598.4686291501016 + vertex 16.203113027955354 182.52815824230666 598.8000000000001 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 16.42331713084209 182.65529314038497 598.4686291501016 + vertex 166.20311302795469 -77.27946289302398 598.8 + vertex 166.42331713084138 -77.15232799494558 598.4686291501016 + endloop +endfacet +facet normal -0.33141357403557914 -0.19134171618258686 0.9238795325112827 + outer loop + vertex 24.76329962118738 187.4703842762227 604.7920002690196 + vertex 175.32724547258226 -72.01164256999633 605.061731409782 + vertex 25.327245472582963 187.79597856533428 605.0617314097822 + endloop +endfacet +facet normal -0.33141357403557914 -0.19134171618258686 0.9238795325112827 + outer loop + vertex 175.32724547258226 -72.01164256999633 605.061731409782 + vertex 24.76329962118738 187.4703842762227 604.7920002690196 + vertex 174.76329962118672 -72.33723685910793 604.7920002690196 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 168.09593335098222 -76.18664256999647 600.9856406460551 + vertex 17.761743216822598 183.4280338014162 601.1454813220627 + vertex 18.095933350982918 183.6209785653342 600.9856406460553 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 17.761743216822598 183.4280338014162 601.1454813220627 + vertex 168.09593335098222 -76.18664256999647 600.9856406460551 + vertex 167.76174321682188 -76.37958733391439 601.1454813220626 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 167.40311302795465 -76.58664256999641 601.2 + vertex 17.044482839088168 183.01392332925215 601.1454813220627 + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 17.044482839088168 183.01392332925215 601.1454813220627 + vertex 167.40311302795465 -76.58664256999641 601.2 + vertex 167.04448283908746 -76.79369780607848 601.1454813220626 + endloop +endfacet +facet normal 0.8586164364012477 0.4957224306869304 -0.13052619222004383 + outer loop + vertex 166.06468694197423 -77.35938323102775 600.014110472164 + vertex 16.01747238190026 182.42097856533417 599.6 + vertex 16.064686941974863 182.44823790430294 600.0141104721641 + endloop +endfacet +facet normal 0.8586164364012477 0.4957224306869304 -0.13052619222004383 + outer loop + vertex 16.01747238190026 182.42097856533417 599.6 + vertex 166.06468694197423 -77.35938323102775 600.014110472164 + vertex 166.01747238189964 -77.38664256999651 599.6 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 168.7887536740098 -75.78664256999642 599.6 + vertex 18.74153911393583 183.99371922636553 600.0141104721642 + vertex 18.788753674010444 184.0209785653343 599.6000000000001 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 18.74153911393583 183.99371922636553 600.0141104721642 + vertex 168.7887536740098 -75.78664256999642 599.6 + vertex 168.7415391139352 -75.81390190896518 600.0141104721641 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 168.38290892506788 -76.0209571450471 598.4686291501016 + vertex 18.60311302795533 183.91379888836184 598.8000000000002 + vertex 18.3829089250686 183.78666399028353 598.4686291501016 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 18.60311302795533 183.91379888836184 598.8000000000002 + vertex 168.38290892506788 -76.0209571450471 598.4686291501016 + vertex 168.60311302795463 -75.89382224696875 598.8000000000001 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 166.06468694197446 -77.35938323102819 615.6141104721642 + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 166.06468694197446 -77.35938323102819 615.6141104721642 + vertex 166.01747238189986 -77.38664256999687 615.2 + endloop +endfacet +facet normal 0.5272028623656548 0.30438071450442294 -0.7933533402912207 + outer loop + vertex 166.71029270492716 -76.98664256999646 600.9856406460551 + vertex 16.423317130842133 182.6552931403849 600.7313708498986 + vertex 16.710292704927845 182.82097856533417 600.9856406460552 + endloop +endfacet +facet normal 0.5272028623656548 0.30438071450442294 -0.7933533402912207 + outer loop + vertex 16.423317130842133 182.6552931403849 600.7313708498986 + vertex 166.71029270492716 -76.98664256999646 600.9856406460551 + vertex 166.42331713084147 -77.15232799494576 600.7313708498986 + endloop +endfacet +facet normal -0.11303899832179483 -0.06526309610997597 -0.991444861373816 + outer loop + vertex 167.76174321682188 -76.37958733391439 601.1454813220626 + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + vertex 17.761743216822598 183.4280338014162 601.1454813220627 + endloop +endfacet +facet normal -0.11303899832179483 -0.06526309610997597 -0.991444861373816 + outer loop + vertex 17.40311302795538 183.22097856533415 601.2000000000002 + vertex 167.76174321682188 -76.37958733391439 601.1454813220626 + vertex 167.40311302795465 -76.58664256999641 601.2 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 16.01747238190026 182.42097856533417 599.6 + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + vertex 16.06468694197487 182.44823790430297 599.1858895278361 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + vertex 16.01747238190026 182.42097856533417 599.6 + vertex 166.01747238189964 -77.38664256999651 599.6 + endloop +endfacet +facet normal -0.3314135740355637 -0.1913417161825047 -0.9238795325113052 + outer loop + vertex 168.09593335098253 -76.1866425699969 616.5856406460551 + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + endloop +endfacet +facet normal -0.3314135740355637 -0.1913417161825047 -0.9238795325113052 + outer loop + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + vertex 168.09593335098253 -76.1866425699969 616.5856406460551 + vertex 167.76174321682217 -76.37958733391493 616.7454813220626 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 16.423317130842133 182.6552931403849 600.7313708498986 + vertex 166.20311302795469 -77.27946289302402 600.4000000000001 + vertex 16.20311302795538 182.52815824230663 600.4000000000002 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 166.20311302795469 -77.27946289302402 600.4000000000001 + vertex 16.423317130842133 182.6552931403849 600.7313708498986 + vertex 166.42331713084147 -77.15232799494576 600.7313708498986 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 166.203113027955 -77.27946289302443 616.0 + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 166.203113027955 -77.27946289302443 616.0 + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 166.4233171308417 -77.15232799494622 616.3313708498985 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 168.78875367401002 -75.78664256999677 615.2 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 168.78875367401002 -75.78664256999677 615.2 + vertex 168.7415391139354 -75.81390190896563 615.6141104721642 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 167.0444828390878 -76.79369780607902 616.7454813220626 + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + vertex 167.0444828390878 -76.79369780607902 616.7454813220626 + vertex 166.71029270492744 -76.98664256999696 616.5856406460551 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + vertex 166.06468694197446 -77.35938323102819 615.6141104721642 + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 166.06468694197446 -77.35938323102819 615.6141104721642 + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + vertex 166.203113027955 -77.27946289302443 616.0 + endloop +endfacet +facet normal 0.3314135740355426 0.1913417161825714 -0.923879532511299 + outer loop + vertex 167.04448283908746 -76.79369780607848 601.1454813220626 + vertex 16.710292704927845 182.82097856533417 600.9856406460552 + vertex 17.044482839088168 183.01392332925215 601.1454813220627 + endloop +endfacet +facet normal 0.3314135740355426 0.1913417161825714 -0.923879532511299 + outer loop + vertex 16.710292704927845 182.82097856533417 600.9856406460552 + vertex 167.04448283908746 -76.79369780607848 601.1454813220626 + vertex 166.71029270492716 -76.98664256999646 600.9856406460551 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 168.38290892506797 -76.02095714504716 600.7313708498986 + vertex 18.095933350982918 183.6209785653342 600.9856406460553 + vertex 18.382908925068623 183.78666399028344 600.7313708498987 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 18.095933350982918 183.6209785653342 600.9856406460553 + vertex 168.38290892506797 -76.02095714504716 600.7313708498986 + vertex 168.09593335098222 -76.18664256999647 600.9856406460551 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 166.01747238189986 -77.38664256999687 615.2 + endloop +endfacet +facet normal -0.5272028623656636 -0.3043807145043491 -0.7933533402912432 + outer loop + vertex 168.38290892506828 -76.0209571450477 616.3313708498986 + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + endloop +endfacet +facet normal -0.5272028623656636 -0.3043807145043491 -0.7933533402912432 + outer loop + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + vertex 168.38290892506828 -76.0209571450477 616.3313708498986 + vertex 168.09593335098253 -76.1866425699969 616.5856406460551 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 168.7415391139354 -75.81390190896563 615.6141104721642 + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + vertex 168.7415391139354 -75.81390190896563 615.6141104721642 + vertex 168.60311302795498 -75.89382224696925 616.0 + endloop +endfacet +facet normal -0.8586164364012476 -0.49572243068693034 0.13052619222004344 + outer loop + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + vertex 168.7887536740098 -75.78664256999642 599.6 + vertex 18.788753674010444 184.0209785653343 599.6000000000001 + endloop +endfacet +facet normal -0.8586164364012476 -0.49572243068693034 0.13052619222004344 + outer loop + vertex 168.7887536740098 -75.78664256999642 599.6 + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + vertex 168.7415391139352 -75.81390190896514 599.185889527836 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 168.7415391139352 -75.81390190896518 600.0141104721641 + vertex 18.60311302795535 183.91379888836178 600.4000000000002 + vertex 18.74153911393583 183.99371922636553 600.0141104721642 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 18.60311302795535 183.91379888836178 600.4000000000002 + vertex 168.7415391139352 -75.81390190896518 600.0141104721641 + vertex 168.60311302795472 -75.8938222469689 600.4000000000001 + endloop +endfacet +facet normal 0.8001031451912451 0.4619397662556961 -0.3826834323650685 + outer loop + vertex 16.20311302795538 182.52815824230663 600.4000000000002 + vertex 166.06468694197423 -77.35938323102775 600.014110472164 + vertex 16.064686941974863 182.44823790430294 600.0141104721641 + endloop +endfacet +facet normal 0.8001031451912451 0.4619397662556961 -0.3826834323650685 + outer loop + vertex 166.06468694197423 -77.35938323102775 600.014110472164 + vertex 16.20311302795538 182.52815824230663 600.4000000000002 + vertex 166.20311302795469 -77.27946289302402 600.4000000000001 + endloop +endfacet +facet normal -0.11303899832184175 -0.06526309611000446 -0.9914448613738089 + outer loop + vertex 167.76174321682217 -76.37958733391493 616.7454813220626 + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + endloop +endfacet +facet normal -0.11303899832184175 -0.06526309611000446 -0.9914448613738089 + outer loop + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + vertex 167.76174321682217 -76.37958733391493 616.7454813220626 + vertex 167.40311302795496 -76.58664256999695 616.8000000000001 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 167.40311302795496 -76.58664256999695 616.8000000000001 + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + vertex 167.40311302795496 -76.58664256999695 616.8000000000001 + vertex 167.0444828390878 -76.79369780607902 616.7454813220626 + endloop +endfacet +facet normal -0.8001031451912454 -0.4619397662556849 0.3826834323650818 + outer loop + vertex 168.60311302795463 -75.89382224696875 598.8000000000001 + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + vertex 18.60311302795533 183.91379888836184 598.8000000000002 + endloop +endfacet +facet normal -0.8001031451912454 -0.4619397662556849 0.3826834323650818 + outer loop + vertex 18.741539113935833 183.99371922636553 599.1858895278361 + vertex 168.60311302795463 -75.89382224696875 598.8000000000001 + vertex 168.7415391139352 -75.81390190896514 599.185889527836 + endloop +endfacet +facet normal -0.5272028623656569 -0.3043807145044129 0.7933533402912233 + outer loop + vertex 18.09593335098285 183.62097856533433 598.214359353945 + vertex 168.38290892506788 -76.0209571450471 598.4686291501016 + vertex 18.3829089250686 183.78666399028353 598.4686291501016 + endloop +endfacet +facet normal -0.5272028623656569 -0.3043807145044129 0.7933533402912233 + outer loop + vertex 168.38290892506788 -76.0209571450471 598.4686291501016 + vertex 18.09593335098285 183.62097856533433 598.214359353945 + vertex 168.0959333509822 -76.18664256999637 598.2143593539449 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 166.71029270492744 -76.98664256999696 616.5856406460551 + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 166.71029270492744 -76.98664256999696 616.5856406460551 + vertex 166.4233171308417 -77.15232799494622 616.3313708498985 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + vertex 16.203113027955354 182.52815824230666 598.8000000000001 + vertex 16.06468694197487 182.44823790430297 599.1858895278361 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 16.203113027955354 182.52815824230666 598.8000000000001 + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + vertex 166.20311302795469 -77.27946289302398 598.8 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + vertex 166.20311302795494 -77.27946289302439 614.4000000000001 + endloop +endfacet +facet normal -0.6870641468694512 -0.39667667014562186 -0.6087614290087167 + outer loop + vertex 168.60311302795498 -75.89382224696925 616.0 + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + endloop +endfacet +facet normal -0.6870641468694512 -0.39667667014562186 -0.6087614290087167 + outer loop + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + vertex 168.60311302795498 -75.89382224696925 616.0 + vertex 168.38290892506828 -76.0209571450477 616.3313708498986 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 168.60311302795472 -75.8938222469689 600.4000000000001 + vertex 18.382908925068623 183.78666399028344 600.7313708498987 + vertex 18.60311302795535 183.91379888836178 600.4000000000002 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 18.382908925068623 183.78666399028344 600.7313708498987 + vertex 168.60311302795472 -75.8938222469689 600.4000000000001 + vertex 168.38290892506797 -76.02095714504716 600.7313708498986 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 32.29874997304777 191.8209785653342 615.2000000000002 + vertex 182.2515354129725 -68.01390190896524 615.6141104721642 + vertex 32.251535412973155 191.79371922636543 615.6141104721642 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 182.2515354129725 -68.01390190896524 615.6141104721642 + vertex 32.29874997304777 191.8209785653342 615.2000000000002 + vertex 182.29874997304705 -67.98664256999643 615.2 + endloop +endfacet +facet normal 0.5272028623656569 0.3043807145044129 -0.7933533402912233 + outer loop + vertex 180.22028900396444 -69.18664256999656 616.5856406460551 + vertex 29.93331342987943 190.4552931403848 616.3313708498987 + vertex 30.220289003965142 190.62097856533407 616.5856406460553 + endloop +endfacet +facet normal 0.5272028623656569 0.3043807145044129 -0.7933533402912233 + outer loop + vertex 29.93331342987943 190.4552931403848 616.3313708498987 + vertex 180.22028900396444 -69.18664256999656 616.5856406460551 + vertex 179.93331342987875 -69.35232799494582 616.3313708498986 + endloop +endfacet +facet normal -0.3314135740355858 -0.19134171618259352 0.9238795325112789 + outer loop + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + vertex 168.09593335098253 -76.18664256999686 613.814359353945 + vertex 18.095933350983174 183.62097856533384 613.814359353945 + endloop +endfacet +facet normal -0.3314135740355858 -0.19134171618259352 0.9238795325112789 + outer loop + vertex 168.09593335098253 -76.18664256999686 613.814359353945 + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + vertex 167.76174321682214 -76.37958733391474 613.6545186779375 + endloop +endfacet +facet normal 0.5272028623656525 0.3043807145043483 0.793353340291251 + outer loop + vertex 29.9333134298794 190.45529314038492 614.0686291501016 + vertex 180.2202890039644 -69.18664256999648 613.814359353945 + vertex 30.22028900396512 190.62097856533418 613.814359353945 + endloop +endfacet +facet normal 0.5272028623656525 0.3043807145043483 0.793353340291251 + outer loop + vertex 180.2202890039644 -69.18664256999648 613.814359353945 + vertex 29.9333134298794 190.45529314038492 614.0686291501016 + vertex 179.93331342987872 -69.35232799494572 614.0686291501015 + endloop +endfacet +facet normal 0.527202862365693 0.3043807145043661 0.7933533402912171 + outer loop + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 166.71029270492738 -76.98664256999686 613.814359353945 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + endloop +endfacet +facet normal 0.527202862365693 0.3043807145043661 0.7933533402912171 + outer loop + vertex 166.71029270492738 -76.98664256999686 613.814359353945 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 166.42331713084167 -77.15232799494612 614.0686291501015 + endloop +endfacet +facet normal -0.6870641468694383 -0.39667667014565394 0.6087614290087103 + outer loop + vertex 168.3829089250682 -76.02095714504752 614.0686291501016 + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + endloop +endfacet +facet normal -0.6870641468694383 -0.39667667014565394 0.6087614290087103 + outer loop + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 168.3829089250682 -76.02095714504752 614.0686291501016 + vertex 168.60311302795495 -75.89382224696925 614.4000000000001 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 181.60592965001953 -68.38664256999647 616.5856406460551 + vertex 31.27173951585992 191.2280338014161 616.7454813220627 + vertex 31.60592965002024 191.4209785653341 616.5856406460553 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 31.27173951585992 191.2280338014161 616.7454813220627 + vertex 181.60592965001953 -68.38664256999647 616.5856406460551 + vertex 181.27173951585922 -68.57958733391453 616.7454813220626 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 182.11310932699195 -68.09382224696891 616.0 + vertex 31.892905224105952 191.58666399028337 616.3313708498987 + vertex 32.113109326992664 191.7137988883617 616.0000000000001 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 31.892905224105952 191.58666399028337 616.3313708498987 + vertex 182.11310932699195 -68.09382224696891 616.0 + vertex 181.8929052241053 -68.22095714504731 616.3313708498986 + endloop +endfacet +facet normal 0.3314135740355447 0.19134171618257262 -0.923879532511298 + outer loop + vertex 180.55447913812478 -68.99369780607854 616.7454813220626 + vertex 30.220289003965142 190.62097856533407 616.5856406460553 + vertex 30.554479138125483 190.81392332925202 616.7454813220626 + endloop +endfacet +facet normal 0.3314135740355447 0.19134171618257262 -0.923879532511298 + outer loop + vertex 30.220289003965142 190.62097856533407 616.5856406460553 + vertex 180.55447913812478 -68.99369780607854 616.7454813220626 + vertex 180.22028900396444 -69.18664256999656 616.5856406460551 + endloop +endfacet +facet normal 0.11303899832183627 0.06526309610999989 0.9914448613738097 + outer loop + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + vertex 167.40311302795504 -76.58664256999687 613.6 + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + endloop +endfacet +facet normal 0.11303899832183627 0.06526309610999989 0.9914448613738097 + outer loop + vertex 167.40311302795504 -76.58664256999687 613.6 + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + vertex 167.04448283908772 -76.7936978060789 613.6545186779375 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 29.93331342987943 190.4552931403848 616.3313708498987 + vertex 179.713109326992 -69.47946289302403 616.0 + vertex 29.713109326992683 190.32815824230653 616.0000000000001 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 179.713109326992 -69.47946289302403 616.0 + vertex 29.93331342987943 190.4552931403848 616.3313708498987 + vertex 179.93331342987875 -69.35232799494582 616.3313708498986 + endloop +endfacet +facet normal 0.8001031451912454 0.4619397662556849 -0.3826834323650818 + outer loop + vertex 29.713109326992683 190.32815824230653 616.0000000000001 + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 29.574683241012213 190.24823790430284 615.6141104721642 + endloop +endfacet +facet normal 0.8001031451912454 0.4619397662556849 -0.3826834323650818 + outer loop + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 29.713109326992683 190.32815824230653 616.0000000000001 + vertex 179.713109326992 -69.47946289302403 616.0 + endloop +endfacet +facet normal 0.8586164364012476 0.49572243068693034 -0.13052619222004344 + outer loop + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 29.527468680937567 190.2209785653341 615.2000000000002 + vertex 29.574683241012213 190.24823790430284 615.6141104721642 + endloop +endfacet +facet normal 0.8586164364012476 0.49572243068693034 -0.13052619222004344 + outer loop + vertex 29.527468680937567 190.2209785653341 615.2000000000002 + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 179.52746868093686 -69.58664256999651 615.2 + endloop +endfacet +facet normal 0.6870641468694338 0.39667667014561186 0.6087614290087427 + outer loop + vertex 166.20311302795494 -77.27946289302439 614.4000000000001 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + endloop +endfacet +facet normal 0.6870641468694338 0.39667667014561186 0.6087614290087427 + outer loop + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 166.20311302795494 -77.27946289302439 614.4000000000001 + vertex 166.42331713084167 -77.15232799494612 614.0686291501015 + endloop +endfacet +facet normal -0.8586164364012514 -0.4957224306869325 0.13052619222001063 + outer loop + vertex 168.7415391139355 -75.81390190896563 614.785889527836 + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + vertex 18.741539113936128 183.99371922636507 614.785889527836 + endloop +endfacet +facet normal -0.8586164364012514 -0.4957224306869325 0.13052619222001063 + outer loop + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + vertex 168.7415391139355 -75.81390190896563 614.785889527836 + vertex 168.78875367401002 -75.78664256999677 615.2 + endloop +endfacet +facet normal -0.3314135740355426 -0.1913417161825714 0.923879532511299 + outer loop + vertex 31.27173951585987 191.22803380141625 613.6545186779376 + vertex 181.60592965001956 -68.38664256999643 613.814359353945 + vertex 31.605929650020194 191.42097856533422 613.814359353945 + endloop +endfacet +facet normal -0.3314135740355426 -0.1913417161825714 0.923879532511299 + outer loop + vertex 181.60592965001956 -68.38664256999643 613.814359353945 + vertex 31.27173951585987 191.22803380141625 613.6545186779376 + vertex 181.2717395158592 -68.5795873339144 613.6545186779375 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 181.8929052241052 -68.22095714504717 614.0686291501016 + vertex 32.113109326992664 191.71379888836177 614.4000000000001 + vertex 31.89290522410592 191.58666399028345 614.0686291501017 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 32.113109326992664 191.71379888836177 614.4000000000001 + vertex 181.8929052241052 -68.22095714504717 614.0686291501016 + vertex 182.11310932699195 -68.09382224696891 614.4000000000001 + endloop +endfacet +facet normal 0.11303899832180275 0.06526309611006646 -0.9914448613738092 + outer loop + vertex 180.91310932699201 -68.78664256999652 616.8000000000001 + vertex 30.554479138125483 190.81392332925202 616.7454813220626 + vertex 30.913109326992686 191.0209785653341 616.8000000000002 + endloop +endfacet +facet normal 0.11303899832180275 0.06526309611006646 -0.9914448613738092 + outer loop + vertex 30.554479138125483 190.81392332925202 616.7454813220626 + vertex 180.91310932699201 -68.78664256999652 616.8000000000001 + vertex 180.55447913812478 -68.99369780607854 616.7454813220626 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 179.713109326992 -69.47946289302408 614.4000000000001 + vertex 29.9333134298794 190.45529314038492 614.0686291501016 + vertex 29.713109326992694 190.32815824230659 614.4000000000001 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 29.9333134298794 190.45529314038492 614.0686291501016 + vertex 179.713109326992 -69.47946289302408 614.4000000000001 + vertex 179.93331342987872 -69.35232799494572 614.0686291501015 + endloop +endfacet +facet normal -0.5272028623656548 -0.30438071450442294 0.7933533402912207 + outer loop + vertex 31.605929650020194 191.42097856533422 613.814359353945 + vertex 181.8929052241052 -68.22095714504717 614.0686291501016 + vertex 31.89290522410592 191.58666399028345 614.0686291501017 + endloop +endfacet +facet normal -0.5272028623656548 -0.30438071450442294 0.7933533402912207 + outer loop + vertex 181.8929052241052 -68.22095714504717 614.0686291501016 + vertex 31.605929650020194 191.42097856533422 613.814359353945 + vertex 181.60592965001956 -68.38664256999643 613.814359353945 + endloop +endfacet +facet normal 0.33141357403558147 0.19134171618251217 0.9238795325112973 + outer loop + vertex 16.710292704928097 182.8209785653338 613.814359353945 + vertex 167.04448283908772 -76.7936978060789 613.6545186779375 + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + endloop +endfacet +facet normal 0.33141357403558147 0.19134171618251217 0.9238795325112973 + outer loop + vertex 167.04448283908772 -76.7936978060789 613.6545186779375 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + vertex 166.71029270492738 -76.98664256999686 613.814359353945 + endloop +endfacet +facet normal -0.5272028623656624 -0.30438071450441606 0.7933533402912182 + outer loop + vertex 18.095933350983174 183.62097856533384 613.814359353945 + vertex 168.3829089250682 -76.02095714504752 614.0686291501016 + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + endloop +endfacet +facet normal -0.5272028623656624 -0.30438071450441606 0.7933533402912182 + outer loop + vertex 168.3829089250682 -76.02095714504752 614.0686291501016 + vertex 18.095933350983174 183.62097856533384 613.814359353945 + vertex 168.09593335098253 -76.18664256999686 613.814359353945 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 182.2515354129725 -68.01390190896524 615.6141104721642 + vertex 32.113109326992664 191.7137988883617 616.0000000000001 + vertex 32.251535412973155 191.79371922636543 615.6141104721642 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 32.113109326992664 191.7137988883617 616.0000000000001 + vertex 182.2515354129725 -68.01390190896524 615.6141104721642 + vertex 182.11310932699195 -68.09382224696891 616.0 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 179.52746868093686 -69.58664256999651 615.2 + vertex 29.574683241012185 190.24823790430284 614.785889527836 + vertex 29.527468680937567 190.2209785653341 615.2000000000002 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 29.574683241012185 190.24823790430284 614.785889527836 + vertex 179.52746868093686 -69.58664256999651 615.2 + vertex 179.5746832410115 -69.55938323102781 614.785889527836 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 181.8929052241053 -68.22095714504731 616.3313708498986 + vertex 31.60592965002024 191.4209785653341 616.5856406460553 + vertex 31.892905224105952 191.58666399028337 616.3313708498987 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 31.60592965002024 191.4209785653341 616.5856406460553 + vertex 181.8929052241053 -68.22095714504731 616.3313708498986 + vertex 181.60592965001953 -68.38664256999647 616.5856406460551 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 30.913109326992664 191.0209785653342 613.6000000000001 + vertex 181.2717395158592 -68.5795873339144 613.6545186779375 + vertex 31.27173951585987 191.22803380141625 613.6545186779376 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 181.2717395158592 -68.5795873339144 613.6545186779375 + vertex 30.913109326992664 191.0209785653342 613.6000000000001 + vertex 180.913109326992 -68.78664256999643 613.6 + endloop +endfacet +facet normal -0.8586164364012479 -0.49572243068693045 0.130526192220043 + outer loop + vertex 182.25153541297243 -68.0139019089652 614.785889527836 + vertex 32.29874997304777 191.8209785653342 615.2000000000002 + vertex 32.25153541297315 191.79371922636545 614.7858895278362 + endloop +endfacet +facet normal -0.8586164364012479 -0.49572243068693045 0.130526192220043 + outer loop + vertex 32.29874997304777 191.8209785653342 615.2000000000002 + vertex 182.25153541297243 -68.0139019089652 614.785889527836 + vertex 182.29874997304705 -67.98664256999643 615.2 + endloop +endfacet +facet normal -0.800103145191235 -0.4619397662556789 0.38268343236511065 + outer loop + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 168.7415391139355 -75.81390190896563 614.785889527836 + vertex 18.741539113936128 183.99371922636507 614.785889527836 + endloop +endfacet +facet normal -0.800103145191235 -0.4619397662556789 0.38268343236511065 + outer loop + vertex 168.7415391139355 -75.81390190896563 614.785889527836 + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 168.60311302795495 -75.89382224696925 614.4000000000001 + endloop +endfacet +facet normal -0.11303899832179497 -0.06526309610997745 -0.9914448613738159 + outer loop + vertex 181.27173951585922 -68.57958733391453 616.7454813220626 + vertex 30.913109326992686 191.0209785653341 616.8000000000002 + vertex 31.27173951585992 191.2280338014161 616.7454813220627 + endloop +endfacet +facet normal -0.11303899832179497 -0.06526309610997745 -0.9914448613738159 + outer loop + vertex 30.913109326992686 191.0209785653341 616.8000000000002 + vertex 181.27173951585922 -68.57958733391453 616.7454813220626 + vertex 180.91310932699201 -68.78664256999652 616.8000000000001 + endloop +endfacet +facet normal -0.8001031451912451 -0.4619397662556961 0.3826834323650685 + outer loop + vertex 182.11310932699195 -68.09382224696891 614.4000000000001 + vertex 32.25153541297315 191.79371922636545 614.7858895278362 + vertex 32.113109326992664 191.71379888836177 614.4000000000001 + endloop +endfacet +facet normal -0.8001031451912451 -0.4619397662556961 0.3826834323650685 + outer loop + vertex 32.25153541297315 191.79371922636545 614.7858895278362 + vertex 182.11310932699195 -68.09382224696891 614.4000000000001 + vertex 182.25153541297243 -68.0139019089652 614.785889527836 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 179.5746832410115 -69.55938323102781 614.785889527836 + vertex 29.713109326992694 190.32815824230659 614.4000000000001 + vertex 29.574683241012185 190.24823790430284 614.785889527836 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 29.713109326992694 190.32815824230659 614.4000000000001 + vertex 179.5746832410115 -69.55938323102781 614.785889527836 + vertex 179.713109326992 -69.47946289302408 614.4000000000001 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + vertex 167.76174321682214 -76.37958733391474 613.6545186779375 + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 167.76174321682214 -76.37958733391474 613.6545186779375 + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + vertex 167.40311302795504 -76.58664256999687 613.6 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 179.71310932699174 -69.47946289302364 600.4000000000001 + vertex 29.57468324101192 190.24823790430332 600.0141104721642 + vertex 29.713109326992434 190.32815824230704 600.4000000000002 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 29.57468324101192 190.24823790430332 600.0141104721642 + vertex 179.71310932699174 -69.47946289302364 600.4000000000001 + vertex 179.57468324101123 -69.55938323102735 600.0141104721641 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 179.57468324101123 -69.55938323102735 600.0141104721641 + vertex 29.527468680937297 190.22097856533458 599.6000000000001 + vertex 29.57468324101192 190.24823790430332 600.0141104721642 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 29.527468680937297 190.22097856533458 599.6000000000001 + vertex 179.57468324101123 -69.55938323102735 600.0141104721641 + vertex 179.5274686809366 -69.58664256999607 599.6 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 179.57468324101123 -69.55938323102731 599.185889527836 + vertex 29.713109326992388 190.32815824230707 598.8000000000002 + vertex 29.57468324101191 190.24823790430335 599.1858895278361 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 29.713109326992388 190.32815824230707 598.8000000000002 + vertex 179.57468324101123 -69.55938323102731 599.185889527836 + vertex 179.71310932699174 -69.4794628930236 598.8000000000001 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 179.5274686809366 -69.58664256999607 599.6 + vertex 29.57468324101191 190.24823790430335 599.1858895278361 + vertex 29.527468680937297 190.22097856533458 599.6000000000001 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 29.57468324101191 190.24823790430335 599.1858895278361 + vertex 179.5274686809366 -69.58664256999607 599.6 + vertex 179.57468324101123 -69.55938323102731 599.185889527836 + endloop +endfacet +facet normal 0.11303899832179483 0.06526309610997597 0.991444861373816 + outer loop + vertex 30.554479138125426 190.81392332925216 613.6545186779376 + vertex 180.913109326992 -68.78664256999643 613.6 + vertex 30.913109326992664 191.0209785653342 613.6000000000001 + endloop +endfacet +facet normal 0.11303899832179483 0.06526309610997597 0.991444861373816 + outer loop + vertex 180.913109326992 -68.78664256999643 613.6 + vertex 30.554479138125426 190.81392332925216 613.6545186779376 + vertex 180.5544791381248 -68.9936978060785 613.6545186779375 + endloop +endfacet +facet normal 0.11303899832184175 0.06526309611000446 0.9914448613738089 + outer loop + vertex 30.554479138125195 190.81392332925265 598.0545186779377 + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + endloop +endfacet +facet normal 0.11303899832184175 0.06526309611000446 0.9914448613738089 + outer loop + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + vertex 30.554479138125195 190.81392332925265 598.0545186779377 + vertex 180.5544791381245 -68.993697806078 598.0545186779376 + endloop +endfacet +facet normal -0.8586164364012515 -0.49572243068693256 0.1305261922200104 + outer loop + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + vertex 32.298749973047464 191.82097856533466 599.6000000000001 + vertex 32.251535412972856 191.79371922636597 599.1858895278361 + endloop +endfacet +facet normal -0.8586164364012515 -0.49572243068693256 0.1305261922200104 + outer loop + vertex 32.298749973047464 191.82097856533466 599.6000000000001 + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + vertex 182.29874997304677 -67.98664256999594 599.6 + endloop +endfacet +facet normal -0.6870641468694361 -0.3966766701456075 -0.608761429008743 + outer loop + vertex 182.1131093269917 -68.09382224696841 600.4000000000001 + vertex 31.89290522410566 191.58666399028382 600.7313708498987 + vertex 32.11310932699237 191.71379888836222 600.4000000000002 + endloop +endfacet +facet normal -0.6870641468694361 -0.3966766701456075 -0.608761429008743 + outer loop + vertex 31.89290522410566 191.58666399028382 600.7313708498987 + vertex 182.1131093269917 -68.09382224696841 600.4000000000001 + vertex 181.89290522410496 -68.22095714504681 600.7313708498986 + endloop +endfacet +facet normal 0.3314135740355637 0.1913417161825047 0.9238795325113052 + outer loop + vertex 30.220289003964815 190.62097856533464 598.214359353945 + vertex 180.5544791381245 -68.993697806078 598.0545186779376 + vertex 30.554479138125195 190.81392332925265 598.0545186779377 + endloop +endfacet +facet normal 0.3314135740355637 0.1913417161825047 0.9238795325113052 + outer loop + vertex 180.5544791381245 -68.993697806078 598.0545186779376 + vertex 30.220289003964815 190.62097856533464 598.214359353945 + vertex 180.22028900396415 -69.18664256999598 598.2143593539449 + endloop +endfacet +facet normal -0.527202862365693 -0.3043807145043661 -0.7933533402912171 + outer loop + vertex 181.89290522410496 -68.22095714504681 600.7313708498986 + vertex 31.60592965001994 191.42097856533462 600.9856406460553 + vertex 31.89290522410566 191.58666399028382 600.7313708498987 + endloop +endfacet +facet normal -0.527202862365693 -0.3043807145043661 -0.7933533402912171 + outer loop + vertex 31.60592965001994 191.42097856533462 600.9856406460553 + vertex 181.89290522410496 -68.22095714504681 600.7313708498986 + vertex 181.60592965001933 -68.38664256999607 600.9856406460552 + endloop +endfacet +facet normal -0.527202862365633 -0.3043807145043991 0.7933533402912443 + outer loop + vertex 31.605929650019924 191.42097856533474 598.214359353945 + vertex 181.89290522410494 -68.22095714504667 598.4686291501016 + vertex 31.892905224105633 191.58666399028394 598.4686291501016 + endloop +endfacet +facet normal -0.527202862365633 -0.3043807145043991 0.7933533402912443 + outer loop + vertex 181.89290522410494 -68.22095714504667 598.4686291501016 + vertex 31.605929650019924 191.42097856533474 598.214359353945 + vertex 181.60592965001928 -68.38664256999598 598.2143593539449 + endloop +endfacet +facet normal -0.11303899832183627 -0.06526309610999989 -0.9914448613738097 + outer loop + vertex 181.27173951585894 -68.57958733391399 601.1454813220626 + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + vertex 31.27173951585965 191.2280338014166 601.1454813220627 + endloop +endfacet +facet normal -0.11303899832183627 -0.06526309610999989 -0.9914448613738097 + outer loop + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + vertex 181.27173951585894 -68.57958733391399 601.1454813220626 + vertex 180.91310932699167 -68.78664256999602 601.2 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 180.2202890039642 -69.18664256999611 600.9856406460552 + vertex 29.933313429879142 190.45529314038532 600.7313708498986 + vertex 30.22028900396488 190.62097856533453 600.9856406460553 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 29.933313429879142 190.45529314038532 600.7313708498986 + vertex 180.2202890039642 -69.18664256999611 600.9856406460552 + vertex 179.93331342987847 -69.35232799494533 600.7313708498986 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 29.933313429879142 190.45529314038532 600.7313708498986 + vertex 179.71310932699174 -69.47946289302364 600.4000000000001 + vertex 29.713109326992434 190.32815824230704 600.4000000000002 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 179.71310932699174 -69.47946289302364 600.4000000000001 + vertex 29.933313429879142 190.45529314038532 600.7313708498986 + vertex 179.93331342987847 -69.35232799494533 600.7313708498986 + endloop +endfacet +facet normal -0.6870641468694484 -0.3966766701456766 0.6087614290086841 + outer loop + vertex 181.89290522410494 -68.22095714504667 598.4686291501016 + vertex 32.113109326992365 191.71379888836222 598.8000000000002 + vertex 31.892905224105633 191.58666399028394 598.4686291501016 + endloop +endfacet +facet normal -0.6870641468694484 -0.3966766701456766 0.6087614290086841 + outer loop + vertex 32.113109326992365 191.71379888836222 598.8000000000002 + vertex 181.89290522410494 -68.22095714504667 598.4686291501016 + vertex 182.11310932699166 -68.09382224696837 598.8000000000001 + endloop +endfacet +facet normal -0.33141357403558597 -0.19134171618259363 0.9238795325112787 + outer loop + vertex 31.2717395158596 191.2280338014167 598.0545186779377 + vertex 181.60592965001928 -68.38664256999598 598.2143593539449 + vertex 31.605929650019924 191.42097856533474 598.214359353945 + endloop +endfacet +facet normal -0.33141357403558597 -0.19134171618259363 0.9238795325112787 + outer loop + vertex 181.60592965001928 -68.38664256999598 598.2143593539449 + vertex 31.2717395158596 191.2280338014167 598.0545186779377 + vertex 181.27173951585888 -68.57958733391395 598.0545186779376 + endloop +endfacet +facet normal 0.5272028623656606 0.30438071450435294 0.7933533402912438 + outer loop + vertex 29.933313429879124 190.45529314038538 598.4686291501016 + vertex 180.22028900396415 -69.18664256999598 598.2143593539449 + vertex 30.220289003964815 190.62097856533464 598.214359353945 + endloop +endfacet +facet normal 0.5272028623656606 0.30438071450435294 0.7933533402912438 + outer loop + vertex 180.22028900396415 -69.18664256999598 598.2143593539449 + vertex 29.933313429879124 190.45529314038538 598.4686291501016 + vertex 179.9333134298784 -69.35232799494524 598.4686291501016 + endloop +endfacet +facet normal -0.8001031451912352 -0.46193976625567895 0.38268343236511054 + outer loop + vertex 32.113109326992365 191.71379888836222 598.8000000000002 + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + vertex 32.251535412972856 191.79371922636597 599.1858895278361 + endloop +endfacet +facet normal -0.8001031451912352 -0.46193976625567895 0.38268343236511054 + outer loop + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + vertex 32.113109326992365 191.71379888836222 598.8000000000002 + vertex 182.11310932699166 -68.09382224696837 598.8000000000001 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 32.25153541297286 191.7937192263659 600.0141104721642 + vertex 182.1131093269917 -68.09382224696841 600.4000000000001 + vertex 32.11310932699237 191.71379888836222 600.4000000000002 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 182.1131093269917 -68.09382224696841 600.4000000000001 + vertex 32.25153541297286 191.7937192263659 600.0141104721642 + vertex 182.25153541297223 -68.01390190896478 600.0141104721641 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 30.22028900396512 190.62097856533418 613.814359353945 + vertex 180.5544791381248 -68.9936978060785 613.6545186779375 + vertex 30.554479138125426 190.81392332925216 613.6545186779376 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 180.5544791381248 -68.9936978060785 613.6545186779375 + vertex 30.22028900396512 190.62097856533418 613.814359353945 + vertex 180.2202890039644 -69.18664256999648 613.814359353945 + endloop +endfacet +facet normal 0.6870641468694512 0.39667667014562186 0.6087614290087167 + outer loop + vertex 179.71310932699174 -69.4794628930236 598.8000000000001 + vertex 29.933313429879124 190.45529314038538 598.4686291501016 + vertex 29.713109326992388 190.32815824230707 598.8000000000002 + endloop +endfacet +facet normal 0.6870641468694512 0.39667667014562186 0.6087614290087167 + outer loop + vertex 29.933313429879124 190.45529314038538 598.4686291501016 + vertex 179.71310932699174 -69.4794628930236 598.8000000000001 + vertex 179.9333134298784 -69.35232799494524 598.4686291501016 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + vertex 181.27173951585888 -68.57958733391395 598.0545186779376 + vertex 31.2717395158596 191.2280338014167 598.0545186779377 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 181.27173951585888 -68.57958733391395 598.0545186779376 + vertex 30.91310932699238 191.0209785653347 598.0000000000001 + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + endloop +endfacet +facet normal -0.33141357403558147 -0.19134171618251217 -0.9238795325112973 + outer loop + vertex 181.60592965001933 -68.38664256999607 600.9856406460552 + vertex 31.27173951585965 191.2280338014166 601.1454813220627 + vertex 31.60592965001994 191.42097856533462 600.9856406460553 + endloop +endfacet +facet normal -0.33141357403558147 -0.19134171618251217 -0.9238795325112973 + outer loop + vertex 31.27173951585965 191.2280338014166 601.1454813220627 + vertex 181.60592965001933 -68.38664256999607 600.9856406460552 + vertex 181.27173951585894 -68.57958733391399 601.1454813220626 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 180.55447913812455 -68.99369780607815 601.1454813220626 + vertex 30.22028900396488 190.62097856533453 600.9856406460553 + vertex 30.554479138125185 190.81392332925253 601.1454813220627 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 30.22028900396488 190.62097856533453 600.9856406460553 + vertex 180.55447913812455 -68.99369780607815 601.1454813220626 + vertex 180.2202890039642 -69.18664256999611 600.9856406460552 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006204 + outer loop + vertex 32.298749973047464 191.82097856533466 599.6000000000001 + vertex 182.25153541297223 -68.01390190896478 600.0141104721641 + vertex 32.25153541297286 191.7937192263659 600.0141104721642 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006204 + outer loop + vertex 182.25153541297223 -68.01390190896478 600.0141104721641 + vertex 32.298749973047464 191.82097856533466 599.6000000000001 + vertex 182.29874997304677 -67.98664256999594 599.6 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 180.91310932699167 -68.78664256999602 601.2 + vertex 30.554479138125185 190.81392332925253 601.1454813220627 + vertex 30.913109326992416 191.02097856533453 601.2000000000002 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 30.554479138125185 190.81392332925253 601.1454813220627 + vertex 180.91310932699167 -68.78664256999602 601.2 + vertex 180.55447913812455 -68.99369780607815 601.1454813220626 + endloop +endfacet +facet normal 0.8586164364012415 0.49572243068693805 0.1305261922200554 + outer loop + vertex 182.7888561152711 -67.70367965685196 616.6588190451026 + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 32.788856115271805 192.1039414784787 616.6588190451026 + endloop +endfacet +facet normal 0.8586164364012415 0.49572243068693805 0.1305261922200554 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 182.7888561152711 -67.70367965685196 616.6588190451026 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 1.5003536199769238e-15 + outer loop + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 182.8183652153177 -67.68664256999637 611.2 + vertex 32.81836521531833 192.12097856533435 611.2000000000002 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 1.5003536199769238e-15 + outer loop + vertex 182.8183652153177 -67.68664256999637 611.2 + vertex 32.81836521531845 192.12097856533418 616.4000000000001 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -4.4649600931051686e-15 + outer loop + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 32.471955053804564 191.92097856533434 610.8000000000002 + vertex 32.47195505380457 191.92097856533434 611.2000000000002 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -4.4649600931051686e-15 + outer loop + vertex 32.471955053804564 191.92097856533434 610.8000000000002 + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 182.47195505380387 -67.88664256999627 610.8000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 29.497751387223563 190.20382127780877 613.0000000000002 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 29.497751387223563 190.20382127780877 613.0000000000002 + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + endloop +endfacet +facet normal 0.8001031451912567 0.46193976625566885 0.3826834323650779 + outer loop + vertex 182.7023398115333 -67.75362986810428 616.9 + vertex 32.788856115271805 192.1039414784787 616.6588190451026 + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + endloop +endfacet +facet normal 0.8001031451912567 0.46193976625566885 0.3826834323650779 + outer loop + vertex 32.788856115271805 192.1039414784787 616.6588190451026 + vertex 182.7023398115333 -67.75362986810428 616.9 + vertex 182.7888561152711 -67.70367965685196 616.6588190451026 + endloop +endfacet +facet normal 0.6123724356957727 0.35355339059330715 -0.7071067811865499 + outer loop + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 29.497751387223563 190.20382127780877 613.0000000000002 + endloop +endfacet +facet normal 0.6123724356957727 0.35355339059330715 -0.7071067811865499 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + endloop +endfacet +facet normal -3.27323874590727e-14 2.2585965780328042e-14 -1.0 + outer loop + vertex 182.47195505380387 -67.88664256999627 610.8000000000001 + vertex 31.25951948850635 191.2209785653343 610.8000000000002 + vertex 32.471955053804564 191.92097856533434 610.8000000000002 + endloop +endfacet +facet normal -3.27323874590727e-14 2.2585965780328042e-14 -1.0 + outer loop + vertex 31.25951948850635 191.2209785653343 610.8000000000002 + vertex 182.47195505380387 -67.88664256999627 610.8000000000001 + vertex 181.25951948850567 -68.58664256999634 610.8000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 182.8183652153177 -67.68664256999637 611.2 + vertex 32.47195505380457 191.92097856533434 611.2000000000002 + vertex 32.81836521531833 192.12097856533435 611.2000000000002 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 32.47195505380457 191.92097856533434 611.2000000000002 + vertex 182.8183652153177 -67.68664256999637 611.2 + vertex 182.47195505380387 -67.88664256999631 611.2 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 31.25951948850635 191.2209785653343 610.8000000000002 + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 31.259519488506385 191.22097856533424 613.0000000000002 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 31.25951948850635 191.2209785653343 610.8000000000002 + vertex 181.25951948850567 -68.58664256999634 610.8000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -1.0524654334828364e-15 + outer loop + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 27.362405171476308 188.97097856533438 604.2656854249494 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -1.0524654334828364e-15 + outer loop + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 27.362405171476443 188.97097856533418 610.5343145750509 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 15.497857139629588 182.12097856533424 598.4000000000002 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 165.497857139629 -77.68664256999662 603.6 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 165.84426730114285 -77.48664256999662 603.6 + vertex 15.844267301143471 182.3209785653341 603.6000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 165.84426730114285 -77.48664256999662 603.6 + vertex 15.497857139629684 182.12097856533407 603.6000000000001 + vertex 165.497857139629 -77.68664256999662 603.6 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.7394170869210435e-15 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.7394170869210435e-15 + outer loop + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 15.844267301143471 182.32097856533406 604.0000000000001 + vertex 167.056702866441 -76.78664256999654 604.0000000000001 + vertex 17.056702866441686 183.0209785653341 604.0000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 167.056702866441 -76.78664256999654 604.0000000000001 + vertex 15.844267301143471 182.32097856533406 604.0000000000001 + vertex 165.84426730114282 -77.48664256999658 604.0000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 168.818470967724 -75.76948528247138 613.0 + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + vertex 168.818470967724 -75.76948528247138 613.0 + vertex 167.05670286644116 -76.78664256999681 613.0 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 17.056702866441796 183.02097856533388 610.8000000000002 + vertex 17.056702866441864 183.02097856533382 613.0000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 17.056702866441796 183.02097856533388 610.8000000000002 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 167.0567028664411 -76.78664256999677 610.8000000000001 + endloop +endfacet +facet normal -3.2732387459072867e-14 2.2585965780327947e-14 -1.0 + outer loop + vertex 167.0567028664411 -76.78664256999677 610.8000000000001 + vertex 15.844267301143587 182.32097856533386 610.8000000000002 + vertex 17.056702866441796 183.02097856533388 610.8000000000002 + endloop +endfacet +facet normal -3.2732387459072867e-14 2.2585965780327947e-14 -1.0 + outer loop + vertex 15.844267301143587 182.32097856533386 610.8000000000002 + vertex 167.0567028664411 -76.78664256999677 610.8000000000001 + vertex 165.8442673011429 -77.4866425699968 610.8000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + vertex 168.81847096772384 -75.76948528247111 601.8000000000001 + vertex 18.81847096772448 184.03813585285957 601.8000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 168.81847096772384 -75.76948528247111 601.8000000000001 + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + endloop +endfacet +facet normal -0.6123724356957727 -0.35355339059330715 0.7071067811865499 + outer loop + vertex 18.81847096772448 184.03813585285957 601.8000000000001 + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 20.953817183471575 185.2709785653342 604.2656854249494 + endloop +endfacet +facet normal -0.6123724356957727 -0.35355339059330715 0.7071067811865499 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 18.81847096772448 184.03813585285957 601.8000000000001 + vertex 168.81847096772384 -75.76948528247111 601.8000000000001 + endloop +endfacet +facet normal -0.6123724356957975 -0.35355339059327634 -0.7071067811865437 + outer loop + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 168.818470967724 -75.76948528247138 613.0 + vertex 18.818470967724718 184.03813585285926 613.0000000000001 + endloop +endfacet +facet normal -0.6123724356957975 -0.35355339059327634 -0.7071067811865437 + outer loop + vertex 168.818470967724 -75.76948528247138 613.0 + vertex 20.953817183471706 185.270978565334 610.5343145750509 + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.844267301143587 182.32097856533386 610.8000000000002 + vertex 165.8442673011429 -77.48664256999685 611.2 + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.8442673011429 -77.48664256999685 611.2 + vertex 15.844267301143587 182.32097856533386 610.8000000000002 + vertex 165.8442673011429 -77.4866425699968 610.8000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 165.8442673011429 -77.48664256999685 611.2 + vertex 15.497857139629847 182.12097856533381 611.2000000000002 + vertex 15.844267301143587 182.32097856533386 611.2000000000002 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 15.497857139629847 182.12097856533381 611.2000000000002 + vertex 165.8442673011429 -77.48664256999685 611.2 + vertex 165.49785713962922 -77.68664256999683 611.2 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.84426730114285 -77.48664256999662 603.6 + vertex 15.844267301143471 182.32097856533406 604.0000000000001 + vertex 15.844267301143471 182.3209785653341 603.6000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.844267301143471 182.32097856533406 604.0000000000001 + vertex 165.84426730114285 -77.48664256999662 603.6 + vertex 165.84426730114282 -77.48664256999658 604.0000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 17.056702866441686 183.0209785653341 604.0000000000001 + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + vertex 17.05670286644162 183.02097856533416 601.8000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + vertex 17.056702866441686 183.0209785653341 604.0000000000001 + vertex 167.056702866441 -76.78664256999654 604.0000000000001 + endloop +endfacet +facet normal -0.6870641468694316 -0.39667667014565006 0.6087614290087203 + outer loop + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + endloop +endfacet +facet normal -0.6870641468694316 -0.39667667014565006 0.6087614290087203 + outer loop + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 165.75151010771788 -77.54019596059021 617.1071067811866 + endloop +endfacet +facet normal -0.3314135740355606 -0.1913417161825818 0.9238795325112903 + outer loop + vertex 15.930869841522176 182.37097856533364 617.2660254037846 + vertex 166.1397386753717 -77.31605209254826 617.3659258262891 + vertex 16.13973867537238 182.4915690427824 617.3659258262892 + endloop +endfacet +facet normal -0.3314135740355606 -0.1913417161825818 0.9238795325112903 + outer loop + vertex 166.1397386753717 -77.31605209254826 617.3659258262891 + vertex 15.930869841522176 182.37097856533364 617.2660254037846 + vertex 165.93086984152154 -77.43664256999703 617.2660254037845 + endloop +endfacet +facet normal -0.11303899832181276 -0.06526309611007224 0.9914448613738078 + outer loop + vertex 16.13973867537238 182.4915690427824 617.3659258262892 + vertex 166.3638825434137 -77.186642569997 617.4000000000001 + vertex 16.363882543414398 182.62097856533364 617.4000000000002 + endloop +endfacet +facet normal -0.11303899832181276 -0.06526309611007224 0.9914448613738078 + outer loop + vertex 166.3638825434137 -77.186642569997 617.4000000000001 + vertex 16.13973867537238 182.4915690427824 617.3659258262892 + vertex 166.1397386753717 -77.31605209254826 617.3659258262891 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 16.363882543414398 182.62097856533364 617.4000000000002 + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 20.86721464309339 185.22097856533378 617.4000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 16.363882543414398 182.62097856533364 617.4000000000002 + vertex 166.3638825434137 -77.186642569997 617.4000000000001 + endloop +endfacet +facet normal -0.5272028623656286 -0.3043807145043965 0.7933533402912483 + outer loop + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + vertex 165.93086984152154 -77.43664256999703 617.2660254037845 + vertex 15.930869841522176 182.37097856533364 617.2660254037846 + endloop +endfacet +facet normal -0.5272028623656286 -0.3043807145043965 0.7933533402912483 + outer loop + vertex 165.93086984152154 -77.43664256999703 617.2660254037845 + vertex 15.751510107718625 182.26742517474034 617.1071067811868 + vertex 165.75151010771788 -77.54019596059021 617.1071067811866 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.497857139629847 182.12097856533381 611.2000000000002 + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 15.497857139629847 182.12097856533381 611.2000000000002 + vertex 165.49785713962922 -77.68664256999683 611.2 + endloop +endfacet +facet normal -0.8001031451912507 -0.4619397662556767 0.3826834323650808 + outer loop + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 15.613882543414398 182.18796586344143 616.9000000000001 + endloop +endfacet +facet normal -0.8001031451912507 -0.4619397662556767 0.3826834323650808 + outer loop + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + vertex 165.52736623967584 -77.66960548314148 616.6588190451026 + endloop +endfacet +facet normal -0.8586164364012412 -0.4957224306869379 0.1305261922200573 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + vertex 15.497857139629923 182.1209785653337 616.4000000000001 + endloop +endfacet +facet normal -0.8586164364012412 -0.4957224306869379 0.1305261922200573 + outer loop + vertex 15.527366239676597 182.1380156521891 616.6588190451026 + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 165.52736623967584 -77.66960548314148 616.6588190451026 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + vertex 170.86721464309267 -74.58664256999687 617.0000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 169.30836891628067 -75.48664256999685 615.6 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + vertex 20.86721464309339 185.22097856533378 617.4000000000002 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 20.867214643093394 185.2209785653338 617.0000000000002 + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 170.86721464309267 -74.58664256999687 617.0000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 171.21362480460644 -74.38664256999678 615.6 + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 21.21362480460709 185.42097856533385 615.6000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 19.308368916281395 184.3209785653338 615.6000000000001 + vertex 171.21362480460644 -74.38664256999678 615.6 + vertex 169.30836891628067 -75.48664256999685 615.6 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + vertex 176.8725072229191 -71.11948528247113 611.1 + vertex 26.872507222919793 188.6881358528595 611.1000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 176.8725072229191 -71.11948528247113 611.1 + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + vertex 171.4437151320277 -74.25379985752207 611.1 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -8.99704908291417e-15 + outer loop + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 171.21362480460644 -74.38664256999678 615.6 + vertex 21.21362480460709 185.42097856533385 615.6000000000001 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -8.99704908291417e-15 + outer loop + vertex 171.21362480460644 -74.38664256999678 615.6 + vertex 21.21362480460716 185.4209785653338 617.0000000000002 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + endloop +endfacet +facet normal 0.6123724356957947 0.35355339059327473 0.707106781186547 + outer loop + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 171.4437151320277 -74.25379985752207 611.1 + vertex 21.443715132028345 185.5538212778086 611.1000000000001 + endloop +endfacet +facet normal 0.6123724356957947 0.35355339059327473 0.707106781186547 + outer loop + vertex 171.4437151320277 -74.25379985752207 611.1 + vertex 19.30836891628135 184.32097856533386 613.5656854249494 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + endloop +endfacet +facet normal -0.6123724356957676 -0.3535533905933155 0.70710678118655 + outer loop + vertex 26.872507222919793 188.6881358528595 611.1000000000001 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + endloop +endfacet +facet normal -0.6123724356957676 -0.3535533905933155 0.70710678118655 + outer loop + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 26.872507222919793 188.6881358528595 611.1000000000001 + vertex 176.8725072229191 -71.11948528247113 611.1 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 27.102597550341205 188.82097856533403 615.6000000000001 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 27.102597550341205 188.82097856533403 615.6000000000001 + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 177.1025975503406 -70.98664256999665 615.6 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.611827415552657e-14 + outer loop + vertex 177.1025975503406 -70.98664256999665 615.6 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 27.102597550341205 188.82097856533403 615.6000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.611827415552657e-14 + outer loop + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 177.1025975503406 -70.98664256999665 615.6 + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 29.007853438666945 189.92097856533408 615.6000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 29.0078534386669 189.9209785653341 613.5656854249494 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + vertex 27.449007711855035 189.020978565334 617.0000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + vertex 27.102597550341276 188.820978565334 617.0000000000002 + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.4649600931051686e-15 + outer loop + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 27.449007711855035 189.020978565334 617.0000000000002 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.4649600931051686e-15 + outer loop + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + vertex 177.44900771185436 -70.78664256999664 617.4000000000001 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 181.9523398115334 -68.18664256999656 617.4 + vertex 31.952339811534035 191.62097856533413 617.4000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 181.9523398115334 -68.18664256999656 617.4 + vertex 27.44900771185507 189.020978565334 617.4000000000002 + vertex 177.44900771185436 -70.78664256999664 617.4000000000001 + endloop +endfacet +facet normal 0.11303899832185176 0.06526309611000743 0.9914448613738075 + outer loop + vertex 31.952339811534035 191.62097856533413 617.4000000000002 + vertex 182.17648367957543 -68.0572330474453 617.3659258262891 + vertex 32.17648367957604 191.7503880878854 617.3659258262892 + endloop +endfacet +facet normal 0.11303899832185176 0.06526309611000743 0.9914448613738075 + outer loop + vertex 182.17648367957543 -68.0572330474453 617.3659258262891 + vertex 31.952339811534035 191.62097856533413 617.4000000000002 + vertex 181.9523398115334 -68.18664256999656 617.4 + endloop +endfacet +facet normal 0.3314135740355972 0.19134171618252124 0.9238795325112898 + outer loop + vertex 32.17648367957604 191.7503880878854 617.3659258262892 + vertex 182.38535251342552 -67.9366425699965 617.2660254037845 + vertex 32.38535251342622 191.87097856533413 617.2660254037846 + endloop +endfacet +facet normal 0.3314135740355972 0.19134171618252124 0.9238795325112898 + outer loop + vertex 182.38535251342552 -67.9366425699965 617.2660254037845 + vertex 32.17648367957604 191.7503880878854 617.3659258262892 + vertex 182.17648367957543 -68.0572330474453 617.3659258262891 + endloop +endfacet +facet normal 0.5272028623656612 0.304380714504342 0.7933533402912476 + outer loop + vertex 32.38535251342622 191.87097856533413 617.2660254037846 + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 32.5647122472298 191.97453195592743 617.1071067811868 + endloop +endfacet +facet normal 0.5272028623656612 0.304380714504342 0.7933533402912476 + outer loop + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 32.38535251342622 191.87097856533413 617.2660254037846 + vertex 182.38535251342552 -67.9366425699965 617.2660254037845 + endloop +endfacet +facet normal 0.6870641468694547 0.3966766701456183 0.6087614290087151 + outer loop + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + vertex 32.5647122472298 191.97453195592743 617.1071067811868 + endloop +endfacet +facet normal 0.6870641468694547 0.3966766701456183 0.6087614290087151 + outer loop + vertex 32.702339811533996 192.05399126722637 616.9000000000001 + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 182.7023398115333 -67.75362986810428 616.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 182.8183652153177 -67.68664256999637 611.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 182.25153541297243 -68.0139019089652 614.785889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 182.25153541297243 -68.0139019089652 614.785889527836 + vertex 182.11310932699195 -68.09382224696891 614.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 182.11310932699195 -68.09382224696891 614.4000000000001 + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 182.11310932699195 -68.09382224696891 614.4000000000001 + vertex 181.8929052241052 -68.22095714504717 614.0686291501016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 181.8929052241052 -68.22095714504717 614.0686291501016 + vertex 181.60592965001956 -68.38664256999643 613.814359353945 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 181.60592965001956 -68.38664256999643 613.814359353945 + vertex 181.2717395158592 -68.5795873339144 613.6545186779375 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + vertex 181.2717395158592 -68.5795873339144 613.6545186779375 + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + vertex 181.2717395158592 -68.5795873339144 613.6545186779375 + vertex 180.913109326992 -68.78664256999643 613.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + vertex 180.913109326992 -68.78664256999643 613.6 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.25153541297243 -68.0139019089652 614.785889527836 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 182.29874997304705 -67.98664256999643 615.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.29874997304705 -67.98664256999643 615.2 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 182.2515354129725 -68.01390190896524 615.6141104721642 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.2515354129725 -68.01390190896524 615.6141104721642 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 182.11310932699195 -68.09382224696891 616.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.11310932699195 -68.09382224696891 616.0 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 181.8929052241053 -68.22095714504731 616.3313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.8929052241053 -68.22095714504731 616.3313708498986 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 181.60592965001953 -68.38664256999647 616.5856406460551 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001953 -68.38664256999647 616.5856406460551 + vertex 182.81836521531775 -67.6866425699965 616.4000000000001 + vertex 182.7888561152711 -67.70367965685196 616.6588190451026 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001953 -68.38664256999647 616.5856406460551 + vertex 182.7888561152711 -67.70367965685196 616.6588190451026 + vertex 181.27173951585922 -68.57958733391453 616.7454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585922 -68.57958733391453 616.7454813220626 + vertex 182.7888561152711 -67.70367965685196 616.6588190451026 + vertex 182.7023398115333 -67.75362986810428 616.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585922 -68.57958733391453 616.7454813220626 + vertex 182.7023398115333 -67.75362986810428 616.9 + vertex 180.91310932699201 -68.78664256999652 616.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + vertex 182.7023398115333 -67.75362986810428 616.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 177.44900771185436 -70.78664256999664 617.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185436 -70.78664256999664 617.4000000000001 + vertex 182.56471224722918 -67.83308917940327 617.1071067811866 + vertex 182.38535251342552 -67.9366425699965 617.2660254037845 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185436 -70.78664256999664 617.4000000000001 + vertex 182.38535251342552 -67.9366425699965 617.2660254037845 + vertex 182.17648367957543 -68.0572330474453 617.3659258262891 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185436 -70.78664256999664 617.4000000000001 + vertex 182.17648367957543 -68.0572330474453 617.3659258262891 + vertex 181.9523398115334 -68.18664256999656 617.4 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 179.713109326992 -69.47946289302408 614.4000000000001 + vertex 179.00785343866627 -69.88664256999658 615.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.713109326992 -69.47946289302408 614.4000000000001 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 179.93331342987872 -69.35232799494572 614.0686291501015 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.93331342987872 -69.35232799494572 614.0686291501015 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 180.2202890039644 -69.18664256999648 613.814359353945 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.2202890039644 -69.18664256999648 613.814359353945 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 180.5544791381248 -68.9936978060785 613.6545186779375 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.5544791381248 -68.9936978060785 613.6545186779375 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + vertex 180.913109326992 -68.78664256999643 613.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 179.713109326992 -69.47946289302408 614.4000000000001 + vertex 179.5746832410115 -69.55938323102781 614.785889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 179.5746832410115 -69.55938323102781 614.785889527836 + vertex 179.52746868093686 -69.58664256999651 615.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 179.52746868093686 -69.58664256999651 615.2 + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866627 -69.88664256999658 615.6 + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 177.1025975503406 -70.98664256999665 615.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 615.6 + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 179.57468324101148 -69.55938323102781 615.6141104721642 + vertex 179.713109326992 -69.47946289302403 616.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 179.713109326992 -69.47946289302403 616.0 + vertex 179.93331342987875 -69.35232799494582 616.3313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 179.93331342987875 -69.35232799494582 616.3313708498986 + vertex 180.22028900396444 -69.18664256999656 616.5856406460551 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 180.22028900396444 -69.18664256999656 616.5856406460551 + vertex 180.55447913812478 -68.99369780607854 616.7454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 180.55447913812478 -68.99369780607854 616.7454813220626 + vertex 180.91310932699201 -68.78664256999652 616.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 180.91310932699201 -68.78664256999652 616.8000000000001 + vertex 182.7023398115333 -67.75362986810428 616.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 617.0000000000001 + vertex 182.7023398115333 -67.75362986810428 616.9 + vertex 177.44900771185436 -70.78664256999664 617.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 171.2136248046061 -74.38664256999624 597.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 167.76174321682183 -76.37958733391434 598.0545186779375 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 167.76174321682183 -76.37958733391434 598.0545186779375 + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682183 -76.37958733391434 598.0545186779375 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 168.0959333509822 -76.18664256999637 598.2143593539449 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.0959333509822 -76.18664256999637 598.2143593539449 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 168.38290892506788 -76.0209571450471 598.4686291501016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.38290892506788 -76.0209571450471 598.4686291501016 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 168.60311302795463 -75.89382224696875 598.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795463 -75.89382224696875 598.8000000000001 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 168.7415391139352 -75.81390190896514 599.185889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139352 -75.81390190896514 599.185889527836 + vertex 171.21362480460616 -74.38664256999633 599.2 + vertex 169.30836891628041 -75.48664256999639 599.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139352 -75.81390190896514 599.185889527836 + vertex 169.30836891628041 -75.48664256999639 599.2 + vertex 168.7887536740098 -75.78664256999642 599.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7887536740098 -75.78664256999642 599.6 + vertex 169.30836891628041 -75.48664256999639 599.2 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7887536740098 -75.78664256999642 599.6 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 168.7415391139352 -75.81390190896518 600.0141104721641 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139352 -75.81390190896518 600.0141104721641 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 168.60311302795472 -75.8938222469689 600.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795472 -75.8938222469689 600.4000000000001 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 168.38290892506797 -76.02095714504716 600.7313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.38290892506797 -76.02095714504716 600.7313708498986 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 168.09593335098222 -76.18664256999647 600.9856406460551 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.09593335098222 -76.18664256999647 600.9856406460551 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 167.76174321682188 -76.37958733391439 601.1454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682188 -76.37958733391439 601.1454813220626 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 167.40311302795465 -76.58664256999641 601.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.056702866441 -76.78664256999654 604.0000000000001 + vertex 165.84426730114285 -77.48664256999662 603.6 + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.84426730114285 -77.48664256999662 603.6 + vertex 167.056702866441 -76.78664256999654 604.0000000000001 + vertex 165.84426730114282 -77.48664256999658 604.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + vertex 165.52736623967553 -77.66960548314098 598.1411809548975 + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967553 -77.66960548314098 598.1411809548975 + vertex 167.40311302795465 -76.58664256999637 598.0000000000001 + vertex 167.04448283908746 -76.79369780607836 598.0545186779375 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967553 -77.66960548314098 598.1411809548975 + vertex 167.04448283908746 -76.79369780607836 598.0545186779375 + vertex 166.71029270492707 -76.98664256999636 598.2143593539449 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967553 -77.66960548314098 598.1411809548975 + vertex 166.71029270492707 -76.98664256999636 598.2143593539449 + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 166.71029270492707 -76.98664256999636 598.2143593539449 + vertex 166.42331713084138 -77.15232799494558 598.4686291501016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 166.42331713084138 -77.15232799494558 598.4686291501016 + vertex 166.20311302795469 -77.27946289302398 598.8 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 166.20311302795469 -77.27946289302398 598.8 + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962896 -77.68664256999648 598.4000000000001 + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + vertex 165.497857139629 -77.68664256999662 603.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 166.06468694197423 -77.35938323102775 599.185889527836 + vertex 166.01747238189964 -77.38664256999651 599.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 166.01747238189964 -77.38664256999651 599.6 + vertex 166.06468694197423 -77.35938323102775 600.014110472164 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 166.06468694197423 -77.35938323102775 600.014110472164 + vertex 166.20311302795469 -77.27946289302402 600.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 166.20311302795469 -77.27946289302402 600.4000000000001 + vertex 166.42331713084147 -77.15232799494576 600.7313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 166.42331713084147 -77.15232799494576 600.7313708498986 + vertex 166.71029270492716 -76.98664256999646 600.9856406460551 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 166.71029270492716 -76.98664256999646 600.9856406460551 + vertex 167.04448283908746 -76.79369780607848 601.1454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 167.04448283908746 -76.79369780607848 601.1454813220626 + vertex 167.40311302795465 -76.58664256999641 601.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 167.40311302795465 -76.58664256999641 601.2 + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + vertex 167.40311302795465 -76.58664256999641 601.2 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + vertex 168.81847096772384 -75.76948528247111 601.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.497857139629 -77.68664256999662 603.6 + vertex 167.05670286644096 -76.78664256999646 601.8000000000001 + vertex 165.84426730114285 -77.48664256999662 603.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.5274686809366 -69.58664256999607 599.6 + vertex 179.00785343866596 -69.88664256999604 599.2 + vertex 179.57468324101123 -69.55938323102731 599.185889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866596 -69.88664256999604 599.2 + vertex 179.5274686809366 -69.58664256999607 599.6 + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 179.5274686809366 -69.58664256999607 599.6 + vertex 179.57468324101123 -69.55938323102735 600.0141104721641 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 179.57468324101123 -69.55938323102735 600.0141104721641 + vertex 179.71310932699174 -69.47946289302364 600.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 179.71310932699174 -69.47946289302364 600.4000000000001 + vertex 179.93331342987847 -69.35232799494533 600.7313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 179.93331342987847 -69.35232799494533 600.7313708498986 + vertex 180.2202890039642 -69.18664256999611 600.9856406460552 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 180.2202890039642 -69.18664256999611 600.9856406460552 + vertex 180.55447913812455 -68.99369780607815 601.1454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 180.55447913812455 -68.99369780607815 601.1454813220626 + vertex 180.91310932699167 -68.78664256999602 601.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.176483679575 -68.05723304744467 597.434074173711 + vertex 177.44900771185397 -70.7866425699961 597.4 + vertex 181.952339811533 -68.18664256999588 597.4 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185397 -70.7866425699961 597.4 + vertex 182.176483679575 -68.05723304744467 597.434074173711 + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + vertex 182.176483679575 -68.05723304744467 597.434074173711 + vertex 182.38535251342523 -67.93664256999594 597.5339745962156 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + vertex 182.38535251342523 -67.93664256999594 597.5339745962156 + vertex 182.5647122472288 -67.83308917940268 597.6928932188135 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + vertex 182.5647122472288 -67.83308917940268 597.6928932188135 + vertex 182.702339811533 -67.75362986810374 597.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185388 -70.78664256999606 597.8000000000001 + vertex 182.702339811533 -67.75362986810374 597.9 + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + vertex 182.702339811533 -67.75362986810374 597.9 + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + vertex 180.5544791381245 -68.993697806078 598.0545186779376 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699961 597.8000000000001 + vertex 180.5544791381245 -68.993697806078 598.0545186779376 + vertex 177.10259755034025 -70.9866425699961 599.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034025 -70.9866425699961 599.2 + vertex 180.5544791381245 -68.993697806078 598.0545186779376 + vertex 180.22028900396415 -69.18664256999598 598.2143593539449 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034025 -70.9866425699961 599.2 + vertex 180.22028900396415 -69.18664256999598 598.2143593539449 + vertex 179.9333134298784 -69.35232799494524 598.4686291501016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034025 -70.9866425699961 599.2 + vertex 179.9333134298784 -69.35232799494524 598.4686291501016 + vertex 179.71310932699174 -69.4794628930236 598.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034025 -70.9866425699961 599.2 + vertex 179.71310932699174 -69.4794628930236 598.8000000000001 + vertex 179.57468324101123 -69.55938323102731 599.185889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034025 -70.9866425699961 599.2 + vertex 179.57468324101123 -69.55938323102731 599.185889527836 + vertex 179.00785343866596 -69.88664256999604 599.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.86721464309238 -74.58664256999629 597.4 + vertex 166.13973867537132 -77.31605209254764 597.434074173711 + vertex 166.36388254341333 -77.18664256999637 597.4 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.13973867537132 -77.31605209254764 597.434074173711 + vertex 170.86721464309238 -74.58664256999629 597.4 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.13973867537132 -77.31605209254764 597.434074173711 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 165.93086984152112 -77.43664256999635 597.5339745962156 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.93086984152112 -77.43664256999635 597.5339745962156 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 165.75151010771754 -77.54019596058967 597.6928932188135 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.75151010771754 -77.54019596058967 597.6928932188135 + vertex 170.86721464309232 -74.58664256999629 597.8000000000001 + vertex 165.61388254341333 -77.61965527188865 597.9000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.78885611527082 -67.70367965685142 598.1411809548975 + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + vertex 182.702339811533 -67.75362986810374 597.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.91310932699176 -68.78664256999598 598.0000000000001 + vertex 182.78885611527082 -67.70367965685142 598.1411809548975 + vertex 181.27173951585888 -68.57958733391395 598.0545186779376 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585888 -68.57958733391395 598.0545186779376 + vertex 182.78885611527082 -67.70367965685142 598.1411809548975 + vertex 181.60592965001928 -68.38664256999598 598.2143593539449 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001928 -68.38664256999598 598.2143593539449 + vertex 182.78885611527082 -67.70367965685142 598.1411809548975 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001928 -68.38664256999598 598.2143593539449 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + vertex 181.89290522410494 -68.22095714504667 598.4686291501016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.89290522410494 -68.22095714504667 598.4686291501016 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + vertex 182.11310932699166 -68.09382224696837 598.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.11310932699166 -68.09382224696837 598.8000000000001 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + vertex 182.81836521531739 -67.68664256999595 598.4000000000001 + vertex 182.81836521531753 -67.68664256999614 603.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.25153541297217 -68.0139019089647 599.185889527836 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 182.29874997304677 -67.98664256999594 599.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.29874997304677 -67.98664256999594 599.6 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 182.25153541297223 -68.01390190896478 600.0141104721641 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.25153541297223 -68.01390190896478 600.0141104721641 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 182.1131093269917 -68.09382224696841 600.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.1131093269917 -68.09382224696841 600.4000000000001 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 181.89290522410496 -68.22095714504681 600.7313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.89290522410496 -68.22095714504681 600.7313708498986 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 181.60592965001933 -68.38664256999607 600.9856406460552 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001933 -68.38664256999607 600.9856406460552 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 181.27173951585894 -68.57958733391399 601.1454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585894 -68.57958733391399 601.1454813220626 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 180.91310932699167 -68.78664256999602 601.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.91310932699167 -68.78664256999602 601.2 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.91310932699167 -68.78664256999602 601.2 + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 182.81836521531753 -67.68664256999614 603.6 + vertex 182.47195505380378 -67.88664256999614 603.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + vertex 182.47195505380378 -67.88664256999614 603.6 + vertex 181.25951948850556 -68.58664256999616 604.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850556 -68.58664256999616 604.0000000000001 + vertex 182.47195505380378 -67.88664256999614 603.6 + vertex 182.47195505380373 -67.88664256999614 604.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 176.8725072229191 -71.11948528247113 611.1 + vertex 171.4437151320277 -74.25379985752207 611.1 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.8725072229191 -71.11948528247113 611.1 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.8725072229191 -71.11948528247113 611.1 + vertex 179.4977513872229 -69.60379985752186 613.0000000000001 + vertex 179.0078534386662 -69.8866425699965 613.5656854249493 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 181.25951948850567 -68.58664256999634 610.8000000000001 + vertex 182.47195505380387 -67.88664256999627 610.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850567 -68.58664256999634 610.8000000000001 + vertex 182.47195505380387 -67.88664256999631 611.2 + vertex 181.2595194885057 -68.58664256999639 613.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 174.76329962118672 -72.33723685910793 604.7920002690196 + vertex 174.15811117747327 -72.68664256999635 604.7 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 174.76329962118672 -72.33723685910793 604.7920002690196 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 175.32724547258226 -72.01164256999633 605.061731409782 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.32724547258226 -72.01164256999633 605.061731409782 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 175.81151675385192 -71.73204841539449 605.4908116907964 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.81151675385192 -71.73204841539449 605.4908116907964 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 176.1831111774733 -71.51750827488736 606.0500000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.1831111774733 -71.51750827488736 606.0500000000001 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 176.4167051975654 -71.38264270450611 606.7011885782233 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.4167051975654 -71.38264270450611 606.7011885782233 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.4167051975654 -71.38264270450611 606.7011885782233 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 176.49637976769128 -71.33664256999639 607.4 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.49637976769128 -71.33664256999639 607.4 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 176.41670519756536 -71.38264270450611 608.0988114217769 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.41670519756536 -71.38264270450611 608.0988114217769 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 176.18311117747334 -71.51750827488746 608.7500000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.18311117747334 -71.51750827488746 608.7500000000001 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 175.81151675385203 -71.73204841539467 609.3091883092037 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.81151675385203 -71.73204841539467 609.3091883092037 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 175.3272454725823 -72.01164256999647 609.738268590218 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.3272454725823 -72.01164256999647 609.738268590218 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 174.76329962118686 -72.33723685910816 610.0079997309805 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 174.76329962118686 -72.33723685910816 610.0079997309805 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 174.15811117747336 -72.68664256999658 610.1 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 174.15811117747336 -72.68664256999658 610.1 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 177.36240517147576 -70.83664256999646 610.5343145750509 + vertex 171.4437151320277 -74.25379985752207 611.1 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 171.4437151320277 -74.25379985752207 611.1 + vertex 168.818470967724 -75.76948528247138 613.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.818470967724 -75.76948528247138 613.0 + vertex 171.4437151320277 -74.25379985752207 611.1 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.818470967724 -75.76948528247138 613.0 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 167.05670286644116 -76.78664256999681 613.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 169.30836891628067 -75.48664256999685 615.6 + vertex 171.21362480460644 -74.38664256999678 615.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 169.30836891628067 -75.48664256999685 615.6 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 168.7415391139354 -75.81390190896563 615.6141104721642 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139354 -75.81390190896563 615.6141104721642 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 168.60311302795498 -75.89382224696925 616.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795498 -75.89382224696925 616.0 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 168.38290892506828 -76.0209571450477 616.3313708498986 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.38290892506828 -76.0209571450477 616.3313708498986 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 168.09593335098253 -76.1866425699969 616.5856406460551 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.09593335098253 -76.1866425699969 616.5856406460551 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 167.76174321682217 -76.37958733391493 616.7454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682217 -76.37958733391493 616.7454813220626 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 167.40311302795496 -76.58664256999695 616.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.40311302795496 -76.58664256999695 616.8000000000001 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 165.6138825434137 -77.6196552718892 616.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 171.21362480460647 -74.38664256999682 617.0000000000001 + vertex 170.86721464309267 -74.58664256999687 617.0000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 170.86721464309267 -74.58664256999687 617.0000000000001 + vertex 165.75151010771788 -77.54019596059021 617.1071067811866 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.75151010771788 -77.54019596059021 617.1071067811866 + vertex 170.86721464309267 -74.58664256999687 617.0000000000001 + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.75151010771788 -77.54019596059021 617.1071067811866 + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 165.93086984152154 -77.43664256999703 617.2660254037845 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.93086984152154 -77.43664256999703 617.2660254037845 + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 166.1397386753717 -77.31605209254826 617.3659258262891 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.1397386753717 -77.31605209254826 617.3659258262891 + vertex 170.86721464309272 -74.58664256999687 617.4000000000001 + vertex 166.3638825434137 -77.186642569997 617.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 165.8442673011429 -77.4866425699968 610.8000000000001 + vertex 167.0567028664411 -76.78664256999677 610.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.8442673011429 -77.4866425699968 610.8000000000001 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 165.8442673011429 -77.48664256999685 611.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.8442673011429 -77.48664256999685 611.2 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 165.49785713962922 -77.68664256999683 611.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999683 611.2 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 166.20311302795494 -77.27946289302439 614.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999683 611.2 + vertex 166.20311302795494 -77.27946289302439 614.4000000000001 + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999683 611.2 + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.20311302795494 -77.27946289302439 614.4000000000001 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 166.42331713084167 -77.15232799494612 614.0686291501015 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.42331713084167 -77.15232799494612 614.0686291501015 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 166.71029270492738 -76.98664256999686 613.814359353945 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.71029270492738 -76.98664256999686 613.814359353945 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 167.04448283908772 -76.7936978060789 613.6545186779375 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.04448283908772 -76.7936978060789 613.6545186779375 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 167.40311302795504 -76.58664256999687 613.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.40311302795504 -76.58664256999687 613.6 + vertex 167.05670286644116 -76.78664256999681 613.0 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 166.0646869419745 -77.35938323102815 614.785889527836 + vertex 166.01747238189986 -77.38664256999687 615.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 166.01747238189986 -77.38664256999687 615.2 + vertex 166.06468694197446 -77.35938323102819 615.6141104721642 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 166.06468694197446 -77.35938323102819 615.6141104721642 + vertex 166.203113027955 -77.27946289302443 616.0 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 166.203113027955 -77.27946289302443 616.0 + vertex 166.4233171308417 -77.15232799494622 616.3313708498985 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 166.4233171308417 -77.15232799494622 616.3313708498985 + vertex 166.71029270492744 -76.98664256999696 616.5856406460551 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396293 -77.68664256999702 616.4000000000001 + vertex 166.71029270492744 -76.98664256999696 616.5856406460551 + vertex 165.52736623967584 -77.66960548314148 616.6588190451026 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967584 -77.66960548314148 616.6588190451026 + vertex 166.71029270492744 -76.98664256999696 616.5856406460551 + vertex 167.0444828390878 -76.79369780607902 616.7454813220626 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967584 -77.66960548314148 616.6588190451026 + vertex 167.0444828390878 -76.79369780607902 616.7454813220626 + vertex 165.6138825434137 -77.6196552718892 616.9 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.6138825434137 -77.6196552718892 616.9 + vertex 167.0444828390878 -76.79369780607902 616.7454813220626 + vertex 167.40311302795496 -76.58664256999695 616.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 167.76174321682214 -76.37958733391474 613.6545186779375 + vertex 167.40311302795504 -76.58664256999687 613.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682214 -76.37958733391474 613.6545186779375 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 168.09593335098253 -76.18664256999686 613.814359353945 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.09593335098253 -76.18664256999686 613.814359353945 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 168.3829089250682 -76.02095714504752 614.0686291501016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.3829089250682 -76.02095714504752 614.0686291501016 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 168.60311302795495 -75.89382224696925 614.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795495 -75.89382224696925 614.4000000000001 + vertex 169.30836891628067 -75.4866425699968 613.5656854249493 + vertex 169.30836891628067 -75.48664256999685 615.6 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795495 -75.89382224696925 614.4000000000001 + vertex 169.30836891628067 -75.48664256999685 615.6 + vertex 168.7415391139355 -75.81390190896563 614.785889527836 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139355 -75.81390190896563 614.785889527836 + vertex 169.30836891628067 -75.48664256999685 615.6 + vertex 168.78875367401002 -75.78664256999677 615.2 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.78875367401002 -75.78664256999677 615.2 + vertex 169.30836891628067 -75.48664256999685 615.6 + vertex 168.7415391139354 -75.81390190896563 615.6141104721642 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 179.49775138722262 -69.60379985752151 601.8000000000001 + vertex 176.87250722291898 -71.11948528247086 603.7 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.49775138722262 -69.60379985752151 601.8000000000001 + vertex 179.00785343866602 -69.88664256999613 601.2343145750508 + vertex 181.25951948850556 -68.58664256999612 601.8000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.87250722291898 -71.11948528247086 603.7 + vertex 179.49775138722262 -69.60379985752151 601.8000000000001 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.87250722291898 -71.11948528247086 603.7 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 171.4437151320275 -74.25379985752176 603.7 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.4437151320275 -74.25379985752176 603.7 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 177.36240517147564 -70.83664256999627 604.2656854249493 + vertex 174.15811117747327 -72.68664256999635 604.7 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 174.15811117747327 -72.68664256999635 604.7 + vertex 173.55292273375986 -73.03604828088481 604.7920002690196 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 173.55292273375986 -73.03604828088481 604.7920002690196 + vertex 172.98897688236434 -73.36164256999642 605.061731409782 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 172.98897688236434 -73.36164256999642 605.061731409782 + vertex 172.50470560109466 -73.64123672459827 605.4908116907964 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 172.50470560109466 -73.64123672459827 605.4908116907964 + vertex 172.13311117747335 -73.85577686510548 606.0500000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 172.13311117747335 -73.85577686510548 606.0500000000001 + vertex 171.89951715738127 -73.99064243548673 606.7011885782233 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + vertex 171.89951715738127 -73.99064243548673 606.7011885782233 + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 171.89951715738127 -73.99064243548673 606.7011885782233 + vertex 171.81984258725538 -74.03664256999654 607.4000000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 171.81984258725538 -74.03664256999654 607.4000000000001 + vertex 171.89951715738135 -73.99064243548682 608.0988114217769 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 171.89951715738135 -73.99064243548682 608.0988114217769 + vertex 172.13311117747338 -73.85577686510553 608.7500000000001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 172.13311117747338 -73.85577686510553 608.7500000000001 + vertex 172.5047056010948 -73.64123672459844 609.3091883092037 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 172.5047056010948 -73.64123672459844 609.3091883092037 + vertex 172.98897688236445 -73.3616425699966 609.7382685902181 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 172.98897688236445 -73.3616425699966 609.7382685902181 + vertex 173.55292273376 -73.036048280885 610.0079997309805 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.953817183471 -74.53664256999662 610.5343145750508 + vertex 173.55292273376 -73.036048280885 610.0079997309805 + vertex 174.15811117747336 -72.68664256999658 610.1 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.4437151320275 -74.25379985752176 603.7 + vertex 168.81847096772384 -75.76948528247111 601.8000000000001 + vertex 169.30836891628041 -75.48664256999639 601.2343145750508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.81847096772384 -75.76948528247111 601.8000000000001 + vertex 171.4437151320275 -74.25379985752176 603.7 + vertex 170.9538171834709 -74.53664256999643 604.2656854249493 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + vertex 17.403113027955648 183.2209785653338 613.6000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + vertex 17.044482839088413 183.01392332925178 613.6545186779376 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.761743216822868 183.42803380141584 613.6545186779376 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + vertex 18.095933350983174 183.62097856533384 613.814359353945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.095933350983174 183.62097856533384 613.814359353945 + vertex 16.710292704928097 182.8209785653338 613.814359353945 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.095933350983174 183.62097856533384 613.814359353945 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + vertex 16.423317130842396 182.6552931403845 614.0686291501016 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.382908925068907 183.78666399028305 614.0686291501017 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 16.203113027955656 182.5281582423062 614.4000000000001 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.603113027955626 183.91379888836136 614.4000000000001 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + vertex 18.741539113936128 183.99371922636507 614.785889527836 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.741539113936128 183.99371922636507 614.785889527836 + vertex 16.064686941975182 182.4482379043025 614.785889527836 + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.741539113936128 183.99371922636507 614.785889527836 + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + vertex 16.01747238190058 182.4209785653337 615.2000000000002 + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.788753674010707 184.0209785653338 615.2000000000002 + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 16.064686941975175 182.44823790430246 615.6141104721642 + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.741539113936135 183.99371922636504 615.6141104721642 + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + vertex 16.20311302795568 182.52815824230615 616.0000000000001 + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.60311302795565 183.91379888836133 616.0000000000001 + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + vertex 16.42331713084241 182.65529314038446 616.3313708498986 + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.38290892506893 183.78666399028296 616.3313708498987 + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + vertex 16.71029270492811 182.8209785653337 616.5856406460553 + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.095933350983213 183.62097856533373 616.5856406460553 + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.76174321682286 183.42803380141572 616.7454813220626 + vertex 17.04448283908847 183.01392332925164 616.7454813220626 + vertex 17.403113027955662 183.22097856533372 616.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -177.0475284100329 -70.98664256999795 -22.599999999999966 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -180.49940999781734 -68.99369780607998 -22.34548132206245 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -180.49940999781734 -68.99369780607998 -22.34548132206245 + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + vertex -182.64727067122587 -67.75362986810585 -22.49999999999997 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.49940999781734 -68.99369780607998 -22.34548132206245 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -180.16521986365697 -69.186642569998 -22.18564064605505 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.16521986365697 -69.186642569998 -22.18564064605505 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -179.87824428957123 -69.35232799494719 -21.93137084989843 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.87824428957123 -69.35232799494719 -21.93137084989843 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -179.6580401866845 -69.4794628930255 -21.599999999999934 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.6580401866845 -69.4794628930255 -21.599999999999934 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -179.519614100704 -69.5593832310292 -21.21411047216397 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.519614100704 -69.5593832310292 -21.21411047216397 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -178.9527842983587 -69.88664256999793 -21.199999999999957 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.519614100704 -69.5593832310292 -21.21411047216397 + vertex -178.9527842983587 -69.88664256999793 -21.199999999999957 + vertex -179.47239954062937 -69.58664256999793 -20.799999999999937 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.47239954062937 -69.58664256999793 -20.799999999999937 + vertex -178.9527842983587 -69.88664256999793 -21.199999999999957 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.47239954062937 -69.58664256999793 -20.799999999999937 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -179.51961410070396 -69.55938323102919 -20.385889527835904 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.51961410070396 -69.55938323102919 -20.385889527835904 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -179.6580401866845 -69.47946289302546 -19.99999999999994 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.6580401866845 -69.47946289302546 -19.99999999999994 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -179.87824428957117 -69.35232799494715 -19.668629150101474 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.87824428957117 -69.35232799494715 -19.668629150101474 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -180.1652198636569 -69.18664256999789 -19.414359353944835 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.1652198636569 -69.18664256999789 -19.414359353944835 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -180.49940999781722 -68.99369780607992 -19.254518677937423 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.49940999781722 -68.99369780607992 -19.254518677937423 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.08466953506374 -77.31605209254886 -22.965925826289016 + vertex -170.8121455027849 -74.58664256999778 -22.999999999999954 + vertex -166.30881340310577 -77.1866425699976 -22.999999999999954 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.8121455027849 -74.58664256999778 -22.999999999999954 + vertex -166.08466953506374 -77.31605209254886 -22.965925826289016 + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -166.08466953506374 -77.31605209254886 -22.965925826289016 + vertex -165.8758007012135 -77.4366425699976 -22.866025403784388 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -165.8758007012135 -77.4366425699976 -22.866025403784388 + vertex -165.69644096740987 -77.54019596059086 -22.7071067811865 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -165.69644096740987 -77.54019596059086 -22.7071067811865 + vertex -165.5588134031057 -77.61965527188984 -22.49999999999995 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -165.5588134031057 -77.61965527188984 -22.49999999999995 + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + vertex -165.5588134031057 -77.61965527188984 -22.49999999999995 + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + vertex -167.70667407651428 -76.3795873339156 -22.345481322062458 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + vertex -167.70667407651428 -76.3795873339156 -22.345481322062458 + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + vertex -167.70667407651428 -76.3795873339156 -22.345481322062458 + vertex -168.0408642106746 -76.18664256999767 -22.185640646055052 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + vertex -168.0408642106746 -76.18664256999767 -22.185640646055052 + vertex -168.32783978476033 -76.0209571450484 -21.931370849898414 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + vertex -168.32783978476033 -76.0209571450484 -21.931370849898414 + vertex -168.54804388764705 -75.89382224697007 -21.599999999999945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + vertex -168.54804388764705 -75.89382224697007 -21.599999999999945 + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + vertex -169.2532997759728 -75.48664256999764 -21.199999999999946 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759728 -75.48664256999764 -21.199999999999946 + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + vertex -168.73368453370216 -75.78664256999762 -20.799999999999926 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759728 -75.48664256999764 -21.199999999999946 + vertex -168.73368453370216 -75.78664256999762 -20.799999999999926 + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -168.73368453370216 -75.78664256999762 -20.799999999999926 + vertex -168.6864699736275 -75.81390190896636 -20.385889527835893 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -168.6864699736275 -75.81390190896636 -20.385889527835893 + vertex -168.54804388764703 -75.89382224697005 -19.999999999999925 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -168.54804388764703 -75.89382224697005 -19.999999999999925 + vertex -168.32783978476027 -76.02095714504833 -19.668629150101452 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -168.32783978476027 -76.02095714504833 -19.668629150101452 + vertex -168.04086421067453 -76.18664256999756 -19.41435935394484 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -168.04086421067453 -76.18664256999756 -19.41435935394484 + vertex -167.7066740765142 -76.37958733391552 -19.254518677937433 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -167.7066740765142 -76.37958733391552 -19.254518677937433 + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + vertex -165.44278799932104 -77.68664256999716 -9.19999999999993 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -171.15855566429832 -74.38664256999722 -4.799999999999969 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999722 -4.799999999999969 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + vertex -170.81214550278452 -74.58664256999712 -2.999999999999924 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278452 -74.58664256999712 -2.999999999999924 + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + vertex -165.87580070121314 -77.43664256999696 -3.1339745962155057 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278452 -74.58664256999712 -2.999999999999924 + vertex -165.87580070121314 -77.43664256999696 -3.1339745962155057 + vertex -166.08466953506334 -77.31605209254823 -3.034074173710881 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278452 -74.58664256999712 -2.999999999999924 + vertex -166.08466953506334 -77.31605209254823 -3.034074173710881 + vertex -166.30881340310535 -77.18664256999696 -2.9999999999999436 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -176.81743808261152 -71.11948528247233 -16.699999999999974 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -176.81743808261152 -71.11948528247233 -16.699999999999974 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -176.81743808261152 -71.11948528247233 -16.699999999999974 + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -174.10304203716566 -72.68664256999762 -15.699999999999937 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -174.10304203716566 -72.68664256999762 -15.699999999999937 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -173.4978535934522 -73.03604828088599 -15.607999730980426 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -173.4978535934522 -73.03604828088599 -15.607999730980426 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -172.93390774205665 -73.36164256999754 -15.338268590217929 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.93390774205665 -73.36164256999754 -15.338268590217929 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -172.44963646078696 -73.64123672459937 -14.90918830920364 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.44963646078696 -73.64123672459937 -14.90918830920364 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -172.07804203716563 -73.85577686510652 -14.349999999999962 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.07804203716563 -73.85577686510652 -14.349999999999962 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -171.76477344694763 -74.03664256999745 -12.999999999999954 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.76477344694763 -74.03664256999745 -12.999999999999954 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -171.8444480170735 -73.99064243548767 -12.301188578223135 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.8444480170735 -73.99064243548767 -12.301188578223135 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -172.07804203716557 -73.8557768651064 -11.649999999999945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.07804203716557 -73.8557768651064 -11.649999999999945 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -172.44963646078693 -73.64123672459925 -11.090811690796267 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.44963646078693 -73.64123672459925 -11.090811690796267 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -172.93390774205656 -73.36164256999741 -10.661731409781979 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.93390774205656 -73.36164256999741 -10.661731409781979 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -173.49785359345213 -73.03604828088585 -10.392000269019471 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -173.49785359345213 -73.03604828088585 -10.392000269019471 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -174.1030420371656 -72.68664256999745 -10.299999999999962 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -181.89727067122587 -68.18664256999807 -22.999999999999968 + vertex -177.3939385715467 -70.78664256999797 -22.999999999999964 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.89727067122587 -68.18664256999807 -22.999999999999968 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -182.12141453926787 -68.05723304744681 -22.96592582628903 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.12141453926787 -68.05723304744681 -22.96592582628903 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -182.3302833731181 -67.9366425699981 -22.866025403784406 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.3302833731181 -67.9366425699981 -22.866025403784406 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -182.50964310692163 -67.83308917940481 -22.70710678118652 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.50964310692163 -67.83308917940481 -22.70710678118652 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -182.64727067122587 -67.75362986810585 -22.49999999999997 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + vertex -165.5588134031057 -77.61965527188984 -22.49999999999995 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -166.9894136987798 -76.79369780607962 -22.34548132206248 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.9894136987798 -76.79369780607962 -22.34548132206248 + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -166.65522356461946 -76.98664256999763 -22.185640646055063 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461946 -76.98664256999763 -22.185640646055063 + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461946 -76.98664256999763 -22.185640646055063 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + vertex -166.36824799053372 -77.1523279949468 -21.93137084989845 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.36824799053372 -77.1523279949468 -21.93137084989845 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + vertex -166.148043887647 -77.27946289302511 -21.599999999999977 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.148043887647 -77.27946289302511 -21.599999999999977 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + vertex -166.0096178016665 -77.35938323102883 -21.21411047216401 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.0096178016665 -77.35938323102883 -21.21411047216401 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.0096178016665 -77.35938323102883 -21.21411047216401 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -165.96240324159186 -77.38664256999755 -20.79999999999998 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.96240324159186 -77.38664256999755 -20.79999999999998 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -166.00961780166648 -77.35938323102881 -20.385889527835946 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166648 -77.35938323102881 -20.385889527835946 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -166.14804388764696 -77.27946289302508 -19.999999999999957 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.14804388764696 -77.27946289302508 -19.999999999999957 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -166.36824799053372 -77.15232799494673 -19.668629150101488 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.36824799053372 -77.15232799494673 -19.668629150101488 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -166.65522356461943 -76.98664256999751 -19.41435935394485 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461943 -76.98664256999751 -19.41435935394485 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -166.98941369877974 -76.79369780607954 -19.254518677937455 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.98941369877974 -76.79369780607954 -19.254518677937455 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -165.78919816083493 -77.4866425699974 -16.799999999999965 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + vertex -165.78919816083493 -77.4866425699974 -16.799999999999965 + vertex -167.00163372613318 -76.78664256999741 -16.399999999999963 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613318 -76.78664256999741 -16.399999999999963 + vertex -165.78919816083493 -77.4866425699974 -16.799999999999965 + vertex -165.78919816083493 -77.4866425699974 -16.399999999999963 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -176.1280420371657 -71.51750827488864 -14.349999999999968 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -176.1280420371657 -71.51750827488864 -14.349999999999968 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -175.75644761354434 -71.73204841539578 -14.909188309203646 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -175.75644761354434 -71.73204841539578 -14.909188309203646 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -175.27217633227468 -72.01164256999762 -15.33826859021793 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -175.27217633227468 -72.01164256999762 -15.33826859021793 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -174.7082304808791 -72.33723685910924 -15.60799973098044 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -174.7082304808791 -72.33723685910924 -15.60799973098044 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + vertex -174.10304203716566 -72.68664256999762 -15.699999999999937 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -176.44131062738367 -71.3366425699976 -12.99999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -176.44131062738367 -71.3366425699976 -12.99999999999996 + vertex -176.3616360572577 -71.38264270450729 -12.301188578223162 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -176.3616360572577 -71.38264270450729 -12.301188578223162 + vertex -176.1280420371656 -71.51750827488856 -11.649999999999949 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -176.1280420371656 -71.51750827488856 -11.649999999999949 + vertex -175.75644761354425 -71.73204841539567 -11.09081169079627 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -175.75644761354425 -71.73204841539567 -11.09081169079627 + vertex -175.27217633227457 -72.01164256999746 -10.661731409781982 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -175.27217633227457 -72.01164256999746 -10.661731409781982 + vertex -174.70823048087902 -72.33723685910905 -10.392000269019473 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -174.70823048087902 -72.33723685910905 -10.392000269019473 + vertex -174.1030420371656 -72.68664256999745 -10.299999999999962 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -174.1030420371656 -72.68664256999745 -10.299999999999962 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608348 -77.48664256999719 -9.599999999999929 + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -167.00163372613304 -76.78664256999721 -9.599999999999953 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -165.7891981608348 -77.48664256999719 -9.599999999999929 + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -176.81743808261132 -71.11948528247211 -9.299999999999965 + vertex -179.44268224691513 -69.60379985752284 -7.39999999999995 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -176.81743808261132 -71.11948528247211 -9.299999999999965 + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.44268224691513 -69.60379985752284 -7.39999999999995 + vertex -176.81743808261132 -71.11948528247211 -9.299999999999965 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.44268224691513 -69.60379985752284 -7.39999999999995 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + vertex -177.04752841003264 -70.98664256999737 -4.799999999999952 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -179.5196141007037 -69.55938323102869 -4.785889527835922 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.5196141007037 -69.55938323102869 -4.785889527835922 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -179.65804018668416 -69.47946289302497 -4.399999999999955 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668416 -69.47946289302497 -4.399999999999955 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -179.8782442895709 -69.35232799494665 -4.068629150101484 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.8782442895709 -69.35232799494665 -4.068629150101484 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -180.1652198636566 -69.18664256999742 -3.814359353944847 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.1652198636566 -69.18664256999742 -3.814359353944847 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -180.4994099978169 -68.99369780607941 -3.654518677937452 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.4994099978169 -68.99369780607941 -3.654518677937452 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -180.8580401866842 -68.78664256999744 -3.5999999999999566 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.8580401866842 -68.78664256999744 -3.5999999999999566 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -177.39393857154639 -70.78664256999731 -3.399999999999954 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + vertex -177.39393857154639 -70.78664256999731 -3.399999999999954 + vertex -182.50964310692132 -67.83308917940421 -3.2928932188133984 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.50964310692132 -67.83308917940421 -3.2928932188133984 + vertex -177.39393857154639 -70.78664256999731 -3.399999999999954 + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.50964310692132 -67.83308917940421 -3.2928932188133984 + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -182.33028337311777 -67.93664256999747 -3.133974596215514 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.33028337311777 -67.93664256999747 -3.133974596215514 + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -182.12141453926756 -68.05723304744619 -3.034074173710887 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.12141453926756 -68.05723304744619 -3.034074173710887 + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -181.89727067122553 -68.18664256999743 -2.9999999999999494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.2044503481981 -68.58664256999764 -9.599999999999923 + vertex -182.41688591349632 -67.88664256999765 -9.19999999999996 + vertex -182.41688591349632 -67.88664256999766 -9.59999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.41688591349632 -67.88664256999765 -9.19999999999996 + vertex -181.2044503481981 -68.58664256999764 -9.599999999999923 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.41688591349632 -67.88664256999765 -9.19999999999996 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -182.76329607501012 -67.68664256999767 -9.19999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501012 -67.68664256999767 -9.19999999999996 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -182.05804018668428 -68.09382224696996 -5.999999999999944 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501012 -67.68664256999767 -9.19999999999996 + vertex -182.05804018668428 -68.09382224696996 -5.999999999999944 + vertex -182.19646627266476 -68.01390190896626 -5.614110472163954 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501012 -67.68664256999767 -9.19999999999996 + vertex -182.19646627266476 -68.01390190896626 -5.614110472163954 + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.05804018668428 -68.09382224696996 -5.999999999999944 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -181.83783608379753 -68.22095714504829 -6.331370849898415 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.83783608379753 -68.22095714504829 -6.331370849898415 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -181.55086050971184 -68.38664256999753 -6.585640646055053 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.55086050971184 -68.38664256999753 -6.585640646055053 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -181.2166703755515 -68.57958733391551 -6.7454813220624334 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.2166703755515 -68.57958733391551 -6.7454813220624334 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -180.85804018668426 -68.78664256999751 -6.799999999999951 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.85804018668426 -68.78664256999751 -6.799999999999951 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -182.19646627266476 -68.01390190896626 -5.614110472163954 + vertex -182.24368083273936 -67.9866425699975 -5.199999999999923 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -182.24368083273936 -67.9866425699975 -5.199999999999923 + vertex -182.19646627266474 -68.01390190896625 -4.785889527835891 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -182.19646627266474 -68.01390190896625 -4.785889527835891 + vertex -182.05804018668422 -68.09382224696995 -4.399999999999924 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -182.05804018668422 -68.09382224696995 -4.399999999999924 + vertex -181.83783608379747 -68.22095714504822 -4.068629150101453 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -181.83783608379747 -68.22095714504822 -4.068629150101453 + vertex -181.55086050971175 -68.38664256999745 -3.8143593539448384 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -181.55086050971175 -68.38664256999745 -3.8143593539448384 + vertex -182.73378697496338 -67.70367965685296 -3.741180954897436 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496338 -67.70367965685296 -3.741180954897436 + vertex -181.55086050971175 -68.38664256999745 -3.8143593539448384 + vertex -181.2166703755514 -68.57958733391541 -3.654518677937407 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496338 -67.70367965685296 -3.741180954897436 + vertex -181.2166703755514 -68.57958733391541 -3.654518677937407 + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + vertex -181.2166703755514 -68.57958733391541 -3.654518677937407 + vertex -180.8580401866842 -68.78664256999744 -3.5999999999999566 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -180.499409997817 -68.99369780607952 -6.745481322062478 + vertex -180.85804018668426 -68.78664256999751 -6.799999999999951 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.499409997817 -68.99369780607952 -6.745481322062478 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -180.1652198636567 -69.1866425699975 -6.585640646055061 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.1652198636567 -69.1866425699975 -6.585640646055061 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -179.87824428957094 -69.35232799494672 -6.3313708498984465 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.87824428957094 -69.35232799494672 -6.3313708498984465 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -179.65804018668422 -69.47946289302502 -5.999999999999975 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668422 -69.47946289302502 -5.999999999999975 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668422 -69.47946289302502 -5.999999999999975 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + vertex -179.5196141007037 -69.5593832310287 -5.6141104721640085 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.5196141007037 -69.5593832310287 -5.6141104721640085 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + vertex -179.47239954062908 -69.58664256999745 -5.199999999999976 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.47239954062908 -69.58664256999745 -5.199999999999976 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + vertex -179.5196141007037 -69.55938323102869 -4.785889527835922 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -168.7634018274161 -75.76948528247219 -18.599999999999948 + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.7634018274161 -75.76948528247219 -18.599999999999948 + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + vertex -168.7634018274161 -75.76948528247219 -18.599999999999948 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.2044503481982 -68.58664256999784 -16.39999999999998 + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + vertex -181.2044503481982 -68.58664256999784 -16.39999999999998 + vertex -182.41688591349643 -67.88664256999789 -16.400000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -182.64727067122587 -67.75362986810585 -22.49999999999997 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + vertex -181.21667037555176 -68.57958733391598 -22.34548132206245 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -181.21667037555176 -68.57958733391598 -22.34548132206245 + vertex -181.55086050971215 -68.38664256999803 -22.185640646055035 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -181.55086050971215 -68.38664256999803 -22.185640646055035 + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + vertex -181.55086050971215 -68.38664256999803 -22.185640646055035 + vertex -181.8378360837978 -68.22095714504879 -21.93137084989842 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + vertex -181.8378360837978 -68.22095714504879 -21.93137084989842 + vertex -182.05804018668454 -68.09382224697046 -21.599999999999927 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + vertex -182.05804018668454 -68.09382224697046 -21.599999999999927 + vertex -182.19646627266502 -68.01390190896676 -21.21411047216396 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + vertex -182.19646627266502 -68.01390190896676 -21.21411047216396 + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -182.19646627266502 -68.01390190896676 -21.21411047216396 + vertex -182.2436808327396 -67.986642569998 -20.79999999999993 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -182.2436808327396 -67.986642569998 -20.79999999999993 + vertex -182.19646627266502 -68.01390190896674 -20.385889527835896 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -182.19646627266502 -68.01390190896674 -20.385889527835896 + vertex -182.0580401866845 -68.09382224697045 -19.99999999999993 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -182.0580401866845 -68.09382224697045 -19.99999999999993 + vertex -181.83783608379773 -68.2209571450487 -19.66862915010146 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -181.83783608379773 -68.2209571450487 -19.66862915010146 + vertex -181.55086050971204 -68.38664256999796 -19.41435935394482 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -181.55086050971204 -68.38664256999796 -19.41435935394482 + vertex -181.21667037555167 -68.57958733391588 -19.254518677937426 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -181.21667037555167 -68.57958733391588 -19.254518677937426 + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -31.897270671226426 191.62097856533254 -23.000000000000057 + vertex -177.3939385715467 -70.78664256999797 -22.999999999999964 + vertex -181.89727067122587 -68.18664256999807 -22.999999999999968 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -177.3939385715467 -70.78664256999797 -22.999999999999964 + vertex -31.897270671226426 191.62097856533254 -23.000000000000057 + vertex -27.393938571547185 189.02097856533265 -23.000000000000053 + endloop +endfacet +facet normal -0.11303899832185413 0.06526309611000009 -0.9914448613738078 + outer loop + vertex -32.121414539268436 191.75038808788375 -22.96592582628912 + vertex -181.89727067122587 -68.18664256999807 -22.999999999999968 + vertex -182.12141453926787 -68.05723304744681 -22.96592582628903 + endloop +endfacet +facet normal -0.11303899832185413 0.06526309611000009 -0.9914448613738078 + outer loop + vertex -181.89727067122587 -68.18664256999807 -22.999999999999968 + vertex -32.121414539268436 191.75038808788375 -22.96592582628912 + vertex -31.897270671226426 191.62097856533254 -23.000000000000057 + endloop +endfacet +facet normal -1.4032362957362895e-14 -3.338242996024356e-14 -1.0 + outer loop + vertex -26.81743808261207 188.68813585285818 -16.700000000000063 + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + vertex -176.81743808261152 -71.11948528247233 -16.699999999999974 + endloop +endfacet +facet normal -1.4032362957362895e-14 -3.338242996024356e-14 -1.0 + outer loop + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + vertex -26.81743808261207 188.68813585285818 -16.700000000000063 + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + endloop +endfacet +facet normal -0.33141357403561206 0.19134171618249302 -0.9238795325112902 + outer loop + vertex -32.3302833731186 191.8709785653325 -22.86602540378449 + vertex -182.12141453926787 -68.05723304744681 -22.96592582628903 + vertex -182.3302833731181 -67.9366425699981 -22.866025403784406 + endloop +endfacet +facet normal -0.33141357403561206 0.19134171618249302 -0.9238795325112902 + outer loop + vertex -182.12141453926787 -68.05723304744681 -22.96592582628903 + vertex -32.3302833731186 191.8709785653325 -22.86602540378449 + vertex -32.121414539268436 191.75038808788375 -22.96592582628912 + endloop +endfacet +facet normal -0.5272028623656805 0.304380714504307 -0.7933533402912483 + outer loop + vertex -32.50964310692216 191.9745319559258 -22.70710678118661 + vertex -182.3302833731181 -67.9366425699981 -22.866025403784406 + vertex -182.50964310692163 -67.83308917940481 -22.70710678118652 + endloop +endfacet +facet normal -0.5272028623656805 0.304380714504307 -0.7933533402912483 + outer loop + vertex -182.3302833731181 -67.9366425699981 -22.866025403784406 + vertex -32.50964310692216 191.9745319559258 -22.70710678118661 + vertex -32.3302833731186 191.8709785653325 -22.86602540378449 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 7.797766215937039e-16 + outer loop + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -181.2044503481982 -68.58664256999784 -16.39999999999998 + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 7.797766215937039e-16 + outer loop + vertex -181.2044503481982 -68.58664256999784 -16.39999999999998 + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -31.204450348198726 191.2209785653327 -16.400000000000063 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 6.227439144697606e-15 + outer loop + vertex -27.393938571547185 189.02097856533265 -23.000000000000053 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -177.3939385715467 -70.78664256999797 -22.999999999999964 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 6.227439144697606e-15 + outer loop + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + vertex -27.393938571547185 189.02097856533265 -23.000000000000053 + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -178.9527842983587 -69.88664256999793 -21.199999999999957 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -19.253299775973296 184.32097856533298 -21.200000000000035 + vertex -169.2532997759728 -75.48664256999764 -21.199999999999946 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -19.253299775973296 184.32097856533298 -21.200000000000035 + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -181.20445034819824 -68.58664256999789 -18.599999999999977 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -29.44268224691582 190.20382127780732 -18.60000000000005 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + vertex -178.9527842983587 -69.88664256999793 -21.199999999999957 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -20.812145502785388 185.22097856533284 -23.000000000000036 + vertex -170.8121455027849 -74.58664256999778 -22.999999999999954 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -20.812145502785388 185.22097856533284 -23.000000000000036 + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + endloop +endfacet +facet normal -0.8001031451912929 0.46193976625560573 -0.38268343236507835 + outer loop + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + vertex -182.64727067122587 -67.75362986810585 -22.49999999999997 + endloop +endfacet +facet normal -0.8001031451912929 0.46193976625560573 -0.38268343236507835 + outer loop + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -32.7337869749642 192.10394147847708 -22.258819045102573 + endloop +endfacet +facet normal -0.6123724356957982 0.35355339059327484 0.7071067811865438 + outer loop + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + endloop +endfacet +facet normal -0.6123724356957982 0.35355339059327484 0.7071067811865438 + outer loop + vertex -179.4426822469153 -69.60379985752323 -18.599999999999962 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -29.44268224691582 190.20382127780732 -18.60000000000005 + endloop +endfacet +facet normal 0.6123724356957956 -0.3535533905932733 -0.7071067811865469 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -176.81743808261152 -71.11948528247233 -16.699999999999974 + vertex -178.95278429835867 -69.88664256999783 -19.165685424949217 + endloop +endfacet +facet normal 0.6123724356957956 -0.3535533905932733 -0.7071067811865469 + outer loop + vertex -176.81743808261152 -71.11948528247233 -16.699999999999974 + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -26.81743808261207 188.68813585285818 -16.700000000000063 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + vertex -32.41688591349694 191.92097856533272 -16.80000000000009 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -21.158555664299147 185.4209785653328 -22.600000000000048 + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -170.81214550278483 -74.58664256999774 -22.599999999999955 + vertex -21.158555664299147 185.4209785653328 -22.600000000000048 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + endloop +endfacet +facet normal 3.1938264052333552e-15 3.964006195623637e-14 1.0 + outer loop + vertex -181.2044503481982 -68.58664256999784 -16.39999999999998 + vertex -32.41688591349694 191.9209785653327 -16.400000000000095 + vertex -182.41688591349643 -67.88664256999789 -16.400000000000002 + endloop +endfacet +facet normal 3.1938264052333552e-15 3.964006195623637e-14 1.0 + outer loop + vertex -32.41688591349694 191.9209785653327 -16.400000000000095 + vertex -181.2044503481982 -68.58664256999784 -16.39999999999998 + vertex -31.204450348198726 191.2209785653327 -16.400000000000063 + endloop +endfacet +facet normal -0.6123724356958147 0.35355339059323354 -0.7071067811865502 + outer loop + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -171.38864599171987 -74.25379985752292 -16.699999999999946 + endloop +endfacet +facet normal -0.6123724356958147 0.35355339059323354 -0.7071067811865502 + outer loop + vertex -169.25329977597275 -75.48664256999757 -19.165685424949185 + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + endloop +endfacet +facet normal 0.1130389983218193 -0.06526309611006452 -0.9914448613738074 + outer loop + vertex -16.30881340310624 182.62097856533293 -23.00000000000004 + vertex -166.08466953506374 -77.31605209254886 -22.965925826289016 + vertex -166.30881340310577 -77.1866425699976 -22.999999999999954 + endloop +endfacet +facet normal 0.1130389983218193 -0.06526309611006452 -0.9914448613738074 + outer loop + vertex -166.08466953506374 -77.31605209254886 -22.965925826289016 + vertex -16.30881340310624 182.62097856533293 -23.00000000000004 + vertex -16.084669535064208 182.4915690427817 -22.9659258262891 + endloop +endfacet +facet normal 0.3314135740355756 -0.19134171618255938 -0.9238795325112896 + outer loop + vertex -16.084669535064208 182.4915690427817 -22.9659258262891 + vertex -165.8758007012135 -77.4366425699976 -22.866025403784388 + vertex -166.08466953506374 -77.31605209254886 -22.965925826289016 + endloop +endfacet +facet normal 0.3314135740355756 -0.19134171618255938 -0.9238795325112896 + outer loop + vertex -165.8758007012135 -77.4366425699976 -22.866025403784388 + vertex -16.084669535064208 182.4915690427817 -22.9659258262891 + vertex -15.87580070121402 182.37097856533296 -22.866025403784477 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 2.4387889803801352e-15 + outer loop + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + vertex -182.7632960750102 -67.6866425699979 -16.800000000000004 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 2.4387889803801352e-15 + outer loop + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + vertex -177.0475284100329 -70.98664256999795 -22.599999999999966 + vertex -177.3939385715467 -70.78664256999794 -22.599999999999966 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -177.0475284100329 -70.98664256999795 -22.599999999999966 + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + endloop +endfacet +facet normal -0.8586164364012796 0.4957224306868715 -0.13052619222005726 + outer loop + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -182.76329607501032 -67.68664256999804 -21.99999999999997 + endloop +endfacet +facet normal -0.8586164364012796 0.4957224306868715 -0.13052619222005726 + outer loop + vertex -182.73378697496366 -67.70367965685351 -22.25881904510248 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + vertex -32.7337869749642 192.10394147847708 -22.258819045102573 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -171.15855566429863 -74.38664256999776 -22.59999999999996 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -21.158555664299147 185.4209785653328 -22.600000000000048 + endloop +endfacet +facet normal 0.5272028623656501 -0.3043807145043627 -0.7933533402912472 + outer loop + vertex -15.87580070121402 182.37097856533296 -22.866025403784477 + vertex -165.69644096740987 -77.54019596059086 -22.7071067811865 + vertex -165.8758007012135 -77.4366425699976 -22.866025403784388 + endloop +endfacet +facet normal 0.5272028623656501 -0.3043807145043627 -0.7933533402912472 + outer loop + vertex -165.69644096740987 -77.54019596059086 -22.7071067811865 + vertex -15.87580070121402 182.37097856533296 -22.866025403784477 + vertex -15.696440967410407 182.26742517473969 -22.707106781186592 + endloop +endfacet +facet normal 0.6870641468694507 -0.3966766701456196 -0.6087614290087188 + outer loop + vertex -165.69644096740987 -77.54019596059086 -22.7071067811865 + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + vertex -165.5588134031057 -77.61965527188984 -22.49999999999995 + endloop +endfacet +facet normal 0.6870641468694507 -0.3966766701456196 -0.6087614290087188 + outer loop + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + vertex -165.69644096740987 -77.54019596059086 -22.7071067811865 + vertex -15.696440967410407 182.26742517473969 -22.707106781186592 + endloop +endfacet +facet normal -0.6870641468694719 0.39667667014558666 -0.6087614290087161 + outer loop + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + vertex -182.50964310692163 -67.83308917940481 -22.70710678118652 + vertex -182.64727067122587 -67.75362986810585 -22.49999999999997 + endloop +endfacet +facet normal -0.6870641468694719 0.39667667014558666 -0.6087614290087161 + outer loop + vertex -182.50964310692163 -67.83308917940481 -22.70710678118652 + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + vertex -32.50964310692216 191.9745319559258 -22.70710678118661 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.1225237454890334e-14 + outer loop + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -177.0475284100329 -70.98664256999795 -22.599999999999966 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.1225237454890334e-14 + outer loop + vertex -177.0475284100329 -70.98664256999788 -21.199999999999967 + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -6.007129263248552e-15 + outer loop + vertex -32.41688591349694 191.9209785653327 -16.400000000000095 + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + vertex -182.41688591349643 -67.88664256999789 -16.400000000000002 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -6.007129263248552e-15 + outer loop + vertex -182.41688591349643 -67.88664256999789 -16.800000000000004 + vertex -32.41688591349694 191.9209785653327 -16.400000000000095 + vertex -32.41688591349694 191.92097856533272 -16.80000000000009 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -169.2532997759728 -75.48664256999764 -21.199999999999946 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -171.1585556642986 -74.38664256999773 -21.19999999999996 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -169.2532997759728 -75.48664256999764 -21.199999999999946 + vertex -19.253299775973296 184.32097856533298 -21.200000000000035 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -20.812145502785388 185.22097856533284 -23.000000000000036 + vertex -166.30881340310577 -77.1866425699976 -22.999999999999954 + vertex -170.8121455027849 -74.58664256999778 -22.999999999999954 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -166.30881340310577 -77.1866425699976 -22.999999999999954 + vertex -20.812145502785388 185.22097856533284 -23.000000000000036 + vertex -16.30881340310624 182.62097856533293 -23.00000000000004 + endloop +endfacet +facet normal 0.11303899832184437 -0.06526309610999445 0.9914448613738092 + outer loop + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + vertex -17.70667407651477 183.42803380141493 -22.345481322062547 + vertex -167.70667407651428 -76.3795873339156 -22.345481322062458 + endloop +endfacet +facet normal 0.11303899832184437 -0.06526309610999445 0.9914448613738092 + outer loop + vertex -17.70667407651477 183.42803380141493 -22.345481322062547 + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + endloop +endfacet +facet normal 0.8586164364012803 -0.49572243068687194 -0.1305261922200513 + outer loop + vertex -26.441310627384183 188.47097856533296 -13.000000000000046 + vertex -176.3616360572577 -71.38264270450729 -12.301188578223162 + vertex -176.44131062738367 -71.3366425699976 -12.99999999999996 + endloop +endfacet +facet normal 0.8586164364012803 -0.49572243068687194 -0.1305261922200513 + outer loop + vertex -176.3616360572577 -71.38264270450729 -12.301188578223162 + vertex -26.441310627384183 188.47097856533296 -13.000000000000046 + vertex -26.361636057258295 188.42497843082322 -12.30118857822325 + endloop +endfacet +facet normal 0.5272028623656798 -0.30438071450430665 0.7933533402912488 + outer loop + vertex -175.27217633227468 -72.01164256999762 -15.33826859021793 + vertex -25.756447613544847 188.07557271993477 -14.909188309203735 + vertex -175.75644761354434 -71.73204841539578 -14.909188309203646 + endloop +endfacet +facet normal 0.5272028623656798 -0.30438071450430665 0.7933533402912488 + outer loop + vertex -25.756447613544847 188.07557271993477 -14.909188309203735 + vertex -175.27217633227468 -72.01164256999762 -15.33826859021793 + vertex -25.272176332275194 187.79597856533294 -15.338268590218007 + endloop +endfacet +facet normal 0.8001031451912723 -0.4619397662556388 -0.3826834323650808 + outer loop + vertex -176.3616360572577 -71.38264270450729 -12.301188578223162 + vertex -26.128042037166153 188.29011286044198 -11.650000000000038 + vertex -176.1280420371656 -71.51750827488856 -11.649999999999949 + endloop +endfacet +facet normal 0.8001031451912723 -0.4619397662556388 -0.3826834323650808 + outer loop + vertex -26.128042037166153 188.29011286044198 -11.650000000000038 + vertex -176.3616360572577 -71.38264270450729 -12.301188578223162 + vertex -26.361636057258295 188.42497843082322 -12.30118857822325 + endloop +endfacet +facet normal 0.8001031451912779 -0.4619397662556308 -0.38268343236507885 + outer loop + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -165.5588134031057 -77.61965527188984 -22.49999999999995 + endloop +endfacet +facet normal 0.8001031451912779 -0.4619397662556308 -0.38268343236507885 + outer loop + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + vertex -15.472297099368376 182.13801565218841 -22.25881904510254 + endloop +endfacet +facet normal 0.11303899832179289 -0.06526309611005209 -0.9914448613738114 + outer loop + vertex -24.708230480879518 187.47038427622155 -10.392000269019562 + vertex -174.1030420371656 -72.68664256999745 -10.299999999999962 + vertex -174.70823048087902 -72.33723685910905 -10.392000269019473 + endloop +endfacet +facet normal 0.11303899832179289 -0.06526309611005209 -0.9914448613738114 + outer loop + vertex -174.1030420371656 -72.68664256999745 -10.299999999999962 + vertex -24.708230480879518 187.47038427622155 -10.392000269019562 + vertex -24.103042037166073 187.1209785653331 -10.30000000000005 + endloop +endfacet +facet normal -0.5272028623656798 0.30438071450430665 -0.7933533402912488 + outer loop + vertex -22.933907742057063 186.4459785653332 -10.661731409782044 + vertex -172.44963646078693 -73.64123672459925 -11.090811690796267 + vertex -172.93390774205656 -73.36164256999741 -10.661731409781979 + endloop +endfacet +facet normal -0.5272028623656798 0.30438071450430665 -0.7933533402912488 + outer loop + vertex -172.44963646078693 -73.64123672459925 -11.090811690796267 + vertex -22.933907742057063 186.4459785653332 -10.661731409782044 + vertex -22.44963646078741 186.16638441073135 -11.090811690796333 + endloop +endfacet +facet normal 0.8001031451912968 -0.4619397662555967 0.3826834323650809 + outer loop + vertex -26.12804203716622 188.29011286044195 -14.350000000000055 + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -176.1280420371657 -71.51750827488864 -14.349999999999968 + endloop +endfacet +facet normal 0.8001031451912968 -0.4619397662555967 0.3826834323650809 + outer loop + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -26.12804203716622 188.29011286044195 -14.350000000000055 + vertex -26.361636057258295 188.42497843082322 -13.698811421776844 + endloop +endfacet +facet normal 0.3314135740355922 -0.19134171618256895 -0.9238795325112817 + outer loop + vertex -25.27217633227515 187.79597856533303 -10.661731409782071 + vertex -174.70823048087902 -72.33723685910905 -10.392000269019473 + vertex -175.27217633227457 -72.01164256999746 -10.661731409781982 + endloop +endfacet +facet normal 0.3314135740355922 -0.19134171618256895 -0.9238795325112817 + outer loop + vertex -174.70823048087902 -72.33723685910905 -10.392000269019473 + vertex -25.27217633227515 187.79597856533303 -10.661731409782071 + vertex -24.708230480879518 187.47038427622155 -10.392000269019562 + endloop +endfacet +facet normal -0.1130389983217937 0.06526309611005116 0.9914448613738113 + outer loop + vertex -173.4978535934522 -73.03604828088599 -15.607999730980426 + vertex -24.103042037166183 187.12097856533296 -15.700000000000038 + vertex -174.10304203716566 -72.68664256999762 -15.699999999999937 + endloop +endfacet +facet normal -0.1130389983217937 0.06526309611005116 0.9914448613738113 + outer loop + vertex -24.103042037166183 187.12097856533296 -15.700000000000038 + vertex -173.4978535934522 -73.03604828088599 -15.607999730980426 + vertex -23.49785359345274 186.77157285444454 -15.607999730980529 + endloop +endfacet +facet normal -0.8001031451912723 0.4619397662556388 0.3826834323650808 + outer loop + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + vertex -22.07804203716615 185.95184427022406 -14.350000000000053 + vertex -172.07804203716563 -73.85577686510652 -14.349999999999962 + endloop +endfacet +facet normal -0.8001031451912723 0.4619397662556388 0.3826834323650808 + outer loop + vertex -22.07804203716615 185.95184427022406 -14.350000000000053 + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + vertex -21.844448017074033 185.81697869984282 -13.698811421776819 + endloop +endfacet +facet normal -0.33141357403562616 0.19134171618250684 -0.9238795325112824 + outer loop + vertex -23.497853593452625 186.77157285444477 -10.39200026901956 + vertex -172.93390774205656 -73.36164256999741 -10.661731409781979 + vertex -173.49785359345213 -73.03604828088585 -10.392000269019471 + endloop +endfacet +facet normal -0.33141357403562616 0.19134171618250684 -0.9238795325112824 + outer loop + vertex -172.93390774205656 -73.36164256999741 -10.661731409781979 + vertex -23.497853593452625 186.77157285444477 -10.39200026901956 + vertex -22.933907742057063 186.4459785653332 -10.661731409782044 + endloop +endfacet +facet normal 0.6870641468694536 -0.3966766701456156 -0.6087614290087181 + outer loop + vertex -26.128042037166153 188.29011286044198 -11.650000000000038 + vertex -175.75644761354425 -71.73204841539567 -11.09081169079627 + vertex -176.1280420371656 -71.51750827488856 -11.649999999999949 + endloop +endfacet +facet normal 0.6870641468694536 -0.3966766701456156 -0.6087614290087181 + outer loop + vertex -175.75644761354425 -71.73204841539567 -11.09081169079627 + vertex -26.128042037166153 188.29011286044198 -11.650000000000038 + vertex -25.756447613544758 188.0755727199349 -11.09081169079636 + endloop +endfacet +facet normal 0.8586164364012749 -0.4957224306868801 0.13052619222005518 + outer loop + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -26.441310627384183 188.47097856533296 -13.000000000000046 + vertex -176.44131062738367 -71.3366425699976 -12.99999999999996 + endloop +endfacet +facet normal 0.8586164364012749 -0.4957224306868801 0.13052619222005518 + outer loop + vertex -26.441310627384183 188.47097856533296 -13.000000000000046 + vertex -176.36163605725775 -71.38264270450735 -13.698811421776757 + vertex -26.361636057258295 188.42497843082322 -13.698811421776844 + endloop +endfacet +facet normal -0.8001031451912879 0.46193976625560285 -0.38268343236509217 + outer loop + vertex -22.07804203716608 185.95184427022414 -11.650000000000011 + vertex -171.8444480170735 -73.99064243548767 -12.301188578223135 + vertex -172.07804203716557 -73.8557768651064 -11.649999999999945 + endloop +endfacet +facet normal -0.8001031451912879 0.46193976625560285 -0.38268343236509217 + outer loop + vertex -171.8444480170735 -73.99064243548767 -12.301188578223135 + vertex -22.07804203716608 185.95184427022414 -11.650000000000011 + vertex -21.844448017074008 185.81697869984293 -12.3011885782232 + endloop +endfacet +facet normal -0.11303899832176335 0.06526309611003223 0.9914448613738159 + outer loop + vertex -166.9894136987798 -76.79369780607962 -22.34548132206248 + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + vertex -167.34804388764704 -76.58664256999762 -22.399999999999952 + endloop +endfacet +facet normal -0.11303899832176335 0.06526309611003223 0.9914448613738159 + outer loop + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + vertex -166.9894136987798 -76.79369780607962 -22.34548132206248 + vertex -16.98941369878038 183.01392332925096 -22.34548132206257 + endloop +endfacet +facet normal -0.6870641468694504 0.3966766701456194 0.6087614290087194 + outer loop + vertex -22.07804203716615 185.95184427022406 -14.350000000000053 + vertex -172.44963646078696 -73.64123672459937 -14.90918830920364 + vertex -172.07804203716563 -73.85577686510652 -14.349999999999962 + endloop +endfacet +facet normal -0.6870641468694504 0.3966766701456194 0.6087614290087194 + outer loop + vertex -172.44963646078696 -73.64123672459937 -14.90918830920364 + vertex -22.07804203716615 185.95184427022406 -14.350000000000053 + vertex -22.449636460787545 186.16638441073113 -14.909188309203731 + endloop +endfacet +facet normal 0.5272028623656518 -0.3043807145043581 -0.7933533402912477 + outer loop + vertex -25.756447613544758 188.0755727199349 -11.09081169079636 + vertex -175.27217633227457 -72.01164256999746 -10.661731409781982 + vertex -175.75644761354425 -71.73204841539567 -11.09081169079627 + endloop +endfacet +facet normal 0.5272028623656518 -0.3043807145043581 -0.7933533402912477 + outer loop + vertex -175.27217633227457 -72.01164256999746 -10.661731409781982 + vertex -25.756447613544758 188.0755727199349 -11.09081169079636 + vertex -25.27217633227515 187.79597856533303 -10.661731409782071 + endloop +endfacet +facet normal 0.11303899832182897 -0.06526309610998697 0.9914448613738115 + outer loop + vertex -174.10304203716566 -72.68664256999762 -15.699999999999937 + vertex -24.70823048087963 187.47038427622132 -15.607999730980517 + vertex -174.7082304808791 -72.33723685910924 -15.60799973098044 + endloop +endfacet +facet normal 0.11303899832182897 -0.06526309610998697 0.9914448613738115 + outer loop + vertex -24.70823048087963 187.47038427622132 -15.607999730980517 + vertex -174.10304203716566 -72.68664256999762 -15.699999999999937 + vertex -24.103042037166183 187.12097856533296 -15.700000000000038 + endloop +endfacet +facet normal -0.687064146869468 0.3966766701455844 -0.6087614290087221 + outer loop + vertex -22.44963646078741 186.16638441073135 -11.090811690796333 + vertex -172.07804203716557 -73.8557768651064 -11.649999999999945 + vertex -172.44963646078693 -73.64123672459925 -11.090811690796267 + endloop +endfacet +facet normal -0.687064146869468 0.3966766701455844 -0.6087614290087221 + outer loop + vertex -172.07804203716557 -73.8557768651064 -11.649999999999945 + vertex -22.44963646078741 186.16638441073135 -11.090811690796333 + vertex -22.07804203716608 185.95184427022414 -11.650000000000011 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 -0.13052619222005102 + outer loop + vertex -171.8444480170735 -73.99064243548767 -12.301188578223135 + vertex -21.76477344694812 185.77097856533308 -13.000000000000021 + vertex -171.76477344694763 -74.03664256999745 -12.999999999999954 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 -0.13052619222005102 + outer loop + vertex -21.76477344694812 185.77097856533308 -13.000000000000021 + vertex -171.8444480170735 -73.99064243548767 -12.301188578223135 + vertex -21.844448017074008 185.81697869984293 -12.3011885782232 + endloop +endfacet +facet normal -0.11303899832182897 0.06526309610998697 -0.9914448613738115 + outer loop + vertex -24.103042037166073 187.1209785653331 -10.30000000000005 + vertex -173.49785359345213 -73.03604828088585 -10.392000269019471 + vertex -174.1030420371656 -72.68664256999745 -10.299999999999962 + endloop +endfacet +facet normal -0.11303899832182897 0.06526309610998697 -0.9914448613738115 + outer loop + vertex -173.49785359345213 -73.03604828088585 -10.392000269019471 + vertex -24.103042037166073 187.1209785653331 -10.30000000000005 + vertex -23.497853593452625 186.77157285444477 -10.39200026901956 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -166.65522356461946 -76.98664256999763 -22.185640646055063 + vertex -16.98941369878038 183.01392332925096 -22.34548132206257 + vertex -166.9894136987798 -76.79369780607962 -22.34548132206248 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -16.98941369878038 183.01392332925096 -22.34548132206257 + vertex -166.65522356461946 -76.98664256999763 -22.185640646055063 + vertex -16.655223564620044 182.8209785653329 -22.185640646055152 + endloop +endfacet +facet normal 0.6870641468694714 -0.39667667014558067 0.6087614290087208 + outer loop + vertex -175.75644761354434 -71.73204841539578 -14.909188309203646 + vertex -26.12804203716622 188.29011286044195 -14.350000000000055 + vertex -176.1280420371657 -71.51750827488864 -14.349999999999968 + endloop +endfacet +facet normal 0.6870641468694714 -0.39667667014558067 0.6087614290087208 + outer loop + vertex -26.12804203716622 188.29011286044195 -14.350000000000055 + vertex -175.75644761354434 -71.73204841539578 -14.909188309203646 + vertex -25.756447613544847 188.07557271993477 -14.909188309203735 + endloop +endfacet +facet normal -0.5272028623656435 0.3043807145043646 0.7933533402912507 + outer loop + vertex -166.36824799053372 -77.1523279949468 -21.93137084989845 + vertex -16.655223564620044 182.8209785653329 -22.185640646055152 + vertex -166.65522356461946 -76.98664256999763 -22.185640646055063 + endloop +endfacet +facet normal -0.5272028623656435 0.3043807145043646 0.7933533402912507 + outer loop + vertex -16.655223564620044 182.8209785653329 -22.185640646055152 + vertex -166.36824799053372 -77.1523279949468 -21.93137084989845 + vertex -16.368247990534318 182.6552931403837 -21.931370849898535 + endloop +endfacet +facet normal 0.33141357403559235 -0.19134171618249016 0.923879532511298 + outer loop + vertex -167.70667407651428 -76.3795873339156 -22.345481322062458 + vertex -18.040864210675128 183.6209785653329 -22.185640646055155 + vertex -168.0408642106746 -76.18664256999767 -22.185640646055052 + endloop +endfacet +facet normal 0.33141357403559235 -0.19134171618249016 0.923879532511298 + outer loop + vertex -18.040864210675128 183.6209785653329 -22.185640646055155 + vertex -167.70667407651428 -76.3795873339156 -22.345481322062458 + vertex -17.70667407651477 183.42803380141493 -22.345481322062547 + endloop +endfacet +facet normal -0.5272028623656518 0.3043807145043581 0.7933533402912477 + outer loop + vertex -172.44963646078696 -73.64123672459937 -14.90918830920364 + vertex -22.933907742057176 186.44597856533298 -15.33826859021802 + vertex -172.93390774205665 -73.36164256999754 -15.338268590217929 + endloop +endfacet +facet normal -0.5272028623656518 0.3043807145043581 0.7933533402912477 + outer loop + vertex -22.933907742057176 186.44597856533298 -15.33826859021802 + vertex -172.44963646078696 -73.64123672459937 -14.90918830920364 + vertex -22.449636460787545 186.16638441073113 -14.909188309203731 + endloop +endfacet +facet normal -0.3314135740355922 0.19134171618256895 0.9238795325112817 + outer loop + vertex -172.93390774205665 -73.36164256999754 -15.338268590217929 + vertex -23.49785359345274 186.77157285444454 -15.607999730980529 + vertex -173.4978535934522 -73.03604828088599 -15.607999730980426 + endloop +endfacet +facet normal -0.3314135740355922 0.19134171618256895 0.9238795325112817 + outer loop + vertex -23.49785359345274 186.77157285444454 -15.607999730980529 + vertex -172.93390774205665 -73.36164256999754 -15.338268590217929 + vertex -22.933907742057176 186.44597856533298 -15.33826859021802 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 0.1305261922200513 + outer loop + vertex -21.76477344694812 185.77097856533308 -13.000000000000021 + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + vertex -171.76477344694763 -74.03664256999745 -12.999999999999954 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 0.1305261922200513 + outer loop + vertex -171.84444801707352 -73.9906424354877 -13.69881142177675 + vertex -21.76477344694812 185.77097856533308 -13.000000000000021 + vertex -21.844448017074033 185.81697869984282 -13.698811421776819 + endloop +endfacet +facet normal 0.8586164364012798 -0.49572243068687166 -0.13052619222005538 + outer loop + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + endloop +endfacet +facet normal 0.8586164364012798 -0.49572243068687166 -0.13052619222005538 + outer loop + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -165.47229709936786 -77.6696054831421 -22.258819045102463 + vertex -15.472297099368376 182.13801565218841 -22.25881904510254 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -16.14804388764752 182.52815824230544 -21.600000000000065 + vertex -166.36824799053372 -77.1523279949468 -21.93137084989845 + vertex -166.148043887647 -77.27946289302511 -21.599999999999977 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -166.36824799053372 -77.1523279949468 -21.93137084989845 + vertex -16.14804388764752 182.52815824230544 -21.600000000000065 + vertex -16.368247990534318 182.6552931403837 -21.931370849898535 + endloop +endfacet +facet normal 0.3314135740356219 -0.19134171618251283 0.9238795325112827 + outer loop + vertex -174.7082304808791 -72.33723685910924 -15.60799973098044 + vertex -25.272176332275194 187.79597856533294 -15.338268590218007 + vertex -175.27217633227468 -72.01164256999762 -15.33826859021793 + endloop +endfacet +facet normal 0.3314135740356219 -0.19134171618251283 0.9238795325112827 + outer loop + vertex -25.272176332275194 187.79597856533294 -15.338268590218007 + vertex -174.7082304808791 -72.33723685910924 -15.60799973098044 + vertex -24.70823048087963 187.47038427622132 -15.607999730980517 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -18.04086421067506 183.620978565333 -19.41435935394494 + vertex -167.7066740765142 -76.37958733391552 -19.254518677937433 + vertex -168.04086421067453 -76.18664256999756 -19.41435935394484 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -167.7066740765142 -76.37958733391552 -19.254518677937433 + vertex -18.04086421067506 183.620978565333 -19.41435935394494 + vertex -17.706674076514748 183.42803380141498 -19.254518677937522 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + vertex -166.98941369877974 -76.79369780607954 -19.254518677937455 + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -166.98941369877974 -76.79369780607954 -19.254518677937455 + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + vertex -16.989413698780243 183.013923329251 -19.254518677937543 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868809 -0.1305261922200438 + outer loop + vertex -16.009617801666977 182.44823790430183 -20.385889527836035 + vertex -165.96240324159186 -77.38664256999755 -20.79999999999998 + vertex -166.00961780166648 -77.35938323102881 -20.385889527835946 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868809 -0.1305261922200438 + outer loop + vertex -165.96240324159186 -77.38664256999755 -20.79999999999998 + vertex -16.009617801666977 182.44823790430183 -20.385889527836035 + vertex -15.962403241592387 182.4209785653331 -20.800000000000065 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + vertex -168.6864699736275 -75.81390190896636 -20.385889527835893 + vertex -168.73368453370216 -75.78664256999762 -20.799999999999926 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -168.6864699736275 -75.81390190896636 -20.385889527835893 + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + vertex -18.686469973628014 183.99371922636428 -20.385889527835992 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -18.32783978476083 183.78666399028216 -21.931370849898517 + vertex -168.54804388764705 -75.89382224697007 -21.599999999999945 + vertex -168.32783978476033 -76.0209571450484 -21.931370849898414 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -168.54804388764705 -75.89382224697007 -21.599999999999945 + vertex -18.32783978476083 183.78666399028216 -21.931370849898517 + vertex -18.548043887647626 183.91379888836042 -21.600000000000044 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -16.009617801666703 182.44823790430226 -4.78588952783602 + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -16.009617801666703 182.44823790430226 -4.78588952783602 + vertex -15.962403241592185 182.42097856533346 -5.200000000000053 + endloop +endfacet +facet normal -0.5272028623657163 0.3043807145043165 -0.7933533402912205 + outer loop + vertex -16.655223564619952 182.82097856533304 -19.414359353944935 + vertex -166.36824799053372 -77.15232799494673 -19.668629150101488 + vertex -166.65522356461943 -76.98664256999751 -19.41435935394485 + endloop +endfacet +facet normal -0.5272028623657163 0.3043807145043165 -0.7933533402912205 + outer loop + vertex -166.36824799053372 -77.15232799494673 -19.668629150101488 + vertex -16.655223564619952 182.82097856533304 -19.414359353944935 + vertex -16.368247990534183 182.65529314038383 -19.668629150101573 + endloop +endfacet +facet normal 0.11303899832176201 -0.06526309611003285 -0.991444861373816 + outer loop + vertex -17.706674076514748 183.42803380141498 -19.254518677937522 + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + vertex -167.7066740765142 -76.37958733391552 -19.254518677937433 + endloop +endfacet +facet normal 0.11303899832176201 -0.06526309611003285 -0.991444861373816 + outer loop + vertex -167.34804388764698 -76.58664256999752 -19.19999999999996 + vertex -17.706674076514748 183.42803380141498 -19.254518677937522 + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -165.96240324159186 -77.38664256999755 -20.79999999999998 + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + vertex -166.0096178016665 -77.35938323102883 -21.21411047216401 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + vertex -165.96240324159186 -77.38664256999755 -20.79999999999998 + vertex -15.962403241592387 182.4209785653331 -20.800000000000065 + endloop +endfacet +facet normal 0.3314135740355431 -0.1913417161825406 -0.9238795325113052 + outer loop + vertex -18.04086421067479 183.62097856533347 -3.8143593539449228 + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + endloop +endfacet +facet normal 0.3314135740355431 -0.1913417161825406 -0.9238795325113052 + outer loop + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + vertex -18.04086421067479 183.62097856533347 -3.8143593539449228 + vertex -17.70667407651443 183.42803380141552 -3.6545186779375283 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -166.36824799053372 -77.15232799494673 -19.668629150101488 + vertex -16.148043887647475 182.52815824230547 -20.000000000000046 + vertex -166.14804388764696 -77.27946289302508 -19.999999999999957 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -16.148043887647475 182.52815824230547 -20.000000000000046 + vertex -166.36824799053372 -77.15232799494673 -19.668629150101488 + vertex -16.368247990534183 182.65529314038383 -19.668629150101573 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -16.148043887647294 182.52815824230598 -4.400000000000054 + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -16.148043887647294 182.52815824230598 -4.400000000000054 + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -16.368247990533934 182.6552931403843 -4.068629150101582 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -18.733684533702444 184.0209785653334 -5.200000000000033 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -18.733684533702444 184.0209785653334 -5.200000000000033 + vertex -18.686469973627744 183.99371922636468 -4.785889527836001 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -16.98941369877997 183.01392332925155 -3.6545186779375283 + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + vertex -16.98941369877997 183.01392332925155 -3.6545186779375283 + vertex -16.65522356461966 182.82097856533352 -3.8143593539449454 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + vertex -16.009617801666703 182.44823790430226 -4.78588952783602 + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -16.009617801666703 182.44823790430226 -4.78588952783602 + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + vertex -16.148043887647294 182.52815824230598 -4.400000000000054 + endloop +endfacet +facet normal -0.33141357403559024 0.19134171618248894 -0.923879532511299 + outer loop + vertex -16.989413698780243 183.013923329251 -19.254518677937543 + vertex -166.65522356461943 -76.98664256999751 -19.41435935394485 + vertex -166.98941369877974 -76.79369780607954 -19.254518677937455 + endloop +endfacet +facet normal -0.33141357403559024 0.19134171618248894 -0.923879532511299 + outer loop + vertex -166.65522356461943 -76.98664256999751 -19.41435935394485 + vertex -16.989413698780243 183.013923329251 -19.254518677937543 + vertex -16.655223564619952 182.82097856533304 -19.414359353944935 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -18.32783978476081 183.78666399028225 -19.668629150101555 + vertex -168.04086421067453 -76.18664256999756 -19.41435935394484 + vertex -168.32783978476027 -76.02095714504833 -19.668629150101452 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -168.04086421067453 -76.18664256999756 -19.41435935394484 + vertex -18.32783978476081 183.78666399028225 -19.668629150101555 + vertex -18.04086421067506 183.620978565333 -19.41435935394494 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -15.962403241592185 182.42097856533346 -5.200000000000053 + endloop +endfacet +facet normal 0.5272028623656568 -0.30438071450436105 -0.7933533402912432 + outer loop + vertex -18.327839784760513 183.78666399028273 -4.068629150101538 + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + endloop +endfacet +facet normal 0.5272028623656568 -0.30438071450436105 -0.7933533402912432 + outer loop + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + vertex -18.327839784760513 183.78666399028273 -4.068629150101538 + vertex -18.04086421067479 183.62097856533347 -3.8143593539449228 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -18.686469973627744 183.99371922636468 -4.785889527836001 + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + vertex -18.686469973627744 183.99371922636468 -4.785889527836001 + vertex -18.548043887647335 183.91379888836096 -4.400000000000034 + endloop +endfacet +facet normal 0.8586164364012763 -0.4957224306868808 0.1305261922200434 + outer loop + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + vertex -168.73368453370216 -75.78664256999762 -20.799999999999926 + endloop +endfacet +facet normal 0.8586164364012763 -0.4957224306868808 0.1305261922200434 + outer loop + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + vertex -18.68646997362806 183.99371922636422 -21.21411047216408 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -18.686469973628014 183.99371922636428 -20.385889527835992 + vertex -168.54804388764703 -75.89382224697005 -19.999999999999925 + vertex -168.6864699736275 -75.81390190896636 -20.385889527835893 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -168.54804388764703 -75.89382224697005 -19.999999999999925 + vertex -18.686469973628014 183.99371922636428 -20.385889527835992 + vertex -18.548043887647516 183.91379888836056 -20.000000000000025 + endloop +endfacet +facet normal -0.8001031451913012 0.4619397662555992 -0.38268343236506847 + outer loop + vertex -166.14804388764696 -77.27946289302508 -19.999999999999957 + vertex -16.009617801666977 182.44823790430183 -20.385889527836035 + vertex -166.00961780166648 -77.35938323102881 -20.385889527835946 + endloop +endfacet +facet normal -0.8001031451913012 0.4619397662555992 -0.38268343236506847 + outer loop + vertex -16.009617801666977 182.44823790430183 -20.385889527836035 + vertex -166.14804388764696 -77.27946289302508 -19.999999999999957 + vertex -16.148043887647475 182.52815824230547 -20.000000000000046 + endloop +endfacet +facet normal 0.11303899832181014 -0.06526309611005923 -0.9914448613738089 + outer loop + vertex -17.70667407651443 183.42803380141552 -3.6545186779375283 + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + endloop +endfacet +facet normal 0.11303899832181014 -0.06526309611005923 -0.9914448613738089 + outer loop + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + vertex -17.70667407651443 183.42803380141552 -3.6545186779375283 + vertex -17.3480438876472 183.2209785653335 -3.600000000000033 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -17.3480438876472 183.2209785653335 -3.600000000000033 + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + vertex -17.3480438876472 183.2209785653335 -3.600000000000033 + vertex -16.98941369877997 183.01392332925155 -3.6545186779375283 + endloop +endfacet +facet normal 0.8001031451912916 -0.46193976625560496 0.38268343236508173 + outer loop + vertex -18.548043887647626 183.91379888836042 -21.600000000000044 + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + vertex -168.54804388764705 -75.89382224697007 -21.599999999999945 + endloop +endfacet +facet normal 0.8001031451912916 -0.46193976625560496 0.38268343236508173 + outer loop + vertex -168.68646997362754 -75.81390190896637 -21.21411047216398 + vertex -18.548043887647626 183.91379888836042 -21.600000000000044 + vertex -18.68646997362806 183.99371922636422 -21.21411047216408 + endloop +endfacet +facet normal 0.5272028623657087 -0.3043807145043233 0.7933533402912231 + outer loop + vertex -168.0408642106746 -76.18664256999767 -22.185640646055052 + vertex -18.32783978476083 183.78666399028216 -21.931370849898517 + vertex -168.32783978476033 -76.0209571450484 -21.931370849898414 + endloop +endfacet +facet normal 0.5272028623657087 -0.3043807145043233 0.7933533402912231 + outer loop + vertex -18.32783978476083 183.78666399028216 -21.931370849898517 + vertex -168.0408642106746 -76.18664256999767 -22.185640646055052 + vertex -18.040864210675128 183.6209785653329 -22.185640646055155 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -16.65522356461966 182.82097856533352 -3.8143593539449454 + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -16.65522356461966 182.82097856533352 -3.8143593539449454 + vertex -16.368247990533934 182.6552931403843 -4.068629150101582 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + vertex -166.148043887647 -77.27946289302511 -21.599999999999977 + vertex -166.0096178016665 -77.35938323102883 -21.21411047216401 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -166.148043887647 -77.27946289302511 -21.599999999999977 + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + vertex -16.14804388764752 182.52815824230544 -21.600000000000065 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + vertex -16.148043887647294 182.52815824230586 -6.000000000000051 + endloop +endfacet +facet normal 0.6870641468694545 -0.39667667014561614 -0.6087614290087167 + outer loop + vertex -18.548043887647335 183.91379888836096 -4.400000000000034 + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + endloop +endfacet +facet normal 0.6870641468694545 -0.39667667014561614 -0.6087614290087167 + outer loop + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + vertex -18.548043887647335 183.91379888836096 -4.400000000000034 + vertex -18.327839784760513 183.78666399028273 -4.068629150101538 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -18.548043887647516 183.91379888836056 -20.000000000000025 + vertex -168.32783978476027 -76.02095714504833 -19.668629150101452 + vertex -168.54804388764703 -75.89382224697005 -19.999999999999925 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -168.32783978476027 -76.02095714504833 -19.668629150101452 + vertex -18.548043887647516 183.91379888836056 -20.000000000000025 + vertex -18.32783978476081 183.78666399028225 -19.668629150101555 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -182.24368083273936 -67.9866425699975 -5.199999999999923 + vertex -32.19646627266526 191.79371922636432 -4.785889527835981 + vertex -182.19646627266474 -68.01390190896625 -4.785889527835891 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -32.19646627266526 191.79371922636432 -4.785889527835981 + vertex -182.24368083273936 -67.9866425699975 -5.199999999999923 + vertex -32.24368083273991 191.82097856533298 -5.200000000000013 + endloop +endfacet +facet normal -0.5272028623657087 0.3043807145043233 -0.7933533402912231 + outer loop + vertex -30.16521986365713 190.6209785653331 -3.814359353944937 + vertex -179.8782442895709 -69.35232799494665 -4.068629150101484 + vertex -180.1652198636566 -69.18664256999742 -3.814359353944847 + endloop +endfacet +facet normal -0.5272028623657087 0.3043807145043233 -0.7933533402912231 + outer loop + vertex -179.8782442895709 -69.35232799494665 -4.068629150101484 + vertex -30.16521986365713 190.6209785653331 -3.814359353944937 + vertex -29.878244289571427 190.4552931403839 -4.068629150101574 + endloop +endfacet +facet normal 0.331413574035631 -0.19134171618251528 0.9238795325112789 + outer loop + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + vertex -18.040864210674833 183.62097856533344 -6.585640646055137 + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + endloop +endfacet +facet normal 0.331413574035631 -0.19134171618251528 0.9238795325112789 + outer loop + vertex -18.040864210674833 183.62097856533344 -6.585640646055137 + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + vertex -17.706674076514567 183.42803380141538 -6.745481322062554 + endloop +endfacet +facet normal -0.5272028623656505 0.3043807145043517 0.7933533402912508 + outer loop + vertex -179.87824428957094 -69.35232799494672 -6.3313708498984465 + vertex -30.165219863657196 190.62097856533308 -6.585640646055151 + vertex -180.1652198636567 -69.1866425699975 -6.585640646055061 + endloop +endfacet +facet normal -0.5272028623656505 0.3043807145043517 0.7933533402912508 + outer loop + vertex -30.165219863657196 190.62097856533308 -6.585640646055151 + vertex -179.87824428957094 -69.35232799494672 -6.3313708498984465 + vertex -29.878244289571473 190.45529314038384 -6.331370849898536 + endloop +endfacet +facet normal -0.5272028623656863 0.30438071450437804 0.7933533402912171 + outer loop + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -16.655223564619703 182.82097856533343 -6.585640646055159 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + endloop +endfacet +facet normal -0.5272028623656863 0.30438071450437804 0.7933533402912171 + outer loop + vertex -16.655223564619703 182.82097856533343 -6.585640646055159 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -16.36824799053398 182.65529314038423 -6.331370849898522 + endloop +endfacet +facet normal 0.6870641468694759 -0.39667667014558894 0.6087614290087102 + outer loop + vertex -18.32783978476065 183.78666399028262 -6.3313708498985 + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + endloop +endfacet +facet normal 0.6870641468694759 -0.39667667014558894 0.6087614290087102 + outer loop + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -18.32783978476065 183.78666399028262 -6.3313708498985 + vertex -18.548043887647314 183.91379888836096 -6.000000000000031 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -31.550860509712304 191.42097856533306 -3.8143593539449396 + vertex -181.2166703755514 -68.57958733391541 -3.654518677937407 + vertex -181.55086050971175 -68.38664256999745 -3.8143593539448384 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -181.2166703755514 -68.57958733391541 -3.654518677937407 + vertex -31.550860509712304 191.42097856533306 -3.8143593539449396 + vertex -31.216670375551946 191.22803380141514 -3.65451867793752 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -32.058040186684785 191.71379888836057 -4.400000000000015 + vertex -181.83783608379747 -68.22095714504822 -4.068629150101453 + vertex -182.05804018668422 -68.09382224696995 -4.399999999999924 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -181.83783608379747 -68.22095714504822 -4.068629150101453 + vertex -32.058040186684785 191.71379888836057 -4.400000000000015 + vertex -31.837836083797985 191.58666399028237 -4.068629150101555 + endloop +endfacet +facet normal -0.33141357403559235 0.19134171618249016 -0.923879532511298 + outer loop + vertex -30.49940999781753 190.81392332925108 -3.6545186779375425 + vertex -180.1652198636566 -69.18664256999742 -3.814359353944847 + vertex -180.4994099978169 -68.99369780607941 -3.654518677937452 + endloop +endfacet +facet normal -0.33141357403559235 0.19134171618249016 -0.923879532511298 + outer loop + vertex -180.1652198636566 -69.18664256999742 -3.814359353944847 + vertex -30.49940999781753 190.81392332925108 -3.6545186779375425 + vertex -30.16521986365713 190.6209785653331 -3.814359353944937 + endloop +endfacet +facet normal -0.11303899832180345 0.06526309611005678 0.9914448613738097 + outer loop + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + vertex -17.348043887647314 183.2209785653335 -6.80000000000005 + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + endloop +endfacet +facet normal -0.11303899832180345 0.06526309611005678 0.9914448613738097 + outer loop + vertex -17.348043887647314 183.2209785653335 -6.80000000000005 + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + vertex -16.989413698780062 183.0139233292514 -6.745481322062554 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -179.8782442895709 -69.35232799494665 -4.068629150101484 + vertex -29.658040186684765 190.32815824230553 -4.400000000000046 + vertex -179.65804018668416 -69.47946289302497 -4.399999999999955 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -29.658040186684765 190.32815824230553 -4.400000000000046 + vertex -179.8782442895709 -69.35232799494665 -4.068629150101484 + vertex -29.878244289571427 190.4552931403839 -4.068629150101574 + endloop +endfacet +facet normal -0.8001031451912916 0.46193976625560496 -0.38268343236508173 + outer loop + vertex -179.65804018668416 -69.47946289302497 -4.399999999999955 + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -179.5196141007037 -69.55938323102869 -4.785889527835922 + endloop +endfacet +facet normal -0.8001031451912916 0.46193976625560496 -0.38268343236508173 + outer loop + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -179.65804018668416 -69.47946289302497 -4.399999999999955 + vertex -29.658040186684765 190.32815824230553 -4.400000000000046 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868808 -0.1305261922200434 + outer loop + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -179.47239954062908 -69.58664256999745 -5.199999999999976 + vertex -179.5196141007037 -69.55938323102869 -4.785889527835922 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868808 -0.1305261922200434 + outer loop + vertex -179.47239954062908 -69.58664256999745 -5.199999999999976 + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -29.472399540629656 190.22097856533307 -5.200000000000067 + endloop +endfacet +facet normal -0.6870641468694373 0.39667667014560615 0.6087614290087427 + outer loop + vertex -16.148043887647294 182.52815824230586 -6.000000000000051 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + endloop +endfacet +facet normal -0.6870641468694373 0.39667667014560615 0.6087614290087427 + outer loop + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -16.148043887647294 182.52815824230586 -6.000000000000051 + vertex -16.36824799053398 182.65529314038423 -6.331370849898522 + endloop +endfacet +facet normal 0.85861643640128 -0.4957224306868831 0.13052619222001063 + outer loop + vertex -18.68646997362779 183.99371922636473 -5.6141104721640644 + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + endloop +endfacet +facet normal 0.85861643640128 -0.4957224306868831 0.13052619222001063 + outer loop + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + vertex -18.68646997362779 183.99371922636473 -5.6141104721640644 + vertex -18.733684533702444 184.0209785653334 -5.200000000000033 + endloop +endfacet +facet normal 0.33141357403559024 -0.19134171618248894 0.923879532511299 + outer loop + vertex -181.2166703755515 -68.57958733391551 -6.7454813220624334 + vertex -31.550860509712372 191.42097856533303 -6.585640646055154 + vertex -181.55086050971184 -68.38664256999753 -6.585640646055053 + endloop +endfacet +facet normal 0.33141357403559024 -0.19134171618248894 0.923879532511299 + outer loop + vertex -31.550860509712372 191.42097856533303 -6.585640646055154 + vertex -181.2166703755515 -68.57958733391551 -6.7454813220624334 + vertex -31.216670375552013 191.22803380141505 -6.745481322062546 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -31.837836083798095 191.58666399028218 -6.331370849898517 + vertex -182.05804018668428 -68.09382224696996 -5.999999999999944 + vertex -181.83783608379753 -68.22095714504829 -6.331370849898415 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -182.05804018668428 -68.09382224696996 -5.999999999999944 + vertex -31.837836083798095 191.58666399028218 -6.331370849898517 + vertex -32.058040186684785 191.71379888836057 -6.000000000000034 + endloop +endfacet +facet normal -0.11303899832184437 0.06526309610999445 -0.9914448613738092 + outer loop + vertex -30.85804018668474 191.02097856533317 -3.600000000000047 + vertex -180.4994099978169 -68.99369780607941 -3.654518677937452 + vertex -180.8580401866842 -68.78664256999744 -3.5999999999999566 + endloop +endfacet +facet normal -0.11303899832184437 0.06526309610999445 -0.9914448613738092 + outer loop + vertex -180.4994099978169 -68.99369780607941 -3.654518677937452 + vertex -30.85804018668474 191.02097856533317 -3.600000000000047 + vertex -30.49940999781753 190.81392332925108 -3.6545186779375425 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -29.65804018668472 190.32815824230553 -6.000000000000065 + vertex -179.87824428957094 -69.35232799494672 -6.3313708498984465 + vertex -179.65804018668422 -69.47946289302502 -5.999999999999975 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -179.87824428957094 -69.35232799494672 -6.3313708498984465 + vertex -29.65804018668472 190.32815824230553 -6.000000000000065 + vertex -29.878244289571473 190.45529314038384 -6.331370849898536 + endloop +endfacet +facet normal 0.5272028623657163 -0.3043807145043165 0.7933533402912205 + outer loop + vertex -181.55086050971184 -68.38664256999753 -6.585640646055053 + vertex -31.837836083798095 191.58666399028218 -6.331370849898517 + vertex -181.83783608379753 -68.22095714504829 -6.331370849898415 + endloop +endfacet +facet normal 0.5272028623657163 -0.3043807145043165 0.7933533402912205 + outer loop + vertex -31.837836083798095 191.58666399028218 -6.331370849898517 + vertex -181.55086050971184 -68.38664256999753 -6.585640646055053 + vertex -31.550860509712372 191.42097856533303 -6.585640646055154 + endloop +endfacet +facet normal -0.33141357403555843 0.19134171618255227 0.9238795325112973 + outer loop + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + vertex -16.989413698780062 183.0139233292514 -6.745481322062554 + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + endloop +endfacet +facet normal -0.33141357403555843 0.19134171618255227 0.9238795325112973 + outer loop + vertex -16.989413698780062 183.0139233292514 -6.745481322062554 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + vertex -16.655223564619703 182.82097856533343 -6.585640646055159 + endloop +endfacet +facet normal 0.5272028623657142 -0.3043807145043265 0.7933533402912182 + outer loop + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + vertex -18.32783978476065 183.78666399028262 -6.3313708498985 + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + endloop +endfacet +facet normal 0.5272028623657142 -0.3043807145043265 0.7933533402912182 + outer loop + vertex -18.32783978476065 183.78666399028262 -6.3313708498985 + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + vertex -18.040864210674833 183.62097856533344 -6.585640646055137 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -32.19646627266526 191.79371922636432 -4.785889527835981 + vertex -182.05804018668422 -68.09382224696995 -4.399999999999924 + vertex -182.19646627266474 -68.01390190896625 -4.785889527835891 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -182.05804018668422 -68.09382224696995 -4.399999999999924 + vertex -32.19646627266526 191.79371922636432 -4.785889527835981 + vertex -32.058040186684785 191.71379888836057 -4.400000000000015 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -29.472399540629656 190.22097856533307 -5.200000000000067 + vertex -179.5196141007037 -69.5593832310287 -5.6141104721640085 + vertex -179.47239954062908 -69.58664256999745 -5.199999999999976 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -179.5196141007037 -69.5593832310287 -5.6141104721640085 + vertex -29.472399540629656 190.22097856533307 -5.200000000000067 + vertex -29.51961410070422 190.24823790430182 -5.614110472164098 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -31.837836083797985 191.58666399028237 -4.068629150101555 + vertex -181.55086050971175 -68.38664256999745 -3.8143593539448384 + vertex -181.83783608379747 -68.22095714504822 -4.068629150101453 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -181.55086050971175 -68.38664256999745 -3.8143593539448384 + vertex -31.837836083797985 191.58666399028237 -4.068629150101555 + vertex -31.550860509712304 191.42097856533306 -3.8143593539449396 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -180.85804018668426 -68.78664256999751 -6.799999999999951 + vertex -31.216670375552013 191.22803380141505 -6.745481322062546 + vertex -181.2166703755515 -68.57958733391551 -6.7454813220624334 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -31.216670375552013 191.22803380141505 -6.745481322062546 + vertex -180.85804018668426 -68.78664256999751 -6.799999999999951 + vertex -30.858040186684786 191.02097856533302 -6.800000000000041 + endloop +endfacet +facet normal 0.8586164364012764 -0.49572243068688093 0.13052619222004297 + outer loop + vertex -32.19646627266526 191.79371922636426 -5.614110472164045 + vertex -182.24368083273936 -67.9866425699975 -5.199999999999923 + vertex -182.19646627266476 -68.01390190896626 -5.614110472163954 + endloop +endfacet +facet normal 0.8586164364012764 -0.49572243068688093 0.13052619222004297 + outer loop + vertex -182.24368083273936 -67.9866425699975 -5.199999999999923 + vertex -32.19646627266526 191.79371922636426 -5.614110472164045 + vertex -32.24368083273991 191.82097856533298 -5.200000000000013 + endloop +endfacet +facet normal 0.8001031451912812 -0.46193976625559896 0.3826834323651106 + outer loop + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -18.68646997362779 183.99371922636473 -5.6141104721640644 + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + endloop +endfacet +facet normal 0.8001031451912812 -0.46193976625559896 0.3826834323651106 + outer loop + vertex -18.68646997362779 183.99371922636473 -5.6141104721640644 + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -18.548043887647314 183.91379888836096 -6.000000000000031 + endloop +endfacet +facet normal 0.11303899832176335 -0.06526309611003223 -0.9914448613738159 + outer loop + vertex -31.216670375551946 191.22803380141514 -3.65451867793752 + vertex -180.8580401866842 -68.78664256999744 -3.5999999999999566 + vertex -181.2166703755514 -68.57958733391541 -3.654518677937407 + endloop +endfacet +facet normal 0.11303899832176335 -0.06526309611003223 -0.9914448613738159 + outer loop + vertex -180.8580401866842 -68.78664256999744 -3.5999999999999566 + vertex -31.216670375551946 191.22803380141514 -3.65451867793752 + vertex -30.85804018668474 191.02097856533317 -3.600000000000047 + endloop +endfacet +facet normal 0.8001031451913012 -0.4619397662555992 0.38268343236506847 + outer loop + vertex -32.058040186684785 191.71379888836057 -6.000000000000034 + vertex -182.19646627266476 -68.01390190896626 -5.614110472163954 + vertex -182.05804018668428 -68.09382224696996 -5.999999999999944 + endloop +endfacet +facet normal 0.8001031451913012 -0.4619397662555992 0.38268343236506847 + outer loop + vertex -182.19646627266476 -68.01390190896626 -5.614110472163954 + vertex -32.058040186684785 191.71379888836057 -6.000000000000034 + vertex -32.19646627266526 191.79371922636426 -5.614110472164045 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -29.51961410070422 190.24823790430182 -5.614110472164098 + vertex -179.65804018668422 -69.47946289302502 -5.999999999999975 + vertex -179.5196141007037 -69.5593832310287 -5.6141104721640085 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -179.65804018668422 -69.47946289302502 -5.999999999999975 + vertex -29.51961410070422 190.24823790430182 -5.614110472164098 + vertex -29.65804018668472 190.32815824230553 -6.000000000000065 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + vertex -17.706674076514567 183.42803380141538 -6.745481322062554 + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -17.706674076514567 183.42803380141538 -6.745481322062554 + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + vertex -17.348043887647314 183.2209785653335 -6.80000000000005 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -29.658040186684968 190.3281582423051 -20.000000000000025 + vertex -179.51961410070396 -69.55938323102919 -20.385889527835904 + vertex -179.6580401866845 -69.47946289302546 -19.99999999999994 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -179.51961410070396 -69.55938323102919 -20.385889527835904 + vertex -29.658040186684968 190.3281582423051 -20.000000000000025 + vertex -29.519614100704466 190.24823790430136 -20.385889527835992 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -29.519614100704466 190.24823790430136 -20.385889527835992 + vertex -179.47239954062937 -69.58664256999793 -20.799999999999937 + vertex -179.51961410070396 -69.55938323102919 -20.385889527835904 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -179.47239954062937 -69.58664256999793 -20.799999999999937 + vertex -29.519614100704466 190.24823790430136 -20.385889527835992 + vertex -29.47239954062988 190.22097856533262 -20.800000000000026 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -29.519614100704512 190.24823790430136 -21.214110472164055 + vertex -179.6580401866845 -69.4794628930255 -21.599999999999934 + vertex -179.519614100704 -69.5593832310292 -21.21411047216397 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -179.6580401866845 -69.4794628930255 -21.599999999999934 + vertex -29.519614100704512 190.24823790430136 -21.214110472164055 + vertex -29.658040186685035 190.32815824230505 -21.600000000000023 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -29.47239954062988 190.22097856533262 -20.800000000000026 + vertex -179.519614100704 -69.5593832310292 -21.21411047216397 + vertex -179.47239954062937 -69.58664256999793 -20.799999999999937 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -179.519614100704 -69.5593832310292 -21.21411047216397 + vertex -29.47239954062988 190.22097856533262 -20.800000000000026 + vertex -29.519614100704512 190.24823790430136 -21.214110472164055 + endloop +endfacet +facet normal -0.11303899832176201 0.06526309611003285 0.991444861373816 + outer loop + vertex -180.499409997817 -68.99369780607952 -6.745481322062478 + vertex -30.858040186684786 191.02097856533302 -6.800000000000041 + vertex -180.85804018668426 -68.78664256999751 -6.799999999999951 + endloop +endfacet +facet normal -0.11303899832176201 0.06526309611003285 0.991444861373816 + outer loop + vertex -30.858040186684786 191.02097856533302 -6.800000000000041 + vertex -180.499409997817 -68.99369780607952 -6.745481322062478 + vertex -30.49940999781753 190.81392332925108 -6.7454813220625685 + endloop +endfacet +facet normal -0.11303899832181014 0.06526309611005923 0.9914448613738089 + outer loop + vertex -180.49940999781734 -68.99369780607998 -22.34548132206245 + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + endloop +endfacet +facet normal -0.11303899832181014 0.06526309611005923 0.9914448613738089 + outer loop + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + vertex -180.49940999781734 -68.99369780607998 -22.34548132206245 + vertex -30.499409997817825 190.81392332925054 -22.34548132206253 + endloop +endfacet +facet normal 0.85861643640128 -0.49572243068688304 0.13052619222001038 + outer loop + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + vertex -182.2436808327396 -67.986642569998 -20.79999999999993 + vertex -182.19646627266502 -68.01390190896676 -21.21411047216396 + endloop +endfacet +facet normal 0.85861643640128 -0.49572243068688304 0.13052619222001038 + outer loop + vertex -182.2436808327396 -67.986642569998 -20.79999999999993 + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + vertex -32.24368083274021 191.82097856533252 -20.800000000000015 + endloop +endfacet +facet normal 0.6870641468694346 -0.3966766701456103 -0.6087614290087431 + outer loop + vertex -32.0580401866851 191.7137988883601 -20.000000000000018 + vertex -181.83783608379773 -68.2209571450487 -19.66862915010146 + vertex -182.0580401866845 -68.09382224697045 -19.99999999999993 + endloop +endfacet +facet normal 0.6870641468694346 -0.3966766701456103 -0.6087614290087431 + outer loop + vertex -181.83783608379773 -68.2209571450487 -19.66862915010146 + vertex -32.0580401866851 191.7137988883601 -20.000000000000018 + vertex -31.837836083798276 191.58666399028183 -19.668629150101545 + endloop +endfacet +facet normal -0.3314135740355431 0.1913417161825406 0.9238795325113052 + outer loop + vertex -180.16521986365697 -69.186642569998 -22.18564064605505 + vertex -30.499409997817825 190.81392332925054 -22.34548132206253 + vertex -180.49940999781734 -68.99369780607998 -22.34548132206245 + endloop +endfacet +facet normal -0.3314135740355431 0.1913417161825406 0.9238795325113052 + outer loop + vertex -30.499409997817825 190.81392332925054 -22.34548132206253 + vertex -180.16521986365697 -69.186642569998 -22.18564064605505 + vertex -30.165219863657466 190.62097856533256 -22.185640646055134 + endloop +endfacet +facet normal 0.5272028623656863 -0.30438071450437804 -0.7933533402912171 + outer loop + vertex -31.837836083798276 191.58666399028183 -19.668629150101545 + vertex -181.55086050971204 -68.38664256999796 -19.41435935394482 + vertex -181.83783608379773 -68.2209571450487 -19.66862915010146 + endloop +endfacet +facet normal 0.5272028623656863 -0.30438071450437804 -0.7933533402912171 + outer loop + vertex -181.55086050971204 -68.38664256999796 -19.41435935394482 + vertex -31.837836083798276 191.58666399028183 -19.668629150101545 + vertex -31.550860509712553 191.42097856533266 -19.414359353944903 + endloop +endfacet +facet normal 0.5272028623656848 -0.30438071450430954 0.7933533402912443 + outer loop + vertex -181.55086050971215 -68.38664256999803 -22.185640646055035 + vertex -31.83783608379839 191.58666399028175 -21.931370849898506 + vertex -181.8378360837978 -68.22095714504879 -21.93137084989842 + endloop +endfacet +facet normal 0.5272028623656848 -0.30438071450430954 0.7933533402912443 + outer loop + vertex -31.83783608379839 191.58666399028175 -21.931370849898506 + vertex -181.55086050971215 -68.38664256999803 -22.185640646055035 + vertex -31.550860509712596 191.42097856533258 -22.185640646055123 + endloop +endfacet +facet normal 0.11303899832180345 -0.06526309611005678 -0.9914448613738097 + outer loop + vertex -31.216670375552287 191.2280338014146 -19.254518677937508 + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + vertex -181.21667037555167 -68.57958733391588 -19.254518677937426 + endloop +endfacet +facet normal 0.11303899832180345 -0.06526309611005678 -0.9914448613738097 + outer loop + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + vertex -31.216670375552287 191.2280338014146 -19.254518677937508 + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -30.1652198636574 190.6209785653327 -19.414359353944917 + vertex -179.87824428957117 -69.35232799494715 -19.668629150101474 + vertex -180.1652198636569 -69.18664256999789 -19.414359353944835 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -179.87824428957117 -69.35232799494715 -19.668629150101474 + vertex -30.1652198636574 190.6209785653327 -19.414359353944917 + vertex -29.87824428957172 190.4552931403834 -19.668629150101555 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -179.87824428957117 -69.35232799494715 -19.668629150101474 + vertex -29.658040186684968 190.3281582423051 -20.000000000000025 + vertex -179.6580401866845 -69.47946289302546 -19.99999999999994 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -29.658040186684968 190.3281582423051 -20.000000000000025 + vertex -179.87824428957117 -69.35232799494715 -19.668629150101474 + vertex -29.87824428957172 190.4552931403834 -19.668629150101555 + endloop +endfacet +facet normal 0.6870641468695006 -0.39667667014558633 0.608761429008684 + outer loop + vertex -31.83783608379839 191.58666399028175 -21.931370849898506 + vertex -182.05804018668454 -68.09382224697046 -21.599999999999927 + vertex -181.8378360837978 -68.22095714504879 -21.93137084989842 + endloop +endfacet +facet normal 0.6870641468695006 -0.39667667014558633 0.608761429008684 + outer loop + vertex -182.05804018668454 -68.09382224697046 -21.599999999999927 + vertex -31.83783608379839 191.58666399028175 -21.931370849898506 + vertex -32.05804018668512 191.71379888836003 -21.600000000000016 + endloop +endfacet +facet normal 0.3314135740356312 -0.1913417161825154 0.9238795325112787 + outer loop + vertex -181.21667037555176 -68.57958733391598 -22.34548132206245 + vertex -31.550860509712596 191.42097856533258 -22.185640646055123 + vertex -181.55086050971215 -68.38664256999803 -22.185640646055035 + endloop +endfacet +facet normal 0.3314135740356312 -0.1913417161825154 0.9238795325112787 + outer loop + vertex -31.550860509712596 191.42097856533258 -22.185640646055123 + vertex -181.21667037555176 -68.57958733391598 -22.34548132206245 + vertex -31.216670375552287 191.22803380141454 -22.345481322062533 + endloop +endfacet +facet normal -0.5272028623656586 0.30438071450435644 0.7933533402912438 + outer loop + vertex -179.87824428957123 -69.35232799494719 -21.93137084989843 + vertex -30.165219863657466 190.62097856533256 -22.185640646055134 + vertex -180.16521986365697 -69.186642569998 -22.18564064605505 + endloop +endfacet +facet normal -0.5272028623656586 0.30438071450435644 0.7933533402912438 + outer loop + vertex -30.165219863657466 190.62097856533256 -22.185640646055134 + vertex -179.87824428957123 -69.35232799494719 -21.93137084989843 + vertex -29.878244289571743 190.45529314038336 -21.931370849898517 + endloop +endfacet +facet normal 0.8001031451912812 -0.461939766255599 0.38268343236511043 + outer loop + vertex -182.05804018668454 -68.09382224697046 -21.599999999999927 + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + vertex -182.19646627266502 -68.01390190896676 -21.21411047216396 + endloop +endfacet +facet normal 0.8001031451912812 -0.461939766255599 0.38268343236511043 + outer loop + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + vertex -182.05804018668454 -68.09382224697046 -21.599999999999927 + vertex -32.05804018668512 191.71379888836003 -21.600000000000016 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -182.19646627266502 -68.01390190896674 -20.385889527835896 + vertex -32.0580401866851 191.7137988883601 -20.000000000000018 + vertex -182.0580401866845 -68.09382224697045 -19.99999999999993 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -32.0580401866851 191.7137988883601 -20.000000000000018 + vertex -182.19646627266502 -68.01390190896674 -20.385889527835896 + vertex -32.1964662726655 191.79371922636386 -20.385889527835985 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -180.1652198636567 -69.1866425699975 -6.585640646055061 + vertex -30.49940999781753 190.81392332925108 -6.7454813220625685 + vertex -180.499409997817 -68.99369780607952 -6.745481322062478 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -30.49940999781753 190.81392332925108 -6.7454813220625685 + vertex -180.1652198636567 -69.1866425699975 -6.585640646055061 + vertex -30.165219863657196 190.62097856533308 -6.585640646055151 + endloop +endfacet +facet normal -0.6870641468694545 0.39667667014561614 0.6087614290087167 + outer loop + vertex -29.658040186685035 190.32815824230505 -21.600000000000023 + vertex -179.87824428957123 -69.35232799494719 -21.93137084989843 + vertex -179.6580401866845 -69.4794628930255 -21.599999999999934 + endloop +endfacet +facet normal -0.6870641468694545 0.39667667014561614 0.6087614290087167 + outer loop + vertex -179.87824428957123 -69.35232799494719 -21.93137084989843 + vertex -29.658040186685035 190.32815824230505 -21.600000000000023 + vertex -29.878244289571743 190.45529314038336 -21.931370849898517 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + vertex -31.216670375552287 191.22803380141454 -22.345481322062533 + vertex -181.21667037555176 -68.57958733391598 -22.34548132206245 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -31.216670375552287 191.22803380141454 -22.345481322062533 + vertex -180.85804018668452 -68.786642569998 -22.399999999999945 + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + endloop +endfacet +facet normal 0.33141357403555843 -0.19134171618255227 -0.9238795325112973 + outer loop + vertex -31.550860509712553 191.42097856533266 -19.414359353944903 + vertex -181.21667037555167 -68.57958733391588 -19.254518677937426 + vertex -181.55086050971204 -68.38664256999796 -19.41435935394482 + endloop +endfacet +facet normal 0.33141357403555843 -0.19134171618255227 -0.9238795325112973 + outer loop + vertex -181.21667037555167 -68.57958733391588 -19.254518677937426 + vertex -31.550860509712553 191.42097856533266 -19.414359353944903 + vertex -31.216670375552287 191.2280338014146 -19.254518677937508 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -30.499409997817736 190.81392332925068 -19.2545186779375 + vertex -180.1652198636569 -69.18664256999789 -19.414359353944835 + vertex -180.49940999781722 -68.99369780607992 -19.254518677937423 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -180.1652198636569 -69.18664256999789 -19.414359353944835 + vertex -30.499409997817736 190.81392332925068 -19.2545186779375 + vertex -30.1652198636574 190.6209785653327 -19.414359353944917 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.130526192220062 + outer loop + vertex -182.2436808327396 -67.986642569998 -20.79999999999993 + vertex -32.1964662726655 191.79371922636386 -20.385889527835985 + vertex -182.19646627266502 -68.01390190896674 -20.385889527835896 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.130526192220062 + outer loop + vertex -32.1964662726655 191.79371922636386 -20.385889527835985 + vertex -182.2436808327396 -67.986642569998 -20.79999999999993 + vertex -32.24368083274021 191.82097856533252 -20.800000000000015 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + vertex -180.49940999781722 -68.99369780607992 -19.254518677937423 + vertex -180.8580401866844 -68.7866425699979 -19.19999999999993 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -180.49940999781722 -68.99369780607992 -19.254518677937423 + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + vertex -30.499409997817736 190.81392332925068 -19.2545186779375 + endloop +endfacet +facet normal -0.8586164364012798 0.49572243068687166 0.13052619222005538 + outer loop + vertex -32.73378697496388 192.1039414784776 -3.7411809548975263 + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -182.73378697496338 -67.70367965685296 -3.741180954897436 + endloop +endfacet +facet normal -0.8586164364012798 0.49572243068687166 0.13052619222005538 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -32.73378697496388 192.1039414784776 -3.7411809548975263 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 1.5003536199769236e-15 + outer loop + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -32.76329607501059 192.12097856533296 -9.20000000000005 + vertex -182.76329607501012 -67.68664256999767 -9.19999999999996 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 1.5003536199769236e-15 + outer loop + vertex -32.76329607501059 192.12097856533296 -9.20000000000005 + vertex -182.76329607501003 -67.68664256999749 -3.9999999999999476 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -4.464960093105168e-15 + outer loop + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -182.41688591349632 -67.88664256999766 -9.59999999999996 + vertex -182.41688591349632 -67.88664256999765 -9.19999999999996 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -4.464960093105168e-15 + outer loop + vertex -182.41688591349632 -67.88664256999766 -9.59999999999996 + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -32.4168859134969 191.92097856533286 -9.60000000000005 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -179.44268224691513 -69.60379985752284 -7.39999999999995 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -179.44268224691513 -69.60379985752284 -7.39999999999995 + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + endloop +endfacet +facet normal -0.8001031451912832 0.46193976625562266 0.3826834323650778 + outer loop + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + vertex -182.73378697496338 -67.70367965685296 -3.741180954897436 + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + endloop +endfacet +facet normal -0.8001031451912832 0.46193976625562266 0.3826834323650778 + outer loop + vertex -182.73378697496338 -67.70367965685296 -3.741180954897436 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + vertex -32.73378697496388 192.1039414784776 -3.7411809548975263 + endloop +endfacet +facet normal -0.6123724356958127 0.353553390593238 -0.7071067811865498 + outer loop + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -179.44268224691513 -69.60379985752284 -7.39999999999995 + endloop +endfacet +facet normal -0.6123724356958127 0.353553390593238 -0.7071067811865498 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + endloop +endfacet +facet normal -3.1938264052337434e-15 -3.9640061956236146e-14 -1.0 + outer loop + vertex -32.4168859134969 191.92097856533286 -9.60000000000005 + vertex -181.2044503481981 -68.58664256999764 -9.599999999999923 + vertex -182.41688591349632 -67.88664256999766 -9.59999999999996 + endloop +endfacet +facet normal -3.1938264052337434e-15 -3.9640061956236146e-14 -1.0 + outer loop + vertex -181.2044503481981 -68.58664256999764 -9.599999999999923 + vertex -32.4168859134969 191.92097856533286 -9.60000000000005 + vertex -31.204450348198588 191.22097856533293 -9.600000000000035 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -32.76329607501059 192.12097856533296 -9.20000000000005 + vertex -182.41688591349632 -67.88664256999765 -9.19999999999996 + vertex -182.76329607501012 -67.68664256999767 -9.19999999999996 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -182.41688591349632 -67.88664256999765 -9.19999999999996 + vertex -32.76329607501059 192.12097856533296 -9.20000000000005 + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -181.2044503481981 -68.58664256999764 -9.599999999999923 + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -181.20445034819804 -68.58664256999758 -7.3999999999999275 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -181.2044503481981 -68.58664256999764 -9.599999999999923 + vertex -31.204450348198588 191.22097856533293 -9.600000000000035 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -1.052465433482836e-15 + outer loop + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -177.30733603116815 -70.83664256999775 -16.134314575050695 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -1.052465433482836e-15 + outer loop + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -177.30733603116803 -70.83664256999754 -9.8656854249492 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -165.44278799932124 -77.68664256999759 -21.99999999999995 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + vertex -165.78919816083493 -77.4866425699974 -16.799999999999965 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + vertex -165.44278799932115 -77.68664256999742 -16.79999999999996 + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.7394170869210427e-15 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.7394170869210427e-15 + outer loop + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -165.78919816083493 -77.4866425699974 -16.399999999999963 + vertex -17.00163372613367 183.02097856533314 -16.400000000000055 + vertex -167.00163372613318 -76.78664256999741 -16.399999999999963 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -17.00163372613367 183.02097856533314 -16.400000000000055 + vertex -165.78919816083493 -77.4866425699974 -16.399999999999963 + vertex -15.78919816083545 182.32097856533315 -16.400000000000052 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -167.00163372613304 -76.78664256999721 -9.599999999999953 + vertex -167.00163372613304 -76.78664256999713 -7.399999999999959 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -167.00163372613304 -76.78664256999721 -9.599999999999953 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -17.001633726133555 183.02097856533337 -9.600000000000044 + endloop +endfacet +facet normal -3.1938264052335824e-15 -3.964006195623624e-14 -1.0 + outer loop + vertex -17.001633726133555 183.02097856533337 -9.600000000000044 + vertex -165.7891981608348 -77.48664256999719 -9.599999999999929 + vertex -167.00163372613304 -76.78664256999721 -9.599999999999953 + endloop +endfacet +facet normal -3.1938264052335824e-15 -3.964006195623624e-14 -1.0 + outer loop + vertex -165.7891981608348 -77.48664256999719 -9.599999999999929 + vertex -17.001633726133555 183.02097856533337 -9.600000000000044 + vertex -15.789198160835294 182.32097856533338 -9.60000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + vertex -18.763401827416597 184.03813585285843 -18.60000000000005 + vertex -168.7634018274161 -75.76948528247219 -18.599999999999948 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -18.763401827416597 184.03813585285843 -18.60000000000005 + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + endloop +endfacet +facet normal 0.6123724356958127 -0.353553390593238 0.7071067811865498 + outer loop + vertex -168.7634018274161 -75.76948528247219 -18.599999999999948 + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -170.89874804316318 -74.53664256999755 -16.134314575050713 + endloop +endfacet +facet normal 0.6123724356958127 -0.353553390593238 0.7071067811865498 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -168.7634018274161 -75.76948528247219 -18.599999999999948 + vertex -18.763401827416597 184.03813585285843 -18.60000000000005 + endloop +endfacet +facet normal 0.6123724356957985 -0.35355339059327495 -0.7071067811865437 + outer loop + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + vertex -168.76340182741595 -75.76948528247182 -7.399999999999961 + endloop +endfacet +facet normal 0.6123724356957985 -0.35355339059327495 -0.7071067811865437 + outer loop + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + vertex -170.89874804316307 -74.53664256999733 -9.865685424949215 + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.7891981608348 -77.48664256999719 -9.599999999999929 + vertex -15.789198160835294 182.32097856533338 -9.20000000000002 + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.789198160835294 182.32097856533338 -9.20000000000002 + vertex -165.7891981608348 -77.48664256999719 -9.599999999999929 + vertex -15.789198160835294 182.32097856533338 -9.60000000000002 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -15.789198160835294 182.32097856533338 -9.20000000000002 + vertex -165.44278799932104 -77.68664256999716 -9.19999999999993 + vertex -165.7891981608348 -77.4866425699972 -9.19999999999993 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -165.44278799932104 -77.68664256999716 -9.19999999999993 + vertex -15.789198160835294 182.32097856533338 -9.20000000000002 + vertex -15.442787999321533 182.12097856533347 -9.20000000000002 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + vertex -165.78919816083493 -77.4866425699974 -16.399999999999963 + vertex -165.78919816083493 -77.4866425699974 -16.799999999999965 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.78919816083493 -77.4866425699974 -16.399999999999963 + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + vertex -15.78919816083545 182.32097856533315 -16.400000000000052 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -167.00163372613318 -76.78664256999741 -16.399999999999963 + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + vertex -167.00163372613318 -76.78664256999751 -18.59999999999996 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + vertex -167.00163372613318 -76.78664256999741 -16.399999999999963 + vertex -17.00163372613367 183.02097856533314 -16.400000000000055 + endloop +endfacet +facet normal 0.6870641468694694 -0.39667667014558516 0.6087614290087203 + outer loop + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + endloop +endfacet +facet normal 0.6870641468694694 -0.39667667014558516 0.6087614290087203 + outer loop + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -15.696440967410114 182.26742517474023 -3.29289321881348 + endloop +endfacet +facet normal 0.3314135740356083 -0.19134171618249934 0.9238795325112903 + outer loop + vertex -165.87580070121314 -77.43664256999696 -3.1339745962155057 + vertex -16.08466953506387 182.49156904278232 -3.0340741737109713 + vertex -166.08466953506334 -77.31605209254823 -3.034074173710881 + endloop +endfacet +facet normal 0.3314135740356083 -0.19134171618249934 0.9238795325112903 + outer loop + vertex -16.08466953506387 182.49156904278232 -3.0340741737109713 + vertex -165.87580070121314 -77.43664256999696 -3.1339745962155057 + vertex -15.87580070121366 182.37097856533364 -3.133974596215596 + endloop +endfacet +facet normal 0.11303899832185436 -0.06526309611000022 0.9914448613738078 + outer loop + vertex -166.08466953506334 -77.31605209254823 -3.034074173710881 + vertex -16.308813403105898 182.6209785653336 -3.000000000000034 + vertex -166.30881340310535 -77.18664256999696 -2.9999999999999436 + endloop +endfacet +facet normal 0.11303899832185436 -0.06526309611000022 0.9914448613738078 + outer loop + vertex -16.308813403105898 182.6209785653336 -3.000000000000034 + vertex -166.08466953506334 -77.31605209254823 -3.034074173710881 + vertex -16.08466953506387 182.49156904278232 -3.0340741737109713 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -166.30881340310535 -77.18664256999696 -2.9999999999999436 + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -170.81214550278452 -74.58664256999712 -2.999999999999924 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -166.30881340310535 -77.18664256999696 -2.9999999999999436 + vertex -16.308813403105898 182.6209785653336 -3.000000000000034 + endloop +endfacet +facet normal 0.5272028623656805 -0.304380714504307 0.7933533402912483 + outer loop + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + vertex -15.87580070121366 182.37097856533364 -3.133974596215596 + vertex -165.87580070121314 -77.43664256999696 -3.1339745962155057 + endloop +endfacet +facet normal 0.5272028623656805 -0.304380714504307 0.7933533402912483 + outer loop + vertex -15.87580070121366 182.37097856533364 -3.133974596215596 + vertex -165.69644096740956 -77.54019596059021 -3.29289321881339 + vertex -15.696440967410114 182.26742517474023 -3.29289321881348 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.44278799932104 -77.68664256999716 -9.19999999999993 + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -165.44278799932104 -77.68664256999716 -9.19999999999993 + vertex -15.442787999321533 182.12097856533347 -9.20000000000002 + endloop +endfacet +facet normal 0.800103145191287 -0.4619397662556136 0.3826834323650807 + outer loop + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -165.55881340310538 -77.6196552718892 -3.49999999999994 + endloop +endfacet +facet normal 0.800103145191287 -0.4619397662556136 0.3826834323650807 + outer loop + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + vertex -15.472297099368083 182.13801565218895 -3.741180954897518 + endloop +endfacet +facet normal 0.8586164364012796 -0.4957224306868715 0.13052619222005726 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + vertex -165.44278799932096 -77.68664256999702 -3.999999999999939 + endloop +endfacet +facet normal 0.8586164364012796 -0.4957224306868715 0.13052619222005726 + outer loop + vertex -165.47229709936755 -77.6696054831415 -3.7411809548974277 + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -15.472297099368083 182.13801565218895 -3.741180954897518 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + vertex -20.812145502785025 185.22097856533344 -3.400000000000036 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + vertex -170.81214550278452 -74.58664256999712 -2.999999999999924 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -170.81214550278452 -74.58664256999712 -3.399999999999923 + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -20.812145502785025 185.22097856533344 -3.400000000000036 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -21.158555664298852 185.4209785653334 -4.80000000000007 + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -171.15855566429832 -74.38664256999722 -4.799999999999969 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -169.25329977597252 -75.48664256999713 -4.799999999999966 + vertex -21.158555664298852 185.4209785653334 -4.80000000000007 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + vertex -26.817438082611847 188.6881358528584 -9.300000000000056 + vertex -176.81743808261132 -71.11948528247211 -9.299999999999965 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -26.817438082611847 188.6881358528584 -9.300000000000056 + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -8.997049082914166e-15 + outer loop + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -21.158555664298852 185.4209785653334 -4.80000000000007 + vertex -171.15855566429832 -74.38664256999722 -4.799999999999969 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -8.997049082914166e-15 + outer loop + vertex -21.158555664298852 185.4209785653334 -4.80000000000007 + vertex -171.15855566429832 -74.38664256999712 -3.399999999999949 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + endloop +endfacet +facet normal -0.6123724356957956 0.3535533905932733 0.7071067811865469 + outer loop + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + vertex -171.3886459917197 -74.25379985752271 -9.29999999999996 + endloop +endfacet +facet normal -0.6123724356957956 0.3535533905932733 0.7071067811865469 + outer loop + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + vertex -169.25329977597258 -75.4866425699972 -6.834314575050704 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + endloop +endfacet +facet normal 0.6123724356958173 -0.35355339059322943 0.7071067811865499 + outer loop + vertex -176.81743808261132 -71.11948528247211 -9.299999999999965 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + endloop +endfacet +facet normal 0.6123724356958173 -0.35355339059322943 0.7071067811865499 + outer loop + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -176.81743808261132 -71.11948528247211 -9.299999999999965 + vertex -26.817438082611847 188.6881358528584 -9.300000000000056 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -177.04752841003264 -70.98664256999737 -4.799999999999952 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -177.04752841003264 -70.98664256999737 -4.799999999999952 + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -27.04752841003311 188.82097856533326 -4.800000000000042 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.6118274155526564e-14 + outer loop + vertex -27.04752841003311 188.82097856533326 -4.800000000000042 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -177.04752841003264 -70.98664256999737 -4.799999999999952 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.6118274155526564e-14 + outer loop + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -27.04752841003311 188.82097856533326 -4.800000000000042 + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -178.9527842983584 -69.88664256999742 -4.7999999999999545 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -178.9527842983584 -69.88664256999746 -6.834314575050715 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + vertex -177.39393857154639 -70.78664256999731 -3.399999999999954 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + vertex -177.04752841003264 -70.98664256999729 -3.399999999999954 + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.464960093105168e-15 + outer loop + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -177.39393857154639 -70.78664256999731 -3.399999999999954 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.464960093105168e-15 + outer loop + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + vertex -27.393938571546915 189.02097856533325 -3.0000000000000453 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -31.897270671226043 191.6209785653332 -3.000000000000051 + vertex -181.89727067122553 -68.18664256999743 -2.9999999999999494 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -31.897270671226043 191.6209785653332 -3.000000000000051 + vertex -177.39393857154639 -70.78664256999726 -2.999999999999955 + vertex -27.393938571546915 189.02097856533325 -3.0000000000000453 + endloop +endfacet +facet normal -0.11303899832181771 0.06526309611006642 0.9914448613738075 + outer loop + vertex -181.89727067122553 -68.18664256999743 -2.9999999999999494 + vertex -32.12141453926807 191.75038808788443 -3.034074173710977 + vertex -182.12141453926756 -68.05723304744619 -3.034074173710887 + endloop +endfacet +facet normal -0.11303899832181771 0.06526309611006642 0.9914448613738075 + outer loop + vertex -32.12141453926807 191.75038808788443 -3.034074173710977 + vertex -181.89727067122553 -68.18664256999743 -2.9999999999999494 + vertex -31.897270671226043 191.6209785653332 -3.000000000000051 + endloop +endfacet +facet normal -0.3314135740355741 0.1913417161825613 0.9238795325112896 + outer loop + vertex -182.12141453926756 -68.05723304744619 -3.034074173710887 + vertex -32.33028337311833 191.87097856533305 -3.1339745962156043 + vertex -182.33028337311777 -67.93664256999747 -3.133974596215514 + endloop +endfacet +facet normal -0.3314135740355741 0.1913417161825613 0.9238795325112896 + outer loop + vertex -32.33028337311833 191.87097856533305 -3.1339745962156043 + vertex -182.12141453926756 -68.05723304744619 -3.034074173710887 + vertex -32.12141453926807 191.75038808788443 -3.034074173710977 + endloop +endfacet +facet normal -0.5272028623656494 0.3043807145043624 0.7933533402912476 + outer loop + vertex -182.33028337311777 -67.93664256999747 -3.133974596215514 + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -182.50964310692132 -67.83308917940421 -3.2928932188133984 + endloop +endfacet +facet normal -0.5272028623656494 0.3043807145043624 0.7933533402912476 + outer loop + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -182.33028337311777 -67.93664256999747 -3.133974596215514 + vertex -32.33028337311833 191.87097856533305 -3.1339745962156043 + endloop +endfacet +facet normal -0.6870641468694532 0.396676670145621 0.6087614290087151 + outer loop + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + vertex -182.50964310692132 -67.83308917940421 -3.2928932188133984 + endloop +endfacet +facet normal -0.6870641468694532 0.396676670145621 0.6087614290087151 + outer loop + vertex -182.64727067122556 -67.75362986810526 -3.4999999999999485 + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -32.76329607501059 192.12097856533296 -9.20000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -32.19646627266526 191.79371922636426 -5.614110472164045 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -32.19646627266526 191.79371922636426 -5.614110472164045 + vertex -32.058040186684785 191.71379888836057 -6.000000000000034 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -32.058040186684785 191.71379888836057 -6.000000000000034 + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -32.058040186684785 191.71379888836057 -6.000000000000034 + vertex -31.837836083798095 191.58666399028218 -6.331370849898517 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -31.837836083798095 191.58666399028218 -6.331370849898517 + vertex -31.550860509712372 191.42097856533303 -6.585640646055154 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -31.550860509712372 191.42097856533303 -6.585640646055154 + vertex -31.216670375552013 191.22803380141505 -6.745481322062546 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + vertex -31.216670375552013 191.22803380141505 -6.745481322062546 + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + vertex -31.216670375552013 191.22803380141505 -6.745481322062546 + vertex -30.858040186684786 191.02097856533302 -6.800000000000041 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + vertex -30.858040186684786 191.02097856533302 -6.800000000000041 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266526 191.79371922636426 -5.614110472164045 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -32.24368083273991 191.82097856533298 -5.200000000000013 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.24368083273991 191.82097856533298 -5.200000000000013 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -32.19646627266526 191.79371922636432 -4.785889527835981 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266526 191.79371922636432 -4.785889527835981 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -32.058040186684785 191.71379888836057 -4.400000000000015 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.058040186684785 191.71379888836057 -4.400000000000015 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -31.837836083797985 191.58666399028237 -4.068629150101555 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.837836083797985 191.58666399028237 -4.068629150101555 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -31.550860509712304 191.42097856533306 -3.8143593539449396 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712304 191.42097856533306 -3.8143593539449396 + vertex -32.76329607501052 192.12097856533305 -4.000000000000038 + vertex -32.73378697496388 192.1039414784776 -3.7411809548975263 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712304 191.42097856533306 -3.8143593539449396 + vertex -32.73378697496388 192.1039414784776 -3.7411809548975263 + vertex -31.216670375551946 191.22803380141514 -3.65451867793752 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.216670375551946 191.22803380141514 -3.65451867793752 + vertex -32.73378697496388 192.1039414784776 -3.7411809548975263 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.216670375551946 191.22803380141514 -3.65451867793752 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + vertex -30.85804018668474 191.02097856533317 -3.600000000000047 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -27.393938571546915 189.02097856533325 -3.0000000000000453 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571546915 189.02097856533325 -3.0000000000000453 + vertex -32.50964310692185 191.9745319559264 -3.2928932188134885 + vertex -32.33028337311833 191.87097856533305 -3.1339745962156043 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571546915 189.02097856533325 -3.0000000000000453 + vertex -32.33028337311833 191.87097856533305 -3.1339745962156043 + vertex -32.12141453926807 191.75038808788443 -3.034074173710977 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571546915 189.02097856533325 -3.0000000000000453 + vertex -32.12141453926807 191.75038808788443 -3.034074173710977 + vertex -31.897270671226043 191.6209785653332 -3.000000000000051 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -29.65804018668472 190.32815824230553 -6.000000000000065 + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.65804018668472 190.32815824230553 -6.000000000000065 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -29.878244289571473 190.45529314038384 -6.331370849898536 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.878244289571473 190.45529314038384 -6.331370849898536 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -30.165219863657196 190.62097856533308 -6.585640646055151 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.165219863657196 190.62097856533308 -6.585640646055151 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -30.49940999781753 190.81392332925108 -6.7454813220625685 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.49940999781753 190.81392332925108 -6.7454813220625685 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + vertex -30.858040186684786 191.02097856533302 -6.800000000000041 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -29.65804018668472 190.32815824230553 -6.000000000000065 + vertex -29.51961410070422 190.24823790430182 -5.614110472164098 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -29.51961410070422 190.24823790430182 -5.614110472164098 + vertex -29.472399540629656 190.22097856533307 -5.200000000000067 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -29.472399540629656 190.22097856533307 -5.200000000000067 + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298358935 189.92097856533314 -4.800000000000045 + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -27.04752841003311 188.82097856533326 -4.800000000000042 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003311 188.82097856533326 -4.800000000000042 + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -29.519614100704196 190.24823790430187 -4.785889527836012 + vertex -29.658040186684765 190.32815824230553 -4.400000000000046 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -29.658040186684765 190.32815824230553 -4.400000000000046 + vertex -29.878244289571427 190.4552931403839 -4.068629150101574 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -29.878244289571427 190.4552931403839 -4.068629150101574 + vertex -30.16521986365713 190.6209785653331 -3.814359353944937 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -30.16521986365713 190.6209785653331 -3.814359353944937 + vertex -30.49940999781753 190.81392332925108 -3.6545186779375425 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -30.49940999781753 190.81392332925108 -3.6545186779375425 + vertex -30.85804018668474 191.02097856533317 -3.600000000000047 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -30.85804018668474 191.02097856533317 -3.600000000000047 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003313 188.82097856533326 -3.4000000000000443 + vertex -32.647270671226075 192.0539912672253 -3.5000000000000386 + vertex -27.393938571546936 189.02097856533325 -3.4000000000000443 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -21.158555664299147 185.4209785653328 -22.600000000000048 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -17.70667407651477 183.42803380141493 -22.345481322062547 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -17.70667407651477 183.42803380141493 -22.345481322062547 + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.70667407651477 183.42803380141493 -22.345481322062547 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -18.040864210675128 183.6209785653329 -22.185640646055155 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.040864210675128 183.6209785653329 -22.185640646055155 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -18.32783978476083 183.78666399028216 -21.931370849898517 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.32783978476083 183.78666399028216 -21.931370849898517 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -18.548043887647626 183.91379888836042 -21.600000000000044 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647626 183.91379888836042 -21.600000000000044 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -18.68646997362806 183.99371922636422 -21.21411047216408 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.68646997362806 183.99371922636422 -21.21411047216408 + vertex -21.1585556642991 185.4209785653329 -21.20000000000005 + vertex -19.253299775973296 184.32097856533298 -21.200000000000035 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.68646997362806 183.99371922636422 -21.21411047216408 + vertex -19.253299775973296 184.32097856533298 -21.200000000000035 + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + vertex -19.253299775973296 184.32097856533298 -21.200000000000035 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.733684533702647 184.020978565333 -20.800000000000026 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -18.686469973628014 183.99371922636428 -20.385889527835992 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.686469973628014 183.99371922636428 -20.385889527835992 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -18.548043887647516 183.91379888836056 -20.000000000000025 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647516 183.91379888836056 -20.000000000000025 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -18.32783978476081 183.78666399028225 -19.668629150101555 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.32783978476081 183.78666399028225 -19.668629150101555 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -18.04086421067506 183.620978565333 -19.41435935394494 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.04086421067506 183.620978565333 -19.41435935394494 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -17.706674076514748 183.42803380141498 -19.254518677937522 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.706674076514748 183.42803380141498 -19.254518677937522 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.00163372613367 183.02097856533314 -16.400000000000055 + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + vertex -17.00163372613367 183.02097856533314 -16.400000000000055 + vertex -15.78919816083545 182.32097856533315 -16.400000000000052 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + vertex -15.472297099368376 182.13801565218841 -22.25881904510254 + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368376 182.13801565218841 -22.25881904510254 + vertex -17.348043887647563 183.22097856533296 -22.400000000000045 + vertex -16.98941369878038 183.01392332925096 -22.34548132206257 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368376 182.13801565218841 -22.25881904510254 + vertex -16.98941369878038 183.01392332925096 -22.34548132206257 + vertex -16.655223564620044 182.8209785653329 -22.185640646055152 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368376 182.13801565218841 -22.25881904510254 + vertex -16.655223564620044 182.8209785653329 -22.185640646055152 + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -16.655223564620044 182.8209785653329 -22.185640646055152 + vertex -16.368247990534318 182.6552931403837 -21.931370849898535 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -16.368247990534318 182.6552931403837 -21.931370849898535 + vertex -16.14804388764752 182.52815824230544 -21.600000000000065 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -16.14804388764752 182.52815824230544 -21.600000000000065 + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321737 182.12097856533305 -22.00000000000003 + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -16.009617801666977 182.4482379043018 -21.214110472164098 + vertex -15.962403241592387 182.4209785653331 -20.800000000000065 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -15.962403241592387 182.4209785653331 -20.800000000000065 + vertex -16.009617801666977 182.44823790430183 -20.385889527836035 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -16.009617801666977 182.44823790430183 -20.385889527836035 + vertex -16.148043887647475 182.52815824230547 -20.000000000000046 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -16.148043887647475 182.52815824230547 -20.000000000000046 + vertex -16.368247990534183 182.65529314038383 -19.668629150101573 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -16.368247990534183 182.65529314038383 -19.668629150101573 + vertex -16.655223564619952 182.82097856533304 -19.414359353944935 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -16.655223564619952 182.82097856533304 -19.414359353944935 + vertex -16.989413698780243 183.013923329251 -19.254518677937543 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -16.989413698780243 183.013923329251 -19.254518677937543 + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + vertex -17.348043887647517 183.22097856533298 -19.20000000000005 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + vertex -18.763401827416597 184.03813585285843 -18.60000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321668 182.12097856533316 -16.80000000000004 + vertex -17.001633726133736 183.02097856533308 -18.60000000000005 + vertex -15.78919816083543 182.3209785653332 -16.80000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.47239954062988 190.22097856533262 -20.800000000000026 + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + vertex -29.519614100704512 190.24823790430136 -21.214110472164055 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + vertex -29.47239954062988 190.22097856533262 -20.800000000000026 + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -29.47239954062988 190.22097856533262 -20.800000000000026 + vertex -29.519614100704466 190.24823790430136 -20.385889527835992 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -29.519614100704466 190.24823790430136 -20.385889527835992 + vertex -29.658040186684968 190.3281582423051 -20.000000000000025 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -29.658040186684968 190.3281582423051 -20.000000000000025 + vertex -29.87824428957172 190.4552931403834 -19.668629150101555 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -29.87824428957172 190.4552931403834 -19.668629150101555 + vertex -30.1652198636574 190.6209785653327 -19.414359353944917 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -30.1652198636574 190.6209785653327 -19.414359353944917 + vertex -30.499409997817736 190.81392332925068 -19.2545186779375 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -30.499409997817736 190.81392332925068 -19.2545186779375 + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.121414539268436 191.75038808788375 -22.96592582628912 + vertex -27.393938571547185 189.02097856533265 -23.000000000000053 + vertex -31.897270671226426 191.62097856533254 -23.000000000000057 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571547185 189.02097856533265 -23.000000000000053 + vertex -32.121414539268436 191.75038808788375 -22.96592582628912 + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + vertex -32.121414539268436 191.75038808788375 -22.96592582628912 + vertex -32.3302833731186 191.8709785653325 -22.86602540378449 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + vertex -32.3302833731186 191.8709785653325 -22.86602540378449 + vertex -32.50964310692216 191.9745319559258 -22.70710678118661 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + vertex -32.50964310692216 191.9745319559258 -22.70710678118661 + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154723 189.02097856533257 -22.600000000000055 + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + vertex -30.499409997817825 190.81392332925054 -22.34548132206253 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033404 188.8209785653326 -22.60000000000005 + vertex -30.499409997817825 190.81392332925054 -22.34548132206253 + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + vertex -30.499409997817825 190.81392332925054 -22.34548132206253 + vertex -30.165219863657466 190.62097856533256 -22.185640646055134 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + vertex -30.165219863657466 190.62097856533256 -22.185640646055134 + vertex -29.878244289571743 190.45529314038336 -21.931370849898517 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + vertex -29.878244289571743 190.45529314038336 -21.931370849898517 + vertex -29.658040186685035 190.32815824230505 -21.600000000000023 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + vertex -29.658040186685035 190.32815824230505 -21.600000000000023 + vertex -29.519614100704512 190.24823790430136 -21.214110472164055 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033426 188.82097856533272 -21.200000000000053 + vertex -29.519614100704512 190.24823790430136 -21.214110472164055 + vertex -28.95278429835923 189.92097856533263 -21.200000000000056 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785388 185.22097856533284 -23.000000000000036 + vertex -16.084669535064208 182.4915690427817 -22.9659258262891 + vertex -16.30881340310624 182.62097856533293 -23.00000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.084669535064208 182.4915690427817 -22.9659258262891 + vertex -20.812145502785388 185.22097856533284 -23.000000000000036 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.084669535064208 182.4915690427817 -22.9659258262891 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -15.87580070121402 182.37097856533296 -22.866025403784477 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.87580070121402 182.37097856533296 -22.866025403784477 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -15.696440967410407 182.26742517473969 -22.707106781186592 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.696440967410407 182.26742517473969 -22.707106781186592 + vertex -20.812145502785363 185.2209785653328 -22.60000000000004 + vertex -15.558813403106205 182.18796586344075 -22.50000000000003 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.7337869749642 192.10394147847708 -22.258819045102573 + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + vertex -32.647270671226366 192.05399126722477 -22.50000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.858040186685056 191.02097856533263 -22.400000000000023 + vertex -32.7337869749642 192.10394147847708 -22.258819045102573 + vertex -31.216670375552287 191.22803380141454 -22.345481322062533 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.216670375552287 191.22803380141454 -22.345481322062533 + vertex -32.7337869749642 192.10394147847708 -22.258819045102573 + vertex -31.550860509712596 191.42097856533258 -22.185640646055123 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712596 191.42097856533258 -22.185640646055123 + vertex -32.7337869749642 192.10394147847708 -22.258819045102573 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712596 191.42097856533258 -22.185640646055123 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + vertex -31.83783608379839 191.58666399028175 -21.931370849898506 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.83783608379839 191.58666399028175 -21.931370849898506 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + vertex -32.05804018668512 191.71379888836003 -21.600000000000016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.05804018668512 191.71379888836003 -21.600000000000016 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + vertex -32.763296075010814 192.1209785653325 -22.00000000000006 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266555 191.7937192263638 -21.214110472164048 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -32.24368083274021 191.82097856533252 -20.800000000000015 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.24368083274021 191.82097856533252 -20.800000000000015 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -32.1964662726655 191.79371922636386 -20.385889527835985 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.1964662726655 191.79371922636386 -20.385889527835985 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -32.0580401866851 191.7137988883601 -20.000000000000018 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.0580401866851 191.7137988883601 -20.000000000000018 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -31.837836083798276 191.58666399028183 -19.668629150101545 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.837836083798276 191.58666399028183 -19.668629150101545 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -31.550860509712553 191.42097856533266 -19.414359353944903 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712553 191.42097856533266 -19.414359353944903 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -31.216670375552287 191.2280338014146 -19.254518677937508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.216670375552287 191.2280338014146 -19.254518677937508 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.85804018668501 191.02097856533257 -19.200000000000006 + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -32.7632960750107 192.12097856533268 -16.800000000000093 + vertex -32.41688591349694 191.92097856533272 -16.80000000000009 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + vertex -32.41688591349694 191.92097856533272 -16.80000000000009 + vertex -31.204450348198726 191.2209785653327 -16.400000000000063 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198726 191.2209785653327 -16.400000000000063 + vertex -32.41688591349694 191.92097856533272 -16.80000000000009 + vertex -32.41688591349694 191.9209785653327 -16.400000000000095 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -26.817438082611847 188.6881358528584 -9.300000000000056 + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.817438082611847 188.6881358528584 -9.300000000000056 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.817438082611847 188.6881358528584 -9.300000000000056 + vertex -29.442682246915638 190.20382127780772 -7.40000000000004 + vertex -28.952784298358957 189.9209785653331 -6.834314575050805 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -31.204450348198588 191.22097856533293 -9.600000000000035 + vertex -32.4168859134969 191.92097856533286 -9.60000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198588 191.22097856533293 -9.600000000000035 + vertex -32.41688591349683 191.92097856533292 -9.20000000000005 + vertex -31.204450348198613 191.22097856533298 -7.40000000000004 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -24.70823048087963 187.47038427622132 -15.607999730980517 + vertex -24.103042037166183 187.12097856533296 -15.700000000000038 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -24.70823048087963 187.47038427622132 -15.607999730980517 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -25.272176332275194 187.79597856533294 -15.338268590218007 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.272176332275194 187.79597856533294 -15.338268590218007 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -25.756447613544847 188.07557271993477 -14.909188309203735 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.756447613544847 188.07557271993477 -14.909188309203735 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -26.12804203716622 188.29011286044195 -14.350000000000055 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.12804203716622 188.29011286044195 -14.350000000000055 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -26.361636057258295 188.42497843082322 -13.698811421776844 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.361636057258295 188.42497843082322 -13.698811421776844 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.361636057258295 188.42497843082322 -13.698811421776844 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -26.441310627384183 188.47097856533296 -13.000000000000046 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.441310627384183 188.47097856533296 -13.000000000000046 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -26.361636057258295 188.42497843082322 -12.30118857822325 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.361636057258295 188.42497843082322 -12.30118857822325 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -26.128042037166153 188.29011286044198 -11.650000000000038 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.128042037166153 188.29011286044198 -11.650000000000038 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -25.756447613544758 188.0755727199349 -11.09081169079636 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.756447613544758 188.0755727199349 -11.09081169079636 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -25.27217633227515 187.79597856533303 -10.661731409782071 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.27217633227515 187.79597856533303 -10.661731409782071 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -24.708230480879518 187.47038427622155 -10.392000269019562 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -24.708230480879518 187.47038427622155 -10.392000269019562 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -24.103042037166073 187.1209785653331 -10.30000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -24.103042037166073 187.1209785653331 -10.30000000000005 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -27.30733603116855 188.97097856533304 -9.865685424949291 + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + vertex -21.388645991720228 185.55382127780788 -9.300000000000061 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.763401827416438 184.03813585285874 -7.400000000000051 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + vertex -21.158555664298852 185.4209785653334 -4.80000000000007 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -18.686469973627744 183.99371922636468 -4.785889527836001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.686469973627744 183.99371922636468 -4.785889527836001 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -18.548043887647335 183.91379888836096 -4.400000000000034 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647335 183.91379888836096 -4.400000000000034 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -18.327839784760513 183.78666399028273 -4.068629150101538 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.327839784760513 183.78666399028273 -4.068629150101538 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -18.04086421067479 183.62097856533347 -3.8143593539449228 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.04086421067479 183.62097856533347 -3.8143593539449228 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -17.70667407651443 183.42803380141552 -3.6545186779375283 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.70667407651443 183.42803380141552 -3.6545186779375283 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -17.3480438876472 183.2209785653335 -3.600000000000033 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.3480438876472 183.2209785653335 -3.600000000000033 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -21.15855566429883 185.4209785653334 -3.40000000000005 + vertex -20.812145502785025 185.22097856533344 -3.400000000000036 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -20.812145502785025 185.22097856533344 -3.400000000000036 + vertex -15.696440967410114 182.26742517474023 -3.29289321881348 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.696440967410114 182.26742517474023 -3.29289321881348 + vertex -20.812145502785025 185.22097856533344 -3.400000000000036 + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.696440967410114 182.26742517474023 -3.29289321881348 + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -15.87580070121366 182.37097856533364 -3.133974596215596 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.87580070121366 182.37097856533364 -3.133974596215596 + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -16.08466953506387 182.49156904278232 -3.0340741737109713 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.08466953506387 182.49156904278232 -3.0340741737109713 + vertex -20.81214550278505 185.22097856533344 -3.000000000000037 + vertex -16.308813403105898 182.6209785653336 -3.000000000000034 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -15.789198160835294 182.32097856533338 -9.60000000000002 + vertex -17.001633726133555 183.02097856533337 -9.600000000000044 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.789198160835294 182.32097856533338 -9.60000000000002 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -15.789198160835294 182.32097856533338 -9.20000000000002 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.789198160835294 182.32097856533338 -9.20000000000002 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -15.442787999321533 182.12097856533347 -9.20000000000002 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.12097856533347 -9.20000000000002 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -16.148043887647294 182.52815824230586 -6.000000000000051 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.12097856533347 -9.20000000000002 + vertex -16.148043887647294 182.52815824230586 -6.000000000000051 + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.12097856533347 -9.20000000000002 + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.148043887647294 182.52815824230586 -6.000000000000051 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -16.36824799053398 182.65529314038423 -6.331370849898522 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.36824799053398 182.65529314038423 -6.331370849898522 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -16.655223564619703 182.82097856533343 -6.585640646055159 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.655223564619703 182.82097856533343 -6.585640646055159 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -16.989413698780062 183.0139233292514 -6.745481322062554 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.989413698780062 183.0139233292514 -6.745481322062554 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -17.348043887647314 183.2209785653335 -6.80000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.348043887647314 183.2209785653335 -6.80000000000005 + vertex -17.00163372613353 183.0209785653334 -7.400000000000048 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -16.00961780166677 182.44823790430226 -5.614110472164084 + vertex -15.962403241592185 182.42097856533346 -5.200000000000053 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -15.962403241592185 182.42097856533346 -5.200000000000053 + vertex -16.009617801666703 182.44823790430226 -4.78588952783602 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -16.009617801666703 182.44823790430226 -4.78588952783602 + vertex -16.148043887647294 182.52815824230598 -4.400000000000054 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -16.148043887647294 182.52815824230598 -4.400000000000054 + vertex -16.368247990533934 182.6552931403843 -4.068629150101582 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -16.368247990533934 182.6552931403843 -4.068629150101582 + vertex -16.65522356461966 182.82097856533352 -3.8143593539449454 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321421 182.1209785653336 -4.000000000000029 + vertex -16.65522356461966 182.82097856533352 -3.8143593539449454 + vertex -15.472297099368083 182.13801565218895 -3.741180954897518 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368083 182.13801565218895 -3.741180954897518 + vertex -16.65522356461966 182.82097856533352 -3.8143593539449454 + vertex -16.98941369877997 183.01392332925155 -3.6545186779375283 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368083 182.13801565218895 -3.741180954897518 + vertex -16.98941369877997 183.01392332925155 -3.6545186779375283 + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.558813403105889 182.18796586344135 -3.50000000000003 + vertex -16.98941369877997 183.01392332925155 -3.6545186779375283 + vertex -17.3480438876472 183.2209785653335 -3.600000000000033 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -17.706674076514567 183.42803380141538 -6.745481322062554 + vertex -17.348043887647314 183.2209785653335 -6.80000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.706674076514567 183.42803380141538 -6.745481322062554 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -18.040864210674833 183.62097856533344 -6.585640646055137 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.040864210674833 183.62097856533344 -6.585640646055137 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -18.32783978476065 183.78666399028262 -6.3313708498985 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.32783978476065 183.78666399028262 -6.3313708498985 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -18.548043887647314 183.91379888836096 -6.000000000000031 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647314 183.91379888836096 -6.000000000000031 + vertex -19.253299775973094 184.32097856533338 -6.834314575050794 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647314 183.91379888836096 -6.000000000000031 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + vertex -18.68646997362779 183.99371922636473 -5.6141104721640644 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.68646997362779 183.99371922636473 -5.6141104721640644 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + vertex -18.733684533702444 184.0209785653334 -5.200000000000033 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.733684533702444 184.0209785653334 -5.200000000000033 + vertex -19.253299775973026 184.3209785653334 -4.800000000000056 + vertex -18.686469973627744 183.99371922636468 -4.785889527836001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -29.44268224691582 190.20382127780732 -18.60000000000005 + vertex -26.81743808261207 188.68813585285818 -16.700000000000063 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.44268224691582 190.20382127780732 -18.60000000000005 + vertex -28.952784298359205 189.92097856533272 -19.16568542494932 + vertex -31.204450348198748 191.2209785653327 -18.60000000000006 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.81743808261207 188.68813585285818 -16.700000000000063 + vertex -29.44268224691582 190.20382127780732 -18.60000000000005 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.81743808261207 188.68813585285818 -16.700000000000063 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -27.30733603116866 188.97097856533284 -16.134314575050784 + vertex -24.103042037166183 187.12097856533296 -15.700000000000038 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -24.103042037166183 187.12097856533296 -15.700000000000038 + vertex -23.49785359345274 186.77157285444454 -15.607999730980529 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -23.49785359345274 186.77157285444454 -15.607999730980529 + vertex -22.933907742057176 186.44597856533298 -15.33826859021802 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -22.933907742057176 186.44597856533298 -15.33826859021802 + vertex -22.449636460787545 186.16638441073113 -14.909188309203731 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -22.449636460787545 186.16638441073113 -14.909188309203731 + vertex -22.07804203716615 185.95184427022406 -14.350000000000053 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -22.07804203716615 185.95184427022406 -14.350000000000053 + vertex -21.844448017074033 185.81697869984282 -13.698811421776819 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + vertex -21.844448017074033 185.81697869984282 -13.698811421776819 + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -21.844448017074033 185.81697869984282 -13.698811421776819 + vertex -21.76477344694812 185.77097856533308 -13.000000000000021 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -21.76477344694812 185.77097856533308 -13.000000000000021 + vertex -21.844448017074008 185.81697869984293 -12.3011885782232 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -21.844448017074008 185.81697869984293 -12.3011885782232 + vertex -22.07804203716608 185.95184427022414 -11.650000000000011 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -22.07804203716608 185.95184427022414 -11.650000000000011 + vertex -22.44963646078741 186.16638441073135 -11.090811690796333 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -22.44963646078741 186.16638441073135 -11.090811690796333 + vertex -22.933907742057063 186.4459785653332 -10.661731409782044 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -22.933907742057063 186.4459785653332 -10.661731409782044 + vertex -23.497853593452625 186.77157285444477 -10.39200026901956 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163664 185.2709785653332 -9.865685424949328 + vertex -23.497853593452625 186.77157285444477 -10.39200026901956 + vertex -24.103042037166073 187.1209785653331 -10.30000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + vertex -18.763401827416597 184.03813585285843 -18.60000000000005 + vertex -19.253299775973296 184.32097856533298 -19.165685424949274 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.763401827416597 184.03813585285843 -18.60000000000005 + vertex -21.388645991720455 185.5538212778076 -16.700000000000028 + vertex -20.898748043163707 185.27097856533302 -16.134314575050794 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + vertex -167.34804388764678 -76.58664256999711 -6.799999999999959 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + vertex -166.98941369877954 -76.79369780607912 -6.745481322062464 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -167.70667407651402 -76.3795873339151 -6.745481322062464 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + vertex -166.65522356461923 -76.98664256999712 -6.58564064605507 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.04086421067436 -76.18664256999716 -6.5856406460550465 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + vertex -166.3682479905335 -77.1523279949463 -6.331370849898432 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.32783978476004 -76.0209571450479 -6.331370849898409 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -166.14804388764674 -77.27946289302463 -5.999999999999961 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.5480438876468 -75.89382224696958 -5.999999999999941 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + vertex -166.00961780166625 -77.35938323102832 -5.614110472163994 + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.68646997362728 -75.81390190896589 -5.614110472163975 + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + vertex -165.96240324159163 -77.38664256999704 -5.199999999999962 + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.73368453370185 -75.78664256999716 -5.1999999999999424 + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -166.00961780166622 -77.3593832310283 -4.785889527835931 + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.68646997362725 -75.81390190896586 -4.785889527835911 + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + vertex -166.1480438876467 -77.27946289302459 -4.399999999999964 + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.54804388764677 -75.89382224696955 -4.399999999999944 + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + vertex -166.36824799053343 -77.15232799494626 -4.068629150101493 + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.32783978476002 -76.02095714504783 -4.068629150101447 + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + vertex -166.65522356461915 -76.98664256999704 -3.8143593539448553 + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.04086421067427 -76.18664256999706 -3.8143593539448326 + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -167.7066740765139 -76.37958733391504 -3.654518677937438 + vertex -166.98941369877946 -76.79369780607902 -3.654518677937438 + vertex -167.3480438876467 -76.58664256999705 -3.599999999999943 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.10259755034066 188.82097856533443 -43.00000000000016 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.554479138125014 190.8139233292525 -43.254518677937675 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + vertex 30.554479138125014 190.8139233292525 -43.254518677937675 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.70233981153347 192.0539912672268 -43.10000000000016 + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.22028900396464 190.6209785653345 -43.41435935394508 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 30.554479138125014 190.8139233292525 -43.254518677937675 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.933313429878947 190.45529314038527 -43.6686291501017 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 30.22028900396464 190.6209785653345 -43.41435935394508 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.713109326992214 190.32815824230693 -44.0000000000002 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 29.933313429878947 190.45529314038527 -43.6686291501017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.574683241011734 190.24823790430324 -44.38588952783616 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 29.713109326992214 190.32815824230693 -44.0000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.007853438666466 189.92097856533445 -44.40000000000017 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 29.574683241011734 190.24823790430324 -44.38588952783616 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.527468680937115 190.22097856533443 -44.800000000000196 + vertex 29.007853438666466 189.92097856533445 -44.40000000000017 + vertex 29.574683241011734 190.24823790430324 -44.38588952783616 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 29.007853438666466 189.92097856533445 -44.40000000000017 + vertex 29.527468680937115 190.22097856533443 -44.800000000000196 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.574683241011737 190.24823790430318 -45.21411047216423 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 29.527468680937115 190.22097856533443 -44.800000000000196 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.713109326992253 190.3281582423069 -45.60000000000019 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 29.574683241011737 190.24823790430318 -45.21411047216423 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.93331342987896 190.45529314038518 -45.931370849898656 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 29.713109326992253 190.3281582423069 -45.60000000000019 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.220289003964698 190.6209785653344 -46.1856406460553 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 29.93331342987896 190.45529314038518 -45.931370849898656 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.554479138125004 190.8139233292524 -46.3454813220627 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 30.220289003964698 190.6209785653344 -46.1856406460553 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 30.554479138125004 190.8139233292524 -46.3454813220627 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.363882543413876 182.62097856533416 -42.60000000000018 + vertex 20.867214643092836 185.22097856533426 -42.60000000000017 + vertex 16.13973867537185 182.49156904278288 -42.63407417371111 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + vertex 16.13973867537185 182.49156904278288 -42.63407417371111 + vertex 20.867214643092836 185.22097856533426 -42.60000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.930869841521629 182.3709785653341 -42.73397459621574 + vertex 16.13973867537185 182.49156904278288 -42.63407417371111 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.751510107718055 182.26742517474082 -42.892893218813626 + vertex 15.930869841521629 182.3709785653341 -42.73397459621574 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.613882543413824 182.1879658634419 -43.10000000000017 + vertex 15.751510107718055 182.26742517474082 -42.892893218813626 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + vertex 15.613882543413824 182.1879658634419 -43.10000000000017 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + vertex 15.613882543413824 182.1879658634419 -43.10000000000017 + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.761743216822392 183.42803380141615 -43.25451867793767 + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + vertex 17.761743216822392 183.42803380141615 -43.25451867793767 + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.09593335098268 183.62097856533416 -43.41435935394507 + vertex 17.761743216822392 183.42803380141615 -43.25451867793767 + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.38290892506843 183.7866639902834 -43.668629150101715 + vertex 18.09593335098268 183.62097856533416 -43.41435935394507 + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.60311302795516 183.9137988883617 -44.000000000000185 + vertex 18.38290892506843 183.7866639902834 -43.668629150101715 + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + vertex 18.60311302795516 183.9137988883617 -44.000000000000185 + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 19.308368916280923 184.32097856533417 -44.40000000000018 + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.788753674010273 184.02097856533413 -44.8000000000002 + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + vertex 19.308368916280923 184.32097856533417 -44.40000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + vertex 18.788753674010273 184.02097856533413 -44.8000000000002 + vertex 19.308368916280923 184.32097856533417 -44.40000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.74153911393566 183.99371922636539 -45.214110472164236 + vertex 18.788753674010273 184.02097856533413 -44.8000000000002 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.603113027955175 183.91379888836167 -45.60000000000021 + vertex 18.74153911393566 183.99371922636539 -45.214110472164236 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.382908925068453 183.7866639902833 -45.93137084989868 + vertex 18.603113027955175 183.91379888836167 -45.60000000000021 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.095933350982747 183.62097856533404 -46.18564064605529 + vertex 18.382908925068453 183.7866639902833 -45.93137084989868 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.761743216822424 183.42803380141606 -46.345481322062696 + vertex 18.095933350982747 183.62097856533404 -46.18564064605529 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + vertex 17.761743216822424 183.42803380141606 -46.345481322062696 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.497857139629675 182.1209785653337 -56.400000000000205 + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.213624804606916 185.4209785653337 -60.80000000000016 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 21.213624804606916 185.4209785653337 -60.80000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.867214643093217 185.22097856533364 -62.6000000000002 + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.930869841522005 182.3709785653335 -62.46602540378463 + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + vertex 20.867214643093217 185.22097856533364 -62.6000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.139738675372207 182.49156904278223 -62.56592582628924 + vertex 15.930869841522005 182.3709785653335 -62.46602540378463 + vertex 20.867214643093217 185.22097856533364 -62.6000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.363882543414228 182.62097856533347 -62.60000000000018 + vertex 16.139738675372207 182.49156904278223 -62.56592582628924 + vertex 20.867214643093217 185.22097856533364 -62.6000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 26.872507222919523 188.6881358528596 -48.900000000000155 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 26.872507222919523 188.6881358528596 -48.900000000000155 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + vertex 26.872507222919523 188.6881358528596 -48.900000000000155 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 24.158111177473785 187.12097856533413 -49.90000000000019 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 23.552922733760358 186.77157285444568 -49.9920002690197 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 24.158111177473785 187.12097856533413 -49.90000000000019 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 22.988976882364845 186.44597856533406 -50.2617314097822 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 23.552922733760358 186.77157285444568 -49.9920002690197 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 22.50470560109519 186.1663844107322 -50.69081169079649 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 22.988976882364845 186.44597856533406 -50.2617314097822 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 22.133111177473836 185.95184427022505 -51.25000000000016 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 22.50470560109519 186.1663844107322 -50.69081169079649 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 22.133111177473836 185.95184427022505 -51.25000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.819842587255902 185.770978565334 -52.60000000000017 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.89951715738182 185.8169786998437 -53.298811421776996 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 21.819842587255902 185.770978565334 -52.60000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 22.13311117747392 185.95184427022497 -53.95000000000018 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 21.89951715738182 185.8169786998437 -53.298811421776996 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 22.504705601095264 186.16638441073212 -54.509188309203864 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 22.13311117747392 185.95184427022497 -53.95000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 22.98897688236492 186.44597856533392 -54.93826859021815 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 22.504705601095264 186.16638441073212 -54.509188309203864 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 23.552922733760447 186.77157285444557 -55.20799973098066 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 22.98897688236492 186.44597856533392 -54.93826859021815 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 24.158111177473895 187.12097856533398 -55.30000000000017 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 23.552922733760447 186.77157285444557 -55.20799973098066 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.449007711854428 189.02097856533445 -42.600000000000165 + vertex 31.95233981153348 191.6209785653346 -42.60000000000016 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.17648367957548 191.75038808788585 -42.6340741737111 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 31.95233981153348 191.6209785653346 -42.60000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.385352513425666 191.8709785653346 -42.733974596215724 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 32.17648367957548 191.75038808788585 -42.6340741737111 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.56471224722925 191.97453195592786 -42.892893218813605 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 32.385352513425666 191.8709785653346 -42.733974596215724 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.70233981153347 192.0539912672268 -43.10000000000016 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 32.56471224722925 191.97453195592786 -42.892893218813605 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.613882543413824 182.1879658634419 -43.10000000000017 + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.044482839087948 183.01392332925212 -43.25451867793765 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.710292704927603 182.82097856533412 -43.414359353945066 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + vertex 17.044482839087948 183.01392332925212 -43.25451867793765 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + vertex 16.710292704927603 182.82097856533412 -43.414359353945066 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.42331713084192 182.65529314038483 -43.66862915010168 + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 16.710292704927603 182.82097856533412 -43.414359353945066 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.203113027955183 182.52815824230652 -44.00000000000015 + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 16.42331713084192 182.65529314038483 -43.66862915010168 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.064686941974696 182.44823790430283 -44.38588952783612 + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 16.203113027955183 182.52815824230652 -44.00000000000015 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 16.064686941974696 182.44823790430283 -44.38588952783612 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.017472381900088 182.42097856533402 -44.800000000000146 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 16.064686941974696 182.44823790430283 -44.38588952783612 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.064686941974692 182.4482379043028 -45.21411047216418 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 16.017472381900088 182.42097856533402 -44.800000000000146 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.203113027955208 182.5281582423065 -45.60000000000017 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 16.064686941974692 182.4482379043028 -45.21411047216418 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.423317130841962 182.65529314038477 -45.93137084989864 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 16.203113027955208 182.5281582423065 -45.60000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 16.71029270492767 182.820978565334 -46.185640646055276 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 16.423317130841962 182.65529314038477 -45.93137084989864 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.044482839087998 183.013923329252 -46.345481322062675 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 16.71029270492767 182.820978565334 -46.185640646055276 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 17.044482839087998 183.013923329252 -46.345481322062675 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.844267301143299 182.32097856533392 -48.80000000000017 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.056702866441515 183.02097856533393 -49.200000000000166 + vertex 15.844267301143299 182.32097856533392 -48.80000000000017 + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.844267301143299 182.32097856533392 -49.200000000000166 + vertex 15.844267301143299 182.32097856533392 -48.80000000000017 + vertex 17.056702866441515 183.02097856533393 -49.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 26.183111177473783 188.29011286044317 -51.25000000000016 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 25.81151675385244 188.075572719936 -50.69081169079648 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 26.183111177473783 188.29011286044317 -51.25000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 25.327245472582785 187.79597856533414 -50.2617314097822 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 25.81151675385244 188.075572719936 -50.69081169079648 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 24.763299621187205 187.47038427622255 -49.99200026901969 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 25.327245472582785 187.79597856533414 -50.2617314097822 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 24.158111177473785 187.12097856533413 -49.90000000000019 + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 24.763299621187205 187.47038427622255 -49.99200026901969 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 26.496379767691785 188.47097856533412 -52.60000000000017 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 26.416705197565914 188.4249784308243 -53.29881142177697 + vertex 26.496379767691785 188.47097856533412 -52.60000000000017 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 26.18311117747383 188.29011286044306 -53.95000000000018 + vertex 26.416705197565914 188.4249784308243 -53.29881142177697 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 25.8115167538525 188.07557271993588 -54.509188309203864 + vertex 26.18311117747383 188.29011286044306 -53.95000000000018 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 25.327245472582867 187.79597856533397 -54.93826859021815 + vertex 25.8115167538525 188.07557271993588 -54.509188309203864 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 24.76329962118731 187.4703842762224 -55.20799973098066 + vertex 25.327245472582867 187.79597856533397 -54.93826859021815 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 24.158111177473895 187.12097856533398 -55.30000000000017 + vertex 24.76329962118731 187.4703842762224 -55.20799973098066 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 24.158111177473895 187.12097856533398 -55.30000000000017 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.056702866441622 183.0209785653337 -56.00000000000017 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + vertex 15.844267301143415 182.3209785653337 -56.0000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + vertex 15.844267301143415 182.3209785653337 -56.0000000000002 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.497751387223385 190.20382127780866 -58.20000000000017 + vertex 26.87250722291962 188.68813585285935 -56.30000000000017 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + vertex 26.87250722291962 188.68813585285935 -56.30000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 26.87250722291962 188.68813585285935 -56.30000000000017 + vertex 29.497751387223385 190.20382127780866 -58.20000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 29.497751387223385 190.20382127780866 -58.20000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.102597550341027 188.82097856533392 -60.80000000000018 + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.574683241012032 190.2482379043027 -60.8141104721642 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.7131093269925 190.3281582423064 -61.20000000000017 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 29.574683241012032 190.2482379043027 -60.8141104721642 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.933313429879256 190.4552931403847 -61.53137084989864 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 29.7131093269925 190.3281582423064 -61.20000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.220289003964965 190.62097856533393 -61.78564064605528 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 29.933313429879256 190.4552931403847 -61.53137084989864 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.554479138125302 190.8139233292519 -61.945481322062676 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 30.220289003964965 190.62097856533393 -61.78564064605528 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992505 191.02097856533396 -62.00000000000017 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 30.554479138125302 190.8139233292519 -61.945481322062676 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 30.913109326992505 191.02097856533396 -62.00000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.449007711854858 189.02097856533385 -62.20000000000018 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.564712247229615 191.9745319559273 -62.30710678118673 + vertex 27.449007711854858 189.02097856533385 -62.20000000000018 + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + vertex 27.449007711854858 189.02097856533385 -62.20000000000018 + vertex 32.564712247229615 191.9745319559273 -62.30710678118673 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.38535251342604 191.870978565334 -62.46602540378461 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + vertex 32.564712247229615 191.9745319559273 -62.30710678118673 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.17648367957585 191.75038808788526 -62.56592582628924 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + vertex 32.38535251342604 191.870978565334 -62.46602540378461 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.952339811533854 191.62097856533398 -62.60000000000018 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + vertex 32.17648367957585 191.75038808788526 -62.56592582628924 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.471955053804386 191.92097856533422 -56.00000000000017 + vertex 32.47195505380439 191.9209785653342 -56.40000000000017 + vertex 31.259519488506168 191.22097856533415 -56.0000000000002 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 31.259519488506168 191.22097856533415 -56.0000000000002 + vertex 32.47195505380439 191.9209785653342 -56.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.81836521531815 192.1209785653342 -56.40000000000017 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 32.47195505380439 191.9209785653342 -56.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.11310932699248 191.71379888836162 -59.600000000000186 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 32.81836521531815 192.1209785653342 -56.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.25153541297297 191.7937192263653 -59.98588952783617 + vertex 32.11310932699248 191.71379888836162 -59.600000000000186 + vertex 32.81836521531815 192.1209785653342 -56.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + vertex 32.25153541297297 191.7937192263653 -59.98588952783617 + vertex 32.81836521531815 192.1209785653342 -56.40000000000017 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.89290522410574 191.5866639902833 -59.26862915010171 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 32.11310932699248 191.71379888836162 -59.600000000000186 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.60592965002002 191.42097856533408 -59.014359353945075 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 31.89290522410574 191.5866639902833 -59.26862915010171 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.27173951585969 191.2280338014161 -58.85451867793769 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 31.60592965002002 191.42097856533408 -59.014359353945075 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992483 191.02097856533405 -58.800000000000175 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 31.27173951585969 191.2280338014161 -58.85451867793769 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 30.913109326992483 191.02097856533405 -58.800000000000175 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.29874997304759 191.82097856533406 -60.400000000000205 + vertex 32.25153541297297 191.7937192263653 -59.98588952783617 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.25153541297298 191.7937192263653 -60.81411047216424 + vertex 32.29874997304759 191.82097856533406 -60.400000000000205 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.113109326992486 191.71379888836157 -61.2000000000002 + vertex 32.25153541297298 191.7937192263653 -60.81411047216424 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.89290522410577 191.58666399028323 -61.53137084989868 + vertex 32.113109326992486 191.71379888836157 -61.2000000000002 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.60592965002006 191.42097856533397 -61.78564064605529 + vertex 31.89290522410577 191.58666399028323 -61.53137084989868 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.78885611527162 192.1039414784786 -61.85881904510269 + vertex 31.60592965002006 191.42097856533397 -61.78564064605529 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.271739515859746 191.22803380141596 -61.94548132206272 + vertex 31.60592965002006 191.42097856533397 -61.78564064605529 + vertex 32.78885611527162 192.1039414784786 -61.85881904510269 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + vertex 31.271739515859746 191.22803380141596 -61.94548132206272 + vertex 32.78885611527162 192.1039414784786 -61.85881904510269 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992505 191.02097856533396 -62.00000000000017 + vertex 31.271739515859746 191.22803380141596 -61.94548132206272 + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992483 191.02097856533405 -58.800000000000175 + vertex 30.554479138125252 190.81392332925202 -58.85451867793765 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.22028900396494 190.62097856533407 -59.01435935394506 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 30.554479138125252 190.81392332925202 -58.85451867793765 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.93331342987922 190.45529314038478 -59.26862915010168 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 30.22028900396494 190.62097856533407 -59.01435935394506 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.713109326992512 190.32815824230644 -59.60000000000015 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 29.93331342987922 190.45529314038478 -59.26862915010168 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 29.713109326992512 190.32815824230644 -59.60000000000015 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.574683241012004 190.2482379043027 -59.985889527836115 + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 29.713109326992512 190.32815824230644 -59.60000000000015 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.527468680937393 190.22097856533398 -60.40000000000015 + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 29.574683241012004 190.2482379043027 -59.985889527836115 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.574683241012032 190.2482379043027 -60.8141104721642 + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 29.527468680937393 190.22097856533398 -60.40000000000015 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + vertex 18.818470967724306 184.03813585285943 -47.00000000000018 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + vertex 18.818470967724306 184.03813585285943 -47.00000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 18.818470967724306 184.03813585285943 -47.00000000000018 + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + vertex 31.25951948850606 191.22097856533435 -49.200000000000145 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.47195505380423 191.9209785653344 -49.200000000000124 + vertex 31.25951948850606 191.22097856533435 -49.200000000000145 + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.70233981153347 192.0539912672268 -43.10000000000016 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.271739515859426 191.22803380141656 -43.254518677937675 + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.60592965001975 191.4209785653346 -43.414359353945095 + vertex 31.271739515859426 191.22803380141656 -43.254518677937675 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + vertex 31.60592965001975 191.4209785653346 -43.414359353945095 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.89290522410545 191.58666399028382 -43.66862915010171 + vertex 31.60592965001975 191.4209785653346 -43.414359353945095 + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.11310932699219 191.7137988883621 -44.0000000000002 + vertex 31.89290522410545 191.58666399028382 -43.66862915010171 + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.25153541297268 191.79371922636582 -44.38588952783617 + vertex 32.11310932699219 191.7137988883621 -44.0000000000002 + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + vertex 32.25153541297268 191.79371922636582 -44.38588952783617 + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.298749973047286 191.82097856533454 -44.8000000000002 + vertex 32.25153541297268 191.79371922636582 -44.38588952783617 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.251535412972686 191.79371922636577 -45.21411047216423 + vertex 32.298749973047286 191.82097856533454 -44.8000000000002 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.113109326992195 191.71379888836208 -45.6000000000002 + vertex 32.251535412972686 191.79371922636577 -45.21411047216423 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.89290522410548 191.5866639902837 -45.93137084989867 + vertex 32.113109326992195 191.71379888836208 -45.6000000000002 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.60592965001976 191.42097856533448 -46.185640646055305 + vertex 31.89290522410548 191.5866639902837 -45.93137084989867 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.27173951585947 191.22803380141644 -46.3454813220627 + vertex 31.60592965001976 191.42097856533448 -46.185640646055305 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + vertex 31.27173951585947 191.22803380141644 -46.3454813220627 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.97504977010331e-16 + outer loop + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 31.95233981153348 191.6209785653346 -42.60000000000016 + vertex 27.449007711854428 189.02097856533445 -42.600000000000165 + vertex 181.95233981153302 -68.18664256999588 -42.600000000000065 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 177.44900771185397 -70.7866425699961 -42.60000000000007 + vertex 181.95233981153302 -68.18664256999588 -42.600000000000065 + vertex 27.449007711854428 189.02097856533445 -42.600000000000165 + endloop +endfacet +facet normal 0.11303899832181245 0.06526309611007218 0.9914448613738078 + outer loop + vertex 32.17648367957548 191.75038808788585 -42.6340741737111 + vertex 31.95233981153348 191.6209785653346 -42.60000000000016 + vertex 182.17648367957503 -68.05723304744467 -42.63407417371101 + endloop +endfacet +facet normal 0.11303899832181245 0.06526309611007218 0.9914448613738078 + outer loop + vertex 181.95233981153302 -68.18664256999588 -42.600000000000065 + vertex 182.17648367957503 -68.05723304744467 -42.63407417371101 + vertex 31.95233981153348 191.6209785653346 -42.60000000000016 + endloop +endfacet +facet normal -2.1893850906944248e-14 2.8843597776321774e-14 1.0 + outer loop + vertex 26.872507222919523 188.6881358528596 -48.900000000000155 + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + vertex 176.872507222919 -71.11948528247086 -48.90000000000006 + endloop +endfacet +facet normal -2.1893850906944248e-14 2.8843597776321774e-14 1.0 + outer loop + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + vertex 176.872507222919 -71.11948528247086 -48.90000000000006 + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + endloop +endfacet +facet normal 0.3314135740355569 0.19134171618258844 0.9238795325112902 + outer loop + vertex 32.385352513425666 191.8709785653346 -42.733974596215724 + vertex 32.17648367957548 191.75038808788585 -42.6340741737111 + vertex 182.38535251342523 -67.93664256999594 -42.73397459621563 + endloop +endfacet +facet normal 0.3314135740355569 0.19134171618258844 0.9238795325112902 + outer loop + vertex 182.17648367957503 -68.05723304744467 -42.63407417371101 + vertex 182.38535251342523 -67.93664256999594 -42.73397459621563 + vertex 32.17648367957548 191.75038808788585 -42.6340741737111 + endloop +endfacet +facet normal 0.5272028623656284 0.30438071450439697 0.7933533402912485 + outer loop + vertex 32.56471224722925 191.97453195592786 -42.892893218813605 + vertex 32.385352513425666 191.8709785653346 -42.733974596215724 + vertex 182.5647122472288 -67.83308917940268 -42.89289321881352 + endloop +endfacet +facet normal 0.5272028623656284 0.30438071450439697 0.7933533402912485 + outer loop + vertex 182.38535251342523 -67.93664256999594 -42.73397459621563 + vertex 182.5647122472288 -67.83308917940268 -42.89289321881352 + vertex 32.385352513425666 191.8709785653346 -42.733974596215724 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -7.797766215937039e-16 + outer loop + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + vertex 31.25951948850606 191.22097856533435 -49.200000000000145 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -7.797766215937039e-16 + outer loop + vertex 181.2595194885056 -68.58664256999616 -49.20000000000007 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + vertex 31.25951948850606 191.22097856533435 -49.200000000000145 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -6.227439144697608e-15 + outer loop + vertex 27.449007711854428 189.02097856533445 -42.600000000000165 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 177.44900771185397 -70.7866425699961 -42.60000000000007 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -6.227439144697608e-15 + outer loop + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + vertex 177.44900771185397 -70.7866425699961 -42.60000000000007 + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 29.007853438666466 189.92097856533445 -44.40000000000017 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 19.308368916280923 184.32097856533417 -44.40000000000018 + vertex 169.30836891628041 -75.48664256999639 -44.40000000000009 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + vertex 169.30836891628041 -75.48664256999639 -44.40000000000009 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 31.259519488506022 191.2209785653344 -47.00000000000015 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 179.49775138722265 -69.60379985752151 -47.00000000000008 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 29.007853438666466 189.92097856533445 -44.40000000000017 + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 20.867214643092836 185.22097856533426 -42.60000000000017 + vertex 170.8672146430924 -74.58664256999629 -42.600000000000094 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + vertex 170.8672146430924 -74.58664256999629 -42.600000000000094 + endloop +endfacet +facet normal 0.8001031451912461 0.46193976625568617 0.38268343236507835 + outer loop + vertex 32.70233981153347 192.0539912672268 -43.10000000000016 + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + endloop +endfacet +facet normal 0.8001031451912461 0.46193976625568617 0.38268343236507835 + outer loop + vertex 182.78885611527082 -67.70367965685142 -43.34118095489755 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + endloop +endfacet +facet normal 0.6123724356957971 0.35355339059327673 -0.7071067811865439 + outer loop + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + endloop +endfacet +facet normal 0.6123724356957971 0.35355339059327673 -0.7071067811865439 + outer loop + vertex 179.49775138722265 -69.60379985752151 -47.00000000000008 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 29.49775138722315 190.20382127780897 -47.00000000000017 + endloop +endfacet +facet normal -0.6123724356957944 -0.3535533905932752 0.707106781186547 + outer loop + vertex 29.007853438666526 189.92097856533437 -46.43431457505091 + vertex 26.872507222919523 188.6881358528596 -48.900000000000155 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal -0.6123724356957944 -0.3535533905932752 0.707106781186547 + outer loop + vertex 176.872507222919 -71.11948528247086 -48.90000000000006 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + vertex 26.872507222919523 188.6881358528596 -48.900000000000155 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 182.47195505380378 -67.88664256999614 -48.80000000000003 + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + vertex 171.21362480460613 -74.38664256999628 -43.00000000000008 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 171.21362480460613 -74.38664256999628 -43.00000000000008 + vertex 20.867214643092836 185.22097856533424 -43.00000000000017 + endloop +endfacet +facet normal 3.2732387459073106e-14 -2.2585965780327793e-14 -1.0 + outer loop + vertex 32.47195505380423 191.9209785653344 -49.200000000000124 + vertex 182.47195505380375 -67.88664256999614 -49.20000000000003 + vertex 31.25951948850606 191.22097856533435 -49.200000000000145 + endloop +endfacet +facet normal 3.2732387459073106e-14 -2.2585965780327793e-14 -1.0 + outer loop + vertex 181.2595194885056 -68.58664256999616 -49.20000000000007 + vertex 31.25951948850606 191.22097856533435 -49.200000000000145 + vertex 182.47195505380375 -67.88664256999614 -49.20000000000003 + endloop +endfacet +facet normal 0.6123724356957696 0.3535533905933116 0.7071067811865503 + outer loop + vertex 21.443715132028064 185.55382127780868 -48.90000000000018 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + endloop +endfacet +facet normal 0.6123724356957696 0.3535533905933116 0.7071067811865503 + outer loop + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + vertex 19.308368916280948 184.32097856533406 -46.43431457505094 + endloop +endfacet +facet normal -0.11303899832185084 -0.06526309611000983 0.9914448613738074 + outer loop + vertex 16.363882543413876 182.62097856533416 -42.60000000000018 + vertex 16.13973867537185 182.49156904278288 -42.63407417371111 + vertex 166.36388254341335 -77.18664256999637 -42.60000000000009 + endloop +endfacet +facet normal -0.11303899832185084 -0.06526309611000983 0.9914448613738074 + outer loop + vertex 166.13973867537135 -77.31605209254768 -42.63407417371102 + vertex 166.36388254341335 -77.18664256999637 -42.60000000000009 + vertex 16.13973867537185 182.49156904278288 -42.63407417371111 + endloop +endfacet +facet normal -0.331413574035596 -0.19134171618252374 0.9238795325112896 + outer loop + vertex 16.13973867537185 182.49156904278288 -42.63407417371111 + vertex 15.930869841521629 182.3709785653341 -42.73397459621574 + vertex 166.13973867537135 -77.31605209254768 -42.63407417371102 + endloop +endfacet +facet normal -0.331413574035596 -0.19134171618252374 0.9238795325112896 + outer loop + vertex 165.93086984152117 -77.43664256999641 -42.73397459621565 + vertex 166.13973867537135 -77.31605209254768 -42.63407417371102 + vertex 15.930869841521629 182.3709785653341 -42.73397459621574 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 -2.4387889803801356e-15 + outer loop + vertex 32.818365215317996 192.12097856533438 -48.800000000000125 + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 -2.4387889803801356e-15 + outer loop + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 27.44900771185445 189.02097856533442 -43.00000000000016 + vertex 27.10259755034066 188.82097856533443 -43.00000000000016 + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + vertex 27.10259755034066 188.82097856533443 -43.00000000000016 + endloop +endfacet +facet normal 0.8586164364012407 0.49572243068693855 0.1305261922200573 + outer loop + vertex 32.818365215317925 192.12097856533458 -43.60000000000016 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + endloop +endfacet +facet normal 0.8586164364012407 0.49572243068693855 0.1305261922200573 + outer loop + vertex 182.78885611527082 -67.70367965685142 -43.34118095489755 + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 32.78885611527129 192.1039414784791 -43.341180954897645 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 171.21362480460613 -74.38664256999628 -43.00000000000008 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 21.213624804606596 185.42097856533425 -43.00000000000017 + endloop +endfacet +facet normal -0.5272028623656614 -0.30438071450434273 0.7933533402912472 + outer loop + vertex 15.930869841521629 182.3709785653341 -42.73397459621574 + vertex 15.751510107718055 182.26742517474082 -42.892893218813626 + vertex 165.93086984152117 -77.43664256999641 -42.73397459621565 + endloop +endfacet +facet normal -0.5272028623656614 -0.30438071450434273 0.7933533402912472 + outer loop + vertex 165.75151010771756 -77.54019596058971 -42.89289321881353 + vertex 165.93086984152117 -77.43664256999641 -42.73397459621565 + vertex 15.751510107718055 182.26742517474082 -42.892893218813626 + endloop +endfacet +facet normal -0.6870641468694519 -0.3966766701456174 0.6087614290087188 + outer loop + vertex 15.613882543413824 182.1879658634419 -43.10000000000017 + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + vertex 15.751510107718055 182.26742517474082 -42.892893218813626 + endloop +endfacet +facet normal -0.6870641468694519 -0.3966766701456174 0.6087614290087188 + outer loop + vertex 165.75151010771756 -77.54019596058971 -42.89289321881353 + vertex 15.751510107718055 182.26742517474082 -42.892893218813626 + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + endloop +endfacet +facet normal 0.6870641468694341 0.3966766701456523 0.6087614290087163 + outer loop + vertex 32.70233981153347 192.0539912672268 -43.10000000000016 + vertex 32.56471224722925 191.97453195592786 -42.892893218813605 + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + endloop +endfacet +facet normal 0.6870641468694341 0.3966766701456523 0.6087614290087163 + outer loop + vertex 182.5647122472288 -67.83308917940268 -42.89289321881352 + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + vertex 32.56471224722925 191.97453195592786 -42.892893218813605 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -4.122523745489034e-14 + outer loop + vertex 27.10259755034066 188.82097856533443 -43.00000000000016 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -4.122523745489034e-14 + outer loop + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + vertex 27.10259755034073 188.8209785653344 -44.40000000000016 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 6.007129263248553e-15 + outer loop + vertex 32.47195505380423 191.9209785653344 -49.200000000000124 + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + vertex 182.47195505380375 -67.88664256999614 -49.20000000000003 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 6.007129263248553e-15 + outer loop + vertex 182.47195505380378 -67.88664256999614 -48.80000000000003 + vertex 182.47195505380375 -67.88664256999614 -49.20000000000003 + vertex 32.47195505380424 191.9209785653344 -48.800000000000125 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 21.213624804606596 185.4209785653342 -44.40000000000017 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 19.308368916280923 184.32097856533417 -44.40000000000018 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 169.30836891628041 -75.48664256999639 -44.40000000000009 + vertex 19.308368916280923 184.32097856533417 -44.40000000000018 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 20.867214643092836 185.22097856533426 -42.60000000000017 + vertex 16.363882543413876 182.62097856533416 -42.60000000000018 + vertex 170.8672146430924 -74.58664256999629 -42.600000000000094 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 166.36388254341335 -77.18664256999637 -42.60000000000009 + vertex 170.8672146430924 -74.58664256999629 -42.600000000000094 + vertex 16.363882543413876 182.62097856533416 -42.60000000000018 + endloop +endfacet +facet normal -0.1130389983218027 -0.06526309611006655 -0.9914448613738092 + outer loop + vertex 17.761743216822392 183.42803380141615 -43.25451867793767 + vertex 167.76174321682188 -76.37958733391434 -43.25451867793758 + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + endloop +endfacet +facet normal -0.1130389983218027 -0.06526309611006655 -0.9914448613738092 + outer loop + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + vertex 167.76174321682188 -76.37958733391434 -43.25451867793758 + endloop +endfacet +facet normal -0.8586164364012416 -0.495722430686939 0.13052619222005132 + outer loop + vertex 26.496379767691785 188.47097856533412 -52.60000000000017 + vertex 26.416705197565914 188.4249784308243 -53.29881142177697 + vertex 176.49637976769134 -71.33664256999639 -52.60000000000009 + endloop +endfacet +facet normal -0.8586164364012416 -0.495722430686939 0.13052619222005132 + outer loop + vertex 176.4167051975654 -71.38264270450611 -53.29881142177688 + vertex 176.49637976769134 -71.33664256999639 -52.60000000000009 + vertex 26.416705197565914 188.4249784308243 -53.29881142177697 + endloop +endfacet +facet normal -0.5272028623656277 -0.3043807145043966 -0.7933533402912488 + outer loop + vertex 25.81151675385244 188.075572719936 -50.69081169079648 + vertex 175.81151675385195 -71.73204841539453 -50.690811690796394 + vertex 25.327245472582785 187.79597856533414 -50.2617314097822 + endloop +endfacet +facet normal -0.5272028623656277 -0.3043807145043966 -0.7933533402912488 + outer loop + vertex 175.3272454725823 -72.01164256999637 -50.26173140978212 + vertex 25.327245472582785 187.79597856533414 -50.2617314097822 + vertex 175.81151675385195 -71.73204841539453 -50.690811690796394 + endloop +endfacet +facet normal -0.8001031451912648 -0.46193976625565186 0.38268343236508084 + outer loop + vertex 26.18311117747383 188.29011286044306 -53.95000000000018 + vertex 176.18311117747336 -71.51750827488746 -53.950000000000095 + vertex 26.416705197565914 188.4249784308243 -53.29881142177697 + endloop +endfacet +facet normal -0.8001031451912648 -0.46193976625565186 0.38268343236508084 + outer loop + vertex 176.4167051975654 -71.38264270450611 -53.29881142177688 + vertex 26.416705197565914 188.4249784308243 -53.29881142177697 + vertex 176.18311117747336 -71.51750827488746 -53.950000000000095 + endloop +endfacet +facet normal -0.8001031451912607 -0.46193976625566074 0.38268343236507896 + outer loop + vertex 15.613882543413824 182.1879658634419 -43.10000000000017 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + endloop +endfacet +facet normal -0.8001031451912607 -0.46193976625566074 0.38268343236507896 + outer loop + vertex 165.5273662396756 -77.66960548314098 -43.34118095489759 + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + endloop +endfacet +facet normal -0.11303899832182687 -0.06526309610999317 0.9914448613738114 + outer loop + vertex 24.76329962118731 187.4703842762224 -55.20799973098066 + vertex 24.158111177473895 187.12097856533398 -55.30000000000017 + vertex 174.76329962118686 -72.33723685910816 -55.20799973098057 + endloop +endfacet +facet normal -0.11303899832182687 -0.06526309610999317 0.9914448613738114 + outer loop + vertex 174.1581111774734 -72.68664256999658 -55.30000000000008 + vertex 174.76329962118686 -72.33723685910816 -55.20799973098057 + vertex 24.158111177473895 187.12097856533398 -55.30000000000017 + endloop +endfacet +facet normal 0.5272028623656277 0.3043807145043966 0.7933533402912488 + outer loop + vertex 22.98897688236492 186.44597856533392 -54.93826859021815 + vertex 22.504705601095264 186.16638441073212 -54.509188309203864 + vertex 172.98897688236445 -73.3616425699966 -54.93826859021808 + endloop +endfacet +facet normal 0.5272028623656277 0.3043807145043966 0.7933533402912488 + outer loop + vertex 172.5047056010948 -73.64123672459844 -54.50918830920379 + vertex 172.98897688236445 -73.3616425699966 -54.93826859021808 + vertex 22.504705601095264 186.16638441073212 -54.509188309203864 + endloop +endfacet +facet normal -0.8001031451912405 -0.4619397662556942 -0.382683432365081 + outer loop + vertex 26.183111177473783 188.29011286044317 -51.25000000000016 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + vertex 176.18311117747334 -71.51750827488736 -51.25000000000008 + endloop +endfacet +facet normal -0.8001031451912405 -0.4619397662556942 -0.382683432365081 + outer loop + vertex 176.4167051975654 -71.38264270450611 -51.901188578223284 + vertex 176.18311117747334 -71.51750827488736 -51.25000000000008 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + endloop +endfacet +facet normal -0.3314135740356126 -0.19134171618253332 0.9238795325112817 + outer loop + vertex 25.327245472582867 187.79597856533397 -54.93826859021815 + vertex 24.76329962118731 187.4703842762224 -55.20799973098066 + vertex 175.32724547258235 -72.01164256999647 -54.93826859021806 + endloop +endfacet +facet normal -0.3314135740356126 -0.19134171618253332 0.9238795325112817 + outer loop + vertex 174.76329962118686 -72.33723685910816 -55.20799973098057 + vertex 175.32724547258235 -72.01164256999647 -54.93826859021806 + vertex 24.76329962118731 187.4703842762224 -55.20799973098066 + endloop +endfacet +facet normal 0.11303899832182648 0.06526309610999435 -0.9914448613738113 + outer loop + vertex 24.158111177473785 187.12097856533413 -49.90000000000019 + vertex 174.1581111774733 -72.6866425699964 -49.90000000000009 + vertex 23.552922733760358 186.77157285444568 -49.9920002690197 + endloop +endfacet +facet normal 0.11303899832182648 0.06526309610999435 -0.9914448613738113 + outer loop + vertex 173.55292273375986 -73.03604828088481 -49.9920002690196 + vertex 23.552922733760358 186.77157285444568 -49.9920002690197 + vertex 174.1581111774733 -72.6866425699964 -49.90000000000009 + endloop +endfacet +facet normal 0.8001031451912648 0.46193976625565186 -0.38268343236508084 + outer loop + vertex 22.133111177473836 185.95184427022505 -51.25000000000016 + vertex 172.13311117747338 -73.85577686510548 -51.25000000000008 + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + endloop +endfacet +facet normal 0.8001031451912648 0.46193976625565186 -0.38268343236508084 + outer loop + vertex 171.8995171573813 -73.99064243548673 -51.90118857822331 + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + vertex 172.13311117747338 -73.85577686510548 -51.25000000000008 + endloop +endfacet +facet normal 0.33141357403557586 0.19134171618259377 0.9238795325112824 + outer loop + vertex 23.552922733760447 186.77157285444557 -55.20799973098066 + vertex 22.98897688236492 186.44597856533392 -54.93826859021815 + vertex 173.55292273376 -73.036048280885 -55.20799973098057 + endloop +endfacet +facet normal 0.33141357403557586 0.19134171618259377 0.9238795325112824 + outer loop + vertex 172.98897688236445 -73.3616425699966 -54.93826859021808 + vertex 173.55292273376 -73.036048280885 -55.20799973098057 + vertex 22.98897688236492 186.44597856533392 -54.93826859021815 + endloop +endfacet +facet normal -0.6870641468694499 -0.39667667014562186 0.6087614290087181 + outer loop + vertex 26.18311117747383 188.29011286044306 -53.95000000000018 + vertex 25.8115167538525 188.07557271993588 -54.509188309203864 + vertex 176.18311117747336 -71.51750827488746 -53.950000000000095 + endloop +endfacet +facet normal -0.6870641468694499 -0.39667667014562186 0.6087614290087181 + outer loop + vertex 175.81151675385203 -71.73204841539467 -54.50918830920377 + vertex 176.18311117747336 -71.51750827488746 -53.950000000000095 + vertex 25.8115167538525 188.07557271993588 -54.509188309203864 + endloop +endfacet +facet normal -0.858616436401246 -0.4957224306869303 -0.1305261922200552 + outer loop + vertex 26.496379767691785 188.47097856533412 -52.60000000000017 + vertex 176.49637976769134 -71.33664256999639 -52.60000000000009 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + endloop +endfacet +facet normal -0.858616436401246 -0.4957224306869303 -0.1305261922200552 + outer loop + vertex 176.4167051975654 -71.38264270450611 -51.901188578223284 + vertex 26.41670519756588 188.42497843082435 -51.901188578223376 + vertex 176.49637976769134 -71.33664256999639 -52.60000000000009 + endloop +endfacet +facet normal 0.8001031451912411 0.4619397662556833 0.38268343236509217 + outer loop + vertex 22.13311117747392 185.95184427022497 -53.95000000000018 + vertex 21.89951715738182 185.8169786998437 -53.298811421776996 + vertex 172.1331111774734 -73.85577686510557 -53.95000000000012 + endloop +endfacet +facet normal 0.8001031451912411 0.4619397662556833 0.38268343236509217 + outer loop + vertex 171.89951715738138 -73.99064243548682 -53.298811421776925 + vertex 172.1331111774734 -73.85577686510557 -53.95000000000012 + vertex 21.89951715738182 185.8169786998437 -53.298811421776996 + endloop +endfacet +facet normal 0.11303899832179491 0.06526309610997753 -0.9914448613738159 + outer loop + vertex 17.40311302795516 183.22097856533415 -43.20000000000017 + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + vertex 17.044482839087948 183.01392332925212 -43.25451867793765 + endloop +endfacet +facet normal 0.11303899832179491 0.06526309610997753 -0.9914448613738159 + outer loop + vertex 167.0444828390875 -76.7936978060784 -43.254518677937554 + vertex 17.044482839087948 183.01392332925212 -43.25451867793765 + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + endloop +endfacet +facet normal 0.6870641468694515 0.39667667014561714 -0.6087614290087193 + outer loop + vertex 22.133111177473836 185.95184427022505 -51.25000000000016 + vertex 22.50470560109519 186.1663844107322 -50.69081169079649 + vertex 172.13311117747338 -73.85577686510548 -51.25000000000008 + endloop +endfacet +facet normal 0.6870641468694515 0.39667667014561714 -0.6087614290087193 + outer loop + vertex 172.50470560109468 -73.64123672459827 -50.690811690796394 + vertex 172.13311117747338 -73.85577686510548 -51.25000000000008 + vertex 22.50470560109519 186.1663844107322 -50.69081169079649 + endloop +endfacet +facet normal -0.5272028623656583 -0.30438071450434656 0.7933533402912477 + outer loop + vertex 25.8115167538525 188.07557271993588 -54.509188309203864 + vertex 25.327245472582867 187.79597856533397 -54.93826859021815 + vertex 175.81151675385203 -71.73204841539467 -54.50918830920377 + endloop +endfacet +facet normal -0.5272028623656583 -0.30438071450434656 0.7933533402912477 + outer loop + vertex 175.32724547258235 -72.01164256999647 -54.93826859021806 + vertex 175.81151675385203 -71.73204841539467 -54.50918830920377 + vertex 25.327245472582867 187.79597856533397 -54.93826859021815 + endloop +endfacet +facet normal -0.11303899832178853 -0.06526309611005696 -0.9914448613738115 + outer loop + vertex 24.763299621187205 187.47038427622255 -49.99200026901969 + vertex 174.76329962118675 -72.33723685910797 -49.99200026901961 + vertex 24.158111177473785 187.12097856533413 -49.90000000000019 + endloop +endfacet +facet normal -0.11303899832178853 -0.06526309611005696 -0.9914448613738115 + outer loop + vertex 174.1581111774733 -72.6866425699964 -49.90000000000009 + vertex 24.158111177473785 187.12097856533413 -49.90000000000019 + vertex 174.76329962118675 -72.33723685910797 -49.99200026901961 + endloop +endfacet +facet normal 0.6870641468694301 0.39667667014564995 0.6087614290087222 + outer loop + vertex 22.504705601095264 186.16638441073212 -54.509188309203864 + vertex 22.13311117747392 185.95184427022497 -53.95000000000018 + vertex 172.5047056010948 -73.64123672459844 -54.50918830920379 + endloop +endfacet +facet normal 0.6870641468694301 0.39667667014564995 0.6087614290087222 + outer loop + vertex 172.1331111774734 -73.85577686510557 -53.95000000000012 + vertex 172.5047056010948 -73.64123672459844 -54.50918830920379 + vertex 22.13311117747392 185.95184427022497 -53.95000000000018 + endloop +endfacet +facet normal 0.8586164364012417 0.4957224306869391 0.13052619222005107 + outer loop + vertex 21.819842587255902 185.770978565334 -52.60000000000017 + vertex 171.8198425872554 -74.03664256999654 -52.60000000000011 + vertex 21.89951715738182 185.8169786998437 -53.298811421776996 + endloop +endfacet +facet normal 0.8586164364012417 0.4957224306869391 0.13052619222005107 + outer loop + vertex 171.89951715738138 -73.99064243548682 -53.298811421776925 + vertex 21.89951715738182 185.8169786998437 -53.298811421776996 + vertex 171.8198425872554 -74.03664256999654 -52.60000000000011 + endloop +endfacet +facet normal 0.11303899832178853 0.06526309611005696 0.9914448613738115 + outer loop + vertex 24.158111177473895 187.12097856533398 -55.30000000000017 + vertex 23.552922733760447 186.77157285444557 -55.20799973098066 + vertex 174.1581111774734 -72.68664256999658 -55.30000000000008 + endloop +endfacet +facet normal 0.11303899832178853 0.06526309611005696 0.9914448613738115 + outer loop + vertex 173.55292273376 -73.036048280885 -55.20799973098057 + vertex 174.1581111774734 -72.68664256999658 -55.30000000000008 + vertex 23.552922733760447 186.77157285444557 -55.20799973098066 + endloop +endfacet +facet normal 0.33141357403561666 0.19134171618253848 -0.9238795325112792 + outer loop + vertex 17.044482839087948 183.01392332925212 -43.25451867793765 + vertex 167.0444828390875 -76.7936978060784 -43.254518677937554 + vertex 16.710292704927603 182.82097856533412 -43.414359353945066 + endloop +endfacet +facet normal 0.33141357403561666 0.19134171618253848 -0.9238795325112792 + outer loop + vertex 166.7102927049271 -76.98664256999636 -43.414359353944974 + vertex 16.710292704927603 182.82097856533412 -43.414359353945066 + vertex 167.0444828390875 -76.7936978060784 -43.254518677937554 + endloop +endfacet +facet normal -0.6870641468694285 -0.39667667014565466 -0.6087614290087209 + outer loop + vertex 26.183111177473783 188.29011286044317 -51.25000000000016 + vertex 176.18311117747334 -71.51750827488736 -51.25000000000008 + vertex 25.81151675385244 188.075572719936 -50.69081169079648 + endloop +endfacet +facet normal -0.6870641468694285 -0.39667667014565466 -0.6087614290087209 + outer loop + vertex 175.81151675385195 -71.73204841539453 -50.690811690796394 + vertex 25.81151675385244 188.075572719936 -50.69081169079648 + vertex 176.18311117747334 -71.51750827488736 -51.25000000000008 + endloop +endfacet +facet normal 0.5272028623656598 0.3043807145043362 -0.7933533402912507 + outer loop + vertex 16.710292704927603 182.82097856533412 -43.414359353945066 + vertex 166.7102927049271 -76.98664256999636 -43.414359353944974 + vertex 16.42331713084192 182.65529314038483 -43.66862915010168 + endloop +endfacet +facet normal 0.5272028623656598 0.3043807145043362 -0.7933533402912507 + outer loop + vertex 166.4233171308414 -77.15232799494562 -43.66862915010159 + vertex 16.42331713084192 182.65529314038483 -43.66862915010168 + vertex 166.7102927049271 -76.98664256999636 -43.414359353944974 + endloop +endfacet +facet normal -0.33141357403554456 -0.19134171618257287 -0.923879532511298 + outer loop + vertex 18.09593335098268 183.62097856533416 -43.41435935394507 + vertex 168.09593335098222 -76.18664256999637 -43.414359353944974 + vertex 17.761743216822392 183.42803380141615 -43.25451867793767 + endloop +endfacet +facet normal -0.33141357403554456 -0.19134171618257287 -0.923879532511298 + outer loop + vertex 167.76174321682188 -76.37958733391434 -43.25451867793758 + vertex 17.761743216822392 183.42803380141615 -43.25451867793767 + vertex 168.09593335098222 -76.18664256999637 -43.414359353944974 + endloop +endfacet +facet normal 0.5272028623656583 0.30438071450434656 -0.7933533402912477 + outer loop + vertex 22.988976882364845 186.44597856533406 -50.2617314097822 + vertex 172.98897688236434 -73.36164256999642 -50.26173140978211 + vertex 22.50470560109519 186.1663844107322 -50.69081169079649 + endloop +endfacet +facet normal 0.5272028623656583 0.30438071450434656 -0.7933533402912477 + outer loop + vertex 172.50470560109468 -73.64123672459827 -50.690811690796394 + vertex 22.50470560109519 186.1663844107322 -50.69081169079649 + vertex 172.98897688236434 -73.36164256999642 -50.26173140978211 + endloop +endfacet +facet normal 0.3314135740356126 0.19134171618253332 -0.9238795325112817 + outer loop + vertex 23.552922733760358 186.77157285444568 -49.9920002690197 + vertex 173.55292273375986 -73.03604828088481 -49.9920002690196 + vertex 22.988976882364845 186.44597856533406 -50.2617314097822 + endloop +endfacet +facet normal 0.3314135740356126 0.19134171618253332 -0.9238795325112817 + outer loop + vertex 172.98897688236434 -73.36164256999642 -50.26173140978211 + vertex 22.988976882364845 186.44597856533406 -50.2617314097822 + vertex 173.55292273375986 -73.03604828088481 -49.9920002690196 + endloop +endfacet +facet normal 0.8586164364012416 0.495722430686939 -0.13052619222005132 + outer loop + vertex 21.819842587255902 185.770978565334 -52.60000000000017 + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + vertex 171.8198425872554 -74.03664256999654 -52.60000000000011 + endloop +endfacet +facet normal 0.8586164364012416 0.495722430686939 -0.13052619222005132 + outer loop + vertex 171.8995171573813 -73.99064243548673 -51.90118857822331 + vertex 171.8198425872554 -74.03664256999654 -52.60000000000011 + vertex 21.899517157381815 185.81697869984376 -51.901188578223376 + endloop +endfacet +facet normal -0.8586164364012411 -0.4957224306869387 0.1305261922200554 + outer loop + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + endloop +endfacet +facet normal -0.8586164364012411 -0.4957224306869387 0.1305261922200554 + outer loop + vertex 165.5273662396756 -77.66960548314098 -43.34118095489759 + vertex 15.527366239676041 182.13801565218952 -43.34118095489766 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + endloop +endfacet +facet normal 0.6870641468694392 0.39667667014561564 -0.6087614290087343 + outer loop + vertex 16.203113027955183 182.52815824230652 -44.00000000000015 + vertex 16.42331713084192 182.65529314038483 -43.66862915010168 + vertex 166.20311302795469 -77.27946289302398 -44.00000000000006 + endloop +endfacet +facet normal 0.6870641468694392 0.39667667014561564 -0.6087614290087343 + outer loop + vertex 166.4233171308414 -77.15232799494562 -43.66862915010159 + vertex 166.20311302795469 -77.27946289302398 -44.00000000000006 + vertex 16.42331713084192 182.65529314038483 -43.66862915010168 + endloop +endfacet +facet normal -0.3314135740355789 -0.1913417161825871 -0.9238795325112827 + outer loop + vertex 25.327245472582785 187.79597856533414 -50.2617314097822 + vertex 175.3272454725823 -72.01164256999637 -50.26173140978212 + vertex 24.763299621187205 187.47038427622255 -49.99200026901969 + endloop +endfacet +facet normal -0.3314135740355789 -0.1913417161825871 -0.9238795325112827 + outer loop + vertex 174.76329962118675 -72.33723685910797 -49.99200026901961 + vertex 24.763299621187205 187.47038427622255 -49.99200026901969 + vertex 175.3272454725823 -72.01164256999637 -50.26173140978212 + endloop +endfacet +facet normal -0.33141357403561666 -0.19134171618253848 0.9238795325112792 + outer loop + vertex 18.095933350982747 183.62097856533404 -46.18564064605529 + vertex 17.761743216822424 183.42803380141606 -46.345481322062696 + vertex 168.09593335098225 -76.18664256999647 -46.18564064605519 + endloop +endfacet +facet normal -0.33141357403561666 -0.19134171618253848 0.9238795325112792 + outer loop + vertex 167.7617432168219 -76.37958733391443 -46.345481322062604 + vertex 168.09593335098225 -76.18664256999647 -46.18564064605519 + vertex 17.761743216822424 183.42803380141606 -46.345481322062696 + endloop +endfacet +facet normal 0.1130389983218041 0.06526309611006595 0.9914448613738092 + outer loop + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + vertex 17.044482839087998 183.013923329252 -46.345481322062675 + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + endloop +endfacet +facet normal 0.1130389983218041 0.06526309611006595 0.9914448613738092 + outer loop + vertex 167.0444828390875 -76.79369780607853 -46.34548132206258 + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + vertex 17.044482839087998 183.013923329252 -46.345481322062675 + endloop +endfacet +facet normal 0.8586164364012473 0.49572243068693106 0.13052619222004383 + outer loop + vertex 16.064686941974692 182.4482379043028 -45.21411047216418 + vertex 16.017472381900088 182.42097856533402 -44.800000000000146 + vertex 166.06468694197426 -77.35938323102779 -45.214110472164094 + endloop +endfacet +facet normal 0.8586164364012473 0.49572243068693106 0.13052619222004383 + outer loop + vertex 166.01747238189967 -77.38664256999651 -44.80000000000006 + vertex 166.06468694197426 -77.35938323102779 -45.214110472164094 + vertex 16.017472381900088 182.42097856533402 -44.800000000000146 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006184 + outer loop + vertex 18.788753674010273 184.02097856533413 -44.8000000000002 + vertex 18.74153911393566 183.99371922636539 -45.214110472164236 + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006184 + outer loop + vertex 168.7415391139352 -75.81390190896518 -45.21411047216414 + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + vertex 18.74153911393566 183.99371922636539 -45.214110472164236 + endloop +endfacet +facet normal -0.6870641468694271 -0.39667667014565383 -0.6087614290087231 + outer loop + vertex 18.38290892506843 183.7866639902834 -43.668629150101715 + vertex 18.60311302795516 183.9137988883617 -44.000000000000185 + vertex 168.3829089250679 -76.0209571450471 -43.66862915010161 + endloop +endfacet +facet normal -0.6870641468694271 -0.39667667014565383 -0.6087614290087231 + outer loop + vertex 168.60311302795466 -75.89382224696875 -44.000000000000085 + vertex 168.3829089250679 -76.0209571450471 -43.66862915010161 + vertex 18.60311302795516 183.9137988883617 -44.000000000000185 + endloop +endfacet +facet normal 0.858616436401251 0.49572243068693317 0.13052619222001063 + outer loop + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + vertex 166.06468694197451 -77.35938323102825 -60.8141104721641 + endloop +endfacet +facet normal 0.858616436401251 0.49572243068693317 0.13052619222001063 + outer loop + vertex 166.0174723818999 -77.38664256999691 -60.40000000000007 + vertex 166.06468694197451 -77.35938323102825 -60.8141104721641 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + endloop +endfacet +facet normal 0.5272028623656546 0.30438071450442333 0.7933533402912207 + outer loop + vertex 16.71029270492767 182.820978565334 -46.185640646055276 + vertex 16.423317130841962 182.65529314038477 -45.93137084989864 + vertex 166.71029270492718 -76.9866425699965 -46.18564064605519 + endloop +endfacet +facet normal 0.5272028623656546 0.30438071450442333 0.7933533402912207 + outer loop + vertex 166.42331713084147 -77.15232799494576 -45.93137084989855 + vertex 166.71029270492718 -76.9866425699965 -46.18564064605519 + vertex 16.423317130841962 182.65529314038477 -45.93137084989864 + endloop +endfacet +facet normal -0.11303899832179477 -0.06526309610997605 0.991444861373816 + outer loop + vertex 17.761743216822424 183.42803380141606 -46.345481322062696 + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + vertex 167.7617432168219 -76.37958733391443 -46.345481322062604 + endloop +endfacet +facet normal -0.11303899832179477 -0.06526309610997605 0.991444861373816 + outer loop + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + vertex 167.7617432168219 -76.37958733391443 -46.345481322062604 + vertex 17.40311302795521 183.220978565334 -46.40000000000017 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 16.064686941974696 182.44823790430283 -44.38588952783612 + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + vertex 16.017472381900088 182.42097856533402 -44.800000000000146 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 166.01747238189967 -77.38664256999651 -44.80000000000006 + vertex 16.017472381900088 182.42097856533402 -44.800000000000146 + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + endloop +endfacet +facet normal -0.33141357403556354 -0.19134171618250495 0.9238795325113052 + outer loop + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + vertex 168.09593335098256 -76.1866425699969 -61.7856406460552 + endloop +endfacet +facet normal -0.33141357403556354 -0.19134171618250495 0.9238795325113052 + outer loop + vertex 167.7617432168222 -76.37958733391493 -61.94548132206259 + vertex 168.09593335098256 -76.1866425699969 -61.7856406460552 + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + endloop +endfacet +facet normal 0.6870641468694271 0.39667667014565383 0.6087614290087231 + outer loop + vertex 16.203113027955208 182.5281582423065 -45.60000000000017 + vertex 166.2031130279547 -77.27946289302402 -45.60000000000008 + vertex 16.423317130841962 182.65529314038477 -45.93137084989864 + endloop +endfacet +facet normal 0.6870641468694271 0.39667667014565383 0.6087614290087231 + outer loop + vertex 166.42331713084147 -77.15232799494576 -45.93137084989855 + vertex 16.423317130841962 182.65529314038477 -45.93137084989864 + vertex 166.2031130279547 -77.27946289302402 -45.60000000000008 + endloop +endfacet +facet normal 0.687064146869438 0.3966766701456545 0.6087614290087103 + outer loop + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + vertex 166.20311302795503 -77.27946289302447 -61.20000000000007 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + endloop +endfacet +facet normal 0.687064146869438 0.3966766701456545 0.6087614290087103 + outer loop + vertex 166.42331713084175 -77.15232799494622 -61.531370849898536 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + vertex 166.20311302795503 -77.27946289302447 -61.20000000000007 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006184 + outer loop + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 168.78875367401005 -75.78664256999683 -60.40000000000009 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006184 + outer loop + vertex 168.74153911393546 -75.81390190896563 -60.814110472164124 + vertex 168.78875367401005 -75.78664256999683 -60.40000000000009 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + endloop +endfacet +facet normal 0.33141357403558563 0.19134171618259377 0.9238795325112789 + outer loop + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + vertex 167.04448283908783 -76.79369780607902 -61.94548132206259 + endloop +endfacet +facet normal 0.33141357403558563 0.19134171618259377 0.9238795325112789 + outer loop + vertex 166.71029270492747 -76.98664256999696 -61.78564064605518 + vertex 167.04448283908783 -76.79369780607902 -61.94548132206259 + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + endloop +endfacet +facet normal 0.8001031451912346 0.4619397662556795 0.38268343236511065 + outer loop + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + vertex 166.06468694197451 -77.35938323102825 -60.8141104721641 + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + endloop +endfacet +facet normal 0.8001031451912346 0.4619397662556795 0.38268343236511065 + outer loop + vertex 166.20311302795503 -77.27946289302447 -61.20000000000007 + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + vertex 166.06468694197451 -77.35938323102825 -60.8141104721641 + endloop +endfacet +facet normal 0.3314135740355424 0.19134171618257165 0.923879532511299 + outer loop + vertex 17.044482839087998 183.013923329252 -46.345481322062675 + vertex 16.71029270492767 182.820978565334 -46.185640646055276 + vertex 167.0444828390875 -76.79369780607853 -46.34548132206258 + endloop +endfacet +facet normal 0.3314135740355424 0.19134171618257165 0.923879532511299 + outer loop + vertex 166.71029270492718 -76.9866425699965 -46.18564064605519 + vertex 167.0444828390875 -76.79369780607853 -46.34548132206258 + vertex 16.71029270492767 182.820978565334 -46.185640646055276 + endloop +endfacet +facet normal -0.5272028623656598 -0.3043807145043362 0.7933533402912507 + outer loop + vertex 18.382908925068453 183.7866639902833 -45.93137084989868 + vertex 18.095933350982747 183.62097856533404 -46.18564064605529 + vertex 168.382908925068 -76.0209571450472 -45.93137084989857 + endloop +endfacet +facet normal -0.5272028623656598 -0.3043807145043362 0.7933533402912507 + outer loop + vertex 168.09593335098225 -76.18664256999647 -46.18564064605519 + vertex 168.382908925068 -76.0209571450472 -45.93137084989857 + vertex 18.095933350982747 183.62097856533404 -46.18564064605529 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 166.0174723818999 -77.38664256999691 -60.40000000000007 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + endloop +endfacet +facet normal -0.5272028623656634 -0.3043807145043495 0.7933533402912432 + outer loop + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + vertex 168.3829089250683 -76.0209571450477 -61.531370849898586 + endloop +endfacet +facet normal -0.5272028623656634 -0.3043807145043495 0.7933533402912432 + outer loop + vertex 168.09593335098256 -76.1866425699969 -61.7856406460552 + vertex 168.3829089250683 -76.0209571450477 -61.531370849898586 + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + endloop +endfacet +facet normal -0.8001031451912616 -0.4619397662556725 0.38268343236506275 + outer loop + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + vertex 168.74153911393546 -75.81390190896563 -60.814110472164124 + endloop +endfacet +facet normal -0.8001031451912616 -0.4619397662556725 0.38268343236506275 + outer loop + vertex 168.603113027955 -75.89382224696931 -61.20000000000009 + vertex 168.74153911393546 -75.81390190896563 -60.814110472164124 + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + endloop +endfacet +facet normal -0.8586164364012474 -0.4957224306869311 -0.13052619222004347 + outer loop + vertex 18.788753674010273 184.02097856533413 -44.8000000000002 + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + endloop +endfacet +facet normal -0.8586164364012474 -0.4957224306869311 -0.13052619222004347 + outer loop + vertex 168.7415391139352 -75.81390190896514 -44.38588952783605 + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + endloop +endfacet +facet normal -0.8001031451912493 -0.4619397662556654 0.3826834323650974 + outer loop + vertex 18.74153911393566 183.99371922636539 -45.214110472164236 + vertex 18.603113027955175 183.91379888836167 -45.60000000000021 + vertex 168.7415391139352 -75.81390190896518 -45.21411047216414 + endloop +endfacet +facet normal -0.8001031451912493 -0.4619397662556654 0.3826834323650974 + outer loop + vertex 168.60311302795475 -75.8938222469689 -45.6000000000001 + vertex 168.7415391139352 -75.81390190896518 -45.21411047216414 + vertex 18.603113027955175 183.91379888836167 -45.60000000000021 + endloop +endfacet +facet normal 0.8001031451912448 0.4619397662556967 0.3826834323650685 + outer loop + vertex 16.064686941974692 182.4482379043028 -45.21411047216418 + vertex 166.06468694197426 -77.35938323102779 -45.214110472164094 + vertex 16.203113027955208 182.5281582423065 -45.60000000000017 + endloop +endfacet +facet normal 0.8001031451912448 0.4619397662556967 0.3826834323650685 + outer loop + vertex 166.2031130279547 -77.27946289302402 -45.60000000000008 + vertex 16.203113027955208 182.5281582423065 -45.60000000000017 + vertex 166.06468694197426 -77.35938323102779 -45.214110472164094 + endloop +endfacet +facet normal -0.11303899832184168 -0.06526309611000454 0.9914448613738089 + outer loop + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + vertex 167.7617432168222 -76.37958733391493 -61.94548132206259 + endloop +endfacet +facet normal -0.11303899832184168 -0.06526309611000454 0.9914448613738089 + outer loop + vertex 167.403113027955 -76.58664256999695 -62.00000000000009 + vertex 167.7617432168222 -76.37958733391493 -61.94548132206259 + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + endloop +endfacet +facet normal 0.1130389983218041 0.06526309611006595 0.9914448613738092 + outer loop + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + vertex 167.403113027955 -76.58664256999695 -62.00000000000009 + endloop +endfacet +facet normal 0.1130389983218041 0.06526309611006595 0.9914448613738092 + outer loop + vertex 167.04448283908783 -76.79369780607902 -61.94548132206259 + vertex 167.403113027955 -76.58664256999695 -62.00000000000009 + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + endloop +endfacet +facet normal -0.8001031451912449 -0.4619397662556855 -0.3826834323650818 + outer loop + vertex 18.60311302795516 183.9137988883617 -44.000000000000185 + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + vertex 168.60311302795466 -75.89382224696875 -44.000000000000085 + endloop +endfacet +facet normal -0.8001031451912449 -0.4619397662556855 -0.3826834323650818 + outer loop + vertex 168.7415391139352 -75.81390190896514 -44.38588952783605 + vertex 168.60311302795466 -75.89382224696875 -44.000000000000085 + vertex 18.74153911393566 183.9937192263654 -44.38588952783615 + endloop +endfacet +facet normal -0.5272028623656567 -0.3043807145044133 -0.7933533402912233 + outer loop + vertex 18.38290892506843 183.7866639902834 -43.668629150101715 + vertex 168.3829089250679 -76.0209571450471 -43.66862915010161 + vertex 18.09593335098268 183.62097856533416 -43.41435935394507 + endloop +endfacet +facet normal -0.5272028623656567 -0.3043807145044133 -0.7933533402912233 + outer loop + vertex 168.09593335098222 -76.18664256999637 -43.414359353944974 + vertex 18.09593335098268 183.62097856533416 -43.41435935394507 + vertex 168.3829089250679 -76.0209571450471 -43.66862915010161 + endloop +endfacet +facet normal 0.5272028623656622 0.30438071450441645 0.7933533402912182 + outer loop + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + vertex 166.71029270492747 -76.98664256999696 -61.78564064605518 + endloop +endfacet +facet normal 0.5272028623656622 0.30438071450441645 0.7933533402912182 + outer loop + vertex 166.42331713084175 -77.15232799494622 -61.531370849898536 + vertex 166.71029270492747 -76.98664256999696 -61.78564064605518 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + endloop +endfacet +facet normal 0.8001031451912493 0.4619397662556654 -0.3826834323650974 + outer loop + vertex 16.064686941974696 182.44823790430283 -44.38588952783612 + vertex 16.203113027955183 182.52815824230652 -44.00000000000015 + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + endloop +endfacet +facet normal 0.8001031451912493 0.4619397662556654 -0.3826834323650974 + outer loop + vertex 166.20311302795469 -77.27946289302398 -44.00000000000006 + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + vertex 16.203113027955183 182.52815824230652 -44.00000000000015 + endloop +endfacet +facet normal 0.8001031451912616 0.4619397662556725 -0.38268343236506275 + outer loop + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + endloop +endfacet +facet normal 0.8001031451912616 0.4619397662556725 -0.38268343236506275 + outer loop + vertex 166.20311302795497 -77.27946289302443 -59.60000000000007 + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + endloop +endfacet +facet normal -0.6870641468694508 -0.3966766701456224 0.6087614290087167 + outer loop + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + vertex 168.603113027955 -75.89382224696931 -61.20000000000009 + endloop +endfacet +facet normal -0.6870641468694508 -0.3966766701456224 0.6087614290087167 + outer loop + vertex 168.3829089250683 -76.0209571450477 -61.531370849898586 + vertex 168.603113027955 -75.89382224696931 -61.20000000000009 + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + endloop +endfacet +facet normal -0.6870641468694392 -0.39667667014561564 0.6087614290087343 + outer loop + vertex 18.603113027955175 183.91379888836167 -45.60000000000021 + vertex 18.382908925068453 183.7866639902833 -45.93137084989868 + vertex 168.60311302795475 -75.8938222469689 -45.6000000000001 + endloop +endfacet +facet normal -0.6870641468694392 -0.39667667014561564 0.6087614290087343 + outer loop + vertex 168.382908925068 -76.0209571450472 -45.93137084989857 + vertex 168.60311302795475 -75.8938222469689 -45.6000000000001 + vertex 18.382908925068453 183.7866639902833 -45.93137084989868 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006184 + outer loop + vertex 32.25153541297298 191.7937192263653 -60.81411047216424 + vertex 182.25153541297252 -68.01390190896524 -60.814110472164145 + vertex 32.29874997304759 191.82097856533406 -60.400000000000205 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006184 + outer loop + vertex 182.29874997304708 -67.98664256999643 -60.40000000000011 + vertex 32.29874997304759 191.82097856533406 -60.400000000000205 + vertex 182.25153541297252 -68.01390190896524 -60.814110472164145 + endloop +endfacet +facet normal 0.5272028623656567 0.3043807145044133 0.7933533402912233 + outer loop + vertex 30.220289003964965 190.62097856533393 -61.78564064605528 + vertex 29.933313429879256 190.4552931403847 -61.53137084989864 + vertex 180.2202890039645 -69.18664256999656 -61.785640646055185 + endloop +endfacet +facet normal 0.5272028623656567 0.3043807145044133 0.7933533402912233 + outer loop + vertex 179.93331342987878 -69.35232799494582 -61.53137084989855 + vertex 180.2202890039645 -69.18664256999656 -61.785640646055185 + vertex 29.933313429879256 190.4552931403847 -61.53137084989864 + endloop +endfacet +facet normal -0.33141357403558563 -0.19134171618259377 -0.9238795325112789 + outer loop + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + vertex 168.09593335098256 -76.18664256999686 -59.01435935394498 + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + endloop +endfacet +facet normal -0.33141357403558563 -0.19134171618259377 -0.9238795325112789 + outer loop + vertex 167.76174321682214 -76.3795873339148 -58.85451867793757 + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + vertex 168.09593335098256 -76.18664256999686 -59.01435935394498 + endloop +endfacet +facet normal 0.5272028623656522 0.30438071450434867 -0.793353340291251 + outer loop + vertex 30.22028900396494 190.62097856533407 -59.01435935394506 + vertex 180.22028900396444 -69.18664256999648 -59.014359353944975 + vertex 29.93331342987922 190.45529314038478 -59.26862915010168 + endloop +endfacet +facet normal 0.5272028623656522 0.30438071450434867 -0.793353340291251 + outer loop + vertex 179.93331342987875 -69.35232799494572 -59.26862915010159 + vertex 29.93331342987922 190.45529314038478 -59.26862915010168 + vertex 180.22028900396444 -69.18664256999648 -59.014359353944975 + endloop +endfacet +facet normal 0.5272028623656928 0.3043807145043665 -0.7933533402912171 + outer loop + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 166.7102927049274 -76.98664256999692 -59.01435935394496 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + endloop +endfacet +facet normal 0.5272028623656928 0.3043807145043665 -0.7933533402912171 + outer loop + vertex 166.4233171308417 -77.15232799494616 -59.2686291501016 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 166.7102927049274 -76.98664256999692 -59.01435935394496 + endloop +endfacet +facet normal -0.687064146869438 -0.3966766701456545 -0.6087614290087103 + outer loop + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + vertex 168.38290892506822 -76.02095714504756 -59.268629150101624 + endloop +endfacet +facet normal -0.687064146869438 -0.3966766701456545 -0.6087614290087103 + outer loop + vertex 168.60311302795498 -75.89382224696931 -59.600000000000094 + vertex 168.38290892506822 -76.02095714504756 -59.268629150101624 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + endloop +endfacet +facet normal -0.33141357403561666 -0.19134171618253848 0.9238795325112792 + outer loop + vertex 31.60592965002006 191.42097856533397 -61.78564064605529 + vertex 31.271739515859746 191.22803380141596 -61.94548132206272 + vertex 181.60592965001956 -68.38664256999647 -61.785640646055185 + endloop +endfacet +facet normal -0.33141357403561666 -0.19134171618253848 0.9238795325112792 + outer loop + vertex 181.27173951585925 -68.57958733391453 -61.945481322062605 + vertex 181.60592965001956 -68.38664256999647 -61.785640646055185 + vertex 31.271739515859746 191.22803380141596 -61.94548132206272 + endloop +endfacet +facet normal -0.6870641468694392 -0.39667667014561564 0.6087614290087343 + outer loop + vertex 32.113109326992486 191.71379888836157 -61.2000000000002 + vertex 31.89290522410577 191.58666399028323 -61.53137084989868 + vertex 182.11310932699197 -68.09382224696891 -61.20000000000012 + endloop +endfacet +facet normal -0.6870641468694392 -0.39667667014561564 0.6087614290087343 + outer loop + vertex 181.8929052241053 -68.22095714504731 -61.53137084989857 + vertex 182.11310932699197 -68.09382224696891 -61.20000000000012 + vertex 31.89290522410577 191.58666399028323 -61.53137084989868 + endloop +endfacet +facet normal 0.33141357403554456 0.19134171618257287 0.923879532511298 + outer loop + vertex 30.554479138125302 190.8139233292519 -61.945481322062676 + vertex 30.220289003964965 190.62097856533393 -61.78564064605528 + vertex 180.5544791381248 -68.99369780607854 -61.945481322062584 + endloop +endfacet +facet normal 0.33141357403554456 0.19134171618257287 0.923879532511298 + outer loop + vertex 180.2202890039645 -69.18664256999656 -61.785640646055185 + vertex 180.5544791381248 -68.99369780607854 -61.945481322062584 + vertex 30.220289003964965 190.62097856533393 -61.78564064605528 + endloop +endfacet +facet normal 0.11303899832183621 0.06526309610999997 -0.9914448613738097 + outer loop + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + vertex 167.40311302795504 -76.58664256999687 -58.800000000000075 + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + endloop +endfacet +facet normal 0.11303899832183621 0.06526309610999997 -0.9914448613738097 + outer loop + vertex 167.04448283908772 -76.7936978060789 -58.85451867793757 + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + vertex 167.40311302795504 -76.58664256999687 -58.800000000000075 + endloop +endfacet +facet normal 0.6870641468694271 0.39667667014565383 0.6087614290087231 + outer loop + vertex 29.7131093269925 190.3281582423064 -61.20000000000017 + vertex 179.71310932699203 -69.47946289302408 -61.20000000000008 + vertex 29.933313429879256 190.4552931403847 -61.53137084989864 + endloop +endfacet +facet normal 0.6870641468694271 0.39667667014565383 0.6087614290087231 + outer loop + vertex 179.93331342987878 -69.35232799494582 -61.53137084989855 + vertex 29.933313429879256 190.4552931403847 -61.53137084989864 + vertex 179.71310932699203 -69.47946289302408 -61.20000000000008 + endloop +endfacet +facet normal 0.8001031451912449 0.4619397662556855 0.3826834323650818 + outer loop + vertex 29.574683241012032 190.2482379043027 -60.8141104721642 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + vertex 29.7131093269925 190.3281582423064 -61.20000000000017 + endloop +endfacet +facet normal 0.8001031451912449 0.4619397662556855 0.3826834323650818 + outer loop + vertex 179.71310932699203 -69.47946289302408 -61.20000000000008 + vertex 29.7131093269925 190.3281582423064 -61.20000000000017 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + endloop +endfacet +facet normal 0.8586164364012474 0.4957224306869311 0.13052619222004347 + outer loop + vertex 29.574683241012032 190.2482379043027 -60.8141104721642 + vertex 29.527468680937393 190.22097856533398 -60.40000000000015 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + endloop +endfacet +facet normal 0.8586164364012474 0.4957224306869311 0.13052619222004347 + outer loop + vertex 179.5274686809369 -69.58664256999651 -60.400000000000055 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + vertex 29.527468680937393 190.22097856533398 -60.40000000000015 + endloop +endfacet +facet normal 0.6870641468694335 0.3966766701456124 -0.6087614290087427 + outer loop + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 166.20311302795497 -77.27946289302443 -59.60000000000007 + endloop +endfacet +facet normal 0.6870641468694335 0.3966766701456124 -0.6087614290087427 + outer loop + vertex 166.4233171308417 -77.15232799494616 -59.2686291501016 + vertex 166.20311302795497 -77.27946289302443 -59.60000000000007 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + endloop +endfacet +facet normal -0.858616436401251 -0.49572243068693317 -0.13052619222001063 + outer loop + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + vertex 168.74153911393552 -75.81390190896563 -59.98588952783606 + endloop +endfacet +facet normal -0.858616436401251 -0.49572243068693317 -0.13052619222001063 + outer loop + vertex 168.78875367401005 -75.78664256999683 -60.40000000000009 + vertex 168.74153911393552 -75.81390190896563 -59.98588952783606 + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + endloop +endfacet +facet normal -0.3314135740355424 -0.19134171618257165 -0.923879532511299 + outer loop + vertex 31.60592965002002 191.42097856533408 -59.014359353945075 + vertex 181.60592965001956 -68.38664256999643 -59.014359353944975 + vertex 31.27173951585969 191.2280338014161 -58.85451867793769 + endloop +endfacet +facet normal -0.3314135740355424 -0.19134171618257165 -0.923879532511299 + outer loop + vertex 181.27173951585922 -68.5795873339144 -58.85451867793758 + vertex 31.27173951585969 191.2280338014161 -58.85451867793769 + vertex 181.60592965001956 -68.38664256999643 -59.014359353944975 + endloop +endfacet +facet normal -0.6870641468694271 -0.39667667014565383 -0.6087614290087231 + outer loop + vertex 31.89290522410574 191.5866639902833 -59.26862915010171 + vertex 32.11310932699248 191.71379888836162 -59.600000000000186 + vertex 181.89290522410522 -68.22095714504717 -59.26862915010161 + endloop +endfacet +facet normal -0.6870641468694271 -0.39667667014565383 -0.6087614290087231 + outer loop + vertex 182.11310932699197 -68.09382224696891 -59.600000000000094 + vertex 181.89290522410522 -68.22095714504717 -59.26862915010161 + vertex 32.11310932699248 191.71379888836162 -59.600000000000186 + endloop +endfacet +facet normal 0.1130389983218027 0.06526309611006655 0.9914448613738092 + outer loop + vertex 30.913109326992505 191.02097856533396 -62.00000000000017 + vertex 30.554479138125302 190.8139233292519 -61.945481322062676 + vertex 180.91310932699204 -68.78664256999656 -62.00000000000008 + endloop +endfacet +facet normal 0.1130389983218027 0.06526309611006655 0.9914448613738092 + outer loop + vertex 180.5544791381248 -68.99369780607854 -61.945481322062584 + vertex 180.91310932699204 -68.78664256999656 -62.00000000000008 + vertex 30.554479138125302 190.8139233292519 -61.945481322062676 + endloop +endfacet +facet normal 0.6870641468694392 0.39667667014561564 -0.6087614290087343 + outer loop + vertex 29.713109326992512 190.32815824230644 -59.60000000000015 + vertex 29.93331342987922 190.45529314038478 -59.26862915010168 + vertex 179.713109326992 -69.47946289302408 -59.60000000000006 + endloop +endfacet +facet normal 0.6870641468694392 0.39667667014561564 -0.6087614290087343 + outer loop + vertex 179.93331342987875 -69.35232799494572 -59.26862915010159 + vertex 179.713109326992 -69.47946289302408 -59.60000000000006 + vertex 29.93331342987922 190.45529314038478 -59.26862915010168 + endloop +endfacet +facet normal -0.5272028623656546 -0.30438071450442333 -0.7933533402912207 + outer loop + vertex 31.89290522410574 191.5866639902833 -59.26862915010171 + vertex 181.89290522410522 -68.22095714504717 -59.26862915010161 + vertex 31.60592965002002 191.42097856533408 -59.014359353945075 + endloop +endfacet +facet normal -0.5272028623656546 -0.30438071450442333 -0.7933533402912207 + outer loop + vertex 181.60592965001956 -68.38664256999643 -59.014359353944975 + vertex 31.60592965002002 191.42097856533408 -59.014359353945075 + vertex 181.89290522410522 -68.22095714504717 -59.26862915010161 + endloop +endfacet +facet normal 0.3314135740355813 0.19134171618251242 -0.9238795325112973 + outer loop + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + vertex 167.04448283908772 -76.7936978060789 -58.85451867793757 + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + endloop +endfacet +facet normal 0.3314135740355813 0.19134171618251242 -0.9238795325112973 + outer loop + vertex 166.7102927049274 -76.98664256999692 -59.01435935394496 + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 167.04448283908772 -76.7936978060789 -58.85451867793757 + endloop +endfacet +facet normal -0.5272028623656622 -0.30438071450441645 -0.7933533402912182 + outer loop + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + vertex 168.38290892506822 -76.02095714504756 -59.268629150101624 + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + endloop +endfacet +facet normal -0.5272028623656622 -0.30438071450441645 -0.7933533402912182 + outer loop + vertex 168.09593335098256 -76.18664256999686 -59.01435935394498 + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + vertex 168.38290892506822 -76.02095714504756 -59.268629150101624 + endloop +endfacet +facet normal -0.8001031451912493 -0.4619397662556654 0.3826834323650974 + outer loop + vertex 32.25153541297298 191.7937192263653 -60.81411047216424 + vertex 32.113109326992486 191.71379888836157 -61.2000000000002 + vertex 182.25153541297252 -68.01390190896524 -60.814110472164145 + endloop +endfacet +facet normal -0.8001031451912493 -0.4619397662556654 0.3826834323650974 + outer loop + vertex 182.11310932699197 -68.09382224696891 -61.20000000000012 + vertex 182.25153541297252 -68.01390190896524 -60.814110472164145 + vertex 32.113109326992486 191.71379888836157 -61.2000000000002 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 29.527468680937393 190.22097856533398 -60.40000000000015 + vertex 29.574683241012004 190.2482379043027 -59.985889527836115 + vertex 179.5274686809369 -69.58664256999651 -60.400000000000055 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 179.57468324101154 -69.55938323102781 -59.98588952783603 + vertex 179.5274686809369 -69.58664256999651 -60.400000000000055 + vertex 29.574683241012004 190.2482379043027 -59.985889527836115 + endloop +endfacet +facet normal -0.5272028623656598 -0.3043807145043362 0.7933533402912507 + outer loop + vertex 31.89290522410577 191.58666399028323 -61.53137084989868 + vertex 31.60592965002006 191.42097856533397 -61.78564064605529 + vertex 181.8929052241053 -68.22095714504731 -61.53137084989857 + endloop +endfacet +facet normal -0.5272028623656598 -0.3043807145043362 0.7933533402912507 + outer loop + vertex 181.60592965001956 -68.38664256999647 -61.785640646055185 + vertex 181.8929052241053 -68.22095714504731 -61.53137084989857 + vertex 31.60592965002006 191.42097856533397 -61.78564064605529 + endloop +endfacet +facet normal -0.1130389983218041 -0.06526309611006595 -0.9914448613738092 + outer loop + vertex 31.27173951585969 191.2280338014161 -58.85451867793769 + vertex 181.27173951585922 -68.5795873339144 -58.85451867793758 + vertex 30.913109326992483 191.02097856533405 -58.800000000000175 + endloop +endfacet +facet normal -0.1130389983218041 -0.06526309611006595 -0.9914448613738092 + outer loop + vertex 180.91310932699201 -68.78664256999643 -58.80000000000008 + vertex 30.913109326992483 191.02097856533405 -58.800000000000175 + vertex 181.27173951585922 -68.5795873339144 -58.85451867793758 + endloop +endfacet +facet normal -0.8586164364012474 -0.4957224306869311 -0.130526192220043 + outer loop + vertex 32.25153541297297 191.7937192263653 -59.98588952783617 + vertex 32.29874997304759 191.82097856533406 -60.400000000000205 + vertex 182.25153541297246 -68.0139019089652 -59.985889527836086 + endloop +endfacet +facet normal -0.8586164364012474 -0.4957224306869311 -0.130526192220043 + outer loop + vertex 182.29874997304708 -67.98664256999643 -60.40000000000011 + vertex 182.25153541297246 -68.0139019089652 -59.985889527836086 + vertex 32.29874997304759 191.82097856533406 -60.400000000000205 + endloop +endfacet +facet normal -0.8001031451912346 -0.4619397662556795 -0.38268343236511065 + outer loop + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + vertex 168.74153911393552 -75.81390190896563 -59.98588952783606 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + endloop +endfacet +facet normal -0.8001031451912346 -0.4619397662556795 -0.38268343236511065 + outer loop + vertex 168.60311302795498 -75.89382224696931 -59.600000000000094 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + vertex 168.74153911393552 -75.81390190896563 -59.98588952783606 + endloop +endfacet +facet normal -0.11303899832179491 -0.06526309610997753 0.9914448613738159 + outer loop + vertex 31.271739515859746 191.22803380141596 -61.94548132206272 + vertex 30.913109326992505 191.02097856533396 -62.00000000000017 + vertex 181.27173951585925 -68.57958733391453 -61.945481322062605 + endloop +endfacet +facet normal -0.11303899832179491 -0.06526309610997753 0.9914448613738159 + outer loop + vertex 180.91310932699204 -68.78664256999656 -62.00000000000008 + vertex 181.27173951585925 -68.57958733391453 -61.945481322062605 + vertex 30.913109326992505 191.02097856533396 -62.00000000000017 + endloop +endfacet +facet normal -0.8001031451912448 -0.4619397662556967 -0.3826834323650685 + outer loop + vertex 32.11310932699248 191.71379888836162 -59.600000000000186 + vertex 32.25153541297297 191.7937192263653 -59.98588952783617 + vertex 182.11310932699197 -68.09382224696891 -59.600000000000094 + endloop +endfacet +facet normal -0.8001031451912448 -0.4619397662556967 -0.3826834323650685 + outer loop + vertex 182.25153541297246 -68.0139019089652 -59.985889527836086 + vertex 182.11310932699197 -68.09382224696891 -59.600000000000094 + vertex 32.25153541297297 191.7937192263653 -59.98588952783617 + endloop +endfacet +facet normal 0.8001031451912493 0.4619397662556654 -0.3826834323650974 + outer loop + vertex 29.574683241012004 190.2482379043027 -59.985889527836115 + vertex 29.713109326992512 190.32815824230644 -59.60000000000015 + vertex 179.57468324101154 -69.55938323102781 -59.98588952783603 + endloop +endfacet +facet normal 0.8001031451912493 0.4619397662556654 -0.3826834323650974 + outer loop + vertex 179.713109326992 -69.47946289302408 -59.60000000000006 + vertex 179.57468324101154 -69.55938323102781 -59.98588952783603 + vertex 29.713109326992512 190.32815824230644 -59.60000000000015 + endloop +endfacet +facet normal -0.1130389983218041 -0.06526309611006595 -0.9914448613738092 + outer loop + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + vertex 167.76174321682214 -76.3795873339148 -58.85451867793757 + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + endloop +endfacet +facet normal -0.1130389983218041 -0.06526309611006595 -0.9914448613738092 + outer loop + vertex 167.40311302795504 -76.58664256999687 -58.800000000000075 + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + vertex 167.76174321682214 -76.3795873339148 -58.85451867793757 + endloop +endfacet +facet normal 0.8001031451912346 0.4619397662556795 0.38268343236511065 + outer loop + vertex 29.713109326992253 190.3281582423069 -45.60000000000019 + vertex 29.574683241011737 190.24823790430318 -45.21411047216423 + vertex 179.71310932699177 -69.47946289302364 -45.6000000000001 + endloop +endfacet +facet normal 0.8001031451912346 0.4619397662556795 0.38268343236511065 + outer loop + vertex 179.57468324101126 -69.55938323102735 -45.21411047216414 + vertex 179.71310932699177 -69.47946289302364 -45.6000000000001 + vertex 29.574683241011737 190.24823790430318 -45.21411047216423 + endloop +endfacet +facet normal 0.858616436401251 0.49572243068693317 0.13052619222001063 + outer loop + vertex 29.574683241011737 190.24823790430318 -45.21411047216423 + vertex 29.527468680937115 190.22097856533443 -44.800000000000196 + vertex 179.57468324101126 -69.55938323102735 -45.21411047216414 + endloop +endfacet +facet normal 0.858616436401251 0.49572243068693317 0.13052619222001063 + outer loop + vertex 179.52746868093664 -69.58664256999607 -44.800000000000104 + vertex 179.57468324101126 -69.55938323102735 -45.21411047216414 + vertex 29.527468680937115 190.22097856533443 -44.800000000000196 + endloop +endfacet +facet normal 0.8001031451912616 0.4619397662556725 -0.38268343236506275 + outer loop + vertex 29.574683241011734 190.24823790430324 -44.38588952783616 + vertex 29.713109326992214 190.32815824230693 -44.0000000000002 + vertex 179.57468324101126 -69.55938323102731 -44.38588952783607 + endloop +endfacet +facet normal 0.8001031451912616 0.4619397662556725 -0.38268343236506275 + outer loop + vertex 179.71310932699177 -69.4794628930236 -44.00000000000011 + vertex 179.57468324101126 -69.55938323102731 -44.38588952783607 + vertex 29.713109326992214 190.32815824230693 -44.0000000000002 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 29.527468680937115 190.22097856533443 -44.800000000000196 + vertex 29.574683241011734 190.24823790430324 -44.38588952783616 + vertex 179.52746868093664 -69.58664256999607 -44.800000000000104 + endloop +endfacet +facet normal 0.8586164364012403 0.4957224306869383 -0.13052619222006184 + outer loop + vertex 179.57468324101126 -69.55938323102731 -44.38588952783607 + vertex 179.52746868093664 -69.58664256999607 -44.800000000000104 + vertex 29.574683241011734 190.24823790430324 -44.38588952783616 + endloop +endfacet +facet normal 0.11303899832179477 0.06526309610997605 -0.991444861373816 + outer loop + vertex 30.913109326992483 191.02097856533405 -58.800000000000175 + vertex 180.91310932699201 -68.78664256999643 -58.80000000000008 + vertex 30.554479138125252 190.81392332925202 -58.85451867793765 + endloop +endfacet +facet normal 0.11303899832179477 0.06526309610997605 -0.991444861373816 + outer loop + vertex 180.5544791381248 -68.9936978060785 -58.854518677937556 + vertex 30.554479138125252 190.81392332925202 -58.85451867793765 + vertex 180.91310932699201 -68.78664256999643 -58.80000000000008 + endloop +endfacet +facet normal 0.11303899832184168 0.06526309611000454 -0.9914448613738089 + outer loop + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + vertex 30.554479138125014 190.8139233292525 -43.254518677937675 + endloop +endfacet +facet normal 0.11303899832184168 0.06526309611000454 -0.9914448613738089 + outer loop + vertex 180.5544791381245 -68.993697806078 -43.254518677937604 + vertex 30.554479138125014 190.8139233292525 -43.254518677937675 + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + endloop +endfacet +facet normal -0.8586164364012511 -0.4957224306869332 -0.1305261922200104 + outer loop + vertex 32.25153541297268 191.79371922636582 -44.38588952783617 + vertex 32.298749973047286 191.82097856533454 -44.8000000000002 + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + endloop +endfacet +facet normal -0.8586164364012511 -0.4957224306869332 -0.1305261922200104 + outer loop + vertex 182.2987499730468 -67.98664256999594 -44.80000000000011 + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + vertex 32.298749973047286 191.82097856533454 -44.8000000000002 + endloop +endfacet +facet normal -0.6870641468694358 -0.39667667014560815 0.6087614290087431 + outer loop + vertex 32.113109326992195 191.71379888836208 -45.6000000000002 + vertex 31.89290522410548 191.5866639902837 -45.93137084989867 + vertex 182.11310932699172 -68.09382224696841 -45.60000000000011 + endloop +endfacet +facet normal -0.6870641468694358 -0.39667667014560815 0.6087614290087431 + outer loop + vertex 181.892905224105 -68.22095714504681 -45.93137084989858 + vertex 182.11310932699172 -68.09382224696841 -45.60000000000011 + vertex 31.89290522410548 191.5866639902837 -45.93137084989867 + endloop +endfacet +facet normal 0.33141357403556354 0.19134171618250495 -0.9238795325113052 + outer loop + vertex 30.554479138125014 190.8139233292525 -43.254518677937675 + vertex 180.5544791381245 -68.993697806078 -43.254518677937604 + vertex 30.22028900396464 190.6209785653345 -43.41435935394508 + endloop +endfacet +facet normal 0.33141357403556354 0.19134171618250495 -0.9238795325113052 + outer loop + vertex 180.22028900396418 -69.18664256999598 -43.414359353944995 + vertex 30.22028900396464 190.6209785653345 -43.41435935394508 + vertex 180.5544791381245 -68.993697806078 -43.254518677937604 + endloop +endfacet +facet normal -0.5272028623656928 -0.3043807145043665 0.7933533402912171 + outer loop + vertex 31.89290522410548 191.5866639902837 -45.93137084989867 + vertex 31.60592965001976 191.42097856533448 -46.185640646055305 + vertex 181.892905224105 -68.22095714504681 -45.93137084989858 + endloop +endfacet +facet normal -0.5272028623656928 -0.3043807145043665 0.7933533402912171 + outer loop + vertex 181.60592965001933 -68.38664256999607 -46.18564064605523 + vertex 181.892905224105 -68.22095714504681 -45.93137084989858 + vertex 31.60592965001976 191.42097856533448 -46.185640646055305 + endloop +endfacet +facet normal -0.5272028623656327 -0.30438071450439946 -0.7933533402912443 + outer loop + vertex 31.89290522410545 191.58666399028382 -43.66862915010171 + vertex 181.89290522410496 -68.22095714504667 -43.668629150101616 + vertex 31.60592965001975 191.4209785653346 -43.414359353945095 + endloop +endfacet +facet normal -0.5272028623656327 -0.30438071450439946 -0.7933533402912443 + outer loop + vertex 181.60592965001928 -68.38664256999598 -43.414359353945 + vertex 31.60592965001975 191.4209785653346 -43.414359353945095 + vertex 181.89290522410496 -68.22095714504667 -43.668629150101616 + endloop +endfacet +facet normal -0.11303899832183621 -0.06526309610999997 0.9914448613738097 + outer loop + vertex 31.27173951585947 191.22803380141644 -46.3454813220627 + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + vertex 181.27173951585897 -68.57958733391399 -46.345481322062625 + endloop +endfacet +facet normal -0.11303899832183621 -0.06526309610999997 0.9914448613738097 + outer loop + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + vertex 181.27173951585897 -68.57958733391399 -46.345481322062625 + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + endloop +endfacet +facet normal 0.5272028623656622 0.30438071450441645 0.7933533402912182 + outer loop + vertex 30.220289003964698 190.6209785653344 -46.1856406460553 + vertex 29.93331342987896 190.45529314038518 -45.931370849898656 + vertex 180.2202890039642 -69.18664256999615 -46.18564064605521 + endloop +endfacet +facet normal 0.5272028623656622 0.30438071450441645 0.7933533402912182 + outer loop + vertex 179.9333134298785 -69.35232799494533 -45.93137084989857 + vertex 180.2202890039642 -69.18664256999615 -46.18564064605521 + vertex 29.93331342987896 190.45529314038518 -45.931370849898656 + endloop +endfacet +facet normal 0.687064146869438 0.3966766701456545 0.6087614290087103 + outer loop + vertex 29.713109326992253 190.3281582423069 -45.60000000000019 + vertex 179.71310932699177 -69.47946289302364 -45.6000000000001 + vertex 29.93331342987896 190.45529314038518 -45.931370849898656 + endloop +endfacet +facet normal 0.687064146869438 0.3966766701456545 0.6087614290087103 + outer loop + vertex 179.9333134298785 -69.35232799494533 -45.93137084989857 + vertex 29.93331342987896 190.45529314038518 -45.931370849898656 + vertex 179.71310932699177 -69.47946289302364 -45.6000000000001 + endloop +endfacet +facet normal -0.6870641468694481 -0.39667667014567715 -0.6087614290086841 + outer loop + vertex 31.89290522410545 191.58666399028382 -43.66862915010171 + vertex 32.11310932699219 191.7137988883621 -44.0000000000002 + vertex 181.89290522410496 -68.22095714504667 -43.668629150101616 + endloop +endfacet +facet normal -0.6870641468694481 -0.39667667014567715 -0.6087614290086841 + outer loop + vertex 182.1131093269917 -68.09382224696837 -44.000000000000114 + vertex 181.89290522410496 -68.22095714504667 -43.668629150101616 + vertex 32.11310932699219 191.7137988883621 -44.0000000000002 + endloop +endfacet +facet normal -0.3314135740355858 -0.19134171618259388 -0.9238795325112787 + outer loop + vertex 31.60592965001975 191.4209785653346 -43.414359353945095 + vertex 181.60592965001928 -68.38664256999598 -43.414359353945 + vertex 31.271739515859426 191.22803380141656 -43.254518677937675 + endloop +endfacet +facet normal -0.3314135740355858 -0.19134171618259388 -0.9238795325112787 + outer loop + vertex 181.2717395158589 -68.57958733391395 -43.2545186779376 + vertex 31.271739515859426 191.22803380141656 -43.254518677937675 + vertex 181.60592965001928 -68.38664256999598 -43.414359353945 + endloop +endfacet +facet normal 0.5272028623656603 0.30438071450435333 -0.7933533402912438 + outer loop + vertex 30.22028900396464 190.6209785653345 -43.41435935394508 + vertex 180.22028900396418 -69.18664256999598 -43.414359353944995 + vertex 29.933313429878947 190.45529314038527 -43.6686291501017 + endloop +endfacet +facet normal 0.5272028623656603 0.30438071450435333 -0.7933533402912438 + outer loop + vertex 179.93331342987844 -69.35232799494524 -43.66862915010161 + vertex 29.933313429878947 190.45529314038527 -43.6686291501017 + vertex 180.22028900396418 -69.18664256999598 -43.414359353944995 + endloop +endfacet +facet normal -0.8001031451912347 -0.46193976625567956 -0.38268343236511054 + outer loop + vertex 32.25153541297268 191.79371922636582 -44.38588952783617 + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + vertex 32.11310932699219 191.7137988883621 -44.0000000000002 + endloop +endfacet +facet normal -0.8001031451912347 -0.46193976625567956 -0.38268343236511054 + outer loop + vertex 182.1131093269917 -68.09382224696837 -44.000000000000114 + vertex 32.11310932699219 191.7137988883621 -44.0000000000002 + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + endloop +endfacet +facet normal -0.8001031451912616 -0.4619397662556725 0.38268343236506275 + outer loop + vertex 32.113109326992195 191.71379888836208 -45.6000000000002 + vertex 182.11310932699172 -68.09382224696841 -45.60000000000011 + vertex 32.251535412972686 191.79371922636577 -45.21411047216423 + endloop +endfacet +facet normal -0.8001031451912616 -0.4619397662556725 0.38268343236506275 + outer loop + vertex 182.25153541297223 -68.01390190896478 -45.214110472164144 + vertex 32.251535412972686 191.79371922636577 -45.21411047216423 + vertex 182.11310932699172 -68.09382224696841 -45.60000000000011 + endloop +endfacet +facet normal 0.33141357403561666 0.19134171618253848 -0.9238795325112792 + outer loop + vertex 30.554479138125252 190.81392332925202 -58.85451867793765 + vertex 180.5544791381248 -68.9936978060785 -58.854518677937556 + vertex 30.22028900396494 190.62097856533407 -59.01435935394506 + endloop +endfacet +facet normal 0.33141357403561666 0.19134171618253848 -0.9238795325112792 + outer loop + vertex 180.22028900396444 -69.18664256999648 -59.014359353944975 + vertex 30.22028900396494 190.62097856533407 -59.01435935394506 + vertex 180.5544791381248 -68.9936978060785 -58.854518677937556 + endloop +endfacet +facet normal 0.6870641468694508 0.3966766701456224 -0.6087614290087167 + outer loop + vertex 29.713109326992214 190.32815824230693 -44.0000000000002 + vertex 29.933313429878947 190.45529314038527 -43.6686291501017 + vertex 179.71310932699177 -69.4794628930236 -44.00000000000011 + endloop +endfacet +facet normal 0.6870641468694508 0.3966766701456224 -0.6087614290087167 + outer loop + vertex 179.93331342987844 -69.35232799494524 -43.66862915010161 + vertex 179.71310932699177 -69.4794628930236 -44.00000000000011 + vertex 29.933313429878947 190.45529314038527 -43.6686291501017 + endloop +endfacet +facet normal -0.1130389983218041 -0.06526309611006595 -0.9914448613738092 + outer loop + vertex 31.271739515859426 191.22803380141656 -43.254518677937675 + vertex 181.2717395158589 -68.57958733391395 -43.2545186779376 + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + endloop +endfacet +facet normal -0.1130389983218041 -0.06526309611006595 -0.9914448613738092 + outer loop + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + vertex 30.913109326992203 191.02097856533456 -43.20000000000018 + vertex 181.2717395158589 -68.57958733391395 -43.2545186779376 + endloop +endfacet +facet normal -0.3314135740355813 -0.19134171618251242 0.9238795325112973 + outer loop + vertex 31.60592965001976 191.42097856533448 -46.185640646055305 + vertex 31.27173951585947 191.22803380141644 -46.3454813220627 + vertex 181.60592965001933 -68.38664256999607 -46.18564064605523 + endloop +endfacet +facet normal -0.3314135740355813 -0.19134171618251242 0.9238795325112973 + outer loop + vertex 181.27173951585897 -68.57958733391399 -46.345481322062625 + vertex 181.60592965001933 -68.38664256999607 -46.18564064605523 + vertex 31.27173951585947 191.22803380141644 -46.3454813220627 + endloop +endfacet +facet normal 0.33141357403558563 0.19134171618259377 0.9238795325112789 + outer loop + vertex 30.554479138125004 190.8139233292524 -46.3454813220627 + vertex 30.220289003964698 190.6209785653344 -46.1856406460553 + vertex 180.55447913812455 -68.99369780607815 -46.345481322062625 + endloop +endfacet +facet normal 0.33141357403558563 0.19134171618259377 0.9238795325112789 + outer loop + vertex 180.2202890039642 -69.18664256999615 -46.18564064605521 + vertex 180.55447913812455 -68.99369780607815 -46.345481322062625 + vertex 30.220289003964698 190.6209785653344 -46.1856406460553 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006204 + outer loop + vertex 32.251535412972686 191.79371922636577 -45.21411047216423 + vertex 182.25153541297223 -68.01390190896478 -45.214110472164144 + vertex 32.298749973047286 191.82097856533454 -44.8000000000002 + endloop +endfacet +facet normal -0.8586164364012403 -0.4957224306869383 0.13052619222006204 + outer loop + vertex 182.2987499730468 -67.98664256999594 -44.80000000000011 + vertex 32.298749973047286 191.82097856533454 -44.8000000000002 + vertex 182.25153541297223 -68.01390190896478 -45.214110472164144 + endloop +endfacet +facet normal 0.1130389983218041 0.06526309611006595 0.9914448613738092 + outer loop + vertex 30.913109326992235 191.0209785653344 -46.4000000000002 + vertex 30.554479138125004 190.8139233292524 -46.3454813220627 + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + endloop +endfacet +facet normal 0.1130389983218041 0.06526309611006595 0.9914448613738092 + outer loop + vertex 180.55447913812455 -68.99369780607815 -46.345481322062625 + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + vertex 30.554479138125004 190.8139233292524 -46.3454813220627 + endloop +endfacet +facet normal 0.8586164364012411 0.4957224306869387 -0.1305261922200554 + outer loop + vertex 32.78885611527162 192.1039414784786 -61.85881904510269 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + vertex 182.78885611527113 -67.70367965685196 -61.8588190451026 + endloop +endfacet +facet normal 0.8586164364012411 0.4957224306869387 -0.1305261922200554 + outer loop + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 182.78885611527113 -67.70367965685196 -61.8588190451026 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 -1.5003536199769242e-15 + outer loop + vertex 32.81836521531815 192.1209785653342 -56.40000000000017 + vertex 182.8183652153177 -67.68664256999637 -56.40000000000008 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 -1.5003536199769242e-15 + outer loop + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 32.818365215318266 192.12097856533407 -61.60000000000018 + vertex 182.8183652153177 -67.68664256999637 -56.40000000000008 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 4.4649600931051686e-15 + outer loop + vertex 32.47195505380439 191.9209785653342 -56.40000000000017 + vertex 32.471955053804386 191.92097856533422 -56.00000000000017 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 4.4649600931051686e-15 + outer loop + vertex 182.4719550538039 -67.88664256999627 -56.00000000000008 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + vertex 32.471955053804386 191.92097856533422 -56.00000000000017 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 29.497751387223385 190.20382127780866 -58.20000000000017 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + vertex 29.497751387223385 190.20382127780866 -58.20000000000017 + endloop +endfacet +facet normal 0.8001031451912562 0.46193976625566946 -0.3826834323650779 + outer loop + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + vertex 32.78885611527162 192.1039414784786 -61.85881904510269 + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + endloop +endfacet +facet normal 0.8001031451912562 0.46193976625566946 -0.3826834323650779 + outer loop + vertex 182.78885611527113 -67.70367965685196 -61.8588190451026 + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 32.78885611527162 192.1039414784786 -61.85881904510269 + endloop +endfacet +facet normal 0.6123724356957724 0.3535533905933076 0.7071067811865499 + outer loop + vertex 29.497751387223385 190.20382127780866 -58.20000000000017 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + endloop +endfacet +facet normal 0.6123724356957724 0.3535533905933076 0.7071067811865499 + outer loop + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal -3.273238745907272e-14 2.2585965780328017e-14 1.0 + outer loop + vertex 32.471955053804386 191.92097856533422 -56.00000000000017 + vertex 31.259519488506168 191.22097856533415 -56.0000000000002 + vertex 182.4719550538039 -67.88664256999627 -56.00000000000008 + endloop +endfacet +facet normal -3.273238745907272e-14 2.2585965780328017e-14 1.0 + outer loop + vertex 181.2595194885057 -68.58664256999634 -56.00000000000009 + vertex 182.4719550538039 -67.88664256999627 -56.00000000000008 + vertex 31.259519488506168 191.22097856533415 -56.0000000000002 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 32.81836521531815 192.1209785653342 -56.40000000000017 + vertex 32.47195505380439 191.9209785653342 -56.40000000000017 + vertex 182.8183652153177 -67.68664256999637 -56.40000000000008 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + vertex 182.8183652153177 -67.68664256999637 -56.40000000000008 + vertex 32.47195505380439 191.9209785653342 -56.40000000000017 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 31.259519488506204 191.2209785653341 -58.200000000000195 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + vertex 31.259519488506168 191.22097856533415 -56.0000000000002 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 181.2595194885057 -68.58664256999634 -56.00000000000009 + vertex 31.259519488506168 191.22097856533415 -56.0000000000002 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 1.052465433482836e-15 + outer loop + vertex 27.362405171476134 188.97097856533426 -49.465685424949434 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 1.052465433482836e-15 + outer loop + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 27.36240517147627 188.97097856533406 -55.73431457505093 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 15.497857139629415 182.1209785653341 -43.60000000000017 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 15.844267301143299 182.32097856533392 -48.80000000000017 + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + vertex 15.497857139629511 182.12097856533393 -48.80000000000017 + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -2.739417086921043e-15 + outer loop + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -2.739417086921043e-15 + outer loop + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 17.056702866441515 183.02097856533393 -49.200000000000166 + vertex 167.05670286644101 -76.7866425699966 -49.200000000000074 + vertex 15.844267301143299 182.32097856533392 -49.200000000000166 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 165.84426730114282 -77.48664256999662 -49.20000000000008 + vertex 15.844267301143299 182.32097856533392 -49.200000000000166 + vertex 167.05670286644101 -76.7866425699966 -49.200000000000074 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 17.056702866441693 183.02097856533368 -58.200000000000166 + vertex 17.056702866441622 183.0209785653337 -56.00000000000017 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 167.05670286644113 -76.78664256999677 -56.00000000000008 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 17.056702866441622 183.0209785653337 -56.00000000000017 + endloop +endfacet +facet normal -3.273238745907288e-14 2.2585965780327922e-14 1.0 + outer loop + vertex 17.056702866441622 183.0209785653337 -56.00000000000017 + vertex 15.844267301143415 182.3209785653337 -56.0000000000002 + vertex 167.05670286644113 -76.78664256999677 -56.00000000000008 + endloop +endfacet +facet normal -3.273238745907288e-14 2.2585965780327922e-14 1.0 + outer loop + vertex 165.8442673011429 -77.48664256999685 -56.000000000000114 + vertex 167.05670286644113 -76.78664256999677 -56.00000000000008 + vertex 15.844267301143415 182.3209785653337 -56.0000000000002 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 18.818470967724306 184.03813585285943 -47.00000000000018 + vertex 168.81847096772387 -75.76948528247111 -47.00000000000008 + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + vertex 168.81847096772387 -75.76948528247111 -47.00000000000008 + endloop +endfacet +facet normal -0.6123724356957724 -0.3535533905933076 -0.7071067811865499 + outer loop + vertex 20.9538171834714 185.27097856533405 -49.46568542494941 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + vertex 18.818470967724306 184.03813585285943 -47.00000000000018 + endloop +endfacet +facet normal -0.6123724356957724 -0.3535533905933076 -0.7071067811865499 + outer loop + vertex 168.81847096772387 -75.76948528247111 -47.00000000000008 + vertex 18.818470967724306 184.03813585285943 -47.00000000000018 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal -0.6123724356957972 -0.35355339059327684 0.7071067811865438 + outer loop + vertex 18.81847096772454 184.0381358528591 -58.200000000000166 + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + endloop +endfacet +facet normal -0.6123724356957972 -0.35355339059327684 0.7071067811865438 + outer loop + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + vertex 20.953817183471532 185.27097856533385 -55.73431457505091 + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + vertex 165.84426730114293 -77.48664256999685 -56.40000000000011 + vertex 15.844267301143415 182.3209785653337 -56.0000000000002 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 165.8442673011429 -77.48664256999685 -56.000000000000114 + vertex 15.844267301143415 182.3209785653337 -56.0000000000002 + vertex 165.84426730114293 -77.48664256999685 -56.40000000000011 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 15.844267301143415 182.3209785653337 -56.400000000000205 + vertex 15.497857139629675 182.1209785653337 -56.400000000000205 + vertex 165.84426730114293 -77.48664256999685 -56.40000000000011 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 165.49785713962922 -77.68664256999689 -56.40000000000011 + vertex 165.84426730114293 -77.48664256999685 -56.40000000000011 + vertex 15.497857139629675 182.1209785653337 -56.400000000000205 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 15.844267301143299 182.32097856533392 -48.80000000000017 + vertex 15.844267301143299 182.32097856533392 -49.200000000000166 + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 165.84426730114282 -77.48664256999662 -49.20000000000008 + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + vertex 15.844267301143299 182.32097856533392 -49.200000000000166 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 17.056702866441448 183.02097856533402 -47.00000000000017 + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + vertex 17.056702866441515 183.02097856533393 -49.200000000000166 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 167.05670286644101 -76.7866425699966 -49.200000000000074 + vertex 17.056702866441515 183.02097856533393 -49.200000000000166 + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + endloop +endfacet +facet normal -0.6870641468694313 -0.3966766701456506 -0.6087614290087203 + outer loop + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + endloop +endfacet +facet normal -0.6870641468694313 -0.3966766701456506 -0.6087614290087203 + outer loop + vertex 165.75151010771793 -77.54019596059025 -62.307106781186654 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + endloop +endfacet +facet normal -0.33141357403556043 -0.19134171618258206 -0.9238795325112903 + outer loop + vertex 16.139738675372207 182.49156904278223 -62.56592582628924 + vertex 166.13973867537172 -77.31605209254826 -62.56592582628915 + vertex 15.930869841522005 182.3709785653335 -62.46602540378463 + endloop +endfacet +facet normal -0.33141357403556043 -0.19134171618258206 -0.9238795325112903 + outer loop + vertex 165.93086984152157 -77.43664256999703 -62.466025403784535 + vertex 15.930869841522005 182.3709785653335 -62.46602540378463 + vertex 166.13973867537172 -77.31605209254826 -62.56592582628915 + endloop +endfacet +facet normal -0.11303899832181269 -0.06526309611007232 -0.9914448613738078 + outer loop + vertex 16.363882543414228 182.62097856533347 -62.60000000000018 + vertex 166.36388254341375 -77.186642569997 -62.60000000000009 + vertex 16.139738675372207 182.49156904278223 -62.56592582628924 + endloop +endfacet +facet normal -0.11303899832181269 -0.06526309611007232 -0.9914448613738078 + outer loop + vertex 166.13973867537172 -77.31605209254826 -62.56592582628915 + vertex 16.139738675372207 182.49156904278223 -62.56592582628924 + vertex 166.36388254341375 -77.186642569997 -62.60000000000009 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 20.867214643093217 185.22097856533364 -62.6000000000002 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + vertex 16.363882543414228 182.62097856533347 -62.60000000000018 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 166.36388254341375 -77.186642569997 -62.60000000000009 + vertex 16.363882543414228 182.62097856533347 -62.60000000000018 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + endloop +endfacet +facet normal -0.5272028623656284 -0.30438071450439697 -0.7933533402912485 + outer loop + vertex 15.930869841522005 182.3709785653335 -62.46602540378463 + vertex 165.93086984152157 -77.43664256999703 -62.466025403784535 + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + endloop +endfacet +facet normal -0.5272028623656284 -0.30438071450439697 -0.7933533402912485 + outer loop + vertex 165.75151010771793 -77.54019596059025 -62.307106781186654 + vertex 15.751510107718453 182.2674251747402 -62.30710678118674 + vertex 165.93086984152157 -77.43664256999703 -62.466025403784535 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + vertex 15.497857139629675 182.1209785653337 -56.400000000000205 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 165.49785713962922 -77.68664256999689 -56.40000000000011 + vertex 15.497857139629675 182.1209785653337 -56.400000000000205 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal -0.8001031451912503 -0.4619397662556773 -0.3826834323650808 + outer loop + vertex 15.613882543414228 182.1879658634413 -62.10000000000019 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + endloop +endfacet +facet normal -0.8001031451912503 -0.4619397662556773 -0.3826834323650808 + outer loop + vertex 165.52736623967587 -77.66960548314152 -61.858819045102614 + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + endloop +endfacet +facet normal -0.8586164364012407 -0.49572243068693855 -0.1305261922200573 + outer loop + vertex 15.497857139629751 182.12097856533353 -61.60000000000019 + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal -0.8586164364012407 -0.49572243068693855 -0.1305261922200573 + outer loop + vertex 165.52736623967587 -77.66960548314152 -61.858819045102614 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + vertex 15.527366239676425 182.13801565218895 -61.858819045102706 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 170.86721464309272 -74.58664256999687 -62.20000000000009 + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 20.867214643093217 185.22097856533364 -62.6000000000002 + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 9.400019899202893e-16 + outer loop + vertex 170.86721464309272 -74.58664256999687 -62.20000000000009 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + vertex 20.867214643093217 185.22097856533367 -62.2000000000002 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 21.213624804606916 185.4209785653337 -60.80000000000016 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + vertex 171.21362480460647 -74.38664256999682 -60.80000000000006 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 171.21362480460647 -74.38664256999682 -60.80000000000006 + vertex 19.30836891628122 184.32097856533363 -60.80000000000016 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 26.87250722291962 188.68813585285935 -56.30000000000017 + vertex 176.87250722291913 -71.11948528247113 -56.300000000000075 + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + vertex 176.87250722291913 -71.11948528247113 -56.300000000000075 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 8.997049082914168e-15 + outer loop + vertex 21.213624804606916 185.4209785653337 -60.80000000000016 + vertex 171.21362480460647 -74.38664256999682 -60.80000000000006 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + endloop +endfacet +facet normal 0.8660254037844191 0.500000000000034 8.997049082914168e-15 + outer loop + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 21.213624804606987 185.42097856533363 -62.20000000000018 + vertex 171.21362480460647 -74.38664256999682 -60.80000000000006 + endloop +endfacet +facet normal 0.6123724356957944 0.3535533905932752 -0.707106781186547 + outer loop + vertex 21.44371513202817 185.55382127780845 -56.30000000000017 + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + endloop +endfacet +facet normal 0.6123724356957944 0.3535533905932752 -0.707106781186547 + outer loop + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 19.308368916281175 184.32097856533375 -58.765685424949424 + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + endloop +endfacet +facet normal -0.6123724356957673 -0.3535533905933159 -0.70710678118655 + outer loop + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 26.87250722291962 188.68813585285935 -56.30000000000017 + endloop +endfacet +facet normal -0.6123724356957673 -0.3535533905933159 -0.70710678118655 + outer loop + vertex 176.87250722291913 -71.11948528247113 -56.300000000000075 + vertex 26.87250722291962 188.68813585285935 -56.30000000000017 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 27.102597550341027 188.82097856533392 -60.80000000000018 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + endloop +endfacet +facet normal -1.877717253503254e-14 3.0643012873322636e-14 1.0 + outer loop + vertex 177.1025975503406 -70.98664256999665 -60.80000000000009 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + vertex 27.102597550341027 188.82097856533392 -60.80000000000018 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -2.611827415552657e-14 + outer loop + vertex 27.102597550341027 188.82097856533392 -60.80000000000018 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 177.1025975503406 -70.98664256999665 -60.80000000000009 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -2.611827415552657e-14 + outer loop + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + vertex 177.1025975503406 -70.98664256999665 -60.80000000000009 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 29.007853438666764 189.92097856533394 -60.80000000000017 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -9.400019899202893e-16 + outer loop + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 29.007853438666725 189.92097856533397 -58.76568542494941 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 27.449007711854858 189.02097856533385 -62.20000000000018 + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + vertex 27.102597550341095 188.82097856533386 -62.20000000000018 + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -4.4649600931051686e-15 + outer loop + vertex 27.449007711854858 189.02097856533385 -62.20000000000018 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + endloop +endfacet +facet normal -0.8660254037844191 -0.500000000000034 -4.4649600931051686e-15 + outer loop + vertex 177.4490077118544 -70.78664256999664 -62.60000000000009 + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 31.952339811533854 191.62097856533398 -62.60000000000018 + vertex 181.9523398115334 -68.18664256999656 -62.60000000000008 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + endloop +endfacet +facet normal 1.877717253503254e-14 -3.0643012873322636e-14 -1.0 + outer loop + vertex 177.4490077118544 -70.78664256999664 -62.60000000000009 + vertex 27.449007711854897 189.02097856533385 -62.60000000000018 + vertex 181.9523398115334 -68.18664256999656 -62.60000000000008 + endloop +endfacet +facet normal 0.1130389983218517 0.06526309611000751 -0.9914448613738075 + outer loop + vertex 32.17648367957585 191.75038808788526 -62.56592582628924 + vertex 182.17648367957543 -68.0572330474453 -62.56592582628915 + vertex 31.952339811533854 191.62097856533398 -62.60000000000018 + endloop +endfacet +facet normal 0.1130389983218517 0.06526309611000751 -0.9914448613738075 + outer loop + vertex 181.9523398115334 -68.18664256999656 -62.60000000000008 + vertex 31.952339811533854 191.62097856533398 -62.60000000000018 + vertex 182.17648367957543 -68.0572330474453 -62.56592582628915 + endloop +endfacet +facet normal 0.331413574035597 0.1913417161825215 -0.9238795325112898 + outer loop + vertex 32.38535251342604 191.870978565334 -62.46602540378461 + vertex 182.38535251342554 -67.9366425699965 -62.46602540378452 + vertex 32.17648367957585 191.75038808788526 -62.56592582628924 + endloop +endfacet +facet normal 0.331413574035597 0.1913417161825215 -0.9238795325112898 + outer loop + vertex 182.17648367957543 -68.0572330474453 -62.56592582628915 + vertex 32.17648367957585 191.75038808788526 -62.56592582628924 + vertex 182.38535251342554 -67.9366425699965 -62.46602540378452 + endloop +endfacet +facet normal 0.5272028623656608 0.3043807145043424 -0.7933533402912476 + outer loop + vertex 32.564712247229615 191.9745319559273 -62.30710678118673 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + vertex 32.38535251342604 191.870978565334 -62.46602540378461 + endloop +endfacet +facet normal 0.5272028623656608 0.3043807145043424 -0.7933533402912476 + outer loop + vertex 182.38535251342554 -67.9366425699965 -62.46602540378452 + vertex 32.38535251342604 191.870978565334 -62.46602540378461 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + endloop +endfacet +facet normal 0.6870641468694544 0.39667667014561886 -0.6087614290087151 + outer loop + vertex 32.564712247229615 191.9745319559273 -62.30710678118673 + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + endloop +endfacet +facet normal 0.6870641468694544 0.39667667014561886 -0.6087614290087151 + outer loop + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + vertex 32.70233981153382 192.05399126722622 -62.10000000000018 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.8183652153177 -67.68664256999637 -56.40000000000008 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.25153541297246 -68.0139019089652 -59.985889527836086 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.11310932699197 -68.09382224696891 -59.600000000000094 + vertex 182.25153541297246 -68.0139019089652 -59.985889527836086 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + vertex 182.11310932699197 -68.09382224696891 -59.600000000000094 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.89290522410522 -68.22095714504717 -59.26862915010161 + vertex 182.11310932699197 -68.09382224696891 -59.600000000000094 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.60592965001956 -68.38664256999643 -59.014359353944975 + vertex 181.89290522410522 -68.22095714504717 -59.26862915010161 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.27173951585922 -68.5795873339144 -58.85451867793758 + vertex 181.60592965001956 -68.38664256999643 -59.014359353944975 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + vertex 181.27173951585922 -68.5795873339144 -58.85451867793758 + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.91310932699201 -68.78664256999643 -58.80000000000008 + vertex 181.27173951585922 -68.5795873339144 -58.85451867793758 + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 180.91310932699201 -68.78664256999643 -58.80000000000008 + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.29874997304708 -67.98664256999643 -60.40000000000011 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 182.25153541297246 -68.0139019089652 -59.985889527836086 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.25153541297252 -68.01390190896524 -60.814110472164145 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 182.29874997304708 -67.98664256999643 -60.40000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.11310932699197 -68.09382224696891 -61.20000000000012 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 182.25153541297252 -68.01390190896524 -60.814110472164145 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.8929052241053 -68.22095714504731 -61.53137084989857 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 182.11310932699197 -68.09382224696891 -61.20000000000012 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.60592965001956 -68.38664256999647 -61.785640646055185 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 181.8929052241053 -68.22095714504731 -61.53137084989857 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.78885611527113 -67.70367965685196 -61.8588190451026 + vertex 182.81836521531775 -67.6866425699965 -61.60000000000009 + vertex 181.60592965001956 -68.38664256999647 -61.785640646055185 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.27173951585925 -68.57958733391453 -61.945481322062605 + vertex 182.78885611527113 -67.70367965685196 -61.8588190451026 + vertex 181.60592965001956 -68.38664256999647 -61.785640646055185 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 182.78885611527113 -67.70367965685196 -61.8588190451026 + vertex 181.27173951585925 -68.57958733391453 -61.945481322062605 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.91310932699204 -68.78664256999656 -62.00000000000008 + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 181.27173951585925 -68.57958733391453 -61.945481322062605 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.4490077118544 -70.78664256999664 -62.60000000000009 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.38535251342554 -67.9366425699965 -62.46602540378452 + vertex 182.56471224722918 -67.83308917940327 -62.30710678118664 + vertex 177.4490077118544 -70.78664256999664 -62.60000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.17648367957543 -68.0572330474453 -62.56592582628915 + vertex 182.38535251342554 -67.9366425699965 -62.46602540378452 + vertex 177.4490077118544 -70.78664256999664 -62.60000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.9523398115334 -68.18664256999656 -62.60000000000008 + vertex 182.17648367957543 -68.0572330474453 -62.56592582628915 + vertex 177.4490077118544 -70.78664256999664 -62.60000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + vertex 179.713109326992 -69.47946289302408 -59.60000000000006 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.93331342987875 -69.35232799494572 -59.26862915010159 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 179.713109326992 -69.47946289302408 -59.60000000000006 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.22028900396444 -69.18664256999648 -59.014359353944975 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 179.93331342987875 -69.35232799494572 -59.26862915010159 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.5544791381248 -68.9936978060785 -58.854518677937556 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 180.22028900396444 -69.18664256999648 -59.014359353944975 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.91310932699201 -68.78664256999643 -58.80000000000008 + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 180.5544791381248 -68.9936978060785 -58.854518677937556 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.57468324101154 -69.55938323102781 -59.98588952783603 + vertex 179.713109326992 -69.47946289302408 -59.60000000000006 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.5274686809369 -69.58664256999651 -60.400000000000055 + vertex 179.57468324101154 -69.55938323102781 -59.98588952783603 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + vertex 179.5274686809369 -69.58664256999651 -60.400000000000055 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 -60.80000000000009 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + vertex 179.0078534386663 -69.88664256999658 -60.80000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + vertex 177.1025975503406 -70.98664256999665 -60.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.71310932699203 -69.47946289302408 -61.20000000000008 + vertex 179.57468324101154 -69.55938323102781 -60.81411047216411 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.93331342987878 -69.35232799494582 -61.53137084989855 + vertex 179.71310932699203 -69.47946289302408 -61.20000000000008 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.2202890039645 -69.18664256999656 -61.785640646055185 + vertex 179.93331342987878 -69.35232799494582 -61.53137084989855 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.5544791381248 -68.99369780607854 -61.945481322062584 + vertex 180.2202890039645 -69.18664256999656 -61.785640646055185 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.91310932699204 -68.78664256999656 -62.00000000000008 + vertex 180.5544791381248 -68.99369780607854 -61.945481322062584 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 180.91310932699204 -68.78664256999656 -62.00000000000008 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.4490077118544 -70.78664256999664 -62.20000000000009 + vertex 182.70233981153334 -67.75362986810428 -62.10000000000009 + vertex 177.1025975503406 -70.98664256999665 -62.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.21362480460613 -74.38664256999628 -43.00000000000008 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.76174321682188 -76.37958733391434 -43.25451867793758 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + vertex 167.76174321682188 -76.37958733391434 -43.25451867793758 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.09593335098222 -76.18664256999637 -43.414359353944974 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 167.76174321682188 -76.37958733391434 -43.25451867793758 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.3829089250679 -76.0209571450471 -43.66862915010161 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 168.09593335098222 -76.18664256999637 -43.414359353944974 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.60311302795466 -75.89382224696875 -44.000000000000085 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 168.3829089250679 -76.0209571450471 -43.66862915010161 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.7415391139352 -75.81390190896514 -44.38588952783605 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 168.60311302795466 -75.89382224696875 -44.000000000000085 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.30836891628041 -75.48664256999639 -44.40000000000009 + vertex 171.21362480460618 -74.38664256999633 -44.40000000000008 + vertex 168.7415391139352 -75.81390190896514 -44.38588952783605 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + vertex 169.30836891628041 -75.48664256999639 -44.40000000000009 + vertex 168.7415391139352 -75.81390190896514 -44.38588952783605 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 169.30836891628041 -75.48664256999639 -44.40000000000009 + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.7415391139352 -75.81390190896518 -45.21411047216414 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 168.78875367400983 -75.78664256999642 -44.800000000000104 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.60311302795475 -75.8938222469689 -45.6000000000001 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 168.7415391139352 -75.81390190896518 -45.21411047216414 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.382908925068 -76.0209571450472 -45.93137084989857 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 168.60311302795475 -75.8938222469689 -45.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.09593335098225 -76.18664256999647 -46.18564064605519 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 168.382908925068 -76.0209571450472 -45.93137084989857 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.7617432168219 -76.37958733391443 -46.345481322062604 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 168.09593335098225 -76.18664256999647 -46.18564064605519 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 167.7617432168219 -76.37958733391443 -46.345481322062604 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + vertex 167.05670286644101 -76.7866425699966 -49.200000000000074 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.84426730114282 -77.48664256999662 -49.20000000000008 + vertex 167.05670286644101 -76.7866425699966 -49.200000000000074 + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + vertex 165.5273662396756 -77.66960548314098 -43.34118095489759 + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.0444828390875 -76.7936978060784 -43.254518677937554 + vertex 167.4031130279547 -76.58664256999637 -43.20000000000008 + vertex 165.5273662396756 -77.66960548314098 -43.34118095489759 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.7102927049271 -76.98664256999636 -43.414359353944974 + vertex 167.0444828390875 -76.7936978060784 -43.254518677937554 + vertex 165.5273662396756 -77.66960548314098 -43.34118095489759 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + vertex 166.7102927049271 -76.98664256999636 -43.414359353944974 + vertex 165.5273662396756 -77.66960548314098 -43.34118095489759 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.4233171308414 -77.15232799494562 -43.66862915010159 + vertex 166.7102927049271 -76.98664256999636 -43.414359353944974 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.20311302795469 -77.27946289302398 -44.00000000000006 + vertex 166.4233171308414 -77.15232799494562 -43.66862915010159 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + vertex 166.20311302795469 -77.27946289302398 -44.00000000000006 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + vertex 165.49785713962896 -77.68664256999648 -43.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.01747238189967 -77.38664256999651 -44.80000000000006 + vertex 166.06468694197423 -77.35938323102775 -44.38588952783603 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.06468694197426 -77.35938323102779 -45.214110472164094 + vertex 166.01747238189967 -77.38664256999651 -44.80000000000006 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.2031130279547 -77.27946289302402 -45.60000000000008 + vertex 166.06468694197426 -77.35938323102779 -45.214110472164094 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.42331713084147 -77.15232799494576 -45.93137084989855 + vertex 166.2031130279547 -77.27946289302402 -45.60000000000008 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.71029270492718 -76.9866425699965 -46.18564064605519 + vertex 166.42331713084147 -77.15232799494576 -45.93137084989855 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.0444828390875 -76.79369780607853 -46.34548132206258 + vertex 166.71029270492718 -76.9866425699965 -46.18564064605519 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + vertex 167.0444828390875 -76.79369780607853 -46.34548132206258 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 167.4031130279547 -76.58664256999646 -46.40000000000008 + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.81847096772387 -75.76948528247111 -47.00000000000008 + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.84426730114285 -77.48664256999662 -48.80000000000008 + vertex 167.056702866441 -76.7866425699965 -47.00000000000008 + vertex 165.49785713962905 -77.68664256999662 -48.80000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.57468324101126 -69.55938323102731 -44.38588952783607 + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + vertex 179.52746868093664 -69.58664256999607 -44.800000000000104 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + vertex 179.52746868093664 -69.58664256999607 -44.800000000000104 + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.57468324101126 -69.55938323102735 -45.21411047216414 + vertex 179.52746868093664 -69.58664256999607 -44.800000000000104 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.71310932699177 -69.47946289302364 -45.6000000000001 + vertex 179.57468324101126 -69.55938323102735 -45.21411047216414 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.9333134298785 -69.35232799494533 -45.93137084989857 + vertex 179.71310932699177 -69.47946289302364 -45.6000000000001 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.2202890039642 -69.18664256999615 -46.18564064605521 + vertex 179.9333134298785 -69.35232799494533 -45.93137084989857 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.55447913812455 -68.99369780607815 -46.345481322062625 + vertex 180.2202890039642 -69.18664256999615 -46.18564064605521 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + vertex 180.55447913812455 -68.99369780607815 -46.345481322062625 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.95233981153302 -68.18664256999588 -42.600000000000065 + vertex 177.44900771185397 -70.7866425699961 -42.60000000000007 + vertex 182.17648367957503 -68.05723304744467 -42.63407417371101 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + vertex 182.17648367957503 -68.05723304744467 -42.63407417371101 + vertex 177.44900771185397 -70.7866425699961 -42.60000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.38535251342523 -67.93664256999594 -42.73397459621563 + vertex 182.17648367957503 -68.05723304744467 -42.63407417371101 + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.5647122472288 -67.83308917940268 -42.89289321881352 + vertex 182.38535251342523 -67.93664256999594 -42.73397459621563 + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + vertex 182.5647122472288 -67.83308917940268 -42.89289321881352 + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + vertex 177.4490077118539 -70.78664256999606 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.5544791381245 -68.993697806078 -43.254518677937604 + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + vertex 180.5544791381245 -68.993697806078 -43.254518677937604 + vertex 177.10259755034016 -70.9866425699961 -43.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.22028900396418 -69.18664256999598 -43.414359353944995 + vertex 180.5544791381245 -68.993697806078 -43.254518677937604 + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.93331342987844 -69.35232799494524 -43.66862915010161 + vertex 180.22028900396418 -69.18664256999598 -43.414359353944995 + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.71310932699177 -69.4794628930236 -44.00000000000011 + vertex 179.93331342987844 -69.35232799494524 -43.66862915010161 + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.57468324101126 -69.55938323102731 -44.38588952783607 + vertex 179.71310932699177 -69.4794628930236 -44.00000000000011 + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.007853438666 -69.88664256999604 -44.40000000000007 + vertex 179.57468324101126 -69.55938323102731 -44.38588952783607 + vertex 177.10259755034025 -70.9866425699961 -44.40000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.36388254341335 -77.18664256999637 -42.60000000000009 + vertex 166.13973867537135 -77.31605209254768 -42.63407417371102 + vertex 170.8672146430924 -74.58664256999629 -42.600000000000094 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 170.8672146430924 -74.58664256999629 -42.600000000000094 + vertex 166.13973867537135 -77.31605209254768 -42.63407417371102 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.93086984152117 -77.43664256999641 -42.73397459621565 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 166.13973867537135 -77.31605209254768 -42.63407417371102 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.75151010771756 -77.54019596058971 -42.89289321881353 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 165.93086984152117 -77.43664256999641 -42.73397459621565 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.61388254341338 -77.61965527188865 -43.1000000000001 + vertex 170.86721464309235 -74.58664256999629 -43.00000000000009 + vertex 165.75151010771756 -77.54019596058971 -42.89289321881353 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.702339811533 -67.75362986810374 -43.100000000000065 + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + vertex 182.78885611527082 -67.70367965685142 -43.34118095489755 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.2717395158589 -68.57958733391395 -43.2545186779376 + vertex 182.78885611527082 -67.70367965685142 -43.34118095489755 + vertex 180.91310932699176 -68.78664256999598 -43.20000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.60592965001928 -68.38664256999598 -43.414359353945 + vertex 182.78885611527082 -67.70367965685142 -43.34118095489755 + vertex 181.2717395158589 -68.57958733391395 -43.2545186779376 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 182.78885611527082 -67.70367965685142 -43.34118095489755 + vertex 181.60592965001928 -68.38664256999598 -43.414359353945 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.89290522410496 -68.22095714504667 -43.668629150101616 + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 181.60592965001928 -68.38664256999598 -43.414359353945 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.1131093269917 -68.09382224696837 -44.000000000000114 + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 181.89290522410496 -68.22095714504667 -43.668629150101616 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 182.1131093269917 -68.09382224696837 -44.000000000000114 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 182.8183652153174 -67.68664256999595 -43.600000000000065 + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.2987499730468 -67.98664256999594 -44.80000000000011 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 182.2515354129722 -68.0139019089647 -44.38588952783608 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.25153541297223 -68.01390190896478 -45.214110472164144 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 182.2987499730468 -67.98664256999594 -44.80000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.11310932699172 -68.09382224696841 -45.60000000000011 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 182.25153541297223 -68.01390190896478 -45.214110472164144 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.892905224105 -68.22095714504681 -45.93137084989858 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 182.11310932699172 -68.09382224696841 -45.60000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.60592965001933 -68.38664256999607 -46.18564064605523 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 181.892905224105 -68.22095714504681 -45.93137084989858 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.27173951585897 -68.57958733391399 -46.345481322062625 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 181.60592965001933 -68.38664256999607 -46.18564064605523 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 181.27173951585897 -68.57958733391399 -46.345481322062625 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + vertex 180.9131093269917 -68.78664256999602 -46.40000000000013 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.47195505380378 -67.88664256999614 -48.80000000000003 + vertex 182.81836521531753 -67.68664256999614 -48.80000000000003 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.2595194885056 -68.58664256999616 -49.20000000000007 + vertex 182.47195505380378 -67.88664256999614 -48.80000000000003 + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.47195505380375 -67.88664256999614 -49.20000000000003 + vertex 182.47195505380378 -67.88664256999614 -48.80000000000003 + vertex 181.2595194885056 -68.58664256999616 -49.20000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + vertex 176.87250722291913 -71.11948528247113 -56.300000000000075 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 176.87250722291913 -71.11948528247113 -56.300000000000075 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 179.00785343866625 -69.8866425699965 -58.76568542494932 + vertex 179.4977513872229 -69.60379985752186 -58.20000000000009 + vertex 176.87250722291913 -71.11948528247113 -56.300000000000075 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 182.4719550538039 -67.88664256999627 -56.00000000000008 + vertex 181.2595194885057 -68.58664256999634 -56.00000000000009 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.25951948850573 -68.58664256999639 -58.20000000000009 + vertex 182.4719550538039 -67.88664256999631 -56.40000000000008 + vertex 181.2595194885057 -68.58664256999634 -56.00000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 174.1581111774733 -72.6866425699964 -49.90000000000009 + vertex 174.76329962118675 -72.33723685910797 -49.99200026901961 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 175.3272454725823 -72.01164256999637 -50.26173140978212 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 174.76329962118675 -72.33723685910797 -49.99200026901961 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 175.81151675385195 -71.73204841539453 -50.690811690796394 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 175.3272454725823 -72.01164256999637 -50.26173140978212 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 176.18311117747334 -71.51750827488736 -51.25000000000008 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 175.81151675385195 -71.73204841539453 -50.690811690796394 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 176.4167051975654 -71.38264270450611 -51.901188578223284 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 176.18311117747334 -71.51750827488736 -51.25000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 176.4167051975654 -71.38264270450611 -51.901188578223284 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 176.49637976769134 -71.33664256999639 -52.60000000000009 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 176.4167051975654 -71.38264270450611 -51.901188578223284 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 176.4167051975654 -71.38264270450611 -53.29881142177688 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 176.49637976769134 -71.33664256999639 -52.60000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 176.18311117747336 -71.51750827488746 -53.950000000000095 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 176.4167051975654 -71.38264270450611 -53.29881142177688 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 175.81151675385203 -71.73204841539467 -54.50918830920377 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 176.18311117747336 -71.51750827488746 -53.950000000000095 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 175.32724547258235 -72.01164256999647 -54.93826859021806 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 175.81151675385203 -71.73204841539467 -54.50918830920377 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 174.76329962118686 -72.33723685910816 -55.20799973098057 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 175.32724547258235 -72.01164256999647 -54.93826859021806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 174.1581111774734 -72.68664256999658 -55.30000000000008 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 174.76329962118686 -72.33723685910816 -55.20799973098057 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 174.1581111774734 -72.68664256999658 -55.30000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + vertex 177.36240517147576 -70.83664256999646 -55.734314575050846 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 171.44371513202773 -74.25379985752207 -56.30000000000007 + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 168.81847096772404 -75.76948528247144 -58.200000000000074 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.21362480460647 -74.38664256999682 -60.80000000000006 + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.74153911393546 -75.81390190896563 -60.814110472164124 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.603113027955 -75.89382224696931 -61.20000000000009 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 168.74153911393546 -75.81390190896563 -60.814110472164124 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.3829089250683 -76.0209571450477 -61.531370849898586 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 168.603113027955 -75.89382224696931 -61.20000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.09593335098256 -76.1866425699969 -61.7856406460552 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 168.3829089250683 -76.0209571450477 -61.531370849898586 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.7617432168222 -76.37958733391493 -61.94548132206259 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 168.09593335098256 -76.1866425699969 -61.7856406460552 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.403113027955 -76.58664256999695 -62.00000000000009 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 167.7617432168222 -76.37958733391493 -61.94548132206259 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 167.403113027955 -76.58664256999695 -62.00000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.86721464309272 -74.58664256999687 -62.20000000000009 + vertex 171.21362480460647 -74.38664256999687 -62.20000000000008 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.75151010771793 -77.54019596059025 -62.307106781186654 + vertex 170.86721464309272 -74.58664256999687 -62.20000000000009 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + vertex 170.86721464309272 -74.58664256999687 -62.20000000000009 + vertex 165.75151010771793 -77.54019596059025 -62.307106781186654 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.93086984152157 -77.43664256999703 -62.466025403784535 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + vertex 165.75151010771793 -77.54019596059025 -62.307106781186654 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.13973867537172 -77.31605209254826 -62.56592582628915 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + vertex 165.93086984152157 -77.43664256999703 -62.466025403784535 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.36388254341375 -77.186642569997 -62.60000000000009 + vertex 170.86721464309275 -74.58664256999687 -62.60000000000009 + vertex 166.13973867537172 -77.31605209254826 -62.56592582628915 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.05670286644113 -76.78664256999677 -56.00000000000008 + vertex 165.8442673011429 -77.48664256999685 -56.000000000000114 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.84426730114293 -77.48664256999685 -56.40000000000011 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 165.8442673011429 -77.48664256999685 -56.000000000000114 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.49785713962922 -77.68664256999689 -56.40000000000011 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 165.84426730114293 -77.48664256999685 -56.40000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.20311302795497 -77.27946289302443 -59.60000000000007 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 165.49785713962922 -77.68664256999689 -56.40000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + vertex 166.20311302795497 -77.27946289302443 -59.60000000000007 + vertex 165.49785713962922 -77.68664256999689 -56.40000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + vertex 165.49785713962922 -77.68664256999689 -56.40000000000011 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.4233171308417 -77.15232799494616 -59.2686291501016 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 166.20311302795497 -77.27946289302443 -59.60000000000007 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.7102927049274 -76.98664256999692 -59.01435935394496 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 166.4233171308417 -77.15232799494616 -59.2686291501016 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.04448283908772 -76.7936978060789 -58.85451867793757 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 166.7102927049274 -76.98664256999692 -59.01435935394496 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.40311302795504 -76.58664256999687 -58.800000000000075 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 167.04448283908772 -76.7936978060789 -58.85451867793757 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 167.05670286644119 -76.78664256999687 -58.200000000000074 + vertex 167.40311302795504 -76.58664256999687 -58.800000000000075 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.0174723818999 -77.38664256999691 -60.40000000000007 + vertex 166.06468694197454 -77.35938323102819 -59.98588952783604 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.06468694197451 -77.35938323102825 -60.8141104721641 + vertex 166.0174723818999 -77.38664256999691 -60.40000000000007 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.20311302795503 -77.27946289302447 -61.20000000000007 + vertex 166.06468694197451 -77.35938323102825 -60.8141104721641 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.42331713084175 -77.15232799494622 -61.531370849898536 + vertex 166.20311302795503 -77.27946289302447 -61.20000000000007 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 166.71029270492747 -76.98664256999696 -61.78564064605518 + vertex 166.42331713084175 -77.15232799494622 -61.531370849898536 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.52736623967587 -77.66960548314152 -61.858819045102614 + vertex 166.71029270492747 -76.98664256999696 -61.78564064605518 + vertex 165.49785713962933 -77.68664256999702 -61.6000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.04448283908783 -76.79369780607902 -61.94548132206259 + vertex 166.71029270492747 -76.98664256999696 -61.78564064605518 + vertex 165.52736623967587 -77.66960548314152 -61.858819045102614 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + vertex 167.04448283908783 -76.79369780607902 -61.94548132206259 + vertex 165.52736623967587 -77.66960548314152 -61.858819045102614 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.403113027955 -76.58664256999695 -62.00000000000009 + vertex 167.04448283908783 -76.79369780607902 -61.94548132206259 + vertex 165.61388254341375 -77.61965527188924 -62.1000000000001 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 167.40311302795504 -76.58664256999687 -58.800000000000075 + vertex 167.76174321682214 -76.3795873339148 -58.85451867793757 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.09593335098256 -76.18664256999686 -59.01435935394498 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 167.76174321682214 -76.3795873339148 -58.85451867793757 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.38290892506822 -76.02095714504756 -59.268629150101624 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 168.09593335098256 -76.18664256999686 -59.01435935394498 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.60311302795498 -75.89382224696931 -59.600000000000094 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 168.38290892506822 -76.02095714504756 -59.268629150101624 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 169.3083689162807 -75.4866425699968 -58.76568542494933 + vertex 168.60311302795498 -75.89382224696931 -59.600000000000094 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.74153911393552 -75.81390190896563 -59.98588952783606 + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 168.60311302795498 -75.89382224696931 -59.600000000000094 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.78875367401005 -75.78664256999683 -60.40000000000009 + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 168.74153911393552 -75.81390190896563 -59.98588952783606 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 168.74153911393546 -75.81390190896563 -60.814110472164124 + vertex 169.3083689162807 -75.48664256999689 -60.80000000000007 + vertex 168.78875367401005 -75.78664256999683 -60.40000000000009 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 176.872507222919 -71.11948528247086 -48.90000000000006 + vertex 179.49775138722265 -69.60379985752151 -47.00000000000008 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 181.25951948850556 -68.58664256999612 -47.00000000000007 + vertex 179.00785343866605 -69.88664256999613 -46.434314575050806 + vertex 179.49775138722265 -69.60379985752151 -47.00000000000008 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 179.49775138722265 -69.60379985752151 -47.00000000000008 + vertex 176.872507222919 -71.11948528247086 -48.90000000000006 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 176.872507222919 -71.11948528247086 -48.90000000000006 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 174.1581111774733 -72.6866425699964 -49.90000000000009 + vertex 177.36240517147567 -70.83664256999627 -49.46568542494934 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 173.55292273375986 -73.03604828088481 -49.9920002690196 + vertex 174.1581111774733 -72.6866425699964 -49.90000000000009 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 172.98897688236434 -73.36164256999642 -50.26173140978211 + vertex 173.55292273375986 -73.03604828088481 -49.9920002690196 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 172.50470560109468 -73.64123672459827 -50.690811690796394 + vertex 172.98897688236434 -73.36164256999642 -50.26173140978211 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 172.13311117747338 -73.85577686510548 -51.25000000000008 + vertex 172.50470560109468 -73.64123672459827 -50.690811690796394 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.8995171573813 -73.99064243548673 -51.90118857822331 + vertex 172.13311117747338 -73.85577686510548 -51.25000000000008 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + vertex 171.8995171573813 -73.99064243548673 -51.90118857822331 + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.8198425872554 -74.03664256999654 -52.60000000000011 + vertex 171.8995171573813 -73.99064243548673 -51.90118857822331 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 171.89951715738138 -73.99064243548682 -53.298811421776925 + vertex 171.8198425872554 -74.03664256999654 -52.60000000000011 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 172.1331111774734 -73.85577686510557 -53.95000000000012 + vertex 171.89951715738138 -73.99064243548682 -53.298811421776925 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 172.5047056010948 -73.64123672459844 -54.50918830920379 + vertex 172.1331111774734 -73.85577686510557 -53.95000000000012 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 172.98897688236445 -73.3616425699966 -54.93826859021808 + vertex 172.5047056010948 -73.64123672459844 -54.50918830920379 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 173.55292273376 -73.036048280885 -55.20799973098057 + vertex 172.98897688236445 -73.3616425699966 -54.93826859021808 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 174.1581111774734 -72.68664256999658 -55.30000000000008 + vertex 173.55292273376 -73.036048280885 -55.20799973098057 + vertex 170.95381718347102 -74.53664256999662 -55.734314575050796 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 169.30836891628044 -75.48664256999643 -46.434314575050855 + vertex 168.81847096772387 -75.76948528247111 -47.00000000000008 + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + endloop +endfacet +facet normal 0.5000000000000006 -0.8660254037844384 2.97504977010331e-16 + outer loop + vertex 170.95381718347093 -74.53664256999647 -49.465685424949335 + vertex 171.44371513202756 -74.25379985752176 -48.900000000000105 + vertex 168.81847096772387 -75.76948528247111 -47.00000000000008 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 17.403113027955477 183.22097856533367 -58.80000000000016 + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 17.04448283908824 183.0139233292516 -58.854518677937655 + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 17.761743216822698 183.42803380141567 -58.854518677937655 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 16.710292704927927 182.82097856533363 -59.01435935394505 + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 18.095933350983 183.6209785653337 -59.014359353945075 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 16.42331713084222 182.65529314038437 -59.26862915010169 + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 18.38290892506873 183.78666399028293 -59.26862915010171 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 16.203113027955485 182.52815824230603 -59.600000000000165 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 18.603113027955455 183.9137988883612 -59.600000000000186 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + vertex 16.06468694197501 182.44823790430235 -59.98588952783613 + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + vertex 18.741539113935957 183.99371922636493 -59.98588952783615 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + vertex 16.017472381900408 182.42097856533357 -60.40000000000016 + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + vertex 18.788753674010536 184.02097856533365 -60.40000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + vertex 16.064686941975005 182.44823790430232 -60.814110472164195 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + vertex 18.741539113935957 183.9937192263649 -60.81411047216422 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + vertex 16.20311302795551 182.528158242306 -61.20000000000016 + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + vertex 18.60311302795548 183.91379888836119 -61.20000000000018 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + vertex 16.423317130842236 182.6552931403843 -61.53137084989863 + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + vertex 18.382908925068755 183.78666399028285 -61.53137084989868 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + vertex 16.710292704927937 182.82097856533352 -61.78564064605527 + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + vertex 18.095933350983042 183.6209785653336 -61.78564064605529 + endloop +endfacet +facet normal -0.5000000000000006 0.8660254037844384 -2.9700185742271545e-16 + outer loop + vertex 17.40311302795549 183.22097856533355 -62.00000000000018 + vertex 17.044482839088296 183.0139233292515 -61.94548132206268 + vertex 17.76174321682269 183.42803380141555 -61.94548132206268 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 27.102597550340754 188.82097856533446 -22.599999999999966 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 30.554479138125107 190.81392332925256 -22.34548132206245 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 30.554479138125107 190.81392332925256 -22.34548132206245 + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + vertex 32.702339811533555 192.05399126722685 -22.49999999999997 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125107 190.81392332925256 -22.34548132206245 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 30.220289003964727 190.62097856533455 -22.18564064605505 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.220289003964727 190.62097856533455 -22.18564064605505 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 29.933313429879036 190.4552931403853 -21.93137084989843 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.933313429879036 190.4552931403853 -21.93137084989843 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 29.7131093269923 190.32815824230696 -21.599999999999934 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.7131093269923 190.32815824230696 -21.599999999999934 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 29.574683241011822 190.24823790430327 -21.21411047216397 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.574683241011822 190.24823790430327 -21.21411047216397 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 29.007853438666555 189.9209785653345 -21.199999999999957 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.574683241011822 190.24823790430327 -21.21411047216397 + vertex 29.007853438666555 189.9209785653345 -21.199999999999957 + vertex 29.527468680937208 190.2209785653345 -20.799999999999937 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.527468680937208 190.2209785653345 -20.799999999999937 + vertex 29.007853438666555 189.9209785653345 -21.199999999999957 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.527468680937208 190.2209785653345 -20.799999999999937 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 29.57468324101183 190.24823790430324 -20.385889527835904 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.57468324101183 190.24823790430324 -20.385889527835904 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 29.713109326992345 190.32815824230696 -19.99999999999994 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992345 190.32815824230696 -19.99999999999994 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 29.933313429879053 190.45529314038524 -19.668629150101474 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.933313429879053 190.45529314038524 -19.668629150101474 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 30.220289003964787 190.62097856533444 -19.414359353944835 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.220289003964787 190.62097856533444 -19.414359353944835 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 30.554479138125096 190.81392332925245 -19.254518677937423 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125096 190.81392332925245 -19.254518677937423 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.13973867537193 182.49156904278294 -22.965925826289016 + vertex 20.867214643092918 185.22097856533435 -22.999999999999954 + vertex 16.363882543413958 182.6209785653342 -22.999999999999954 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643092918 185.22097856533435 -22.999999999999954 + vertex 16.13973867537193 182.49156904278294 -22.965925826289016 + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 16.13973867537193 182.49156904278294 -22.965925826289016 + vertex 15.930869841521712 182.37097856533418 -22.866025403784388 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 15.930869841521712 182.37097856533418 -22.866025403784388 + vertex 15.751510107718136 182.26742517474088 -22.7071067811865 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 15.751510107718136 182.26742517474088 -22.7071067811865 + vertex 15.613882543413906 182.18796586344192 -22.49999999999995 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 15.613882543413906 182.18796586344192 -22.49999999999995 + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + vertex 15.613882543413906 182.18796586344192 -22.49999999999995 + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + vertex 17.761743216822477 183.4280338014162 -22.345481322062458 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + vertex 17.761743216822477 183.4280338014162 -22.345481322062458 + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + vertex 17.761743216822477 183.4280338014162 -22.345481322062458 + vertex 18.09593335098276 183.62097856533424 -22.185640646055052 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + vertex 18.09593335098276 183.62097856533424 -22.185640646055052 + vertex 18.382908925068513 183.78666399028344 -21.931370849898414 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + vertex 18.382908925068513 183.78666399028344 -21.931370849898414 + vertex 18.603113027955242 183.91379888836175 -21.599999999999945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + vertex 18.603113027955242 183.91379888836175 -21.599999999999945 + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + vertex 19.308368916281005 184.3209785653342 -21.199999999999946 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281005 184.3209785653342 -21.199999999999946 + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + vertex 18.788753674010355 184.02097856533422 -20.799999999999926 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281005 184.3209785653342 -21.199999999999946 + vertex 18.788753674010355 184.02097856533422 -20.799999999999926 + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 18.788753674010355 184.02097856533422 -20.799999999999926 + vertex 18.74153911393574 183.9937192263654 -20.385889527835893 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 18.74153911393574 183.9937192263654 -20.385889527835893 + vertex 18.60311302795526 183.9137988883617 -19.999999999999925 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 18.60311302795526 183.9137988883617 -19.999999999999925 + vertex 18.382908925068534 183.78666399028336 -19.668629150101452 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 18.382908925068534 183.78666399028336 -19.668629150101452 + vertex 18.09593335098283 183.62097856533413 -19.41435935394484 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 18.09593335098283 183.62097856533413 -19.41435935394484 + vertex 17.76174321682251 183.42803380141612 -19.254518677937433 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 17.76174321682251 183.42803380141612 -19.254518677937433 + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + vertex 15.497857139629756 182.12097856533373 -9.19999999999993 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 21.213624804607 185.42097856533377 -4.799999999999969 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607 185.42097856533377 -4.799999999999969 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + vertex 20.8672146430933 185.2209785653337 -2.999999999999924 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.8672146430933 185.2209785653337 -2.999999999999924 + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + vertex 15.930869841522087 182.37097856533356 -3.1339745962155057 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.8672146430933 185.2209785653337 -2.999999999999924 + vertex 15.930869841522087 182.37097856533356 -3.1339745962155057 + vertex 16.13973867537229 182.49156904278232 -3.034074173710881 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 20.8672146430933 185.2209785653337 -2.999999999999924 + vertex 16.13973867537229 182.49156904278232 -3.034074173710881 + vertex 16.36388254341431 182.62097856533356 -2.9999999999999436 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 26.87250722291961 188.68813585285966 -16.699999999999974 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 26.87250722291961 188.68813585285966 -16.699999999999974 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 26.87250722291961 188.68813585285966 -16.699999999999974 + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 24.15811117747387 187.12097856533418 -15.699999999999937 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 24.15811117747387 187.12097856533418 -15.699999999999937 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 23.552922733760443 186.77157285444576 -15.607999730980426 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 23.552922733760443 186.77157285444576 -15.607999730980426 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 22.98897688236493 186.44597856533412 -15.338268590217929 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.98897688236493 186.44597856533412 -15.338268590217929 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 22.504705601095278 186.16638441073223 -14.90918830920364 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.504705601095278 186.16638441073223 -14.90918830920364 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 22.13311117747392 185.9518442702251 -14.349999999999962 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.13311117747392 185.9518442702251 -14.349999999999962 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 21.819842587255987 185.77097856533405 -12.999999999999954 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.819842587255987 185.77097856533405 -12.999999999999954 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 21.899517157381904 185.81697869984376 -12.301188578223135 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.899517157381904 185.81697869984376 -12.301188578223135 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 22.133111177474007 185.95184427022502 -11.649999999999945 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.133111177474007 185.95184427022502 -11.649999999999945 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 22.50470560109535 186.16638441073218 -11.090811690796267 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.50470560109535 186.16638441073218 -11.090811690796267 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 22.988976882365 186.445978565334 -10.661731409781979 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 22.988976882365 186.445978565334 -10.661731409781979 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 23.552922733760536 186.7715728544456 -10.392000269019471 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 23.552922733760536 186.7715728544456 -10.392000269019471 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 24.15811117747398 187.120978565334 -10.299999999999962 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 31.95233981153357 191.62097856533464 -22.999999999999968 + vertex 27.449007711854513 189.0209785653345 -22.999999999999964 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.95233981153357 191.62097856533464 -22.999999999999968 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 32.176483679575576 191.7503880878859 -22.96592582628903 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.176483679575576 191.7503880878859 -22.96592582628903 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 32.38535251342575 191.87097856533467 -22.866025403784406 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.38535251342575 191.87097856533467 -22.866025403784406 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 32.56471224722934 191.9745319559279 -22.70710678118652 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.56471224722934 191.9745319559279 -22.70710678118652 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 32.702339811533555 192.05399126722685 -22.49999999999997 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + vertex 15.613882543413906 182.18796586344192 -22.49999999999995 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 17.04448283908803 183.01392332925215 -22.34548132206248 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908803 183.01392332925215 -22.34548132206248 + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 16.710292704927685 182.82097856533417 -22.185640646055063 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704927685 182.82097856533417 -22.185640646055063 + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704927685 182.82097856533417 -22.185640646055063 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + vertex 16.423317130842 182.65529314038488 -21.93137084989845 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.423317130842 182.65529314038488 -21.93137084989845 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + vertex 16.203113027955265 182.52815824230657 -21.599999999999977 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.203113027955265 182.52815824230657 -21.599999999999977 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + vertex 16.064686941974777 182.44823790430289 -21.21411047216401 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941974777 182.44823790430289 -21.21411047216401 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941974777 182.44823790430289 -21.21411047216401 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 16.01747238190017 182.42097856533408 -20.79999999999998 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.01747238190017 182.42097856533408 -20.79999999999998 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 16.064686941974774 182.44823790430286 -20.385889527835946 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.064686941974774 182.44823790430286 -20.385889527835946 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 16.20311302795529 182.52815824230652 -19.999999999999957 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.20311302795529 182.52815824230652 -19.999999999999957 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 16.423317130842044 182.65529314038483 -19.668629150101488 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.423317130842044 182.65529314038483 -19.668629150101488 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 16.710292704927753 182.8209785653341 -19.41435935394485 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 16.710292704927753 182.8209785653341 -19.41435935394485 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 17.04448283908808 183.01392332925207 -19.254518677937455 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.04448283908808 183.01392332925207 -19.254518677937455 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 15.84426730114338 182.32097856533397 -16.799999999999965 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + vertex 15.84426730114338 182.32097856533397 -16.799999999999965 + vertex 17.056702866441597 183.02097856533402 -16.399999999999963 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441597 183.02097856533402 -16.399999999999963 + vertex 15.84426730114338 182.32097856533397 -16.799999999999965 + vertex 15.84426730114338 182.32097856533397 -16.399999999999963 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 26.183111177473876 188.2901128604432 -14.349999999999968 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 26.183111177473876 188.2901128604432 -14.349999999999968 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 25.811516753852523 188.07557271993602 -14.909188309203646 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 25.811516753852523 188.07557271993602 -14.909188309203646 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 25.32724547258287 187.7959785653342 -15.33826859021793 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 25.32724547258287 187.7959785653342 -15.33826859021793 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 24.76329962118729 187.4703842762226 -15.60799973098044 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 24.76329962118729 187.4703842762226 -15.60799973098044 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + vertex 24.15811117747387 187.12097856533418 -15.699999999999937 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 26.49637976769187 188.47097856533418 -12.99999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 26.49637976769187 188.47097856533418 -12.99999999999996 + vertex 26.416705197566003 188.42497843082435 -12.301188578223162 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 26.416705197566003 188.42497843082435 -12.301188578223162 + vertex 26.183111177473915 188.2901128604431 -11.649999999999949 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 26.183111177473915 188.2901128604431 -11.649999999999949 + vertex 25.81151675385259 188.07557271993593 -11.09081169079627 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 25.81151675385259 188.07557271993593 -11.09081169079627 + vertex 25.32724547258295 187.79597856533405 -10.661731409781982 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 25.32724547258295 187.79597856533405 -10.661731409781982 + vertex 24.763299621187397 187.47038427622243 -10.392000269019473 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 24.763299621187397 187.47038427622243 -10.392000269019473 + vertex 24.15811117747398 187.120978565334 -10.299999999999962 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 24.15811117747398 187.120978565334 -10.299999999999962 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 15.844267301143496 182.32097856533375 -9.599999999999929 + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 17.056702866441704 183.0209785653338 -9.599999999999953 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 15.844267301143496 182.32097856533375 -9.599999999999929 + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 26.872507222919705 188.6881358528594 -9.299999999999965 + vertex 29.49775138722347 190.2038212778087 -7.39999999999995 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 26.872507222919705 188.6881358528594 -9.299999999999965 + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.49775138722347 190.2038212778087 -7.39999999999995 + vertex 26.872507222919705 188.6881358528594 -9.299999999999965 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.49775138722347 190.2038212778087 -7.39999999999995 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + vertex 27.102597550341113 188.82097856533395 -4.799999999999952 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 29.57468324101212 190.24823790430275 -4.785889527835922 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.57468324101212 190.24823790430275 -4.785889527835922 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 29.713109326992594 190.32815824230642 -4.399999999999955 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992594 190.32815824230642 -4.399999999999955 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 29.93331342987934 190.45529314038473 -4.068629150101484 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.93331342987934 190.45529314038473 -4.068629150101484 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 30.220289003965053 190.62097856533396 -3.814359353944847 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.220289003965053 190.62097856533396 -3.814359353944847 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 30.554479138125394 190.81392332925194 -3.654518677937452 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125394 190.81392332925194 -3.654518677937452 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 30.913109326992597 191.02097856533402 -3.5999999999999566 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.913109326992597 191.02097856533402 -3.5999999999999566 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 27.449007711854946 189.0209785653339 -3.399999999999954 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + vertex 27.449007711854946 189.0209785653339 -3.399999999999954 + vertex 32.56471224722971 191.97453195592732 -3.2928932188133984 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.56471224722971 191.97453195592732 -3.2928932188133984 + vertex 27.449007711854946 189.0209785653339 -3.399999999999954 + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.56471224722971 191.97453195592732 -3.2928932188133984 + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 32.385352513426135 191.87097856533404 -3.133974596215514 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.385352513426135 191.87097856533404 -3.133974596215514 + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 32.176483679575945 191.7503880878853 -3.034074173710887 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.176483679575945 191.7503880878853 -3.034074173710887 + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 31.952339811533943 191.62097856533404 -2.9999999999999494 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.25951948850626 191.2209785653342 -9.599999999999923 + vertex 32.47195505380448 191.92097856533422 -9.19999999999996 + vertex 32.47195505380448 191.92097856533425 -9.59999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.47195505380448 191.92097856533422 -9.19999999999996 + vertex 31.25951948850626 191.2209785653342 -9.599999999999923 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.47195505380448 191.92097856533422 -9.19999999999996 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 32.81836521531824 192.12097856533427 -9.19999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531824 192.12097856533427 -9.19999999999996 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 32.11310932699257 191.71379888836168 -5.999999999999944 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531824 192.12097856533427 -9.19999999999996 + vertex 32.11310932699257 191.71379888836168 -5.999999999999944 + vertex 32.25153541297306 191.79371922636537 -5.614110472163954 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531824 192.12097856533427 -9.19999999999996 + vertex 32.25153541297306 191.79371922636537 -5.614110472163954 + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.11310932699257 191.71379888836168 -5.999999999999944 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 31.892905224105828 191.58666399028337 -6.331370849898415 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.892905224105828 191.58666399028337 -6.331370849898415 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 31.605929650020105 191.42097856533414 -6.585640646055053 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.605929650020105 191.42097856533414 -6.585640646055053 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 31.27173951585978 191.22803380141616 -6.7454813220624334 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.27173951585978 191.22803380141616 -6.7454813220624334 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 30.913109326992572 191.0209785653341 -6.799999999999951 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.913109326992572 191.0209785653341 -6.799999999999951 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 32.25153541297306 191.79371922636537 -5.614110472163954 + vertex 32.29874997304768 191.82097856533412 -5.199999999999923 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 32.29874997304768 191.82097856533412 -5.199999999999923 + vertex 32.25153541297306 191.79371922636534 -4.785889527835891 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 32.25153541297306 191.79371922636534 -4.785889527835891 + vertex 32.11310932699258 191.71379888836162 -4.399999999999924 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 32.11310932699258 191.71379888836162 -4.399999999999924 + vertex 31.892905224105863 191.58666399028328 -4.068629150101453 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 31.892905224105863 191.58666399028328 -4.068629150101453 + vertex 31.60592965002015 191.42097856533402 -3.8143593539448384 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 31.60592965002015 191.42097856533402 -3.8143593539448384 + vertex 32.78885611527171 192.10394147847862 -3.741180954897436 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.78885611527171 192.10394147847862 -3.741180954897436 + vertex 31.60592965002015 191.42097856533402 -3.8143593539448384 + vertex 31.27173951585983 191.22803380141602 -3.654518677937407 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.78885611527171 192.10394147847862 -3.741180954897436 + vertex 31.27173951585983 191.22803380141602 -3.654518677937407 + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + vertex 31.27173951585983 191.22803380141602 -3.654518677937407 + vertex 30.913109326992597 191.02097856533402 -3.5999999999999566 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 30.554479138125338 190.81392332925208 -6.745481322062478 + vertex 30.913109326992572 191.0209785653341 -6.799999999999951 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.554479138125338 190.81392332925208 -6.745481322062478 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 30.220289003965032 190.6209785653341 -6.585640646055061 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.220289003965032 190.6209785653341 -6.585640646055061 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 29.933313429879313 190.4552931403848 -6.3313708498984465 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.933313429879313 190.4552931403848 -6.3313708498984465 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 29.713109326992605 190.3281582423065 -5.999999999999975 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992605 190.3281582423065 -5.999999999999975 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.713109326992605 190.3281582423065 -5.999999999999975 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + vertex 29.574683241012092 190.24823790430275 -5.6141104721640085 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.574683241012092 190.24823790430275 -5.6141104721640085 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + vertex 29.527468680937478 190.220978565334 -5.199999999999976 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 29.527468680937478 190.220978565334 -5.199999999999976 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + vertex 29.57468324101212 190.24823790430275 -4.785889527835922 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 18.818470967724387 184.03813585285948 -18.599999999999948 + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 18.818470967724387 184.03813585285948 -18.599999999999948 + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + vertex 18.818470967724387 184.03813585285948 -18.599999999999948 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.259519488506154 191.2209785653344 -16.39999999999998 + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + vertex 31.259519488506154 191.2209785653344 -16.39999999999998 + vertex 32.471955053804315 191.92097856533445 -16.400000000000002 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 32.702339811533555 192.05399126722685 -22.49999999999997 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + vertex 31.27173951585951 191.22803380141661 -22.34548132206245 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 31.27173951585951 191.22803380141661 -22.34548132206245 + vertex 31.605929650019835 191.42097856533465 -22.185640646055035 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 31.605929650019835 191.42097856533465 -22.185640646055035 + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + vertex 31.605929650019835 191.42097856533465 -22.185640646055035 + vertex 31.89290522410554 191.58666399028385 -21.93137084989842 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + vertex 31.89290522410554 191.58666399028385 -21.93137084989842 + vertex 32.11310932699228 191.71379888836213 -21.599999999999927 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + vertex 32.11310932699228 191.71379888836213 -21.599999999999927 + vertex 32.251535412972764 191.79371922636585 -21.21411047216396 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + vertex 32.251535412972764 191.79371922636585 -21.21411047216396 + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 32.251535412972764 191.79371922636585 -21.21411047216396 + vertex 32.29874997304738 191.82097856533457 -20.79999999999993 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 32.29874997304738 191.82097856533457 -20.79999999999993 + vertex 32.25153541297277 191.79371922636582 -20.385889527835896 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 32.25153541297277 191.79371922636582 -20.385889527835896 + vertex 32.11310932699228 191.7137988883621 -19.99999999999993 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 32.11310932699228 191.7137988883621 -19.99999999999993 + vertex 31.89290522410557 191.58666399028374 -19.66862915010146 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 31.89290522410557 191.58666399028374 -19.66862915010146 + vertex 31.60592965001985 191.42097856533454 -19.41435935394482 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 31.60592965001985 191.42097856533454 -19.41435935394482 + vertex 31.27173951585956 191.2280338014165 -19.254518677937426 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 31.27173951585956 191.2280338014165 -19.254518677937426 + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.975049770103308e-16 + outer loop + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 181.9523398115329 -68.18664256999598 -23.000000000000057 + vertex 27.449007711854513 189.0209785653345 -22.999999999999964 + vertex 31.95233981153357 191.62097856533464 -22.999999999999968 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 27.449007711854513 189.0209785653345 -22.999999999999964 + vertex 181.9523398115329 -68.18664256999598 -23.000000000000057 + vertex 177.44900771185388 -70.7866425699962 -23.000000000000053 + endloop +endfacet +facet normal 0.11303899832181251 0.0652630961100721 -0.9914448613738078 + outer loop + vertex 182.17648367957491 -68.05723304744475 -22.96592582628912 + vertex 31.95233981153357 191.62097856533464 -22.999999999999968 + vertex 32.176483679575576 191.7503880878859 -22.96592582628903 + endloop +endfacet +facet normal 0.11303899832181251 0.0652630961100721 -0.9914448613738078 + outer loop + vertex 31.95233981153357 191.62097856533464 -22.999999999999968 + vertex 182.17648367957491 -68.05723304744475 -22.96592582628912 + vertex 181.9523398115329 -68.18664256999598 -23.000000000000057 + endloop +endfacet +facet normal -2.189385090694423e-14 2.884359777632179e-14 -1.0 + outer loop + vertex 176.8725072229189 -71.11948528247095 -16.700000000000063 + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + vertex 26.87250722291961 188.68813585285966 -16.699999999999974 + endloop +endfacet +facet normal -2.189385090694423e-14 2.884359777632179e-14 -1.0 + outer loop + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + vertex 176.8725072229189 -71.11948528247095 -16.700000000000063 + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + endloop +endfacet +facet normal 0.33141357403555705 0.1913417161825882 -0.9238795325112902 + outer loop + vertex 182.38535251342515 -67.93664256999604 -22.86602540378449 + vertex 32.176483679575576 191.7503880878859 -22.96592582628903 + vertex 32.38535251342575 191.87097856533467 -22.866025403784406 + endloop +endfacet +facet normal 0.33141357403555705 0.1913417161825882 -0.9238795325112902 + outer loop + vertex 32.176483679575576 191.7503880878859 -22.96592582628903 + vertex 182.38535251342515 -67.93664256999604 -22.86602540378449 + vertex 182.17648367957491 -68.05723304744475 -22.96592582628912 + endloop +endfacet +facet normal 0.5272028623656286 0.3043807145043965 -0.7933533402912483 + outer loop + vertex 182.5647122472287 -67.83308917940278 -22.70710678118661 + vertex 32.38535251342575 191.87097856533467 -22.866025403784406 + vertex 32.56471224722934 191.9745319559279 -22.70710678118652 + endloop +endfacet +facet normal 0.5272028623656286 0.3043807145043965 -0.7933533402912483 + outer loop + vertex 32.38535251342575 191.87097856533467 -22.866025403784406 + vertex 182.5647122472287 -67.83308917940278 -22.70710678118661 + vertex 182.38535251342515 -67.93664256999604 -22.86602540378449 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 7.797766215937043e-16 + outer loop + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 31.259519488506154 191.2209785653344 -16.39999999999998 + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 7.797766215937043e-16 + outer loop + vertex 31.259519488506154 191.2209785653344 -16.39999999999998 + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 181.25951948850548 -68.58664256999624 -16.400000000000063 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 6.227439144697608e-15 + outer loop + vertex 177.44900771185388 -70.7866425699962 -23.000000000000053 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 27.449007711854513 189.0209785653345 -22.999999999999964 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 6.227439144697608e-15 + outer loop + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + vertex 177.44900771185388 -70.7866425699962 -23.000000000000053 + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 29.007853438666555 189.9209785653345 -21.199999999999957 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 169.30836891628033 -75.48664256999649 -21.200000000000035 + vertex 19.308368916281005 184.3209785653342 -21.199999999999946 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 169.30836891628033 -75.48664256999649 -21.200000000000035 + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 31.259519488506115 191.22097856533446 -18.599999999999977 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 179.49775138722254 -69.6037998575216 -18.60000000000005 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + vertex 29.007853438666555 189.9209785653345 -21.199999999999957 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 170.8672146430923 -74.58664256999637 -23.000000000000036 + vertex 20.867214643092918 185.22097856533435 -22.999999999999954 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 170.8672146430923 -74.58664256999637 -23.000000000000036 + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + endloop +endfacet +facet normal 0.8001031451912467 0.46193976625568567 -0.38268343236507846 + outer loop + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + vertex 32.702339811533555 192.05399126722685 -22.49999999999997 + endloop +endfacet +facet normal 0.8001031451912467 0.46193976625568567 -0.38268343236507846 + outer loop + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 182.78885611527073 -67.7036796568515 -22.258819045102573 + endloop +endfacet +facet normal 0.6123724356957974 0.3535533905932763 0.7071067811865439 + outer loop + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + endloop +endfacet +facet normal 0.6123724356957974 0.3535533905932763 0.7071067811865439 + outer loop + vertex 29.497751387223236 190.20382127780906 -18.599999999999962 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 179.49775138722254 -69.6037998575216 -18.60000000000005 + endloop +endfacet +facet normal -0.6123724356957947 -0.35355339059327473 -0.707106781186547 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 26.87250722291961 188.68813585285966 -16.699999999999974 + vertex 29.00785343866662 189.9209785653344 -19.165685424949217 + endloop +endfacet +facet normal -0.6123724356957947 -0.35355339059327473 -0.707106781186547 + outer loop + vertex 26.87250722291961 188.68813585285966 -16.699999999999974 + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 176.8725072229189 -71.11948528247095 -16.700000000000063 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + vertex 182.4719550538037 -67.88664256999623 -16.80000000000009 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 171.213624804606 -74.38664256999633 -22.600000000000048 + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 20.86721464309292 185.2209785653343 -22.599999999999955 + vertex 171.213624804606 -74.38664256999633 -22.600000000000048 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + endloop +endfacet +facet normal 3.2732387459073094e-14 -2.2585965780327815e-14 1.0 + outer loop + vertex 31.259519488506154 191.2209785653344 -16.39999999999998 + vertex 182.47195505380364 -67.88664256999623 -16.400000000000095 + vertex 32.471955053804315 191.92097856533445 -16.400000000000002 + endloop +endfacet +facet normal 3.2732387459073094e-14 -2.2585965780327815e-14 1.0 + outer loop + vertex 182.47195505380364 -67.88664256999623 -16.400000000000095 + vertex 31.259519488506154 191.2209785653344 -16.39999999999998 + vertex 181.25951948850548 -68.58664256999624 -16.400000000000063 + endloop +endfacet +facet normal 0.6123724356957699 0.35355339059331115 -0.7071067811865503 + outer loop + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 21.44371513202815 185.55382127780877 -16.699999999999946 + endloop +endfacet +facet normal 0.6123724356957699 0.35355339059331115 -0.7071067811865503 + outer loop + vertex 19.30836891628103 184.32097856533412 -19.165685424949185 + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + endloop +endfacet +facet normal -0.1130389983218509 -0.06526309611000974 -0.9914448613738074 + outer loop + vertex 166.36388254341324 -77.18664256999647 -23.00000000000004 + vertex 16.13973867537193 182.49156904278294 -22.965925826289016 + vertex 16.363882543413958 182.6209785653342 -22.999999999999954 + endloop +endfacet +facet normal -0.1130389983218509 -0.06526309611000974 -0.9914448613738074 + outer loop + vertex 16.13973867537193 182.49156904278294 -22.965925826289016 + vertex 166.36388254341324 -77.18664256999647 -23.00000000000004 + vertex 166.13973867537123 -77.31605209254772 -22.9659258262891 + endloop +endfacet +facet normal -0.3314135740355962 -0.1913417161825235 -0.9238795325112896 + outer loop + vertex 166.13973867537123 -77.31605209254772 -22.9659258262891 + vertex 15.930869841521712 182.37097856533418 -22.866025403784388 + vertex 16.13973867537193 182.49156904278294 -22.965925826289016 + endloop +endfacet +facet normal -0.3314135740355962 -0.1913417161825235 -0.9238795325112896 + outer loop + vertex 15.930869841521712 182.37097856533418 -22.866025403784388 + vertex 166.13973867537123 -77.31605209254772 -22.9659258262891 + vertex 165.93086984152103 -77.43664256999645 -22.866025403784477 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 2.4387889803801352e-15 + outer loop + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + vertex 32.81836521531808 192.12097856533444 -16.800000000000004 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 2.4387889803801352e-15 + outer loop + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + vertex 27.102597550340754 188.82097856533446 -22.599999999999966 + vertex 27.449007711854534 189.02097856533447 -22.599999999999966 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 27.102597550340754 188.82097856533446 -22.599999999999966 + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + endloop +endfacet +facet normal 0.8586164364012412 0.4957224306869379 -0.1305261922200573 + outer loop + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 32.81836521531802 192.1209785653346 -21.99999999999997 + endloop +endfacet +facet normal 0.8586164364012412 0.4957224306869379 -0.1305261922200573 + outer loop + vertex 32.78885611527138 192.10394147847913 -22.25881904510248 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + vertex 182.78885611527073 -67.7036796568515 -22.258819045102573 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 21.21362480460668 185.4209785653343 -22.59999999999996 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 171.213624804606 -74.38664256999633 -22.600000000000048 + endloop +endfacet +facet normal -0.5272028623656617 -0.30438071450434234 -0.7933533402912472 + outer loop + vertex 165.93086984152103 -77.43664256999645 -22.866025403784477 + vertex 15.751510107718136 182.26742517474088 -22.7071067811865 + vertex 15.930869841521712 182.37097856533418 -22.866025403784388 + endloop +endfacet +facet normal -0.5272028623656617 -0.30438071450434234 -0.7933533402912472 + outer loop + vertex 15.751510107718136 182.26742517474088 -22.7071067811865 + vertex 165.93086984152103 -77.43664256999645 -22.866025403784477 + vertex 165.75151010771745 -77.54019596058976 -22.707106781186592 + endloop +endfacet +facet normal -0.6870641468694523 -0.39667667014561686 -0.6087614290087188 + outer loop + vertex 15.751510107718136 182.26742517474088 -22.7071067811865 + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + vertex 15.613882543413906 182.18796586344192 -22.49999999999995 + endloop +endfacet +facet normal -0.6870641468694523 -0.39667667014561686 -0.6087614290087188 + outer loop + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + vertex 15.751510107718136 182.26742517474088 -22.7071067811865 + vertex 165.75151010771745 -77.54019596058976 -22.707106781186592 + endloop +endfacet +facet normal 0.6870641468694344 0.3966766701456517 -0.6087614290087163 + outer loop + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + vertex 32.56471224722934 191.9745319559279 -22.70710678118652 + vertex 32.702339811533555 192.05399126722685 -22.49999999999997 + endloop +endfacet +facet normal 0.6870641468694344 0.3966766701456517 -0.6087614290087163 + outer loop + vertex 32.56471224722934 191.9745319559279 -22.70710678118652 + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + vertex 182.5647122472287 -67.83308917940278 -22.70710678118661 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.122523745489034e-14 + outer loop + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 27.102597550340754 188.82097856533446 -22.599999999999966 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.122523745489034e-14 + outer loop + vertex 27.102597550340814 188.82097856533446 -21.199999999999967 + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -6.007129263248553e-15 + outer loop + vertex 182.47195505380364 -67.88664256999623 -16.400000000000095 + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + vertex 32.471955053804315 191.92097856533445 -16.400000000000002 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -6.007129263248553e-15 + outer loop + vertex 32.47195505380433 191.92097856533445 -16.800000000000004 + vertex 182.47195505380364 -67.88664256999623 -16.400000000000095 + vertex 182.4719550538037 -67.88664256999623 -16.80000000000009 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 19.308368916281005 184.3209785653342 -21.199999999999946 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 21.21362480460668 185.42097856533428 -21.19999999999996 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 19.308368916281005 184.3209785653342 -21.199999999999946 + vertex 169.30836891628033 -75.48664256999649 -21.200000000000035 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 170.8672146430923 -74.58664256999637 -23.000000000000036 + vertex 16.363882543413958 182.6209785653342 -22.999999999999954 + vertex 20.867214643092918 185.22097856533435 -22.999999999999954 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 16.363882543413958 182.6209785653342 -22.999999999999954 + vertex 170.8672146430923 -74.58664256999637 -23.000000000000036 + vertex 166.36388254341324 -77.18664256999647 -23.00000000000004 + endloop +endfacet +facet normal -0.11303899832180275 -0.06526309611006646 0.9914448613738092 + outer loop + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + vertex 167.76174321682174 -76.37958733391443 -22.345481322062547 + vertex 17.761743216822477 183.4280338014162 -22.345481322062458 + endloop +endfacet +facet normal -0.11303899832180275 -0.06526309611006646 0.9914448613738092 + outer loop + vertex 167.76174321682174 -76.37958733391443 -22.345481322062547 + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + endloop +endfacet +facet normal -0.858616436401242 -0.49572243068693833 -0.13052619222005132 + outer loop + vertex 176.4963797676912 -71.33664256999649 -13.000000000000046 + vertex 26.416705197566003 188.42497843082435 -12.301188578223162 + vertex 26.49637976769187 188.47097856533418 -12.99999999999996 + endloop +endfacet +facet normal -0.858616436401242 -0.49572243068693833 -0.13052619222005132 + outer loop + vertex 26.416705197566003 188.42497843082435 -12.301188578223162 + vertex 176.4963797676912 -71.33664256999649 -13.000000000000046 + vertex 176.41670519756528 -71.3826427045062 -12.30118857822325 + endloop +endfacet +facet normal -0.5272028623656281 -0.3043807145043962 0.7933533402912488 + outer loop + vertex 25.32724547258287 187.7959785653342 -15.33826859021793 + vertex 175.81151675385183 -71.73204841539457 -14.909188309203735 + vertex 25.811516753852523 188.07557271993602 -14.909188309203646 + endloop +endfacet +facet normal -0.5272028623656281 -0.3043807145043962 0.7933533402912488 + outer loop + vertex 175.81151675385183 -71.73204841539457 -14.909188309203735 + vertex 25.32724547258287 187.7959785653342 -15.33826859021793 + vertex 175.32724547258218 -72.01164256999641 -15.338268590218007 + endloop +endfacet +facet normal -0.8001031451912652 -0.46193976625565125 -0.38268343236508084 + outer loop + vertex 26.416705197566003 188.42497843082435 -12.301188578223162 + vertex 176.18311117747325 -71.51750827488755 -11.650000000000038 + vertex 26.183111177473915 188.2901128604431 -11.649999999999949 + endloop +endfacet +facet normal -0.8001031451912652 -0.46193976625565125 -0.38268343236508084 + outer loop + vertex 176.18311117747325 -71.51750827488755 -11.650000000000038 + vertex 26.416705197566003 188.42497843082435 -12.301188578223162 + vertex 176.41670519756528 -71.3826427045062 -12.30118857822325 + endloop +endfacet +facet normal -0.8001031451912611 -0.46193976625566013 -0.38268343236507896 + outer loop + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 15.613882543413906 182.18796586344192 -22.49999999999995 + endloop +endfacet +facet normal -0.8001031451912611 -0.46193976625566013 -0.38268343236507896 + outer loop + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + vertex 165.52736623967544 -77.66960548314107 -22.25881904510254 + endloop +endfacet +facet normal -0.11303899832182693 -0.06526309610999309 -0.9914448613738114 + outer loop + vertex 174.76329962118677 -72.33723685910824 -10.392000269019562 + vertex 24.15811117747398 187.120978565334 -10.299999999999962 + vertex 24.763299621187397 187.47038427622243 -10.392000269019473 + endloop +endfacet +facet normal -0.11303899832182693 -0.06526309610999309 -0.9914448613738114 + outer loop + vertex 24.15811117747398 187.120978565334 -10.299999999999962 + vertex 174.76329962118677 -72.33723685910824 -10.392000269019562 + vertex 174.15811117747327 -72.68664256999666 -10.30000000000005 + endloop +endfacet +facet normal 0.5272028623656281 0.3043807145043962 -0.7933533402912488 + outer loop + vertex 172.98897688236434 -73.3616425699967 -10.661731409782044 + vertex 22.50470560109535 186.16638441073218 -11.090811690796267 + vertex 22.988976882365 186.445978565334 -10.661731409781979 + endloop +endfacet +facet normal 0.5272028623656281 0.3043807145043962 -0.7933533402912488 + outer loop + vertex 22.50470560109535 186.16638441073218 -11.090811690796267 + vertex 172.98897688236434 -73.3616425699967 -10.661731409782044 + vertex 172.5047056010947 -73.64123672459854 -11.090811690796333 + endloop +endfacet +facet normal -0.8001031451912407 -0.4619397662556935 0.3826834323650809 + outer loop + vertex 176.18311117747322 -71.51750827488746 -14.350000000000055 + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 26.183111177473876 188.2901128604432 -14.349999999999968 + endloop +endfacet +facet normal -0.8001031451912407 -0.4619397662556935 0.3826834323650809 + outer loop + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 176.18311117747322 -71.51750827488746 -14.350000000000055 + vertex 176.41670519756528 -71.3826427045062 -13.698811421776844 + endloop +endfacet +facet normal -0.3314135740356128 -0.19134171618253307 -0.9238795325112817 + outer loop + vertex 175.3272454725822 -72.01164256999655 -10.661731409782071 + vertex 24.763299621187397 187.47038427622243 -10.392000269019473 + vertex 25.32724547258295 187.79597856533405 -10.661731409781982 + endloop +endfacet +facet normal -0.3314135740356128 -0.19134171618253307 -0.9238795325112817 + outer loop + vertex 24.763299621187397 187.47038427622243 -10.392000269019473 + vertex 175.3272454725822 -72.01164256999655 -10.661731409782071 + vertex 174.76329962118677 -72.33723685910824 -10.392000269019562 + endloop +endfacet +facet normal 0.11303899832182654 0.06526309610999427 0.9914448613738113 + outer loop + vertex 23.552922733760443 186.77157285444576 -15.607999730980426 + vertex 174.1581111774732 -72.68664256999645 -15.700000000000038 + vertex 24.15811117747387 187.12097856533418 -15.699999999999937 + endloop +endfacet +facet normal 0.11303899832182654 0.06526309610999427 0.9914448613738113 + outer loop + vertex 174.1581111774732 -72.68664256999645 -15.700000000000038 + vertex 23.552922733760443 186.77157285444576 -15.607999730980426 + vertex 173.55292273375974 -73.03604828088491 -15.607999730980529 + endloop +endfacet +facet normal 0.8001031451912652 0.46193976625565125 0.38268343236508084 + outer loop + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + vertex 172.13311117747327 -73.85577686510557 -14.350000000000053 + vertex 22.13311117747392 185.9518442702251 -14.349999999999962 + endloop +endfacet +facet normal 0.8001031451912652 0.46193976625565125 0.38268343236508084 + outer loop + vertex 172.13311117747327 -73.85577686510557 -14.350000000000053 + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + vertex 171.89951715738118 -73.99064243548682 -13.698811421776819 + endloop +endfacet +facet normal 0.33141357403557603 0.19134171618259352 -0.9238795325112824 + outer loop + vertex 173.5529227337599 -73.0360482808851 -10.39200026901956 + vertex 22.988976882365 186.445978565334 -10.661731409781979 + vertex 23.552922733760536 186.7715728544456 -10.392000269019471 + endloop +endfacet +facet normal 0.33141357403557603 0.19134171618259352 -0.9238795325112824 + outer loop + vertex 22.988976882365 186.445978565334 -10.661731409781979 + vertex 173.5529227337599 -73.0360482808851 -10.39200026901956 + vertex 172.98897688236434 -73.3616425699967 -10.661731409782044 + endloop +endfacet +facet normal -0.6870641468694503 -0.3966766701456213 -0.6087614290087181 + outer loop + vertex 176.18311117747325 -71.51750827488755 -11.650000000000038 + vertex 25.81151675385259 188.07557271993593 -11.09081169079627 + vertex 26.183111177473915 188.2901128604431 -11.649999999999949 + endloop +endfacet +facet normal -0.6870641468694503 -0.3966766701456213 -0.6087614290087181 + outer loop + vertex 25.81151675385259 188.07557271993593 -11.09081169079627 + vertex 176.18311117747325 -71.51750827488755 -11.650000000000038 + vertex 175.81151675385195 -71.73204841539476 -11.09081169079636 + endloop +endfacet +facet normal -0.8586164364012464 -0.4957224306869296 0.1305261922200552 + outer loop + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 176.4963797676912 -71.33664256999649 -13.000000000000046 + vertex 26.49637976769187 188.47097856533418 -12.99999999999996 + endloop +endfacet +facet normal -0.8586164364012464 -0.4957224306869296 0.1305261922200552 + outer loop + vertex 176.4963797676912 -71.33664256999649 -13.000000000000046 + vertex 26.41670519756597 188.4249784308244 -13.698811421776757 + vertex 176.41670519756528 -71.3826427045062 -13.698811421776844 + endloop +endfacet +facet normal 0.8001031451912417 0.4619397662556828 -0.3826834323650923 + outer loop + vertex 172.1331111774733 -73.85577686510561 -11.650000000000011 + vertex 21.899517157381904 185.81697869984376 -12.301188578223135 + vertex 22.133111177474007 185.95184427022502 -11.649999999999945 + endloop +endfacet +facet normal 0.8001031451912417 0.4619397662556828 -0.3826834323650923 + outer loop + vertex 21.899517157381904 185.81697869984376 -12.301188578223135 + vertex 172.1331111774733 -73.85577686510561 -11.650000000000011 + vertex 171.89951715738127 -73.99064243548692 -12.3011885782232 + endloop +endfacet +facet normal 0.11303899832179497 0.06526309610997745 0.9914448613738159 + outer loop + vertex 17.04448283908803 183.01392332925215 -22.34548132206248 + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + vertex 17.403113027955243 183.22097856533418 -22.399999999999952 + endloop +endfacet +facet normal 0.11303899832179497 0.06526309610997745 0.9914448613738159 + outer loop + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + vertex 17.04448283908803 183.01392332925215 -22.34548132206248 + vertex 167.04448283908738 -76.79369780607844 -22.34548132206257 + endloop +endfacet +facet normal 0.6870641468694518 0.3966766701456166 0.6087614290087193 + outer loop + vertex 172.13311117747327 -73.85577686510557 -14.350000000000053 + vertex 22.504705601095278 186.16638441073223 -14.90918830920364 + vertex 22.13311117747392 185.9518442702251 -14.349999999999962 + endloop +endfacet +facet normal 0.6870641468694518 0.3966766701456166 0.6087614290087193 + outer loop + vertex 22.504705601095278 186.16638441073223 -14.90918830920364 + vertex 172.13311117747327 -73.85577686510557 -14.350000000000053 + vertex 172.50470560109457 -73.64123672459836 -14.909188309203731 + endloop +endfacet +facet normal -0.5272028623656586 -0.3043807145043462 -0.7933533402912477 + outer loop + vertex 175.81151675385195 -71.73204841539476 -11.09081169079636 + vertex 25.32724547258295 187.79597856533405 -10.661731409781982 + vertex 25.81151675385259 188.07557271993593 -11.09081169079627 + endloop +endfacet +facet normal -0.5272028623656586 -0.3043807145043462 -0.7933533402912477 + outer loop + vertex 25.32724547258295 187.79597856533405 -10.661731409781982 + vertex 175.81151675385195 -71.73204841539476 -11.09081169079636 + vertex 175.3272454725822 -72.01164256999655 -10.661731409782071 + endloop +endfacet +facet normal -0.11303899832178858 -0.06526309611005687 0.9914448613738115 + outer loop + vertex 24.15811117747387 187.12097856533418 -15.699999999999937 + vertex 174.76329962118663 -72.33723685910802 -15.607999730980517 + vertex 24.76329962118729 187.4703842762226 -15.60799973098044 + endloop +endfacet +facet normal -0.11303899832178858 -0.06526309611005687 0.9914448613738115 + outer loop + vertex 174.76329962118663 -72.33723685910802 -15.607999730980517 + vertex 24.15811117747387 187.12097856533418 -15.699999999999937 + vertex 174.1581111774732 -72.68664256999645 -15.700000000000038 + endloop +endfacet +facet normal 0.6870641468694304 0.3966766701456494 -0.6087614290087222 + outer loop + vertex 172.5047056010947 -73.64123672459854 -11.090811690796333 + vertex 22.133111177474007 185.95184427022502 -11.649999999999945 + vertex 22.50470560109535 186.16638441073218 -11.090811690796267 + endloop +endfacet +facet normal 0.6870641468694304 0.3966766701456494 -0.6087614290087222 + outer loop + vertex 22.133111177474007 185.95184427022502 -11.649999999999945 + vertex 172.5047056010947 -73.64123672459854 -11.090811690796333 + vertex 172.1331111774733 -73.85577686510561 -11.650000000000011 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 -0.13052619222005105 + outer loop + vertex 21.899517157381904 185.81697869984376 -12.301188578223135 + vertex 171.8198425872553 -74.03664256999663 -13.000000000000021 + vertex 21.819842587255987 185.77097856533405 -12.999999999999954 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 -0.13052619222005105 + outer loop + vertex 171.8198425872553 -74.03664256999663 -13.000000000000021 + vertex 21.899517157381904 185.81697869984376 -12.301188578223135 + vertex 171.89951715738127 -73.99064243548692 -12.3011885782232 + endloop +endfacet +facet normal 0.11303899832178858 0.06526309611005687 -0.9914448613738115 + outer loop + vertex 174.15811117747327 -72.68664256999666 -10.30000000000005 + vertex 23.552922733760536 186.7715728544456 -10.392000269019471 + vertex 24.15811117747398 187.120978565334 -10.299999999999962 + endloop +endfacet +facet normal 0.11303899832178858 0.06526309611005687 -0.9914448613738115 + outer loop + vertex 23.552922733760536 186.7715728544456 -10.392000269019471 + vertex 174.15811117747327 -72.68664256999666 -10.30000000000005 + vertex 173.5529227337599 -73.0360482808851 -10.39200026901956 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 16.710292704927685 182.82097856533417 -22.185640646055063 + vertex 167.04448283908738 -76.79369780607844 -22.34548132206257 + vertex 17.04448283908803 183.01392332925215 -22.34548132206248 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 167.04448283908738 -76.79369780607844 -22.34548132206257 + vertex 16.710292704927685 182.82097856533417 -22.185640646055063 + vertex 166.71029270492699 -76.98664256999646 -22.185640646055152 + endloop +endfacet +facet normal -0.6870641468694288 -0.3966766701456541 0.6087614290087209 + outer loop + vertex 25.811516753852523 188.07557271993602 -14.909188309203646 + vertex 176.18311117747322 -71.51750827488746 -14.350000000000055 + vertex 26.183111177473876 188.2901128604432 -14.349999999999968 + endloop +endfacet +facet normal -0.6870641468694288 -0.3966766701456541 0.6087614290087209 + outer loop + vertex 176.18311117747322 -71.51750827488746 -14.350000000000055 + vertex 25.811516753852523 188.07557271993602 -14.909188309203646 + vertex 175.81151675385183 -71.73204841539457 -14.909188309203735 + endloop +endfacet +facet normal 0.52720286236566 0.3043807145043358 0.7933533402912507 + outer loop + vertex 16.423317130842 182.65529314038488 -21.93137084989845 + vertex 166.71029270492699 -76.98664256999646 -22.185640646055152 + vertex 16.710292704927685 182.82097856533417 -22.185640646055063 + endloop +endfacet +facet normal 0.52720286236566 0.3043807145043358 0.7933533402912507 + outer loop + vertex 166.71029270492699 -76.98664256999646 -22.185640646055152 + vertex 16.423317130842 182.65529314038488 -21.93137084989845 + vertex 166.4233171308413 -77.15232799494568 -21.931370849898535 + endloop +endfacet +facet normal -0.3314135740355447 -0.19134171618257262 0.923879532511298 + outer loop + vertex 17.761743216822477 183.4280338014162 -22.345481322062458 + vertex 168.0959333509821 -76.18664256999647 -22.185640646055155 + vertex 18.09593335098276 183.62097856533424 -22.185640646055052 + endloop +endfacet +facet normal -0.3314135740355447 -0.19134171618257262 0.923879532511298 + outer loop + vertex 168.0959333509821 -76.18664256999647 -22.185640646055155 + vertex 17.761743216822477 183.4280338014162 -22.345481322062458 + vertex 167.76174321682174 -76.37958733391443 -22.345481322062547 + endloop +endfacet +facet normal 0.5272028623656586 0.3043807145043462 0.7933533402912477 + outer loop + vertex 22.504705601095278 186.16638441073223 -14.90918830920364 + vertex 172.98897688236423 -73.36164256999652 -15.33826859021802 + vertex 22.98897688236493 186.44597856533412 -15.338268590217929 + endloop +endfacet +facet normal 0.5272028623656586 0.3043807145043462 0.7933533402912477 + outer loop + vertex 172.98897688236423 -73.36164256999652 -15.33826859021802 + vertex 22.504705601095278 186.16638441073223 -14.90918830920364 + vertex 172.50470560109457 -73.64123672459836 -14.909188309203731 + endloop +endfacet +facet normal 0.3314135740356128 0.19134171618253307 0.9238795325112817 + outer loop + vertex 22.98897688236493 186.44597856533412 -15.338268590217929 + vertex 173.55292273375974 -73.03604828088491 -15.607999730980529 + vertex 23.552922733760443 186.77157285444576 -15.607999730980426 + endloop +endfacet +facet normal 0.3314135740356128 0.19134171618253307 0.9238795325112817 + outer loop + vertex 173.55292273375974 -73.03604828088491 -15.607999730980529 + vertex 22.98897688236493 186.44597856533412 -15.338268590217929 + vertex 172.98897688236423 -73.36164256999652 -15.33826859021802 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 0.13052619222005132 + outer loop + vertex 171.8198425872553 -74.03664256999663 -13.000000000000021 + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + vertex 21.819842587255987 185.77097856533405 -12.999999999999954 + endloop +endfacet +facet normal 0.858616436401242 0.49572243068693833 0.13052619222005132 + outer loop + vertex 21.8995171573819 185.8169786998438 -13.69881142177675 + vertex 171.8198425872553 -74.03664256999663 -13.000000000000021 + vertex 171.89951715738118 -73.99064243548682 -13.698811421776819 + endloop +endfacet +facet normal -0.8586164364012415 -0.49572243068693805 -0.1305261922200554 + outer loop + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + endloop +endfacet +facet normal -0.8586164364012415 -0.49572243068693805 -0.1305261922200554 + outer loop + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 15.527366239676123 182.13801565218958 -22.258819045102463 + vertex 165.52736623967544 -77.66960548314107 -22.25881904510254 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 166.20311302795457 -77.27946289302407 -21.600000000000065 + vertex 16.423317130842 182.65529314038488 -21.93137084989845 + vertex 16.203113027955265 182.52815824230657 -21.599999999999977 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 16.423317130842 182.65529314038488 -21.93137084989845 + vertex 166.20311302795457 -77.27946289302407 -21.600000000000065 + vertex 166.4233171308413 -77.15232799494568 -21.931370849898535 + endloop +endfacet +facet normal -0.33141357403557914 -0.19134171618258686 0.9238795325112827 + outer loop + vertex 24.76329962118729 187.4703842762226 -15.60799973098044 + vertex 175.32724547258218 -72.01164256999641 -15.338268590218007 + vertex 25.32724547258287 187.7959785653342 -15.33826859021793 + endloop +endfacet +facet normal -0.33141357403557914 -0.19134171618258686 0.9238795325112827 + outer loop + vertex 175.32724547258218 -72.01164256999641 -15.338268590218007 + vertex 24.76329962118729 187.4703842762226 -15.60799973098044 + vertex 174.76329962118663 -72.33723685910802 -15.607999730980517 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 168.09593335098214 -76.18664256999655 -19.41435935394494 + vertex 17.76174321682251 183.42803380141612 -19.254518677937433 + vertex 18.09593335098283 183.62097856533413 -19.41435935394484 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 17.76174321682251 183.42803380141612 -19.254518677937433 + vertex 168.09593335098214 -76.18664256999655 -19.41435935394494 + vertex 167.7617432168218 -76.37958733391447 -19.254518677937522 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + vertex 17.04448283908808 183.01392332925207 -19.254518677937455 + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 17.04448283908808 183.01392332925207 -19.254518677937455 + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + vertex 167.04448283908738 -76.79369780607858 -19.254518677937543 + endloop +endfacet +facet normal 0.8586164364012477 0.4957224306869304 -0.13052619222004383 + outer loop + vertex 166.06468694197414 -77.35938323102783 -20.385889527836035 + vertex 16.01747238190017 182.42097856533408 -20.79999999999998 + vertex 16.064686941974774 182.44823790430286 -20.385889527835946 + endloop +endfacet +facet normal 0.8586164364012477 0.4957224306869304 -0.13052619222004383 + outer loop + vertex 16.01747238190017 182.42097856533408 -20.79999999999998 + vertex 166.06468694197414 -77.35938323102783 -20.385889527836035 + vertex 166.01747238189955 -77.3866425699966 -20.800000000000065 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + vertex 18.74153911393574 183.9937192263654 -20.385889527835893 + vertex 18.788753674010355 184.02097856533422 -20.799999999999926 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 18.74153911393574 183.9937192263654 -20.385889527835893 + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + vertex 168.7415391139351 -75.81390190896526 -20.385889527835992 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 168.3829089250678 -76.0209571450472 -21.931370849898517 + vertex 18.603113027955242 183.91379888836175 -21.599999999999945 + vertex 18.382908925068513 183.78666399028344 -21.931370849898414 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 18.603113027955242 183.91379888836175 -21.599999999999945 + vertex 168.3829089250678 -76.0209571450472 -21.931370849898517 + vertex 168.60311302795452 -75.89382224696885 -21.600000000000044 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 166.06468694197437 -77.35938323102829 -4.78588952783602 + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 166.06468694197437 -77.35938323102829 -4.78588952783602 + vertex 166.01747238189978 -77.38664256999695 -5.200000000000053 + endloop +endfacet +facet normal 0.5272028623656548 0.30438071450442294 -0.7933533402912207 + outer loop + vertex 166.71029270492707 -76.98664256999655 -19.414359353944935 + vertex 16.423317130842044 182.65529314038483 -19.668629150101488 + vertex 16.710292704927753 182.8209785653341 -19.41435935394485 + endloop +endfacet +facet normal 0.5272028623656548 0.30438071450442294 -0.7933533402912207 + outer loop + vertex 16.423317130842044 182.65529314038483 -19.668629150101488 + vertex 166.71029270492707 -76.98664256999655 -19.414359353944935 + vertex 166.42331713084138 -77.15232799494585 -19.668629150101573 + endloop +endfacet +facet normal -0.11303899832179483 -0.06526309610997597 -0.991444861373816 + outer loop + vertex 167.7617432168218 -76.37958733391447 -19.254518677937522 + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + vertex 17.76174321682251 183.42803380141612 -19.254518677937433 + endloop +endfacet +facet normal -0.11303899832179483 -0.06526309610997597 -0.991444861373816 + outer loop + vertex 17.403113027955293 183.22097856533406 -19.19999999999996 + vertex 167.7617432168218 -76.37958733391447 -19.254518677937522 + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 16.01747238190017 182.42097856533408 -20.79999999999998 + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + vertex 16.064686941974777 182.44823790430289 -21.21411047216401 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + vertex 16.01747238190017 182.42097856533408 -20.79999999999998 + vertex 166.01747238189955 -77.3866425699966 -20.800000000000065 + endloop +endfacet +facet normal -0.3314135740355637 -0.1913417161825047 -0.9238795325113052 + outer loop + vertex 168.09593335098245 -76.186642569997 -3.8143593539449228 + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + endloop +endfacet +facet normal -0.3314135740355637 -0.1913417161825047 -0.9238795325113052 + outer loop + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + vertex 168.09593335098245 -76.186642569997 -3.8143593539449228 + vertex 167.76174321682208 -76.37958733391503 -3.6545186779375283 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 16.423317130842044 182.65529314038483 -19.668629150101488 + vertex 166.2031130279546 -77.27946289302412 -20.000000000000046 + vertex 16.20311302795529 182.52815824230652 -19.999999999999957 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 166.2031130279546 -77.27946289302412 -20.000000000000046 + vertex 16.423317130842044 182.65529314038483 -19.668629150101488 + vertex 166.42331713084138 -77.15232799494585 -19.668629150101573 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 166.20311302795488 -77.27946289302452 -4.400000000000054 + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 166.20311302795488 -77.27946289302452 -4.400000000000054 + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 166.4233171308416 -77.1523279949463 -4.068629150101582 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 168.78875367400994 -75.78664256999687 -5.200000000000033 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 168.78875367400994 -75.78664256999687 -5.200000000000033 + vertex 168.74153911393532 -75.81390190896572 -4.785889527836001 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 167.04448283908772 -76.79369780607912 -3.6545186779375283 + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + vertex 167.04448283908772 -76.79369780607912 -3.6545186779375283 + vertex 166.71029270492735 -76.98664256999704 -3.8143593539449454 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + vertex 166.06468694197437 -77.35938323102829 -4.78588952783602 + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 166.06468694197437 -77.35938323102829 -4.78588952783602 + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + vertex 166.20311302795488 -77.27946289302452 -4.400000000000054 + endloop +endfacet +facet normal 0.3314135740355426 0.1913417161825714 -0.923879532511299 + outer loop + vertex 167.04448283908738 -76.79369780607858 -19.254518677937543 + vertex 16.710292704927753 182.8209785653341 -19.41435935394485 + vertex 17.04448283908808 183.01392332925207 -19.254518677937455 + endloop +endfacet +facet normal 0.3314135740355426 0.1913417161825714 -0.923879532511299 + outer loop + vertex 16.710292704927753 182.8209785653341 -19.41435935394485 + vertex 167.04448283908738 -76.79369780607858 -19.254518677937543 + vertex 166.71029270492707 -76.98664256999655 -19.414359353944935 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 168.38290892506788 -76.02095714504725 -19.668629150101555 + vertex 18.09593335098283 183.62097856533413 -19.41435935394484 + vertex 18.382908925068534 183.78666399028336 -19.668629150101452 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 18.09593335098283 183.62097856533413 -19.41435935394484 + vertex 168.38290892506788 -76.02095714504725 -19.668629150101555 + vertex 168.09593335098214 -76.18664256999655 -19.41435935394494 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 166.01747238189978 -77.38664256999695 -5.200000000000053 + endloop +endfacet +facet normal -0.5272028623656636 -0.3043807145043491 -0.7933533402912432 + outer loop + vertex 168.3829089250682 -76.02095714504779 -4.068629150101538 + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + endloop +endfacet +facet normal -0.5272028623656636 -0.3043807145043491 -0.7933533402912432 + outer loop + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + vertex 168.3829089250682 -76.02095714504779 -4.068629150101538 + vertex 168.09593335098245 -76.186642569997 -3.8143593539449228 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 168.74153911393532 -75.81390190896572 -4.785889527836001 + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + vertex 168.74153911393532 -75.81390190896572 -4.785889527836001 + vertex 168.60311302795486 -75.89382224696935 -4.400000000000034 + endloop +endfacet +facet normal -0.8586164364012476 -0.49572243068693034 0.13052619222004344 + outer loop + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + vertex 18.788753674010355 184.02097856533422 -20.799999999999926 + endloop +endfacet +facet normal -0.8586164364012476 -0.49572243068693034 0.13052619222004344 + outer loop + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + vertex 168.74153911393512 -75.81390190896522 -21.21411047216408 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 168.7415391139351 -75.81390190896526 -20.385889527835992 + vertex 18.60311302795526 183.9137988883617 -19.999999999999925 + vertex 18.74153911393574 183.9937192263654 -20.385889527835893 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 18.60311302795526 183.9137988883617 -19.999999999999925 + vertex 168.7415391139351 -75.81390190896526 -20.385889527835992 + vertex 168.60311302795463 -75.89382224696898 -20.000000000000025 + endloop +endfacet +facet normal 0.8001031451912451 0.4619397662556961 -0.3826834323650685 + outer loop + vertex 16.20311302795529 182.52815824230652 -19.999999999999957 + vertex 166.06468694197414 -77.35938323102783 -20.385889527836035 + vertex 16.064686941974774 182.44823790430286 -20.385889527835946 + endloop +endfacet +facet normal 0.8001031451912451 0.4619397662556961 -0.3826834323650685 + outer loop + vertex 166.06468694197414 -77.35938323102783 -20.385889527836035 + vertex 16.20311302795529 182.52815824230652 -19.999999999999957 + vertex 166.2031130279546 -77.27946289302412 -20.000000000000046 + endloop +endfacet +facet normal -0.11303899832184175 -0.06526309611000446 -0.9914448613738089 + outer loop + vertex 167.76174321682208 -76.37958733391503 -3.6545186779375283 + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + endloop +endfacet +facet normal -0.11303899832184175 -0.06526309611000446 -0.9914448613738089 + outer loop + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + vertex 167.76174321682208 -76.37958733391503 -3.6545186779375283 + vertex 167.40311302795487 -76.58664256999705 -3.600000000000033 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 167.40311302795487 -76.58664256999705 -3.600000000000033 + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + vertex 167.40311302795487 -76.58664256999705 -3.600000000000033 + vertex 167.04448283908772 -76.79369780607912 -3.6545186779375283 + endloop +endfacet +facet normal -0.8001031451912454 -0.4619397662556849 0.3826834323650818 + outer loop + vertex 168.60311302795452 -75.89382224696885 -21.600000000000044 + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + vertex 18.603113027955242 183.91379888836175 -21.599999999999945 + endloop +endfacet +facet normal -0.8001031451912454 -0.4619397662556849 0.3826834323650818 + outer loop + vertex 18.74153911393574 183.99371922636544 -21.21411047216398 + vertex 168.60311302795452 -75.89382224696885 -21.600000000000044 + vertex 168.74153911393512 -75.81390190896522 -21.21411047216408 + endloop +endfacet +facet normal -0.5272028623656569 -0.3043807145044129 0.7933533402912233 + outer loop + vertex 18.09593335098276 183.62097856533424 -22.185640646055052 + vertex 168.3829089250678 -76.0209571450472 -21.931370849898517 + vertex 18.382908925068513 183.78666399028344 -21.931370849898414 + endloop +endfacet +facet normal -0.5272028623656569 -0.3043807145044129 0.7933533402912233 + outer loop + vertex 168.3829089250678 -76.0209571450472 -21.931370849898517 + vertex 18.09593335098276 183.62097856533424 -22.185640646055052 + vertex 168.0959333509821 -76.18664256999647 -22.185640646055155 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 166.71029270492735 -76.98664256999704 -3.8143593539449454 + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 166.71029270492735 -76.98664256999704 -3.8143593539449454 + vertex 166.4233171308416 -77.1523279949463 -4.068629150101582 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + vertex 16.203113027955265 182.52815824230657 -21.599999999999977 + vertex 16.064686941974777 182.44823790430289 -21.21411047216401 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 16.203113027955265 182.52815824230657 -21.599999999999977 + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + vertex 166.20311302795457 -77.27946289302407 -21.600000000000065 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + vertex 166.20311302795486 -77.27946289302447 -6.000000000000051 + endloop +endfacet +facet normal -0.6870641468694512 -0.39667667014562186 -0.6087614290087167 + outer loop + vertex 168.60311302795486 -75.89382224696935 -4.400000000000034 + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + endloop +endfacet +facet normal -0.6870641468694512 -0.39667667014562186 -0.6087614290087167 + outer loop + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + vertex 168.60311302795486 -75.89382224696935 -4.400000000000034 + vertex 168.3829089250682 -76.02095714504779 -4.068629150101538 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 168.60311302795463 -75.89382224696898 -20.000000000000025 + vertex 18.382908925068534 183.78666399028336 -19.668629150101452 + vertex 18.60311302795526 183.9137988883617 -19.999999999999925 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 18.382908925068534 183.78666399028336 -19.668629150101452 + vertex 168.60311302795463 -75.89382224696898 -20.000000000000025 + vertex 168.38290892506788 -76.02095714504725 -19.668629150101555 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 32.29874997304768 191.82097856533412 -5.199999999999923 + vertex 182.2515354129724 -68.01390190896532 -4.785889527835981 + vertex 32.25153541297306 191.79371922636534 -4.785889527835891 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006184 + outer loop + vertex 182.2515354129724 -68.01390190896532 -4.785889527835981 + vertex 32.29874997304768 191.82097856533412 -5.199999999999923 + vertex 182.29874997304697 -67.98664256999652 -5.200000000000013 + endloop +endfacet +facet normal 0.5272028623656569 0.3043807145044129 -0.7933533402912233 + outer loop + vertex 180.22028900396435 -69.18664256999665 -3.814359353944937 + vertex 29.93331342987934 190.45529314038473 -4.068629150101484 + vertex 30.220289003965053 190.62097856533396 -3.814359353944847 + endloop +endfacet +facet normal 0.5272028623656569 0.3043807145044129 -0.7933533402912233 + outer loop + vertex 29.93331342987934 190.45529314038473 -4.068629150101484 + vertex 180.22028900396435 -69.18664256999665 -3.814359353944937 + vertex 179.93331342987867 -69.35232799494591 -4.068629150101574 + endloop +endfacet +facet normal -0.3314135740355858 -0.19134171618259352 0.9238795325112789 + outer loop + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + vertex 168.09593335098245 -76.18664256999696 -6.585640646055137 + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + endloop +endfacet +facet normal -0.3314135740355858 -0.19134171618259352 0.9238795325112789 + outer loop + vertex 168.09593335098245 -76.18664256999696 -6.585640646055137 + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + vertex 167.76174321682203 -76.37958733391484 -6.745481322062554 + endloop +endfacet +facet normal 0.5272028623656525 0.3043807145043483 0.793353340291251 + outer loop + vertex 29.933313429879313 190.4552931403848 -6.3313708498984465 + vertex 180.22028900396433 -69.18664256999656 -6.585640646055151 + vertex 30.220289003965032 190.6209785653341 -6.585640646055061 + endloop +endfacet +facet normal 0.5272028623656525 0.3043807145043483 0.793353340291251 + outer loop + vertex 180.22028900396433 -69.18664256999656 -6.585640646055151 + vertex 29.933313429879313 190.4552931403848 -6.3313708498984465 + vertex 179.93331342987864 -69.35232799494582 -6.331370849898536 + endloop +endfacet +facet normal 0.527202862365693 0.3043807145043661 0.7933533402912171 + outer loop + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 166.7102927049273 -76.98664256999696 -6.585640646055159 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + endloop +endfacet +facet normal 0.527202862365693 0.3043807145043661 0.7933533402912171 + outer loop + vertex 166.7102927049273 -76.98664256999696 -6.585640646055159 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 166.42331713084158 -77.15232799494622 -6.331370849898522 + endloop +endfacet +facet normal -0.6870641468694383 -0.39667667014565394 0.6087614290087103 + outer loop + vertex 168.3829089250681 -76.0209571450476 -6.3313708498985 + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + endloop +endfacet +facet normal -0.6870641468694383 -0.39667667014565394 0.6087614290087103 + outer loop + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 168.3829089250681 -76.0209571450476 -6.3313708498985 + vertex 168.60311302795486 -75.89382224696935 -6.000000000000031 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 181.60592965001945 -68.38664256999657 -3.8143593539449396 + vertex 31.27173951585983 191.22803380141602 -3.654518677937407 + vertex 31.60592965002015 191.42097856533402 -3.8143593539448384 + endloop +endfacet +facet normal -0.33141357403561683 -0.19134171618253823 -0.9238795325112792 + outer loop + vertex 31.27173951585983 191.22803380141602 -3.654518677937407 + vertex 181.60592965001945 -68.38664256999657 -3.8143593539449396 + vertex 181.27173951585914 -68.57958733391463 -3.65451867793752 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 182.11310932699186 -68.093822246969 -4.400000000000015 + vertex 31.892905224105863 191.58666399028328 -4.068629150101453 + vertex 32.11310932699258 191.71379888836162 -4.399999999999924 + endloop +endfacet +facet normal -0.6870641468694395 -0.3966766701456151 -0.6087614290087343 + outer loop + vertex 31.892905224105863 191.58666399028328 -4.068629150101453 + vertex 182.11310932699186 -68.093822246969 -4.400000000000015 + vertex 181.8929052241052 -68.2209571450474 -4.068629150101555 + endloop +endfacet +facet normal 0.3314135740355447 0.19134171618257262 -0.923879532511298 + outer loop + vertex 180.5544791381247 -68.99369780607864 -3.6545186779375425 + vertex 30.220289003965053 190.62097856533396 -3.814359353944847 + vertex 30.554479138125394 190.81392332925194 -3.654518677937452 + endloop +endfacet +facet normal 0.3314135740355447 0.19134171618257262 -0.923879532511298 + outer loop + vertex 30.220289003965053 190.62097856533396 -3.814359353944847 + vertex 180.5544791381247 -68.99369780607864 -3.6545186779375425 + vertex 180.22028900396435 -69.18664256999665 -3.814359353944937 + endloop +endfacet +facet normal 0.11303899832183627 0.06526309610999989 0.9914448613738097 + outer loop + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + vertex 167.40311302795493 -76.58664256999695 -6.80000000000005 + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + endloop +endfacet +facet normal 0.11303899832183627 0.06526309610999989 0.9914448613738097 + outer loop + vertex 167.40311302795493 -76.58664256999695 -6.80000000000005 + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + vertex 167.0444828390876 -76.79369780607898 -6.745481322062554 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 29.93331342987934 190.45529314038473 -4.068629150101484 + vertex 179.7131093269919 -69.47946289302413 -4.400000000000046 + vertex 29.713109326992594 190.32815824230642 -4.399999999999955 + endloop +endfacet +facet normal 0.6870641468694274 0.3966766701456533 -0.6087614290087231 + outer loop + vertex 179.7131093269919 -69.47946289302413 -4.400000000000046 + vertex 29.93331342987934 190.45529314038473 -4.068629150101484 + vertex 179.93331342987867 -69.35232799494591 -4.068629150101574 + endloop +endfacet +facet normal 0.8001031451912454 0.4619397662556849 -0.3826834323650818 + outer loop + vertex 29.713109326992594 190.32815824230642 -4.399999999999955 + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 29.57468324101212 190.24823790430275 -4.785889527835922 + endloop +endfacet +facet normal 0.8001031451912454 0.4619397662556849 -0.3826834323650818 + outer loop + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 29.713109326992594 190.32815824230642 -4.399999999999955 + vertex 179.7131093269919 -69.47946289302413 -4.400000000000046 + endloop +endfacet +facet normal 0.8586164364012476 0.49572243068693034 -0.13052619222004344 + outer loop + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 29.527468680937478 190.220978565334 -5.199999999999976 + vertex 29.57468324101212 190.24823790430275 -4.785889527835922 + endloop +endfacet +facet normal 0.8586164364012476 0.49572243068693034 -0.13052619222004344 + outer loop + vertex 29.527468680937478 190.220978565334 -5.199999999999976 + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 179.52746868093678 -69.58664256999661 -5.200000000000067 + endloop +endfacet +facet normal 0.6870641468694338 0.39667667014561186 0.6087614290087427 + outer loop + vertex 166.20311302795486 -77.27946289302447 -6.000000000000051 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + endloop +endfacet +facet normal 0.6870641468694338 0.39667667014561186 0.6087614290087427 + outer loop + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 166.20311302795486 -77.27946289302447 -6.000000000000051 + vertex 166.42331713084158 -77.15232799494622 -6.331370849898522 + endloop +endfacet +facet normal -0.8586164364012514 -0.4957224306869325 0.13052619222001063 + outer loop + vertex 168.7415391139354 -75.81390190896572 -5.6141104721640644 + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + endloop +endfacet +facet normal -0.8586164364012514 -0.4957224306869325 0.13052619222001063 + outer loop + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + vertex 168.7415391139354 -75.81390190896572 -5.6141104721640644 + vertex 168.78875367400994 -75.78664256999687 -5.200000000000033 + endloop +endfacet +facet normal -0.3314135740355426 -0.1913417161825714 0.923879532511299 + outer loop + vertex 31.27173951585978 191.22803380141616 -6.7454813220624334 + vertex 181.60592965001945 -68.38664256999652 -6.585640646055154 + vertex 31.605929650020105 191.42097856533414 -6.585640646055053 + endloop +endfacet +facet normal -0.3314135740355426 -0.1913417161825714 0.923879532511299 + outer loop + vertex 181.60592965001945 -68.38664256999652 -6.585640646055154 + vertex 31.27173951585978 191.22803380141616 -6.7454813220624334 + vertex 181.2717395158591 -68.57958733391449 -6.745481322062546 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 181.8929052241051 -68.22095714504727 -6.331370849898517 + vertex 32.11310932699257 191.71379888836168 -5.999999999999944 + vertex 31.892905224105828 191.58666399028337 -6.331370849898415 + endloop +endfacet +facet normal -0.6870641468694274 -0.3966766701456533 0.6087614290087231 + outer loop + vertex 32.11310932699257 191.71379888836168 -5.999999999999944 + vertex 181.8929052241051 -68.22095714504727 -6.331370849898517 + vertex 182.11310932699186 -68.093822246969 -6.000000000000034 + endloop +endfacet +facet normal 0.11303899832180275 0.06526309611006646 -0.9914448613738092 + outer loop + vertex 180.91310932699193 -68.78664256999662 -3.600000000000047 + vertex 30.554479138125394 190.81392332925194 -3.654518677937452 + vertex 30.913109326992597 191.02097856533402 -3.5999999999999566 + endloop +endfacet +facet normal 0.11303899832180275 0.06526309611006646 -0.9914448613738092 + outer loop + vertex 30.554479138125394 190.81392332925194 -3.654518677937452 + vertex 180.91310932699193 -68.78664256999662 -3.600000000000047 + vertex 180.5544791381247 -68.99369780607864 -3.6545186779375425 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 179.71310932699188 -69.47946289302418 -6.000000000000065 + vertex 29.933313429879313 190.4552931403848 -6.3313708498984465 + vertex 29.713109326992605 190.3281582423065 -5.999999999999975 + endloop +endfacet +facet normal 0.6870641468694395 0.3966766701456151 0.6087614290087343 + outer loop + vertex 29.933313429879313 190.4552931403848 -6.3313708498984465 + vertex 179.71310932699188 -69.47946289302418 -6.000000000000065 + vertex 179.93331342987864 -69.35232799494582 -6.331370849898536 + endloop +endfacet +facet normal -0.5272028623656548 -0.30438071450442294 0.7933533402912207 + outer loop + vertex 31.605929650020105 191.42097856533414 -6.585640646055053 + vertex 181.8929052241051 -68.22095714504727 -6.331370849898517 + vertex 31.892905224105828 191.58666399028337 -6.331370849898415 + endloop +endfacet +facet normal -0.5272028623656548 -0.30438071450442294 0.7933533402912207 + outer loop + vertex 181.8929052241051 -68.22095714504727 -6.331370849898517 + vertex 31.605929650020105 191.42097856533414 -6.585640646055053 + vertex 181.60592965001945 -68.38664256999652 -6.585640646055154 + endloop +endfacet +facet normal 0.33141357403558147 0.19134171618251217 0.9238795325112973 + outer loop + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + vertex 167.0444828390876 -76.79369780607898 -6.745481322062554 + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + endloop +endfacet +facet normal 0.33141357403558147 0.19134171618251217 0.9238795325112973 + outer loop + vertex 167.0444828390876 -76.79369780607898 -6.745481322062554 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + vertex 166.7102927049273 -76.98664256999696 -6.585640646055159 + endloop +endfacet +facet normal -0.5272028623656624 -0.30438071450441606 0.7933533402912182 + outer loop + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + vertex 168.3829089250681 -76.0209571450476 -6.3313708498985 + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + endloop +endfacet +facet normal -0.5272028623656624 -0.30438071450441606 0.7933533402912182 + outer loop + vertex 168.3829089250681 -76.0209571450476 -6.3313708498985 + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + vertex 168.09593335098245 -76.18664256999696 -6.585640646055137 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 182.2515354129724 -68.01390190896532 -4.785889527835981 + vertex 32.11310932699258 191.71379888836162 -4.399999999999924 + vertex 32.25153541297306 191.79371922636534 -4.785889527835891 + endloop +endfacet +facet normal -0.8001031451912495 -0.4619397662556647 -0.3826834323650973 + outer loop + vertex 32.11310932699258 191.71379888836162 -4.399999999999924 + vertex 182.2515354129724 -68.01390190896532 -4.785889527835981 + vertex 182.11310932699186 -68.093822246969 -4.400000000000015 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 179.52746868093678 -69.58664256999661 -5.200000000000067 + vertex 29.574683241012092 190.24823790430275 -5.6141104721640085 + vertex 29.527468680937478 190.220978565334 -5.199999999999976 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 29.574683241012092 190.24823790430275 -5.6141104721640085 + vertex 179.52746868093678 -69.58664256999661 -5.200000000000067 + vertex 179.57468324101143 -69.5593832310279 -5.614110472164098 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 181.8929052241052 -68.2209571450474 -4.068629150101555 + vertex 31.60592965002015 191.42097856533402 -3.8143593539448384 + vertex 31.892905224105863 191.58666399028328 -4.068629150101453 + endloop +endfacet +facet normal -0.52720286236566 -0.3043807145043358 -0.7933533402912507 + outer loop + vertex 31.60592965002015 191.42097856533402 -3.8143593539448384 + vertex 181.8929052241052 -68.2209571450474 -4.068629150101555 + vertex 181.60592965001945 -68.38664256999657 -3.8143593539449396 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 30.913109326992572 191.0209785653341 -6.799999999999951 + vertex 181.2717395158591 -68.57958733391449 -6.745481322062546 + vertex 31.27173951585978 191.22803380141616 -6.7454813220624334 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 181.2717395158591 -68.57958733391449 -6.745481322062546 + vertex 30.913109326992572 191.0209785653341 -6.799999999999951 + vertex 180.9131093269919 -68.78664256999652 -6.800000000000041 + endloop +endfacet +facet normal -0.8586164364012479 -0.49572243068693045 0.130526192220043 + outer loop + vertex 182.25153541297234 -68.01390190896528 -5.614110472164045 + vertex 32.29874997304768 191.82097856533412 -5.199999999999923 + vertex 32.25153541297306 191.79371922636537 -5.614110472163954 + endloop +endfacet +facet normal -0.8586164364012479 -0.49572243068693045 0.130526192220043 + outer loop + vertex 32.29874997304768 191.82097856533412 -5.199999999999923 + vertex 182.25153541297234 -68.01390190896528 -5.614110472164045 + vertex 182.29874997304697 -67.98664256999652 -5.200000000000013 + endloop +endfacet +facet normal -0.800103145191235 -0.4619397662556789 0.38268343236511065 + outer loop + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 168.7415391139354 -75.81390190896572 -5.6141104721640644 + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + endloop +endfacet +facet normal -0.800103145191235 -0.4619397662556789 0.38268343236511065 + outer loop + vertex 168.7415391139354 -75.81390190896572 -5.6141104721640644 + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 168.60311302795486 -75.89382224696935 -6.000000000000031 + endloop +endfacet +facet normal -0.11303899832179497 -0.06526309610997745 -0.9914448613738159 + outer loop + vertex 181.27173951585914 -68.57958733391463 -3.65451867793752 + vertex 30.913109326992597 191.02097856533402 -3.5999999999999566 + vertex 31.27173951585983 191.22803380141602 -3.654518677937407 + endloop +endfacet +facet normal -0.11303899832179497 -0.06526309610997745 -0.9914448613738159 + outer loop + vertex 30.913109326992597 191.02097856533402 -3.5999999999999566 + vertex 181.27173951585914 -68.57958733391463 -3.65451867793752 + vertex 180.91310932699193 -68.78664256999662 -3.600000000000047 + endloop +endfacet +facet normal -0.8001031451912451 -0.4619397662556961 0.3826834323650685 + outer loop + vertex 182.11310932699186 -68.093822246969 -6.000000000000034 + vertex 32.25153541297306 191.79371922636537 -5.614110472163954 + vertex 32.11310932699257 191.71379888836168 -5.999999999999944 + endloop +endfacet +facet normal -0.8001031451912451 -0.4619397662556961 0.3826834323650685 + outer loop + vertex 32.25153541297306 191.79371922636537 -5.614110472163954 + vertex 182.11310932699186 -68.093822246969 -6.000000000000034 + vertex 182.25153541297234 -68.01390190896528 -5.614110472164045 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 179.57468324101143 -69.5593832310279 -5.614110472164098 + vertex 29.713109326992605 190.3281582423065 -5.999999999999975 + vertex 29.574683241012092 190.24823790430275 -5.6141104721640085 + endloop +endfacet +facet normal 0.8001031451912495 0.4619397662556647 0.3826834323650973 + outer loop + vertex 29.713109326992605 190.3281582423065 -5.999999999999975 + vertex 179.57468324101143 -69.5593832310279 -5.614110472164098 + vertex 179.71310932699188 -69.47946289302418 -6.000000000000065 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + vertex 167.76174321682203 -76.37958733391484 -6.745481322062554 + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 167.76174321682203 -76.37958733391484 -6.745481322062554 + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + vertex 167.40311302795493 -76.58664256999695 -6.80000000000005 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 179.71310932699166 -69.47946289302372 -20.000000000000025 + vertex 29.57468324101183 190.24823790430324 -20.385889527835904 + vertex 29.713109326992345 190.32815824230696 -19.99999999999994 + endloop +endfacet +facet normal 0.800103145191235 0.4619397662556789 -0.38268343236511065 + outer loop + vertex 29.57468324101183 190.24823790430324 -20.385889527835904 + vertex 179.71310932699166 -69.47946289302372 -20.000000000000025 + vertex 179.57468324101112 -69.55938323102744 -20.385889527835992 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 179.57468324101112 -69.55938323102744 -20.385889527835992 + vertex 29.527468680937208 190.2209785653345 -20.799999999999937 + vertex 29.57468324101183 190.24823790430324 -20.385889527835904 + endloop +endfacet +facet normal 0.8586164364012514 0.4957224306869325 -0.13052619222001063 + outer loop + vertex 29.527468680937208 190.2209785653345 -20.799999999999937 + vertex 179.57468324101112 -69.55938323102744 -20.385889527835992 + vertex 179.52746868093652 -69.58664256999616 -20.800000000000026 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 179.57468324101114 -69.5593832310274 -21.214110472164055 + vertex 29.7131093269923 190.32815824230696 -21.599999999999934 + vertex 29.574683241011822 190.24823790430327 -21.21411047216397 + endloop +endfacet +facet normal 0.8001031451912619 0.4619397662556719 0.38268343236506275 + outer loop + vertex 29.7131093269923 190.32815824230696 -21.599999999999934 + vertex 179.57468324101114 -69.5593832310274 -21.214110472164055 + vertex 179.71310932699166 -69.47946289302368 -21.600000000000023 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 179.52746868093652 -69.58664256999616 -20.800000000000026 + vertex 29.574683241011822 190.24823790430327 -21.21411047216397 + vertex 29.527468680937208 190.2209785653345 -20.799999999999937 + endloop +endfacet +facet normal 0.8586164364012407 0.4957224306869376 0.13052619222006184 + outer loop + vertex 29.574683241011822 190.24823790430327 -21.21411047216397 + vertex 179.52746868093652 -69.58664256999616 -20.800000000000026 + vertex 179.57468324101114 -69.5593832310274 -21.214110472164055 + endloop +endfacet +facet normal 0.11303899832179483 0.06526309610997597 0.991444861373816 + outer loop + vertex 30.554479138125338 190.81392332925208 -6.745481322062478 + vertex 180.9131093269919 -68.78664256999652 -6.800000000000041 + vertex 30.913109326992572 191.0209785653341 -6.799999999999951 + endloop +endfacet +facet normal 0.11303899832179483 0.06526309610997597 0.991444861373816 + outer loop + vertex 180.9131093269919 -68.78664256999652 -6.800000000000041 + vertex 30.554479138125338 190.81392332925208 -6.745481322062478 + vertex 180.55447913812472 -68.99369780607859 -6.7454813220625685 + endloop +endfacet +facet normal 0.11303899832184175 0.06526309611000446 0.9914448613738089 + outer loop + vertex 30.554479138125107 190.81392332925256 -22.34548132206245 + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + endloop +endfacet +facet normal 0.11303899832184175 0.06526309611000446 0.9914448613738089 + outer loop + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + vertex 30.554479138125107 190.81392332925256 -22.34548132206245 + vertex 180.55447913812438 -68.99369780607809 -22.34548132206253 + endloop +endfacet +facet normal -0.8586164364012515 -0.49572243068693256 0.1305261922200104 + outer loop + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + vertex 32.29874997304738 191.82097856533457 -20.79999999999993 + vertex 32.251535412972764 191.79371922636585 -21.21411047216396 + endloop +endfacet +facet normal -0.8586164364012515 -0.49572243068693256 0.1305261922200104 + outer loop + vertex 32.29874997304738 191.82097856533457 -20.79999999999993 + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + vertex 182.29874997304668 -67.98664256999602 -20.800000000000015 + endloop +endfacet +facet normal -0.6870641468694361 -0.3966766701456075 -0.608761429008743 + outer loop + vertex 182.1131093269916 -68.0938222469685 -20.000000000000018 + vertex 31.89290522410557 191.58666399028374 -19.66862915010146 + vertex 32.11310932699228 191.7137988883621 -19.99999999999993 + endloop +endfacet +facet normal -0.6870641468694361 -0.3966766701456075 -0.608761429008743 + outer loop + vertex 31.89290522410557 191.58666399028374 -19.66862915010146 + vertex 182.1131093269916 -68.0938222469685 -20.000000000000018 + vertex 181.89290522410488 -68.2209571450469 -19.668629150101545 + endloop +endfacet +facet normal 0.3314135740355637 0.1913417161825047 0.9238795325113052 + outer loop + vertex 30.220289003964727 190.62097856533455 -22.18564064605505 + vertex 180.55447913812438 -68.99369780607809 -22.34548132206253 + vertex 30.554479138125107 190.81392332925256 -22.34548132206245 + endloop +endfacet +facet normal 0.3314135740355637 0.1913417161825047 0.9238795325113052 + outer loop + vertex 180.55447913812438 -68.99369780607809 -22.34548132206253 + vertex 30.220289003964727 190.62097856533455 -22.18564064605505 + vertex 180.22028900396407 -69.18664256999607 -22.185640646055134 + endloop +endfacet +facet normal -0.527202862365693 -0.3043807145043661 -0.7933533402912171 + outer loop + vertex 181.89290522410488 -68.2209571450469 -19.668629150101545 + vertex 31.60592965001985 191.42097856533454 -19.41435935394482 + vertex 31.89290522410557 191.58666399028374 -19.66862915010146 + endloop +endfacet +facet normal -0.527202862365693 -0.3043807145043661 -0.7933533402912171 + outer loop + vertex 31.60592965001985 191.42097856533454 -19.41435935394482 + vertex 181.89290522410488 -68.2209571450469 -19.668629150101545 + vertex 181.60592965001922 -68.38664256999616 -19.414359353944903 + endloop +endfacet +facet normal -0.527202862365633 -0.3043807145043991 0.7933533402912443 + outer loop + vertex 31.605929650019835 191.42097856533465 -22.185640646055035 + vertex 181.89290522410485 -68.22095714504677 -21.931370849898506 + vertex 31.89290522410554 191.58666399028385 -21.93137084989842 + endloop +endfacet +facet normal -0.527202862365633 -0.3043807145043991 0.7933533402912443 + outer loop + vertex 181.89290522410485 -68.22095714504677 -21.931370849898506 + vertex 31.605929650019835 191.42097856533465 -22.185640646055035 + vertex 181.6059296500192 -68.38664256999607 -22.185640646055123 + endloop +endfacet +facet normal -0.11303899832183627 -0.06526309610999989 -0.9914448613738097 + outer loop + vertex 181.27173951585885 -68.57958733391409 -19.254518677937508 + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + vertex 31.27173951585956 191.2280338014165 -19.254518677937426 + endloop +endfacet +facet normal -0.11303899832183627 -0.06526309610999989 -0.9914448613738097 + outer loop + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + vertex 181.27173951585885 -68.57958733391409 -19.254518677937508 + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 180.22028900396413 -69.18664256999621 -19.414359353944917 + vertex 29.933313429879053 190.45529314038524 -19.668629150101474 + vertex 30.220289003964787 190.62097856533444 -19.414359353944835 + endloop +endfacet +facet normal 0.5272028623656624 0.30438071450441606 -0.7933533402912182 + outer loop + vertex 29.933313429879053 190.45529314038524 -19.668629150101474 + vertex 180.22028900396413 -69.18664256999621 -19.414359353944917 + vertex 179.93331342987838 -69.35232799494541 -19.668629150101555 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 29.933313429879053 190.45529314038524 -19.668629150101474 + vertex 179.71310932699166 -69.47946289302372 -20.000000000000025 + vertex 29.713109326992345 190.32815824230696 -19.99999999999994 + endloop +endfacet +facet normal 0.6870641468694383 0.39667667014565394 -0.6087614290087103 + outer loop + vertex 179.71310932699166 -69.47946289302372 -20.000000000000025 + vertex 29.933313429879053 190.45529314038524 -19.668629150101474 + vertex 179.93331342987838 -69.35232799494541 -19.668629150101555 + endloop +endfacet +facet normal -0.6870641468694484 -0.3966766701456766 0.6087614290086841 + outer loop + vertex 181.89290522410485 -68.22095714504677 -21.931370849898506 + vertex 32.11310932699228 191.71379888836213 -21.599999999999927 + vertex 31.89290522410554 191.58666399028385 -21.93137084989842 + endloop +endfacet +facet normal -0.6870641468694484 -0.3966766701456766 0.6087614290086841 + outer loop + vertex 32.11310932699228 191.71379888836213 -21.599999999999927 + vertex 181.89290522410485 -68.22095714504677 -21.931370849898506 + vertex 182.11310932699158 -68.09382224696846 -21.600000000000016 + endloop +endfacet +facet normal -0.33141357403558597 -0.19134171618259363 0.9238795325112787 + outer loop + vertex 31.27173951585951 191.22803380141661 -22.34548132206245 + vertex 181.6059296500192 -68.38664256999607 -22.185640646055123 + vertex 31.605929650019835 191.42097856533465 -22.185640646055035 + endloop +endfacet +facet normal -0.33141357403558597 -0.19134171618259363 0.9238795325112787 + outer loop + vertex 181.6059296500192 -68.38664256999607 -22.185640646055123 + vertex 31.27173951585951 191.22803380141661 -22.34548132206245 + vertex 181.2717395158588 -68.57958733391403 -22.345481322062533 + endloop +endfacet +facet normal 0.5272028623656606 0.30438071450435294 0.7933533402912438 + outer loop + vertex 29.933313429879036 190.4552931403853 -21.93137084989843 + vertex 180.22028900396407 -69.18664256999607 -22.185640646055134 + vertex 30.220289003964727 190.62097856533455 -22.18564064605505 + endloop +endfacet +facet normal 0.5272028623656606 0.30438071450435294 0.7933533402912438 + outer loop + vertex 180.22028900396407 -69.18664256999607 -22.185640646055134 + vertex 29.933313429879036 190.4552931403853 -21.93137084989843 + vertex 179.93331342987832 -69.35232799494533 -21.931370849898517 + endloop +endfacet +facet normal -0.8001031451912352 -0.46193976625567895 0.38268343236511054 + outer loop + vertex 32.11310932699228 191.71379888836213 -21.599999999999927 + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + vertex 32.251535412972764 191.79371922636585 -21.21411047216396 + endloop +endfacet +facet normal -0.8001031451912352 -0.46193976625567895 0.38268343236511054 + outer loop + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + vertex 32.11310932699228 191.71379888836213 -21.599999999999927 + vertex 182.11310932699158 -68.09382224696846 -21.600000000000016 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 32.25153541297277 191.79371922636582 -20.385889527835896 + vertex 182.1131093269916 -68.0938222469685 -20.000000000000018 + vertex 32.11310932699228 191.7137988883621 -19.99999999999993 + endloop +endfacet +facet normal -0.8001031451912619 -0.4619397662556719 -0.38268343236506275 + outer loop + vertex 182.1131093269916 -68.0938222469685 -20.000000000000018 + vertex 32.25153541297277 191.79371922636582 -20.385889527835896 + vertex 182.25153541297215 -68.01390190896487 -20.385889527835985 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 30.220289003965032 190.6209785653341 -6.585640646055061 + vertex 180.55447913812472 -68.99369780607859 -6.7454813220625685 + vertex 30.554479138125338 190.81392332925208 -6.745481322062478 + endloop +endfacet +facet normal 0.33141357403561683 0.19134171618253823 0.9238795325112792 + outer loop + vertex 180.55447913812472 -68.99369780607859 -6.7454813220625685 + vertex 30.220289003965032 190.6209785653341 -6.585640646055061 + vertex 180.22028900396433 -69.18664256999656 -6.585640646055151 + endloop +endfacet +facet normal 0.6870641468694512 0.39667667014562186 0.6087614290087167 + outer loop + vertex 179.71310932699166 -69.47946289302368 -21.600000000000023 + vertex 29.933313429879036 190.4552931403853 -21.93137084989843 + vertex 29.7131093269923 190.32815824230696 -21.599999999999934 + endloop +endfacet +facet normal 0.6870641468694512 0.39667667014562186 0.6087614290087167 + outer loop + vertex 29.933313429879036 190.4552931403853 -21.93137084989843 + vertex 179.71310932699166 -69.47946289302368 -21.600000000000023 + vertex 179.93331342987832 -69.35232799494533 -21.931370849898517 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + vertex 181.2717395158588 -68.57958733391403 -22.345481322062533 + vertex 31.27173951585951 191.22803380141661 -22.34548132206245 + endloop +endfacet +facet normal -0.11303899832180415 -0.06526309611006587 0.9914448613738092 + outer loop + vertex 181.2717395158588 -68.57958733391403 -22.345481322062533 + vertex 30.91310932699229 191.0209785653346 -22.399999999999945 + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + endloop +endfacet +facet normal -0.33141357403558147 -0.19134171618251217 -0.9238795325112973 + outer loop + vertex 181.60592965001922 -68.38664256999616 -19.414359353944903 + vertex 31.27173951585956 191.2280338014165 -19.254518677937426 + vertex 31.60592965001985 191.42097856533454 -19.41435935394482 + endloop +endfacet +facet normal -0.33141357403558147 -0.19134171618251217 -0.9238795325112973 + outer loop + vertex 31.27173951585956 191.2280338014165 -19.254518677937426 + vertex 181.60592965001922 -68.38664256999616 -19.414359353944903 + vertex 181.27173951585885 -68.57958733391409 -19.254518677937508 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 180.55447913812446 -68.99369780607823 -19.2545186779375 + vertex 30.220289003964787 190.62097856533444 -19.414359353944835 + vertex 30.554479138125096 190.81392332925245 -19.254518677937423 + endloop +endfacet +facet normal 0.3314135740355858 0.19134171618259352 -0.9238795325112789 + outer loop + vertex 30.220289003964787 190.62097856533444 -19.414359353944835 + vertex 180.55447913812446 -68.99369780607823 -19.2545186779375 + vertex 180.22028900396413 -69.18664256999621 -19.414359353944917 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006204 + outer loop + vertex 32.29874997304738 191.82097856533457 -20.79999999999993 + vertex 182.25153541297215 -68.01390190896487 -20.385889527835985 + vertex 32.25153541297277 191.79371922636582 -20.385889527835896 + endloop +endfacet +facet normal -0.8586164364012407 -0.4957224306869376 -0.13052619222006204 + outer loop + vertex 182.25153541297215 -68.01390190896487 -20.385889527835985 + vertex 32.29874997304738 191.82097856533457 -20.79999999999993 + vertex 182.29874997304668 -67.98664256999602 -20.800000000000015 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + vertex 30.554479138125096 190.81392332925245 -19.254518677937423 + vertex 30.913109326992327 191.02097856533445 -19.19999999999993 + endloop +endfacet +facet normal 0.11303899832180415 0.06526309611006587 -0.9914448613738092 + outer loop + vertex 30.554479138125096 190.81392332925245 -19.254518677937423 + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + vertex 180.55447913812446 -68.99369780607823 -19.2545186779375 + endloop +endfacet +facet normal 0.8586164364012415 0.49572243068693805 0.1305261922200554 + outer loop + vertex 182.78885611527102 -67.70367965685205 -3.7411809548975263 + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 32.78885611527171 192.10394147847862 -3.741180954897436 + endloop +endfacet +facet normal 0.8586164364012415 0.49572243068693805 0.1305261922200554 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 182.78885611527102 -67.70367965685205 -3.7411809548975263 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 1.5003536199769238e-15 + outer loop + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 182.8183652153176 -67.68664256999645 -9.20000000000005 + vertex 32.81836521531824 192.12097856533427 -9.19999999999996 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 1.5003536199769238e-15 + outer loop + vertex 182.8183652153176 -67.68664256999645 -9.20000000000005 + vertex 32.81836521531836 192.1209785653341 -3.9999999999999476 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -4.4649600931051686e-15 + outer loop + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 32.47195505380448 191.92097856533425 -9.59999999999996 + vertex 32.47195505380448 191.92097856533422 -9.19999999999996 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -4.4649600931051686e-15 + outer loop + vertex 32.47195505380448 191.92097856533425 -9.59999999999996 + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 182.47195505380378 -67.88664256999637 -9.60000000000005 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 29.49775138722347 190.2038212778087 -7.39999999999995 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 29.49775138722347 190.2038212778087 -7.39999999999995 + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + endloop +endfacet +facet normal 0.8001031451912567 0.46193976625566885 0.3826834323650779 + outer loop + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + vertex 32.78885611527171 192.10394147847862 -3.741180954897436 + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + endloop +endfacet +facet normal 0.8001031451912567 0.46193976625566885 0.3826834323650779 + outer loop + vertex 32.78885611527171 192.10394147847862 -3.741180954897436 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + vertex 182.78885611527102 -67.70367965685205 -3.7411809548975263 + endloop +endfacet +facet normal 0.6123724356957727 0.35355339059330715 -0.7071067811865499 + outer loop + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 29.49775138722347 190.2038212778087 -7.39999999999995 + endloop +endfacet +facet normal 0.6123724356957727 0.35355339059330715 -0.7071067811865499 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + endloop +endfacet +facet normal -3.27323874590727e-14 2.2585965780328042e-14 -1.0 + outer loop + vertex 182.47195505380378 -67.88664256999637 -9.60000000000005 + vertex 31.25951948850626 191.2209785653342 -9.599999999999923 + vertex 32.47195505380448 191.92097856533425 -9.59999999999996 + endloop +endfacet +facet normal -3.27323874590727e-14 2.2585965780328042e-14 -1.0 + outer loop + vertex 31.25951948850626 191.2209785653342 -9.599999999999923 + vertex 182.47195505380378 -67.88664256999637 -9.60000000000005 + vertex 181.2595194885056 -68.58664256999643 -9.600000000000035 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 182.8183652153176 -67.68664256999645 -9.20000000000005 + vertex 32.47195505380448 191.92097856533422 -9.19999999999996 + vertex 32.81836521531824 192.12097856533427 -9.19999999999996 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 32.47195505380448 191.92097856533422 -9.19999999999996 + vertex 182.8183652153176 -67.68664256999645 -9.20000000000005 + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 31.25951948850626 191.2209785653342 -9.599999999999923 + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 31.259519488506292 191.22097856533415 -7.3999999999999275 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 31.25951948850626 191.2209785653342 -9.599999999999923 + vertex 181.2595194885056 -68.58664256999643 -9.600000000000035 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -1.0524654334828364e-15 + outer loop + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 27.36240517147622 188.9709785653343 -16.134314575050695 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -1.0524654334828364e-15 + outer loop + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 27.362405171476354 188.9709785653341 -9.8656854249492 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 15.497857139629497 182.12097856533416 -21.99999999999995 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + vertex 15.84426730114338 182.32097856533397 -16.799999999999965 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + vertex 15.497857139629593 182.12097856533398 -16.79999999999996 + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.7394170869210435e-15 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.7394170869210435e-15 + outer loop + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 15.84426730114338 182.32097856533397 -16.399999999999963 + vertex 167.0567028664409 -76.78664256999664 -16.400000000000055 + vertex 17.056702866441597 183.02097856533402 -16.399999999999963 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 167.0567028664409 -76.78664256999664 -16.400000000000055 + vertex 15.84426730114338 182.32097856533397 -16.399999999999963 + vertex 165.8442673011427 -77.48664256999666 -16.400000000000052 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 17.056702866441704 183.0209785653338 -9.599999999999953 + vertex 17.056702866441775 183.02097856533373 -7.399999999999959 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 17.056702866441704 183.0209785653338 -9.599999999999953 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 167.05670286644101 -76.78664256999687 -9.600000000000044 + endloop +endfacet +facet normal -3.2732387459072867e-14 2.2585965780327947e-14 -1.0 + outer loop + vertex 167.05670286644101 -76.78664256999687 -9.600000000000044 + vertex 15.844267301143496 182.32097856533375 -9.599999999999929 + vertex 17.056702866441704 183.0209785653338 -9.599999999999953 + endloop +endfacet +facet normal -3.2732387459072867e-14 2.2585965780327947e-14 -1.0 + outer loop + vertex 15.844267301143496 182.32097856533375 -9.599999999999929 + vertex 167.05670286644101 -76.78664256999687 -9.600000000000044 + vertex 165.84426730114282 -77.48664256999689 -9.60000000000002 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + vertex 168.81847096772375 -75.76948528247121 -18.60000000000005 + vertex 18.818470967724387 184.03813585285948 -18.599999999999948 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 168.81847096772375 -75.76948528247121 -18.60000000000005 + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + endloop +endfacet +facet normal -0.6123724356957727 -0.35355339059330715 0.7071067811865499 + outer loop + vertex 18.818470967724387 184.03813585285948 -18.599999999999948 + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 20.953817183471486 185.2709785653341 -16.134314575050713 + endloop +endfacet +facet normal -0.6123724356957727 -0.35355339059330715 0.7071067811865499 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 18.818470967724387 184.03813585285948 -18.599999999999948 + vertex 168.81847096772375 -75.76948528247121 -18.60000000000005 + endloop +endfacet +facet normal -0.6123724356957975 -0.35355339059327634 -0.7071067811865437 + outer loop + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + vertex 18.818470967724625 184.03813585285917 -7.399999999999961 + endloop +endfacet +facet normal -0.6123724356957975 -0.35355339059327634 -0.7071067811865437 + outer loop + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + vertex 20.953817183471617 185.2709785653339 -9.865685424949215 + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.844267301143496 182.32097856533375 -9.599999999999929 + vertex 165.84426730114282 -77.48664256999693 -9.20000000000002 + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.84426730114282 -77.48664256999693 -9.20000000000002 + vertex 15.844267301143496 182.32097856533375 -9.599999999999929 + vertex 165.84426730114282 -77.48664256999689 -9.60000000000002 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 165.84426730114282 -77.48664256999693 -9.20000000000002 + vertex 15.497857139629756 182.12097856533373 -9.19999999999993 + vertex 15.844267301143496 182.32097856533375 -9.19999999999993 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 15.497857139629756 182.12097856533373 -9.19999999999993 + vertex 165.84426730114282 -77.48664256999693 -9.20000000000002 + vertex 165.49785713962913 -77.68664256999693 -9.20000000000002 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + vertex 15.84426730114338 182.32097856533397 -16.399999999999963 + vertex 15.84426730114338 182.32097856533397 -16.799999999999965 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.84426730114338 182.32097856533397 -16.399999999999963 + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + vertex 165.8442673011427 -77.48664256999666 -16.400000000000052 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 17.056702866441597 183.02097856533402 -16.399999999999963 + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + vertex 17.05670286644153 183.02097856533408 -18.59999999999996 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + vertex 17.056702866441597 183.02097856533402 -16.399999999999963 + vertex 167.0567028664409 -76.78664256999664 -16.400000000000055 + endloop +endfacet +facet normal -0.6870641468694316 -0.39667667014565006 0.6087614290087203 + outer loop + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + endloop +endfacet +facet normal -0.6870641468694316 -0.39667667014565006 0.6087614290087203 + outer loop + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 165.7515101077178 -77.5401959605903 -3.29289321881348 + endloop +endfacet +facet normal -0.3314135740355606 -0.1913417161825818 0.9238795325112903 + outer loop + vertex 15.930869841522087 182.37097856533356 -3.1339745962155057 + vertex 166.1397386753716 -77.31605209254836 -3.0340741737109713 + vertex 16.13973867537229 182.49156904278232 -3.034074173710881 + endloop +endfacet +facet normal -0.3314135740355606 -0.1913417161825818 0.9238795325112903 + outer loop + vertex 166.1397386753716 -77.31605209254836 -3.0340741737109713 + vertex 15.930869841522087 182.37097856533356 -3.1339745962155057 + vertex 165.93086984152146 -77.43664256999712 -3.133974596215596 + endloop +endfacet +facet normal -0.11303899832181276 -0.06526309611007224 0.9914448613738078 + outer loop + vertex 16.13973867537229 182.49156904278232 -3.034074173710881 + vertex 166.3638825434136 -77.18664256999709 -3.000000000000034 + vertex 16.36388254341431 182.62097856533356 -2.9999999999999436 + endloop +endfacet +facet normal -0.11303899832181276 -0.06526309611007224 0.9914448613738078 + outer loop + vertex 166.3638825434136 -77.18664256999709 -3.000000000000034 + vertex 16.13973867537229 182.49156904278232 -3.034074173710881 + vertex 166.1397386753716 -77.31605209254836 -3.0340741737109713 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 16.36388254341431 182.62097856533356 -2.9999999999999436 + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 20.8672146430933 185.2209785653337 -2.999999999999924 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 16.36388254341431 182.62097856533356 -2.9999999999999436 + vertex 166.3638825434136 -77.18664256999709 -3.000000000000034 + endloop +endfacet +facet normal -0.5272028623656286 -0.3043807145043965 0.7933533402912483 + outer loop + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + vertex 165.93086984152146 -77.43664256999712 -3.133974596215596 + vertex 15.930869841522087 182.37097856533356 -3.1339745962155057 + endloop +endfacet +facet normal -0.5272028623656286 -0.3043807145043965 0.7933533402912483 + outer loop + vertex 165.93086984152146 -77.43664256999712 -3.133974596215596 + vertex 15.751510107718534 182.26742517474023 -3.29289321881339 + vertex 165.7515101077178 -77.5401959605903 -3.29289321881348 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 15.497857139629756 182.12097856533373 -9.19999999999993 + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 15.497857139629756 182.12097856533373 -9.19999999999993 + vertex 165.49785713962913 -77.68664256999693 -9.20000000000002 + endloop +endfacet +facet normal -0.8001031451912507 -0.4619397662556767 0.3826834323650808 + outer loop + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 15.613882543414308 182.18796586344135 -3.49999999999994 + endloop +endfacet +facet normal -0.8001031451912507 -0.4619397662556767 0.3826834323650808 + outer loop + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + vertex 165.52736623967576 -77.66960548314157 -3.741180954897518 + endloop +endfacet +facet normal -0.8586164364012412 -0.4957224306869379 0.1305261922200573 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + vertex 15.497857139629833 182.1209785653336 -3.999999999999939 + endloop +endfacet +facet normal -0.8586164364012412 -0.4957224306869379 0.1305261922200573 + outer loop + vertex 15.527366239676507 182.138015652189 -3.7411809548974277 + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 165.52736623967576 -77.66960548314157 -3.741180954897518 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + vertex 170.86721464309258 -74.58664256999695 -3.400000000000036 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + vertex 20.8672146430933 185.2209785653337 -2.999999999999924 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -9.400019899202897e-16 + outer loop + vertex 20.867214643093302 185.2209785653337 -3.399999999999923 + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 170.86721464309258 -74.58664256999695 -3.400000000000036 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 171.21362480460635 -74.38664256999687 -4.80000000000007 + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 21.213624804607 185.42097856533377 -4.799999999999969 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 19.308368916281303 184.32097856533372 -4.799999999999966 + vertex 171.21362480460635 -74.38664256999687 -4.80000000000007 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + vertex 176.872507222919 -71.11948528247122 -9.300000000000056 + vertex 26.872507222919705 188.6881358528594 -9.299999999999965 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 176.872507222919 -71.11948528247122 -9.300000000000056 + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -8.99704908291417e-15 + outer loop + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 171.21362480460635 -74.38664256999687 -4.80000000000007 + vertex 21.213624804607 185.42097856533377 -4.799999999999969 + endloop +endfacet +facet normal 0.8660254037844195 0.5000000000000333 -8.99704908291417e-15 + outer loop + vertex 171.21362480460635 -74.38664256999687 -4.80000000000007 + vertex 21.213624804607072 185.4209785653337 -3.399999999999949 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + endloop +endfacet +facet normal 0.6123724356957947 0.35355339059327473 0.707106781186547 + outer loop + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + vertex 21.443715132028256 185.5538212778085 -9.29999999999996 + endloop +endfacet +facet normal 0.6123724356957947 0.35355339059327473 0.707106781186547 + outer loop + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + vertex 19.30836891628126 184.32097856533377 -6.834314575050704 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + endloop +endfacet +facet normal -0.6123724356957676 -0.3535533905933155 0.70710678118655 + outer loop + vertex 26.872507222919705 188.6881358528594 -9.299999999999965 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + endloop +endfacet +facet normal -0.6123724356957676 -0.3535533905933155 0.70710678118655 + outer loop + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 26.872507222919705 188.6881358528594 -9.299999999999965 + vertex 176.872507222919 -71.11948528247122 -9.300000000000056 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 27.102597550341113 188.82097856533395 -4.799999999999952 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + endloop +endfacet +facet normal -1.877717253503252e-14 3.064301287332265e-14 -1.0 + outer loop + vertex 27.102597550341113 188.82097856533395 -4.799999999999952 + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 177.10259755034048 -70.98664256999675 -4.800000000000042 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.611827415552657e-14 + outer loop + vertex 177.10259755034048 -70.98664256999675 -4.800000000000042 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 27.102597550341113 188.82097856533395 -4.799999999999952 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 2.611827415552657e-14 + outer loop + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 177.10259755034048 -70.98664256999675 -4.800000000000042 + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 29.007853438666853 189.920978565334 -4.7999999999999545 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 9.400019899202897e-16 + outer loop + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 29.00785343866681 189.92097856533402 -6.834314575050715 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + vertex 27.449007711854946 189.0209785653339 -3.399999999999954 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + vertex 27.102597550341187 188.82097856533392 -3.399999999999954 + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.4649600931051686e-15 + outer loop + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 27.449007711854946 189.0209785653339 -3.399999999999954 + endloop +endfacet +facet normal -0.8660254037844195 -0.5000000000000333 4.4649600931051686e-15 + outer loop + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + vertex 177.44900771185428 -70.78664256999674 -3.0000000000000453 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 181.9523398115333 -68.18664256999665 -3.000000000000051 + vertex 31.952339811533943 191.62097856533404 -2.9999999999999494 + endloop +endfacet +facet normal 1.877717253503252e-14 -3.064301287332265e-14 1.0 + outer loop + vertex 181.9523398115333 -68.18664256999665 -3.000000000000051 + vertex 27.449007711854982 189.0209785653339 -2.999999999999955 + vertex 177.44900771185428 -70.78664256999674 -3.0000000000000453 + endloop +endfacet +facet normal 0.11303899832185176 0.06526309611000743 0.9914448613738075 + outer loop + vertex 31.952339811533943 191.62097856533404 -2.9999999999999494 + vertex 182.17648367957534 -68.0572330474454 -3.034074173710977 + vertex 32.176483679575945 191.7503880878853 -3.034074173710887 + endloop +endfacet +facet normal 0.11303899832185176 0.06526309611000743 0.9914448613738075 + outer loop + vertex 182.17648367957534 -68.0572330474454 -3.034074173710977 + vertex 31.952339811533943 191.62097856533404 -2.9999999999999494 + vertex 181.9523398115333 -68.18664256999665 -3.000000000000051 + endloop +endfacet +facet normal 0.3314135740355972 0.19134171618252124 0.9238795325112898 + outer loop + vertex 32.176483679575945 191.7503880878853 -3.034074173710887 + vertex 182.38535251342543 -67.93664256999658 -3.1339745962156043 + vertex 32.385352513426135 191.87097856533404 -3.133974596215514 + endloop +endfacet +facet normal 0.3314135740355972 0.19134171618252124 0.9238795325112898 + outer loop + vertex 182.38535251342543 -67.93664256999658 -3.1339745962156043 + vertex 32.176483679575945 191.7503880878853 -3.034074173710887 + vertex 182.17648367957534 -68.0572330474454 -3.034074173710977 + endloop +endfacet +facet normal 0.5272028623656612 0.304380714504342 0.7933533402912476 + outer loop + vertex 32.385352513426135 191.87097856533404 -3.133974596215514 + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 32.56471224722971 191.97453195592732 -3.2928932188133984 + endloop +endfacet +facet normal 0.5272028623656612 0.304380714504342 0.7933533402912476 + outer loop + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 32.385352513426135 191.87097856533404 -3.133974596215514 + vertex 182.38535251342543 -67.93664256999658 -3.1339745962156043 + endloop +endfacet +facet normal 0.6870641468694547 0.3966766701456183 0.6087614290087151 + outer loop + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + vertex 32.56471224722971 191.97453195592732 -3.2928932188133984 + endloop +endfacet +facet normal 0.6870641468694547 0.3966766701456183 0.6087614290087151 + outer loop + vertex 32.70233981153391 192.05399126722628 -3.4999999999999485 + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 182.8183652153176 -67.68664256999645 -9.20000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 182.25153541297234 -68.01390190896528 -5.614110472164045 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 182.25153541297234 -68.01390190896528 -5.614110472164045 + vertex 182.11310932699186 -68.093822246969 -6.000000000000034 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 182.11310932699186 -68.093822246969 -6.000000000000034 + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 182.11310932699186 -68.093822246969 -6.000000000000034 + vertex 181.8929052241051 -68.22095714504727 -6.331370849898517 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 181.8929052241051 -68.22095714504727 -6.331370849898517 + vertex 181.60592965001945 -68.38664256999652 -6.585640646055154 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 181.60592965001945 -68.38664256999652 -6.585640646055154 + vertex 181.2717395158591 -68.57958733391449 -6.745481322062546 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + vertex 181.2717395158591 -68.57958733391449 -6.745481322062546 + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + vertex 181.2717395158591 -68.57958733391449 -6.745481322062546 + vertex 180.9131093269919 -68.78664256999652 -6.800000000000041 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + vertex 180.9131093269919 -68.78664256999652 -6.800000000000041 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.25153541297234 -68.01390190896528 -5.614110472164045 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 182.29874997304697 -67.98664256999652 -5.200000000000013 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.29874997304697 -67.98664256999652 -5.200000000000013 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 182.2515354129724 -68.01390190896532 -4.785889527835981 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.2515354129724 -68.01390190896532 -4.785889527835981 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 182.11310932699186 -68.093822246969 -4.400000000000015 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.11310932699186 -68.093822246969 -4.400000000000015 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 181.8929052241052 -68.2209571450474 -4.068629150101555 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.8929052241052 -68.2209571450474 -4.068629150101555 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 181.60592965001945 -68.38664256999657 -3.8143593539449396 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001945 -68.38664256999657 -3.8143593539449396 + vertex 182.81836521531764 -67.6866425699966 -4.000000000000038 + vertex 182.78885611527102 -67.70367965685205 -3.7411809548975263 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001945 -68.38664256999657 -3.8143593539449396 + vertex 182.78885611527102 -67.70367965685205 -3.7411809548975263 + vertex 181.27173951585914 -68.57958733391463 -3.65451867793752 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585914 -68.57958733391463 -3.65451867793752 + vertex 182.78885611527102 -67.70367965685205 -3.7411809548975263 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585914 -68.57958733391463 -3.65451867793752 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + vertex 180.91310932699193 -68.78664256999662 -3.600000000000047 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 177.44900771185428 -70.78664256999674 -3.0000000000000453 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185428 -70.78664256999674 -3.0000000000000453 + vertex 182.5647122472291 -67.83308917940336 -3.2928932188134885 + vertex 182.38535251342543 -67.93664256999658 -3.1339745962156043 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185428 -70.78664256999674 -3.0000000000000453 + vertex 182.38535251342543 -67.93664256999658 -3.1339745962156043 + vertex 182.17648367957534 -68.0572330474454 -3.034074173710977 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185428 -70.78664256999674 -3.0000000000000453 + vertex 182.17648367957534 -68.0572330474454 -3.034074173710977 + vertex 181.9523398115333 -68.18664256999665 -3.000000000000051 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 179.71310932699188 -69.47946289302418 -6.000000000000065 + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.71310932699188 -69.47946289302418 -6.000000000000065 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 179.93331342987864 -69.35232799494582 -6.331370849898536 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.93331342987864 -69.35232799494582 -6.331370849898536 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 180.22028900396433 -69.18664256999656 -6.585640646055151 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.22028900396433 -69.18664256999656 -6.585640646055151 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 180.55447913812472 -68.99369780607859 -6.7454813220625685 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.55447913812472 -68.99369780607859 -6.7454813220625685 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + vertex 180.9131093269919 -68.78664256999652 -6.800000000000041 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 179.71310932699188 -69.47946289302418 -6.000000000000065 + vertex 179.57468324101143 -69.5593832310279 -5.614110472164098 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 179.57468324101143 -69.5593832310279 -5.614110472164098 + vertex 179.52746868093678 -69.58664256999661 -5.200000000000067 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 179.52746868093678 -69.58664256999661 -5.200000000000067 + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.0078534386662 -69.88664256999668 -4.800000000000045 + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 177.10259755034048 -70.98664256999675 -4.800000000000042 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -4.800000000000042 + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 179.5746832410114 -69.5593832310279 -4.785889527836012 + vertex 179.7131093269919 -69.47946289302413 -4.400000000000046 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 179.7131093269919 -69.47946289302413 -4.400000000000046 + vertex 179.93331342987867 -69.35232799494591 -4.068629150101574 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 179.93331342987867 -69.35232799494591 -4.068629150101574 + vertex 180.22028900396435 -69.18664256999665 -3.814359353944937 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 180.22028900396435 -69.18664256999665 -3.814359353944937 + vertex 180.5544791381247 -68.99369780607864 -3.6545186779375425 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 180.5544791381247 -68.99369780607864 -3.6545186779375425 + vertex 180.91310932699193 -68.78664256999662 -3.600000000000047 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 180.91310932699193 -68.78664256999662 -3.600000000000047 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034048 -70.98664256999675 -3.4000000000000443 + vertex 182.70233981153322 -67.75362986810437 -3.5000000000000386 + vertex 177.44900771185428 -70.78664256999674 -3.4000000000000443 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 171.213624804606 -74.38664256999633 -22.600000000000048 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 167.76174321682174 -76.37958733391443 -22.345481322062547 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 167.76174321682174 -76.37958733391443 -22.345481322062547 + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682174 -76.37958733391443 -22.345481322062547 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 168.0959333509821 -76.18664256999647 -22.185640646055155 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.0959333509821 -76.18664256999647 -22.185640646055155 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 168.3829089250678 -76.0209571450472 -21.931370849898517 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.3829089250678 -76.0209571450472 -21.931370849898517 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 168.60311302795452 -75.89382224696885 -21.600000000000044 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795452 -75.89382224696885 -21.600000000000044 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 168.74153911393512 -75.81390190896522 -21.21411047216408 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.74153911393512 -75.81390190896522 -21.21411047216408 + vertex 171.21362480460607 -74.38664256999643 -21.20000000000005 + vertex 169.30836891628033 -75.48664256999649 -21.200000000000035 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.74153911393512 -75.81390190896522 -21.21411047216408 + vertex 169.30836891628033 -75.48664256999649 -21.200000000000035 + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + vertex 169.30836891628033 -75.48664256999649 -21.200000000000035 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7887536740097 -75.7866425699965 -20.800000000000026 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 168.7415391139351 -75.81390190896526 -20.385889527835992 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139351 -75.81390190896526 -20.385889527835992 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 168.60311302795463 -75.89382224696898 -20.000000000000025 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795463 -75.89382224696898 -20.000000000000025 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 168.38290892506788 -76.02095714504725 -19.668629150101555 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.38290892506788 -76.02095714504725 -19.668629150101555 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 168.09593335098214 -76.18664256999655 -19.41435935394494 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.09593335098214 -76.18664256999655 -19.41435935394494 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 167.7617432168218 -76.37958733391447 -19.254518677937522 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.7617432168218 -76.37958733391447 -19.254518677937522 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.0567028664409 -76.78664256999664 -16.400000000000055 + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + vertex 167.0567028664409 -76.78664256999664 -16.400000000000055 + vertex 165.8442673011427 -77.48664256999666 -16.400000000000052 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + vertex 165.52736623967544 -77.66960548314107 -22.25881904510254 + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967544 -77.66960548314107 -22.25881904510254 + vertex 167.40311302795456 -76.58664256999646 -22.400000000000045 + vertex 167.04448283908738 -76.79369780607844 -22.34548132206257 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967544 -77.66960548314107 -22.25881904510254 + vertex 167.04448283908738 -76.79369780607844 -22.34548132206257 + vertex 166.71029270492699 -76.98664256999646 -22.185640646055152 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967544 -77.66960548314107 -22.25881904510254 + vertex 166.71029270492699 -76.98664256999646 -22.185640646055152 + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 166.71029270492699 -76.98664256999646 -22.185640646055152 + vertex 166.4233171308413 -77.15232799494568 -21.931370849898535 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 166.4233171308413 -77.15232799494568 -21.931370849898535 + vertex 166.20311302795457 -77.27946289302407 -21.600000000000065 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 166.20311302795457 -77.27946289302407 -21.600000000000065 + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962888 -77.68664256999656 -22.00000000000003 + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 166.06468694197412 -77.35938323102783 -21.214110472164098 + vertex 166.01747238189955 -77.3866425699966 -20.800000000000065 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 166.01747238189955 -77.3866425699966 -20.800000000000065 + vertex 166.06468694197414 -77.35938323102783 -20.385889527836035 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 166.06468694197414 -77.35938323102783 -20.385889527836035 + vertex 166.2031130279546 -77.27946289302412 -20.000000000000046 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 166.2031130279546 -77.27946289302412 -20.000000000000046 + vertex 166.42331713084138 -77.15232799494585 -19.668629150101573 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 166.42331713084138 -77.15232799494585 -19.668629150101573 + vertex 166.71029270492707 -76.98664256999655 -19.414359353944935 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 166.71029270492707 -76.98664256999655 -19.414359353944935 + vertex 167.04448283908738 -76.79369780607858 -19.254518677937543 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 167.04448283908738 -76.79369780607858 -19.254518677937543 + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + vertex 167.40311302795456 -76.5866425699965 -19.20000000000005 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + vertex 168.81847096772375 -75.76948528247121 -18.60000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.4978571396289 -77.6866425699967 -16.80000000000004 + vertex 167.05670286644087 -76.78664256999654 -18.60000000000005 + vertex 165.84426730114276 -77.4866425699967 -16.80000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.52746868093652 -69.58664256999616 -20.800000000000026 + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + vertex 179.57468324101114 -69.5593832310274 -21.214110472164055 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + vertex 179.52746868093652 -69.58664256999616 -20.800000000000026 + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 179.52746868093652 -69.58664256999616 -20.800000000000026 + vertex 179.57468324101112 -69.55938323102744 -20.385889527835992 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 179.57468324101112 -69.55938323102744 -20.385889527835992 + vertex 179.71310932699166 -69.47946289302372 -20.000000000000025 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 179.71310932699166 -69.47946289302372 -20.000000000000025 + vertex 179.93331342987838 -69.35232799494541 -19.668629150101555 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 179.93331342987838 -69.35232799494541 -19.668629150101555 + vertex 180.22028900396413 -69.18664256999621 -19.414359353944917 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 180.22028900396413 -69.18664256999621 -19.414359353944917 + vertex 180.55447913812446 -68.99369780607823 -19.2545186779375 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 180.55447913812446 -68.99369780607823 -19.2545186779375 + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.17648367957491 -68.05723304744475 -22.96592582628912 + vertex 177.44900771185388 -70.7866425699962 -23.000000000000053 + vertex 181.9523398115329 -68.18664256999598 -23.000000000000057 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.44900771185388 -70.7866425699962 -23.000000000000053 + vertex 182.17648367957491 -68.05723304744475 -22.96592582628912 + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + vertex 182.17648367957491 -68.05723304744475 -22.96592582628912 + vertex 182.38535251342515 -67.93664256999604 -22.86602540378449 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + vertex 182.38535251342515 -67.93664256999604 -22.86602540378449 + vertex 182.5647122472287 -67.83308917940278 -22.70710678118661 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + vertex 182.5647122472287 -67.83308917940278 -22.70710678118661 + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.4490077118538 -70.78664256999616 -22.600000000000055 + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + vertex 180.55447913812438 -68.99369780607809 -22.34548132206253 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034005 -70.9866425699962 -22.60000000000005 + vertex 180.55447913812438 -68.99369780607809 -22.34548132206253 + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + vertex 180.55447913812438 -68.99369780607809 -22.34548132206253 + vertex 180.22028900396407 -69.18664256999607 -22.185640646055134 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + vertex 180.22028900396407 -69.18664256999607 -22.185640646055134 + vertex 179.93331342987832 -69.35232799494533 -21.931370849898517 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + vertex 179.93331342987832 -69.35232799494533 -21.931370849898517 + vertex 179.71310932699166 -69.47946289302368 -21.600000000000023 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + vertex 179.71310932699166 -69.47946289302368 -21.600000000000023 + vertex 179.57468324101114 -69.5593832310274 -21.214110472164055 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.10259755034016 -70.9866425699962 -21.200000000000053 + vertex 179.57468324101114 -69.5593832310274 -21.214110472164055 + vertex 179.00785343866588 -69.88664256999613 -21.200000000000056 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.8672146430923 -74.58664256999637 -23.000000000000036 + vertex 166.13973867537123 -77.31605209254772 -22.9659258262891 + vertex 166.36388254341324 -77.18664256999647 -23.00000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.13973867537123 -77.31605209254772 -22.9659258262891 + vertex 170.8672146430923 -74.58664256999637 -23.000000000000036 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.13973867537123 -77.31605209254772 -22.9659258262891 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 165.93086984152103 -77.43664256999645 -22.866025403784477 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.93086984152103 -77.43664256999645 -22.866025403784477 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 165.75151010771745 -77.54019596058976 -22.707106781186592 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.75151010771745 -77.54019596058976 -22.707106781186592 + vertex 170.8672146430922 -74.58664256999637 -22.60000000000004 + vertex 165.61388254341324 -77.61965527188875 -22.50000000000003 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.78885611527073 -67.7036796568515 -22.258819045102573 + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + vertex 182.7023398115329 -67.75362986810383 -22.50000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.91310932699167 -68.78664256999606 -22.400000000000023 + vertex 182.78885611527073 -67.7036796568515 -22.258819045102573 + vertex 181.2717395158588 -68.57958733391403 -22.345481322062533 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.2717395158588 -68.57958733391403 -22.345481322062533 + vertex 182.78885611527073 -67.7036796568515 -22.258819045102573 + vertex 181.6059296500192 -68.38664256999607 -22.185640646055123 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.6059296500192 -68.38664256999607 -22.185640646055123 + vertex 182.78885611527073 -67.7036796568515 -22.258819045102573 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.6059296500192 -68.38664256999607 -22.185640646055123 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + vertex 181.89290522410485 -68.22095714504677 -21.931370849898506 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.89290522410485 -68.22095714504677 -21.931370849898506 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + vertex 182.11310932699158 -68.09382224696846 -21.600000000000016 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.11310932699158 -68.09382224696846 -21.600000000000016 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + vertex 182.8183652153173 -67.68664256999605 -22.00000000000006 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.2515354129721 -68.01390190896478 -21.214110472164048 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 182.29874997304668 -67.98664256999602 -20.800000000000015 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.29874997304668 -67.98664256999602 -20.800000000000015 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 182.25153541297215 -68.01390190896487 -20.385889527835985 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.25153541297215 -68.01390190896487 -20.385889527835985 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 182.1131093269916 -68.0938222469685 -20.000000000000018 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.1131093269916 -68.0938222469685 -20.000000000000018 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 181.89290522410488 -68.2209571450469 -19.668629150101545 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.89290522410488 -68.2209571450469 -19.668629150101545 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 181.60592965001922 -68.38664256999616 -19.414359353944903 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.60592965001922 -68.38664256999616 -19.414359353944903 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 181.27173951585885 -68.57958733391409 -19.254518677937508 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.27173951585885 -68.57958733391409 -19.254518677937508 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 180.9131093269916 -68.78664256999612 -19.200000000000006 + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 182.81836521531744 -67.68664256999622 -16.800000000000093 + vertex 182.4719550538037 -67.88664256999623 -16.80000000000009 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + vertex 182.4719550538037 -67.88664256999623 -16.80000000000009 + vertex 181.25951948850548 -68.58664256999624 -16.400000000000063 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.25951948850548 -68.58664256999624 -16.400000000000063 + vertex 182.4719550538037 -67.88664256999623 -16.80000000000009 + vertex 182.47195505380364 -67.88664256999623 -16.400000000000095 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 176.872507222919 -71.11948528247122 -9.300000000000056 + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.872507222919 -71.11948528247122 -9.300000000000056 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.872507222919 -71.11948528247122 -9.300000000000056 + vertex 179.49775138722282 -69.60379985752196 -7.40000000000004 + vertex 179.0078534386661 -69.88664256999658 -6.834314575050805 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 181.2595194885056 -68.58664256999643 -9.600000000000035 + vertex 182.47195505380378 -67.88664256999637 -9.60000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 181.2595194885056 -68.58664256999643 -9.600000000000035 + vertex 182.47195505380378 -67.88664256999641 -9.20000000000005 + vertex 181.25951948850562 -68.58664256999647 -7.40000000000004 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 174.76329962118663 -72.33723685910802 -15.607999730980517 + vertex 174.1581111774732 -72.68664256999645 -15.700000000000038 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 174.76329962118663 -72.33723685910802 -15.607999730980517 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 175.32724547258218 -72.01164256999641 -15.338268590218007 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.32724547258218 -72.01164256999641 -15.338268590218007 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 175.81151675385183 -71.73204841539457 -14.909188309203735 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.81151675385183 -71.73204841539457 -14.909188309203735 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 176.18311117747322 -71.51750827488746 -14.350000000000055 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.18311117747322 -71.51750827488746 -14.350000000000055 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 176.41670519756528 -71.3826427045062 -13.698811421776844 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.41670519756528 -71.3826427045062 -13.698811421776844 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.41670519756528 -71.3826427045062 -13.698811421776844 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 176.4963797676912 -71.33664256999649 -13.000000000000046 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.4963797676912 -71.33664256999649 -13.000000000000046 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 176.41670519756528 -71.3826427045062 -12.30118857822325 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.41670519756528 -71.3826427045062 -12.30118857822325 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 176.18311117747325 -71.51750827488755 -11.650000000000038 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.18311117747325 -71.51750827488755 -11.650000000000038 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 175.81151675385195 -71.73204841539476 -11.09081169079636 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.81151675385195 -71.73204841539476 -11.09081169079636 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 175.3272454725822 -72.01164256999655 -10.661731409782071 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 175.3272454725822 -72.01164256999655 -10.661731409782071 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 174.76329962118677 -72.33723685910824 -10.392000269019562 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 174.76329962118677 -72.33723685910824 -10.392000269019562 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 174.15811117747327 -72.68664256999666 -10.30000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 174.15811117747327 -72.68664256999666 -10.30000000000005 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 177.36240517147564 -70.83664256999656 -9.865685424949291 + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + vertex 171.44371513202762 -74.25379985752217 -9.300000000000061 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.81847096772393 -75.76948528247148 -7.400000000000051 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + vertex 171.21362480460635 -74.38664256999687 -4.80000000000007 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 168.74153911393532 -75.81390190896572 -4.785889527836001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.74153911393532 -75.81390190896572 -4.785889527836001 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 168.60311302795486 -75.89382224696935 -4.400000000000034 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795486 -75.89382224696935 -4.400000000000034 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 168.3829089250682 -76.02095714504779 -4.068629150101538 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.3829089250682 -76.02095714504779 -4.068629150101538 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 168.09593335098245 -76.186642569997 -3.8143593539449228 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.09593335098245 -76.186642569997 -3.8143593539449228 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 167.76174321682208 -76.37958733391503 -3.6545186779375283 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682208 -76.37958733391503 -3.6545186779375283 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 167.40311302795487 -76.58664256999705 -3.600000000000033 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.40311302795487 -76.58664256999705 -3.600000000000033 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 171.21362480460635 -74.38664256999691 -3.40000000000005 + vertex 170.86721464309258 -74.58664256999695 -3.400000000000036 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 170.86721464309258 -74.58664256999695 -3.400000000000036 + vertex 165.7515101077178 -77.5401959605903 -3.29289321881348 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.7515101077178 -77.5401959605903 -3.29289321881348 + vertex 170.86721464309258 -74.58664256999695 -3.400000000000036 + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.7515101077178 -77.5401959605903 -3.29289321881348 + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 165.93086984152146 -77.43664256999712 -3.133974596215596 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.93086984152146 -77.43664256999712 -3.133974596215596 + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 166.1397386753716 -77.31605209254836 -3.0340741737109713 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.1397386753716 -77.31605209254836 -3.0340741737109713 + vertex 170.86721464309264 -74.58664256999695 -3.000000000000037 + vertex 166.3638825434136 -77.18664256999709 -3.000000000000034 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 165.84426730114282 -77.48664256999689 -9.60000000000002 + vertex 167.05670286644101 -76.78664256999687 -9.600000000000044 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.84426730114282 -77.48664256999689 -9.60000000000002 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 165.84426730114282 -77.48664256999693 -9.20000000000002 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.84426730114282 -77.48664256999693 -9.20000000000002 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 165.49785713962913 -77.68664256999693 -9.20000000000002 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962913 -77.68664256999693 -9.20000000000002 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 166.20311302795486 -77.27946289302447 -6.000000000000051 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962913 -77.68664256999693 -9.20000000000002 + vertex 166.20311302795486 -77.27946289302447 -6.000000000000051 + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962913 -77.68664256999693 -9.20000000000002 + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.20311302795486 -77.27946289302447 -6.000000000000051 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 166.42331713084158 -77.15232799494622 -6.331370849898522 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.42331713084158 -77.15232799494622 -6.331370849898522 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 166.7102927049273 -76.98664256999696 -6.585640646055159 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 166.7102927049273 -76.98664256999696 -6.585640646055159 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 167.0444828390876 -76.79369780607898 -6.745481322062554 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.0444828390876 -76.79369780607898 -6.745481322062554 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 167.40311302795493 -76.58664256999695 -6.80000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.40311302795493 -76.58664256999695 -6.80000000000005 + vertex 167.05670286644107 -76.78664256999691 -7.400000000000048 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 166.0646869419744 -77.35938323102825 -5.614110472164084 + vertex 166.01747238189978 -77.38664256999695 -5.200000000000053 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 166.01747238189978 -77.38664256999695 -5.200000000000053 + vertex 166.06468694197437 -77.35938323102829 -4.78588952783602 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 166.06468694197437 -77.35938323102829 -4.78588952783602 + vertex 166.20311302795488 -77.27946289302452 -4.400000000000054 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 166.20311302795488 -77.27946289302452 -4.400000000000054 + vertex 166.4233171308416 -77.1523279949463 -4.068629150101582 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 166.4233171308416 -77.1523279949463 -4.068629150101582 + vertex 166.71029270492735 -76.98664256999704 -3.8143593539449454 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.49785713962922 -77.68664256999712 -4.000000000000029 + vertex 166.71029270492735 -76.98664256999704 -3.8143593539449454 + vertex 165.52736623967576 -77.66960548314157 -3.741180954897518 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967576 -77.66960548314157 -3.741180954897518 + vertex 166.71029270492735 -76.98664256999704 -3.8143593539449454 + vertex 167.04448283908772 -76.79369780607912 -3.6545186779375283 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.52736623967576 -77.66960548314157 -3.741180954897518 + vertex 167.04448283908772 -76.79369780607912 -3.6545186779375283 + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 165.6138825434136 -77.61965527188929 -3.50000000000003 + vertex 167.04448283908772 -76.79369780607912 -3.6545186779375283 + vertex 167.40311302795487 -76.58664256999705 -3.600000000000033 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 167.76174321682203 -76.37958733391484 -6.745481322062554 + vertex 167.40311302795493 -76.58664256999695 -6.80000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 167.76174321682203 -76.37958733391484 -6.745481322062554 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 168.09593335098245 -76.18664256999696 -6.585640646055137 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.09593335098245 -76.18664256999696 -6.585640646055137 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 168.3829089250681 -76.0209571450476 -6.3313708498985 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.3829089250681 -76.0209571450476 -6.3313708498985 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 168.60311302795486 -75.89382224696935 -6.000000000000031 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795486 -75.89382224696935 -6.000000000000031 + vertex 169.30836891628059 -75.48664256999689 -6.834314575050794 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.60311302795486 -75.89382224696935 -6.000000000000031 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + vertex 168.7415391139354 -75.81390190896572 -5.6141104721640644 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.7415391139354 -75.81390190896572 -5.6141104721640644 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + vertex 168.78875367400994 -75.78664256999687 -5.200000000000033 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.78875367400994 -75.78664256999687 -5.200000000000033 + vertex 169.30836891628059 -75.48664256999693 -4.800000000000056 + vertex 168.74153911393532 -75.81390190896572 -4.785889527836001 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 179.49775138722254 -69.6037998575216 -18.60000000000005 + vertex 176.8725072229189 -71.11948528247095 -16.700000000000063 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 179.49775138722254 -69.6037998575216 -18.60000000000005 + vertex 179.00785343866593 -69.88664256999623 -19.16568542494932 + vertex 181.25951948850548 -68.5866425699962 -18.60000000000006 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.8725072229189 -71.11948528247095 -16.700000000000063 + vertex 179.49775138722254 -69.6037998575216 -18.60000000000005 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 176.8725072229189 -71.11948528247095 -16.700000000000063 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 177.36240517147556 -70.83664256999637 -16.134314575050784 + vertex 174.1581111774732 -72.68664256999645 -15.700000000000038 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 174.1581111774732 -72.68664256999645 -15.700000000000038 + vertex 173.55292273375974 -73.03604828088491 -15.607999730980529 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 173.55292273375974 -73.03604828088491 -15.607999730980529 + vertex 172.98897688236423 -73.36164256999652 -15.33826859021802 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 172.98897688236423 -73.36164256999652 -15.33826859021802 + vertex 172.50470560109457 -73.64123672459836 -14.909188309203731 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 172.50470560109457 -73.64123672459836 -14.909188309203731 + vertex 172.13311117747327 -73.85577686510557 -14.350000000000053 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 172.13311117747327 -73.85577686510557 -14.350000000000053 + vertex 171.89951715738118 -73.99064243548682 -13.698811421776819 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + vertex 171.89951715738118 -73.99064243548682 -13.698811421776819 + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 171.89951715738118 -73.99064243548682 -13.698811421776819 + vertex 171.8198425872553 -74.03664256999663 -13.000000000000021 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 171.8198425872553 -74.03664256999663 -13.000000000000021 + vertex 171.89951715738127 -73.99064243548692 -12.3011885782232 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 171.89951715738127 -73.99064243548692 -12.3011885782232 + vertex 172.1331111774733 -73.85577686510561 -11.650000000000011 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 172.1331111774733 -73.85577686510561 -11.650000000000011 + vertex 172.5047056010947 -73.64123672459854 -11.090811690796333 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 172.5047056010947 -73.64123672459854 -11.090811690796333 + vertex 172.98897688236434 -73.3616425699967 -10.661731409782044 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 172.98897688236434 -73.3616425699967 -10.661731409782044 + vertex 173.5529227337599 -73.0360482808851 -10.39200026901956 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 170.9538171834709 -74.5366425699967 -9.865685424949328 + vertex 173.5529227337599 -73.0360482808851 -10.39200026901956 + vertex 174.15811117747327 -72.68664256999666 -10.30000000000005 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + vertex 168.81847096772375 -75.76948528247121 -18.60000000000005 + vertex 169.30836891628033 -75.48664256999649 -19.165685424949274 + endloop +endfacet +facet normal 0.4999999999999999 -0.8660254037844389 -2.975049770103308e-16 + outer loop + vertex 168.81847096772375 -75.76948528247121 -18.60000000000005 + vertex 171.44371513202742 -74.25379985752184 -16.700000000000028 + vertex 170.95381718347082 -74.53664256999652 -16.134314575050794 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + vertex 17.40311302795556 183.22097856533372 -6.799999999999959 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + vertex 17.04448283908832 183.0139233292517 -6.745481322062464 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.76174321682278 183.42803380141575 -6.745481322062464 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + vertex 16.71029270492801 182.82097856533372 -6.58564064605507 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.09593335098308 183.62097856533376 -6.5856406460550465 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + vertex 16.423317130842303 182.6552931403844 -6.331370849898432 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.382908925068815 183.78666399028296 -6.331370849898409 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 16.203113027955567 182.5281582423061 -5.999999999999961 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.603113027955537 183.91379888836127 -5.999999999999941 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + vertex 16.06468694197509 182.4482379043024 -5.614110472163994 + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.74153911393604 183.993719226365 -5.614110472163975 + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + vertex 16.01747238190049 182.42097856533363 -5.199999999999962 + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.788753674010618 184.0209785653337 -5.1999999999999424 + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 16.064686941975086 182.44823790430237 -4.785889527835931 + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.741539113936042 183.99371922636496 -4.785889527835911 + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + vertex 16.20311302795559 182.52815824230606 -4.399999999999964 + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.603113027955562 183.91379888836124 -4.399999999999944 + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + vertex 16.423317130842317 182.65529314038437 -4.068629150101493 + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.38290892506884 183.78666399028288 -4.068629150101447 + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + vertex 16.710292704928023 182.8209785653336 -3.8143593539448553 + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 18.095933350983124 183.62097856533364 -3.8143593539448326 + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + endloop +endfacet +facet normal -0.4999999999999999 0.8660254037844389 2.970018574227152e-16 + outer loop + vertex 17.761743216822772 183.42803380141564 -3.654518677937438 + vertex 17.04448283908838 183.01392332925155 -3.654518677937438 + vertex 17.403113027955573 183.2209785653336 -3.599999999999943 + endloop +endfacet +facet normal -0.14720786925725476 -0.989105577392393 -3.150966317595318e-16 + outer loop + vertex -153.21066695824285 -123.85676701721619 617.4 + vertex -154.80461230967546 -123.6195412808944 597.4 + vertex -153.21066695824285 -123.85676701721619 597.4 + endloop +endfacet +facet normal -0.14720786925725476 -0.989105577392393 -3.150966317595318e-16 + outer loop + vertex -154.80461230967546 -123.6195412808944 597.4 + vertex -153.21066695824285 -123.85676701721619 617.4 + vertex -154.80461230967546 -123.6195412808944 617.4 + endloop +endfacet +facet normal 1.0 -8.881784197001248e-16 1.4922322636808805e-17 + outer loop + vertex -150.00000000000014 -121.12479659831224 617.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -150.0000000000001 -104.43433599533701 617.4 + endloop +endfacet +facet normal 1.0 -8.881784197001248e-16 1.4922322636808805e-17 + outer loop + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -150.00000000000014 -121.12479659831224 617.4 + vertex -150.00000000000014 -121.12479659831224 597.4 + endloop +endfacet +facet normal 1.0 -8.881784197001248e-16 1.4922322636808805e-17 + outer loop + vertex -150.00000000000014 -121.12479659831224 597.4 + vertex -150.00000000000014 -121.12479659831224 617.4 + vertex -150.0000000000001 -124.13030787576982 617.4 + endloop +endfacet +facet normal 1.0 -8.881784197001248e-16 1.4922322636808805e-17 + outer loop + vertex -150.00000000000014 -121.12479659831224 597.4 + vertex -150.0000000000001 -124.13030787576982 617.4 + vertex -150.0000000000001 -124.13030787576982 597.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -145.29278799932132 -42.78581879748479 604.4 + vertex -157.6927879993214 -64.26324881133867 604.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -145.29278799932132 -42.78581879748479 604.4 + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -158.55881340310586 -65.76324881133868 605.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + vertex -158.55881340310586 -65.76324881133868 605.4 + vertex -144.42676259553681 -41.28581879748483 605.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.42676259553681 -41.28581879748483 605.4 + vertex -158.55881340310586 -65.76324881133868 605.4 + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.42676259553681 -41.28581879748483 605.4 + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + vertex -158.6927879993214 -65.99529961890755 608.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + vertex -158.6927879993214 -65.99529961890755 608.4 + vertex -144.29278799932126 -41.053767989915976 608.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -158.6927879993214 -65.99529961890755 608.4 + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + vertex -158.55881340310586 -65.76324881133868 609.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + vertex -158.55881340310586 -65.76324881133868 609.4 + vertex -144.42676259553681 -41.28581879748483 609.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.42676259553681 -41.28581879748483 609.4 + vertex -158.55881340310586 -65.76324881133868 609.4 + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.42676259553681 -41.28581879748483 609.4 + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + endloop +endfacet +facet normal -0.19134171618256532 -0.33141357403566385 -0.9238795325112568 + outer loop + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + vertex -159.68365785199265 -63.7115365474229 604.4681483474218 + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + endloop +endfacet +facet normal -0.19134171618256532 -0.33141357403566385 -0.9238795325112568 + outer loop + vertex -159.68365785199265 -63.7115365474229 604.4681483474218 + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + vertex -159.92483880689014 -64.12927421512332 604.6679491924311 + endloop +endfacet +facet normal -0.49572243068686456 -0.8586164364012856 -0.1305261922200442 + outer loop + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + vertex -160.42483880689014 -64.99529961890775 606.3999999999999 + vertex -160.3907646331792 -64.9362814188145 605.8823619097949 + endloop +endfacet +facet normal -0.49572243068686456 -0.8586164364012856 -0.1305261922200442 + outer loop + vertex -160.42483880689014 -64.99529961890775 606.3999999999999 + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + endloop +endfacet +facet normal -0.30438071450432724 -0.5272028623656702 -0.7933533402912473 + outer loop + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -159.92483880689014 -64.12927421512332 604.6679491924311 + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + endloop +endfacet +facet normal -0.30438071450432724 -0.5272028623656702 -0.7933533402912473 + outer loop + vertex -159.92483880689014 -64.12927421512332 604.6679491924311 + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -160.1319455880767 -64.48799368273046 604.9857864376269 + endloop +endfacet +facet normal -0.49572243068686606 -0.858616436401288 0.13052619222002182 + outer loop + vertex -160.42483880689014 -64.99529961890775 608.4 + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + vertex -160.3907646331792 -64.9362814188145 608.9176380902051 + endloop +endfacet +facet normal -0.49572243068686606 -0.858616436401288 0.13052619222002182 + outer loop + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + vertex -160.42483880689014 -64.99529961890775 608.4 + vertex -158.6927879993214 -65.99529961890755 608.4 + endloop +endfacet +facet normal -0.4619397662555923 -0.8001031451912654 0.38268343236515195 + outer loop + vertex -160.3907646331792 -64.9362814188145 608.9176380902051 + vertex -158.55881340310586 -65.76324881133868 609.4 + vertex -160.29086421067458 -64.76324881133888 609.4 + endloop +endfacet +facet normal -0.4619397662555923 -0.8001031451912654 0.38268343236515195 + outer loop + vertex -158.55881340310586 -65.76324881133868 609.4 + vertex -160.3907646331792 -64.9362814188145 608.9176380902051 + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + endloop +endfacet +facet normal -0.4264730821792865 -0.9045002543816665 -3.151450949117089e-16 + outer loop + vertex -164.0346787143162 -120.8232289819003 597.4 + vertex -165.49228244115207 -120.13596687117304 617.4 + vertex -165.49228244115207 -120.13596687117304 597.4 + endloop +endfacet +facet normal -0.4264730821792865 -0.9045002543816665 -3.151450949117089e-16 + outer loop + vertex -165.49228244115207 -120.13596687117304 617.4 + vertex -164.0346787143162 -120.8232289819003 597.4 + vertex -164.0346787143162 -120.8232289819003 617.4 + endloop +endfacet +facet normal -0.19134171618255869 -0.3314135740356523 0.9238795325112623 + outer loop + vertex -159.68365785199265 -63.7115365474229 610.331851652578 + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + endloop +endfacet +facet normal -0.19134171618255869 -0.3314135740356523 0.9238795325112623 + outer loop + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + vertex -159.68365785199265 -63.7115365474229 610.331851652578 + vertex -159.92483880689014 -64.12927421512333 610.1320508075687 + endloop +endfacet +facet normal -0.46193976625560484 -0.8001031451912874 -0.3826834323650907 + outer loop + vertex -158.55881340310586 -65.76324881133868 605.4 + vertex -160.3907646331792 -64.9362814188145 605.8823619097949 + vertex -160.29086421067458 -64.76324881133888 605.4 + endloop +endfacet +facet normal -0.46193976625560484 -0.8001031451912874 -0.3826834323650907 + outer loop + vertex -160.3907646331792 -64.9362814188145 605.8823619097949 + vertex -158.55881340310586 -65.76324881133868 605.4 + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + endloop +endfacet +facet normal -0.06526309610998657 -0.11303899832175998 0.9914448613738195 + outer loop + vertex -159.42483880689014 -63.26324881133887 610.3999999999999 + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + endloop +endfacet +facet normal -0.06526309610998657 -0.11303899832175998 0.9914448613738195 + outer loop + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + vertex -159.42483880689014 -63.26324881133887 610.3999999999999 + vertex -159.68365785199265 -63.7115365474229 610.331851652578 + endloop +endfacet +facet normal -0.7838084275862288 -0.6210026963265165 -2.617941281554303e-16 + outer loop + vertex -178.02580279487614 -110.19230341949638 597.4 + vertex -179.02654971579267 -108.92919478062035 617.4 + vertex -179.02654971579267 -108.92919478062035 597.4 + endloop +endfacet +facet normal -0.7838084275862288 -0.6210026963265165 -2.617941281554303e-16 + outer loop + vertex -179.02654971579267 -108.92919478062035 617.4 + vertex -178.02580279487614 -110.19230341949638 597.4 + vertex -178.02580279487614 -110.19230341949638 617.4 + endloop +endfacet +facet normal -0.3966766701455666 -0.6870641468694378 -0.608761429008768 + outer loop + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -160.29086421067458 -64.76324881133888 605.4 + vertex -160.1319455880767 -64.48799368273046 604.9857864376269 + endloop +endfacet +facet normal -0.3966766701455666 -0.6870641468694378 -0.608761429008768 + outer loop + vertex -160.29086421067458 -64.76324881133888 605.4 + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -158.55881340310586 -65.76324881133868 605.4 + endloop +endfacet +facet normal -0.4999999999999586 -0.8660254037844628 1.5259013723954678e-31 + outer loop + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + vertex -160.42483880689014 -64.99529961890775 608.4 + vertex -160.42483880689014 -64.99529961890775 606.3999999999999 + endloop +endfacet +facet normal -0.4999999999999586 -0.8660254037844628 1.5259013723954678e-31 + outer loop + vertex -160.42483880689014 -64.99529961890775 608.4 + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + vertex -158.6927879993214 -65.99529961890755 608.4 + endloop +endfacet +facet normal -0.3966766701455756 -0.6870641468694534 0.6087614290087444 + outer loop + vertex -160.29086421067458 -64.76324881133888 609.4 + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -160.1319455880767 -64.48799368273048 609.814213562373 + endloop +endfacet +facet normal -0.3966766701455756 -0.6870641468694534 0.6087614290087444 + outer loop + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -160.29086421067458 -64.76324881133888 609.4 + vertex -158.55881340310586 -65.76324881133868 609.4 + endloop +endfacet +facet normal -0.3043807145043269 -0.5272028623656697 0.7933533402912477 + outer loop + vertex -159.92483880689014 -64.12927421512333 610.1320508075687 + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + endloop +endfacet +facet normal -0.3043807145043269 -0.5272028623656697 0.7933533402912477 + outer loop + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -159.92483880689014 -64.12927421512333 610.1320508075687 + vertex -160.1319455880767 -64.48799368273048 609.814213562373 + endloop +endfacet +facet normal 0.19134171618258172 0.331413574035647 -0.9238795325112594 + outer loop + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + vertex -146.52483880689016 -40.91979339370037 604.6679491924311 + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + endloop +endfacet +facet normal 0.19134171618258172 0.331413574035647 -0.9238795325112594 + outer loop + vertex -146.52483880689016 -40.91979339370037 604.6679491924311 + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + vertex -146.76601976178762 -41.337531061400774 604.4681483474218 + endloop +endfacet +facet normal 0.06526309610999624 0.11303899832176201 -0.9914448613738184 + outer loop + vertex -145.29278799932132 -42.78581879748479 604.4 + vertex -146.76601976178762 -41.337531061400774 604.4681483474218 + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + endloop +endfacet +facet normal 0.06526309610999624 0.11303899832176201 -0.9914448613738184 + outer loop + vertex -146.76601976178762 -41.337531061400774 604.4681483474218 + vertex -145.29278799932132 -42.78581879748479 604.4 + vertex -147.02483880689016 -41.785818797484794 604.4 + endloop +endfacet +facet normal -0.0652630961099866 -0.11303899832176004 -0.9914448613738195 + outer loop + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -159.42483880689014 -63.26324881133887 604.4 + vertex -157.6927879993214 -64.26324881133867 604.4 + endloop +endfacet +facet normal -0.0652630961099866 -0.11303899832176004 -0.9914448613738195 + outer loop + vertex -159.42483880689014 -63.26324881133887 604.4 + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -159.68365785199265 -63.7115365474229 604.4681483474218 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -157.6927879993214 -64.26324881133867 604.4 + vertex -147.02483880689016 -41.785818797484794 604.4 + vertex -145.29278799932132 -42.78581879748479 604.4 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -147.02483880689016 -41.785818797484794 604.4 + vertex -157.6927879993214 -64.26324881133867 604.4 + vertex -159.42483880689014 -63.26324881133887 604.4 + endloop +endfacet +facet normal 0.5000000000000197 0.8660254037844273 -1.5259013723954536e-31 + outer loop + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -146.02483880689016 -40.05376798991592 606.3999999999999 + vertex -146.02483880689016 -40.05376798991592 608.4 + endloop +endfacet +facet normal 0.5000000000000197 0.8660254037844273 -1.5259013723954536e-31 + outer loop + vertex -146.02483880689016 -40.05376798991592 606.3999999999999 + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + endloop +endfacet +facet normal 0.461939766255668 0.8001031451912717 -0.3826834323650471 + outer loop + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + vertex -146.15881340310568 -40.285818797484794 605.4 + vertex -146.05891298060106 -40.11278619000919 605.8823619097949 + endloop +endfacet +facet normal 0.461939766255668 0.8001031451912717 -0.3826834323650471 + outer loop + vertex -146.15881340310568 -40.285818797484794 605.4 + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + vertex -144.42676259553681 -41.28581879748483 605.4 + endloop +endfacet +facet normal 0.39667667014561536 0.6870641468694197 -0.6087614290087563 + outer loop + vertex -144.42676259553681 -41.28581879748483 605.4 + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + vertex -146.15881340310568 -40.285818797484794 605.4 + endloop +endfacet +facet normal 0.39667667014561536 0.6870641468694197 -0.6087614290087563 + outer loop + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + vertex -144.42676259553681 -41.28581879748483 605.4 + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + endloop +endfacet +facet normal 0.4957224306869252 0.8586164364012507 0.13052619222004302 + outer loop + vertex -146.05891298060106 -40.11278619000919 608.9176380902051 + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -146.02483880689016 -40.05376798991592 608.4 + endloop +endfacet +facet normal 0.4957224306869252 0.8586164364012507 0.13052619222004302 + outer loop + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -146.05891298060106 -40.11278619000919 608.9176380902051 + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + endloop +endfacet +facet normal 0.30438071450435705 0.5272028623656463 -0.7933533402912516 + outer loop + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + endloop +endfacet +facet normal 0.30438071450435705 0.5272028623656463 -0.7933533402912516 + outer loop + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + vertex -146.52483880689016 -40.91979339370037 604.6679491924311 + endloop +endfacet +facet normal 0.4957224306869231 0.8586164364012471 -0.1305261922200746 + outer loop + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + vertex -146.05891298060106 -40.11278619000919 605.8823619097949 + vertex -146.02483880689016 -40.05376798991592 606.3999999999999 + endloop +endfacet +facet normal 0.4957224306869231 0.8586164364012471 -0.1305261922200746 + outer loop + vertex -146.05891298060106 -40.11278619000919 605.8823619097949 + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + endloop +endfacet +facet normal 0.4619397662556538 0.800103145191247 0.3826834323651163 + outer loop + vertex -146.15881340310568 -40.285818797484794 609.4 + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + vertex -146.05891298060106 -40.11278619000919 608.9176380902051 + endloop +endfacet +facet normal 0.4619397662556538 0.800103145191247 0.3826834323651163 + outer loop + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + vertex -146.15881340310568 -40.285818797484794 609.4 + vertex -144.42676259553681 -41.28581879748483 609.4 + endloop +endfacet +facet normal 0.06526309610999628 0.11303899832176209 0.9914448613738184 + outer loop + vertex -146.76601976178762 -41.337531061400774 610.331851652578 + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + endloop +endfacet +facet normal 0.06526309610999628 0.11303899832176209 0.9914448613738184 + outer loop + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + vertex -146.76601976178762 -41.337531061400774 610.331851652578 + vertex -147.02483880689016 -41.785818797484794 610.3999999999999 + endloop +endfacet +facet normal 0.19134171618258172 0.331413574035647 0.9238795325112594 + outer loop + vertex -146.52483880689016 -40.91979339370037 610.1320508075687 + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + endloop +endfacet +facet normal 0.19134171618258172 0.331413574035647 0.9238795325112594 + outer loop + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + vertex -146.52483880689016 -40.91979339370037 610.1320508075687 + vertex -146.76601976178762 -41.337531061400774 610.331851652578 + endloop +endfacet +facet normal 0.30438071450435705 0.5272028623656463 0.7933533402912516 + outer loop + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + endloop +endfacet +facet normal 0.30438071450435705 0.5272028623656463 0.7933533402912516 + outer loop + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + vertex -146.52483880689016 -40.91979339370037 610.1320508075687 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex -147.02483880689016 -41.785818797484794 610.3999999999999 + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + vertex -147.02483880689016 -41.785818797484794 610.3999999999999 + vertex -159.42483880689014 -63.26324881133887 610.3999999999999 + endloop +endfacet +facet normal 0.3966766701456155 0.6870641468694199 0.6087614290087562 + outer loop + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + vertex -144.42676259553681 -41.28581879748483 609.4 + vertex -146.15881340310568 -40.285818797484794 609.4 + endloop +endfacet +facet normal 0.3966766701456155 0.6870641468694199 0.6087614290087562 + outer loop + vertex -144.42676259553681 -41.28581879748483 609.4 + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + endloop +endfacet +facet normal -0.5711695004343966 -0.8208321398273353 -3.0302967770913997e-16 + outer loop + vertex -169.67504648826252 -117.71735841031698 597.4 + vertex -170.99781890355266 -116.79691777090856 617.4 + vertex -170.99781890355266 -116.79691777090856 597.4 + endloop +endfacet +facet normal -0.5711695004343966 -0.8208321398273353 -3.0302967770913997e-16 + outer loop + vertex -170.99781890355266 -116.79691777090856 617.4 + vertex -169.67504648826252 -117.71735841031698 597.4 + vertex -169.67504648826252 -117.71735841031698 617.4 + endloop +endfacet +facet normal -0.6049992586789363 -0.7962260338609493 -2.986595129490501e-16 + outer loop + vertex -170.99781890355266 -116.79691777090856 597.4 + vertex -172.28093853645186 -115.8219604174845 617.4 + vertex -172.28093853645186 -115.8219604174845 597.4 + endloop +endfacet +facet normal -0.6049992586789363 -0.7962260338609493 -2.986595129490501e-16 + outer loop + vertex -172.28093853645186 -115.8219604174845 617.4 + vertex -170.99781890355266 -116.79691777090856 597.4 + vertex -170.99781890355266 -116.79691777090856 617.4 + endloop +endfacet +facet normal -0.7291677277631985 -0.6843350237921877 -2.760426732024953e-16 + outer loop + vertex -175.8702976548973 -112.58750790128379 597.4 + vertex -176.9731047312377 -111.4124528448287 617.4 + vertex -176.9731047312377 -111.4124528448287 597.4 + endloop +endfacet +facet normal -0.7291677277631985 -0.6843350237921877 -2.760426732024953e-16 + outer loop + vertex -176.9731047312377 -111.4124528448287 617.4 + vertex -175.8702976548973 -112.58750790128379 597.4 + vertex -175.8702976548973 -112.58750790128379 617.4 + endloop +endfacet +facet normal -0.536340245259425 -0.8440018609665858 -3.06869566898727e-16 + outer loop + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -169.67504648826252 -117.71735841031698 617.4 + vertex -169.67504648826252 -117.71735841031698 597.4 + endloop +endfacet +facet normal -0.536340245259425 -0.8440018609665858 -3.06869566898727e-16 + outer loop + vertex -169.67504648826252 -117.71735841031698 617.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -168.31493602721872 -118.58167164467494 617.4 + endloop +endfacet +facet normal -0.30989713538576086 -0.9507700907578549 -3.1846312298286416e-16 + outer loop + vertex -159.5074986797672 -122.51137082887453 597.4 + vertex -161.03966632807825 -122.01197105835392 617.4 + vertex -161.03966632807825 -122.01197105835392 597.4 + endloop +endfacet +facet normal -0.30989713538576086 -0.9507700907578549 -3.1846312298286416e-16 + outer loop + vertex -161.03966632807825 -122.01197105835392 617.4 + vertex -159.5074986797672 -122.51137082887453 597.4 + vertex -159.5074986797672 -122.51137082887453 617.4 + endloop +endfacet +facet normal -0.9659258262890695 0.2588190451025158 -1.047433653618773e-17 + outer loop + vertex -121.3011598162272 -97.75284783852477 597.4 + vertex -121.11730055134134 -97.06667572052851 617.4 + vertex -121.11730055134134 -97.06667572052851 597.4 + endloop +endfacet +facet normal -0.9659258262890695 0.2588190451025158 -1.047433653618773e-17 + outer loop + vertex -121.11730055134134 -97.06667572052851 617.4 + vertex -121.3011598162272 -97.75284783852477 597.4 + vertex -121.3011598162272 -97.75284783852477 617.4 + endloop +endfacet +facet normal -0.699908923976171 -0.7142321038279633 -2.8244839711310877e-16 + outer loop + vertex -174.7193113822874 -113.71541234474994 597.4 + vertex -175.8702976548973 -112.58750790128379 617.4 + vertex -175.8702976548973 -112.58750790128379 597.4 + endloop +endfacet +facet normal -0.699908923976171 -0.7142321038279633 -2.8244839711310877e-16 + outer loop + vertex -175.8702976548973 -112.58750790128379 617.4 + vertex -174.7193113822874 -113.71541234474994 597.4 + vertex -174.7193113822874 -113.71541234474994 617.4 + endloop +endfacet +facet normal -0.34938986583037857 -0.9369774392454868 -3.179127878275188e-16 + outer loop + vertex -161.03966632807825 -122.01197105835392 597.4 + vertex -162.54960709458362 -121.44892868430706 617.4 + vertex -162.54960709458362 -121.44892868430706 597.4 + endloop +endfacet +facet normal -0.34938986583037857 -0.9369774392454868 -3.179127878275188e-16 + outer loop + vertex -162.54960709458362 -121.44892868430706 617.4 + vertex -161.03966632807825 -122.01197105835392 597.4 + vertex -161.03966632807825 -122.01197105835392 617.4 + endloop +endfacet +facet normal -0.9063077870366506 -0.42261826174069833 -2.1265981455630452e-16 + outer loop + vertex -121.3011598162272 -94.96515470653598 597.4 + vertex -121.6013783836058 -94.32133391112707 617.4 + vertex -121.6013783836058 -94.32133391112707 597.4 + endloop +endfacet +facet normal -0.9063077870366506 -0.42261826174069833 -2.1265981455630452e-16 + outer loop + vertex -121.6013783836058 -94.32133391112707 617.4 + vertex -121.3011598162272 -94.96515470653598 597.4 + vertex -121.3011598162272 -94.965154706536 617.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -137.79748853770056 -29.803579312014033 597.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.19278799932138 -65.12927421512313 604.6679491924311 + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -157.9516070444239 -64.71153654742272 604.4681483474218 + vertex -157.6927879993214 -64.26324881133867 604.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.39989478050794 -65.48799368273026 604.9857864376269 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.55881340310586 -65.76324881133868 605.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.55881340310586 -65.76324881133868 605.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.65871382561045 -65.93628141881432 605.8823619097949 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.6927879993214 -65.99529961890755 606.3999999999999 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.6927879993214 -65.99529961890755 608.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.6927879993214 -65.99529961890755 608.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.65871382561045 -65.93628141881432 608.9176380902051 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.55881340310586 -65.76324881133868 609.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.55881340310586 -65.76324881133868 609.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.39989478050796 -65.48799368273028 609.814213562373 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -158.19278799932138 -65.12927421512315 610.1320508075687 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -157.9516070444239 -64.71153654742272 610.331851652578 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -157.6927879993214 -64.26324881133867 610.3999999999999 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + vertex -137.79748853770056 -29.80357931201404 617.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -144.7927879993213 -41.919793393700374 604.6679491924311 + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -145.03396895421878 -42.33753106140079 604.4681483474218 + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -145.29278799932132 -42.78581879748479 604.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -145.29278799932132 -42.78581879748479 604.4 + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -157.6927879993214 -64.26324881133867 604.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.5856812181347 -41.561073926093236 604.9857864376269 + vertex -144.42676259553681 -41.28581879748483 605.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.42676259553681 -41.28581879748483 605.4 + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.3268621730322 -41.11278619000924 605.8823619097949 + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.29278799932126 -41.053767989915976 606.3999999999999 + vertex -144.29278799932126 -41.053767989915976 608.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.29278799932126 -41.053767989915976 608.4 + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.3268621730322 -41.11278619000924 608.9176380902051 + vertex -144.42676259553681 -41.28581879748483 609.4 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.42676259553681 -41.28581879748483 609.4 + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.5856812181347 -41.561073926093236 609.814213562373 + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -144.7927879993213 -41.919793393700374 610.1320508075687 + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -145.03396895421878 -42.33753106140079 610.331851652578 + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 7.227945163972772e-17 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -145.29278799932132 -42.78581879748479 610.3999999999999 + vertex -165.44278799932133 -77.68664256999766 617.4 + endloop +endfacet +facet normal 0.5829334262945255 0.8125199200687483 3.015844579888884e-16 + outer loop + vertex -135.82629141839357 -29.354089569230858 617.4 + vertex -136.2201382685109 -29.07152850444516 597.4 + vertex -136.2201382685109 -29.07152850444516 617.4 + endloop +endfacet +facet normal 0.5829334262945255 0.8125199200687483 3.015844579888884e-16 + outer loop + vertex -136.2201382685109 -29.07152850444516 597.4 + vertex -135.82629141839357 -29.354089569230858 617.4 + vertex -135.82629141839357 -29.35408956923085 597.4 + endloop +endfacet +facet normal -0.9572353791850615 -0.28931026396661363 -1.7673928161385297e-16 + outer loop + vertex -184.97256682717622 -97.55697806144181 597.4 + vertex -185.43879081874147 -96.01439158963024 617.4 + vertex -185.43879081874147 -96.01439158963024 597.4 + endloop +endfacet +facet normal -0.9572353791850615 -0.28931026396661363 -1.7673928161385297e-16 + outer loop + vertex -185.43879081874147 -96.01439158963024 617.4 + vertex -184.97256682717622 -97.55697806144181 597.4 + vertex -184.97256682717622 -97.55697806144181 617.4 + endloop +endfacet +facet normal -0.9922171154055797 0.12451986145282407 -5.3840833328123333e-17 + outer loop + vertex -186.65332502274782 -81.64658437726645 597.4 + vertex -186.45266105030615 -80.04762477693534 617.4 + vertex -186.45266105030615 -80.04762477693534 597.4 + endloop +endfacet +facet normal -0.9922171154055797 0.12451986145282407 -5.3840833328123333e-17 + outer loop + vertex -186.45266105030615 -80.04762477693534 617.4 + vertex -186.65332502274782 -81.64658437726645 597.4 + vertex -186.65332502274782 -81.64658437726645 617.4 + endloop +endfacet +facet normal -0.8962637115698704 0.4435215432456468 5.2267432081861673e-17 + outer loop + vertex -183.21473573526944 -69.28298715360742 617.4 + vertex -182.50000000000009 -67.83865662978125 597.4 + vertex -183.21473573526944 -69.28298715360742 597.4 + endloop +endfacet +facet normal -0.8962637115698704 0.4435215432456468 5.2267432081861673e-17 + outer loop + vertex -182.50000000000009 -67.83865662978125 597.4 + vertex -183.21473573526944 -69.28298715360742 617.4 + vertex -182.50000000000009 -67.83865662978125 617.4 + endloop +endfacet +facet normal -0.9861411980746706 0.16590821998880342 -4.066361857341852e-17 + outer loop + vertex -186.45266105030615 -80.04762477693534 597.4 + vertex -186.18529966638516 -78.45845652790855 617.4 + vertex -186.18529966638516 -78.45845652790855 597.4 + endloop +endfacet +facet normal -0.9861411980746706 0.16590821998880342 -4.066361857341852e-17 + outer loop + vertex -186.18529966638516 -78.45845652790855 617.4 + vertex -186.45266105030615 -80.04762477693534 597.4 + vertex -186.45266105030615 -80.04762477693534 617.4 + endloop +endfacet +facet normal 0.8660254037844396 0.49999999999999845 2.3251894735637774e-16 + outer loop + vertex -93.55470053837935 -102.43433599533701 617.4 + vertex -94.7094010767586 -100.43433599533701 597.4 + vertex -94.7094010767586 -100.43433599533701 617.4 + endloop +endfacet +facet normal 0.8660254037844396 0.49999999999999845 2.3251894735637774e-16 + outer loop + vertex -94.7094010767586 -100.43433599533701 597.4 + vertex -93.55470053837935 -102.43433599533701 617.4 + vertex -93.55470053837934 -102.43433599533701 597.4 + endloop +endfacet +facet normal -0.9780650504691567 -0.20829968087053335 -1.5397442837550508e-16 + outer loop + vertex -185.84009158351952 -94.45365601640985 597.4 + vertex -186.17576688008776 -92.87750249323994 617.4 + vertex -186.17576688008776 -92.87750249323994 597.4 + endloop +endfacet +facet normal -0.9780650504691567 -0.20829968087053335 -1.5397442837550508e-16 + outer loop + vertex -186.17576688008776 -92.87750249323994 617.4 + vertex -185.84009158351952 -94.45365601640985 597.4 + vertex -185.84009158351952 -94.45365601640985 617.4 + endloop +endfacet +facet normal 0.41219617871316855 -0.9110951159205398 -2.3956628513972264e-16 + outer loop + vertex -93.7094010767586 -104.16638680290588 617.4 + vertex -94.15102956204207 -104.36618764791513 597.4 + vertex -93.7094010767586 -104.16638680290588 597.4 + endloop +endfacet +facet normal 0.41219617871316855 -0.9110951159205398 -2.3956628513972264e-16 + outer loop + vertex -94.15102956204207 -104.36618764791513 597.4 + vertex -93.7094010767586 -104.16638680290588 617.4 + vertex -94.15102956204208 -104.36618764791513 617.4 + endloop +endfacet +facet normal -0.944298071640538 -0.3290914035582841 -1.87667623113442e-16 + outer loop + vertex -184.44223546024463 -99.07871603973358 597.4 + vertex -184.97256682717622 -97.55697806144181 617.4 + vertex -184.97256682717622 -97.55697806144181 597.4 + endloop +endfacet +facet normal -0.944298071640538 -0.3290914035582841 -1.87667623113442e-16 + outer loop + vertex -184.97256682717622 -97.55697806144181 617.4 + vertex -184.44223546024463 -99.07871603973358 597.4 + vertex -184.44223546024463 -99.07871603973358 617.4 + endloop +endfacet +facet normal -0.9134916689428522 -0.4068574329811398 -2.0852055110422157e-16 + outer loop + vertex -183.19307329363312 -102.0490360224217 597.4 + vertex -183.84872475169666 -100.57694261544432 617.4 + vertex -183.84872475169666 -100.57694261544432 597.4 + endloop +endfacet +facet normal -0.9134916689428522 -0.4068574329811398 -2.0852055110422157e-16 + outer loop + vertex -183.84872475169666 -100.57694261544432 617.4 + vertex -183.19307329363312 -102.0490360224217 597.4 + vertex -183.19307329363312 -102.0490360224217 617.4 + endloop +endfacet +facet normal -0.9576170825074752 0.2880443078588285 -7.978454901592452e-19 + outer loop + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -184.98828809559384 -73.77739412070689 597.4 + vertex -185.45247199669834 -75.32059570808379 597.4 + endloop +endfacet +facet normal -0.9576170825074752 0.2880443078588285 -7.978454901592452e-19 + outer loop + vertex -184.98828809559384 -73.77739412070689 597.4 + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -184.98828809559384 -73.77739412070689 617.4 + endloop +endfacet +facet normal 0.5000000000000007 0.8660254037844383 7.469397001332232e-32 + outer loop + vertex -179.89715088236125 -69.34141226851004 617.4 + vertex -182.50000000000009 -67.83865662978125 597.4 + vertex -182.50000000000009 -67.83865662978125 617.4 + endloop +endfacet +facet normal 0.5000000000000007 0.8660254037844383 7.469397001332232e-32 + outer loop + vertex -182.50000000000009 -67.83865662978125 597.4 + vertex -179.89715088236125 -69.34141226851004 617.4 + vertex -179.89715088236125 -69.34141226851004 597.4 + endloop +endfacet +facet normal 0.5000000000000007 0.8660254037844383 7.469397001332232e-32 + outer loop + vertex -179.89715088236125 -69.34141226851004 597.4 + vertex -179.89715088236125 -69.34141226851004 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + endloop +endfacet +facet normal 0.5000000000000007 0.8660254037844383 7.469397001332232e-32 + outer loop + vertex -179.89715088236125 -69.34141226851004 597.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -165.44278799932133 -77.68664256999766 597.4 + endloop +endfacet +facet normal -0.9297083246305115 -0.36829666182675036 -1.9826756260084607e-16 + outer loop + vertex -183.84872475169666 -100.57694261544432 597.4 + vertex -184.44223546024463 -99.07871603973358 617.4 + vertex -184.44223546024463 -99.07871603973358 597.4 + endloop +endfacet +facet normal -0.9297083246305115 -0.36829666182675036 -1.9826756260084607e-16 + outer loop + vertex -184.44223546024463 -99.07871603973358 617.4 + vertex -183.84872475169666 -100.57694261544432 597.4 + vertex -183.84872475169666 -100.57694261544432 617.4 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 3.047983989961054e-16 + outer loop + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -94.7094010767586 -100.43433599533701 597.4 + vertex -113.10682266969967 -100.43433599533701 597.4 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 3.047983989961054e-16 + outer loop + vertex -94.7094010767586 -100.43433599533701 597.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -94.7094010767586 -100.43433599533701 617.4 + endloop +endfacet +facet normal -0.9991524752349786 0.04116225494085001 -7.98897184078597e-17 + outer loop + vertex -186.85327348436152 -84.86267323343138 597.4 + vertex -186.78694043921743 -83.2525372887208 617.4 + vertex -186.78694043921743 -83.2525372887208 597.4 + endloop +endfacet +facet normal -0.9991524752349786 0.04116225494085001 -7.98897184078597e-17 + outer loop + vertex -186.78694043921743 -83.2525372887208 617.4 + vertex -186.85327348436152 -84.86267323343138 597.4 + vertex -186.85327348436152 -84.86267323343138 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -134.3333869225628 -31.80357931201403 617.4 + vertex -135.48808746094204 -29.803579312014033 597.4 + vertex -135.48808746094204 -29.803579312014033 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -135.48808746094204 -29.803579312014033 597.4 + vertex -134.3333869225628 -31.80357931201403 617.4 + vertex -134.3333869225628 -31.80357931201403 597.4 + endloop +endfacet +facet normal -0.9965567391136523 0.08291360399333735 -6.692383130898718e-17 + outer loop + vertex -186.78694043921743 -83.2525372887208 597.4 + vertex -186.65332502274782 -81.64658437726645 617.4 + vertex -186.65332502274782 -81.64658437726645 597.4 + endloop +endfacet +facet normal -0.9965567391136523 0.08291360399333735 -6.692383130898718e-17 + outer loop + vertex -186.65332502274782 -81.64658437726645 617.4 + vertex -186.78694043921743 -83.2525372887208 597.4 + vertex -186.78694043921743 -83.2525372887208 617.4 + endloop +endfacet +facet normal -0.9990971750681177 -0.042483346983344376 -1.0537964790030858e-16 + outer loop + vertex -186.78374609386333 -88.08422144198272 597.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + vertex -186.8522080811225 -86.47417461358685 597.4 + endloop +endfacet +facet normal -0.9990971750681177 -0.042483346983344376 -1.0537964790030858e-16 + outer loop + vertex -186.8522080811225 -86.47417461358685 617.4 + vertex -186.78374609386333 -88.08422144198272 597.4 + vertex -186.78374609386333 -88.08422144198272 617.4 + endloop +endfacet +facet normal 0.1211494213554494 -0.9926342819514344 -2.9134528407854775e-16 + outer loop + vertex -94.15102956204208 -104.36618764791513 617.4 + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -94.15102956204207 -104.36618764791513 597.4 + endloop +endfacet +facet normal 0.1211494213554494 -0.9926342819514344 -2.9134528407854775e-16 + outer loop + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -94.15102956204208 -104.36618764791513 617.4 + vertex -94.70940107675862 -104.43433599533701 617.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -109.18236190979502 -104.43433599533698 604.4681483474218 + vertex -150.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -109.18236190979502 -104.43433599533698 604.4681483474218 + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -108.70000000000005 -104.43433599533701 604.6679491924311 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -108.70000000000005 -104.43433599533701 604.6679491924311 + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -108.28578643762695 -104.43433599533701 604.9857864376269 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -108.28578643762695 -104.43433599533701 604.9857864376269 + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -94.70940107675862 -104.43433599533701 617.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -109.18236190979502 -104.43433599533698 604.4681483474218 + vertex -109.70000000000005 -104.43433599533701 604.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -108.28578643762695 -104.43433599533701 604.9857864376269 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -107.96794919243118 -104.43433599533698 605.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -107.96794919243118 -104.43433599533698 605.4 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -107.76814834742193 -104.43433599533701 605.8823619097949 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -107.76814834742193 -104.43433599533701 605.8823619097949 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -107.70000000000005 -104.43433599533701 606.3999999999999 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -107.70000000000005 -104.43433599533701 606.3999999999999 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -107.70000000000005 -104.43433599533701 608.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -107.70000000000005 -104.43433599533701 608.4 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -107.76814834742193 -104.43433599533701 608.9176380902051 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -107.76814834742193 -104.43433599533701 608.9176380902051 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -107.96794919243118 -104.43433599533701 609.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -107.96794919243118 -104.43433599533701 609.4 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -108.28578643762695 -104.43433599533701 609.814213562373 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -108.28578643762695 -104.43433599533701 609.814213562373 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -108.70000000000007 -104.43433599533701 610.1320508075687 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -108.70000000000007 -104.43433599533701 610.1320508075687 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -109.18236190979502 -104.43433599533701 610.331851652578 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -109.18236190979502 -104.43433599533701 610.331851652578 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -109.70000000000005 -104.43433599533701 610.3999999999999 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -109.70000000000005 -104.43433599533701 610.3999999999999 + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -134.50000000000006 -104.43433599533697 610.3999999999999 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -150.0000000000001 -104.43433599533701 617.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -135.50000000000006 -104.43433599533697 604.6679491924311 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -135.50000000000006 -104.43433599533697 604.6679491924311 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -135.0176380902051 -104.43433599533697 604.4681483474218 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -135.0176380902051 -104.43433599533697 604.4681483474218 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -134.50000000000006 -104.43433599533697 604.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -134.50000000000006 -104.43433599533697 604.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -109.70000000000005 -104.43433599533701 604.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -136.23205080756892 -104.43433599533698 605.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -136.23205080756892 -104.43433599533698 605.4 + vertex -136.43185165257822 -104.43433599533697 605.8823619097949 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -136.43185165257822 -104.43433599533697 605.8823619097949 + vertex -136.50000000000006 -104.43433599533698 606.3999999999999 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -136.50000000000006 -104.43433599533698 606.3999999999999 + vertex -136.50000000000006 -104.43433599533698 608.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -136.50000000000006 -104.43433599533698 608.4 + vertex -136.43185165257822 -104.43433599533697 608.9176380902051 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -136.43185165257822 -104.43433599533697 608.9176380902051 + vertex -136.23205080756892 -104.43433599533698 609.4 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -136.23205080756892 -104.43433599533698 609.4 + vertex -135.91421356237316 -104.43433599533698 609.814213562373 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -135.91421356237316 -104.43433599533698 609.814213562373 + vertex -135.50000000000006 -104.43433599533697 610.1320508075687 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -135.50000000000006 -104.43433599533697 610.1320508075687 + vertex -135.0176380902051 -104.43433599533697 610.331851652578 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -135.0176380902051 -104.43433599533697 610.331851652578 + vertex -134.50000000000006 -104.43433599533697 610.3999999999999 + endloop +endfacet +facet normal 3.885780586188048e-16 -1.0 -3.047983989961055e-16 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -134.50000000000006 -104.43433599533697 610.3999999999999 + vertex -94.70940107675862 -104.43433599533701 617.4 + endloop +endfacet +facet normal -0.9301944916753129 0.3670670342824406 2.5825137241488848e-17 + outer loop + vertex -184.45996930827118 -72.25495624273324 617.4 + vertex -183.86844014664098 -70.75594620798759 597.4 + vertex -184.45996930827118 -72.25495624273324 597.4 + endloop +endfacet +facet normal -0.9301944916753129 0.3670670342824406 2.5825137241488848e-17 + outer loop + vertex -183.86844014664098 -70.75594620798759 597.4 + vertex -184.45996930827118 -72.25495624273324 617.4 + vertex -183.86844014664098 -70.75594620798759 617.4 + endloop +endfacet +facet normal -0.9684976081015079 -0.24902285658480888 -1.65501661748867e-16 + outer loop + vertex -185.43879081874147 -96.01439158963024 597.4 + vertex -185.84009158351952 -94.45365601640985 617.4 + vertex -185.84009158351952 -94.45365601640985 597.4 + endloop +endfacet +facet normal -0.9684976081015079 -0.24902285658480888 -1.65501661748867e-16 + outer loop + vertex -185.84009158351952 -94.45365601640985 617.4 + vertex -185.43879081874147 -96.01439158963024 597.4 + vertex -185.43879081874147 -96.01439158963024 617.4 + endloop +endfacet +facet normal -0.9688260316082291 0.24774204422796448 -1.4118899179752827e-17 + outer loop + vertex -185.8517087301446 -76.8818605363542 597.4 + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -185.45247199669834 -75.32059570808379 597.4 + endloop +endfacet +facet normal -0.9688260316082291 0.24774204422796448 -1.4118899179752827e-17 + outer loop + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -185.8517087301446 -76.8818605363542 597.4 + vertex -185.8517087301446 -76.8818605363542 617.4 + endloop +endfacet +facet normal -0.9783396194476177 0.20700625357483915 -2.741524602420749e-17 + outer loop + vertex -186.18529966638516 -78.45845652790855 597.4 + vertex -185.8517087301446 -76.8818605363542 617.4 + vertex -185.8517087301446 -76.8818605363542 597.4 + endloop +endfacet +facet normal -0.9783396194476177 0.20700625357483915 -2.741524602420749e-17 + outer loop + vertex -185.8517087301446 -76.8818605363542 617.4 + vertex -186.18529966638516 -78.45845652790855 597.4 + vertex -186.18529966638516 -78.45845652790855 617.4 + endloop +endfacet +facet normal -0.9964462355504122 -0.08423122732937333 -1.1785908513505626e-16 + outer loop + vertex -186.64800732510514 -89.68999627675349 597.4 + vertex -186.78374609386333 -88.08422144198272 617.4 + vertex -186.78374609386333 -88.08422144198272 597.4 + endloop +endfacet +facet normal -0.9964462355504122 -0.08423122732937333 -1.1785908513505626e-16 + outer loop + vertex -186.78374609386333 -88.08422144198272 617.4 + vertex -186.64800732510514 -89.68999627675349 597.4 + vertex -186.64800732510514 -89.68999627675349 617.4 + endloop +endfacet +facet normal -0.8956764823140547 -0.4447062390269794 -2.1840864678576692e-16 + outer loop + vertex -182.4764284190598 -103.49242022528485 597.4 + vertex -183.19307329363312 -102.0490360224217 617.4 + vertex -183.19307329363312 -102.0490360224217 597.4 + endloop +endfacet +facet normal -0.8956764823140547 -0.4447062390269794 -2.1840864678576692e-16 + outer loop + vertex -183.19307329363312 -102.0490360224217 617.4 + vertex -182.4764284190598 -103.49242022528485 597.4 + vertex -182.4764284190598 -103.49242022528485 617.4 + endloop +endfacet +facet normal -0.9920516018175768 -0.12583171035625318 -1.3013227922530804e-16 + outer loop + vertex -186.44522930588303 -91.28868915165081 597.4 + vertex -186.64800732510514 -89.68999627675349 617.4 + vertex -186.64800732510514 -89.68999627675349 597.4 + endloop +endfacet +facet normal -0.9920516018175768 -0.12583171035625318 -1.3013227922530804e-16 + outer loop + vertex -186.64800732510514 -89.68999627675349 617.4 + vertex -186.44522930588303 -91.28868915165081 597.4 + vertex -186.44522930588303 -91.28868915165081 617.4 + endloop +endfacet +facet normal -0.9859209640962909 -0.16721199883812263 -1.4217775314923108e-16 + outer loop + vertex -186.17576688008776 -92.87750249323994 597.4 + vertex -186.44522930588303 -91.28868915165081 617.4 + vertex -186.44522930588303 -91.28868915165081 597.4 + endloop +endfacet +facet normal -0.9859209640962909 -0.16721199883812263 -1.4217775314923108e-16 + outer loop + vertex -186.44522930588303 -91.28868915165081 617.4 + vertex -186.17576688008776 -92.87750249323994 597.4 + vertex -186.17576688008776 -92.87750249323994 617.4 + endloop +endfacet +facet normal -0.9999997814571895 -0.0006611244764069267 -9.271580545042551e-17 + outer loop + vertex -186.8522080811225 -86.47417461358685 597.4 + vertex -186.85327348436152 -84.86267323343138 617.4 + vertex -186.85327348436152 -84.86267323343138 597.4 + endloop +endfacet +facet normal -0.9999997814571895 -0.0006611244764069267 -9.271580545042551e-17 + outer loop + vertex -186.85327348436152 -84.86267323343138 617.4 + vertex -186.8522080811225 -86.47417461358685 597.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + endloop +endfacet +facet normal -0.9140288370919263 0.4056492141794201 3.908047838012917e-17 + outer loop + vertex -183.86844014664098 -70.75594620798759 617.4 + vertex -183.21473573526944 -69.28298715360742 597.4 + vertex -183.86844014664098 -70.75594620798759 597.4 + endloop +endfacet +facet normal -0.9140288370919263 0.4056492141794201 3.908047838012917e-17 + outer loop + vertex -183.21473573526944 -69.28298715360742 597.4 + vertex -183.86844014664098 -70.75594620798759 617.4 + vertex -183.21473573526944 -69.28298715360742 617.4 + endloop +endfacet +facet normal -0.9447323868310465 0.3278425190125801 1.2524604359616315e-17 + outer loop + vertex -184.98828809559384 -73.77739412070689 617.4 + vertex -184.45996930827118 -72.25495624273324 597.4 + vertex -184.98828809559384 -73.77739412070689 597.4 + endloop +endfacet +facet normal -0.9447323868310465 0.3278425190125801 1.2524604359616315e-17 + outer loop + vertex -184.45996930827118 -72.25495624273324 597.4 + vertex -184.98828809559384 -73.77739412070689 617.4 + vertex -184.45996930827118 -72.25495624273324 617.4 + endloop +endfacet +facet normal -0.8762939397707025 -0.4817768478467397 -2.2791454633835716e-16 + outer loop + vertex -181.70004419415466 -104.90456942726227 597.4 + vertex -182.4764284190598 -103.49242022528485 617.4 + vertex -182.4764284190598 -103.49242022528485 597.4 + endloop +endfacet +facet normal -0.8762939397707025 -0.4817768478467397 -2.2791454633835716e-16 + outer loop + vertex -182.4764284190598 -103.49242022528485 617.4 + vertex -181.70004419415466 -104.90456942726227 597.4 + vertex -181.70004419415466 -104.90456942726227 617.4 + endloop +endfacet +facet normal 0.3098971353857546 0.9507700907578569 3.1846312298286416e-16 + outer loop + vertex -158.63766952233078 -119.64023912920045 617.4 + vertex -160.05051943746048 -119.1797301736866 597.4 + vertex -160.05051943746048 -119.1797301736866 617.4 + endloop +endfacet +facet normal 0.3098971353857546 0.9507700907578569 3.1846312298286416e-16 + outer loop + vertex -160.05051943746048 -119.1797301736866 597.4 + vertex -158.63766952233078 -119.64023912920045 617.4 + vertex -158.63766952233078 -119.64023912920045 597.4 + endloop +endfacet +facet normal -0.5088614820537041 -0.8608484141137207 -3.0946219034443546e-16 + outer loop + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -181.10149984918363 -71.91527419881093 597.4 + endloop +endfacet +facet normal -0.5088614820537041 -0.8608484141137207 -3.0946219034443546e-16 + outer loop + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -166.94278799932135 -80.28471878135097 617.4 + endloop +endfacet +facet normal 0.9859209640962954 0.1672119988380962 1.4217775314922344e-16 + outer loop + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -183.47762125401513 -90.84902740611359 597.4 + vertex -183.47762125401513 -90.84902740611359 617.4 + endloop +endfacet +facet normal 0.9859209640962954 0.1672119988380962 1.4217775314922344e-16 + outer loop + vertex -183.47762125401513 -90.84902740611359 597.4 + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -183.42210412904055 -91.17636932989386 597.4 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -2.32518947356378e-16 + outer loop + vertex -174.92783335074785 -91.46835223218363 597.4 + vertex -175.92783335074785 -89.73630142461475 617.4 + vertex -175.92783335074785 -89.73630142461475 597.4 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -2.32518947356378e-16 + outer loop + vertex -175.92783335074785 -89.73630142461475 617.4 + vertex -174.92783335074785 -91.46835223218363 597.4 + vertex -174.92783335074785 -91.46835223218363 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -170.3750000000001 -88.8397726715539 617.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -171.37500000000009 -87.10772186398503 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -170.3750000000001 -88.8397726715539 617.4 + vertex -170.3750000000001 -88.8397726715539 597.4 + endloop +endfacet +facet normal 0.9783396194476196 -0.2070062535748305 2.7415246024210318e-17 + outer loop + vertex -183.23793366531743 -79.01795063489293 617.4 + vertex -182.93032116189784 -77.56413223889896 597.4 + vertex -182.93032116189784 -77.56413223889896 617.4 + endloop +endfacet +facet normal 0.9783396194476196 -0.2070062535748305 2.7415246024210318e-17 + outer loop + vertex -182.93032116189784 -77.56413223889896 597.4 + vertex -183.23793366531743 -79.01795063489293 617.4 + vertex -183.23793366531743 -79.01795063489293 597.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.177059985700437e-16 + outer loop + vertex -172.30292768969883 -111.31482220219574 617.4 + vertex -165.67783335074787 -107.48982220219573 597.4 + vertex -172.30292768969883 -111.31482220219574 597.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.177059985700437e-16 + outer loop + vertex -165.67783335074787 -107.48982220219573 597.4 + vertex -172.30292768969883 -111.31482220219574 617.4 + vertex -165.67783335074787 -107.48982220219573 617.4 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -2.32518947356378e-16 + outer loop + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -164.7994069121178 -83.31130142461475 597.4 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -2.32518947356378e-16 + outer loop + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -154.54940691211783 -101.06482220219574 617.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.1770599857004372e-16 + outer loop + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -168.1355759986426 -82.35068819883382 597.4 + vertex -183.42210412904055 -91.17636932989386 597.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.1770599857004372e-16 + outer loop + vertex -168.1355759986426 -82.35068819883382 597.4 + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -168.1355759986426 -82.35068819883382 617.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.177059985700437e-16 + outer loop + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -161.12500000000009 -104.861242641566 597.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.177059985700437e-16 + outer loop + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -154.54940691211783 -101.06482220219574 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -172.30292768969883 -111.31482220219574 617.4 + vertex -182.5529276896988 -93.56130142461475 597.4 + vertex -182.5529276896988 -93.56130142461475 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -182.5529276896988 -93.56130142461475 597.4 + vertex -172.30292768969883 -111.31482220219574 617.4 + vertex -172.30292768969883 -111.31482220219574 597.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.177059985700437e-16 + outer loop + vertex -175.92783335074785 -89.73630142461475 617.4 + vertex -182.5529276896988 -93.56130142461475 597.4 + vertex -175.92783335074785 -89.73630142461475 597.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.177059985700437e-16 + outer loop + vertex -182.5529276896988 -93.56130142461475 597.4 + vertex -175.92783335074785 -89.73630142461475 617.4 + vertex -182.5529276896988 -93.56130142461475 617.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.177059985700437e-16 + outer loop + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -164.7994069121178 -83.31130142461475 597.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.177059985700437e-16 + outer loop + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -171.37500000000009 -87.10772186398503 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -162.12500000000009 -103.12919183399713 597.4 + vertex -162.12500000000009 -103.12919183399713 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -162.12500000000009 -103.12919183399713 597.4 + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -161.12500000000009 -104.861242641566 597.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000018 7.2279451639728e-17 + outer loop + vertex -168.1355759986426 -82.35068819883382 617.4 + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -168.1355759986426 -82.35068819883382 597.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000018 7.2279451639728e-17 + outer loop + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -168.1355759986426 -82.35068819883382 617.4 + vertex -166.94278799932135 -80.28471878135097 617.4 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -2.32518947356378e-16 + outer loop + vertex -165.67783335074787 -107.48982220219573 597.4 + vertex -166.67783335074787 -105.75777139462686 617.4 + vertex -166.67783335074787 -105.75777139462686 597.4 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -2.32518947356378e-16 + outer loop + vertex -166.67783335074787 -105.75777139462686 617.4 + vertex -165.67783335074787 -107.48982220219573 597.4 + vertex -165.67783335074787 -107.48982220219573 617.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.1770599857004374e-16 + outer loop + vertex -170.3750000000001 -88.8397726715539 617.4 + vertex -174.92783335074785 -91.46835223218363 597.4 + vertex -170.3750000000001 -88.8397726715539 597.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.1770599857004374e-16 + outer loop + vertex -174.92783335074785 -91.46835223218363 597.4 + vertex -170.3750000000001 -88.8397726715539 617.4 + vertex -174.92783335074785 -91.46835223218363 617.4 + endloop +endfacet +facet normal 0.9920516018175792 0.1258317103562346 1.301322792253026e-16 + outer loop + vertex -183.47762125401513 -90.84902740611359 617.4 + vertex -183.66460791148953 -89.3748329241279 597.4 + vertex -183.66460791148953 -89.3748329241279 617.4 + endloop +endfacet +facet normal 0.9920516018175792 0.1258317103562346 1.301322792253026e-16 + outer loop + vertex -183.66460791148953 -89.3748329241279 597.4 + vertex -183.47762125401513 -90.84902740611359 617.4 + vertex -183.47762125401513 -90.84902740611359 597.4 + endloop +endfacet +facet normal 0.9991524752349781 -0.04116225494086089 7.988971840785634e-17 + outer loop + vertex -183.8538889448047 -84.92343822226253 617.4 + vertex -183.7927215932388 -83.43869180085149 597.4 + vertex -183.7927215932388 -83.43869180085149 617.4 + endloop +endfacet +facet normal 0.9991524752349781 -0.04116225494086089 7.988971840785634e-17 + outer loop + vertex -183.7927215932388 -83.43869180085149 597.4 + vertex -183.8538889448047 -84.92343822226253 617.4 + vertex -183.8538889448047 -84.92343822226253 597.4 + endloop +endfacet +facet normal 0.9447323868310444 -0.3278425190125857 -1.2524604359618278e-17 + outer loop + vertex -181.64696360879714 -73.29754865337445 617.4 + vertex -182.13413950932807 -74.7014265051594 597.4 + vertex -181.64696360879714 -73.29754865337445 597.4 + endloop +endfacet +facet normal 0.9447323868310444 -0.3278425190125857 -1.2524604359618278e-17 + outer loop + vertex -182.13413950932807 -74.7014265051594 597.4 + vertex -181.64696360879714 -73.29754865337445 617.4 + vertex -182.13413950932807 -74.7014265051594 617.4 + endloop +endfacet +facet normal 0.26986211191721243 0.9628989773343732 3.184561753812833e-16 + outer loop + vertex -157.2067960108166 -120.04125580570847 617.4 + vertex -158.63766952233078 -119.64023912920045 597.4 + vertex -158.63766952233078 -119.64023912920045 617.4 + endloop +endfacet +facet normal 0.26986211191721243 0.9628989773343732 3.184561753812833e-16 + outer loop + vertex -158.63766952233078 -119.64023912920045 597.4 + vertex -157.2067960108166 -120.04125580570847 617.4 + vertex -157.2067960108166 -120.04125580570847 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -174.92783335074785 -91.46835223218363 597.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -170.3750000000001 -88.8397726715539 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -164.7994069121178 -83.31130142461475 597.4 + vertex -168.1355759986426 -82.35068819883382 597.4 + vertex -166.94278799932135 -80.28471878135097 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -168.1355759986426 -82.35068819883382 597.4 + vertex -164.7994069121178 -83.31130142461475 597.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -168.1355759986426 -82.35068819883382 597.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -183.42210412904055 -91.17636932989386 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.42210412904055 -91.17636932989386 597.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -175.92783335074785 -89.73630142461475 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -175.92783335074785 -89.73630142461475 597.4 + vertex -171.37500000000009 -87.10772186398503 597.4 + vertex -174.92783335074785 -91.46835223218363 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.42210412904055 -91.17636932989386 597.4 + vertex -175.92783335074785 -89.73630142461475 597.4 + vertex -182.5529276896988 -93.56130142461475 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -135.48808746094204 -29.803579312014033 597.4 + vertex -134.3333869225628 -31.80357931201403 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -135.48808746094204 -29.803579312014033 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -135.82629141839357 -29.35408956923085 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -135.82629141839357 -29.35408956923085 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -136.2201382685109 -29.07152850444516 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -136.2201382685109 -29.07152850444516 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -136.64278799932129 -28.97515218726785 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -136.64278799932129 -28.97515218726785 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -137.06543773013166 -29.07152850444516 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -137.06543773013166 -29.07152850444516 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -137.45928458024903 -29.35408956923086 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -137.45928458024903 -29.35408956923086 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -137.79748853770056 -29.803579312014033 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -137.79748853770056 -29.803579312014033 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -165.44278799932133 -77.68664256999766 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -149.13659139480458 -57.56730855610119 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -149.13659139480458 -57.56730855610119 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -148.6342785416942 -57.064995702990785 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -148.6342785416942 -57.064995702990785 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -148.05237123795206 -56.65753982237127 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -148.05237123795206 -56.65753982237127 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -147.40855044254315 -56.35732125499265 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -147.40855044254315 -56.35732125499265 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -146.72237832454687 -56.1734619901068 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -146.72237832454687 -56.1734619901068 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -146.01470387654874 -56.111548498439994 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -146.01470387654874 -56.111548498439994 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -145.3070294285506 -56.173461990106794 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -145.3070294285506 -56.173461990106794 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -144.62085731055436 -56.35732125499265 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -144.62085731055436 -56.35732125499265 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -144.05167483247538 -56.60305820935861 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -144.05167483247538 -56.60305820935861 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -143.42990957836216 -57.03842292728556 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -143.42990957836216 -57.03842292728556 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -143.39512921140332 -57.06499570299079 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -143.39512921140332 -57.06499570299079 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -142.89319062544635 -57.575141880201365 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -142.89319062544635 -57.575141880201365 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -142.4853604776734 -58.14921585984331 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -142.4853604776734 -58.14921585984331 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -121.6013783836058 -94.32133391112707 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -144.05167483247538 -56.60305820935861 597.4 + vertex -143.42990957836216 -57.03842292728556 597.4 + vertex -143.97703651514541 -56.65753982237127 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -149.13659139480458 -57.56730855610119 597.4 + vertex -149.5440472754241 -58.14921585984331 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -149.5440472754241 -58.14921585984331 597.4 + vertex -162.241464507947 -80.1417876314735 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -162.241464507947 -80.1417876314735 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -154.54940691211783 -101.06482220219574 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -153.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -153.0000000000001 -104.43433599533701 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -150.00000000000014 -121.12479659831224 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -153.0000000000001 -104.43433599533701 597.4 + vertex -150.00000000000014 -121.12479659831224 597.4 + vertex -152.83120430088547 -120.88086243345158 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -150.00000000000014 -121.12479659831224 597.4 + vertex -150.0000000000001 -124.13030787576982 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -150.0000000000001 -124.13030787576982 597.4 + vertex -151.60819479272956 -124.02712191759254 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -151.60819479272956 -124.02712191759254 597.4 + vertex -154.30102097334648 -120.66211067883889 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -154.30102097334648 -120.66211067883889 597.4 + vertex -151.60819479272956 -124.02712191759254 597.4 + vertex -153.21066695824285 -123.85676701721619 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -154.30102097334648 -120.66211067883889 597.4 + vertex -153.21066695824285 -123.85676701721619 597.4 + vertex -155.76040280706806 -120.38207845891773 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -155.76040280706806 -120.38207845891773 597.4 + vertex -153.21066695824285 -123.85676701721619 597.4 + vertex -154.80461230967546 -123.6195412808944 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -155.76040280706806 -120.38207845891773 597.4 + vertex -154.80461230967546 -123.6195412808944 597.4 + vertex -157.2067960108166 -120.04125580570847 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -157.2067960108166 -120.04125580570847 597.4 + vertex -154.80461230967546 -123.6195412808944 597.4 + vertex -156.38724158134568 -123.3158598330256 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -157.2067960108166 -120.04125580570847 597.4 + vertex -156.38724158134568 -123.3158598330256 597.4 + vertex -158.63766952233078 -119.64023912920045 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -158.63766952233078 -119.64023912920045 597.4 + vertex -156.38724158134568 -123.3158598330256 597.4 + vertex -157.95578530972676 -122.9462540897214 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -158.63766952233078 -119.64023912920045 597.4 + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -160.05051943746048 -119.1797301736866 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -160.05051943746048 -119.1797301736866 597.4 + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -161.4428733917811 -118.6605347897719 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -161.4428733917811 -118.6605347897719 597.4 + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -159.5074986797672 -122.51137082887453 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -161.4428733917811 -118.6605347897719 597.4 + vertex -159.5074986797672 -122.51137082887453 597.4 + vertex -162.81229488701607 -118.08356152420495 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -162.81229488701607 -118.08356152420495 597.4 + vertex -159.5074986797672 -122.51137082887453 597.4 + vertex -161.03966632807825 -122.01197105835392 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -162.81229488701607 -118.08356152420495 597.4 + vertex -161.03966632807825 -122.01197105835392 597.4 + vertex -164.15638755469695 -117.44982003000014 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -164.15638755469695 -117.44982003000014 597.4 + vertex -161.03966632807825 -122.01197105835392 597.4 + vertex -162.54960709458362 -121.44892868430706 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -164.15638755469695 -117.44982003000014 597.4 + vertex -162.54960709458362 -121.44892868430706 597.4 + vertex -165.47279934959994 -116.76041929963289 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.47279934959994 -116.76041929963289 597.4 + vertex -162.54960709458362 -121.44892868430706 597.4 + vertex -164.0346787143162 -120.8232289819003 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.47279934959994 -116.76041929963289 597.4 + vertex -164.0346787143162 -120.8232289819003 597.4 + vertex -166.75922666561993 -116.01656572439916 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -166.75922666561993 -116.01656572439916 597.4 + vertex -164.0346787143162 -120.8232289819003 597.4 + vertex -168.01341836688124 -115.21956098333557 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -168.01341836688124 -115.21956098333557 597.4 + vertex -164.0346787143162 -120.8232289819003 597.4 + vertex -165.49228244115207 -120.13596687117304 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -168.01341836688124 -115.21956098333557 597.4 + vertex -165.49228244115207 -120.13596687117304 597.4 + vertex -169.2331797270292 -114.37079976539471 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -169.2331797270292 -114.37079976539471 597.4 + vertex -165.49228244115207 -120.13596687117304 597.4 + vertex -166.9198675953899 -119.38834500102291 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -169.2331797270292 -114.37079976539471 597.4 + vertex -166.9198675953899 -119.38834500102291 597.4 + vertex -170.41637626981046 -113.47176732886027 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -170.41637626981046 -113.47176732886027 597.4 + vertex -166.9198675953899 -119.38834500102291 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -170.41637626981046 -113.47176732886027 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -170.67210412904055 -113.26001712639702 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -172.30292768969883 -111.31482220219574 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -172.30292768969883 -111.31482220219574 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -182.5529276896988 -93.56130142461475 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -182.5529276896988 -93.56130142461475 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -186.8522080811225 -86.47417461358685 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.8522080811225 -86.47417461358685 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -186.78374609386333 -88.08422144198272 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.78374609386333 -88.08422144198272 597.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + vertex -169.67504648826252 -117.71735841031698 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.78374609386333 -88.08422144198272 597.4 + vertex -169.67504648826252 -117.71735841031698 597.4 + vertex -186.64800732510514 -89.68999627675349 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.64800732510514 -89.68999627675349 597.4 + vertex -169.67504648826252 -117.71735841031698 597.4 + vertex -170.99781890355266 -116.79691777090856 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.64800732510514 -89.68999627675349 597.4 + vertex -170.99781890355266 -116.79691777090856 597.4 + vertex -172.28093853645186 -115.8219604174845 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.64800732510514 -89.68999627675349 597.4 + vertex -172.28093853645186 -115.8219604174845 597.4 + vertex -186.44522930588303 -91.28868915165081 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.44522930588303 -91.28868915165081 597.4 + vertex -172.28093853645186 -115.8219604174845 597.4 + vertex -186.17576688008776 -92.87750249323994 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.17576688008776 -92.87750249323994 597.4 + vertex -172.28093853645186 -115.8219604174845 597.4 + vertex -173.52216003924207 -114.79419244058586 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.17576688008776 -92.87750249323994 597.4 + vertex -173.52216003924207 -114.79419244058586 597.4 + vertex -185.84009158351952 -94.45365601640985 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.84009158351952 -94.45365601640985 597.4 + vertex -173.52216003924207 -114.79419244058586 597.4 + vertex -174.7193113822874 -113.71541234474994 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.84009158351952 -94.45365601640985 597.4 + vertex -174.7193113822874 -113.71541234474994 597.4 + vertex -175.8702976548973 -112.58750790128379 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.84009158351952 -94.45365601640985 597.4 + vertex -175.8702976548973 -112.58750790128379 597.4 + vertex -185.43879081874147 -96.01439158963024 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.43879081874147 -96.01439158963024 597.4 + vertex -175.8702976548973 -112.58750790128379 597.4 + vertex -176.9731047312377 -111.4124528448287 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.43879081874147 -96.01439158963024 597.4 + vertex -176.9731047312377 -111.4124528448287 597.4 + vertex -184.97256682717622 -97.55697806144181 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.97256682717622 -97.55697806144181 597.4 + vertex -176.9731047312377 -111.4124528448287 597.4 + vertex -178.02580279487614 -110.19230341949638 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.97256682717622 -97.55697806144181 597.4 + vertex -178.02580279487614 -110.19230341949638 597.4 + vertex -184.44223546024463 -99.07871603973358 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.44223546024463 -99.07871603973358 597.4 + vertex -178.02580279487614 -110.19230341949638 597.4 + vertex -179.02654971579267 -108.92919478062035 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.44223546024463 -99.07871603973358 597.4 + vertex -179.02654971579267 -108.92919478062035 597.4 + vertex -183.84872475169666 -100.57694261544432 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.84872475169666 -100.57694261544432 597.4 + vertex -179.02654971579267 -108.92919478062035 597.4 + vertex -179.97359427394687 -107.62533725842033 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.84872475169666 -100.57694261544432 597.4 + vertex -179.97359427394687 -107.62533725842033 597.4 + vertex -183.19307329363312 -102.0490360224217 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.19307329363312 -102.0490360224217 597.4 + vertex -179.97359427394687 -107.62533725842033 597.4 + vertex -180.86527922376087 -106.28301249011633 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.19307329363312 -102.0490360224217 597.4 + vertex -180.86527922376087 -106.28301249011633 597.4 + vertex -182.4764284190598 -103.49242022528485 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -182.4764284190598 -103.49242022528485 597.4 + vertex -180.86527922376087 -106.28301249011633 597.4 + vertex -181.70004419415466 -104.90456942726227 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -179.89715088236125 -69.34141226851004 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -164.7994069121178 -83.31130142461475 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -164.7994069121178 -83.31130142461475 597.4 + vertex -165.44278799932133 -77.68664256999766 597.4 + vertex -154.54940691211783 -101.06482220219574 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -179.89715088236125 -69.34141226851004 597.4 + vertex -166.94278799932135 -80.28471878135097 597.4 + vertex -181.10149984918363 -71.91527419881093 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -179.89715088236125 -69.34141226851004 597.4 + vertex -181.10149984918363 -71.91527419881093 597.4 + vertex -182.50000000000009 -67.83865662978125 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -182.50000000000009 -67.83865662978125 597.4 + vertex -181.10149984918363 -71.91527419881093 597.4 + vertex -183.21473573526944 -69.28298715360742 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.21473573526944 -69.28298715360742 597.4 + vertex -181.10149984918363 -71.91527419881093 597.4 + vertex -181.64696360879714 -73.29754865337445 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.21473573526944 -69.28298715360742 597.4 + vertex -181.64696360879714 -73.29754865337445 597.4 + vertex -183.86844014664098 -70.75594620798759 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.86844014664098 -70.75594620798759 597.4 + vertex -181.64696360879714 -73.29754865337445 597.4 + vertex -182.13413950932807 -74.7014265051594 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -183.86844014664098 -70.75594620798759 597.4 + vertex -182.13413950932807 -74.7014265051594 597.4 + vertex -184.45996930827118 -72.25495624273324 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.45996930827118 -72.25495624273324 597.4 + vertex -182.13413950932807 -74.7014265051594 597.4 + vertex -182.56217503533787 -76.12445109007139 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.45996930827118 -72.25495624273324 597.4 + vertex -182.56217503533787 -76.12445109007139 597.4 + vertex -184.98828809559384 -73.77739412070689 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.98828809559384 -73.77739412070689 597.4 + vertex -182.56217503533787 -76.12445109007139 597.4 + vertex -182.93032116189784 -77.56413223889896 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -184.98828809559384 -73.77739412070689 597.4 + vertex -182.93032116189784 -77.56413223889896 597.4 + vertex -185.45247199669834 -75.32059570808379 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.45247199669834 -75.32059570808379 597.4 + vertex -182.93032116189784 -77.56413223889896 597.4 + vertex -183.23793366531743 -79.01795063489293 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.45247199669834 -75.32059570808379 597.4 + vertex -183.23793366531743 -79.01795063489293 597.4 + vertex -183.48447425048 -80.48336222235163 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.45247199669834 -75.32059570808379 597.4 + vertex -183.48447425048 -80.48336222235163 597.4 + vertex -185.8517087301446 -76.8818605363542 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.8517087301446 -76.8818605363542 597.4 + vertex -183.48447425048 -80.48336222235163 597.4 + vertex -183.66951149281203 -81.95780265849703 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -185.8517087301446 -76.8818605363542 597.4 + vertex -183.66951149281203 -81.95780265849703 597.4 + vertex -186.18529966638516 -78.45845652790855 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.18529966638516 -78.45845652790855 597.4 + vertex -183.66951149281203 -81.95780265849703 597.4 + vertex -183.7927215932388 -83.43869180085149 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.18529966638516 -78.45845652790855 597.4 + vertex -183.7927215932388 -83.43869180085149 597.4 + vertex -186.45266105030615 -80.04762477693534 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.45266105030615 -80.04762477693534 597.4 + vertex -183.7927215932388 -83.43869180085149 597.4 + vertex -183.8538889448047 -84.92343822226253 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.45266105030615 -80.04762477693534 597.4 + vertex -183.8538889448047 -84.92343822226253 597.4 + vertex -186.65332502274782 -81.64658437726645 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.65332502274782 -81.64658437726645 597.4 + vertex -183.8538889448047 -84.92343822226253 597.4 + vertex -183.8529065099664 -86.40944374567499 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.65332502274782 -81.64658437726645 597.4 + vertex -183.8529065099664 -86.40944374567499 597.4 + vertex -183.7897760078994 -87.89410799071469 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.65332502274782 -81.64658437726645 597.4 + vertex -183.7897760078994 -87.89410799071469 597.4 + vertex -186.78694043921743 -83.2525372887208 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.78694043921743 -83.2525372887208 597.4 + vertex -183.7897760078994 -87.89410799071469 597.4 + vertex -183.66460791148953 -89.3748329241279 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.78694043921743 -83.2525372887208 597.4 + vertex -183.66460791148953 -89.3748329241279 597.4 + vertex -186.85327348436152 -84.86267323343138 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.85327348436152 -84.86267323343138 597.4 + vertex -183.66460791148953 -89.3748329241279 597.4 + vertex -183.47762125401513 -90.84902740611359 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.85327348436152 -84.86267323343138 597.4 + vertex -183.47762125401513 -90.84902740611359 597.4 + vertex -186.8522080811225 -86.47417461358685 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.8522080811225 -86.47417461358685 597.4 + vertex -183.47762125401513 -90.84902740611359 597.4 + vertex -183.42210412904055 -91.17636932989386 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -186.8522080811225 -86.47417461358685 597.4 + vertex -183.42210412904055 -91.17636932989386 597.4 + vertex -182.5529276896988 -93.56130142461475 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -155.38557599864262 -104.43433599533701 597.4 + vertex -161.12500000000009 -104.861242641566 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -155.38557599864262 -104.43433599533701 597.4 + vertex -154.54940691211783 -101.06482220219574 597.4 + vertex -153.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -161.12500000000009 -104.861242641566 597.4 + vertex -155.38557599864262 -104.43433599533701 597.4 + vertex -170.67210412904055 -113.26001712639702 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -161.12500000000009 -104.861242641566 597.4 + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -165.67783335074787 -107.48982220219573 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -161.12500000000009 -104.861242641566 597.4 + vertex -165.67783335074787 -107.48982220219573 597.4 + vertex -162.12500000000009 -103.12919183399713 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -165.67783335074787 -107.48982220219573 597.4 + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -172.30292768969883 -111.31482220219574 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -166.67783335074787 -105.75777139462686 597.4 + vertex -162.12500000000009 -103.12919183399713 597.4 + vertex -165.67783335074787 -107.48982220219573 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -142.4578259075194 -58.19690713431459 597.4 + vertex -142.4853604776734 -58.14921585984331 597.4 + vertex -121.6013783836058 -94.32133391112707 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -93.55470053837934 -102.43433599533701 597.4 + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -94.7094010767586 -100.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -93.55470053837934 -102.43433599533701 597.4 + vertex -93.33453298111434 -102.95197408554206 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -93.33453298111434 -102.95197408554206 597.4 + vertex -93.28675134594823 -103.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -93.28675134594823 -103.43433599533701 597.4 + vertex -93.41461187235467 -103.84854955771011 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -93.41461187235467 -103.84854955771011 597.4 + vertex -93.7094010767586 -104.16638680290588 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -93.7094010767586 -104.16638680290588 597.4 + vertex -94.15102956204207 -104.36618764791513 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -94.15102956204207 -104.36618764791513 597.4 + vertex -94.70940107675861 -104.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -94.70940107675861 -104.43433599533701 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -124.42304733448304 -100.3724225036702 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -124.42304733448304 -100.3724225036702 597.4 + vertex -123.73687521648677 -100.18856323878435 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -123.73687521648677 -100.18856323878435 597.4 + vertex -123.09305442107785 -99.88834467140573 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -123.09305442107785 -99.88834467140573 597.4 + vertex -122.51114711733574 -99.48088879078622 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -122.51114711733574 -99.48088879078622 597.4 + vertex -122.00883426422534 -98.9785759376758 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -122.00883426422534 -98.9785759376758 597.4 + vertex -121.6013783836058 -98.39666863393369 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.6013783836058 -98.39666863393369 597.4 + vertex -121.3011598162272 -97.75284783852477 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.3011598162272 -97.75284783852477 597.4 + vertex -121.11730055134134 -97.06667572052851 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.11730055134134 -97.06667572052851 597.4 + vertex -121.05538705967454 -96.35900127253036 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.05538705967454 -96.35900127253036 597.4 + vertex -121.11730055134134 -95.65132682453225 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.11730055134134 -95.65132682453225 597.4 + vertex -121.3011598162272 -94.96515470653598 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.3011598162272 -94.96515470653598 597.4 + vertex -121.6013783836058 -94.32133391112707 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -113.10682266969967 -100.43433599533701 597.4 + vertex -121.6013783836058 -94.32133391112707 597.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -124.42304733448304 -100.3724225036702 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -125.13072178248116 -100.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -125.13072178248116 -100.43433599533701 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -150.5255562475269 -100.43433599533701 597.4 + endloop +endfacet +facet normal 9.251431598681811e-17 3.047983989961055e-16 -1.0 + outer loop + vertex -150.5255562475269 -100.43433599533701 597.4 + vertex -150.0000000000001 -104.43433599533701 597.4 + vertex -162.241464507947 -80.1417876314735 597.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.1770599857004374e-16 + outer loop + vertex -166.67783335074787 -105.75777139462686 617.4 + vertex -162.12500000000009 -103.12919183399713 597.4 + vertex -166.67783335074787 -105.75777139462686 597.4 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 2.1770599857004374e-16 + outer loop + vertex -162.12500000000009 -103.12919183399713 597.4 + vertex -166.67783335074787 -105.75777139462686 617.4 + vertex -162.12500000000009 -103.12919183399713 617.4 + endloop +endfacet +facet normal 0.9964462355504107 0.08423122732939085 1.1785908513506147e-16 + outer loop + vertex -183.66460791148953 -89.3748329241279 617.4 + vertex -183.7897760078994 -87.89410799071469 597.4 + vertex -183.7897760078994 -87.89410799071469 617.4 + endloop +endfacet +facet normal 0.9964462355504107 0.08423122732939085 1.1785908513506147e-16 + outer loop + vertex -183.7897760078994 -87.89410799071469 597.4 + vertex -183.66460791148953 -89.3748329241279 617.4 + vertex -183.66460791148953 -89.3748329241279 597.4 + endloop +endfacet +facet normal 0.5005724413202164 0.8656946522826156 3.1017246104582295e-16 + outer loop + vertex -165.47279934959994 -116.76041929963289 617.4 + vertex -166.75922666561993 -116.01656572439916 597.4 + vertex -166.75922666561993 -116.01656572439916 617.4 + endloop +endfacet +facet normal 0.5005724413202164 0.8656946522826156 3.1017246104582295e-16 + outer loop + vertex -166.75922666561993 -116.01656572439916 597.4 + vertex -165.47279934959994 -116.76041929963289 617.4 + vertex -165.47279934959994 -116.76041929963289 597.4 + endloop +endfacet +facet normal 0.42647308217928154 0.9045002543816691 3.1514509491170926e-16 + outer loop + vertex -162.81229488701607 -118.08356152420495 617.4 + vertex -164.15638755469695 -117.44982003000014 597.4 + vertex -164.15638755469695 -117.44982003000014 617.4 + endloop +endfacet +facet normal 0.42647308217928154 0.9045002543816691 3.1514509491170926e-16 + outer loop + vertex -164.15638755469695 -117.44982003000014 597.4 + vertex -162.81229488701607 -118.08356152420495 617.4 + vertex -162.81229488701607 -118.08356152420495 597.4 + endloop +endfacet +facet normal -0.9999473364568806 -0.010262763409049967 -9.563751771150325e-17 + outer loop + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -153.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal -0.9999473364568806 -0.010262763409049967 -9.563751771150325e-17 + outer loop + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -152.83120430088547 -120.88086243345158 617.4 + endloop +endfacet +facet normal 0.9922171154055781 -0.12451986145283667 5.3840833328119346e-17 + outer loop + vertex -183.66951149281203 -81.95780265849703 617.4 + vertex -183.48447425048 -80.48336222235163 597.4 + vertex -183.48447425048 -80.48336222235163 617.4 + endloop +endfacet +facet normal 0.9922171154055781 -0.12451986145283667 5.3840833328119346e-17 + outer loop + vertex -183.48447425048 -80.48336222235163 597.4 + vertex -183.66951149281203 -81.95780265849703 617.4 + vertex -183.66951149281203 -81.95780265849703 597.4 + endloop +endfacet +facet normal 0.22935485323248844 0.9733428744788262 3.178919571804742e-16 + outer loop + vertex -157.2067960108166 -120.04125580570847 617.4 + vertex -155.76040280706806 -120.38207845891773 597.4 + vertex -157.2067960108166 -120.04125580570847 597.4 + endloop +endfacet +facet normal 0.22935485323248844 0.9733428744788262 3.178919571804742e-16 + outer loop + vertex -155.76040280706806 -120.38207845891773 597.4 + vertex -157.2067960108166 -120.04125580570847 617.4 + vertex -155.76040280706806 -120.38207845891773 617.4 + endloop +endfacet +facet normal 0.1884462435099412 0.9820835062798846 3.167714557131981e-16 + outer loop + vertex -155.76040280706806 -120.38207845891773 617.4 + vertex -154.30102097334648 -120.66211067883889 597.4 + vertex -155.76040280706806 -120.38207845891773 597.4 + endloop +endfacet +facet normal 0.1884462435099412 0.9820835062798846 3.167714557131981e-16 + outer loop + vertex -154.30102097334648 -120.66211067883889 597.4 + vertex -155.76040280706806 -120.38207845891773 617.4 + vertex -154.30102097334648 -120.66211067883889 617.4 + endloop +endfacet +facet normal 0.3882711944089147 0.9215451587373646 3.168061329538863e-16 + outer loop + vertex -161.4428733917811 -118.6605347897719 617.4 + vertex -162.81229488701607 -118.08356152420495 597.4 + vertex -162.81229488701607 -118.08356152420495 617.4 + endloop +endfacet +facet normal 0.3882711944089147 0.9215451587373646 3.168061329538863e-16 + outer loop + vertex -162.81229488701607 -118.08356152420495 597.4 + vertex -161.4428733917811 -118.6605347897719 617.4 + vertex -161.4428733917811 -118.6605347897719 597.4 + endloop +endfacet +facet normal 0.5363402452594351 0.8440018609665794 3.068695668987259e-16 + outer loop + vertex -166.75922666561993 -116.01656572439916 617.4 + vertex -168.01341836688124 -115.21956098333557 597.4 + vertex -168.01341836688124 -115.21956098333557 617.4 + endloop +endfacet +facet normal 0.5363402452594351 0.8440018609665794 3.068695668987259e-16 + outer loop + vertex -168.01341836688124 -115.21956098333557 597.4 + vertex -166.75922666561993 -116.01656572439916 617.4 + vertex -166.75922666561993 -116.01656572439916 597.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.1770599857004372e-16 + outer loop + vertex -155.38557599864262 -104.43433599533701 617.4 + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -155.38557599864262 -104.43433599533701 597.4 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -2.1770599857004372e-16 + outer loop + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -155.38557599864262 -104.43433599533701 617.4 + vertex -170.67210412904055 -113.26001712639702 617.4 + endloop +endfacet +facet normal 0.3493898658303788 0.9369774392454868 3.179127878275187e-16 + outer loop + vertex -160.05051943746048 -119.1797301736866 617.4 + vertex -161.4428733917811 -118.6605347897719 597.4 + vertex -161.4428733917811 -118.6605347897719 617.4 + endloop +endfacet +facet normal 0.3493898658303788 0.9369774392454868 3.179127878275187e-16 + outer loop + vertex -161.4428733917811 -118.6605347897719 597.4 + vertex -160.05051943746048 -119.1797301736866 617.4 + vertex -160.05051943746048 -119.1797301736866 597.4 + endloop +endfacet +facet normal 0.6377703208595258 0.7702266016119785 2.9376672002655477e-16 + outer loop + vertex -170.41637626981046 -113.47176732886027 617.4 + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -170.67210412904055 -113.26001712639702 617.4 + endloop +endfacet +facet normal 0.6377703208595258 0.7702266016119785 2.9376672002655477e-16 + outer loop + vertex -170.67210412904055 -113.26001712639702 597.4 + vertex -170.41637626981046 -113.47176732886027 617.4 + vertex -170.41637626981046 -113.47176732886027 597.4 + endloop +endfacet +facet normal 0.996556739113654 -0.08291360399331692 6.692383130899362e-17 + outer loop + vertex -183.7927215932388 -83.43869180085149 617.4 + vertex -183.66951149281203 -81.95780265849703 597.4 + vertex -183.66951149281203 -81.95780265849703 617.4 + endloop +endfacet +facet normal 0.996556739113654 -0.08291360399331692 6.692383130899362e-17 + outer loop + vertex -183.66951149281203 -81.95780265849703 597.4 + vertex -183.7927215932388 -83.43869180085149 617.4 + vertex -183.7927215932388 -83.43869180085149 597.4 + endloop +endfacet +facet normal 1.0547118733938985e-15 -1.0 -3.047983989961054e-16 + outer loop + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -155.38557599864262 -104.43433599533701 597.4 + vertex -153.0000000000001 -104.43433599533701 597.4 + endloop +endfacet +facet normal 1.0547118733938985e-15 -1.0 -3.047983989961054e-16 + outer loop + vertex -155.38557599864262 -104.43433599533701 597.4 + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -155.38557599864262 -104.43433599533701 617.4 + endloop +endfacet +facet normal 0.9576170825074752 -0.2880443078588281 7.978454901593538e-19 + outer loop + vertex -182.13413950932807 -74.7014265051594 617.4 + vertex -182.56217503533787 -76.12445109007139 597.4 + vertex -182.13413950932807 -74.7014265051594 597.4 + endloop +endfacet +facet normal 0.9576170825074752 -0.2880443078588281 7.978454901593538e-19 + outer loop + vertex -182.56217503533787 -76.12445109007139 597.4 + vertex -182.13413950932807 -74.7014265051594 617.4 + vertex -182.56217503533787 -76.12445109007139 617.4 + endloop +endfacet +facet normal 0.6049992586789453 0.7962260338609424 2.986595129490488e-16 + outer loop + vertex -169.2331797270292 -114.37079976539471 617.4 + vertex -170.41637626981046 -113.47176732886027 597.4 + vertex -170.41637626981046 -113.47176732886027 617.4 + endloop +endfacet +facet normal 0.6049992586789453 0.7962260338609424 2.986595129490488e-16 + outer loop + vertex -170.41637626981046 -113.47176732886027 597.4 + vertex -169.2331797270292 -114.37079976539471 617.4 + vertex -169.2331797270292 -114.37079976539471 597.4 + endloop +endfacet +facet normal 0.14720786925726986 0.9891055773923907 3.1509663175953245e-16 + outer loop + vertex -154.30102097334648 -120.66211067883889 617.4 + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -154.30102097334648 -120.66211067883889 597.4 + endloop +endfacet +facet normal 0.14720786925726986 0.9891055773923907 3.1509663175953245e-16 + outer loop + vertex -152.83120430088547 -120.88086243345158 597.4 + vertex -154.30102097334648 -120.66211067883889 617.4 + vertex -152.83120430088547 -120.88086243345158 617.4 + endloop +endfacet +facet normal 0.9999997814571896 0.0006611244764012646 9.271580545042376e-17 + outer loop + vertex -183.8529065099664 -86.40944374567499 617.4 + vertex -183.8538889448047 -84.92343822226253 597.4 + vertex -183.8538889448047 -84.92343822226253 617.4 + endloop +endfacet +facet normal 0.9999997814571896 0.0006611244764012646 9.271580545042376e-17 + outer loop + vertex -183.8538889448047 -84.92343822226253 597.4 + vertex -183.8529065099664 -86.40944374567499 617.4 + vertex -183.8529065099664 -86.40944374567499 597.4 + endloop +endfacet +facet normal 0.5711695004343895 0.82083213982734 3.0302967770914086e-16 + outer loop + vertex -168.01341836688124 -115.21956098333557 617.4 + vertex -169.2331797270292 -114.37079976539471 597.4 + vertex -169.2331797270292 -114.37079976539471 617.4 + endloop +endfacet +facet normal 0.5711695004343895 0.82083213982734 3.0302967770914086e-16 + outer loop + vertex -169.2331797270292 -114.37079976539471 597.4 + vertex -168.01341836688124 -115.21956098333557 617.4 + vertex -168.01341836688124 -115.21956098333557 597.4 + endloop +endfacet +facet normal 0.9861411980746724 -0.165908219988794 4.066361857342156e-17 + outer loop + vertex -183.48447425048 -80.48336222235163 617.4 + vertex -183.23793366531743 -79.01795063489293 597.4 + vertex -183.23793366531743 -79.01795063489293 617.4 + endloop +endfacet +facet normal 0.9861411980746724 -0.165908219988794 4.066361857342156e-17 + outer loop + vertex -183.23793366531743 -79.01795063489293 597.4 + vertex -183.48447425048 -80.48336222235163 617.4 + vertex -183.48447425048 -80.48336222235163 597.4 + endloop +endfacet +facet normal 0.9688260316082282 -0.24774204422796747 1.4118899179751826e-17 + outer loop + vertex -182.93032116189784 -77.56413223889896 617.4 + vertex -182.56217503533787 -76.12445109007139 597.4 + vertex -182.56217503533787 -76.12445109007139 617.4 + endloop +endfacet +facet normal 0.9688260316082282 -0.24774204422796747 1.4118899179751826e-17 + outer loop + vertex -182.56217503533787 -76.12445109007139 597.4 + vertex -182.93032116189784 -77.56413223889896 617.4 + vertex -182.93032116189784 -77.56413223889896 597.4 + endloop +endfacet +facet normal 0.9301944916753182 -0.3670670342824267 -2.582513724148415e-17 + outer loop + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -181.64696360879714 -73.29754865337445 597.4 + vertex -181.10149984918363 -71.91527419881093 597.4 + endloop +endfacet +facet normal 0.9301944916753182 -0.3670670342824267 -2.582513724148415e-17 + outer loop + vertex -181.64696360879714 -73.29754865337445 597.4 + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -181.64696360879714 -73.29754865337445 617.4 + endloop +endfacet +facet normal 0.463928679161666 0.8858725532780165 3.129325803730411e-16 + outer loop + vertex -164.15638755469695 -117.44982003000014 617.4 + vertex -165.47279934959994 -116.76041929963289 597.4 + vertex -165.47279934959994 -116.76041929963289 617.4 + endloop +endfacet +facet normal 0.463928679161666 0.8858725532780165 3.129325803730411e-16 + outer loop + vertex -165.47279934959994 -116.76041929963289 597.4 + vertex -164.15638755469695 -117.44982003000014 617.4 + vertex -164.15638755469695 -117.44982003000014 597.4 + endloop +endfacet +facet normal 0.9990971750681178 0.0424833469833426 1.0537964790030807e-16 + outer loop + vertex -183.7897760078994 -87.89410799071469 617.4 + vertex -183.8529065099664 -86.40944374567499 597.4 + vertex -183.8529065099664 -86.40944374567499 617.4 + endloop +endfacet +facet normal 0.9990971750681178 0.0424833469833426 1.0537964790030807e-16 + outer loop + vertex -183.8529065099664 -86.40944374567499 597.4 + vertex -183.7897760078994 -87.89410799071469 617.4 + vertex -183.7897760078994 -87.89410799071469 597.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -109.18236190979502 -106.43433599533697 604.4681483474218 + vertex -134.50000000000006 -106.43433599533697 604.4 + vertex -109.70000000000007 -106.43433599533697 604.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -134.50000000000006 -106.43433599533697 604.4 + vertex -109.18236190979502 -106.43433599533697 604.4681483474218 + vertex -135.01763809020514 -106.43433599533694 604.4681483474218 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.01763809020514 -106.43433599533694 604.4681483474218 + vertex -109.18236190979502 -106.43433599533697 604.4681483474218 + vertex -108.70000000000009 -106.43433599533697 604.6679491924311 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.01763809020514 -106.43433599533694 604.4681483474218 + vertex -108.70000000000009 -106.43433599533697 604.6679491924311 + vertex -135.50000000000009 -106.43433599533691 604.6679491924311 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.50000000000009 -106.43433599533691 604.6679491924311 + vertex -108.70000000000009 -106.43433599533697 604.6679491924311 + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.50000000000009 -106.43433599533691 604.6679491924311 + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + vertex -135.91421356237316 -106.43433599533697 604.9857864376269 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.91421356237316 -106.43433599533697 604.9857864376269 + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + vertex -107.96794919243118 -106.43433599533697 605.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.91421356237316 -106.43433599533697 604.9857864376269 + vertex -107.96794919243118 -106.43433599533697 605.4 + vertex -136.23205080756895 -106.43433599533697 605.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 605.4 + vertex -107.96794919243118 -106.43433599533697 605.4 + vertex -107.76814834742194 -106.43433599533697 605.8823619097949 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 605.4 + vertex -107.76814834742194 -106.43433599533697 605.8823619097949 + vertex -136.43185165257825 -106.43433599533697 605.8823619097949 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.43185165257825 -106.43433599533697 605.8823619097949 + vertex -107.76814834742194 -106.43433599533697 605.8823619097949 + vertex -107.70000000000007 -106.43433599533698 606.3999999999999 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.43185165257825 -106.43433599533697 605.8823619097949 + vertex -107.70000000000007 -106.43433599533698 606.3999999999999 + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + vertex -107.70000000000007 -106.43433599533698 606.3999999999999 + vertex -107.7000000000001 -106.43433599533698 608.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + vertex -107.7000000000001 -106.43433599533698 608.4 + vertex -136.50000000000009 -106.43433599533697 608.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 608.4 + vertex -107.7000000000001 -106.43433599533698 608.4 + vertex -107.76814834742194 -106.43433599533697 608.9176380902051 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 608.4 + vertex -107.76814834742194 -106.43433599533697 608.9176380902051 + vertex -136.43185165257825 -106.43433599533697 608.9176380902051 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.43185165257825 -106.43433599533697 608.9176380902051 + vertex -107.76814834742194 -106.43433599533697 608.9176380902051 + vertex -107.9679491924312 -106.43433599533697 609.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.43185165257825 -106.43433599533697 608.9176380902051 + vertex -107.9679491924312 -106.43433599533697 609.4 + vertex -136.23205080756895 -106.43433599533697 609.4 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 609.4 + vertex -107.9679491924312 -106.43433599533697 609.4 + vertex -108.285786437627 -106.43433599533697 609.814213562373 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 609.4 + vertex -108.285786437627 -106.43433599533697 609.814213562373 + vertex -135.9142135623732 -106.43433599533697 609.814213562373 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.9142135623732 -106.43433599533697 609.814213562373 + vertex -108.285786437627 -106.43433599533697 609.814213562373 + vertex -108.70000000000009 -106.43433599533697 610.1320508075687 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.9142135623732 -106.43433599533697 609.814213562373 + vertex -108.70000000000009 -106.43433599533697 610.1320508075687 + vertex -135.50000000000009 -106.43433599533694 610.1320508075687 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.50000000000009 -106.43433599533694 610.1320508075687 + vertex -108.70000000000009 -106.43433599533697 610.1320508075687 + vertex -109.18236190979505 -106.43433599533697 610.331851652578 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.50000000000009 -106.43433599533694 610.1320508075687 + vertex -109.18236190979505 -106.43433599533697 610.331851652578 + vertex -135.01763809020514 -106.43433599533694 610.331851652578 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.01763809020514 -106.43433599533694 610.331851652578 + vertex -109.18236190979505 -106.43433599533697 610.331851652578 + vertex -109.70000000000009 -106.43433599533697 610.3999999999999 + endloop +endfacet +facet normal -1.1657341758564144e-15 -1.0 -8.36021050187674e-16 + outer loop + vertex -135.01763809020514 -106.43433599533694 610.331851652578 + vertex -109.70000000000009 -106.43433599533697 610.3999999999999 + vertex -134.50000000000006 -106.43433599533697 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -159.68365785199265 -63.7115365474229 604.4681483474218 + vertex -147.02483880689016 -41.785818797484794 604.4 + vertex -159.42483880689014 -63.26324881133887 604.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -147.02483880689016 -41.785818797484794 604.4 + vertex -159.68365785199265 -63.7115365474229 604.4681483474218 + vertex -146.76601976178762 -41.337531061400774 604.4681483474218 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.76601976178762 -41.337531061400774 604.4681483474218 + vertex -159.68365785199265 -63.7115365474229 604.4681483474218 + vertex -159.92483880689014 -64.12927421512332 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.76601976178762 -41.337531061400774 604.4681483474218 + vertex -159.92483880689014 -64.12927421512332 604.6679491924311 + vertex -146.52483880689016 -40.91979339370037 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.52483880689016 -40.91979339370037 604.6679491924311 + vertex -159.92483880689014 -64.12927421512332 604.6679491924311 + vertex -160.1319455880767 -64.48799368273046 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.52483880689016 -40.91979339370037 604.6679491924311 + vertex -160.1319455880767 -64.48799368273046 604.9857864376269 + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + vertex -160.1319455880767 -64.48799368273046 604.9857864376269 + vertex -160.29086421067458 -64.76324881133888 605.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.3177320257036 -40.5610739260932 604.9857864376269 + vertex -160.29086421067458 -64.76324881133888 605.4 + vertex -146.15881340310568 -40.285818797484794 605.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.15881340310568 -40.285818797484794 605.4 + vertex -160.29086421067458 -64.76324881133888 605.4 + vertex -160.3907646331792 -64.9362814188145 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.15881340310568 -40.285818797484794 605.4 + vertex -160.3907646331792 -64.9362814188145 605.8823619097949 + vertex -146.05891298060106 -40.11278619000919 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.05891298060106 -40.11278619000919 605.8823619097949 + vertex -160.3907646331792 -64.9362814188145 605.8823619097949 + vertex -160.42483880689014 -64.99529961890775 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.05891298060106 -40.11278619000919 605.8823619097949 + vertex -160.42483880689014 -64.99529961890775 606.3999999999999 + vertex -146.02483880689016 -40.05376798991592 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.02483880689016 -40.05376798991592 606.3999999999999 + vertex -160.42483880689014 -64.99529961890775 606.3999999999999 + vertex -160.42483880689014 -64.99529961890775 608.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.02483880689016 -40.05376798991592 606.3999999999999 + vertex -160.42483880689014 -64.99529961890775 608.4 + vertex -146.02483880689016 -40.05376798991592 608.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.02483880689016 -40.05376798991592 608.4 + vertex -160.42483880689014 -64.99529961890775 608.4 + vertex -160.3907646331792 -64.9362814188145 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.02483880689016 -40.05376798991592 608.4 + vertex -160.3907646331792 -64.9362814188145 608.9176380902051 + vertex -146.05891298060106 -40.11278619000919 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.05891298060106 -40.11278619000919 608.9176380902051 + vertex -160.3907646331792 -64.9362814188145 608.9176380902051 + vertex -160.29086421067458 -64.76324881133888 609.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.05891298060106 -40.11278619000919 608.9176380902051 + vertex -160.29086421067458 -64.76324881133888 609.4 + vertex -146.15881340310568 -40.285818797484794 609.4 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.15881340310568 -40.285818797484794 609.4 + vertex -160.29086421067458 -64.76324881133888 609.4 + vertex -160.1319455880767 -64.48799368273048 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.15881340310568 -40.285818797484794 609.4 + vertex -160.1319455880767 -64.48799368273048 609.814213562373 + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + vertex -160.1319455880767 -64.48799368273048 609.814213562373 + vertex -159.92483880689014 -64.12927421512333 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.3177320257036 -40.5610739260932 609.814213562373 + vertex -159.92483880689014 -64.12927421512333 610.1320508075687 + vertex -146.52483880689016 -40.91979339370037 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.52483880689016 -40.91979339370037 610.1320508075687 + vertex -159.92483880689014 -64.12927421512333 610.1320508075687 + vertex -159.68365785199265 -63.7115365474229 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.52483880689016 -40.91979339370037 610.1320508075687 + vertex -159.68365785199265 -63.7115365474229 610.331851652578 + vertex -146.76601976178762 -41.337531061400774 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.76601976178762 -41.337531061400774 610.331851652578 + vertex -159.68365785199265 -63.7115365474229 610.331851652578 + vertex -159.42483880689014 -63.26324881133887 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844389 0.4999999999999998 -4.5316418029497855e-16 + outer loop + vertex -146.76601976178762 -41.337531061400774 610.331851652578 + vertex -159.42483880689014 -63.26324881133887 610.3999999999999 + vertex -147.02483880689016 -41.785818797484794 610.3999999999999 + endloop +endfacet +facet normal -5.32306105110957e-31 -8.360210501876742e-16 1.0 + outer loop + vertex -134.50000000000006 -104.43433599533697 610.3999999999999 + vertex -109.70000000000009 -106.43433599533697 610.3999999999999 + vertex -109.70000000000005 -104.43433599533701 610.3999999999999 + endloop +endfacet +facet normal -5.32306105110957e-31 -8.360210501876742e-16 1.0 + outer loop + vertex -109.70000000000009 -106.43433599533697 610.3999999999999 + vertex -134.50000000000006 -104.43433599533697 610.3999999999999 + vertex -134.50000000000006 -106.43433599533697 610.3999999999999 + endloop +endfacet +facet normal 0.9914448613738074 -1.3877787807814453e-15 -0.13052619222007458 + outer loop + vertex -107.70000000000005 -104.43433599533701 606.3999999999999 + vertex -107.76814834742194 -106.43433599533697 605.8823619097949 + vertex -107.76814834742193 -104.43433599533701 605.8823619097949 + endloop +endfacet +facet normal 0.9914448613738074 -1.3877787807814453e-15 -0.13052619222007458 + outer loop + vertex -107.76814834742194 -106.43433599533697 605.8823619097949 + vertex -107.70000000000005 -104.43433599533701 606.3999999999999 + vertex -107.70000000000007 -106.43433599533698 606.3999999999999 + endloop +endfacet +facet normal -0.6087614290087046 1.6653345369377356e-16 0.7933533402912474 + outer loop + vertex -135.91421356237316 -104.43433599533698 609.814213562373 + vertex -135.50000000000009 -106.43433599533694 610.1320508075687 + vertex -135.50000000000006 -104.43433599533697 610.1320508075687 + endloop +endfacet +facet normal -0.6087614290087046 1.6653345369377356e-16 0.7933533402912474 + outer loop + vertex -135.50000000000009 -106.43433599533694 610.1320508075687 + vertex -135.91421356237316 -104.43433599533698 609.814213562373 + vertex -135.9142135623732 -106.43433599533697 609.814213562373 + endloop +endfacet +facet normal 0.13052619221998926 -1.0200174038743624e-15 0.9914448613738187 + outer loop + vertex -109.70000000000005 -104.43433599533701 610.3999999999999 + vertex -109.18236190979505 -106.43433599533697 610.331851652578 + vertex -109.18236190979502 -104.43433599533701 610.331851652578 + endloop +endfacet +facet normal 0.13052619221998926 -1.0200174038743624e-15 0.9914448613738187 + outer loop + vertex -109.18236190979505 -106.43433599533697 610.331851652578 + vertex -109.70000000000005 -104.43433599533701 610.3999999999999 + vertex -109.70000000000009 -106.43433599533697 610.3999999999999 + endloop +endfacet +facet normal -0.38268343236514923 -2.2204460492503118e-16 0.9238795325112623 + outer loop + vertex -135.50000000000006 -104.43433599533697 610.1320508075687 + vertex -135.01763809020514 -106.43433599533694 610.331851652578 + vertex -135.0176380902051 -104.43433599533697 610.331851652578 + endloop +endfacet +facet normal -0.38268343236514923 -2.2204460492503118e-16 0.9238795325112623 + outer loop + vertex -135.01763809020514 -106.43433599533694 610.331851652578 + vertex -135.50000000000006 -104.43433599533697 610.1320508075687 + vertex -135.50000000000009 -106.43433599533694 610.1320508075687 + endloop +endfacet +facet normal -0.9914448613738114 1.4988010832439607e-15 -0.13052619222004416 + outer loop + vertex -136.43185165257822 -104.43433599533697 605.8823619097949 + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + vertex -136.50000000000006 -104.43433599533698 606.3999999999999 + endloop +endfacet +facet normal -0.9914448613738114 1.4988010832439607e-15 -0.13052619222004416 + outer loop + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + vertex -136.43185165257822 -104.43433599533697 605.8823619097949 + vertex -136.43185165257825 -106.43433599533697 605.8823619097949 + endloop +endfacet +facet normal 0.3826834323651558 -1.3322676295501875e-15 0.9238795325112594 + outer loop + vertex -109.18236190979502 -104.43433599533701 610.331851652578 + vertex -108.70000000000009 -106.43433599533697 610.1320508075687 + vertex -108.70000000000007 -104.43433599533701 610.1320508075687 + endloop +endfacet +facet normal 0.3826834323651558 -1.3322676295501875e-15 0.9238795325112594 + outer loop + vertex -108.70000000000009 -106.43433599533697 610.1320508075687 + vertex -109.18236190979502 -104.43433599533701 610.331851652578 + vertex -109.18236190979505 -106.43433599533697 610.331851652578 + endloop +endfacet +facet normal -0.6087614290087046 1.5543122344752186e-15 -0.7933533402912474 + outer loop + vertex -135.50000000000009 -106.43433599533691 604.6679491924311 + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -135.50000000000006 -104.43433599533697 604.6679491924311 + endloop +endfacet +facet normal -0.6087614290087046 1.5543122344752186e-15 -0.7933533402912474 + outer loop + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -135.50000000000009 -106.43433599533691 604.6679491924311 + vertex -135.91421356237316 -106.43433599533697 604.9857864376269 + endloop +endfacet +facet normal -0.9238795325112612 1.0547118733938985e-15 0.38268343236515173 + outer loop + vertex -136.43185165257825 -106.43433599533697 608.9176380902051 + vertex -136.23205080756892 -104.43433599533698 609.4 + vertex -136.43185165257822 -104.43433599533697 608.9176380902051 + endloop +endfacet +facet normal -0.9238795325112612 1.0547118733938985e-15 0.38268343236515173 + outer loop + vertex -136.23205080756892 -104.43433599533698 609.4 + vertex -136.43185165257825 -106.43433599533697 608.9176380902051 + vertex -136.23205080756895 -106.43433599533697 609.4 + endloop +endfacet +facet normal -0.9914448613738145 1.3877787807814453e-15 0.13052619222002182 + outer loop + vertex -136.50000000000009 -106.43433599533697 608.4 + vertex -136.43185165257822 -104.43433599533697 608.9176380902051 + vertex -136.50000000000006 -104.43433599533698 608.4 + endloop +endfacet +facet normal -0.9914448613738145 1.3877787807814453e-15 0.13052619222002182 + outer loop + vertex -136.43185165257822 -104.43433599533697 608.9176380902051 + vertex -136.50000000000009 -106.43433599533697 608.4 + vertex -136.43185165257825 -106.43433599533697 608.9176380902051 + endloop +endfacet +facet normal 0.6087614290086943 -1.5543122344752186e-15 0.7933533402912555 + outer loop + vertex -108.70000000000007 -104.43433599533701 610.1320508075687 + vertex -108.285786437627 -106.43433599533697 609.814213562373 + vertex -108.28578643762695 -104.43433599533701 609.814213562373 + endloop +endfacet +facet normal 0.6087614290086943 -1.5543122344752186e-15 0.7933533402912555 + outer loop + vertex -108.285786437627 -106.43433599533697 609.814213562373 + vertex -108.70000000000007 -104.43433599533701 610.1320508075687 + vertex -108.70000000000009 -106.43433599533697 610.1320508075687 + endloop +endfacet +facet normal 0.6087614290086942 -1.6653345369377356e-16 -0.7933533402912555 + outer loop + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + vertex -108.70000000000005 -104.43433599533701 604.6679491924311 + vertex -108.28578643762695 -104.43433599533701 604.9857864376269 + endloop +endfacet +facet normal 0.6087614290086942 -1.6653345369377356e-16 -0.7933533402912555 + outer loop + vertex -108.70000000000005 -104.43433599533701 604.6679491924311 + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + vertex -108.70000000000009 -106.43433599533697 604.6679491924311 + endloop +endfacet +facet normal -0.13052619221998404 -6.383782391594649e-16 0.9914448613738194 + outer loop + vertex -135.0176380902051 -104.43433599533697 610.331851652578 + vertex -134.50000000000006 -106.43433599533697 610.3999999999999 + vertex -134.50000000000006 -104.43433599533697 610.3999999999999 + endloop +endfacet +facet normal -0.13052619221998404 -6.383782391594649e-16 0.9914448613738194 + outer loop + vertex -134.50000000000006 -106.43433599533697 610.3999999999999 + vertex -135.0176380902051 -104.43433599533697 610.331851652578 + vertex -135.01763809020514 -106.43433599533694 610.331851652578 + endloop +endfacet +facet normal -0.9238795325112865 1.6653345369377344e-15 -0.38268343236509067 + outer loop + vertex -136.23205080756892 -104.43433599533698 605.4 + vertex -136.43185165257825 -106.43433599533697 605.8823619097949 + vertex -136.43185165257822 -104.43433599533697 605.8823619097949 + endloop +endfacet +facet normal -0.9238795325112865 1.6653345369377344e-15 -0.38268343236509067 + outer loop + vertex -136.43185165257825 -106.43433599533697 605.8823619097949 + vertex -136.23205080756892 -104.43433599533698 605.4 + vertex -136.23205080756895 -106.43433599533697 605.4 + endloop +endfacet +facet normal -0.38268343236516233 1.3322676295501875e-15 -0.9238795325112567 + outer loop + vertex -135.01763809020514 -106.43433599533694 604.4681483474218 + vertex -135.50000000000006 -104.43433599533697 604.6679491924311 + vertex -135.0176380902051 -104.43433599533697 604.4681483474218 + endloop +endfacet +facet normal -0.38268343236516233 1.3322676295501875e-15 -0.9238795325112567 + outer loop + vertex -135.50000000000006 -104.43433599533697 604.6679491924311 + vertex -135.01763809020514 -106.43433599533694 604.4681483474218 + vertex -135.50000000000009 -106.43433599533691 604.6679491924311 + endloop +endfacet +facet normal 0.1305261922199893 6.314393452555577e-16 -0.9914448613738187 + outer loop + vertex -109.18236190979502 -106.43433599533697 604.4681483474218 + vertex -109.70000000000005 -104.43433599533701 604.4 + vertex -109.18236190979502 -104.43433599533698 604.4681483474218 + endloop +endfacet +facet normal 0.1305261922199893 6.314393452555577e-16 -0.9914448613738187 + outer loop + vertex -109.70000000000005 -104.43433599533701 604.4 + vertex -109.18236190979502 -106.43433599533697 604.4681483474218 + vertex -109.70000000000007 -106.43433599533697 604.4 + endloop +endfacet +facet normal -1.0 1.443289932012703e-15 5.933957380480162e-32 + outer loop + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + vertex -136.50000000000006 -104.43433599533698 608.4 + vertex -136.50000000000006 -104.43433599533698 606.3999999999999 + endloop +endfacet +facet normal -1.0 1.443289932012703e-15 5.933957380480162e-32 + outer loop + vertex -136.50000000000006 -104.43433599533698 608.4 + vertex -136.50000000000009 -106.43433599533697 606.3999999999999 + vertex -136.50000000000009 -106.43433599533697 608.4 + endloop +endfacet +facet normal 0.9914448613738116 -1.5543122344752188e-15 0.13052619222004302 + outer loop + vertex -107.76814834742194 -106.43433599533697 608.9176380902051 + vertex -107.70000000000005 -104.43433599533701 608.4 + vertex -107.76814834742193 -104.43433599533701 608.9176380902051 + endloop +endfacet +facet normal 0.9914448613738116 -1.5543122344752188e-15 0.13052619222004302 + outer loop + vertex -107.70000000000005 -104.43433599533701 608.4 + vertex -107.76814834742194 -106.43433599533697 608.9176380902051 + vertex -107.7000000000001 -106.43433599533698 608.4 + endloop +endfacet +facet normal -0.793353340291217 6.661338147750938e-16 0.6087614290087443 + outer loop + vertex -136.23205080756895 -106.43433599533697 609.4 + vertex -135.91421356237316 -104.43433599533698 609.814213562373 + vertex -136.23205080756892 -104.43433599533698 609.4 + endloop +endfacet +facet normal -0.793353340291217 6.661338147750938e-16 0.6087614290087443 + outer loop + vertex -135.91421356237316 -104.43433599533698 609.814213562373 + vertex -136.23205080756895 -106.43433599533697 609.4 + vertex -135.9142135623732 -106.43433599533697 609.814213562373 + endloop +endfacet +facet normal 0.7933533402912081 -6.106226635438362e-16 -0.6087614290087562 + outer loop + vertex -107.96794919243118 -104.43433599533698 605.4 + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + vertex -108.28578643762695 -104.43433599533701 604.9857864376269 + endloop +endfacet +facet normal 0.7933533402912081 -6.106226635438362e-16 -0.6087614290087562 + outer loop + vertex -108.28578643762697 -106.43433599533697 604.9857864376269 + vertex -107.96794919243118 -104.43433599533698 605.4 + vertex -107.96794919243118 -106.43433599533697 605.4 + endloop +endfacet +facet normal 0.9238795325113006 -1.0547118733938983e-15 -0.3826834323650562 + outer loop + vertex -107.76814834742193 -104.43433599533701 605.8823619097949 + vertex -107.96794919243118 -106.43433599533697 605.4 + vertex -107.96794919243118 -104.43433599533698 605.4 + endloop +endfacet +facet normal 0.9238795325113006 -1.0547118733938983e-15 -0.3826834323650562 + outer loop + vertex -107.96794919243118 -106.43433599533697 605.4 + vertex -107.76814834742193 -104.43433599533701 605.8823619097949 + vertex -107.76814834742194 -106.43433599533697 605.8823619097949 + endloop +endfacet +facet normal 4.830022985346437e-31 8.36021050187674e-16 -1.0 + outer loop + vertex -109.70000000000007 -106.43433599533697 604.4 + vertex -134.50000000000006 -104.43433599533697 604.4 + vertex -109.70000000000005 -104.43433599533701 604.4 + endloop +endfacet +facet normal 4.830022985346437e-31 8.36021050187674e-16 -1.0 + outer loop + vertex -134.50000000000006 -104.43433599533697 604.4 + vertex -109.70000000000007 -106.43433599533697 604.4 + vertex -134.50000000000006 -106.43433599533697 604.4 + endloop +endfacet +facet normal -0.793353340291199 1.6098233857064766e-15 -0.6087614290087678 + outer loop + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -136.23205080756895 -106.43433599533697 605.4 + vertex -136.23205080756892 -104.43433599533698 605.4 + endloop +endfacet +facet normal -0.793353340291199 1.6098233857064766e-15 -0.6087614290087678 + outer loop + vertex -136.23205080756895 -106.43433599533697 605.4 + vertex -135.91421356237313 -104.43433599533697 604.9857864376269 + vertex -135.91421356237316 -106.43433599533697 604.9857864376269 + endloop +endfacet +facet normal -0.13052619221998404 1.0269562977782696e-15 -0.9914448613738194 + outer loop + vertex -134.50000000000006 -106.43433599533697 604.4 + vertex -135.0176380902051 -104.43433599533697 604.4681483474218 + vertex -134.50000000000006 -104.43433599533697 604.4 + endloop +endfacet +facet normal -0.13052619221998404 1.0269562977782696e-15 -0.9914448613738194 + outer loop + vertex -135.0176380902051 -104.43433599533697 604.4681483474218 + vertex -134.50000000000006 -106.43433599533697 604.4 + vertex -135.01763809020514 -106.43433599533694 604.4681483474218 + endloop +endfacet +facet normal 1.0 -1.443289932012703e-15 2.4421626117070182e-15 + outer loop + vertex -107.7000000000001 -106.43433599533698 608.4 + vertex -107.70000000000005 -104.43433599533701 606.3999999999999 + vertex -107.70000000000005 -104.43433599533701 608.4 + endloop +endfacet +facet normal 1.0 -1.443289932012703e-15 2.4421626117070182e-15 + outer loop + vertex -107.70000000000005 -104.43433599533701 606.3999999999999 + vertex -107.7000000000001 -106.43433599533698 608.4 + vertex -107.70000000000007 -106.43433599533698 606.3999999999999 + endloop +endfacet +facet normal 0.38268343236515573 1.9428902930940222e-16 -0.9238795325112594 + outer loop + vertex -108.70000000000009 -106.43433599533697 604.6679491924311 + vertex -109.18236190979502 -104.43433599533698 604.4681483474218 + vertex -108.70000000000005 -104.43433599533701 604.6679491924311 + endloop +endfacet +facet normal 0.38268343236515573 1.9428902930940222e-16 -0.9238795325112594 + outer loop + vertex -109.18236190979502 -104.43433599533698 604.4681483474218 + vertex -108.70000000000009 -106.43433599533697 604.6679491924311 + vertex -109.18236190979502 -106.43433599533697 604.4681483474218 + endloop +endfacet +facet normal 0.9238795325112721 -1.6653345369377348e-15 0.3826834323651253 + outer loop + vertex -107.9679491924312 -106.43433599533697 609.4 + vertex -107.76814834742193 -104.43433599533701 608.9176380902051 + vertex -107.96794919243118 -104.43433599533701 609.4 + endloop +endfacet +facet normal 0.9238795325112721 -1.6653345369377348e-15 0.3826834323651253 + outer loop + vertex -107.76814834742193 -104.43433599533701 608.9176380902051 + vertex -107.9679491924312 -106.43433599533697 609.4 + vertex -107.76814834742194 -106.43433599533697 608.9176380902051 + endloop +endfacet +facet normal 0.793353340291208 -1.6653345369377344e-15 0.6087614290087562 + outer loop + vertex -108.285786437627 -106.43433599533697 609.814213562373 + vertex -107.96794919243118 -104.43433599533701 609.4 + vertex -108.28578643762695 -104.43433599533701 609.814213562373 + endloop +endfacet +facet normal 0.793353340291208 -1.6653345369377344e-15 0.6087614290087562 + outer loop + vertex -107.96794919243118 -104.43433599533701 609.4 + vertex -108.285786437627 -106.43433599533697 609.814213562373 + vertex -107.9679491924312 -106.43433599533697 609.4 + endloop +endfacet +facet normal -0.10571189404138018 -0.9943967998028674 -3.128704161156741e-16 + outer loop + vertex -151.60819479272956 -124.02712191759254 617.4 + vertex -153.21066695824285 -123.85676701721619 597.4 + vertex -151.60819479272956 -124.02712191759254 597.4 + endloop +endfacet +facet normal -0.10571189404138018 -0.9943967998028674 -3.128704161156741e-16 + outer loop + vertex -153.21066695824285 -123.85676701721619 597.4 + vertex -151.60819479272956 -124.02712191759254 617.4 + vertex -153.21066695824285 -123.85676701721619 617.4 + endloop +endfacet +facet normal -0.6377703208595383 -0.7702266016119681 -2.9376672002655275e-16 + outer loop + vertex -172.28093853645186 -115.8219604174845 597.4 + vertex -173.52216003924207 -114.79419244058586 617.4 + vertex -173.52216003924207 -114.79419244058586 597.4 + endloop +endfacet +facet normal -0.6377703208595383 -0.7702266016119681 -2.9376672002655275e-16 + outer loop + vertex -173.52216003924207 -114.79419244058586 617.4 + vertex -172.28093853645186 -115.8219604174845 597.4 + vertex -172.28093853645186 -115.8219604174845 617.4 + endloop +endfacet +facet normal -0.1884462435099426 -0.9820835062798843 -3.1677145571319815e-16 + outer loop + vertex -154.80461230967546 -123.6195412808944 617.4 + vertex -156.38724158134568 -123.3158598330256 597.4 + vertex -154.80461230967546 -123.6195412808944 597.4 + endloop +endfacet +facet normal -0.1884462435099426 -0.9820835062798843 -3.1677145571319815e-16 + outer loop + vertex -156.38724158134568 -123.3158598330256 597.4 + vertex -154.80461230967546 -123.6195412808944 617.4 + vertex -156.38724158134568 -123.3158598330256 617.4 + endloop +endfacet +facet normal -0.8090947071516228 -0.5876782749593777 -2.5397624073309867e-16 + outer loop + vertex -179.02654971579267 -108.92919478062035 597.4 + vertex -179.97359427394687 -107.62533725842033 617.4 + vertex -179.97359427394687 -107.62533725842033 597.4 + endloop +endfacet +facet normal -0.8090947071516228 -0.5876782749593777 -2.5397624073309867e-16 + outer loop + vertex -179.97359427394687 -107.62533725842033 617.4 + vertex -179.02654971579267 -108.92919478062035 597.4 + vertex -179.02654971579267 -108.92919478062035 617.4 + endloop +endfacet +facet normal -0.06403093220853912 -0.9979479143324594 -3.100967044653076e-16 + outer loop + vertex -150.0000000000001 -124.13030787576982 617.4 + vertex -151.60819479272956 -124.02712191759254 597.4 + vertex -150.0000000000001 -124.13030787576982 597.4 + endloop +endfacet +facet normal -0.06403093220853912 -0.9979479143324594 -3.100967044653076e-16 + outer loop + vertex -151.60819479272956 -124.02712191759254 597.4 + vertex -150.0000000000001 -124.13030787576982 617.4 + vertex -151.60819479272956 -124.02712191759254 617.4 + endloop +endfacet +facet normal -0.832965141375823 -0.5533254677427698 -2.45713916987015e-16 + outer loop + vertex -179.97359427394687 -107.62533725842033 597.4 + vertex -180.86527922376087 -106.28301249011633 617.4 + vertex -180.86527922376087 -106.28301249011633 597.4 + endloop +endfacet +facet normal -0.832965141375823 -0.5533254677427698 -2.45713916987015e-16 + outer loop + vertex -180.86527922376087 -106.28301249011633 617.4 + vertex -179.97359427394687 -107.62533725842033 597.4 + vertex -179.97359427394687 -107.62533725842033 617.4 + endloop +endfacet +facet normal -0.9961946980917452 -0.08715574274766245 -1.1872720193645655e-16 + outer loop + vertex -121.05538705967454 -96.35900127253036 597.4 + vertex -121.11730055134134 -95.65132682453225 617.4 + vertex -121.11730055134134 -95.65132682453225 597.4 + endloop +endfacet +facet normal -0.9961946980917452 -0.08715574274766245 -1.1872720193645655e-16 + outer loop + vertex -121.11730055134134 -95.65132682453225 617.4 + vertex -121.05538705967454 -96.35900127253036 597.4 + vertex -121.05538705967454 -96.35900127253038 617.4 + endloop +endfacet +facet normal -0.9961946980917453 0.0871557427476599 -6.559734023084946e-17 + outer loop + vertex -121.11730055134134 -97.06667572052851 597.4 + vertex -121.05538705967454 -96.35900127253038 617.4 + vertex -121.05538705967454 -96.35900127253036 597.4 + endloop +endfacet +facet normal -0.9961946980917453 0.0871557427476599 -6.559734023084946e-17 + outer loop + vertex -121.05538705967454 -96.35900127253038 617.4 + vertex -121.11730055134134 -97.06667572052851 597.4 + vertex -121.11730055134134 -97.06667572052851 617.4 + endloop +endfacet +facet normal -0.4639286791616627 -0.8858725532780182 -3.129325803730414e-16 + outer loop + vertex -165.49228244115207 -120.13596687117304 597.4 + vertex -166.9198675953899 -119.38834500102291 617.4 + vertex -166.9198675953899 -119.38834500102291 597.4 + endloop +endfacet +facet normal -0.4639286791616627 -0.8858725532780182 -3.129325803730414e-16 + outer loop + vertex -166.9198675953899 -119.38834500102291 617.4 + vertex -165.49228244115207 -120.13596687117304 597.4 + vertex -165.49228244115207 -120.13596687117304 617.4 + endloop +endfacet +facet normal -0.7571505514688204 -0.6532404170062207 -2.6915389863122445e-16 + outer loop + vertex -176.9731047312377 -111.4124528448287 597.4 + vertex -178.02580279487614 -110.19230341949638 617.4 + vertex -178.02580279487614 -110.19230341949638 597.4 + endloop +endfacet +facet normal -0.7571505514688204 -0.6532404170062207 -2.6915389863122445e-16 + outer loop + vertex -178.02580279487614 -110.19230341949638 617.4 + vertex -176.9731047312377 -111.4124528448287 597.4 + vertex -176.9731047312377 -111.4124528448287 617.4 + endloop +endfacet +facet normal -0.22935485323249694 -0.9733428744788242 -3.178919571804744e-16 + outer loop + vertex -156.38724158134568 -123.3158598330256 617.4 + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -156.38724158134568 -123.3158598330256 597.4 + endloop +endfacet +facet normal -0.22935485323249694 -0.9733428744788242 -3.178919571804744e-16 + outer loop + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -156.38724158134568 -123.3158598330256 617.4 + vertex -157.95578530972676 -122.9462540897214 617.4 + endloop +endfacet +facet normal -0.2698621119172056 -0.9628989773343752 -3.184561753812833e-16 + outer loop + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -159.5074986797672 -122.51137082887453 617.4 + vertex -159.5074986797672 -122.51137082887453 597.4 + endloop +endfacet +facet normal -0.2698621119172056 -0.9628989773343752 -3.184561753812833e-16 + outer loop + vertex -159.5074986797672 -122.51137082887453 617.4 + vertex -157.95578530972676 -122.9462540897214 597.4 + vertex -157.95578530972676 -122.9462540897214 617.4 + endloop +endfacet +facet normal -0.9659258262890692 -0.25881904510251724 -1.6824959769008343e-16 + outer loop + vertex -121.11730055134134 -95.65132682453225 597.4 + vertex -121.3011598162272 -94.965154706536 617.4 + vertex -121.3011598162272 -94.96515470653598 597.4 + endloop +endfacet +facet normal -0.9659258262890692 -0.25881904510251724 -1.6824959769008343e-16 + outer loop + vertex -121.3011598162272 -94.965154706536 617.4 + vertex -121.11730055134134 -95.65132682453225 597.4 + vertex -121.11730055134134 -95.65132682453225 617.4 + endloop +endfacet +facet normal -0.3882711944089187 -0.9215451587373632 -3.1680613295388623e-16 + outer loop + vertex -162.54960709458362 -121.44892868430706 597.4 + vertex -164.0346787143162 -120.8232289819003 617.4 + vertex -164.0346787143162 -120.8232289819003 597.4 + endloop +endfacet +facet normal -0.3882711944089187 -0.9215451587373632 -3.1680613295388623e-16 + outer loop + vertex -164.0346787143162 -120.8232289819003 617.4 + vertex -162.54960709458362 -121.44892868430706 597.4 + vertex -162.54960709458362 -121.44892868430706 617.4 + endloop +endfacet +facet normal -0.5005724413202218 -0.8656946522826123 -3.1017246104582245e-16 + outer loop + vertex -166.9198675953899 -119.38834500102291 597.4 + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -168.31493602721872 -118.58167164467494 597.4 + endloop +endfacet +facet normal -0.5005724413202218 -0.8656946522826123 -3.1017246104582245e-16 + outer loop + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -166.9198675953899 -119.38834500102291 597.4 + vertex -166.9198675953899 -119.38834500102291 617.4 + endloop +endfacet +facet normal -0.8553779590758187 -0.5180043891004082 -2.3702161526486e-16 + outer loop + vertex -180.86527922376087 -106.28301249011633 597.4 + vertex -181.70004419415466 -104.90456942726227 617.4 + vertex -181.70004419415466 -104.90456942726227 597.4 + endloop +endfacet +facet normal -0.8553779590758187 -0.5180043891004082 -2.3702161526486e-16 + outer loop + vertex -181.70004419415466 -104.90456942726227 617.4 + vertex -180.86527922376087 -106.28301249011633 597.4 + vertex -180.86527922376087 -106.28301249011633 617.4 + endloop +endfacet +facet normal -0.258819045102516 0.9659258262890695 2.70468178479878e-16 + outer loop + vertex -124.42304733448304 -100.3724225036702 617.4 + vertex -123.73687521648677 -100.18856323878435 597.4 + vertex -124.42304733448304 -100.3724225036702 597.4 + endloop +endfacet +facet normal -0.258819045102516 0.9659258262890695 2.70468178479878e-16 + outer loop + vertex -123.73687521648677 -100.18856323878435 597.4 + vertex -124.42304733448304 -100.3724225036702 617.4 + vertex -123.73687521648677 -100.18856323878435 617.4 + endloop +endfacet +facet normal -0.6694253404686544 -0.7428793398247298 -2.8835986090356186e-16 + outer loop + vertex -173.52216003924207 -114.79419244058586 597.4 + vertex -174.7193113822874 -113.71541234474994 617.4 + vertex -174.7193113822874 -113.71541234474994 597.4 + endloop +endfacet +facet normal -0.6694253404686544 -0.7428793398247298 -2.8835986090356186e-16 + outer loop + vertex -174.7193113822874 -113.71541234474994 617.4 + vertex -173.52216003924207 -114.79419244058586 597.4 + vertex -173.52216003924207 -114.79419244058586 617.4 + endloop +endfacet +facet normal -0.8660254037844388 -0.49999999999999983 -2.325189473563781e-16 + outer loop + vertex -121.6013783836058 -94.32133391112707 597.4 + vertex -142.45782590751944 -58.19690713431459 617.4 + vertex -142.4578259075194 -58.19690713431459 597.4 + endloop +endfacet +facet normal -0.8660254037844388 -0.49999999999999983 -2.325189473563781e-16 + outer loop + vertex -142.45782590751944 -58.19690713431459 617.4 + vertex -121.6013783836058 -94.32133391112707 597.4 + vertex -121.6013783836058 -94.32133391112707 617.4 + endloop +endfacet +facet normal 0.2588190451025141 -0.9659258262890701 -2.704681784798784e-16 + outer loop + vertex -146.7223783245469 -56.1734619901068 617.4 + vertex -147.40855044254315 -56.35732125499265 597.4 + vertex -146.72237832454687 -56.1734619901068 597.4 + endloop +endfacet +facet normal 0.2588190451025141 -0.9659258262890701 -2.704681784798784e-16 + outer loop + vertex -147.40855044254315 -56.35732125499265 597.4 + vertex -146.7223783245469 -56.1734619901068 617.4 + vertex -147.40855044254315 -56.35732125499265 617.4 + endloop +endfacet +facet normal -0.6071044080923507 -0.7946220722298348 -2.9836538446986723e-16 + outer loop + vertex -143.39512921140332 -57.06499570299079 597.4 + vertex -143.42990957836216 -57.03842292728556 617.4 + vertex -143.42990957836216 -57.03842292728556 597.4 + endloop +endfacet +facet normal -0.6071044080923507 -0.7946220722298348 -2.9836538446986723e-16 + outer loop + vertex -143.42990957836216 -57.03842292728556 617.4 + vertex -143.39512921140332 -57.06499570299079 597.4 + vertex -143.39512921140332 -57.06499570299079 617.4 + endloop +endfacet +facet normal -0.8152236677528554 -0.5791462436514476 -2.5194270784799017e-16 + outer loop + vertex -142.4853604776734 -58.14921585984331 597.4 + vertex -142.89319062544635 -57.575141880201365 617.4 + vertex -142.89319062544635 -57.575141880201365 597.4 + endloop +endfacet +facet normal -0.8152236677528554 -0.5791462436514476 -2.5194270784799017e-16 + outer loop + vertex -142.89319062544635 -57.575141880201365 617.4 + vertex -142.4853604776734 -58.14921585984331 597.4 + vertex -142.4853604776734 -58.149215859843316 617.4 + endloop +endfacet +facet normal -0.5713404822174107 -0.8207131370823649 -3.0300922412569866e-16 + outer loop + vertex -143.42990957836216 -57.03842292728556 597.4 + vertex -143.97703651514544 -56.657539822371284 617.4 + vertex -143.97703651514541 -56.65753982237127 597.4 + endloop +endfacet +facet normal -0.5713404822174107 -0.8207131370823649 -3.0300922412569866e-16 + outer loop + vertex -143.97703651514544 -56.657539822371284 617.4 + vertex -143.42990957836216 -57.03842292728556 597.4 + vertex -143.42990957836216 -57.03842292728556 617.4 + endloop +endfacet +facet normal -0.3963729504701247 -0.9180895839380863 -3.1650240770774985e-16 + outer loop + vertex -144.05167483247538 -56.60305820935861 597.4 + vertex -144.62085731055436 -56.35732125499266 617.4 + vertex -144.62085731055436 -56.35732125499265 597.4 + endloop +endfacet +facet normal -0.3963729504701247 -0.9180895839380863 -3.1650240770774985e-16 + outer loop + vertex -144.62085731055436 -56.35732125499266 617.4 + vertex -144.05167483247538 -56.60305820935861 597.4 + vertex -144.05167483247538 -56.60305820935861 617.4 + endloop +endfacet +facet normal -0.8191520442889846 0.5735764363510566 9.904188843509443e-17 + outer loop + vertex -122.00883426422534 -98.9785759376758 617.4 + vertex -121.6013783836058 -98.39666863393369 597.4 + vertex -122.00883426422534 -98.9785759376758 597.4 + endloop +endfacet +facet normal -0.8191520442889846 0.5735764363510566 9.904188843509443e-17 + outer loop + vertex -121.6013783836058 -98.39666863393369 597.4 + vertex -122.00883426422534 -98.9785759376758 617.4 + vertex -121.6013783836058 -98.39666863393369 617.4 + endloop +endfacet +facet normal 0.8191520442889846 -0.5735764363510566 -9.904188843509443e-17 + outer loop + vertex -149.13659139480458 -57.5673085561012 617.4 + vertex -149.5440472754241 -58.14921585984331 597.4 + vertex -149.13659139480458 -57.56730855610119 597.4 + endloop +endfacet +facet normal 0.8191520442889846 -0.5735764363510566 -9.904188843509443e-17 + outer loop + vertex -149.5440472754241 -58.14921585984331 597.4 + vertex -149.13659139480458 -57.5673085561012 617.4 + vertex -149.5440472754241 -58.14921585984331 617.4 + endloop +endfacet +facet normal -0.5895807326816715 -0.8077094524954773 -3.007332061776943e-16 + outer loop + vertex -143.97703651514541 -56.65753982237127 597.4 + vertex -144.05167483247538 -56.60305820935861 617.4 + vertex -144.05167483247538 -56.60305820935861 597.4 + endloop +endfacet +facet normal -0.5895807326816715 -0.8077094524954773 -3.007332061776943e-16 + outer loop + vertex -144.05167483247538 -56.60305820935861 617.4 + vertex -143.97703651514541 -56.65753982237127 597.4 + vertex -143.97703651514544 -56.657539822371284 617.4 + endloop +endfacet +facet normal -0.7128176874195393 -0.7013493740653512 -2.7971600712696406e-16 + outer loop + vertex -142.89319062544635 -57.575141880201365 597.4 + vertex -143.39512921140332 -57.06499570299079 617.4 + vertex -143.39512921140332 -57.06499570299079 597.4 + endloop +endfacet +facet normal -0.7128176874195393 -0.7013493740653512 -2.7971600712696406e-16 + outer loop + vertex -143.39512921140332 -57.06499570299079 617.4 + vertex -142.89319062544635 -57.575141880201365 597.4 + vertex -142.89319062544635 -57.575141880201365 617.4 + endloop +endfacet +facet normal 0.7071067811865519 -0.7071067811865432 -1.5010751463383334e-16 + outer loop + vertex -148.6342785416942 -57.06499570299079 617.4 + vertex -149.13659139480458 -57.56730855610119 597.4 + vertex -148.6342785416942 -57.064995702990785 597.4 + endloop +endfacet +facet normal 0.7071067811865519 -0.7071067811865432 -1.5010751463383334e-16 + outer loop + vertex -149.13659139480458 -57.56730855610119 597.4 + vertex -148.6342785416942 -57.06499570299079 617.4 + vertex -149.13659139480458 -57.5673085561012 617.4 + endloop +endfacet +facet normal -0.8660254037845414 -0.4999999999998221 -2.3251894735633336e-16 + outer loop + vertex -142.4578259075194 -58.19690713431459 597.4 + vertex -142.4853604776734 -58.149215859843316 617.4 + vertex -142.4853604776734 -58.14921585984331 597.4 + endloop +endfacet +facet normal -0.8660254037845414 -0.4999999999998221 -2.3251894735633336e-16 + outer loop + vertex -142.4853604776734 -58.149215859843316 617.4 + vertex -142.4578259075194 -58.19690713431459 597.4 + vertex -142.45782590751944 -58.19690713431459 617.4 + endloop +endfacet +facet normal -0.4226182617407045 0.9063077870366477 2.3714292307799425e-16 + outer loop + vertex -123.73687521648677 -100.18856323878435 617.4 + vertex -123.09305442107785 -99.88834467140573 597.4 + vertex -123.73687521648677 -100.18856323878435 597.4 + endloop +endfacet +facet normal -0.4226182617407045 0.9063077870366477 2.3714292307799425e-16 + outer loop + vertex -123.09305442107785 -99.88834467140573 597.4 + vertex -123.73687521648677 -100.18856323878435 617.4 + vertex -123.09305442107785 -99.88834467140573 617.4 + endloop +endfacet +facet normal -0.9063077870366494 0.42261826174070066 4.496692457386016e-17 + outer loop + vertex -121.6013783836058 -98.39666863393369 617.4 + vertex -121.3011598162272 -97.75284783852477 597.4 + vertex -121.6013783836058 -98.39666863393369 597.4 + endloop +endfacet +facet normal -0.9063077870366494 0.42261826174070066 4.496692457386016e-17 + outer loop + vertex -121.3011598162272 -97.75284783852477 597.4 + vertex -121.6013783836058 -98.39666863393369 617.4 + vertex -121.3011598162272 -97.75284783852477 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.67783335074787 -105.75777139462686 617.4 + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -162.12500000000009 -103.12919183399713 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.54940691211783 -101.06482220219574 617.4 + vertex -155.38557599864262 -104.43433599533701 617.4 + vertex -153.0000000000001 -104.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -155.38557599864262 -104.43433599533701 617.4 + vertex -154.54940691211783 -101.06482220219574 617.4 + vertex -161.12500000000009 -104.861242641566 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -155.38557599864262 -104.43433599533701 617.4 + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -170.67210412904055 -113.26001712639702 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.67210412904055 -113.26001712639702 617.4 + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -165.67783335074787 -107.48982220219573 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -165.67783335074787 -107.48982220219573 617.4 + vertex -161.12500000000009 -104.861242641566 617.4 + vertex -166.67783335074787 -105.75777139462686 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.67210412904055 -113.26001712639702 617.4 + vertex -165.67783335074787 -107.48982220219573 617.4 + vertex -172.30292768969883 -111.31482220219574 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -93.55470053837935 -102.43433599533701 617.4 + vertex -94.7094010767586 -100.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.55470053837935 -102.43433599533701 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -93.33453298111435 -102.95197408554206 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.33453298111435 -102.95197408554206 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -93.28675134594823 -103.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.28675134594823 -103.43433599533701 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -93.41461187235467 -103.84854955771011 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.41461187235467 -103.84854955771011 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -93.7094010767586 -104.16638680290588 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.7094010767586 -104.16638680290588 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -94.15102956204208 -104.36618764791513 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -94.15102956204208 -104.36618764791513 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -94.70940107675862 -104.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -94.70940107675862 -104.43433599533701 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -150.0000000000001 -104.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -124.42304733448304 -100.3724225036702 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -124.42304733448304 -100.3724225036702 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -123.73687521648677 -100.18856323878435 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -123.73687521648677 -100.18856323878435 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -123.09305442107785 -99.88834467140573 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -123.09305442107785 -99.88834467140573 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -122.51114711733574 -99.48088879078622 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -122.51114711733574 -99.48088879078622 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -122.00883426422534 -98.9785759376758 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -122.00883426422534 -98.9785759376758 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.6013783836058 -98.39666863393369 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.6013783836058 -98.39666863393369 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.3011598162272 -97.75284783852477 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.3011598162272 -97.75284783852477 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.11730055134134 -97.06667572052851 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.11730055134134 -97.06667572052851 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.05538705967454 -96.35900127253038 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.05538705967454 -96.35900127253038 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.11730055134134 -95.65132682453225 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.11730055134134 -95.65132682453225 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.3011598162272 -94.965154706536 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.3011598162272 -94.965154706536 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -121.6013783836058 -94.32133391112707 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -124.42304733448304 -100.3724225036702 617.4 + vertex -125.13072178248116 -100.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -125.13072178248116 -100.43433599533701 617.4 + vertex -150.5255562475269 -100.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -150.5255562475269 -100.43433599533701 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -164.7994069121178 -83.31130142461475 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -166.94278799932135 -80.28471878135097 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.94278799932135 -80.28471878135097 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -179.89715088236125 -69.34141226851004 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.94278799932135 -80.28471878135097 617.4 + vertex -179.89715088236125 -69.34141226851004 617.4 + vertex -181.10149984918363 -71.91527419881093 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -179.89715088236125 -69.34141226851004 617.4 + vertex -182.50000000000009 -67.83865662978125 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -182.50000000000009 -67.83865662978125 617.4 + vertex -183.21473573526944 -69.28298715360742 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.10149984918363 -71.91527419881093 617.4 + vertex -183.21473573526944 -69.28298715360742 617.4 + vertex -181.64696360879714 -73.29754865337445 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.64696360879714 -73.29754865337445 617.4 + vertex -183.21473573526944 -69.28298715360742 617.4 + vertex -183.86844014664098 -70.75594620798759 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.64696360879714 -73.29754865337445 617.4 + vertex -183.86844014664098 -70.75594620798759 617.4 + vertex -182.13413950932807 -74.7014265051594 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.13413950932807 -74.7014265051594 617.4 + vertex -183.86844014664098 -70.75594620798759 617.4 + vertex -184.45996930827118 -72.25495624273324 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.13413950932807 -74.7014265051594 617.4 + vertex -184.45996930827118 -72.25495624273324 617.4 + vertex -182.56217503533787 -76.12445109007139 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.56217503533787 -76.12445109007139 617.4 + vertex -184.45996930827118 -72.25495624273324 617.4 + vertex -184.98828809559384 -73.77739412070689 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.56217503533787 -76.12445109007139 617.4 + vertex -184.98828809559384 -73.77739412070689 617.4 + vertex -182.93032116189784 -77.56413223889896 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.93032116189784 -77.56413223889896 617.4 + vertex -184.98828809559384 -73.77739412070689 617.4 + vertex -185.45247199669834 -75.32059570808379 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.93032116189784 -77.56413223889896 617.4 + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -183.23793366531743 -79.01795063489293 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.23793366531743 -79.01795063489293 617.4 + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -183.48447425048 -80.48336222235163 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.48447425048 -80.48336222235163 617.4 + vertex -185.45247199669834 -75.32059570808379 617.4 + vertex -185.8517087301446 -76.8818605363542 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.48447425048 -80.48336222235163 617.4 + vertex -185.8517087301446 -76.8818605363542 617.4 + vertex -183.66951149281203 -81.95780265849703 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.66951149281203 -81.95780265849703 617.4 + vertex -185.8517087301446 -76.8818605363542 617.4 + vertex -186.18529966638516 -78.45845652790855 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.66951149281203 -81.95780265849703 617.4 + vertex -186.18529966638516 -78.45845652790855 617.4 + vertex -183.7927215932388 -83.43869180085149 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.7927215932388 -83.43869180085149 617.4 + vertex -186.18529966638516 -78.45845652790855 617.4 + vertex -186.45266105030615 -80.04762477693534 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.7927215932388 -83.43869180085149 617.4 + vertex -186.45266105030615 -80.04762477693534 617.4 + vertex -183.8538889448047 -84.92343822226253 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.8538889448047 -84.92343822226253 617.4 + vertex -186.45266105030615 -80.04762477693534 617.4 + vertex -186.65332502274782 -81.64658437726645 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.8538889448047 -84.92343822226253 617.4 + vertex -186.65332502274782 -81.64658437726645 617.4 + vertex -183.8529065099664 -86.40944374567499 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.8529065099664 -86.40944374567499 617.4 + vertex -186.65332502274782 -81.64658437726645 617.4 + vertex -183.7897760078994 -87.89410799071469 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.7897760078994 -87.89410799071469 617.4 + vertex -186.65332502274782 -81.64658437726645 617.4 + vertex -186.78694043921743 -83.2525372887208 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.7897760078994 -87.89410799071469 617.4 + vertex -186.78694043921743 -83.2525372887208 617.4 + vertex -183.66460791148953 -89.3748329241279 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.66460791148953 -89.3748329241279 617.4 + vertex -186.78694043921743 -83.2525372887208 617.4 + vertex -186.85327348436152 -84.86267323343138 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.66460791148953 -89.3748329241279 617.4 + vertex -186.85327348436152 -84.86267323343138 617.4 + vertex -183.47762125401513 -90.84902740611359 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.47762125401513 -90.84902740611359 617.4 + vertex -186.85327348436152 -84.86267323343138 617.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.47762125401513 -90.84902740611359 617.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -186.8522080811225 -86.47417461358685 617.4 + vertex -182.5529276896988 -93.56130142461475 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.5529276896988 -93.56130142461475 617.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + vertex -172.30292768969883 -111.31482220219574 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -150.00000000000014 -121.12479659831224 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -154.54940691211783 -101.06482220219574 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.54940691211783 -101.06482220219574 617.4 + vertex -150.0000000000001 -104.43433599533701 617.4 + vertex -164.7994069121178 -83.31130142461475 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000014 -121.12479659831224 617.4 + vertex -153.0000000000001 -104.43433599533701 617.4 + vertex -152.83120430088547 -120.88086243345158 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000014 -121.12479659831224 617.4 + vertex -152.83120430088547 -120.88086243345158 617.4 + vertex -150.0000000000001 -124.13030787576982 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.0000000000001 -124.13030787576982 617.4 + vertex -152.83120430088547 -120.88086243345158 617.4 + vertex -151.60819479272956 -124.02712191759254 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -151.60819479272956 -124.02712191759254 617.4 + vertex -152.83120430088547 -120.88086243345158 617.4 + vertex -154.30102097334648 -120.66211067883889 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -151.60819479272956 -124.02712191759254 617.4 + vertex -154.30102097334648 -120.66211067883889 617.4 + vertex -153.21066695824285 -123.85676701721619 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -153.21066695824285 -123.85676701721619 617.4 + vertex -154.30102097334648 -120.66211067883889 617.4 + vertex -155.76040280706806 -120.38207845891773 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -153.21066695824285 -123.85676701721619 617.4 + vertex -155.76040280706806 -120.38207845891773 617.4 + vertex -154.80461230967546 -123.6195412808944 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.80461230967546 -123.6195412808944 617.4 + vertex -155.76040280706806 -120.38207845891773 617.4 + vertex -157.2067960108166 -120.04125580570847 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.80461230967546 -123.6195412808944 617.4 + vertex -157.2067960108166 -120.04125580570847 617.4 + vertex -156.38724158134568 -123.3158598330256 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -156.38724158134568 -123.3158598330256 617.4 + vertex -157.2067960108166 -120.04125580570847 617.4 + vertex -158.63766952233078 -119.64023912920045 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -156.38724158134568 -123.3158598330256 617.4 + vertex -158.63766952233078 -119.64023912920045 617.4 + vertex -157.95578530972676 -122.9462540897214 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -157.95578530972676 -122.9462540897214 617.4 + vertex -158.63766952233078 -119.64023912920045 617.4 + vertex -160.05051943746048 -119.1797301736866 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -157.95578530972676 -122.9462540897214 617.4 + vertex -160.05051943746048 -119.1797301736866 617.4 + vertex -161.4428733917811 -118.6605347897719 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -157.95578530972676 -122.9462540897214 617.4 + vertex -161.4428733917811 -118.6605347897719 617.4 + vertex -159.5074986797672 -122.51137082887453 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -159.5074986797672 -122.51137082887453 617.4 + vertex -161.4428733917811 -118.6605347897719 617.4 + vertex -162.81229488701607 -118.08356152420495 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -159.5074986797672 -122.51137082887453 617.4 + vertex -162.81229488701607 -118.08356152420495 617.4 + vertex -161.03966632807825 -122.01197105835392 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -161.03966632807825 -122.01197105835392 617.4 + vertex -162.81229488701607 -118.08356152420495 617.4 + vertex -164.15638755469695 -117.44982003000014 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -161.03966632807825 -122.01197105835392 617.4 + vertex -164.15638755469695 -117.44982003000014 617.4 + vertex -162.54960709458362 -121.44892868430706 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -162.54960709458362 -121.44892868430706 617.4 + vertex -164.15638755469695 -117.44982003000014 617.4 + vertex -165.47279934959994 -116.76041929963289 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -162.54960709458362 -121.44892868430706 617.4 + vertex -165.47279934959994 -116.76041929963289 617.4 + vertex -164.0346787143162 -120.8232289819003 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.0346787143162 -120.8232289819003 617.4 + vertex -165.47279934959994 -116.76041929963289 617.4 + vertex -166.75922666561993 -116.01656572439916 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.0346787143162 -120.8232289819003 617.4 + vertex -166.75922666561993 -116.01656572439916 617.4 + vertex -168.01341836688124 -115.21956098333557 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.0346787143162 -120.8232289819003 617.4 + vertex -168.01341836688124 -115.21956098333557 617.4 + vertex -165.49228244115207 -120.13596687117304 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -165.49228244115207 -120.13596687117304 617.4 + vertex -168.01341836688124 -115.21956098333557 617.4 + vertex -169.2331797270292 -114.37079976539471 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -165.49228244115207 -120.13596687117304 617.4 + vertex -169.2331797270292 -114.37079976539471 617.4 + vertex -166.9198675953899 -119.38834500102291 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.9198675953899 -119.38834500102291 617.4 + vertex -169.2331797270292 -114.37079976539471 617.4 + vertex -170.41637626981046 -113.47176732886027 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.9198675953899 -119.38834500102291 617.4 + vertex -170.41637626981046 -113.47176732886027 617.4 + vertex -168.31493602721872 -118.58167164467494 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -170.41637626981046 -113.47176732886027 617.4 + vertex -170.67210412904055 -113.26001712639702 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -170.67210412904055 -113.26001712639702 617.4 + vertex -172.30292768969883 -111.31482220219574 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -172.30292768969883 -111.31482220219574 617.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -186.8522080811225 -86.47417461358685 617.4 + vertex -186.78374609386333 -88.08422144198272 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721872 -118.58167164467494 617.4 + vertex -186.78374609386333 -88.08422144198272 617.4 + vertex -169.67504648826252 -117.71735841031698 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -169.67504648826252 -117.71735841031698 617.4 + vertex -186.78374609386333 -88.08422144198272 617.4 + vertex -186.64800732510514 -89.68999627675349 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -169.67504648826252 -117.71735841031698 617.4 + vertex -186.64800732510514 -89.68999627675349 617.4 + vertex -170.99781890355266 -116.79691777090856 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.99781890355266 -116.79691777090856 617.4 + vertex -186.64800732510514 -89.68999627675349 617.4 + vertex -186.44522930588303 -91.28868915165081 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.99781890355266 -116.79691777090856 617.4 + vertex -186.44522930588303 -91.28868915165081 617.4 + vertex -172.28093853645186 -115.8219604174845 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -172.28093853645186 -115.8219604174845 617.4 + vertex -186.44522930588303 -91.28868915165081 617.4 + vertex -186.17576688008776 -92.87750249323994 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -172.28093853645186 -115.8219604174845 617.4 + vertex -186.17576688008776 -92.87750249323994 617.4 + vertex -173.52216003924207 -114.79419244058586 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -173.52216003924207 -114.79419244058586 617.4 + vertex -186.17576688008776 -92.87750249323994 617.4 + vertex -185.84009158351952 -94.45365601640985 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -173.52216003924207 -114.79419244058586 617.4 + vertex -185.84009158351952 -94.45365601640985 617.4 + vertex -174.7193113822874 -113.71541234474994 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -174.7193113822874 -113.71541234474994 617.4 + vertex -185.84009158351952 -94.45365601640985 617.4 + vertex -185.43879081874147 -96.01439158963024 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -174.7193113822874 -113.71541234474994 617.4 + vertex -185.43879081874147 -96.01439158963024 617.4 + vertex -175.8702976548973 -112.58750790128379 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -175.8702976548973 -112.58750790128379 617.4 + vertex -185.43879081874147 -96.01439158963024 617.4 + vertex -184.97256682717622 -97.55697806144181 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -175.8702976548973 -112.58750790128379 617.4 + vertex -184.97256682717622 -97.55697806144181 617.4 + vertex -176.9731047312377 -111.4124528448287 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -176.9731047312377 -111.4124528448287 617.4 + vertex -184.97256682717622 -97.55697806144181 617.4 + vertex -184.44223546024463 -99.07871603973358 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -176.9731047312377 -111.4124528448287 617.4 + vertex -184.44223546024463 -99.07871603973358 617.4 + vertex -178.02580279487614 -110.19230341949638 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -178.02580279487614 -110.19230341949638 617.4 + vertex -184.44223546024463 -99.07871603973358 617.4 + vertex -183.84872475169666 -100.57694261544432 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -178.02580279487614 -110.19230341949638 617.4 + vertex -183.84872475169666 -100.57694261544432 617.4 + vertex -179.02654971579267 -108.92919478062035 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -179.02654971579267 -108.92919478062035 617.4 + vertex -183.84872475169666 -100.57694261544432 617.4 + vertex -183.19307329363312 -102.0490360224217 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -179.02654971579267 -108.92919478062035 617.4 + vertex -183.19307329363312 -102.0490360224217 617.4 + vertex -179.97359427394687 -107.62533725842033 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -179.97359427394687 -107.62533725842033 617.4 + vertex -183.19307329363312 -102.0490360224217 617.4 + vertex -180.86527922376087 -106.28301249011633 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -180.86527922376087 -106.28301249011633 617.4 + vertex -183.19307329363312 -102.0490360224217 617.4 + vertex -182.4764284190598 -103.49242022528485 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -180.86527922376087 -106.28301249011633 617.4 + vertex -182.4764284190598 -103.49242022528485 617.4 + vertex -181.70004419415466 -104.90456942726227 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -168.1355759986426 -82.35068819883382 617.4 + vertex -171.37500000000009 -87.10772186398503 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.1355759986426 -82.35068819883382 617.4 + vertex -164.7994069121178 -83.31130142461475 617.4 + vertex -166.94278799932135 -80.28471878135097 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -171.37500000000009 -87.10772186398503 617.4 + vertex -168.1355759986426 -82.35068819883382 617.4 + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -171.37500000000009 -87.10772186398503 617.4 + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -175.92783335074785 -89.73630142461475 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -171.37500000000009 -87.10772186398503 617.4 + vertex -175.92783335074785 -89.73630142461475 617.4 + vertex -170.3750000000001 -88.8397726715539 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -175.92783335074785 -89.73630142461475 617.4 + vertex -183.42210412904055 -91.17636932989386 617.3999999999999 + vertex -182.5529276896988 -93.56130142461475 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -174.92783335074785 -91.46835223218363 617.4 + vertex -170.3750000000001 -88.8397726715539 617.4 + vertex -175.92783335074785 -89.73630142461475 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -135.82629141839357 -29.354089569230858 617.4 + vertex -134.3333869225628 -31.80357931201403 617.4 + vertex -135.48808746094204 -29.803579312014033 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -134.3333869225628 -31.80357931201403 617.4 + vertex -135.82629141839357 -29.354089569230858 617.4 + vertex -143.53209771903337 -47.73621377563337 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -135.82629141839357 -29.354089569230858 617.4 + vertex -136.2201382685109 -29.07152850444516 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -136.2201382685109 -29.07152850444516 617.4 + vertex -136.64278799932129 -28.97515218726785 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -136.64278799932129 -28.97515218726785 617.4 + vertex -137.0654377301317 -29.071528504445165 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -137.0654377301317 -29.071528504445165 617.4 + vertex -137.45928458024903 -29.35408956923086 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -137.45928458024903 -29.35408956923086 617.4 + vertex -137.79748853770056 -29.80357931201404 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -149.13659139480458 -57.5673085561012 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -149.13659139480458 -57.5673085561012 617.4 + vertex -148.6342785416942 -57.06499570299079 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -148.6342785416942 -57.06499570299079 617.4 + vertex -148.05237123795206 -56.657539822371284 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -148.05237123795206 -56.657539822371284 617.4 + vertex -147.40855044254315 -56.35732125499265 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -147.40855044254315 -56.35732125499265 617.4 + vertex -146.7223783245469 -56.1734619901068 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -146.7223783245469 -56.1734619901068 617.4 + vertex -146.01470387654874 -56.111548498439994 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -146.01470387654874 -56.111548498439994 617.4 + vertex -145.30702942855063 -56.173461990106794 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -145.30702942855063 -56.173461990106794 617.4 + vertex -144.62085731055436 -56.35732125499266 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -144.62085731055436 -56.35732125499266 617.4 + vertex -144.05167483247538 -56.60305820935861 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -144.05167483247538 -56.60305820935861 617.4 + vertex -143.42990957836216 -57.03842292728556 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -143.42990957836216 -57.03842292728556 617.4 + vertex -143.39512921140332 -57.06499570299079 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -143.39512921140332 -57.06499570299079 617.4 + vertex -142.89319062544635 -57.575141880201365 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -142.89319062544635 -57.575141880201365 617.4 + vertex -142.4853604776734 -58.149215859843316 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903337 -47.73621377563337 617.4 + vertex -142.4853604776734 -58.149215859843316 617.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -142.4853604776734 -58.149215859843316 617.4 + vertex -121.6013783836058 -94.32133391112707 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.42990957836216 -57.03842292728556 617.4 + vertex -144.05167483247538 -56.60305820935861 617.4 + vertex -143.97703651514544 -56.657539822371284 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -149.13659139480458 -57.5673085561012 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -149.5440472754241 -58.14921585984331 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -149.5440472754241 -58.14921585984331 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -162.241464507947 -80.1417876314735 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -162.241464507947 -80.1417876314735 617.4 + vertex -165.44278799932133 -77.68664256999766 617.4 + vertex -150.5255562475269 -100.43433599533701 617.4 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -142.45782590751944 -58.19690713431459 617.4 + vertex -121.6013783836058 -94.32133391112707 617.4 + vertex -142.4853604776734 -58.149215859843316 617.4 + endloop +endfacet +facet normal -0.7071067811865519 0.7071067811865432 1.5010751463383334e-16 + outer loop + vertex -122.51114711733574 -99.48088879078622 617.4 + vertex -122.00883426422534 -98.9785759376758 597.4 + vertex -122.51114711733574 -99.48088879078622 597.4 + endloop +endfacet +facet normal -0.7071067811865519 0.7071067811865432 1.5010751463383334e-16 + outer loop + vertex -122.00883426422534 -98.9785759376758 597.4 + vertex -122.51114711733574 -99.48088879078622 617.4 + vertex -122.00883426422534 -98.9785759376758 617.4 + endloop +endfacet +facet normal -0.08715574274766985 0.9961946980917447 2.955753951421487e-16 + outer loop + vertex -125.13072178248116 -100.43433599533701 617.4 + vertex -124.42304733448304 -100.3724225036702 597.4 + vertex -125.13072178248116 -100.43433599533701 597.4 + endloop +endfacet +facet normal -0.08715574274766985 0.9961946980917447 2.955753951421487e-16 + outer loop + vertex -124.42304733448304 -100.3724225036702 597.4 + vertex -125.13072178248116 -100.43433599533701 617.4 + vertex -124.42304733448304 -100.3724225036702 617.4 + endloop +endfacet +facet normal 0.4226182617407045 -0.9063077870366477 -2.3714292307799425e-16 + outer loop + vertex -147.40855044254315 -56.35732125499265 617.4 + vertex -148.05237123795206 -56.65753982237127 597.4 + vertex -147.40855044254315 -56.35732125499265 597.4 + endloop +endfacet +facet normal 0.4226182617407045 -0.9063077870366477 -2.3714292307799425e-16 + outer loop + vertex -148.05237123795206 -56.65753982237127 597.4 + vertex -147.40855044254315 -56.35732125499265 617.4 + vertex -148.05237123795206 -56.657539822371284 617.4 + endloop +endfacet +facet normal 0.8660254037844382 -0.500000000000001 -7.227945163972777e-17 + outer loop + vertex -149.5440472754241 -58.14921585984331 617.4 + vertex -162.241464507947 -80.1417876314735 597.4 + vertex -149.5440472754241 -58.14921585984331 597.4 + endloop +endfacet +facet normal 0.8660254037844382 -0.500000000000001 -7.227945163972777e-17 + outer loop + vertex -162.241464507947 -80.1417876314735 597.4 + vertex -149.5440472754241 -58.14921585984331 617.4 + vertex -162.241464507947 -80.1417876314735 617.4 + endloop +endfacet +facet normal -0.0871557427476532 -0.9961946980917461 -3.117017029913951e-16 + outer loop + vertex -145.30702942855063 -56.173461990106794 617.4 + vertex -146.01470387654874 -56.111548498439994 597.4 + vertex -145.3070294285506 -56.173461990106794 597.4 + endloop +endfacet +facet normal -0.0871557427476532 -0.9961946980917461 -3.117017029913951e-16 + outer loop + vertex -146.01470387654874 -56.111548498439994 597.4 + vertex -145.30702942855063 -56.173461990106794 617.4 + vertex -146.01470387654874 -56.111548498439994 617.4 + endloop +endfacet +facet normal -0.25881904510253206 -0.9659258262890653 -3.183571123239196e-16 + outer loop + vertex -144.62085731055436 -56.35732125499265 597.4 + vertex -145.30702942855063 -56.173461990106794 617.4 + vertex -145.3070294285506 -56.173461990106794 597.4 + endloop +endfacet +facet normal -0.25881904510253206 -0.9659258262890653 -3.183571123239196e-16 + outer loop + vertex -145.30702942855063 -56.173461990106794 617.4 + vertex -144.62085731055436 -56.35732125499265 597.4 + vertex -144.62085731055436 -56.35732125499266 617.4 + endloop +endfacet +facet normal -0.5735764363510409 0.8191520442889954 1.9661219995849944e-16 + outer loop + vertex -123.09305442107785 -99.88834467140573 617.4 + vertex -122.51114711733574 -99.48088879078622 597.4 + vertex -123.09305442107785 -99.88834467140573 597.4 + endloop +endfacet +facet normal -0.5735764363510409 0.8191520442889954 1.9661219995849944e-16 + outer loop + vertex -122.51114711733574 -99.48088879078622 597.4 + vertex -123.09305442107785 -99.88834467140573 617.4 + vertex -122.51114711733574 -99.48088879078622 617.4 + endloop +endfacet +facet normal -2.7755575615628914e-16 1.0 3.0479839899610546e-16 + outer loop + vertex -150.5255562475269 -100.43433599533701 617.4 + vertex -125.13072178248116 -100.43433599533701 597.4 + vertex -150.5255562475269 -100.43433599533701 597.4 + endloop +endfacet +facet normal -2.7755575615628914e-16 1.0 3.0479839899610546e-16 + outer loop + vertex -125.13072178248116 -100.43433599533701 597.4 + vertex -150.5255562475269 -100.43433599533701 617.4 + vertex -125.13072178248116 -100.43433599533701 617.4 + endloop +endfacet +facet normal 0.08715574274766985 -0.9961946980917447 -2.955753951421487e-16 + outer loop + vertex -146.01470387654874 -56.111548498439994 617.4 + vertex -146.72237832454687 -56.1734619901068 597.4 + vertex -146.01470387654874 -56.111548498439994 597.4 + endloop +endfacet +facet normal 0.08715574274766985 -0.9961946980917447 -2.955753951421487e-16 + outer loop + vertex -146.72237832454687 -56.1734619901068 597.4 + vertex -146.01470387654874 -56.111548498439994 617.4 + vertex -146.7223783245469 -56.1734619901068 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -150.5255562475269 -100.43433599533701 617.4 + vertex -162.241464507947 -80.1417876314735 597.4 + vertex -162.241464507947 -80.1417876314735 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -162.241464507947 -80.1417876314735 597.4 + vertex -150.5255562475269 -100.43433599533701 617.4 + vertex -150.5255562475269 -100.43433599533701 597.4 + endloop +endfacet +facet normal 0.5735764363510409 -0.8191520442889954 -1.9661219995849944e-16 + outer loop + vertex -148.05237123795206 -56.657539822371284 617.4 + vertex -148.6342785416942 -57.064995702990785 597.4 + vertex -148.05237123795206 -56.65753982237127 597.4 + endloop +endfacet +facet normal 0.5735764363510409 -0.8191520442889954 -1.9661219995849944e-16 + outer loop + vertex -148.6342785416942 -57.064995702990785 597.4 + vertex -148.05237123795206 -56.657539822371284 617.4 + vertex -148.6342785416942 -57.06499570299079 617.4 + endloop +endfacet +facet normal 0.7331906391044432 -0.6800231516129568 -1.394393374272296e-16 + outer loop + vertex -93.41461187235467 -103.84854955771011 617.4 + vertex -93.7094010767586 -104.16638680290588 597.4 + vertex -93.41461187235467 -103.84854955771011 597.4 + endloop +endfacet +facet normal 0.7331906391044432 -0.6800231516129568 -1.394393374272296e-16 + outer loop + vertex -93.7094010767586 -104.16638680290588 597.4 + vertex -93.41461187235467 -103.84854955771011 617.4 + vertex -93.7094010767586 -104.16638680290588 617.4 + endloop +endfacet +facet normal -0.22232200490613085 0.97497329508788 2.7660233119403463e-16 + outer loop + vertex -137.0654377301317 -29.071528504445165 617.4 + vertex -136.64278799932129 -28.97515218726785 597.4 + vertex -137.06543773013166 -29.07152850444516 597.4 + endloop +endfacet +facet normal -0.22232200490613085 0.97497329508788 2.7660233119403463e-16 + outer loop + vertex -136.64278799932129 -28.97515218726785 597.4 + vertex -137.0654377301317 -29.071528504445165 617.4 + vertex -136.64278799932129 -28.97515218726785 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -143.53209771903337 -47.73621377563337 617.4 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 2.32518947356378e-16 + outer loop + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -113.1068226696997 -100.43433599533701 617.4 + vertex -113.10682266969967 -100.43433599533701 597.4 + endloop +endfacet +facet normal 0.9951296050077004 0.0985751958517875 1.221092966018723e-16 + outer loop + vertex -93.28675134594823 -103.43433599533701 617.4 + vertex -93.33453298111434 -102.95197408554206 597.4 + vertex -93.33453298111435 -102.95197408554206 617.4 + endloop +endfacet +facet normal 0.9951296050077004 0.0985751958517875 1.221092966018723e-16 + outer loop + vertex -93.33453298111434 -102.95197408554206 597.4 + vertex -93.28675134594823 -103.43433599533701 617.4 + vertex -93.28675134594823 -103.43433599533701 597.4 + endloop +endfacet +facet normal 0.22232200490612164 0.9749732950878822 3.177382676194519e-16 + outer loop + vertex -136.64278799932129 -28.97515218726785 617.4 + vertex -136.2201382685109 -29.07152850444516 597.4 + vertex -136.64278799932129 -28.97515218726785 597.4 + endloop +endfacet +facet normal 0.22232200490612164 0.9749732950878822 3.177382676194519e-16 + outer loop + vertex -136.2201382685109 -29.07152850444516 597.4 + vertex -136.64278799932129 -28.97515218726785 617.4 + vertex -136.2201382685109 -29.07152850444516 617.4 + endloop +endfacet +facet normal -0.5829334262945306 0.8125199200687447 1.9372508358990627e-16 + outer loop + vertex -137.45928458024903 -29.35408956923086 617.4 + vertex -137.06543773013166 -29.07152850444516 597.4 + vertex -137.45928458024903 -29.35408956923086 597.4 + endloop +endfacet +facet normal -0.5829334262945306 0.8125199200687447 1.9372508358990627e-16 + outer loop + vertex -137.06543773013166 -29.07152850444516 597.4 + vertex -137.45928458024903 -29.35408956923086 617.4 + vertex -137.0654377301317 -29.071528504445165 617.4 + endloop +endfacet +facet normal -0.7990717941595309 0.6012356175233369 1.0933007317951937e-16 + outer loop + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -137.45928458024903 -29.35408956923086 597.4 + vertex -137.79748853770056 -29.803579312014033 597.4 + endloop +endfacet +facet normal -0.7990717941595309 0.6012356175233369 1.0933007317951937e-16 + outer loop + vertex -137.45928458024903 -29.35408956923086 597.4 + vertex -137.79748853770056 -29.80357931201404 617.4 + vertex -137.45928458024903 -29.35408956923086 617.4 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 -7.22794516397278e-17 + outer loop + vertex -134.3333869225628 -31.80357931201403 617.4 + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -134.3333869225628 -31.80357931201403 597.4 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 -7.22794516397278e-17 + outer loop + vertex -143.53209771903337 -47.73621377563336 597.4 + vertex -134.3333869225628 -31.80357931201403 617.4 + vertex -143.53209771903337 -47.73621377563337 617.4 + endloop +endfacet +facet normal 0.9555126440105939 -0.29495014347493387 -1.5017328374353077e-18 + outer loop + vertex -93.28675134594823 -103.43433599533701 617.4 + vertex -93.41461187235467 -103.84854955771011 597.4 + vertex -93.28675134594823 -103.43433599533701 597.4 + endloop +endfacet +facet normal 0.9555126440105939 -0.29495014347493387 -1.5017328374353077e-18 + outer loop + vertex -93.41461187235467 -103.84854955771011 597.4 + vertex -93.28675134594823 -103.43433599533701 617.4 + vertex -93.41461187235467 -103.84854955771011 617.4 + endloop +endfacet +facet normal 0.7990717941595378 0.6012356175233278 2.571812341015743e-16 + outer loop + vertex -135.48808746094204 -29.803579312014033 617.4 + vertex -135.82629141839357 -29.35408956923085 597.4 + vertex -135.82629141839357 -29.354089569230858 617.4 + endloop +endfacet +facet normal 0.7990717941595378 0.6012356175233278 2.571812341015743e-16 + outer loop + vertex -135.82629141839357 -29.35408956923085 597.4 + vertex -135.48808746094204 -29.803579312014033 617.4 + vertex -135.48808746094204 -29.803579312014033 597.4 + endloop +endfacet +facet normal 0.9202212155149956 0.3913986644281044 2.0443132259682835e-16 + outer loop + vertex -93.33453298111435 -102.95197408554206 617.4 + vertex -93.55470053837934 -102.43433599533701 597.4 + vertex -93.55470053837935 -102.43433599533701 617.4 + endloop +endfacet +facet normal 0.9202212155149956 0.3913986644281044 2.0443132259682835e-16 + outer loop + vertex -93.55470053837934 -102.43433599533701 597.4 + vertex -93.33453298111435 -102.95197408554206 617.4 + vertex -93.33453298111434 -102.95197408554206 597.4 + endloop +endfacet +facet normal -0.78298662241806 0.6220385431099575 -3.1509663175953196e-16 + outer loop + vertex -30.60270404808994 194.6127132252034 617.4 + vertex -29.600287858287494 195.87449752362727 597.4 + vertex -30.60270404808994 194.6127132252034 597.4 + endloop +endfacet +facet normal -0.78298662241806 0.6220385431099575 -3.1509663175953196e-16 + outer loop + vertex -29.600287858287494 195.87449752362727 597.4 + vertex -30.60270404808994 194.6127132252034 617.4 + vertex -29.600287858287494 195.87449752362727 617.4 + endloop +endfacet +facet normal -0.5000000000000009 -0.8660254037844383 1.4922322636809024e-17 + outer loop + vertex -29.842081742052876 190.46620886682194 617.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -15.387718859012988 182.1209785653343 617.4 + endloop +endfacet +facet normal -0.5000000000000009 -0.8660254037844383 1.4922322636809024e-17 + outer loop + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -29.842081742052876 190.46620886682194 617.4 + vertex -29.842081742052876 190.46620886682194 597.4 + endloop +endfacet +facet normal -0.5000000000000009 -0.8660254037844383 1.4922322636809024e-17 + outer loop + vertex -29.842081742052876 190.46620886682194 597.4 + vertex -29.842081742052876 190.46620886682194 617.4 + vertex -32.444930859691745 191.96896450555073 617.4 + endloop +endfacet +facet normal -0.5000000000000009 -0.8660254037844383 1.4922322636809024e-17 + outer loop + vertex -29.842081742052876 190.46620886682194 597.4 + vertex -32.444930859691745 191.96896450555073 617.4 + vertex -32.444930859691745 191.96896450555073 597.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 35.64785713962948 147.22015479282138 604.4 + vertex 23.247857139629694 168.69758480667542 604.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 35.64785713962948 147.22015479282138 604.4 + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 22.38183173584526 170.19758480667545 605.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + vertex 22.38183173584526 170.19758480667545 605.4 + vertex 36.51388254341387 145.72015479282135 605.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.51388254341387 145.72015479282135 605.4 + vertex 22.38183173584526 170.19758480667545 605.4 + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.51388254341387 145.72015479282135 605.4 + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + vertex 22.247857139629698 170.42963561424432 608.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + vertex 22.247857139629698 170.42963561424432 608.4 + vertex 36.647857139629416 145.48810398525248 608.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 22.247857139629698 170.42963561424432 608.4 + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + vertex 22.38183173584526 170.19758480667545 609.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + vertex 22.38183173584526 170.19758480667545 609.4 + vertex 36.51388254341387 145.72015479282135 609.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.51388254341387 145.72015479282135 609.4 + vertex 22.38183173584526 170.19758480667545 609.4 + vertex 22.540750358443145 169.92232967806703 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.51388254341387 145.72015479282135 609.4 + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 36.35496392081599 145.99540992142977 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.35496392081599 145.99540992142977 609.814213562373 + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.35496392081599 145.99540992142977 609.814213562373 + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + vertex 22.98903809452716 169.14587254275946 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + vertex 22.98903809452716 169.14587254275946 610.331851652578 + vertex 35.90667618473197 146.77186705673734 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 35.90667618473197 146.77186705673734 610.331851652578 + vertex 22.98903809452716 169.14587254275946 610.331851652578 + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 35.90667618473197 146.77186705673734 610.331851652578 + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + endloop +endfacet +facet normal -0.1913417161825971 0.3314135740356456 -0.9238795325112568 + outer loop + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + vertex 24.721088902095804 170.14587254275943 604.4681483474218 + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + endloop +endfacet +facet normal -0.1913417161825971 0.3314135740356456 -0.9238795325112568 + outer loop + vertex 24.721088902095804 170.14587254275943 604.4681483474218 + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + vertex 24.47990794719832 170.56361021045984 604.6679491924311 + endloop +endfacet +facet normal -0.4957224306869468 0.858616436401238 -0.13052619222004416 + outer loop + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + vertex 23.979907947198342 171.4296356142443 606.3999999999999 + vertex 24.013982120909255 171.37061741415104 605.8823619097949 + endloop +endfacet +facet normal -0.4957224306869468 0.858616436401238 -0.13052619222004416 + outer loop + vertex 23.979907947198342 171.4296356142443 606.3999999999999 + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + endloop +endfacet +facet normal -0.3043807145043778 0.5272028623656411 -0.7933533402912473 + outer loop + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 24.47990794719832 170.56361021045984 604.6679491924311 + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + endloop +endfacet +facet normal -0.3043807145043778 0.5272028623656411 -0.7933533402912473 + outer loop + vertex 24.47990794719832 170.56361021045984 604.6679491924311 + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 24.27280116601179 170.922329678067 604.9857864376269 + endloop +endfacet +facet normal -0.4957224306869483 0.8586164364012406 0.13052619222002182 + outer loop + vertex 23.979907947198342 171.4296356142443 608.4 + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + vertex 24.013982120909255 171.37061741415104 608.9176380902051 + endloop +endfacet +facet normal -0.4957224306869483 0.8586164364012406 0.13052619222002182 + outer loop + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + vertex 23.979907947198342 171.4296356142443 608.4 + vertex 22.247857139629698 170.42963561424432 608.4 + endloop +endfacet +facet normal -0.46193976625566885 0.8001031451912213 0.38268343236515195 + outer loop + vertex 24.013982120909255 171.37061741415104 608.9176380902051 + vertex 22.38183173584526 170.19758480667545 609.4 + vertex 24.113882543413904 171.19758480667542 609.4 + endloop +endfacet +facet normal -0.46193976625566885 0.8001031451912213 0.38268343236515195 + outer loop + vertex 22.38183173584526 170.19758480667545 609.4 + vertex 24.013982120909255 171.37061741415104 608.9176380902051 + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + endloop +endfacet +facet normal -0.570083656934367 0.821586650388344 -3.1514509491170916e-16 + outer loop + vertex -22.563577168123395 202.4698133591664 597.4 + vertex -21.23958885775712 203.3885041598935 617.4 + vertex -21.23958885775712 203.3885041598935 597.4 + endloop +endfacet +facet normal -0.570083656934367 0.821586650388344 -3.1514509491170916e-16 + outer loop + vertex -21.23958885775712 203.3885041598935 617.4 + vertex -22.563577168123395 202.4698133591664 597.4 + vertex -22.563577168123395 202.4698133591664 617.4 + endloop +endfacet +facet normal -0.1913417161825904 0.33141357403563404 0.9238795325112623 + outer loop + vertex 24.721088902095804 170.14587254275943 610.331851652578 + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + vertex 22.98903809452716 169.14587254275946 610.331851652578 + endloop +endfacet +facet normal -0.1913417161825904 0.33141357403563404 0.9238795325112623 + outer loop + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + vertex 24.721088902095804 170.14587254275943 610.331851652578 + vertex 24.47990794719832 170.56361021045984 610.1320508075687 + endloop +endfacet +facet normal -0.4619397662556816 0.8001031451912431 -0.3826834323650907 + outer loop + vertex 22.38183173584526 170.19758480667545 605.4 + vertex 24.013982120909255 171.37061741415104 605.8823619097949 + vertex 24.113882543413904 171.19758480667542 605.4 + endloop +endfacet +facet normal -0.4619397662556816 0.8001031451912431 -0.3826834323650907 + outer loop + vertex 24.013982120909255 171.37061741415104 605.8823619097949 + vertex 22.38183173584526 170.19758480667545 605.4 + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + endloop +endfacet +facet normal -0.06526309610999739 0.11303899832175376 0.9914448613738195 + outer loop + vertex 24.97990794719834 169.6975848066754 610.3999999999999 + vertex 22.98903809452716 169.14587254275946 610.331851652578 + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + endloop +endfacet +facet normal -0.06526309610999739 0.11303899832175376 0.9914448613738195 + outer loop + vertex 22.98903809452716 169.14587254275946 610.331851652578 + vertex 24.97990794719834 169.6975848066754 610.3999999999999 + vertex 24.721088902095804 170.14587254275943 610.331851652578 + endloop +endfacet +facet normal -0.14589989704428225 0.989299358153268 -2.617941281554306e-16 + outer loop + vertex -6.361363525060216 209.27101945922956 597.4 + vertex -4.767105895595756 209.5061373960643 617.4 + vertex -4.767105895595756 209.5061373960643 597.4 + endloop +endfacet +facet normal -0.14589989704428225 0.989299358153268 -2.617941281554306e-16 + outer loop + vertex -4.767105895595756 209.5061373960643 617.4 + vertex -6.361363525060216 209.27101945922956 597.4 + vertex -6.361363525060216 209.27101945922956 617.4 + endloop +endfacet +facet normal -0.3966766701456324 0.6870641468693998 -0.6087614290087678 + outer loop + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 24.113882543413904 171.19758480667542 605.4 + vertex 24.27280116601179 170.922329678067 604.9857864376269 + endloop +endfacet +facet normal -0.3966766701456324 0.6870641468693998 -0.6087614290087678 + outer loop + vertex 24.113882543413904 171.19758480667542 605.4 + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 22.38183173584526 170.19758480667545 605.4 + endloop +endfacet +facet normal -0.5000000000000415 0.8660254037844146 -9.325056343473811e-32 + outer loop + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + vertex 23.979907947198342 171.4296356142443 608.4 + vertex 23.979907947198342 171.4296356142443 606.3999999999999 + endloop +endfacet +facet normal -0.5000000000000415 0.8660254037844146 -9.325056343473811e-32 + outer loop + vertex 23.979907947198342 171.4296356142443 608.4 + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + vertex 22.247857139629698 170.42963561424432 608.4 + endloop +endfacet +facet normal -0.3966766701456414 0.6870641468694154 0.6087614290087443 + outer loop + vertex 24.113882543413904 171.19758480667542 609.4 + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 24.27280116601179 170.92232967806703 609.814213562373 + endloop +endfacet +facet normal -0.3966766701456414 0.6870641468694154 0.6087614290087443 + outer loop + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 24.113882543413904 171.19758480667542 609.4 + vertex 22.38183173584526 170.19758480667545 609.4 + endloop +endfacet +facet normal -0.3043807145043775 0.5272028623656405 0.7933533402912477 + outer loop + vertex 24.47990794719832 170.56361021045984 610.1320508075687 + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + endloop +endfacet +facet normal -0.3043807145043775 0.5272028623656405 0.7933533402912477 + outer loop + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 24.47990794719832 170.56361021045984 610.1320508075687 + vertex 24.27280116601179 170.92232967806703 609.814213562373 + endloop +endfacet +facet normal 0.19134171618257428 -0.33141357403565136 -0.9238795325112594 + outer loop + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + vertex 37.87990794719834 147.3541293890369 604.6679491924311 + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + endloop +endfacet +facet normal 0.19134171618257428 -0.33141357403565136 -0.9238795325112594 + outer loop + vertex 37.87990794719834 147.3541293890369 604.6679491924311 + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + vertex 37.63872699230085 147.7718670567373 604.4681483474218 + endloop +endfacet +facet normal 0.06526309610999431 -0.11303899832176315 -0.9914448613738184 + outer loop + vertex 35.64785713962948 147.22015479282138 604.4 + vertex 37.63872699230085 147.7718670567373 604.4681483474218 + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + endloop +endfacet +facet normal 0.06526309610999431 -0.11303899832176315 -0.9914448613738184 + outer loop + vertex 37.63872699230085 147.7718670567373 604.4681483474218 + vertex 35.64785713962948 147.22015479282138 604.4 + vertex 37.37990794719834 148.22015479282135 604.4 + endloop +endfacet +facet normal -0.06526309610999742 0.1130389983217538 -0.9914448613738195 + outer loop + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 24.97990794719834 169.6975848066754 604.4 + vertex 23.247857139629694 168.69758480667542 604.4 + endloop +endfacet +facet normal -0.06526309610999742 0.1130389983217538 -0.9914448613738195 + outer loop + vertex 24.97990794719834 169.6975848066754 604.4 + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 24.721088902095804 170.14587254275943 604.4681483474218 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 23.247857139629694 168.69758480667542 604.4 + vertex 37.37990794719834 148.22015479282135 604.4 + vertex 35.64785713962948 147.22015479282138 604.4 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 37.37990794719834 148.22015479282135 604.4 + vertex 23.247857139629694 168.69758480667542 604.4 + vertex 24.97990794719834 169.6975848066754 604.4 + endloop +endfacet +facet normal 0.4999999999999804 -0.86602540378445 9.325056343474676e-32 + outer loop + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 38.37990794719834 146.48810398525245 606.3999999999999 + vertex 38.37990794719834 146.48810398525245 608.4 + endloop +endfacet +facet normal 0.4999999999999804 -0.86602540378445 9.325056343474676e-32 + outer loop + vertex 38.37990794719834 146.48810398525245 606.3999999999999 + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + endloop +endfacet +facet normal 0.4619397662556365 -0.80010314519129 -0.3826834323650471 + outer loop + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + vertex 38.245933350982774 146.72015479282132 605.4 + vertex 38.3458337734874 146.54712218534573 605.8823619097949 + endloop +endfacet +facet normal 0.4619397662556365 -0.80010314519129 -0.3826834323650471 + outer loop + vertex 38.245933350982774 146.72015479282132 605.4 + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + vertex 36.51388254341387 145.72015479282135 605.4 + endloop +endfacet +facet normal 0.3966766701455924 -0.6870641468694332 -0.6087614290087563 + outer loop + vertex 36.51388254341387 145.72015479282135 605.4 + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + vertex 38.245933350982774 146.72015479282132 605.4 + endloop +endfacet +facet normal 0.3966766701455924 -0.6870641468694332 -0.6087614290087563 + outer loop + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + vertex 36.51388254341387 145.72015479282135 605.4 + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + endloop +endfacet +facet normal 0.49572243068688643 -0.8586164364012732 0.13052619222004302 + outer loop + vertex 38.3458337734874 146.5471221853457 608.9176380902051 + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 38.37990794719834 146.48810398525245 608.4 + endloop +endfacet +facet normal 0.49572243068688643 -0.8586164364012732 0.13052619222004302 + outer loop + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 38.3458337734874 146.5471221853457 608.9176380902051 + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + endloop +endfacet +facet normal 0.3043807145043422 -0.527202862365655 -0.7933533402912516 + outer loop + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + endloop +endfacet +facet normal 0.3043807145043422 -0.527202862365655 -0.7933533402912516 + outer loop + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + vertex 37.87990794719834 147.3541293890369 604.6679491924311 + endloop +endfacet +facet normal 0.49572243068688426 -0.8586164364012696 -0.1305261922200746 + outer loop + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + vertex 38.3458337734874 146.54712218534573 605.8823619097949 + vertex 38.37990794719834 146.48810398525245 606.3999999999999 + endloop +endfacet +facet normal 0.49572243068688426 -0.8586164364012696 -0.1305261922200746 + outer loop + vertex 38.3458337734874 146.54712218534573 605.8823619097949 + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + endloop +endfacet +facet normal 0.4619397662556221 -0.8001031451912651 0.3826834323651162 + outer loop + vertex 38.245933350982774 146.72015479282132 609.4 + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + vertex 38.3458337734874 146.5471221853457 608.9176380902051 + endloop +endfacet +facet normal 0.4619397662556221 -0.8001031451912651 0.3826834323651162 + outer loop + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + vertex 38.245933350982774 146.72015479282132 609.4 + vertex 36.51388254341387 145.72015479282135 609.4 + endloop +endfacet +facet normal 0.06526309610999435 -0.11303899832176321 0.9914448613738184 + outer loop + vertex 37.63872699230085 147.7718670567373 610.331851652578 + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + vertex 35.90667618473197 146.77186705673734 610.331851652578 + endloop +endfacet +facet normal 0.06526309610999435 -0.11303899832176321 0.9914448613738184 + outer loop + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + vertex 37.63872699230085 147.7718670567373 610.331851652578 + vertex 37.37990794719834 148.22015479282135 610.3999999999999 + endloop +endfacet +facet normal 0.19134171618257428 -0.33141357403565136 0.9238795325112594 + outer loop + vertex 37.87990794719834 147.3541293890369 610.1320508075687 + vertex 35.90667618473197 146.77186705673734 610.331851652578 + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + endloop +endfacet +facet normal 0.19134171618257428 -0.33141357403565136 0.9238795325112594 + outer loop + vertex 35.90667618473197 146.77186705673734 610.331851652578 + vertex 37.87990794719834 147.3541293890369 610.1320508075687 + vertex 37.63872699230085 147.7718670567373 610.331851652578 + endloop +endfacet +facet normal 0.3043807145043422 -0.527202862365655 0.7933533402912516 + outer loop + vertex 38.08701472838489 146.99540992142974 609.814213562373 + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + vertex 36.35496392081599 145.99540992142977 609.814213562373 + endloop +endfacet +facet normal 0.3043807145043422 -0.527202862365655 0.7933533402912516 + outer loop + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + vertex 38.08701472838489 146.99540992142974 609.814213562373 + vertex 37.87990794719834 147.3541293890369 610.1320508075687 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 37.37990794719834 148.22015479282135 610.3999999999999 + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + vertex 37.37990794719834 148.22015479282135 610.3999999999999 + vertex 24.97990794719834 169.6975848066754 610.3999999999999 + endloop +endfacet +facet normal 0.39667667014559244 -0.6870641468694333 0.6087614290087562 + outer loop + vertex 38.08701472838489 146.99540992142974 609.814213562373 + vertex 36.51388254341387 145.72015479282135 609.4 + vertex 38.245933350982774 146.72015479282132 609.4 + endloop +endfacet +facet normal 0.39667667014559244 -0.6870641468694333 0.6087614290087562 + outer loop + vertex 36.51388254341387 145.72015479282135 609.4 + vertex 38.08701472838489 146.99540992142974 609.814213562373 + vertex 36.35496392081599 145.99540992142977 609.814213562373 + endloop +endfacet +facet normal -0.4252767351160145 0.9050633671567219 -3.0302967770914016e-16 + outer loop + vertex -17.053630465292567 205.80157985229934 597.4 + vertex -15.595119281244203 206.4869140476617 617.4 + vertex -15.595119281244203 206.4869140476617 597.4 + endloop +endfacet +facet normal -0.4252767351160145 0.9050633671567219 -3.0302967770914016e-16 + outer loop + vertex -15.595119281244203 206.4869140476617 617.4 + vertex -17.053630465292567 205.80157985229934 597.4 + vertex -17.053630465292567 205.80157985229934 617.4 + endloop +endfacet +facet normal -0.38705234313864256 0.9220577442171864 -2.986595129490503e-16 + outer loop + vertex -15.595119281244203 206.4869140476617 597.4 + vertex -14.10922162912293 207.11064956913492 617.4 + vertex -14.10922162912293 207.11064956913492 597.4 + endloop +endfacet +facet normal -0.38705234313864256 0.9220577442171864 -2.986595129490503e-16 + outer loop + vertex -14.10922162912293 207.11064956913492 617.4 + vertex -15.595119281244203 206.4869140476617 597.4 + vertex -15.595119281244203 206.4869140476617 617.4 + endloop +endfacet +facet normal -0.2280676514218636 0.9736452877587994 -2.760426732024956e-16 + outer loop + vertex -9.513424023535883 208.60189949091367 597.4 + vertex -7.944392955630252 208.96943090627016 617.4 + vertex -7.944392955630252 208.96943090627016 597.4 + endloop +endfacet +facet normal -0.2280676514218636 0.9736452877587994 -2.760426732024956e-16 + outer loop + vertex -7.944392955630252 208.96943090627016 617.4 + vertex -9.513424023535883 208.60189949091367 597.4 + vertex -9.513424023535883 208.60189949091367 617.4 + endloop +endfacet +facet normal -0.46275692980869254 0.8864852079499311 -3.068695668987272e-16 + outer loop + vertex -18.48220291359554 205.05584625826145 597.4 + vertex -17.053630465292567 205.80157985229934 617.4 + vertex -17.053630465292567 205.80157985229934 597.4 + endloop +endfacet +facet normal -0.46275692980869254 0.8864852079499311 -3.068695668987272e-16 + outer loop + vertex -17.053630465292567 205.80157985229934 617.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex -18.48220291359554 205.05584625826145 617.4 + endloop +endfacet +facet normal -0.6684424840618581 0.743763837183022 -3.184631229828643e-16 + outer loop + vertex -26.28914091006915 199.3932313652284 597.4 + vertex -25.09056419799865 200.4704275862621 617.4 + vertex -25.09056419799865 200.4704275862621 597.4 + endloop +endfacet +facet normal -0.6684424840618581 0.743763837183022 -3.184631229828643e-16 + outer loop + vertex -25.09056419799865 200.4704275862621 617.4 + vertex -26.28914091006915 199.3932313652284 597.4 + vertex -26.28914091006915 199.3932313652284 617.4 + endloop +endfacet +facet normal 0.7071067811865441 0.707106781186551 -1.0474336536187897e-17 + outer loop + vertex -23.95080047201519 153.92630982863116 597.4 + vertex -23.448487618904775 153.42399697552077 617.4 + vertex -23.448487618904775 153.42399697552077 597.4 + endloop +endfacet +facet normal 0.7071067811865441 0.707106781186551 -1.0474336536187897e-17 + outer loop + vertex -23.448487618904775 153.42399697552077 617.4 + vertex -23.95080047201519 153.92630982863116 597.4 + vertex -23.95080047201519 153.9263098286312 617.4 + endloop +endfacet +facet normal -0.26858868412533565 0.9632549604127771 -2.82448397113109e-16 + outer loop + vertex -11.065711060923867 208.16906836115942 597.4 + vertex -9.513424023535883 208.60189949091367 617.4 + vertex -9.513424023535883 208.60189949091367 597.4 + endloop +endfacet +facet normal -0.26858868412533565 0.9632549604127771 -2.82448397113109e-16 + outer loop + vertex -9.513424023535883 208.60189949091367 617.4 + vertex -11.065711060923867 208.16906836115942 597.4 + vertex -11.065711060923867 208.16906836115942 617.4 + endloop +endfacet +facet normal -0.6367513322442928 0.7710692192566879 -3.17912787827519e-16 + outer loop + vertex -25.09056419799865 200.4704275862621 597.4 + vertex -23.847984815414293 201.49655346124206 617.4 + vertex -23.847984815414293 201.49655346124206 597.4 + endloop +endfacet +facet normal -0.6367513322442928 0.7710692192566879 -3.17912787827519e-16 + outer loop + vertex -23.847984815414293 201.49655346124206 617.4 + vertex -25.09056419799865 200.4704275862621 597.4 + vertex -25.09056419799865 200.4704275862621 617.4 + endloop +endfacet +facet normal 0.08715574274765935 0.9961946980917455 -2.1265981455630484e-16 + outer loop + vertex -21.53658740175749 152.53246326263678 597.4 + vertex -20.828912953759342 152.47054977096997 617.4 + vertex -20.828912953759342 152.47054977096997 597.4 + endloop +endfacet +facet normal 0.08715574274765935 0.9961946980917455 -2.1265981455630484e-16 + outer loop + vertex -20.828912953759342 152.47054977096997 617.4 + vertex -21.53658740175749 152.53246326263678 597.4 + vertex -21.53658740175749 152.5324632626368 617.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 43.143156601250205 134.23791530735056 597.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.747857139629673 169.56361021045984 604.6679491924311 + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 15.497857139629502 182.12097856533427 617.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 22.98903809452716 169.14587254275946 604.4681483474218 + vertex 23.247857139629694 168.69758480667542 604.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.540750358443145 169.92232967806703 604.9857864376269 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.38183173584526 170.19758480667545 605.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.38183173584526 170.19758480667545 605.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.281931313340614 170.37061741415104 605.8823619097949 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.247857139629698 170.42963561424432 606.3999999999999 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.247857139629698 170.42963561424432 608.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.247857139629698 170.42963561424432 608.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.281931313340614 170.37061741415104 608.9176380902051 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.38183173584526 170.19758480667545 609.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.38183173584526 170.19758480667545 609.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.540750358443145 169.92232967806703 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.540750358443145 169.92232967806703 609.814213562373 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.747857139629673 169.56361021045987 610.1320508075687 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 22.98903809452716 169.14587254275946 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 22.98903809452716 169.14587254275946 610.331851652578 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 23.247857139629694 168.69758480667542 610.3999999999999 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + vertex 43.143156601250205 134.2379153073506 617.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 36.14785713962946 146.35412938903693 604.6679491924311 + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 35.90667618473197 146.77186705673734 604.4681483474218 + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 35.64785713962948 147.22015479282138 604.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 35.64785713962948 147.22015479282138 604.4 + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 23.247857139629694 168.69758480667542 604.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.35496392081599 145.99540992142977 604.9857864376269 + vertex 36.51388254341387 145.72015479282135 605.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.51388254341387 145.72015479282135 605.4 + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.613782965918475 145.54712218534576 605.8823619097949 + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.647857139629416 145.48810398525248 606.3999999999999 + vertex 36.647857139629416 145.48810398525248 608.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.647857139629416 145.48810398525248 608.4 + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.613782965918475 145.54712218534576 608.9176380902051 + vertex 36.51388254341387 145.72015479282135 609.4 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.51388254341387 145.72015479282135 609.4 + vertex 36.35496392081599 145.99540992142977 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.35496392081599 145.99540992142977 609.814213562373 + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 36.14785713962946 146.35412938903693 610.1320508075687 + vertex 35.90667618473197 146.77186705673734 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 35.90667618473197 146.77186705673734 610.331851652578 + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 7.227945163972765e-17 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 35.64785713962948 147.22015479282138 610.3999999999999 + vertex 15.497857139629502 182.12097856533427 617.4 + endloop +endfacet +facet normal 0.41219617871317477 -0.9110951159205368 3.015844579888886e-16 + outer loop + vertex 42.546827577587486 132.30606365477246 617.4 + vertex 42.98845606287095 132.5058644997817 597.4 + vertex 42.98845606287095 132.5058644997817 617.4 + endloop +endfacet +facet normal 0.41219617871317477 -0.9110951159205368 3.015844579888886e-16 + outer loop + vertex 42.98845606287095 132.5058644997817 597.4 + vertex 42.546827577587486 132.30606365477246 617.4 + vertex 42.546827577587486 132.30606365477246 597.4 + endloop +endfacet +facet normal 0.22806765142186164 0.9736452877588 -1.7673928161385326e-16 + outer loop + vertex 8.05453123624676 208.96943090627016 597.4 + vertex 9.623562304152413 208.60189949091367 617.4 + vertex 9.623562304152413 208.60189949091367 597.4 + endloop +endfacet +facet normal 0.22806765142186164 0.9736452877588 -1.7673928161385326e-16 + outer loop + vertex 9.623562304152413 208.60189949091367 617.4 + vertex 8.05453123624676 208.96943090627016 597.4 + vertex 8.05453123624676 208.96943090627016 617.4 + endloop +endfacet +facet normal 0.6039459209966543 0.7970252972845361 -5.384083332812355e-17 + outer loop + vertex 22.67371544873991 202.46981335916635 597.4 + vertex 23.958123096030832 201.49655346124203 617.4 + vertex 23.958123096030832 201.49655346124203 597.4 + endloop +endfacet +facet normal 0.6039459209966543 0.7970252972845361 -5.384083332812355e-17 + outer loop + vertex 23.958123096030832 201.49655346124203 617.4 + vertex 22.67371544873991 202.46981335916635 597.4 + vertex 22.67371544873991 202.46981335916635 617.4 + endloop +endfacet +facet normal 0.832232779361344 0.554426371086813 5.226743208186157e-17 + outer loop + vertex 31.66161008284822 193.31010907119958 617.4 + vertex 32.55506914030826 191.96896450555064 597.4 + vertex 31.66161008284822 193.31010907119958 597.4 + endloop +endfacet +facet normal 0.832232779361344 0.554426371086813 5.226743208186157e-17 + outer loop + vertex 32.55506914030826 191.96896450555064 597.4 + vertex 31.66161008284822 193.31010907119958 617.4 + vertex 32.55506914030826 191.96896450555064 617.4 + endloop +endfacet +facet normal 0.6367513322442965 0.771069219256685 -4.0663618573418724e-17 + outer loop + vertex 23.958123096030832 201.49655346124203 597.4 + vertex 25.200702478615163 200.47042758626208 617.4 + vertex 25.200702478615163 200.47042758626208 597.4 + endloop +endfacet +facet normal 0.6367513322442965 0.771069219256685 -4.0663618573418724e-17 + outer loop + vertex 25.200702478615163 200.47042758626208 617.4 + vertex 23.958123096030832 201.49655346124203 597.4 + vertex 23.958123096030832 201.49655346124203 617.4 + endloop +endfacet +facet normal -1.7761928181661448e-15 -1.0 2.32518947356378e-16 + outer loop + vertex -41.8783177822545 132.23791530735065 617.4 + vertex -39.568916705496 132.23791530735065 597.4 + vertex -39.568916705496 132.23791530735065 617.4 + endloop +endfacet +facet normal -1.7761928181661448e-15 -1.0 2.32518947356378e-16 + outer loop + vertex -39.568916705496 132.23791530735065 597.4 + vertex -41.8783177822545 132.23791530735065 617.4 + vertex -41.8783177822545 132.23791530735065 597.4 + endloop +endfacet +facet normal 0.30863971000050494 0.9511790206952655 -1.5397442837550535e-16 + outer loop + vertex 11.17584934154037 208.1690683611594 597.4 + vertex 12.708675981153974 207.6716949338254 617.4 + vertex 12.708675981153974 207.6716949338254 597.4 + endloop +endfacet +facet normal 0.30863971000050494 0.9511790206952655 -1.5397442837550535e-16 + outer loop + vertex 12.708675981153974 207.6716949338254 617.4 + vertex 11.17584934154037 208.1690683611594 597.4 + vertex 11.17584934154037 208.1690683611594 617.4 + endloop +endfacet +facet normal -0.9951296050076995 0.09857519585179583 -2.3956628513972264e-16 + outer loop + vertex -43.30096751306486 133.23791530735065 617.4 + vertex -43.253185877898744 133.7202772171456 597.4 + vertex -43.30096751306486 133.23791530735065 597.4 + endloop +endfacet +facet normal -0.9951296050076995 0.09857519585179583 -2.3956628513972264e-16 + outer loop + vertex -43.253185877898744 133.7202772171456 597.4 + vertex -43.30096751306486 133.23791530735065 617.4 + vertex -43.253185877898744 133.72027721714562 617.4 + endloop +endfacet +facet normal 0.18714752017171837 0.9823318205645059 -1.8766762311344229e-16 + outer loop + vertex 6.471501805676724 209.27101945922956 597.4 + vertex 8.05453123624676 208.96943090627016 617.4 + vertex 8.05453123624676 208.96943090627016 597.4 + endloop +endfacet +facet normal 0.18714752017171837 0.9823318205645059 -1.8766762311344229e-16 + outer loop + vertex 8.05453123624676 208.96943090627016 617.4 + vertex 6.471501805676724 209.27101945922956 597.4 + vertex 6.471501805676724 209.27101945922956 617.4 + endloop +endfacet +facet normal 0.10439696179123423 0.9945357079405243 -2.085205511042219e-16 + outer loop + vertex 3.274548159994501 209.67437328084162 597.4 + vertex 4.877244176212259 209.5061373960643 617.4 + vertex 4.877244176212259 209.5061373960643 597.4 + endloop +endfacet +facet normal 0.10439696179123423 0.9945357079405243 -2.085205511042219e-16 + outer loop + vertex 4.877244176212259 209.5061373960643 617.4 + vertex 3.274548159994501 209.67437328084162 597.4 + vertex 3.274548159994501 209.67437328084162 617.4 + endloop +endfacet +facet normal 0.7282622292749887 0.685298566619998 -7.978454901594019e-19 + outer loop + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 28.65611565455649 197.09325395373207 597.4 + vertex 27.551755827279884 198.26684979780475 597.4 + endloop +endfacet +facet normal 0.7282622292749887 0.685298566619998 -7.978454901594019e-19 + outer loop + vertex 28.65611565455649 197.09325395373207 597.4 + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 28.65611565455649 197.09325395373207 617.4 + endloop +endfacet +facet normal 0.49999999999999933 -0.8660254037844392 3.205346706876122e-31 + outer loop + vertex 29.952220022669408 190.4662088668219 617.4 + vertex 32.55506914030826 191.96896450555064 597.4 + vertex 32.55506914030826 191.96896450555064 617.4 + endloop +endfacet +facet normal 0.49999999999999933 -0.8660254037844392 3.205346706876122e-31 + outer loop + vertex 32.55506914030826 191.96896450555064 597.4 + vertex 29.952220022669408 190.4662088668219 617.4 + vertex 29.952220022669408 190.4662088668219 597.4 + endloop +endfacet +facet normal 0.49999999999999933 -0.8660254037844392 3.205346706876122e-31 + outer loop + vertex 29.952220022669408 190.4662088668219 597.4 + vertex 29.952220022669408 190.4662088668219 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + endloop +endfacet +facet normal 0.49999999999999933 -0.8660254037844392 3.205346706876122e-31 + outer loop + vertex 29.952220022669408 190.4662088668219 597.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 15.497857139629502 182.12097856533427 597.4 + endloop +endfacet +facet normal 0.14589989704428336 0.9892993581532677 -1.982675626008463e-16 + outer loop + vertex 4.877244176212259 209.5061373960643 597.4 + vertex 6.471501805676724 209.27101945922956 617.4 + vertex 6.471501805676724 209.27101945922956 597.4 + endloop +endfacet +facet normal 0.14589989704428336 0.9892993581532677 -1.982675626008463e-16 + outer loop + vertex 6.471501805676724 209.27101945922956 617.4 + vertex 4.877244176212259 209.5061373960643 597.4 + vertex 4.877244176212259 209.5061373960643 617.4 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 3.0479839899610546e-16 + outer loop + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -39.568916705496 132.23791530735065 597.4 + vertex -30.37020590902545 148.17054977096998 597.4 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 3.0479839899610546e-16 + outer loop + vertex -39.568916705496 132.23791530735065 597.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -39.568916705496 132.23791530735065 617.4 + endloop +endfacet +facet normal 0.5352237960733169 0.8447102983371686 -7.988971840785991e-17 + outer loop + vertex 19.988475029279908 204.25101823445388 597.4 + vertex 21.349727138373666 203.38850415989344 617.4 + vertex 21.349727138373666 203.38850415989344 597.4 + endloop +endfacet +facet normal 0.5352237960733169 0.8447102983371686 -7.988971840785991e-17 + outer loop + vertex 21.349727138373666 203.38850415989344 617.4 + vertex 19.988475029279908 204.25101823445388 597.4 + vertex 19.988475029279908 204.25101823445388 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 39.679054986112455 132.2379153073506 617.4 + vertex 41.98845606287095 132.2379153073506 597.4 + vertex 41.98845606287095 132.2379153073506 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 41.98845606287095 132.2379153073506 597.4 + vertex 39.679054986112455 132.2379153073506 617.4 + vertex 39.679054986112455 132.2379153073506 597.4 + endloop +endfacet +facet normal 0.5700836569343793 0.8215866503883357 -6.69238313089874e-17 + outer loop + vertex 21.349727138373666 203.38850415989344 597.4 + vertex 22.67371544873991 202.46981335916635 617.4 + vertex 22.67371544873991 202.46981335916635 597.4 + endloop +endfacet +facet normal 0.5700836569343793 0.8215866503883357 -6.69238313089874e-17 + outer loop + vertex 22.67371544873991 202.46981335916635 617.4 + vertex 21.349727138373666 203.38850415989344 597.4 + vertex 21.349727138373666 203.38850415989344 617.4 + endloop +endfacet +facet normal 0.46275692980869365 0.8864852079499307 -1.0537964790030881e-16 + outer loop + vertex 17.163768745909092 205.80157985229934 597.4 + vertex 18.592341194212068 205.0558462582614 617.4 + vertex 18.592341194212068 205.0558462582614 597.4 + endloop +endfacet +facet normal 0.46275692980869365 0.8864852079499307 -1.0537964790030881e-16 + outer loop + vertex 18.592341194212068 205.0558462582614 617.4 + vertex 17.163768745909092 205.80157985229934 597.4 + vertex 17.163768745909092 205.80157985229934 617.4 + endloop +endfacet +facet normal -0.9202212155149918 0.3913986644281133 -2.913452840785478e-16 + outer loop + vertex -43.253185877898744 133.72027721714562 617.4 + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -43.253185877898744 133.7202772171456 597.4 + endloop +endfacet +facet normal -0.9202212155149918 0.3913986644281133 -2.913452840785478e-16 + outer loop + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -43.253185877898744 133.72027721714562 617.4 + vertex -43.03301832063373 134.23791530735068 617.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -35.79653790411552 146.77186705673736 604.4681483474218 + vertex -15.387718859012988 182.1209785653343 597.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -35.79653790411552 146.77186705673736 604.4681483474218 + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -36.037718859013005 146.35412938903696 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.037718859013005 146.35412938903696 604.6679491924311 + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -36.24482564019956 145.9954099214298 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.24482564019956 145.9954099214298 604.9857864376269 + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -43.03301832063373 134.23791530735068 617.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -35.79653790411552 146.77186705673736 604.4681483474218 + vertex -35.537718859013005 147.22015479282138 604.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.24482564019956 145.9954099214298 604.9857864376269 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.40374426279744 145.72015479282138 605.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.40374426279744 145.72015479282138 605.4 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.50364468530207 145.54712218534578 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.50364468530207 145.54712218534578 605.8823619097949 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.537718859013005 145.4881039852525 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.537718859013005 145.4881039852525 606.3999999999999 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.537718859013005 145.4881039852525 608.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.537718859013005 145.4881039852525 608.4 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.50364468530207 145.54712218534578 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.50364468530207 145.54712218534578 608.9176380902051 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.40374426279744 145.72015479282138 609.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.40374426279744 145.72015479282138 609.4 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.24482564019956 145.99540992142983 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.24482564019956 145.99540992142983 609.814213562373 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -36.037718859013005 146.35412938903696 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -36.037718859013005 146.35412938903696 610.1320508075687 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -35.79653790411552 146.77186705673736 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -35.79653790411552 146.77186705673736 610.331851652578 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -35.537718859013005 147.22015479282138 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -35.537718859013005 147.22015479282138 610.3999999999999 + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -23.137718859012985 168.69758480667545 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -15.387718859012988 182.1209785653343 617.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -22.637718859012963 169.56361021045987 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -22.637718859012963 169.56361021045987 604.6679491924311 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -22.87889981391045 169.1458725427595 604.4681483474218 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -22.87889981391045 169.1458725427595 604.4681483474218 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -23.137718859012985 168.69758480667545 604.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -23.137718859012985 168.69758480667545 604.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -35.537718859013005 147.22015479282138 604.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -22.27169345522855 170.19758480667548 605.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.27169345522855 170.19758480667548 605.4 + vertex -22.1717930327239 170.37061741415107 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.1717930327239 170.37061741415107 605.8823619097949 + vertex -22.13771885901299 170.42963561424435 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.13771885901299 170.42963561424435 606.3999999999999 + vertex -22.13771885901299 170.42963561424435 608.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.13771885901299 170.42963561424435 608.4 + vertex -22.1717930327239 170.37061741415107 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.1717930327239 170.37061741415107 608.9176380902051 + vertex -22.27169345522855 170.19758480667548 609.4 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.27169345522855 170.19758480667548 609.4 + vertex -22.430612077826435 169.92232967806706 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.430612077826435 169.92232967806706 609.814213562373 + vertex -22.637718859012963 169.5636102104599 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.637718859012963 169.5636102104599 610.1320508075687 + vertex -22.87889981391045 169.1458725427595 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -22.87889981391045 169.1458725427595 610.331851652578 + vertex -23.137718859012985 168.69758480667545 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -3.047983989961055e-16 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -23.137718859012985 168.69758480667545 610.3999999999999 + vertex -43.03301832063373 134.23791530735068 617.4 + endloop +endfacet +facet normal 0.7829866224180636 0.6220385431099531 2.5825137241488715e-17 + outer loop + vertex 29.71042613890401 195.8744975236272 617.4 + vertex 30.712842328706454 194.61271322520335 597.4 + vertex 29.71042613890401 195.8744975236272 597.4 + endloop +endfacet +facet normal 0.7829866224180636 0.6220385431099531 2.5825137241488715e-17 + outer loop + vertex 30.712842328706454 194.61271322520335 597.4 + vertex 29.71042613890401 195.8744975236272 617.4 + vertex 30.712842328706454 194.61271322520335 617.4 + endloop +endfacet +facet normal 0.2685886841253404 0.9632549604127758 -1.6550166174886728e-16 + outer loop + vertex 9.623562304152413 208.60189949091367 597.4 + vertex 11.17584934154037 208.1690683611594 617.4 + vertex 11.17584934154037 208.1690683611594 597.4 + endloop +endfacet +facet normal 0.2685886841253404 0.9632549604127758 -1.6550166174886728e-16 + outer loop + vertex 11.17584934154037 208.1690683611594 617.4 + vertex 9.623562304152413 208.60189949091367 597.4 + vertex 9.623562304152413 208.60189949091367 617.4 + endloop +endfacet +facet normal 0.6989639196910199 0.7151569331064095 -1.4118899179752994e-17 + outer loop + vertex 26.399279190685665 199.3932313652283 597.4 + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 27.551755827279884 198.26684979780475 597.4 + endloop +endfacet +facet normal 0.6989639196910199 0.7151569331064095 -1.4118899179752994e-17 + outer loop + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 26.399279190685665 199.3932313652283 597.4 + vertex 26.399279190685665 199.3932313652283 617.4 + endloop +endfacet +facet normal 0.668442484061863 0.7437638371830175 -2.7415246024207674e-17 + outer loop + vertex 25.200702478615163 200.47042758626208 597.4 + vertex 26.399279190685665 199.3932313652283 617.4 + vertex 26.399279190685665 199.3932313652283 597.4 + endloop +endfacet +facet normal 0.668442484061863 0.7437638371830175 -2.7415246024207674e-17 + outer loop + vertex 26.399279190685665 199.3932313652283 617.4 + vertex 25.200702478615163 200.47042758626208 597.4 + vertex 25.200702478615163 200.47042758626208 617.4 + endloop +endfacet +facet normal 0.4252767351160268 0.9050633671567163 -1.178590851350565e-16 + outer loop + vertex 15.705257561860751 206.48691404766168 597.4 + vertex 17.163768745909092 205.80157985229934 617.4 + vertex 17.163768745909092 205.80157985229934 597.4 + endloop +endfacet +facet normal 0.4252767351160268 0.9050633671567163 -1.178590851350565e-16 + outer loop + vertex 17.163768745909092 205.80157985229934 617.4 + vertex 15.705257561860751 206.48691404766168 597.4 + vertex 15.705257561860751 206.48691404766168 617.4 + endloop +endfacet +facet normal 0.06271134093822832 0.9980317067697445 -2.184086467857672e-16 + outer loop + vertex 1.6662183356072127 209.7754327154008 597.4 + vertex 3.274548159994501 209.67437328084162 617.4 + vertex 3.274548159994501 209.67437328084162 597.4 + endloop +endfacet +facet normal 0.06271134093822832 0.9980317067697445 -2.184086467857672e-16 + outer loop + vertex 3.274548159994501 209.67437328084162 617.4 + vertex 1.6662183356072127 209.7754327154008 597.4 + vertex 1.6662183356072127 209.7754327154008 617.4 + endloop +endfacet +facet normal 0.3870523431386278 0.9220577442171928 -1.301322792253083e-16 + outer loop + vertex 14.219359909739431 207.1106495691349 597.4 + vertex 15.705257561860751 206.48691404766168 617.4 + vertex 15.705257561860751 206.48691404766168 597.4 + endloop +endfacet +facet normal 0.3870523431386278 0.9220577442171928 -1.301322792253083e-16 + outer loop + vertex 15.705257561860751 206.48691404766168 617.4 + vertex 14.219359909739431 207.1106495691349 597.4 + vertex 14.219359909739431 207.1106495691349 617.4 + endloop +endfacet +facet normal 0.3481506432367572 0.9374386004500948 -1.4217775314923133e-16 + outer loop + vertex 12.708675981153974 207.6716949338254 597.4 + vertex 14.219359909739431 207.1106495691349 617.4 + vertex 14.219359909739431 207.1106495691349 597.4 + endloop +endfacet +facet normal 0.3481506432367572 0.9374386004500948 -1.4217775314923133e-16 + outer loop + vertex 14.219359909739431 207.1106495691349 617.4 + vertex 12.708675981153974 207.6716949338254 597.4 + vertex 12.708675981153974 207.6716949338254 617.4 + endloop +endfacet +facet normal 0.4994273401369627 0.8663557767590164 -9.271580545042574e-17 + outer loop + vertex 18.592341194212068 205.0558462582614 597.4 + vertex 19.988475029279908 204.25101823445388 617.4 + vertex 19.988475029279908 204.25101823445388 597.4 + endloop +endfacet +facet normal 0.4994273401369627 0.8663557767590164 -9.271580545042574e-17 + outer loop + vertex 19.988475029279908 204.25101823445388 617.4 + vertex 18.592341194212068 205.0558462582614 597.4 + vertex 18.592341194212068 205.0558462582614 617.4 + endloop +endfacet +facet normal 0.8083169430505359 0.588747585623446 3.9080478380129054e-17 + outer loop + vertex 30.712842328706454 194.61271322520335 617.4 + vertex 31.66161008284822 193.31010907119958 597.4 + vertex 30.712842328706454 194.61271322520335 597.4 + endloop +endfacet +facet normal 0.8083169430505359 0.588747585623446 3.9080478380129054e-17 + outer loop + vertex 31.66161008284822 193.31010907119958 597.4 + vertex 30.712842328706454 194.61271322520335 617.4 + vertex 31.66161008284822 193.31010907119958 617.4 + endloop +endfacet +facet normal 0.7562861433211006 0.6542409872673034 1.2524604359616172e-17 + outer loop + vertex 28.65611565455649 197.09325395373207 617.4 + vertex 29.71042613890401 195.8744975236272 597.4 + vertex 28.65611565455649 197.09325395373207 597.4 + endloop +endfacet +facet normal 0.7562861433211006 0.6542409872673034 1.2524604359616172e-17 + outer loop + vertex 29.71042613890401 195.8744975236272 597.4 + vertex 28.65611565455649 197.09325395373207 617.4 + vertex 29.71042613890401 195.8744975236272 617.4 + endloop +endfacet +facet normal 0.020915980694884383 0.9997812369471489 -2.279145463383574e-16 + outer loop + vertex 0.05506914030825163 209.80913885452415 597.4 + vertex 1.6662183356072127 209.7754327154008 617.4 + vertex 1.6662183356072127 209.7754327154008 597.4 + endloop +endfacet +facet normal 0.020915980694884383 0.9997812369471489 -2.279145463383574e-16 + outer loop + vertex 1.6662183356072127 209.7754327154008 617.4 + vertex 0.05506914030825163 209.80913885452415 597.4 + vertex 0.05506914030825163 209.80913885452415 617.4 + endloop +endfacet +facet normal 0.6684424840618629 -0.7437638371830175 3.184631229828643e-16 + outer loop + vertex -24.237582499258796 197.20437136809898 617.4 + vertex -23.132345087548707 198.1976808085791 597.4 + vertex -23.132345087548707 198.1976808085791 617.4 + endloop +endfacet +facet normal 0.6684424840618629 -0.7437638371830175 3.184631229828643e-16 + outer loop + vertex -23.132345087548707 198.1976808085791 597.4 + vertex -24.237582499258796 197.20437136809898 617.4 + vertex -24.237582499258796 197.20437136809898 597.4 + endloop +endfacet +facet normal -0.4910858544031766 0.8711111775227673 -3.094621903444357e-16 + outer loop + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 28.325364688606378 192.79613663226206 597.4 + endloop +endfacet +facet normal -0.4910858544031766 0.8711111775227673 -3.094621903444357e-16 + outer loop + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 13.997857139629506 184.71905477668759 617.4 + endloop +endfacet +facet normal -0.34815064323678235 -0.9374386004500854 1.4217775314922369e-16 + outer loop + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 13.116314124512934 204.32079473497345 597.4 + vertex 13.116314124512934 204.32079473497345 617.4 + endloop +endfacet +facet normal -0.34815064323678235 -0.9374386004500854 1.4217775314922369e-16 + outer loop + vertex 13.116314124512934 204.32079473497345 597.4 + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 12.805069140308262 204.4363864562905 597.4 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -2.3251894735637823e-16 + outer loop + vertex 8.305069140308264 197.2261236268101 597.4 + vertex 10.30506914030826 197.2261236268101 617.4 + vertex 10.30506914030826 197.2261236268101 597.4 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -2.3251894735637823e-16 + outer loop + vertex 10.30506914030826 197.2261236268101 617.4 + vertex 8.305069140308264 197.2261236268101 597.4 + vertex 8.305069140308264 197.2261236268101 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 8.305069140308264 191.96896450555064 617.4 + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 10.30506914030826 191.96896450555064 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 8.305069140308264 191.96896450555064 617.4 + vertex 8.305069140308264 191.96896450555064 597.4 + endloop +endfacet +facet normal -0.6684424840618564 -0.7437638371830234 2.7415246024210497e-17 + outer loop + vertex 23.24248336816515 198.1976808085791 617.4 + vertex 24.347720779875264 197.20437136809898 597.4 + vertex 24.347720779875264 197.20437136809898 617.4 + endloop +endfacet +facet normal -0.6684424840618564 -0.7437638371830234 2.7415246024210497e-17 + outer loop + vertex 24.347720779875264 197.20437136809898 597.4 + vertex 23.24248336816515 198.1976808085791 617.4 + vertex 23.24248336816515 198.1976808085791 597.4 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 2.1770599857004374e-16 + outer loop + vertex -10.194930859691718 204.8761236268101 617.4 + vertex -10.194930859691729 197.22612362681014 597.4 + vertex -10.194930859691718 204.8761236268101 597.4 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 2.1770599857004374e-16 + outer loop + vertex -10.194930859691729 197.22612362681014 597.4 + vertex -10.194930859691718 204.8761236268101 617.4 + vertex -10.194930859691729 197.22612362681014 617.4 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -2.3251894735637823e-16 + outer loop + vertex -10.194930859691729 184.3761236268101 597.4 + vertex 10.305069140308255 184.3761236268101 617.4 + vertex 10.305069140308255 184.3761236268101 597.4 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -2.3251894735637823e-16 + outer loop + vertex 10.305069140308255 184.3761236268101 617.4 + vertex -10.194930859691729 184.3761236268101 597.4 + vertex -10.194930859691729 184.3761236268101 617.4 + endloop +endfacet +facet normal 1.0 -7.771561172376093e-16 2.1770599857004377e-16 + outer loop + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 12.80506914030825 186.78502419417043 597.4 + vertex 12.805069140308262 204.4363864562905 597.4 + endloop +endfacet +facet normal 1.0 -7.771561172376093e-16 2.1770599857004377e-16 + outer loop + vertex 12.80506914030825 186.78502419417043 597.4 + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 12.80506914030825 186.78502419417043 617.4 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 2.1770599857004374e-16 + outer loop + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -10.194930859691729 184.3761236268101 597.4 + vertex -10.194930859691729 191.96896450555067 597.4 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 2.1770599857004374e-16 + outer loop + vertex -10.194930859691729 184.3761236268101 597.4 + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -10.194930859691729 184.3761236268101 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex -10.194930859691718 204.8761236268101 617.4 + vertex 10.305069140308266 204.8761236268101 597.4 + vertex 10.305069140308266 204.8761236268101 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 10.305069140308266 204.8761236268101 597.4 + vertex -10.194930859691718 204.8761236268101 617.4 + vertex -10.194930859691718 204.8761236268101 597.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.1770599857004374e-16 + outer loop + vertex 10.30506914030826 197.2261236268101 617.4 + vertex 10.305069140308266 204.8761236268101 597.4 + vertex 10.30506914030826 197.2261236268101 597.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.1770599857004374e-16 + outer loop + vertex 10.305069140308266 204.8761236268101 597.4 + vertex 10.30506914030826 197.2261236268101 617.4 + vertex 10.305069140308266 204.8761236268101 617.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.1770599857004374e-16 + outer loop + vertex 10.305069140308255 184.3761236268101 617.4 + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 10.305069140308255 184.3761236268101 597.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.1770599857004374e-16 + outer loop + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 10.305069140308255 184.3761236268101 617.4 + vertex 10.30506914030826 191.96896450555064 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -8.194930859691734 191.96896450555067 597.4 + vertex -8.194930859691734 191.96896450555067 617.4 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex -8.194930859691734 191.96896450555067 597.4 + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -10.194930859691729 191.96896450555067 597.4 + endloop +endfacet +facet normal 0.8660254037844397 0.49999999999999806 7.227945163972793e-17 + outer loop + vertex 12.80506914030825 186.78502419417043 617.4 + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 12.80506914030825 186.78502419417043 597.4 + endloop +endfacet +facet normal 0.8660254037844397 0.49999999999999806 7.227945163972793e-17 + outer loop + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 12.80506914030825 186.78502419417043 617.4 + vertex 13.997857139629506 184.71905477668759 617.4 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -2.3251894735637823e-16 + outer loop + vertex -10.194930859691729 197.22612362681014 597.4 + vertex -8.194930859691734 197.22612362681014 617.4 + vertex -8.194930859691734 197.22612362681014 597.4 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -2.3251894735637823e-16 + outer loop + vertex -8.194930859691734 197.22612362681014 617.4 + vertex -10.194930859691729 197.22612362681014 597.4 + vertex -10.194930859691729 197.22612362681014 617.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.177059985700438e-16 + outer loop + vertex 8.305069140308264 191.96896450555064 617.4 + vertex 8.305069140308264 197.2261236268101 597.4 + vertex 8.305069140308264 191.96896450555064 597.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.177059985700438e-16 + outer loop + vertex 8.305069140308264 197.2261236268101 597.4 + vertex 8.305069140308264 191.96896450555064 617.4 + vertex 8.305069140308264 197.2261236268101 617.4 + endloop +endfacet +facet normal -0.38705234313864506 -0.9220577442171854 1.3013227922530284e-16 + outer loop + vertex 13.116314124512934 204.32079473497345 617.4 + vertex 14.486497324768576 203.74563268952215 597.4 + vertex 14.486497324768576 203.74563268952215 617.4 + endloop +endfacet +facet normal -0.38705234313864506 -0.9220577442171854 1.3013227922530284e-16 + outer loop + vertex 14.486497324768576 203.74563268952215 597.4 + vertex 13.116314124512934 204.32079473497345 617.4 + vertex 13.116314124512934 204.32079473497345 597.4 + endloop +endfacet +facet normal -0.5352237960733263 -0.8447102983371629 7.988971840785656e-17 + outer loop + vertex 18.436158735513036 201.68385752189502 617.4 + vertex 19.691403178850077 200.8885118308512 597.4 + vertex 19.691403178850077 200.8885118308512 617.4 + endloop +endfacet +facet normal -0.5352237960733263 -0.8447102983371629 7.988971840785656e-17 + outer loop + vertex 19.691403178850077 200.8885118308512 597.4 + vertex 18.436158735513036 201.68385752189502 617.4 + vertex 18.436158735513036 201.68385752189502 597.4 + endloop +endfacet +facet normal -0.7562861433211046 -0.6542409872672988 -1.2524604359618138e-17 + outer loop + vertex 27.40101177575885 193.95965933221288 617.4 + vertex 26.428805842568213 195.08350496407672 597.4 + vertex 27.40101177575885 193.95965933221288 597.4 + endloop +endfacet +facet normal -0.7562861433211046 -0.6542409872672988 -1.2524604359618138e-17 + outer loop + vertex 26.428805842568213 195.08350496407672 597.4 + vertex 27.40101177575885 193.95965933221288 617.4 + vertex 26.428805842568213 195.08350496407672 617.4 + endloop +endfacet +facet normal 0.6989639196910173 -0.7151569331064122 3.184561753812835e-16 + outer loop + vertex -25.300309884213064 196.16570689577946 617.4 + vertex -24.237582499258796 197.20437136809898 597.4 + vertex -24.237582499258796 197.20437136809898 617.4 + endloop +endfacet +facet normal 0.6989639196910173 -0.7151569331064122 3.184561753812835e-16 + outer loop + vertex -24.237582499258796 197.20437136809898 597.4 + vertex -25.300309884213064 196.16570689577946 617.4 + vertex -25.300309884213064 196.16570689577946 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 8.305069140308264 197.2261236268101 597.4 + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 8.305069140308264 191.96896450555064 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 10.305069140308255 184.3761236268101 597.4 + vertex 12.80506914030825 186.78502419417043 597.4 + vertex 13.997857139629506 184.71905477668759 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 12.80506914030825 186.78502419417043 597.4 + vertex 10.305069140308255 184.3761236268101 597.4 + vertex 10.30506914030826 191.96896450555064 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 12.80506914030825 186.78502419417043 597.4 + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 12.805069140308262 204.4363864562905 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 12.805069140308262 204.4363864562905 597.4 + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 10.30506914030826 197.2261236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 10.30506914030826 197.2261236268101 597.4 + vertex 10.30506914030826 191.96896450555064 597.4 + vertex 8.305069140308264 197.2261236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 12.805069140308262 204.4363864562905 597.4 + vertex 10.30506914030826 197.2261236268101 597.4 + vertex 10.305069140308266 204.8761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 41.98845606287095 132.2379153073506 597.4 + vertex 39.679054986112455 132.2379153073506 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 41.98845606287095 132.2379153073506 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 42.546827577587486 132.30606365477246 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 42.546827577587486 132.30606365477246 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 42.98845606287095 132.5058644997817 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 42.98845606287095 132.5058644997817 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 43.28324526727487 132.82370174497748 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 43.28324526727487 132.82370174497748 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 43.41110579368132 133.23791530735056 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 43.41110579368132 133.23791530735056 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 43.3633241585152 133.72027721714554 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 43.3633241585152 133.72027721714554 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 43.143156601250205 134.23791530735056 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 43.143156601250205 134.23791530735056 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 15.497857139629502 182.12097856533427 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 24.768613200629805 157.93973105977096 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 24.768613200629805 157.93973105977096 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 24.952472465515662 157.2535589417747 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 24.952472465515662 157.2535589417747 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 25.014385957182462 156.54588449377658 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 25.014385957182462 156.54588449377658 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 24.952472465515662 155.83821004577842 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 24.952472465515662 155.83821004577842 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 24.768613200629805 155.15203792778217 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 24.768613200629805 155.15203792778217 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 24.468394633251194 154.50821713237326 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 24.468394633251194 154.50821713237326 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 24.060938752631678 153.92630982863116 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 24.060938752631678 153.92630982863116 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 23.55862589952126 153.42399697552074 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 23.55862589952126 153.42399697552074 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 23.06122021535224 153.05393896729834 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 23.06122021535224 153.05393896729834 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 22.373300682659444 152.73315682100932 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 22.373300682659444 152.73315682100932 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 22.332897800370226 152.7163225275226 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 22.332897800370226 152.7163225275226 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 21.640128958283878 152.53670404954954 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 21.640128958283878 152.53670404954954 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 20.939051234375828 152.47054977096997 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 20.939051234375828 152.47054977096997 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex -20.828912953759342 152.47054977096997 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 23.06122021535224 153.05393896729834 597.4 + vertex 22.373300682659444 152.73315682100932 597.4 + vertex 22.976718595779143 153.0165410949012 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 24.768613200629805 157.93973105977096 597.4 + vertex 24.468394633251194 158.5835518551799 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 24.468394633251194 158.5835518551799 597.4 + vertex 11.770977400728352 180.5761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 11.770977400728352 180.5761236268101 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -10.194930859691729 184.3761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691729 184.3761236268101 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -13.88771885901298 184.7190547766876 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -13.88771885901298 184.7190547766876 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -29.842081742052876 190.46620886682194 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -13.88771885901298 184.7190547766876 597.4 + vertex -29.842081742052876 190.46620886682194 597.4 + vertex -28.21522640798993 192.79613663226206 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -29.842081742052876 190.46620886682194 597.4 + vertex -32.444930859691745 191.96896450555073 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -32.444930859691745 191.96896450555073 597.4 + vertex -31.55147180223168 193.31010907119963 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -31.55147180223168 193.31010907119963 597.4 + vertex -27.290873495142403 193.95965933221288 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -27.290873495142403 193.95965933221288 597.4 + vertex -31.55147180223168 193.31010907119963 597.4 + vertex -30.60270404808994 194.6127132252034 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -27.290873495142403 193.95965933221288 597.4 + vertex -30.60270404808994 194.6127132252034 597.4 + vertex -26.318667561951766 195.08350496407672 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -26.318667561951766 195.08350496407672 597.4 + vertex -30.60270404808994 194.6127132252034 597.4 + vertex -29.600287858287494 195.87449752362727 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -26.318667561951766 195.08350496407672 597.4 + vertex -29.600287858287494 195.87449752362727 597.4 + vertex -25.300309884213064 196.16570689577946 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -25.300309884213064 196.16570689577946 597.4 + vertex -29.600287858287494 195.87449752362727 597.4 + vertex -28.545977373939976 197.09325395373216 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -25.300309884213064 196.16570689577946 597.4 + vertex -28.545977373939976 197.09325395373216 597.4 + vertex -24.237582499258796 197.20437136809898 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -24.237582499258796 197.20437136809898 597.4 + vertex -28.545977373939976 197.09325395373216 597.4 + vertex -27.44161754666337 198.26684979780484 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -24.237582499258796 197.20437136809898 597.4 + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -23.132345087548707 198.1976808085791 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -23.132345087548707 198.1976808085791 597.4 + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -21.986531718390673 199.1438970121231 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -21.986531718390673 199.1438970121231 597.4 + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -26.28914091006915 199.3932313652284 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -21.986531718390673 199.1438970121231 597.4 + vertex -26.28914091006915 199.3932313652284 597.4 + vertex -20.80214746548775 200.04136418270153 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -20.80214746548775 200.04136418270153 597.4 + vertex -26.28914091006915 199.3932313652284 597.4 + vertex -25.09056419799865 200.4704275862621 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -20.80214746548775 200.04136418270153 597.4 + vertex -25.09056419799865 200.4704275862621 597.4 + vertex -19.58126489823363 200.88851183085123 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -19.58126489823363 200.88851183085123 597.4 + vertex -25.09056419799865 200.4704275862621 597.4 + vertex -23.847984815414293 201.49655346124206 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -19.58126489823363 200.88851183085123 597.4 + vertex -23.847984815414293 201.49655346124206 597.4 + vertex -18.326020454896568 201.68385752189502 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -18.326020454896568 201.68385752189502 597.4 + vertex -23.847984815414293 201.49655346124206 597.4 + vertex -22.563577168123395 202.4698133591664 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -18.326020454896568 201.68385752189502 597.4 + vertex -22.563577168123395 202.4698133591664 597.4 + vertex -17.038610704038266 202.42600947007372 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -17.038610704038266 202.42600947007372 597.4 + vertex -22.563577168123395 202.4698133591664 597.4 + vertex -15.721288500709916 203.11366897404986 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -15.721288500709916 203.11366897404986 597.4 + vertex -22.563577168123395 202.4698133591664 597.4 + vertex -21.23958885775712 203.3885041598935 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -15.721288500709916 203.11366897404986 597.4 + vertex -21.23958885775712 203.3885041598935 597.4 + vertex -14.376359044152096 203.7456326895222 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -14.376359044152096 203.7456326895222 597.4 + vertex -21.23958885775712 203.3885041598935 597.4 + vertex -19.87833674866336 204.25101823445394 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -14.376359044152096 203.7456326895222 597.4 + vertex -19.87833674866336 204.25101823445394 597.4 + vertex -13.00617584389643 204.32079473497348 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -13.00617584389643 204.32079473497348 597.4 + vertex -19.87833674866336 204.25101823445394 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -13.00617584389643 204.32079473497348 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex -12.694930859691715 204.43638645629056 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex -10.194930859691718 204.8761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691718 204.8761236268101 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex 10.305069140308266 204.8761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 10.305069140308266 204.8761236268101 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex 18.592341194212068 205.0558462582614 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 18.592341194212068 205.0558462582614 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex 17.163768745909092 205.80157985229934 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 17.163768745909092 205.80157985229934 597.4 + vertex -18.48220291359554 205.05584625826145 597.4 + vertex -17.053630465292567 205.80157985229934 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 17.163768745909092 205.80157985229934 597.4 + vertex -17.053630465292567 205.80157985229934 597.4 + vertex 15.705257561860751 206.48691404766168 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.705257561860751 206.48691404766168 597.4 + vertex -17.053630465292567 205.80157985229934 597.4 + vertex -15.595119281244203 206.4869140476617 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.705257561860751 206.48691404766168 597.4 + vertex -15.595119281244203 206.4869140476617 597.4 + vertex -14.10922162912293 207.11064956913492 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.705257561860751 206.48691404766168 597.4 + vertex -14.10922162912293 207.11064956913492 597.4 + vertex 14.219359909739431 207.1106495691349 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 14.219359909739431 207.1106495691349 597.4 + vertex -14.10922162912293 207.11064956913492 597.4 + vertex 12.708675981153974 207.6716949338254 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 12.708675981153974 207.6716949338254 597.4 + vertex -14.10922162912293 207.11064956913492 597.4 + vertex -12.598537700537447 207.67169493382545 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 12.708675981153974 207.6716949338254 597.4 + vertex -12.598537700537447 207.67169493382545 597.4 + vertex 11.17584934154037 208.1690683611594 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 11.17584934154037 208.1690683611594 597.4 + vertex -12.598537700537447 207.67169493382545 597.4 + vertex -11.065711060923867 208.16906836115942 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 11.17584934154037 208.1690683611594 597.4 + vertex -11.065711060923867 208.16906836115942 597.4 + vertex -9.513424023535883 208.60189949091367 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 11.17584934154037 208.1690683611594 597.4 + vertex -9.513424023535883 208.60189949091367 597.4 + vertex 9.623562304152413 208.60189949091367 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 9.623562304152413 208.60189949091367 597.4 + vertex -9.513424023535883 208.60189949091367 597.4 + vertex -7.944392955630252 208.96943090627016 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 9.623562304152413 208.60189949091367 597.4 + vertex -7.944392955630252 208.96943090627016 597.4 + vertex 8.05453123624676 208.96943090627016 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 8.05453123624676 208.96943090627016 597.4 + vertex -7.944392955630252 208.96943090627016 597.4 + vertex -6.361363525060216 209.27101945922956 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 8.05453123624676 208.96943090627016 597.4 + vertex -6.361363525060216 209.27101945922956 597.4 + vertex 6.471501805676724 209.27101945922956 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 6.471501805676724 209.27101945922956 597.4 + vertex -6.361363525060216 209.27101945922956 597.4 + vertex -4.767105895595756 209.5061373960643 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 6.471501805676724 209.27101945922956 597.4 + vertex -4.767105895595756 209.5061373960643 597.4 + vertex 4.877244176212259 209.5061373960643 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 4.877244176212259 209.5061373960643 597.4 + vertex -4.767105895595756 209.5061373960643 597.4 + vertex -3.1644098793779976 209.67437328084162 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 4.877244176212259 209.5061373960643 597.4 + vertex -3.1644098793779976 209.67437328084162 597.4 + vertex 3.274548159994501 209.67437328084162 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 3.274548159994501 209.67437328084162 597.4 + vertex -3.1644098793779976 209.67437328084162 597.4 + vertex -1.5560800549907094 209.7754327154008 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 3.274548159994501 209.67437328084162 597.4 + vertex -1.5560800549907094 209.7754327154008 597.4 + vertex 1.6662183356072127 209.7754327154008 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 1.6662183356072127 209.7754327154008 597.4 + vertex -1.5560800549907094 209.7754327154008 597.4 + vertex 0.05506914030825163 209.80913885452415 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 29.952220022669408 190.4662088668219 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 15.497857139629502 182.12097856533427 597.4 + vertex 10.305069140308255 184.3761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 10.305069140308255 184.3761236268101 597.4 + vertex 15.497857139629502 182.12097856533427 597.4 + vertex -10.194930859691729 184.3761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 29.952220022669408 190.4662088668219 597.4 + vertex 13.997857139629506 184.71905477668759 597.4 + vertex 28.325364688606378 192.79613663226206 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 29.952220022669408 190.4662088668219 597.4 + vertex 28.325364688606378 192.79613663226206 597.4 + vertex 32.55506914030826 191.96896450555064 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 32.55506914030826 191.96896450555064 597.4 + vertex 28.325364688606378 192.79613663226206 597.4 + vertex 31.66161008284822 193.31010907119958 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 31.66161008284822 193.31010907119958 597.4 + vertex 28.325364688606378 192.79613663226206 597.4 + vertex 27.40101177575885 193.95965933221288 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 31.66161008284822 193.31010907119958 597.4 + vertex 27.40101177575885 193.95965933221288 597.4 + vertex 30.712842328706454 194.61271322520335 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 30.712842328706454 194.61271322520335 597.4 + vertex 27.40101177575885 193.95965933221288 597.4 + vertex 26.428805842568213 195.08350496407672 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 30.712842328706454 194.61271322520335 597.4 + vertex 26.428805842568213 195.08350496407672 597.4 + vertex 29.71042613890401 195.8744975236272 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 29.71042613890401 195.8744975236272 597.4 + vertex 26.428805842568213 195.08350496407672 597.4 + vertex 25.410448164829532 196.16570689577944 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 29.71042613890401 195.8744975236272 597.4 + vertex 25.410448164829532 196.16570689577944 597.4 + vertex 28.65611565455649 197.09325395373207 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 28.65611565455649 197.09325395373207 597.4 + vertex 25.410448164829532 196.16570689577944 597.4 + vertex 24.347720779875264 197.20437136809898 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 28.65611565455649 197.09325395373207 597.4 + vertex 24.347720779875264 197.20437136809898 597.4 + vertex 27.551755827279884 198.26684979780475 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 27.551755827279884 198.26684979780475 597.4 + vertex 24.347720779875264 197.20437136809898 597.4 + vertex 23.24248336816515 198.1976808085791 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 27.551755827279884 198.26684979780475 597.4 + vertex 23.24248336816515 198.1976808085791 597.4 + vertex 22.09666999900712 199.14389701212306 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 27.551755827279884 198.26684979780475 597.4 + vertex 22.09666999900712 199.14389701212306 597.4 + vertex 26.399279190685665 199.3932313652283 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 26.399279190685665 199.3932313652283 597.4 + vertex 22.09666999900712 199.14389701212306 597.4 + vertex 20.912285746104196 200.04136418270153 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 26.399279190685665 199.3932313652283 597.4 + vertex 20.912285746104196 200.04136418270153 597.4 + vertex 25.200702478615163 200.47042758626208 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 25.200702478615163 200.47042758626208 597.4 + vertex 20.912285746104196 200.04136418270153 597.4 + vertex 19.691403178850077 200.8885118308512 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 25.200702478615163 200.47042758626208 597.4 + vertex 19.691403178850077 200.8885118308512 597.4 + vertex 23.958123096030832 201.49655346124203 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 23.958123096030832 201.49655346124203 597.4 + vertex 19.691403178850077 200.8885118308512 597.4 + vertex 18.436158735513036 201.68385752189502 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 23.958123096030832 201.49655346124203 597.4 + vertex 18.436158735513036 201.68385752189502 597.4 + vertex 22.67371544873991 202.46981335916635 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 22.67371544873991 202.46981335916635 597.4 + vertex 18.436158735513036 201.68385752189502 597.4 + vertex 17.148748984654713 202.4260094700737 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 22.67371544873991 202.46981335916635 597.4 + vertex 17.148748984654713 202.4260094700737 597.4 + vertex 15.831426781326385 203.11366897404986 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 22.67371544873991 202.46981335916635 597.4 + vertex 15.831426781326385 203.11366897404986 597.4 + vertex 21.349727138373666 203.38850415989344 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 21.349727138373666 203.38850415989344 597.4 + vertex 15.831426781326385 203.11366897404986 597.4 + vertex 14.486497324768576 203.74563268952215 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 21.349727138373666 203.38850415989344 597.4 + vertex 14.486497324768576 203.74563268952215 597.4 + vertex 19.988475029279908 204.25101823445388 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 19.988475029279908 204.25101823445388 597.4 + vertex 14.486497324768576 203.74563268952215 597.4 + vertex 13.116314124512934 204.32079473497345 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 19.988475029279908 204.25101823445388 597.4 + vertex 13.116314124512934 204.32079473497345 597.4 + vertex 18.592341194212068 205.0558462582614 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 18.592341194212068 205.0558462582614 597.4 + vertex 13.116314124512934 204.32079473497345 597.4 + vertex 12.805069140308262 204.4363864562905 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 18.592341194212068 205.0558462582614 597.4 + vertex 12.805069140308262 204.4363864562905 597.4 + vertex 10.305069140308266 204.8761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691729 184.3761236268101 597.4 + vertex -12.694930859691725 186.78502419417046 597.4 + vertex -10.194930859691729 191.96896450555067 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -12.694930859691725 186.78502419417046 597.4 + vertex -10.194930859691729 184.3761236268101 597.4 + vertex -13.88771885901298 184.7190547766876 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691729 191.96896450555067 597.4 + vertex -12.694930859691725 186.78502419417046 597.4 + vertex -12.694930859691715 204.43638645629056 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691729 191.96896450555067 597.4 + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -10.194930859691729 197.22612362681014 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691729 191.96896450555067 597.4 + vertex -10.194930859691729 197.22612362681014 597.4 + vertex -8.194930859691734 191.96896450555067 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -10.194930859691729 197.22612362681014 597.4 + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -10.194930859691718 204.8761236268101 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -8.194930859691734 197.22612362681014 597.4 + vertex -8.194930859691734 191.96896450555067 597.4 + vertex -10.194930859691729 197.22612362681014 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex 20.88398209406786 152.47054977096997 597.4 + vertex 20.939051234375828 152.47054977096997 597.4 + vertex -20.828912953759342 152.47054977096997 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -41.8783177822545 132.23791530735065 597.4 + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -39.568916705496 132.23791530735065 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -41.8783177822545 132.23791530735065 597.4 + vertex -42.436689296971025 132.30606365477252 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -42.436689296971025 132.30606365477252 597.4 + vertex -42.87831778225449 132.50586449978178 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -42.87831778225449 132.50586449978178 597.4 + vertex -43.173106986658425 132.82370174497754 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -43.173106986658425 132.82370174497754 597.4 + vertex -43.30096751306486 133.23791530735065 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -43.30096751306486 133.23791530735065 597.4 + vertex -43.253185877898744 133.7202772171456 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -43.253185877898744 133.7202772171456 597.4 + vertex -43.03301832063373 134.23791530735065 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -43.03301832063373 134.23791530735065 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -24.658474920013315 157.939731059771 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -24.658474920013315 157.939731059771 597.4 + vertex -24.84233418489917 157.25355894177474 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -24.84233418489917 157.25355894177474 597.4 + vertex -24.90424767656597 156.5458844937766 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -24.90424767656597 156.5458844937766 597.4 + vertex -24.84233418489917 155.83821004577848 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -24.84233418489917 155.83821004577848 597.4 + vertex -24.658474920013315 155.1520379277822 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -24.658474920013315 155.1520379277822 597.4 + vertex -24.358256352634704 154.5082171323733 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -24.358256352634704 154.5082171323733 597.4 + vertex -23.95080047201519 153.92630982863116 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -23.95080047201519 153.92630982863116 597.4 + vertex -23.448487618904775 153.42399697552077 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -23.448487618904775 153.42399697552077 597.4 + vertex -22.866580315162654 153.01654109490124 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -22.866580315162654 153.01654109490124 597.4 + vertex -22.22275951975374 152.71632252752264 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -22.22275951975374 152.71632252752264 597.4 + vertex -21.53658740175749 152.53246326263678 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -21.53658740175749 152.53246326263678 597.4 + vertex -20.828912953759342 152.47054977096997 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 597.4 + vertex -20.828912953759342 152.47054977096997 597.4 + vertex 30.48034418964194 148.17054977096993 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -24.658474920013315 157.939731059771 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -24.358256352634704 158.5835518551799 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -24.358256352634704 158.5835518551799 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex -11.660839120111838 180.57612362681013 597.4 + endloop +endfacet +facet normal 2.1770599857004374e-16 -2.325189473563784e-16 -1.0 + outer loop + vertex -11.660839120111838 180.57612362681013 597.4 + vertex -15.387718859012988 182.1209785653343 597.4 + vertex 11.770977400728352 180.5761236268101 597.4 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 2.177059985700438e-16 + outer loop + vertex -8.194930859691734 197.22612362681014 617.4 + vertex -8.194930859691734 191.96896450555067 597.4 + vertex -8.194930859691734 197.22612362681014 597.4 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 2.177059985700438e-16 + outer loop + vertex -8.194930859691734 191.96896450555067 597.4 + vertex -8.194930859691734 197.22612362681014 617.4 + vertex -8.194930859691734 191.96896450555067 617.4 + endloop +endfacet +facet normal -0.42527673511601083 -0.9050633671567236 1.178590851350617e-16 + outer loop + vertex 14.486497324768576 203.74563268952215 617.4 + vertex 15.831426781326385 203.11366897404986 597.4 + vertex 15.831426781326385 203.11366897404986 617.4 + endloop +endfacet +facet normal -0.42527673511601083 -0.9050633671567236 1.178590851350617e-16 + outer loop + vertex 15.831426781326385 203.11366897404986 597.4 + vertex 14.486497324768576 203.74563268952215 617.4 + vertex 14.486497324768576 203.74563268952215 597.4 + endloop +endfacet +facet normal 0.4994273401369732 -0.8663557767590104 3.101724610458232e-16 + outer loop + vertex -18.326020454896568 201.68385752189502 617.4 + vertex -17.038610704038266 202.42600947007372 597.4 + vertex -17.038610704038266 202.42600947007372 617.4 + endloop +endfacet +facet normal 0.4994273401369732 -0.8663557767590104 3.101724610458232e-16 + outer loop + vertex -17.038610704038266 202.42600947007372 597.4 + vertex -18.326020454896568 201.68385752189502 617.4 + vertex -18.326020454896568 201.68385752189502 597.4 + endloop +endfacet +facet normal 0.5700836569343717 -0.8215866503883409 3.1514509491170945e-16 + outer loop + vertex -20.80214746548775 200.04136418270153 617.4 + vertex -19.58126489823363 200.88851183085123 597.4 + vertex -19.58126489823363 200.88851183085123 617.4 + endloop +endfacet +facet normal 0.5700836569343717 -0.8215866503883409 3.1514509491170945e-16 + outer loop + vertex -19.58126489823363 200.88851183085123 597.4 + vertex -20.80214746548775 200.04136418270153 617.4 + vertex -20.80214746548775 200.04136418270153 597.4 + endloop +endfacet +facet normal 0.4910858544031737 0.8711111775227689 -9.563751771150348e-17 + outer loop + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -13.88771885901298 184.7190547766876 597.4 + endloop +endfacet +facet normal 0.4910858544031737 0.8711111775227689 -9.563751771150348e-17 + outer loop + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -28.21522640798993 192.79613663226206 617.4 + endloop +endfacet +facet normal -0.6039459209966644 -0.7970252972845284 5.384083332811956e-17 + outer loop + vertex 20.912285746104196 200.04136418270153 617.4 + vertex 22.09666999900712 199.14389701212306 597.4 + vertex 22.09666999900712 199.14389701212306 617.4 + endloop +endfacet +facet normal -0.6039459209966644 -0.7970252972845284 5.384083332811956e-17 + outer loop + vertex 22.09666999900712 199.14389701212306 597.4 + vertex 20.912285746104196 200.04136418270153 617.4 + vertex 20.912285746104196 200.04136418270153 597.4 + endloop +endfacet +facet normal 0.7282622292749873 -0.6852985666199997 3.1789195718047437e-16 + outer loop + vertex -25.300309884213064 196.16570689577946 617.4 + vertex -26.318667561951766 195.08350496407672 597.4 + vertex -25.300309884213064 196.16570689577946 597.4 + endloop +endfacet +facet normal 0.7282622292749873 -0.6852985666199997 3.1789195718047437e-16 + outer loop + vertex -26.318667561951766 195.08350496407672 597.4 + vertex -25.300309884213064 196.16570689577946 617.4 + vertex -26.318667561951766 195.08350496407672 617.4 + endloop +endfacet +facet normal 0.7562861433211037 -0.6542409872672998 3.1677145571319825e-16 + outer loop + vertex -26.318667561951766 195.08350496407672 617.4 + vertex -27.290873495142403 193.95965933221288 597.4 + vertex -26.318667561951766 195.08350496407672 597.4 + endloop +endfacet +facet normal 0.7562861433211037 -0.6542409872672998 3.1677145571319825e-16 + outer loop + vertex -27.290873495142403 193.95965933221288 597.4 + vertex -26.318667561951766 195.08350496407672 617.4 + vertex -27.290873495142403 193.95965933221288 617.4 + endloop +endfacet +facet normal 0.6039459209966634 -0.7970252972845291 3.1680613295388653e-16 + outer loop + vertex -21.986531718390673 199.1438970121231 617.4 + vertex -20.80214746548775 200.04136418270153 597.4 + vertex -20.80214746548775 200.04136418270153 617.4 + endloop +endfacet +facet normal 0.6039459209966634 -0.7970252972845291 3.1680613295388653e-16 + outer loop + vertex -20.80214746548775 200.04136418270153 597.4 + vertex -21.986531718390673 199.1438970121231 617.4 + vertex -21.986531718390673 199.1438970121231 597.4 + endloop +endfacet +facet normal 0.462756929808682 -0.8864852079499369 3.0686956689872615e-16 + outer loop + vertex -17.038610704038266 202.42600947007372 617.4 + vertex -15.721288500709916 203.11366897404986 597.4 + vertex -15.721288500709916 203.11366897404986 617.4 + endloop +endfacet +facet normal 0.462756929808682 -0.8864852079499369 3.0686956689872615e-16 + outer loop + vertex -15.721288500709916 203.11366897404986 597.4 + vertex -17.038610704038266 202.42600947007372 617.4 + vertex -17.038610704038266 202.42600947007372 597.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.1770599857004377e-16 + outer loop + vertex -12.694930859691725 186.78502419417046 617.4 + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -12.694930859691725 186.78502419417046 597.4 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -2.1770599857004377e-16 + outer loop + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -12.694930859691725 186.78502419417046 617.4 + vertex -12.694930859691715 204.43638645629056 617.4 + endloop +endfacet +facet normal 0.6367513322442926 -0.7710692192566881 3.179127878275189e-16 + outer loop + vertex -23.132345087548707 198.1976808085791 617.4 + vertex -21.986531718390673 199.1438970121231 597.4 + vertex -21.986531718390673 199.1438970121231 617.4 + endloop +endfacet +facet normal 0.6367513322442926 -0.7710692192566881 3.179127878275189e-16 + outer loop + vertex -21.986531718390673 199.1438970121231 597.4 + vertex -23.132345087548707 198.1976808085791 617.4 + vertex -23.132345087548707 198.1976808085791 597.4 + endloop +endfacet +facet normal 0.3481506432367668 -0.9374386004500911 2.93766720026555e-16 + outer loop + vertex -13.00617584389643 204.32079473497348 617.4 + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -12.694930859691715 204.43638645629056 617.4 + endloop +endfacet +facet normal 0.3481506432367668 -0.9374386004500911 2.93766720026555e-16 + outer loop + vertex -12.694930859691715 204.43638645629056 597.4 + vertex -13.00617584389643 204.32079473497348 617.4 + vertex -13.00617584389643 204.32079473497348 597.4 + endloop +endfacet +facet normal -0.5700836569343625 -0.8215866503883473 6.692383130899384e-17 + outer loop + vertex 19.691403178850077 200.8885118308512 617.4 + vertex 20.912285746104196 200.04136418270153 597.4 + vertex 20.912285746104196 200.04136418270153 617.4 + endloop +endfacet +facet normal -0.5700836569343625 -0.8215866503883473 6.692383130899384e-17 + outer loop + vertex 20.912285746104196 200.04136418270153 597.4 + vertex 19.691403178850077 200.8885118308512 617.4 + vertex 19.691403178850077 200.8885118308512 597.4 + endloop +endfacet +facet normal -0.8660254037844392 0.4999999999999993 -3.0479839899610546e-16 + outer loop + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -12.694930859691725 186.78502419417046 597.4 + vertex -13.88771885901298 184.7190547766876 597.4 + endloop +endfacet +facet normal -0.8660254037844392 0.4999999999999993 -3.0479839899610546e-16 + outer loop + vertex -12.694930859691725 186.78502419417046 597.4 + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -12.694930859691725 186.78502419417046 617.4 + endloop +endfacet +facet normal -0.7282622292749885 -0.6852985666199982 7.978454901595107e-19 + outer loop + vertex 26.428805842568213 195.08350496407672 617.4 + vertex 25.410448164829532 196.16570689577944 597.4 + vertex 26.428805842568213 195.08350496407672 597.4 + endloop +endfacet +facet normal -0.7282622292749885 -0.6852985666199982 7.978454901595107e-19 + outer loop + vertex 25.410448164829532 196.16570689577944 597.4 + vertex 26.428805842568213 195.08350496407672 617.4 + vertex 25.410448164829532 196.16570689577944 617.4 + endloop +endfacet +facet normal 0.3870523431386321 -0.9220577442171909 2.9865951294904906e-16 + outer loop + vertex -14.376359044152096 203.7456326895222 617.4 + vertex -13.00617584389643 204.32079473497348 597.4 + vertex -13.00617584389643 204.32079473497348 617.4 + endloop +endfacet +facet normal 0.3870523431386321 -0.9220577442171909 2.9865951294904906e-16 + outer loop + vertex -13.00617584389643 204.32079473497348 597.4 + vertex -14.376359044152096 203.7456326895222 617.4 + vertex -14.376359044152096 203.7456326895222 597.4 + endloop +endfacet +facet normal 0.7829866224180505 -0.6220385431099694 3.150966317595326e-16 + outer loop + vertex -27.290873495142403 193.95965933221288 617.4 + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -27.290873495142403 193.95965933221288 597.4 + endloop +endfacet +facet normal 0.7829866224180505 -0.6220385431099694 3.150966317595326e-16 + outer loop + vertex -28.21522640798993 192.79613663226206 597.4 + vertex -27.290873495142403 193.95965933221288 617.4 + vertex -28.21522640798993 192.79613663226206 617.4 + endloop +endfacet +facet normal -0.49942734013696766 -0.8663557767590137 9.271580545042399e-17 + outer loop + vertex 17.148748984654713 202.4260094700737 617.4 + vertex 18.436158735513036 201.68385752189502 597.4 + vertex 18.436158735513036 201.68385752189502 617.4 + endloop +endfacet +facet normal -0.49942734013696766 -0.8663557767590137 9.271580545042399e-17 + outer loop + vertex 18.436158735513036 201.68385752189502 597.4 + vertex 17.148748984654713 202.4260094700737 617.4 + vertex 17.148748984654713 202.4260094700737 597.4 + endloop +endfacet +facet normal 0.42527673511602226 -0.9050633671567184 3.030296777091411e-16 + outer loop + vertex -15.721288500709916 203.11366897404986 617.4 + vertex -14.376359044152096 203.7456326895222 597.4 + vertex -14.376359044152096 203.7456326895222 617.4 + endloop +endfacet +facet normal 0.42527673511602226 -0.9050633671567184 3.030296777091411e-16 + outer loop + vertex -14.376359044152096 203.7456326895222 597.4 + vertex -15.721288500709916 203.11366897404986 617.4 + vertex -15.721288500709916 203.11366897404986 597.4 + endloop +endfacet +facet normal -0.636751332244289 -0.7710692192566911 4.066361857342175e-17 + outer loop + vertex 22.09666999900712 199.14389701212306 617.4 + vertex 23.24248336816515 198.1976808085791 597.4 + vertex 23.24248336816515 198.1976808085791 617.4 + endloop +endfacet +facet normal -0.636751332244289 -0.7710692192566911 4.066361857342175e-17 + outer loop + vertex 23.24248336816515 198.1976808085791 597.4 + vertex 22.09666999900712 199.14389701212306 617.4 + vertex 22.09666999900712 199.14389701212306 597.4 + endloop +endfacet +facet normal -0.6989639196910222 -0.7151569331064074 1.4118899179751995e-17 + outer loop + vertex 24.347720779875264 197.20437136809898 617.4 + vertex 25.410448164829532 196.16570689577944 597.4 + vertex 25.410448164829532 196.16570689577944 617.4 + endloop +endfacet +facet normal -0.6989639196910222 -0.7151569331064074 1.4118899179751995e-17 + outer loop + vertex 25.410448164829532 196.16570689577944 597.4 + vertex 24.347720779875264 197.20437136809898 617.4 + vertex 24.347720779875264 197.20437136809898 597.4 + endloop +endfacet +facet normal -0.7829866224180543 -0.6220385431099646 -2.582513724148402e-17 + outer loop + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 27.40101177575885 193.95965933221288 597.4 + vertex 28.325364688606378 192.79613663226206 597.4 + endloop +endfacet +facet normal -0.7829866224180543 -0.6220385431099646 -2.582513724148402e-17 + outer loop + vertex 27.40101177575885 193.95965933221288 597.4 + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 27.40101177575885 193.95965933221288 617.4 + endloop +endfacet +facet normal 0.5352237960733128 -0.8447102983371713 3.129325803730413e-16 + outer loop + vertex -19.58126489823363 200.88851183085123 617.4 + vertex -18.326020454896568 201.68385752189502 597.4 + vertex -18.326020454896568 201.68385752189502 617.4 + endloop +endfacet +facet normal 0.5352237960733128 -0.8447102983371713 3.129325803730413e-16 + outer loop + vertex -18.326020454896568 201.68385752189502 597.4 + vertex -19.58126489823363 200.88851183085123 617.4 + vertex -19.58126489823363 200.88851183085123 597.4 + endloop +endfacet +facet normal -0.4627569298086952 -0.8864852079499299 1.053796479003083e-16 + outer loop + vertex 15.831426781326385 203.11366897404986 617.4 + vertex 17.148748984654713 202.4260094700737 597.4 + vertex 17.148748984654713 202.4260094700737 617.4 + endloop +endfacet +facet normal -0.4627569298086952 -0.8864852079499299 1.053796479003083e-16 + outer loop + vertex 17.148748984654713 202.4260094700737 597.4 + vertex 15.831426781326385 203.11366897404986 617.4 + vertex 15.831426781326385 203.11366897404986 597.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -37.528588711684364 147.77186705673736 604.4681483474218 + vertex -24.86976966658183 169.69758480667545 604.4 + vertex -37.26976966658185 148.22015479282138 604.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.86976966658183 169.69758480667545 604.4 + vertex -37.528588711684364 147.77186705673736 604.4681483474218 + vertex -24.610950621479297 170.1458725427595 604.4681483474218 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.610950621479297 170.1458725427595 604.4681483474218 + vertex -37.528588711684364 147.77186705673736 604.4681483474218 + vertex -37.76976966658185 147.35412938903696 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.610950621479297 170.1458725427595 604.4681483474218 + vertex -37.76976966658185 147.35412938903696 604.6679491924311 + vertex -24.36976966658181 170.56361021045987 604.6679491924311 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.36976966658181 170.56361021045987 604.6679491924311 + vertex -37.76976966658185 147.35412938903696 604.6679491924311 + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.36976966658181 170.56361021045987 604.6679491924311 + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + vertex -24.16266288539528 170.92232967806703 604.9857864376269 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.16266288539528 170.92232967806703 604.9857864376269 + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + vertex -38.135795070366285 146.72015479282138 605.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.16266288539528 170.92232967806703 604.9857864376269 + vertex -38.135795070366285 146.72015479282138 605.4 + vertex -24.003744262797397 171.19758480667545 605.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.003744262797397 171.19758480667545 605.4 + vertex -38.135795070366285 146.72015479282138 605.4 + vertex -38.23569549287091 146.54712218534578 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.003744262797397 171.19758480667545 605.4 + vertex -38.23569549287091 146.54712218534578 605.8823619097949 + vertex -23.903843840292748 171.37061741415107 605.8823619097949 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.903843840292748 171.37061741415107 605.8823619097949 + vertex -38.23569549287091 146.54712218534578 605.8823619097949 + vertex -38.26976966658185 146.4881039852525 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.903843840292748 171.37061741415107 605.8823619097949 + vertex -38.26976966658185 146.4881039852525 606.3999999999999 + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + vertex -38.26976966658185 146.4881039852525 606.3999999999999 + vertex -38.26976966658185 146.48810398525254 608.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + vertex -38.26976966658185 146.48810398525254 608.4 + vertex -23.86976966658183 171.42963561424435 608.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.86976966658183 171.42963561424435 608.4 + vertex -38.26976966658185 146.48810398525254 608.4 + vertex -38.23569549287091 146.54712218534578 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.86976966658183 171.42963561424435 608.4 + vertex -38.23569549287091 146.54712218534578 608.9176380902051 + vertex -23.903843840292748 171.37061741415107 608.9176380902051 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.903843840292748 171.37061741415107 608.9176380902051 + vertex -38.23569549287091 146.54712218534578 608.9176380902051 + vertex -38.135795070366285 146.72015479282138 609.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -23.903843840292748 171.37061741415107 608.9176380902051 + vertex -38.135795070366285 146.72015479282138 609.4 + vertex -24.003744262797397 171.19758480667545 609.4 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.003744262797397 171.19758480667545 609.4 + vertex -38.135795070366285 146.72015479282138 609.4 + vertex -37.976876447768404 146.99540992142983 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.003744262797397 171.19758480667545 609.4 + vertex -37.976876447768404 146.99540992142983 609.814213562373 + vertex -24.16266288539528 170.92232967806706 609.814213562373 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.16266288539528 170.92232967806706 609.814213562373 + vertex -37.976876447768404 146.99540992142983 609.814213562373 + vertex -37.76976966658185 147.35412938903698 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.16266288539528 170.92232967806706 609.814213562373 + vertex -37.76976966658185 147.35412938903698 610.1320508075687 + vertex -24.36976966658181 170.5636102104599 610.1320508075687 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.36976966658181 170.5636102104599 610.1320508075687 + vertex -37.76976966658185 147.35412938903698 610.1320508075687 + vertex -37.528588711684364 147.77186705673736 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.36976966658181 170.5636102104599 610.1320508075687 + vertex -37.528588711684364 147.77186705673736 610.331851652578 + vertex -24.610950621479297 170.1458725427595 610.331851652578 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.610950621479297 170.1458725427595 610.331851652578 + vertex -37.528588711684364 147.77186705673736 610.331851652578 + vertex -37.26976966658185 148.2201547928214 610.3999999999999 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000012 -8.360210501876739e-16 + outer loop + vertex -24.610950621479297 170.1458725427595 610.331851652578 + vertex -37.26976966658185 148.2201547928214 610.3999999999999 + vertex -24.86976966658183 169.69758480667545 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 24.721088902095804 170.14587254275943 604.4681483474218 + vertex 37.37990794719834 148.22015479282135 604.4 + vertex 24.97990794719834 169.6975848066754 604.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.37990794719834 148.22015479282135 604.4 + vertex 24.721088902095804 170.14587254275943 604.4681483474218 + vertex 37.63872699230085 147.7718670567373 604.4681483474218 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.63872699230085 147.7718670567373 604.4681483474218 + vertex 24.721088902095804 170.14587254275943 604.4681483474218 + vertex 24.47990794719832 170.56361021045984 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.63872699230085 147.7718670567373 604.4681483474218 + vertex 24.47990794719832 170.56361021045984 604.6679491924311 + vertex 37.87990794719834 147.3541293890369 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.87990794719834 147.3541293890369 604.6679491924311 + vertex 24.47990794719832 170.56361021045984 604.6679491924311 + vertex 24.27280116601179 170.922329678067 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.87990794719834 147.3541293890369 604.6679491924311 + vertex 24.27280116601179 170.922329678067 604.9857864376269 + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + vertex 24.27280116601179 170.922329678067 604.9857864376269 + vertex 24.113882543413904 171.19758480667542 605.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.08701472838489 146.99540992142974 604.9857864376269 + vertex 24.113882543413904 171.19758480667542 605.4 + vertex 38.245933350982774 146.72015479282132 605.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.245933350982774 146.72015479282132 605.4 + vertex 24.113882543413904 171.19758480667542 605.4 + vertex 24.013982120909255 171.37061741415104 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.245933350982774 146.72015479282132 605.4 + vertex 24.013982120909255 171.37061741415104 605.8823619097949 + vertex 38.3458337734874 146.54712218534573 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.3458337734874 146.54712218534573 605.8823619097949 + vertex 24.013982120909255 171.37061741415104 605.8823619097949 + vertex 23.979907947198342 171.4296356142443 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.3458337734874 146.54712218534573 605.8823619097949 + vertex 23.979907947198342 171.4296356142443 606.3999999999999 + vertex 38.37990794719834 146.48810398525245 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.37990794719834 146.48810398525245 606.3999999999999 + vertex 23.979907947198342 171.4296356142443 606.3999999999999 + vertex 23.979907947198342 171.4296356142443 608.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.37990794719834 146.48810398525245 606.3999999999999 + vertex 23.979907947198342 171.4296356142443 608.4 + vertex 38.37990794719834 146.48810398525245 608.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.37990794719834 146.48810398525245 608.4 + vertex 23.979907947198342 171.4296356142443 608.4 + vertex 24.013982120909255 171.37061741415104 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.37990794719834 146.48810398525245 608.4 + vertex 24.013982120909255 171.37061741415104 608.9176380902051 + vertex 38.3458337734874 146.5471221853457 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.3458337734874 146.5471221853457 608.9176380902051 + vertex 24.013982120909255 171.37061741415104 608.9176380902051 + vertex 24.113882543413904 171.19758480667542 609.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.3458337734874 146.5471221853457 608.9176380902051 + vertex 24.113882543413904 171.19758480667542 609.4 + vertex 38.245933350982774 146.72015479282132 609.4 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.245933350982774 146.72015479282132 609.4 + vertex 24.113882543413904 171.19758480667542 609.4 + vertex 24.27280116601179 170.92232967806703 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.245933350982774 146.72015479282132 609.4 + vertex 24.27280116601179 170.92232967806703 609.814213562373 + vertex 38.08701472838489 146.99540992142974 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.08701472838489 146.99540992142974 609.814213562373 + vertex 24.27280116601179 170.92232967806703 609.814213562373 + vertex 24.47990794719832 170.56361021045984 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 38.08701472838489 146.99540992142974 609.814213562373 + vertex 24.47990794719832 170.56361021045984 610.1320508075687 + vertex 37.87990794719834 147.3541293890369 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.87990794719834 147.3541293890369 610.1320508075687 + vertex 24.47990794719832 170.56361021045984 610.1320508075687 + vertex 24.721088902095804 170.14587254275943 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.87990794719834 147.3541293890369 610.1320508075687 + vertex 24.721088902095804 170.14587254275943 610.331851652578 + vertex 37.63872699230085 147.7718670567373 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.63872699230085 147.7718670567373 610.331851652578 + vertex 24.721088902095804 170.14587254275943 610.331851652578 + vertex 24.97990794719834 169.6975848066754 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844387 0.5 -4.531641802949787e-16 + outer loop + vertex 37.63872699230085 147.7718670567373 610.331851652578 + vertex 24.97990794719834 169.6975848066754 610.3999999999999 + vertex 37.37990794719834 148.22015479282135 610.3999999999999 + endloop +endfacet +facet normal -7.240154675610708e-16 4.1801052509383803e-16 1.0 + outer loop + vertex -23.137718859012985 168.69758480667545 610.3999999999999 + vertex -37.26976966658185 148.2201547928214 610.3999999999999 + vertex -35.537718859013005 147.22015479282138 610.3999999999999 + endloop +endfacet +facet normal -7.240154675610708e-16 4.1801052509383803e-16 1.0 + outer loop + vertex -37.26976966658185 148.2201547928214 610.3999999999999 + vertex -23.137718859012985 168.69758480667545 610.3999999999999 + vertex -24.86976966658183 169.69758480667545 610.3999999999999 + endloop +endfacet +facet normal -0.4957224306869049 -0.8586164364012576 -0.1305261922200746 + outer loop + vertex -36.537718859013005 145.4881039852525 606.3999999999999 + vertex -38.23569549287091 146.54712218534578 605.8823619097949 + vertex -36.50364468530207 145.54712218534578 605.8823619097949 + endloop +endfacet +facet normal -0.4957224306869049 -0.8586164364012576 -0.1305261922200746 + outer loop + vertex -38.23569549287091 146.54712218534578 605.8823619097949 + vertex -36.537718859013005 145.4881039852525 606.3999999999999 + vertex -38.26976966658185 146.4881039852525 606.3999999999999 + endloop +endfacet +facet normal 0.30438071450435245 0.5272028623656552 0.7933533402912476 + outer loop + vertex -22.430612077826435 169.92232967806706 609.814213562373 + vertex -24.36976966658181 170.5636102104599 610.1320508075687 + vertex -22.637718859012963 169.5636102104599 610.1320508075687 + endloop +endfacet +facet normal 0.30438071450435245 0.5272028623656552 0.7933533402912476 + outer loop + vertex -24.36976966658181 170.5636102104599 610.1320508075687 + vertex -22.430612077826435 169.92232967806706 609.814213562373 + vertex -24.16266288539528 170.92232967806706 609.814213562373 + endloop +endfacet +facet normal -0.06526309610999552 -0.11303899832176091 0.9914448613738187 + outer loop + vertex -35.537718859013005 147.22015479282138 610.3999999999999 + vertex -37.528588711684364 147.77186705673736 610.331851652578 + vertex -35.79653790411552 146.77186705673736 610.331851652578 + endloop +endfacet +facet normal -0.06526309610999552 -0.11303899832176091 0.9914448613738187 + outer loop + vertex -37.528588711684364 147.77186705673736 610.331851652578 + vertex -35.537718859013005 147.22015479282138 610.3999999999999 + vertex -37.26976966658185 148.2201547928214 610.3999999999999 + endloop +endfacet +facet normal 0.19134171618257442 0.33141357403564325 0.9238795325112623 + outer loop + vertex -22.637718859012963 169.5636102104599 610.1320508075687 + vertex -24.610950621479297 170.1458725427595 610.331851652578 + vertex -22.87889981391045 169.1458725427595 610.331851652578 + endloop +endfacet +facet normal 0.19134171618257442 0.33141357403564325 0.9238795325112623 + outer loop + vertex -24.610950621479297 170.1458725427595 610.331851652578 + vertex -22.637718859012963 169.5636102104599 610.1320508075687 + vertex -24.36976966658181 170.5636102104599 610.1320508075687 + endloop +endfacet +facet normal 0.495722430686907 0.858616436401261 -0.1305261922200442 + outer loop + vertex -22.1717930327239 170.37061741415107 605.8823619097949 + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + vertex -22.13771885901299 170.42963561424435 606.3999999999999 + endloop +endfacet +facet normal 0.495722430686907 0.858616436401261 -0.1305261922200442 + outer loop + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + vertex -22.1717930327239 170.37061741415107 605.8823619097949 + vertex -23.903843840292748 171.37061741415107 605.8823619097949 + endloop +endfacet +facet normal -0.19134171618257903 -0.3314135740356482 0.9238795325112594 + outer loop + vertex -35.79653790411552 146.77186705673736 610.331851652578 + vertex -37.76976966658185 147.35412938903698 610.1320508075687 + vertex -36.037718859013005 146.35412938903696 610.1320508075687 + endloop +endfacet +facet normal -0.19134171618257903 -0.3314135740356482 0.9238795325112594 + outer loop + vertex -37.76976966658185 147.35412938903698 610.1320508075687 + vertex -35.79653790411552 146.77186705673736 610.331851652578 + vertex -37.528588711684364 147.77186705673736 610.331851652578 + endloop +endfacet +facet normal 0.3043807145043536 0.5272028623656544 -0.7933533402912476 + outer loop + vertex -24.36976966658181 170.56361021045987 604.6679491924311 + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -22.637718859012963 169.56361021045987 604.6679491924311 + endloop +endfacet +facet normal 0.3043807145043536 0.5272028623656544 -0.7933533402912476 + outer loop + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -24.36976966658181 170.56361021045987 604.6679491924311 + vertex -24.16266288539528 170.92232967806703 604.9857864376269 + endloop +endfacet +facet normal 0.4619397662556316 0.8001031451912428 0.38268343236515184 + outer loop + vertex -23.903843840292748 171.37061741415107 608.9176380902051 + vertex -22.27169345522855 170.19758480667548 609.4 + vertex -22.1717930327239 170.37061741415107 608.9176380902051 + endloop +endfacet +facet normal 0.4619397662556316 0.8001031451912428 0.38268343236515184 + outer loop + vertex -22.27169345522855 170.19758480667548 609.4 + vertex -23.903843840292748 171.37061741415107 608.9176380902051 + vertex -24.003744262797397 171.19758480667545 609.4 + endloop +endfacet +facet normal 0.49572243068690847 0.8586164364012637 0.13052619222002185 + outer loop + vertex -23.86976966658183 171.42963561424435 608.4 + vertex -22.1717930327239 170.37061741415107 608.9176380902051 + vertex -22.13771885901299 170.42963561424435 608.4 + endloop +endfacet +facet normal 0.49572243068690847 0.8586164364012637 0.13052619222002185 + outer loop + vertex -22.1717930327239 170.37061741415107 608.9176380902051 + vertex -23.86976966658183 171.42963561424435 608.4 + vertex -23.903843840292748 171.37061741415107 608.9176380902051 + endloop +endfacet +facet normal -0.3043807145043484 -0.5272028623656454 0.7933533402912555 + outer loop + vertex -36.037718859013005 146.35412938903696 610.1320508075687 + vertex -37.976876447768404 146.99540992142983 609.814213562373 + vertex -36.24482564019956 145.99540992142983 609.814213562373 + endloop +endfacet +facet normal -0.3043807145043484 -0.5272028623656454 0.7933533402912555 + outer loop + vertex -37.976876447768404 146.99540992142983 609.814213562373 + vertex -36.037718859013005 146.35412938903696 610.1320508075687 + vertex -37.76976966658185 147.35412938903698 610.1320508075687 + endloop +endfacet +facet normal -0.30438071450434717 -0.5272028623656461 -0.7933533402912555 + outer loop + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + vertex -36.037718859013005 146.35412938903696 604.6679491924311 + vertex -36.24482564019956 145.9954099214298 604.9857864376269 + endloop +endfacet +facet normal -0.30438071450434717 -0.5272028623656461 -0.7933533402912555 + outer loop + vertex -36.037718859013005 146.35412938903696 604.6679491924311 + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + vertex -37.76976966658185 147.35412938903696 604.6679491924311 + endloop +endfacet +facet normal 0.06526309610999147 0.11303899832175722 0.9914448613738194 + outer loop + vertex -22.87889981391045 169.1458725427595 610.331851652578 + vertex -24.86976966658183 169.69758480667545 610.3999999999999 + vertex -23.137718859012985 168.69758480667545 610.3999999999999 + endloop +endfacet +facet normal 0.06526309610999147 0.11303899832175722 0.9914448613738194 + outer loop + vertex -24.86976966658183 169.69758480667545 610.3999999999999 + vertex -22.87889981391045 169.1458725427595 610.331851652578 + vertex -24.610950621479297 170.1458725427595 610.331851652578 + endloop +endfacet +facet normal 0.46193976625564476 0.8001031451912645 -0.3826834323650908 + outer loop + vertex -22.27169345522855 170.19758480667548 605.4 + vertex -23.903843840292748 171.37061741415107 605.8823619097949 + vertex -22.1717930327239 170.37061741415107 605.8823619097949 + endloop +endfacet +facet normal 0.46193976625564476 0.8001031451912645 -0.3826834323650908 + outer loop + vertex -23.903843840292748 171.37061741415107 605.8823619097949 + vertex -22.27169345522855 170.19758480667548 605.4 + vertex -24.003744262797397 171.19758480667545 605.4 + endloop +endfacet +facet normal 0.19134171618258233 0.3314135740356539 -0.9238795325112567 + outer loop + vertex -24.610950621479297 170.1458725427595 604.4681483474218 + vertex -22.637718859012963 169.56361021045987 604.6679491924311 + vertex -22.87889981391045 169.1458725427595 604.4681483474218 + endloop +endfacet +facet normal 0.19134171618258233 0.3314135740356539 -0.9238795325112567 + outer loop + vertex -22.637718859012963 169.56361021045987 604.6679491924311 + vertex -24.610950621479297 170.1458725427595 604.4681483474218 + vertex -24.36976966658181 170.56361021045987 604.6679491924311 + endloop +endfacet +facet normal -0.06526309610999409 -0.11303899832176174 -0.9914448613738187 + outer loop + vertex -37.528588711684364 147.77186705673736 604.4681483474218 + vertex -35.537718859013005 147.22015479282138 604.4 + vertex -35.79653790411552 146.77186705673736 604.4681483474218 + endloop +endfacet +facet normal -0.06526309610999409 -0.11303899832176174 -0.9914448613738187 + outer loop + vertex -35.537718859013005 147.22015479282138 604.4 + vertex -37.528588711684364 147.77186705673736 604.4681483474218 + vertex -37.26976966658185 148.22015479282138 604.4 + endloop +endfacet +facet normal 0.5000000000000013 0.8660254037844379 -1.525901372395458e-31 + outer loop + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + vertex -22.13771885901299 170.42963561424435 608.4 + vertex -22.13771885901299 170.42963561424435 606.3999999999999 + endloop +endfacet +facet normal 0.5000000000000013 0.8660254037844379 -1.525901372395458e-31 + outer loop + vertex -22.13771885901299 170.42963561424435 608.4 + vertex -23.86976966658183 171.42963561424435 606.3999999999999 + vertex -23.86976966658183 171.42963561424435 608.4 + endloop +endfacet +facet normal -0.4957224306869072 -0.8586164364012612 0.13052619222004305 + outer loop + vertex -38.23569549287091 146.54712218534578 608.9176380902051 + vertex -36.537718859013005 145.4881039852525 608.4 + vertex -36.50364468530207 145.54712218534578 608.9176380902051 + endloop +endfacet +facet normal -0.4957224306869072 -0.8586164364012612 0.13052619222004305 + outer loop + vertex -36.537718859013005 145.4881039852525 608.4 + vertex -38.23569549287091 146.54712218534578 608.9176380902051 + vertex -38.26976966658185 146.48810398525254 608.4 + endloop +endfacet +facet normal 0.39667667014560914 0.687064146869434 0.6087614290087444 + outer loop + vertex -24.003744262797397 171.19758480667545 609.4 + vertex -22.430612077826435 169.92232967806706 609.814213562373 + vertex -22.27169345522855 170.19758480667548 609.4 + endloop +endfacet +facet normal 0.39667667014560914 0.687064146869434 0.6087614290087444 + outer loop + vertex -22.430612077826435 169.92232967806706 609.814213562373 + vertex -24.003744262797397 171.19758480667545 609.4 + vertex -24.16266288539528 170.92232967806706 609.814213562373 + endloop +endfacet +facet normal -0.39667667014560454 -0.6870641468694261 -0.6087614290087562 + outer loop + vertex -36.40374426279744 145.72015479282138 605.4 + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + vertex -36.24482564019956 145.9954099214298 604.9857864376269 + endloop +endfacet +facet normal -0.39667667014560454 -0.6870641468694261 -0.6087614290087562 + outer loop + vertex -37.976876447768404 146.99540992142983 604.9857864376269 + vertex -36.40374426279744 145.72015479282138 605.4 + vertex -38.135795070366285 146.72015479282138 605.4 + endloop +endfacet +facet normal -0.46193976625565125 -0.8001031451912769 -0.38268343236505625 + outer loop + vertex -36.50364468530207 145.54712218534578 605.8823619097949 + vertex -38.135795070366285 146.72015479282138 605.4 + vertex -36.40374426279744 145.72015479282138 605.4 + endloop +endfacet +facet normal -0.46193976625565125 -0.8001031451912769 -0.38268343236505625 + outer loop + vertex -38.135795070366285 146.72015479282138 605.4 + vertex -36.50364468530207 145.54712218534578 605.8823619097949 + vertex -38.23569549287091 146.54712218534578 605.8823619097949 + endloop +endfacet +facet normal 7.240154675610707e-16 -4.1801052509383793e-16 -1.0 + outer loop + vertex -37.26976966658185 148.22015479282138 604.4 + vertex -23.137718859012985 168.69758480667545 604.4 + vertex -35.537718859013005 147.22015479282138 604.4 + endloop +endfacet +facet normal 7.240154675610707e-16 -4.1801052509383793e-16 -1.0 + outer loop + vertex -23.137718859012985 168.69758480667545 604.4 + vertex -37.26976966658185 148.22015479282138 604.4 + vertex -24.86976966658183 169.69758480667545 604.4 + endloop +endfacet +facet normal 0.396676670145601 0.6870641468694179 -0.608761429008768 + outer loop + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -24.003744262797397 171.19758480667545 605.4 + vertex -22.27169345522855 170.19758480667548 605.4 + endloop +endfacet +facet normal 0.396676670145601 0.6870641468694179 -0.608761429008768 + outer loop + vertex -24.003744262797397 171.19758480667545 605.4 + vertex -22.430612077826435 169.92232967806703 604.9857864376269 + vertex -24.16266288539528 170.92232967806703 604.9857864376269 + endloop +endfacet +facet normal 0.06526309610999291 0.11303899832175639 -0.9914448613738194 + outer loop + vertex -24.86976966658183 169.69758480667545 604.4 + vertex -22.87889981391045 169.1458725427595 604.4681483474218 + vertex -23.137718859012985 168.69758480667545 604.4 + endloop +endfacet +facet normal 0.06526309610999291 0.11303899832175639 -0.9914448613738194 + outer loop + vertex -22.87889981391045 169.1458725427595 604.4681483474218 + vertex -24.86976966658183 169.69758480667545 604.4 + vertex -24.610950621479297 170.1458725427595 604.4681483474218 + endloop +endfacet +facet normal -0.5000000000000013 -0.8660254037844379 2.4421626117070194e-15 + outer loop + vertex -38.26976966658185 146.48810398525254 608.4 + vertex -36.537718859013005 145.4881039852525 606.3999999999999 + vertex -36.537718859013005 145.4881039852525 608.4 + endloop +endfacet +facet normal -0.5000000000000013 -0.8660254037844379 2.4421626117070194e-15 + outer loop + vertex -36.537718859013005 145.4881039852525 606.3999999999999 + vertex -38.26976966658185 146.48810398525254 608.4 + vertex -38.26976966658185 146.4881039852525 606.3999999999999 + endloop +endfacet +facet normal -0.1913417161825777 -0.3314135740356489 -0.9238795325112594 + outer loop + vertex -37.76976966658185 147.35412938903696 604.6679491924311 + vertex -35.79653790411552 146.77186705673736 604.4681483474218 + vertex -36.037718859013005 146.35412938903696 604.6679491924311 + endloop +endfacet +facet normal -0.1913417161825777 -0.3314135740356489 -0.9238795325112594 + outer loop + vertex -35.79653790411552 146.77186705673736 604.4681483474218 + vertex -37.76976966658185 147.35412938903696 604.6679491924311 + vertex -37.528588711684364 147.77186705673736 604.4681483474218 + endloop +endfacet +facet normal -0.4619397662556376 -0.800103145191252 0.3826834323651254 + outer loop + vertex -38.135795070366285 146.72015479282138 609.4 + vertex -36.50364468530207 145.54712218534578 608.9176380902051 + vertex -36.40374426279744 145.72015479282138 609.4 + endloop +endfacet +facet normal -0.4619397662556376 -0.800103145191252 0.3826834323651254 + outer loop + vertex -36.50364468530207 145.54712218534578 608.9176380902051 + vertex -38.135795070366285 146.72015479282138 609.4 + vertex -38.23569549287091 146.54712218534578 608.9176380902051 + endloop +endfacet +facet normal -0.3966766701456055 -0.6870641468694256 0.6087614290087563 + outer loop + vertex -37.976876447768404 146.99540992142983 609.814213562373 + vertex -36.40374426279744 145.72015479282138 609.4 + vertex -36.24482564019956 145.99540992142983 609.814213562373 + endloop +endfacet +facet normal -0.3966766701456055 -0.6870641468694256 0.6087614290087563 + outer loop + vertex -36.40374426279744 145.72015479282138 609.4 + vertex -37.976876447768404 146.99540992142983 609.814213562373 + vertex -38.135795070366285 146.72015479282138 609.4 + endloop +endfacet +facet normal -0.8083169430505417 0.588747585623438 -3.128704161156742e-16 + outer loop + vertex -31.55147180223168 193.31010907119963 617.4 + vertex -30.60270404808994 194.6127132252034 597.4 + vertex -31.55147180223168 193.31010907119963 597.4 + endloop +endfacet +facet normal -0.8083169430505417 0.588747585623438 -3.128704161156742e-16 + outer loop + vertex -30.60270404808994 194.6127132252034 597.4 + vertex -31.55147180223168 193.31010907119963 617.4 + vertex -30.60270404808994 194.6127132252034 617.4 + endloop +endfacet +facet normal -0.34815064323675166 0.9374386004500969 -2.9376672002655305e-16 + outer loop + vertex -14.10922162912293 207.11064956913492 597.4 + vertex -12.598537700537447 207.67169493382545 617.4 + vertex -12.598537700537447 207.67169493382545 597.4 + endloop +endfacet +facet normal -0.34815064323675166 0.9374386004500969 -2.9376672002655305e-16 + outer loop + vertex -12.598537700537447 207.67169493382545 617.4 + vertex -14.10922162912293 207.11064956913492 597.4 + vertex -14.10922162912293 207.11064956913492 617.4 + endloop +endfacet +facet normal -0.7562861433211027 0.654240987267301 -3.167714557131983e-16 + outer loop + vertex -29.600287858287494 195.87449752362727 617.4 + vertex -28.545977373939976 197.09325395373216 597.4 + vertex -29.600287858287494 195.87449752362727 597.4 + endloop +endfacet +facet normal -0.7562861433211027 0.654240987267301 -3.167714557131983e-16 + outer loop + vertex -28.545977373939976 197.09325395373216 597.4 + vertex -29.600287858287494 195.87449752362727 617.4 + vertex -28.545977373939976 197.09325395373216 617.4 + endloop +endfacet +facet normal -0.10439696179122616 0.994535707940525 -2.5397624073309896e-16 + outer loop + vertex -4.767105895595756 209.5061373960643 597.4 + vertex -3.1644098793779976 209.67437328084162 617.4 + vertex -3.1644098793779976 209.67437328084162 597.4 + endloop +endfacet +facet normal -0.10439696179122616 0.994535707940525 -2.5397624073309896e-16 + outer loop + vertex -3.1644098793779976 209.67437328084162 617.4 + vertex -4.767105895595756 209.5061373960643 597.4 + vertex -4.767105895595756 209.5061373960643 617.4 + endloop +endfacet +facet normal -0.8322327793613368 0.5544263710868239 -3.1009670446530766e-16 + outer loop + vertex -32.444930859691745 191.96896450555073 617.4 + vertex -31.55147180223168 193.31010907119963 597.4 + vertex -32.444930859691745 191.96896450555073 597.4 + endloop +endfacet +facet normal -0.8322327793613368 0.5544263710868239 -3.1009670446530766e-16 + outer loop + vertex -31.55147180223168 193.31010907119963 597.4 + vertex -32.444930859691745 191.96896450555073 617.4 + vertex -31.55147180223168 193.31010907119963 617.4 + endloop +endfacet +facet normal -0.06271134093823419 0.9980317067697442 -2.4571391698701533e-16 + outer loop + vertex -3.1644098793779976 209.67437328084162 597.4 + vertex -1.5560800549907094 209.7754327154008 617.4 + vertex -1.5560800549907094 209.7754327154008 597.4 + endloop +endfacet +facet normal -0.06271134093823419 0.9980317067697442 -2.4571391698701533e-16 + outer loop + vertex -1.5560800549907094 209.7754327154008 617.4 + vertex -3.1644098793779976 209.67437328084162 597.4 + vertex -3.1644098793779976 209.67437328084162 617.4 + endloop +endfacet +facet normal 0.42261826174069567 0.9063077870366518 -1.187272019364568e-16 + outer loop + vertex -22.866580315162654 153.01654109490124 597.4 + vertex -22.22275951975374 152.71632252752264 617.4 + vertex -22.22275951975374 152.71632252752264 597.4 + endloop +endfacet +facet normal 0.42261826174069567 0.9063077870366518 -1.187272019364568e-16 + outer loop + vertex -22.22275951975374 152.71632252752264 617.4 + vertex -22.866580315162654 153.01654109490124 597.4 + vertex -22.866580315162654 153.01654109490127 617.4 + endloop +endfacet +facet normal 0.5735764363510477 0.8191520442889909 -6.559734023084969e-17 + outer loop + vertex -23.448487618904775 153.42399697552077 597.4 + vertex -22.866580315162654 153.01654109490127 617.4 + vertex -22.866580315162654 153.01654109490124 597.4 + endloop +endfacet +facet normal 0.5735764363510477 0.8191520442889909 -6.559734023084969e-17 + outer loop + vertex -22.866580315162654 153.01654109490127 617.4 + vertex -23.448487618904775 153.42399697552077 597.4 + vertex -23.448487618904775 153.42399697552077 617.4 + endloop +endfacet +facet normal -0.5352237960733159 0.8447102983371693 -3.129325803730416e-16 + outer loop + vertex -21.23958885775712 203.3885041598935 597.4 + vertex -19.87833674866336 204.25101823445394 617.4 + vertex -19.87833674866336 204.25101823445394 597.4 + endloop +endfacet +facet normal -0.5352237960733159 0.8447102983371693 -3.129325803730416e-16 + outer loop + vertex -19.87833674866336 204.25101823445394 617.4 + vertex -21.23958885775712 203.3885041598935 597.4 + vertex -21.23958885775712 203.3885041598935 617.4 + endloop +endfacet +facet normal -0.18714752017171726 0.9823318205645061 -2.691538986312248e-16 + outer loop + vertex -7.944392955630252 208.96943090627016 597.4 + vertex -6.361363525060216 209.27101945922956 617.4 + vertex -6.361363525060216 209.27101945922956 597.4 + endloop +endfacet +facet normal -0.18714752017171726 0.9823318205645061 -2.691538986312248e-16 + outer loop + vertex -6.361363525060216 209.27101945922956 617.4 + vertex -7.944392955630252 208.96943090627016 597.4 + vertex -7.944392955630252 208.96943090627016 617.4 + endloop +endfacet +facet normal -0.7282622292749814 0.685298566620006 -3.1789195718047457e-16 + outer loop + vertex -28.545977373939976 197.09325395373216 617.4 + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -28.545977373939976 197.09325395373216 597.4 + endloop +endfacet +facet normal -0.7282622292749814 0.685298566620006 -3.1789195718047457e-16 + outer loop + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -28.545977373939976 197.09325395373216 617.4 + vertex -27.44161754666337 198.26684979780484 617.4 + endloop +endfacet +facet normal -0.6989639196910225 0.715156933106407 -3.1845617538128344e-16 + outer loop + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -26.28914091006915 199.3932313652284 617.4 + vertex -26.28914091006915 199.3932313652284 597.4 + endloop +endfacet +facet normal -0.6989639196910225 0.715156933106407 -3.1845617538128344e-16 + outer loop + vertex -26.28914091006915 199.3932313652284 617.4 + vertex -27.44161754666337 198.26684979780484 597.4 + vertex -27.44161754666337 198.26684979780484 617.4 + endloop +endfacet +facet normal 0.25881904510252435 0.9659258262890675 -1.6824959769008377e-16 + outer loop + vertex -22.22275951975374 152.71632252752264 597.4 + vertex -21.53658740175749 152.5324632626368 617.4 + vertex -21.53658740175749 152.53246326263678 597.4 + endloop +endfacet +facet normal 0.25881904510252435 0.9659258262890675 -1.6824959769008377e-16 + outer loop + vertex -21.53658740175749 152.5324632626368 617.4 + vertex -22.22275951975374 152.71632252752264 597.4 + vertex -22.22275951975374 152.71632252752264 617.4 + endloop +endfacet +facet normal -0.6039459209966601 0.7970252972845316 -3.1680613295388643e-16 + outer loop + vertex -23.847984815414293 201.49655346124206 597.4 + vertex -22.563577168123395 202.4698133591664 617.4 + vertex -22.563577168123395 202.4698133591664 597.4 + endloop +endfacet +facet normal -0.6039459209966601 0.7970252972845316 -3.1680613295388643e-16 + outer loop + vertex -22.563577168123395 202.4698133591664 617.4 + vertex -23.847984815414293 201.49655346124206 597.4 + vertex -23.847984815414293 201.49655346124206 617.4 + endloop +endfacet +facet normal -0.49942734013696766 0.8663557767590135 -3.101724610458227e-16 + outer loop + vertex -19.87833674866336 204.25101823445394 597.4 + vertex -18.48220291359554 205.05584625826145 617.4 + vertex -18.48220291359554 205.05584625826145 597.4 + endloop +endfacet +facet normal -0.49942734013696766 0.8663557767590135 -3.101724610458227e-16 + outer loop + vertex -18.48220291359554 205.05584625826145 617.4 + vertex -19.87833674866336 204.25101823445394 597.4 + vertex -19.87833674866336 204.25101823445394 617.4 + endloop +endfacet +facet normal -0.020915980694883277 0.9997812369471492 -2.3702161526486035e-16 + outer loop + vertex -1.5560800549907094 209.7754327154008 597.4 + vertex 0.05506914030825163 209.80913885452415 617.4 + vertex 0.05506914030825163 209.80913885452415 597.4 + endloop +endfacet +facet normal -0.020915980694883277 0.9997812369471492 -2.3702161526486035e-16 + outer loop + vertex 0.05506914030825163 209.80913885452415 617.4 + vertex -1.5560800549907094 209.7754327154008 597.4 + vertex -1.5560800549907094 209.7754327154008 617.4 + endloop +endfacet +facet normal 0.9659258262890671 -0.25881904510252585 2.704681784798781e-16 + outer loop + vertex -24.658474920013315 157.93973105977102 617.4 + vertex -24.84233418489917 157.25355894177474 597.4 + vertex -24.658474920013315 157.939731059771 597.4 + endloop +endfacet +facet normal 0.9659258262890671 -0.25881904510252585 2.704681784798781e-16 + outer loop + vertex -24.84233418489917 157.25355894177474 597.4 + vertex -24.658474920013315 157.93973105977102 617.4 + vertex -24.84233418489917 157.25355894177474 617.4 + endloop +endfacet +facet normal -0.3086397100005016 0.9511790206952665 -2.8835986090356206e-16 + outer loop + vertex -12.598537700537447 207.67169493382545 597.4 + vertex -11.065711060923867 208.16906836115942 617.4 + vertex -11.065711060923867 208.16906836115942 597.4 + endloop +endfacet +facet normal -0.3086397100005016 0.9511790206952665 -2.8835986090356206e-16 + outer loop + vertex -11.065711060923867 208.16906836115942 617.4 + vertex -12.598537700537447 207.67169493382545 597.4 + vertex -12.598537700537447 207.67169493382545 617.4 + endloop +endfacet +facet normal 1.4948637227165144e-16 1.0 -2.3251894735637833e-16 + outer loop + vertex -20.828912953759342 152.47054977096997 597.4 + vertex 20.88398209406786 152.47054977096997 617.4 + vertex 20.88398209406786 152.47054977096997 597.4 + endloop +endfacet +facet normal 1.4948637227165144e-16 1.0 -2.3251894735637833e-16 + outer loop + vertex 20.88398209406786 152.47054977096997 617.4 + vertex -20.828912953759342 152.47054977096997 597.4 + vertex -20.828912953759342 152.47054977096997 617.4 + endloop +endfacet +facet normal -0.9659258262890664 0.2588190451025278 -2.7046817847987846e-16 + outer loop + vertex 24.768613200629805 155.15203792778217 617.4 + vertex 24.952472465515662 155.83821004577842 597.4 + vertex 24.768613200629805 155.15203792778217 597.4 + endloop +endfacet +facet normal -0.9659258262890664 0.2588190451025278 -2.7046817847987846e-16 + outer loop + vertex 24.952472465515662 155.83821004577842 597.4 + vertex 24.768613200629805 155.15203792778217 617.4 + vertex 24.952472465515662 155.83821004577845 617.4 + endloop +endfacet +facet normal -0.3846106969126948 0.9230788762724078 -2.983653844698674e-16 + outer loop + vertex 22.332897800370226 152.7163225275226 597.4 + vertex 22.373300682659444 152.73315682100932 617.4 + vertex 22.373300682659444 152.73315682100932 597.4 + endloop +endfacet +facet normal -0.3846106969126948 0.9230788762724078 -2.983653844698674e-16 + outer loop + vertex 22.373300682659444 152.73315682100932 617.4 + vertex 22.332897800370226 152.7163225275226 597.4 + vertex 22.332897800370226 152.7163225275226 617.4 + endloop +endfacet +facet normal -0.09394352563205821 0.9955775278660216 -2.519427078479905e-16 + outer loop + vertex 20.939051234375828 152.47054977096997 597.4 + vertex 21.640128958283878 152.53670404954954 617.4 + vertex 21.640128958283878 152.53670404954954 597.4 + endloop +endfacet +facet normal -0.09394352563205821 0.9955775278660216 -2.519427078479905e-16 + outer loop + vertex 21.640128958283878 152.53670404954954 617.4 + vertex 20.939051234375828 152.47054977096997 597.4 + vertex 20.939051234375828 152.47054977096997 617.4 + endloop +endfacet +facet normal -0.425088184824243 0.9051519403519114 -3.0300922412569886e-16 + outer loop + vertex 22.373300682659444 152.73315682100932 597.4 + vertex 22.976718595779143 153.0165410949012 617.4 + vertex 22.976718595779143 153.0165410949012 597.4 + endloop +endfacet +facet normal -0.425088184824243 0.9051519403519114 -3.0300922412569886e-16 + outer loop + vertex 22.976718595779143 153.0165410949012 617.4 + vertex 22.373300682659444 152.73315682100932 597.4 + vertex 22.373300682659444 152.73315682100932 617.4 + endloop +endfacet +facet normal -0.596902427405206 0.8023138364491621 -3.1650240770775005e-16 + outer loop + vertex 23.06122021535224 153.05393896729834 597.4 + vertex 23.55862589952126 153.42399697552077 617.4 + vertex 23.55862589952126 153.42399697552074 597.4 + endloop +endfacet +facet normal -0.596902427405206 0.8023138364491621 -3.1650240770775005e-16 + outer loop + vertex 23.55862589952126 153.42399697552077 617.4 + vertex 23.06122021535224 153.05393896729834 597.4 + vertex 23.06122021535224 153.05393896729836 617.4 + endloop +endfacet +facet normal 0.9063077870366554 0.4226182617406877 9.904188843509435e-17 + outer loop + vertex -24.658474920013315 155.1520379277822 617.4 + vertex -24.358256352634704 154.5082171323733 597.4 + vertex -24.658474920013315 155.1520379277822 597.4 + endloop +endfacet +facet normal 0.9063077870366554 0.4226182617406877 9.904188843509435e-17 + outer loop + vertex -24.358256352634704 154.5082171323733 597.4 + vertex -24.658474920013315 155.1520379277822 617.4 + vertex -24.358256352634704 154.5082171323733 617.4 + endloop +endfacet +facet normal -0.9063077870366554 -0.4226182617406877 -9.904188843509435e-17 + outer loop + vertex 24.768613200629805 157.93973105977096 617.4 + vertex 24.468394633251194 158.5835518551799 597.4 + vertex 24.768613200629805 157.93973105977096 597.4 + endloop +endfacet +facet normal -0.9063077870366554 -0.4226182617406877 -9.904188843509435e-17 + outer loop + vertex 24.468394633251194 158.5835518551799 597.4 + vertex 24.768613200629805 157.93973105977096 617.4 + vertex 24.468394633251194 158.5835518551799 617.4 + endloop +endfacet +facet normal -0.40470653839706777 0.9144466183319083 -3.007332061776945e-16 + outer loop + vertex 22.976718595779143 153.0165410949012 597.4 + vertex 23.06122021535224 153.05393896729836 617.4 + vertex 23.06122021535224 153.05393896729834 597.4 + endloop +endfacet +facet normal -0.40470653839706777 0.9144466183319083 -3.007332061776945e-16 + outer loop + vertex 23.06122021535224 153.05393896729836 617.4 + vertex 22.976718595779143 153.0165410949012 597.4 + vertex 22.976718595779143 153.0165410949012 617.4 + endloop +endfacet +facet normal -0.25097753115913946 0.9679929126048719 -2.7971600712696426e-16 + outer loop + vertex 21.640128958283878 152.53670404954954 597.4 + vertex 22.332897800370226 152.7163225275226 617.4 + vertex 22.332897800370226 152.7163225275226 597.4 + endloop +endfacet +facet normal -0.25097753115913946 0.9679929126048719 -2.7971600712696426e-16 + outer loop + vertex 22.332897800370226 152.7163225275226 617.4 + vertex 21.640128958283878 152.53670404954954 597.4 + vertex 21.640128958283878 152.53670404954954 617.4 + endloop +endfacet +facet normal -0.9659258262890669 -0.2588190451025263 -1.5010751463383332e-16 + outer loop + vertex 24.952472465515662 157.2535589417747 617.4 + vertex 24.768613200629805 157.93973105977096 597.4 + vertex 24.952472465515662 157.2535589417747 597.4 + endloop +endfacet +facet normal -0.9659258262890669 -0.2588190451025263 -1.5010751463383332e-16 + outer loop + vertex 24.768613200629805 157.93973105977096 597.4 + vertex 24.952472465515662 157.2535589417747 617.4 + vertex 24.768613200629805 157.93973105977096 617.4 + endloop +endfacet +facet normal 2.0538609066161242e-13 1.0 -2.325189473563336e-16 + outer loop + vertex 20.88398209406786 152.47054977096997 597.4 + vertex 20.939051234375828 152.47054977096997 617.4 + vertex 20.939051234375828 152.47054977096997 597.4 + endloop +endfacet +facet normal 2.0538609066161242e-13 1.0 -2.325189473563336e-16 + outer loop + vertex 20.939051234375828 152.47054977096997 617.4 + vertex 20.88398209406786 152.47054977096997 597.4 + vertex 20.88398209406786 152.47054977096997 617.4 + endloop +endfacet +facet normal 0.996194698091746 -0.08715574274765303 2.3714292307799425e-16 + outer loop + vertex -24.84233418489917 157.25355894177474 617.4 + vertex -24.90424767656597 156.5458844937766 597.4 + vertex -24.84233418489917 157.25355894177474 597.4 + endloop +endfacet +facet normal 0.996194698091746 -0.08715574274765303 2.3714292307799425e-16 + outer loop + vertex -24.90424767656597 156.5458844937766 597.4 + vertex -24.84233418489917 157.25355894177474 617.4 + vertex -24.90424767656597 156.5458844937766 617.4 + endloop +endfacet +facet normal 0.8191520442889927 0.5735764363510447 4.4966924573860044e-17 + outer loop + vertex -24.358256352634704 154.5082171323733 617.4 + vertex -23.95080047201519 153.92630982863116 597.4 + vertex -24.358256352634704 154.5082171323733 597.4 + endloop +endfacet +facet normal 0.8191520442889927 0.5735764363510447 4.4966924573860044e-17 + outer loop + vertex -23.95080047201519 153.92630982863116 597.4 + vertex -24.358256352634704 154.5082171323733 617.4 + vertex -23.95080047201519 153.9263098286312 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -8.194930859691734 197.22612362681014 617.4 + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -8.194930859691734 191.96896450555067 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -10.194930859691729 184.3761236268101 617.4 + vertex -12.694930859691725 186.78502419417046 617.4 + vertex -13.88771885901298 184.7190547766876 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691725 186.78502419417046 617.4 + vertex -10.194930859691729 184.3761236268101 617.4 + vertex -10.194930859691729 191.96896450555067 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691725 186.78502419417046 617.4 + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -12.694930859691715 204.43638645629056 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691715 204.43638645629056 617.4 + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -10.194930859691729 197.22612362681014 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -10.194930859691729 197.22612362681014 617.4 + vertex -10.194930859691729 191.96896450555067 617.4 + vertex -8.194930859691734 197.22612362681014 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691715 204.43638645629056 617.4 + vertex -10.194930859691729 197.22612362681014 617.4 + vertex -10.194930859691718 204.8761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -41.8783177822545 132.23791530735065 617.4 + vertex -39.568916705496 132.23791530735065 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -41.8783177822545 132.23791530735065 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -42.436689296971025 132.30606365477252 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -42.436689296971025 132.30606365477252 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -42.87831778225449 132.50586449978178 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -42.87831778225449 132.50586449978178 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -43.173106986658425 132.82370174497757 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.173106986658425 132.82370174497757 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -43.30096751306486 133.23791530735065 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.30096751306486 133.23791530735065 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -43.253185877898744 133.72027721714562 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.253185877898744 133.72027721714562 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -43.03301832063373 134.23791530735068 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.03301832063373 134.23791530735068 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -15.387718859012988 182.1209785653343 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -24.658474920013315 157.93973105977102 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.658474920013315 157.93973105977102 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -24.84233418489917 157.25355894177474 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.84233418489917 157.25355894177474 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -24.90424767656597 156.5458844937766 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.90424767656597 156.5458844937766 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -24.84233418489917 155.83821004577848 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.84233418489917 155.83821004577848 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -24.658474920013315 155.1520379277822 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.658474920013315 155.1520379277822 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -24.358256352634704 154.5082171323733 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.358256352634704 154.5082171323733 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -23.95080047201519 153.9263098286312 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.95080047201519 153.9263098286312 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -23.448487618904775 153.42399697552077 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.448487618904775 153.42399697552077 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -22.866580315162654 153.01654109490127 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.866580315162654 153.01654109490127 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -22.22275951975374 152.71632252752264 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.22275951975374 152.71632252752264 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -21.53658740175749 152.5324632626368 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -21.53658740175749 152.5324632626368 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -20.828912953759342 152.47054977096997 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -24.658474920013315 157.93973105977102 617.4 + vertex -24.358256352634704 158.58355185517993 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -24.358256352634704 158.58355185517993 617.4 + vertex -11.660839120111838 180.57612362681013 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -11.660839120111838 180.57612362681013 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 10.305069140308255 184.3761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.305069140308255 184.3761236268101 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 13.997857139629506 184.71905477668759 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.997857139629506 184.71905477668759 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 29.952220022669408 190.4662088668219 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.997857139629506 184.71905477668759 617.4 + vertex 29.952220022669408 190.4662088668219 617.4 + vertex 28.325364688606378 192.79613663226206 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 29.952220022669408 190.4662088668219 617.4 + vertex 32.55506914030826 191.96896450555064 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 32.55506914030826 191.96896450555064 617.4 + vertex 31.66161008284822 193.31010907119958 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 28.325364688606378 192.79613663226206 617.4 + vertex 31.66161008284822 193.31010907119958 617.4 + vertex 27.40101177575885 193.95965933221288 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 27.40101177575885 193.95965933221288 617.4 + vertex 31.66161008284822 193.31010907119958 617.4 + vertex 30.712842328706454 194.61271322520335 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 27.40101177575885 193.95965933221288 617.4 + vertex 30.712842328706454 194.61271322520335 617.4 + vertex 26.428805842568213 195.08350496407672 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 26.428805842568213 195.08350496407672 617.4 + vertex 30.712842328706454 194.61271322520335 617.4 + vertex 29.71042613890401 195.8744975236272 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 26.428805842568213 195.08350496407672 617.4 + vertex 29.71042613890401 195.8744975236272 617.4 + vertex 25.410448164829532 196.16570689577944 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 25.410448164829532 196.16570689577944 617.4 + vertex 29.71042613890401 195.8744975236272 617.4 + vertex 28.65611565455649 197.09325395373207 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 25.410448164829532 196.16570689577944 617.4 + vertex 28.65611565455649 197.09325395373207 617.4 + vertex 24.347720779875264 197.20437136809898 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.347720779875264 197.20437136809898 617.4 + vertex 28.65611565455649 197.09325395373207 617.4 + vertex 27.551755827279884 198.26684979780475 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.347720779875264 197.20437136809898 617.4 + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 23.24248336816515 198.1976808085791 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 23.24248336816515 198.1976808085791 617.4 + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 22.09666999900712 199.14389701212306 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 22.09666999900712 199.14389701212306 617.4 + vertex 27.551755827279884 198.26684979780475 617.4 + vertex 26.399279190685665 199.3932313652283 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 22.09666999900712 199.14389701212306 617.4 + vertex 26.399279190685665 199.3932313652283 617.4 + vertex 20.912285746104196 200.04136418270153 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 20.912285746104196 200.04136418270153 617.4 + vertex 26.399279190685665 199.3932313652283 617.4 + vertex 25.200702478615163 200.47042758626208 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 20.912285746104196 200.04136418270153 617.4 + vertex 25.200702478615163 200.47042758626208 617.4 + vertex 19.691403178850077 200.8885118308512 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 19.691403178850077 200.8885118308512 617.4 + vertex 25.200702478615163 200.47042758626208 617.4 + vertex 23.958123096030832 201.49655346124203 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 19.691403178850077 200.8885118308512 617.4 + vertex 23.958123096030832 201.49655346124203 617.4 + vertex 18.436158735513036 201.68385752189502 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 18.436158735513036 201.68385752189502 617.4 + vertex 23.958123096030832 201.49655346124203 617.4 + vertex 22.67371544873991 202.46981335916635 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 18.436158735513036 201.68385752189502 617.4 + vertex 22.67371544873991 202.46981335916635 617.4 + vertex 17.148748984654713 202.4260094700737 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 17.148748984654713 202.4260094700737 617.4 + vertex 22.67371544873991 202.46981335916635 617.4 + vertex 15.831426781326385 203.11366897404986 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 15.831426781326385 203.11366897404986 617.4 + vertex 22.67371544873991 202.46981335916635 617.4 + vertex 21.349727138373666 203.38850415989344 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 15.831426781326385 203.11366897404986 617.4 + vertex 21.349727138373666 203.38850415989344 617.4 + vertex 14.486497324768576 203.74563268952215 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 14.486497324768576 203.74563268952215 617.4 + vertex 21.349727138373666 203.38850415989344 617.4 + vertex 19.988475029279908 204.25101823445388 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 14.486497324768576 203.74563268952215 617.4 + vertex 19.988475029279908 204.25101823445388 617.4 + vertex 13.116314124512934 204.32079473497345 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.116314124512934 204.32079473497345 617.4 + vertex 19.988475029279908 204.25101823445388 617.4 + vertex 18.592341194212068 205.0558462582614 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.116314124512934 204.32079473497345 617.4 + vertex 18.592341194212068 205.0558462582614 617.4 + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 18.592341194212068 205.0558462582614 617.4 + vertex 10.305069140308266 204.8761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.305069140308266 204.8761236268101 617.4 + vertex 18.592341194212068 205.0558462582614 617.4 + vertex -10.194930859691718 204.8761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -29.842081742052876 190.46620886682194 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -15.387718859012988 182.1209785653343 617.4 + vertex -10.194930859691729 184.3761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -10.194930859691729 184.3761236268101 617.4 + vertex -15.387718859012988 182.1209785653343 617.4 + vertex 10.305069140308255 184.3761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.842081742052876 190.46620886682194 617.4 + vertex -13.88771885901298 184.7190547766876 617.4 + vertex -28.21522640798993 192.79613663226206 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.842081742052876 190.46620886682194 617.4 + vertex -28.21522640798993 192.79613663226206 617.4 + vertex -32.444930859691745 191.96896450555073 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -32.444930859691745 191.96896450555073 617.4 + vertex -28.21522640798993 192.79613663226206 617.4 + vertex -31.55147180223168 193.31010907119963 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -31.55147180223168 193.31010907119963 617.4 + vertex -28.21522640798993 192.79613663226206 617.4 + vertex -27.290873495142403 193.95965933221288 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -31.55147180223168 193.31010907119963 617.4 + vertex -27.290873495142403 193.95965933221288 617.4 + vertex -30.60270404808994 194.6127132252034 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.60270404808994 194.6127132252034 617.4 + vertex -27.290873495142403 193.95965933221288 617.4 + vertex -26.318667561951766 195.08350496407672 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.60270404808994 194.6127132252034 617.4 + vertex -26.318667561951766 195.08350496407672 617.4 + vertex -29.600287858287494 195.87449752362727 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.600287858287494 195.87449752362727 617.4 + vertex -26.318667561951766 195.08350496407672 617.4 + vertex -25.300309884213064 196.16570689577946 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.600287858287494 195.87449752362727 617.4 + vertex -25.300309884213064 196.16570689577946 617.4 + vertex -28.545977373939976 197.09325395373216 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -28.545977373939976 197.09325395373216 617.4 + vertex -25.300309884213064 196.16570689577946 617.4 + vertex -24.237582499258796 197.20437136809898 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -28.545977373939976 197.09325395373216 617.4 + vertex -24.237582499258796 197.20437136809898 617.4 + vertex -27.44161754666337 198.26684979780484 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -27.44161754666337 198.26684979780484 617.4 + vertex -24.237582499258796 197.20437136809898 617.4 + vertex -23.132345087548707 198.1976808085791 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -27.44161754666337 198.26684979780484 617.4 + vertex -23.132345087548707 198.1976808085791 617.4 + vertex -21.986531718390673 199.1438970121231 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -27.44161754666337 198.26684979780484 617.4 + vertex -21.986531718390673 199.1438970121231 617.4 + vertex -26.28914091006915 199.3932313652284 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -26.28914091006915 199.3932313652284 617.4 + vertex -21.986531718390673 199.1438970121231 617.4 + vertex -20.80214746548775 200.04136418270153 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -26.28914091006915 199.3932313652284 617.4 + vertex -20.80214746548775 200.04136418270153 617.4 + vertex -25.09056419799865 200.4704275862621 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -25.09056419799865 200.4704275862621 617.4 + vertex -20.80214746548775 200.04136418270153 617.4 + vertex -19.58126489823363 200.88851183085123 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -25.09056419799865 200.4704275862621 617.4 + vertex -19.58126489823363 200.88851183085123 617.4 + vertex -23.847984815414293 201.49655346124206 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.847984815414293 201.49655346124206 617.4 + vertex -19.58126489823363 200.88851183085123 617.4 + vertex -18.326020454896568 201.68385752189502 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.847984815414293 201.49655346124206 617.4 + vertex -18.326020454896568 201.68385752189502 617.4 + vertex -22.563577168123395 202.4698133591664 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.563577168123395 202.4698133591664 617.4 + vertex -18.326020454896568 201.68385752189502 617.4 + vertex -17.038610704038266 202.42600947007372 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.563577168123395 202.4698133591664 617.4 + vertex -17.038610704038266 202.42600947007372 617.4 + vertex -15.721288500709916 203.11366897404986 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.563577168123395 202.4698133591664 617.4 + vertex -15.721288500709916 203.11366897404986 617.4 + vertex -21.23958885775712 203.3885041598935 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -21.23958885775712 203.3885041598935 617.4 + vertex -15.721288500709916 203.11366897404986 617.4 + vertex -14.376359044152096 203.7456326895222 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -21.23958885775712 203.3885041598935 617.4 + vertex -14.376359044152096 203.7456326895222 617.4 + vertex -19.87833674866336 204.25101823445394 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -19.87833674866336 204.25101823445394 617.4 + vertex -14.376359044152096 203.7456326895222 617.4 + vertex -13.00617584389643 204.32079473497348 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -19.87833674866336 204.25101823445394 617.4 + vertex -13.00617584389643 204.32079473497348 617.4 + vertex -18.48220291359554 205.05584625826145 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.05584625826145 617.4 + vertex -13.00617584389643 204.32079473497348 617.4 + vertex -12.694930859691715 204.43638645629056 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.05584625826145 617.4 + vertex -12.694930859691715 204.43638645629056 617.4 + vertex -10.194930859691718 204.8761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.05584625826145 617.4 + vertex -10.194930859691718 204.8761236268101 617.4 + vertex 18.592341194212068 205.0558462582614 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.05584625826145 617.4 + vertex 18.592341194212068 205.0558462582614 617.4 + vertex 17.163768745909092 205.80157985229934 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.05584625826145 617.4 + vertex 17.163768745909092 205.80157985229934 617.4 + vertex -17.053630465292567 205.80157985229934 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -17.053630465292567 205.80157985229934 617.4 + vertex 17.163768745909092 205.80157985229934 617.4 + vertex 15.705257561860751 206.48691404766168 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -17.053630465292567 205.80157985229934 617.4 + vertex 15.705257561860751 206.48691404766168 617.4 + vertex -15.595119281244203 206.4869140476617 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.595119281244203 206.4869140476617 617.4 + vertex 15.705257561860751 206.48691404766168 617.4 + vertex 14.219359909739431 207.1106495691349 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.595119281244203 206.4869140476617 617.4 + vertex 14.219359909739431 207.1106495691349 617.4 + vertex -14.10922162912293 207.11064956913492 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -14.10922162912293 207.11064956913492 617.4 + vertex 14.219359909739431 207.1106495691349 617.4 + vertex 12.708675981153974 207.6716949338254 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -14.10922162912293 207.11064956913492 617.4 + vertex 12.708675981153974 207.6716949338254 617.4 + vertex -12.598537700537447 207.67169493382545 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.598537700537447 207.67169493382545 617.4 + vertex 12.708675981153974 207.6716949338254 617.4 + vertex 11.17584934154037 208.1690683611594 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.598537700537447 207.67169493382545 617.4 + vertex 11.17584934154037 208.1690683611594 617.4 + vertex -11.065711060923867 208.16906836115942 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -11.065711060923867 208.16906836115942 617.4 + vertex 11.17584934154037 208.1690683611594 617.4 + vertex 9.623562304152413 208.60189949091367 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -11.065711060923867 208.16906836115942 617.4 + vertex 9.623562304152413 208.60189949091367 617.4 + vertex -9.513424023535883 208.60189949091367 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -9.513424023535883 208.60189949091367 617.4 + vertex 9.623562304152413 208.60189949091367 617.4 + vertex 8.05453123624676 208.96943090627016 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -9.513424023535883 208.60189949091367 617.4 + vertex 8.05453123624676 208.96943090627016 617.4 + vertex -7.944392955630252 208.96943090627016 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -7.944392955630252 208.96943090627016 617.4 + vertex 8.05453123624676 208.96943090627016 617.4 + vertex 6.471501805676724 209.27101945922956 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -7.944392955630252 208.96943090627016 617.4 + vertex 6.471501805676724 209.27101945922956 617.4 + vertex -6.361363525060216 209.27101945922956 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -6.361363525060216 209.27101945922956 617.4 + vertex 6.471501805676724 209.27101945922956 617.4 + vertex 4.877244176212259 209.5061373960643 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -6.361363525060216 209.27101945922956 617.4 + vertex 4.877244176212259 209.5061373960643 617.4 + vertex -4.767105895595756 209.5061373960643 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -4.767105895595756 209.5061373960643 617.4 + vertex 4.877244176212259 209.5061373960643 617.4 + vertex 3.274548159994501 209.67437328084162 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -4.767105895595756 209.5061373960643 617.4 + vertex 3.274548159994501 209.67437328084162 617.4 + vertex -3.1644098793779976 209.67437328084162 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -3.1644098793779976 209.67437328084162 617.4 + vertex 3.274548159994501 209.67437328084162 617.4 + vertex -1.5560800549907094 209.7754327154008 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -1.5560800549907094 209.7754327154008 617.4 + vertex 3.274548159994501 209.67437328084162 617.4 + vertex 1.6662183356072127 209.7754327154008 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -1.5560800549907094 209.7754327154008 617.4 + vertex 1.6662183356072127 209.7754327154008 617.4 + vertex 0.05506914030825163 209.80913885452415 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.305069140308255 184.3761236268101 617.4 + vertex 12.80506914030825 186.78502419417043 617.4 + vertex 10.30506914030826 191.96896450555064 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 12.80506914030825 186.78502419417043 617.4 + vertex 10.305069140308255 184.3761236268101 617.4 + vertex 13.997857139629506 184.71905477668759 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 191.96896450555064 617.4 + vertex 12.80506914030825 186.78502419417043 617.4 + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 191.96896450555064 617.4 + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 10.30506914030826 197.2261236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 191.96896450555064 617.4 + vertex 10.30506914030826 197.2261236268101 617.4 + vertex 8.305069140308264 191.96896450555064 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 197.2261236268101 617.4 + vertex 12.805069140308262 204.4363864562905 617.3999999999999 + vertex 10.305069140308266 204.8761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 8.305069140308264 197.2261236268101 617.4 + vertex 8.305069140308264 191.96896450555064 617.4 + vertex 10.30506914030826 197.2261236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 42.546827577587486 132.30606365477246 617.4 + vertex 39.679054986112455 132.2379153073506 617.4 + vertex 41.98845606287095 132.2379153073506 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 39.679054986112455 132.2379153073506 617.4 + vertex 42.546827577587486 132.30606365477246 617.4 + vertex 30.48034418964194 148.17054977096993 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 42.546827577587486 132.30606365477246 617.4 + vertex 42.98845606287095 132.5058644997817 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 42.98845606287095 132.5058644997817 617.4 + vertex 43.28324526727487 132.82370174497748 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 43.28324526727487 132.82370174497748 617.4 + vertex 43.41110579368132 133.2379153073506 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 43.41110579368132 133.2379153073506 617.4 + vertex 43.3633241585152 133.72027721714554 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 43.3633241585152 133.72027721714554 617.4 + vertex 43.143156601250205 134.2379153073506 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 24.768613200629805 157.93973105977096 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 24.768613200629805 157.93973105977096 617.4 + vertex 24.952472465515662 157.2535589417747 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 24.952472465515662 157.2535589417747 617.4 + vertex 25.014385957182462 156.54588449377658 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 25.014385957182462 156.54588449377658 617.4 + vertex 24.952472465515662 155.83821004577845 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 24.952472465515662 155.83821004577845 617.4 + vertex 24.768613200629805 155.15203792778217 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 24.768613200629805 155.15203792778217 617.4 + vertex 24.468394633251194 154.50821713237326 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 24.468394633251194 154.50821713237326 617.4 + vertex 24.060938752631678 153.92630982863116 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 24.060938752631678 153.92630982863116 617.4 + vertex 23.55862589952126 153.42399697552077 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 23.55862589952126 153.42399697552077 617.4 + vertex 23.06122021535224 153.05393896729836 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 23.06122021535224 153.05393896729836 617.4 + vertex 22.373300682659444 152.73315682100932 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 22.373300682659444 152.73315682100932 617.4 + vertex 22.332897800370226 152.7163225275226 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 22.332897800370226 152.7163225275226 617.4 + vertex 21.640128958283878 152.53670404954954 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 21.640128958283878 152.53670404954954 617.4 + vertex 20.939051234375828 152.47054977096997 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.17054977096993 617.4 + vertex 20.939051234375828 152.47054977096997 617.4 + vertex -30.37020590902545 148.17054977096998 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.37020590902545 148.17054977096998 617.4 + vertex 20.939051234375828 152.47054977096997 617.4 + vertex -20.828912953759342 152.47054977096997 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 22.373300682659444 152.73315682100932 617.4 + vertex 23.06122021535224 153.05393896729836 617.4 + vertex 22.976718595779143 153.0165410949012 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.768613200629805 157.93973105977096 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 24.468394633251194 158.5835518551799 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.468394633251194 158.5835518551799 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex 11.770977400728352 180.5761236268101 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 11.770977400728352 180.5761236268101 617.4 + vertex 15.497857139629502 182.12097856533427 617.4 + vertex -11.660839120111838 180.57612362681013 617.4 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 20.88398209406786 152.47054977096997 617.4 + vertex -20.828912953759342 152.47054977096997 617.4 + vertex 20.939051234375828 152.47054977096997 617.4 + endloop +endfacet +facet normal 0.9659258262890669 0.2588190451025263 1.5010751463383332e-16 + outer loop + vertex -24.84233418489917 155.83821004577848 617.4 + vertex -24.658474920013315 155.1520379277822 597.4 + vertex -24.84233418489917 155.83821004577848 597.4 + endloop +endfacet +facet normal 0.9659258262890669 0.2588190451025263 1.5010751463383332e-16 + outer loop + vertex -24.658474920013315 155.1520379277822 597.4 + vertex -24.84233418489917 155.83821004577848 617.4 + vertex -24.658474920013315 155.1520379277822 617.4 + endloop +endfacet +facet normal 0.9063077870366547 -0.42261826174068906 2.955753951421487e-16 + outer loop + vertex -24.358256352634704 158.58355185517993 617.4 + vertex -24.658474920013315 157.939731059771 597.4 + vertex -24.358256352634704 158.5835518551799 597.4 + endloop +endfacet +facet normal 0.9063077870366547 -0.42261826174068906 2.955753951421487e-16 + outer loop + vertex -24.658474920013315 157.939731059771 597.4 + vertex -24.358256352634704 158.58355185517993 617.4 + vertex -24.658474920013315 157.93973105977102 617.4 + endloop +endfacet +facet normal -0.996194698091746 0.08715574274765303 -2.3714292307799425e-16 + outer loop + vertex 24.952472465515662 155.83821004577845 617.4 + vertex 25.014385957182462 156.54588449377658 597.4 + vertex 24.952472465515662 155.83821004577842 597.4 + endloop +endfacet +facet normal -0.996194698091746 0.08715574274765303 -2.3714292307799425e-16 + outer loop + vertex 25.014385957182462 156.54588449377658 597.4 + vertex 24.952472465515662 155.83821004577845 617.4 + vertex 25.014385957182462 156.54588449377658 617.4 + endloop +endfacet +facet normal -0.8660254037844394 -0.4999999999999988 -7.227945163972768e-17 + outer loop + vertex 24.468394633251194 158.5835518551799 617.4 + vertex 11.770977400728352 180.5761236268101 597.4 + vertex 24.468394633251194 158.5835518551799 597.4 + endloop +endfacet +facet normal -0.8660254037844394 -0.4999999999999988 -7.227945163972768e-17 + outer loop + vertex 11.770977400728352 180.5761236268101 597.4 + vertex 24.468394633251194 158.5835518551799 617.4 + vertex 11.770977400728352 180.5761236268101 617.4 + endloop +endfacet +facet normal -0.8191520442889946 0.5735764363510423 -3.1170170299139527e-16 + outer loop + vertex 24.060938752631678 153.92630982863116 617.4 + vertex 24.468394633251194 154.50821713237326 597.4 + vertex 24.060938752631678 153.92630982863116 597.4 + endloop +endfacet +facet normal -0.8191520442889946 0.5735764363510423 -3.1170170299139527e-16 + outer loop + vertex 24.468394633251194 154.50821713237326 597.4 + vertex 24.060938752631678 153.92630982863116 617.4 + vertex 24.468394633251194 154.50821713237326 617.4 + endloop +endfacet +facet normal -0.7071067811865392 0.707106781186556 -3.1835711232391977e-16 + outer loop + vertex 23.55862589952126 153.42399697552074 597.4 + vertex 24.060938752631678 153.92630982863116 617.4 + vertex 24.060938752631678 153.92630982863116 597.4 + endloop +endfacet +facet normal -0.7071067811865392 0.707106781186556 -3.1835711232391977e-16 + outer loop + vertex 24.060938752631678 153.92630982863116 617.4 + vertex 23.55862589952126 153.42399697552074 597.4 + vertex 23.55862589952126 153.42399697552077 617.4 + endloop +endfacet +facet normal 0.9961946980917462 0.08715574274765149 1.9661219995849948e-16 + outer loop + vertex -24.90424767656597 156.5458844937766 617.4 + vertex -24.84233418489917 155.83821004577848 597.4 + vertex -24.90424767656597 156.5458844937766 597.4 + endloop +endfacet +facet normal 0.9961946980917462 0.08715574274765149 1.9661219995849948e-16 + outer loop + vertex -24.84233418489917 155.83821004577848 597.4 + vertex -24.90424767656597 156.5458844937766 617.4 + vertex -24.84233418489917 155.83821004577848 617.4 + endloop +endfacet +facet normal 0.8660254037844387 -0.5 3.0479839899610556e-16 + outer loop + vertex -11.660839120111838 180.57612362681013 617.4 + vertex -24.358256352634704 158.5835518551799 597.4 + vertex -11.660839120111838 180.57612362681013 597.4 + endloop +endfacet +facet normal 0.8660254037844387 -0.5 3.0479839899610556e-16 + outer loop + vertex -24.358256352634704 158.5835518551799 597.4 + vertex -11.660839120111838 180.57612362681013 617.4 + vertex -24.358256352634704 158.58355185517993 617.4 + endloop +endfacet +facet normal -0.9063077870366547 0.42261826174068906 -2.955753951421487e-16 + outer loop + vertex 24.468394633251194 154.50821713237326 617.4 + vertex 24.768613200629805 155.15203792778217 597.4 + vertex 24.468394633251194 154.50821713237326 597.4 + endloop +endfacet +facet normal -0.9063077870366547 0.42261826174068906 -2.955753951421487e-16 + outer loop + vertex 24.768613200629805 155.15203792778217 597.4 + vertex 24.468394633251194 154.50821713237326 617.4 + vertex 24.768613200629805 155.15203792778217 617.4 + endloop +endfacet +facet normal -5.551115123125782e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex -11.660839120111838 180.57612362681013 617.4 + vertex 11.770977400728352 180.5761236268101 597.4 + vertex 11.770977400728352 180.5761236268101 617.4 + endloop +endfacet +facet normal -5.551115123125782e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 11.770977400728352 180.5761236268101 597.4 + vertex -11.660839120111838 180.57612362681013 617.4 + vertex -11.660839120111838 180.57612362681013 597.4 + endloop +endfacet +facet normal -0.9961946980917462 -0.08715574274765149 -1.9661219995849948e-16 + outer loop + vertex 25.014385957182462 156.54588449377658 617.4 + vertex 24.952472465515662 157.2535589417747 597.4 + vertex 25.014385957182462 156.54588449377658 597.4 + endloop +endfacet +facet normal -0.9961946980917462 -0.08715574274765149 -1.9661219995849948e-16 + outer loop + vertex 24.952472465515662 157.2535589417747 597.4 + vertex 25.014385957182462 156.54588449377658 617.4 + vertex 24.952472465515662 157.2535589417747 617.4 + endloop +endfacet +facet normal -0.9555126440105991 -0.29495014347491727 -1.3943933742722958e-16 + outer loop + vertex -43.173106986658425 132.82370174497757 617.4 + vertex -43.30096751306486 133.23791530735065 597.4 + vertex -43.173106986658425 132.82370174497754 597.4 + endloop +endfacet +facet normal -0.9555126440105991 -0.29495014347491727 -1.3943933742722958e-16 + outer loop + vertex -43.30096751306486 133.23791530735065 597.4 + vertex -43.173106986658425 132.82370174497757 617.4 + vertex -43.30096751306486 133.23791530735065 617.4 + endloop +endfacet +facet normal 0.9555126440105912 -0.29495014347494236 2.7660233119403473e-16 + outer loop + vertex 43.41110579368132 133.2379153073506 617.4 + vertex 43.28324526727487 132.82370174497748 597.4 + vertex 43.41110579368132 133.23791530735056 597.4 + endloop +endfacet +facet normal 0.9555126440105912 -0.29495014347494236 2.7660233119403473e-16 + outer loop + vertex 43.28324526727487 132.82370174497748 597.4 + vertex 43.41110579368132 133.2379153073506 617.4 + vertex 43.28324526727487 132.82370174497748 617.4 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex -30.37020590902545 148.17054977096998 617.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 30.48034418964194 148.17054977096993 617.4 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 2.3251894735637823e-16 + outer loop + vertex 30.48034418964194 148.17054977096993 597.4 + vertex -30.37020590902545 148.17054977096998 617.4 + vertex -30.37020590902545 148.17054977096998 597.4 + endloop +endfacet +facet normal -0.4121961787131759 -0.9110951159205364 1.2210929660187255e-16 + outer loop + vertex -42.87831778225449 132.50586449978178 617.4 + vertex -42.436689296971025 132.30606365477252 597.4 + vertex -42.436689296971025 132.30606365477252 617.4 + endloop +endfacet +facet normal -0.4121961787131759 -0.9110951159205364 1.2210929660187255e-16 + outer loop + vertex -42.436689296971025 132.30606365477252 597.4 + vertex -42.87831778225449 132.50586449978178 617.4 + vertex -42.87831778225449 132.50586449978178 597.4 + endloop +endfacet +facet normal 0.7331906391044669 -0.6800231516129311 3.1773826761945206e-16 + outer loop + vertex 43.28324526727487 132.82370174497748 617.4 + vertex 42.98845606287095 132.5058644997817 597.4 + vertex 43.28324526727487 132.82370174497748 597.4 + endloop +endfacet +facet normal 0.7331906391044669 -0.6800231516129311 3.1773826761945206e-16 + outer loop + vertex 42.98845606287095 132.5058644997817 597.4 + vertex 43.28324526727487 132.82370174497748 617.4 + vertex 42.98845606287095 132.5058644997817 617.4 + endloop +endfacet +facet normal 0.9951296050076998 0.09857519585179429 1.9372508358990627e-16 + outer loop + vertex 43.3633241585152 133.72027721714554 617.4 + vertex 43.41110579368132 133.23791530735056 597.4 + vertex 43.3633241585152 133.72027721714554 597.4 + endloop +endfacet +facet normal 0.9951296050076998 0.09857519585179429 1.9372508358990627e-16 + outer loop + vertex 43.41110579368132 133.23791530735056 597.4 + vertex 43.3633241585152 133.72027721714554 617.4 + vertex 43.41110579368132 133.2379153073506 617.4 + endloop +endfacet +facet normal 0.9202212155149998 0.39139866442809496 1.0933007317951932e-16 + outer loop + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 43.3633241585152 133.72027721714554 597.4 + vertex 43.143156601250205 134.23791530735056 597.4 + endloop +endfacet +facet normal 0.9202212155149998 0.39139866442809496 1.0933007317951932e-16 + outer loop + vertex 43.3633241585152 133.72027721714554 597.4 + vertex 43.143156601250205 134.2379153073506 617.4 + vertex 43.3633241585152 133.72027721714554 617.4 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 -7.227945163972772e-17 + outer loop + vertex 39.679054986112455 132.2379153073506 617.4 + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 39.679054986112455 132.2379153073506 597.4 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 -7.227945163972772e-17 + outer loop + vertex 30.48034418964194 148.17054977096993 597.4 + vertex 39.679054986112455 132.2379153073506 617.4 + vertex 30.48034418964194 148.17054977096993 617.4 + endloop +endfacet +facet normal -0.7331906391044548 -0.6800231516129441 -1.5017328374351536e-18 + outer loop + vertex -42.87831778225449 132.50586449978178 617.4 + vertex -43.173106986658425 132.82370174497754 597.4 + vertex -42.87831778225449 132.50586449978178 597.4 + endloop +endfacet +facet normal -0.7331906391044548 -0.6800231516129441 -1.5017328374351536e-18 + outer loop + vertex -43.173106986658425 132.82370174497754 597.4 + vertex -42.87831778225449 132.50586449978178 617.4 + vertex -43.173106986658425 132.82370174497757 617.4 + endloop +endfacet +facet normal 0.12114942135545746 -0.9926342819514334 2.571812341015746e-16 + outer loop + vertex 41.98845606287095 132.2379153073506 617.4 + vertex 42.546827577587486 132.30606365477246 597.4 + vertex 42.546827577587486 132.30606365477246 617.4 + endloop +endfacet +facet normal 0.12114942135545746 -0.9926342819514334 2.571812341015746e-16 + outer loop + vertex 42.546827577587486 132.30606365477246 597.4 + vertex 41.98845606287095 132.2379153073506 617.4 + vertex 41.98845606287095 132.2379153073506 597.4 + endloop +endfacet +facet normal -0.1211494213554586 -0.9926342819514334 2.044313225968287e-16 + outer loop + vertex -42.436689296971025 132.30606365477252 617.4 + vertex -41.8783177822545 132.23791530735065 597.4 + vertex -41.8783177822545 132.23791530735065 617.4 + endloop +endfacet +facet normal -0.1211494213554586 -0.9926342819514334 2.044313225968287e-16 + outer loop + vertex -41.8783177822545 132.23791530735065 597.4 + vertex -42.436689296971025 132.30606365477252 617.4 + vertex -42.436689296971025 132.30606365477252 597.4 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -177.047528410033 -70.98664256999795 597.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -180.49940999781742 -68.99369780607998 598.0545186779377 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -180.49940999781742 -68.99369780607998 598.0545186779377 + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + vertex -182.64727067122598 -67.75362986810585 597.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.49940999781742 -68.99369780607998 598.0545186779377 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -180.1652198636571 -69.186642569998 598.214359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.1652198636571 -69.186642569998 598.214359353945 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -179.87824428957134 -69.35232799494719 598.4686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.87824428957134 -69.35232799494719 598.4686291501016 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -179.65804018668462 -69.4794628930255 598.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668462 -69.4794628930255 598.8000000000002 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -179.5196141007041 -69.5593832310292 599.1858895278361 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.5196141007041 -69.5593832310292 599.1858895278361 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -178.9527842983588 -69.88664256999793 599.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.5196141007041 -69.5593832310292 599.1858895278361 + vertex -178.9527842983588 -69.88664256999793 599.2000000000002 + vertex -179.47239954062948 -69.58664256999793 599.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.47239954062948 -69.58664256999793 599.6000000000001 + vertex -178.9527842983588 -69.88664256999793 599.2000000000002 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.47239954062948 -69.58664256999793 599.6000000000001 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -179.51961410070408 -69.55938323102919 600.0141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.51961410070408 -69.55938323102919 600.0141104721642 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -179.65804018668462 -69.47946289302546 600.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668462 -69.47946289302546 600.4000000000002 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -179.87824428957128 -69.35232799494715 600.7313708498986 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.87824428957128 -69.35232799494715 600.7313708498986 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -180.165219863657 -69.18664256999789 600.9856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.165219863657 -69.18664256999789 600.9856406460553 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -180.49940999781734 -68.99369780607992 601.1454813220627 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.49940999781734 -68.99369780607992 601.1454813220627 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.08466953506382 -77.31605209254886 597.434074173711 + vertex -170.812145502785 -74.58664256999778 597.4000000000001 + vertex -166.30881340310586 -77.1866425699976 597.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.812145502785 -74.58664256999778 597.4000000000001 + vertex -166.08466953506382 -77.31605209254886 597.434074173711 + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -166.08466953506382 -77.31605209254886 597.434074173711 + vertex -165.87580070121362 -77.4366425699976 597.5339745962157 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -165.87580070121362 -77.4366425699976 597.5339745962157 + vertex -165.69644096740998 -77.54019596059086 597.6928932188135 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -165.69644096740998 -77.54019596059086 597.6928932188135 + vertex -165.5588134031058 -77.61965527188984 597.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -165.5588134031058 -77.61965527188984 597.9000000000001 + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + vertex -165.5588134031058 -77.61965527188984 597.9000000000001 + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + vertex -167.7066740765144 -76.3795873339156 598.0545186779376 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + vertex -167.7066740765144 -76.3795873339156 598.0545186779376 + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + vertex -167.7066740765144 -76.3795873339156 598.0545186779376 + vertex -168.04086421067473 -76.18664256999767 598.214359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + vertex -168.04086421067473 -76.18664256999767 598.214359353945 + vertex -168.32783978476044 -76.0209571450484 598.4686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + vertex -168.32783978476044 -76.0209571450484 598.4686291501016 + vertex -168.54804388764717 -75.89382224697007 598.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + vertex -168.54804388764717 -75.89382224697007 598.8000000000002 + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + vertex -169.25329977597292 -75.48664256999764 599.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597292 -75.48664256999764 599.2000000000002 + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + vertex -168.73368453370225 -75.78664256999762 599.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597292 -75.48664256999764 599.2000000000002 + vertex -168.73368453370225 -75.78664256999762 599.6000000000001 + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -168.73368453370225 -75.78664256999762 599.6000000000001 + vertex -168.68646997362762 -75.81390190896636 600.0141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -168.68646997362762 -75.81390190896636 600.0141104721642 + vertex -168.54804388764714 -75.89382224697005 600.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -168.54804388764714 -75.89382224697005 600.4000000000002 + vertex -168.32783978476039 -76.02095714504833 600.7313708498987 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -168.32783978476039 -76.02095714504833 600.7313708498987 + vertex -168.04086421067464 -76.18664256999756 600.9856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -168.04086421067464 -76.18664256999756 600.9856406460553 + vertex -167.7066740765143 -76.37958733391552 601.1454813220627 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -167.7066740765143 -76.37958733391552 601.1454813220627 + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + vertex -165.44278799932115 -77.68664256999716 611.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -171.15855566429843 -74.38664256999722 615.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.15855566429843 -74.38664256999722 615.6000000000001 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + vertex -170.81214550278463 -74.58664256999712 617.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.4000000000002 + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + vertex -165.87580070121325 -77.43664256999696 617.2660254037846 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.4000000000002 + vertex -165.87580070121325 -77.43664256999696 617.2660254037846 + vertex -166.08466953506345 -77.31605209254823 617.3659258262892 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.4000000000002 + vertex -166.08466953506345 -77.31605209254823 617.3659258262892 + vertex -166.30881340310546 -77.18664256999696 617.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -176.81743808261163 -71.11948528247233 603.7000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -176.81743808261163 -71.11948528247233 603.7000000000002 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -176.81743808261163 -71.11948528247233 603.7000000000002 + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -174.10304203716578 -72.68664256999762 604.7000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -174.10304203716578 -72.68664256999762 604.7000000000002 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -173.4978535934523 -73.03604828088599 604.7920002690196 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -173.4978535934523 -73.03604828088599 604.7920002690196 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -172.93390774205676 -73.36164256999754 605.0617314097822 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.93390774205676 -73.36164256999754 605.0617314097822 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -172.44963646078708 -73.64123672459937 605.4908116907965 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.44963646078708 -73.64123672459937 605.4908116907965 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -172.07804203716574 -73.85577686510652 606.0500000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.07804203716574 -73.85577686510652 606.0500000000002 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -171.76477344694774 -74.03664256999745 607.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.76477344694774 -74.03664256999745 607.4000000000001 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -171.8444480170736 -73.99064243548767 608.098811421777 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.8444480170736 -73.99064243548767 608.098811421777 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -172.0780420371657 -73.8557768651064 608.7500000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.0780420371657 -73.8557768651064 608.7500000000001 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -172.44963646078705 -73.64123672459925 609.3091883092038 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.44963646078705 -73.64123672459925 609.3091883092038 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -172.93390774205668 -73.36164256999741 609.7382685902181 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -172.93390774205668 -73.36164256999741 609.7382685902181 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -173.49785359345225 -73.03604828088585 610.0079997309806 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -173.49785359345225 -73.03604828088585 610.0079997309806 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -174.1030420371657 -72.68664256999745 610.1000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -181.89727067122598 -68.18664256999807 597.4000000000001 + vertex -177.3939385715468 -70.78664256999797 597.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.89727067122598 -68.18664256999807 597.4000000000001 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -182.121414539268 -68.05723304744681 597.434074173711 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.121414539268 -68.05723304744681 597.434074173711 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -182.33028337311822 -67.9366425699981 597.5339745962157 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.33028337311822 -67.9366425699981 597.5339745962157 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -182.50964310692174 -67.83308917940481 597.6928932188135 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.50964310692174 -67.83308917940481 597.6928932188135 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -182.64727067122598 -67.75362986810585 597.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + vertex -165.5588134031058 -77.61965527188984 597.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -166.9894136987799 -76.79369780607962 598.0545186779376 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.9894136987799 -76.79369780607962 598.0545186779376 + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -166.65522356461958 -76.98664256999763 598.214359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461958 -76.98664256999763 598.214359353945 + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461958 -76.98664256999763 598.214359353945 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + vertex -166.36824799053383 -77.1523279949468 598.4686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.36824799053383 -77.1523279949468 598.4686291501016 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + vertex -166.1480438876471 -77.27946289302511 598.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.1480438876471 -77.27946289302511 598.8000000000001 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + vertex -166.00961780166662 -77.35938323102883 599.1858895278361 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166662 -77.35938323102883 599.1858895278361 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.00961780166662 -77.35938323102883 599.1858895278361 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -165.96240324159197 -77.38664256999755 599.6 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.96240324159197 -77.38664256999755 599.6 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -166.0096178016666 -77.35938323102881 600.0141104721641 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.0096178016666 -77.35938323102881 600.0141104721641 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -166.14804388764708 -77.27946289302508 600.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.14804388764708 -77.27946289302508 600.4000000000002 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -166.36824799053383 -77.15232799494673 600.7313708498986 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.36824799053383 -77.15232799494673 600.7313708498986 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -166.65522356461955 -76.98664256999751 600.9856406460552 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.65522356461955 -76.98664256999751 600.9856406460552 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -166.98941369877988 -76.79369780607954 601.1454813220627 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -166.98941369877988 -76.79369780607954 601.1454813220627 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -165.78919816083507 -77.4866425699974 603.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + vertex -165.78919816083507 -77.4866425699974 603.6000000000001 + vertex -167.0016337261333 -76.78664256999741 604.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.0016337261333 -76.78664256999741 604.0000000000001 + vertex -165.78919816083507 -77.4866425699974 603.6000000000001 + vertex -165.78919816083504 -77.4866425699974 604.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -176.1280420371658 -71.51750827488864 606.0500000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -176.1280420371658 -71.51750827488864 606.0500000000002 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -175.75644761354442 -71.73204841539578 605.4908116907965 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -175.75644761354442 -71.73204841539578 605.4908116907965 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -175.2721763322748 -72.01164256999762 605.0617314097822 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -175.2721763322748 -72.01164256999762 605.0617314097822 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -174.70823048087922 -72.33723685910924 604.7920002690196 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -174.70823048087922 -72.33723685910924 604.7920002690196 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + vertex -174.10304203716578 -72.68664256999762 604.7000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -176.44131062738379 -71.3366425699976 607.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -176.44131062738379 -71.3366425699976 607.4000000000001 + vertex -176.3616360572578 -71.38264270450729 608.098811421777 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -176.3616360572578 -71.38264270450729 608.098811421777 + vertex -176.12804203716573 -71.51750827488856 608.7500000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -176.12804203716573 -71.51750827488856 608.7500000000001 + vertex -175.75644761354437 -71.73204841539567 609.3091883092038 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -175.75644761354437 -71.73204841539567 609.3091883092038 + vertex -175.27217633227468 -72.01164256999746 609.7382685902181 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -175.27217633227468 -72.01164256999746 609.7382685902181 + vertex -174.70823048087914 -72.33723685910905 610.0079997309806 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -174.70823048087914 -72.33723685910905 610.0079997309806 + vertex -174.1030420371657 -72.68664256999745 610.1000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -174.1030420371657 -72.68664256999745 610.1000000000001 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -165.7891981608349 -77.48664256999719 610.8000000000002 + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -167.00163372613315 -76.78664256999721 610.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -165.7891981608349 -77.48664256999719 610.8000000000002 + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -176.81743808261143 -71.11948528247211 611.1000000000001 + vertex -179.44268224691524 -69.60379985752284 613.0000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -176.81743808261143 -71.11948528247211 611.1000000000001 + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.44268224691524 -69.60379985752284 613.0000000000002 + vertex -176.81743808261143 -71.11948528247211 611.1000000000001 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.44268224691524 -69.60379985752284 613.0000000000002 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + vertex -177.04752841003275 -70.98664256999737 615.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -179.51961410070382 -69.55938323102869 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.51961410070382 -69.55938323102869 615.6141104721642 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -179.65804018668427 -69.47946289302497 616.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668427 -69.47946289302497 616.0000000000001 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -179.878244289571 -69.35232799494665 616.3313708498987 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.878244289571 -69.35232799494665 616.3313708498987 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -180.16521986365672 -69.18664256999742 616.5856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.16521986365672 -69.18664256999742 616.5856406460553 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -180.49940999781703 -68.99369780607941 616.7454813220626 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.49940999781703 -68.99369780607941 616.7454813220626 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -180.85804018668432 -68.78664256999744 616.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.85804018668432 -68.78664256999744 616.8000000000002 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -177.3939385715465 -70.78664256999731 617.0000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + vertex -177.3939385715465 -70.78664256999731 617.0000000000002 + vertex -182.50964310692143 -67.83308917940421 617.1071067811868 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.50964310692143 -67.83308917940421 617.1071067811868 + vertex -177.3939385715465 -70.78664256999731 617.0000000000002 + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.50964310692143 -67.83308917940421 617.1071067811868 + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -182.33028337311788 -67.93664256999747 617.2660254037846 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.33028337311788 -67.93664256999747 617.2660254037846 + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -182.12141453926765 -68.05723304744619 617.3659258262892 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.12141453926765 -68.05723304744619 617.3659258262892 + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -181.89727067122564 -68.18664256999743 617.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.2044503481982 -68.58664256999764 610.8000000000002 + vertex -182.41688591349643 -67.88664256999765 611.2000000000002 + vertex -182.41688591349643 -67.88664256999766 610.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.41688591349643 -67.88664256999765 611.2000000000002 + vertex -181.2044503481982 -68.58664256999764 610.8000000000002 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.41688591349643 -67.88664256999765 611.2000000000002 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -182.76329607501023 -67.68664256999767 611.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501023 -67.68664256999767 611.2000000000002 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -182.0580401866844 -68.09382224696996 614.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501023 -67.68664256999767 611.2000000000002 + vertex -182.0580401866844 -68.09382224696996 614.4000000000001 + vertex -182.19646627266488 -68.01390190896626 614.7858895278362 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501023 -67.68664256999767 611.2000000000002 + vertex -182.19646627266488 -68.01390190896626 614.7858895278362 + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.0580401866844 -68.09382224696996 614.4000000000001 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -181.83783608379764 -68.22095714504829 614.0686291501017 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.83783608379764 -68.22095714504829 614.0686291501017 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -181.55086050971195 -68.38664256999753 613.814359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.55086050971195 -68.38664256999753 613.814359353945 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -181.21667037555162 -68.57958733391551 613.6545186779376 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.21667037555162 -68.57958733391551 613.6545186779376 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -180.85804018668438 -68.78664256999751 613.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.85804018668438 -68.78664256999751 613.6000000000001 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -182.19646627266488 -68.01390190896626 614.7858895278362 + vertex -182.24368083273947 -67.9866425699975 615.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -182.24368083273947 -67.9866425699975 615.2000000000002 + vertex -182.19646627266485 -68.01390190896625 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -182.19646627266485 -68.01390190896625 615.6141104721642 + vertex -182.05804018668434 -68.09382224696995 616.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -182.05804018668434 -68.09382224696995 616.0000000000001 + vertex -181.83783608379758 -68.22095714504822 616.3313708498987 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -181.83783608379758 -68.22095714504822 616.3313708498987 + vertex -181.55086050971187 -68.38664256999745 616.5856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -181.55086050971187 -68.38664256999745 616.5856406460553 + vertex -182.7337869749635 -67.70367965685296 616.6588190451026 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7337869749635 -67.70367965685296 616.6588190451026 + vertex -181.55086050971187 -68.38664256999745 616.5856406460553 + vertex -181.2166703755515 -68.57958733391541 616.7454813220627 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.7337869749635 -67.70367965685296 616.6588190451026 + vertex -181.2166703755515 -68.57958733391541 616.7454813220627 + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + vertex -181.2166703755515 -68.57958733391541 616.7454813220627 + vertex -180.85804018668432 -68.78664256999744 616.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -180.4994099978171 -68.99369780607952 613.6545186779376 + vertex -180.85804018668438 -68.78664256999751 613.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.4994099978171 -68.99369780607952 613.6545186779376 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -180.1652198636568 -69.1866425699975 613.814359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.1652198636568 -69.1866425699975 613.814359353945 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -179.87824428957106 -69.35232799494672 614.0686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.87824428957106 -69.35232799494672 614.0686291501016 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -179.65804018668433 -69.47946289302502 614.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668433 -69.47946289302502 614.4000000000001 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.65804018668433 -69.47946289302502 614.4000000000001 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + vertex -179.51961410070382 -69.5593832310287 614.785889527836 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.51961410070382 -69.5593832310287 614.785889527836 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + vertex -179.4723995406292 -69.58664256999745 615.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -179.4723995406292 -69.58664256999745 615.2000000000002 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + vertex -179.51961410070382 -69.55938323102869 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -168.7634018274162 -75.76948528247219 601.8000000000001 + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -168.7634018274162 -75.76948528247219 601.8000000000001 + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + vertex -168.7634018274162 -75.76948528247219 601.8000000000001 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.20445034819832 -68.58664256999784 604.0000000000001 + vertex -182.41688591349654 -67.88664256999789 603.6 + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.41688591349654 -67.88664256999789 603.6 + vertex -181.20445034819832 -68.58664256999784 604.0000000000001 + vertex -182.41688591349654 -67.88664256999789 604.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -182.64727067122598 -67.75362986810585 597.9000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + vertex -181.21667037555187 -68.57958733391598 598.0545186779377 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -181.21667037555187 -68.57958733391598 598.0545186779377 + vertex -181.55086050971227 -68.38664256999803 598.214359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -181.55086050971227 -68.38664256999803 598.214359353945 + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + vertex -181.55086050971227 -68.38664256999803 598.214359353945 + vertex -181.83783608379792 -68.22095714504879 598.4686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + vertex -181.83783608379792 -68.22095714504879 598.4686291501016 + vertex -182.05804018668465 -68.09382224697046 598.8000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + vertex -182.05804018668465 -68.09382224697046 598.8000000000002 + vertex -182.19646627266513 -68.01390190896676 599.1858895278361 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + vertex -182.19646627266513 -68.01390190896676 599.1858895278361 + vertex -182.76329607501032 -67.6866425699979 603.6 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -182.19646627266513 -68.01390190896676 599.1858895278361 + vertex -182.24368083273973 -67.986642569998 599.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -182.24368083273973 -67.986642569998 599.6000000000001 + vertex -182.1964662726651 -68.01390190896674 600.0141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -182.1964662726651 -68.01390190896674 600.0141104721642 + vertex -182.05804018668462 -68.09382224697045 600.4000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -182.05804018668462 -68.09382224697045 600.4000000000002 + vertex -181.83783608379784 -68.2209571450487 600.7313708498987 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -181.83783608379784 -68.2209571450487 600.7313708498987 + vertex -181.55086050971215 -68.38664256999796 600.9856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -181.55086050971215 -68.38664256999796 600.9856406460553 + vertex -181.2166703755518 -68.57958733391588 601.1454813220627 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -181.2166703755518 -68.57958733391588 601.1454813220627 + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.9750497701033105e-16 + outer loop + vertex -182.76329607501032 -67.6866425699979 603.6 + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + vertex -182.41688591349654 -67.88664256999789 603.6 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -31.897270671226536 191.62097856533254 597.4 + vertex -177.3939385715468 -70.78664256999797 597.4000000000001 + vertex -181.89727067122598 -68.18664256999807 597.4000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -177.3939385715468 -70.78664256999797 597.4000000000001 + vertex -31.897270671226536 191.62097856533254 597.4 + vertex -27.3939385715473 189.02097856533265 597.4 + endloop +endfacet +facet normal -0.11303899832185413 0.06526309611000009 -0.9914448613738078 + outer loop + vertex -32.12141453926854 191.75038808788375 597.434074173711 + vertex -181.89727067122598 -68.18664256999807 597.4000000000001 + vertex -182.121414539268 -68.05723304744681 597.434074173711 + endloop +endfacet +facet normal -0.11303899832185413 0.06526309611000009 -0.9914448613738078 + outer loop + vertex -181.89727067122598 -68.18664256999807 597.4000000000001 + vertex -32.12141453926854 191.75038808788375 597.434074173711 + vertex -31.897270671226536 191.62097856533254 597.4 + endloop +endfacet +facet normal -1.4032362957362895e-14 -3.338242996024356e-14 -1.0 + outer loop + vertex -26.817438082612185 188.68813585285818 603.7 + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + vertex -176.81743808261163 -71.11948528247233 603.7000000000002 + endloop +endfacet +facet normal -1.4032362957362895e-14 -3.338242996024356e-14 -1.0 + outer loop + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + vertex -26.817438082612185 188.68813585285818 603.7 + vertex -21.38864599172057 185.5538212778076 603.7 + endloop +endfacet +facet normal -0.33141357403561206 0.19134171618249302 -0.9238795325112902 + outer loop + vertex -32.33028337311871 191.8709785653325 597.5339745962156 + vertex -182.121414539268 -68.05723304744681 597.434074173711 + vertex -182.33028337311822 -67.9366425699981 597.5339745962157 + endloop +endfacet +facet normal -0.33141357403561206 0.19134171618249302 -0.9238795325112902 + outer loop + vertex -182.121414539268 -68.05723304744681 597.434074173711 + vertex -32.33028337311871 191.8709785653325 597.5339745962156 + vertex -32.12141453926854 191.75038808788375 597.434074173711 + endloop +endfacet +facet normal -0.5272028623656805 0.304380714504307 -0.7933533402912483 + outer loop + vertex -32.509643106922276 191.9745319559258 597.6928932188135 + vertex -182.33028337311822 -67.9366425699981 597.5339745962157 + vertex -182.50964310692174 -67.83308917940481 597.6928932188135 + endloop +endfacet +facet normal -0.5272028623656805 0.304380714504307 -0.7933533402912483 + outer loop + vertex -182.33028337311822 -67.9366425699981 597.5339745962157 + vertex -32.509643106922276 191.9745319559258 597.6928932188135 + vertex -32.33028337311871 191.8709785653325 597.5339745962156 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 7.797766215937039e-16 + outer loop + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -181.20445034819832 -68.58664256999784 604.0000000000001 + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 7.797766215937039e-16 + outer loop + vertex -181.20445034819832 -68.58664256999784 604.0000000000001 + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -31.204450348198836 191.2209785653327 604.0000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 6.227439144697606e-15 + outer loop + vertex -27.3939385715473 189.02097856533265 597.4 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -177.3939385715468 -70.78664256999797 597.4000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 6.227439144697606e-15 + outer loop + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + vertex -27.3939385715473 189.02097856533265 597.4 + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -28.95278429835934 189.92097856533263 599.2 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -178.9527842983588 -69.88664256999793 599.2000000000002 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + vertex -28.95278429835934 189.92097856533263 599.2 + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -19.25329977597341 184.32097856533298 599.2 + vertex -169.25329977597292 -75.48664256999764 599.2000000000002 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -19.25329977597341 184.32097856533298 599.2 + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -181.20445034819835 -68.58664256999789 601.8000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -29.44268224691593 190.20382127780732 601.8000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -28.95278429835934 189.92097856533263 599.2 + vertex -178.9527842983588 -69.88664256999793 599.2000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -28.95278429835934 189.92097856533263 599.2 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -27.04752841003354 188.82097856533272 599.2 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -20.8121455027855 185.22097856533284 597.4 + vertex -170.812145502785 -74.58664256999778 597.4000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -20.8121455027855 185.22097856533284 597.4 + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + endloop +endfacet +facet normal -0.8001031451912929 0.46193976625560573 -0.38268343236507835 + outer loop + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -32.64727067122648 192.05399126722477 597.9 + vertex -182.64727067122598 -67.75362986810585 597.9000000000001 + endloop +endfacet +facet normal -0.8001031451912929 0.46193976625560573 -0.38268343236507835 + outer loop + vertex -32.64727067122648 192.05399126722477 597.9 + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -32.73378697496431 192.10394147847708 598.1411809548975 + endloop +endfacet +facet normal -0.6123724356957982 0.35355339059327484 0.7071067811865438 + outer loop + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + endloop +endfacet +facet normal -0.6123724356957982 0.35355339059327484 0.7071067811865438 + outer loop + vertex -179.4426822469154 -69.60379985752323 601.8000000000001 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -29.44268224691593 190.20382127780732 601.8000000000001 + endloop +endfacet +facet normal 0.6123724356957956 -0.3535533905932733 -0.7071067811865469 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -176.81743808261163 -71.11948528247233 603.7000000000002 + vertex -178.95278429835878 -69.88664256999783 601.2343145750508 + endloop +endfacet +facet normal 0.6123724356957956 -0.3535533905932733 -0.7071067811865469 + outer loop + vertex -176.81743808261163 -71.11948528247233 603.7000000000002 + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -26.817438082612185 188.68813585285818 603.7 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -182.41688591349654 -67.88664256999789 603.6 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -182.76329607501032 -67.6866425699979 603.6 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -182.41688591349654 -67.88664256999789 603.6 + vertex -32.416885913497055 191.92097856533272 603.6 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -21.15855566429926 185.4209785653328 597.8000000000001 + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -170.81214550278494 -74.58664256999774 597.8000000000001 + vertex -21.15855566429926 185.4209785653328 597.8000000000001 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + endloop +endfacet +facet normal 3.1938264052333552e-15 3.964006195623637e-14 1.0 + outer loop + vertex -181.20445034819832 -68.58664256999784 604.0000000000001 + vertex -32.416885913497055 191.9209785653327 604.0 + vertex -182.41688591349654 -67.88664256999789 604.0000000000001 + endloop +endfacet +facet normal 3.1938264052333552e-15 3.964006195623637e-14 1.0 + outer loop + vertex -32.416885913497055 191.9209785653327 604.0 + vertex -181.20445034819832 -68.58664256999784 604.0000000000001 + vertex -31.204450348198836 191.2209785653327 604.0000000000001 + endloop +endfacet +facet normal -0.6123724356958147 0.35355339059323354 -0.7071067811865502 + outer loop + vertex -21.38864599172057 185.5538212778076 603.7 + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -171.38864599171998 -74.25379985752292 603.7000000000002 + endloop +endfacet +facet normal -0.6123724356958147 0.35355339059323354 -0.7071067811865502 + outer loop + vertex -169.2532997759729 -75.48664256999757 601.2343145750509 + vertex -21.38864599172057 185.5538212778076 603.7 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + endloop +endfacet +facet normal 0.1130389983218193 -0.06526309611006452 -0.9914448613738074 + outer loop + vertex -16.30881340310635 182.62097856533293 597.4 + vertex -166.08466953506382 -77.31605209254886 597.434074173711 + vertex -166.30881340310586 -77.1866425699976 597.4000000000001 + endloop +endfacet +facet normal 0.1130389983218193 -0.06526309611006452 -0.9914448613738074 + outer loop + vertex -166.08466953506382 -77.31605209254886 597.434074173711 + vertex -16.30881340310635 182.62097856533293 597.4 + vertex -16.08466953506432 182.4915690427817 597.434074173711 + endloop +endfacet +facet normal 0.3314135740355756 -0.19134171618255938 -0.9238795325112896 + outer loop + vertex -16.08466953506432 182.4915690427817 597.434074173711 + vertex -165.87580070121362 -77.4366425699976 597.5339745962157 + vertex -166.08466953506382 -77.31605209254886 597.434074173711 + endloop +endfacet +facet normal 0.3314135740355756 -0.19134171618255938 -0.9238795325112896 + outer loop + vertex -165.87580070121362 -77.4366425699976 597.5339745962157 + vertex -16.08466953506432 182.4915690427817 597.434074173711 + vertex -15.875800701214134 182.37097856533296 597.5339745962156 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 2.4387889803801352e-15 + outer loop + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + vertex -182.76329607501032 -67.6866425699979 603.6 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 2.4387889803801352e-15 + outer loop + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + vertex -177.047528410033 -70.98664256999795 597.8000000000001 + vertex -177.3939385715468 -70.78664256999794 597.8000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -177.047528410033 -70.98664256999795 597.8000000000001 + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + endloop +endfacet +facet normal -0.8586164364012796 0.4957224306868715 -0.13052619222005726 + outer loop + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -182.76329607501043 -67.68664256999804 598.4000000000002 + endloop +endfacet +facet normal -0.8586164364012796 0.4957224306868715 -0.13052619222005726 + outer loop + vertex -182.73378697496378 -67.70367965685351 598.1411809548977 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + vertex -32.73378697496431 192.10394147847708 598.1411809548975 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -171.15855566429875 -74.38664256999776 597.8000000000001 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -21.15855566429926 185.4209785653328 597.8000000000001 + endloop +endfacet +facet normal 0.5272028623656501 -0.3043807145043627 -0.7933533402912472 + outer loop + vertex -15.875800701214134 182.37097856533296 597.5339745962156 + vertex -165.69644096740998 -77.54019596059086 597.6928932188135 + vertex -165.87580070121362 -77.4366425699976 597.5339745962157 + endloop +endfacet +facet normal 0.5272028623656501 -0.3043807145043627 -0.7933533402912472 + outer loop + vertex -165.69644096740998 -77.54019596059086 597.6928932188135 + vertex -15.875800701214134 182.37097856533296 597.5339745962156 + vertex -15.696440967410519 182.26742517473969 597.6928932188135 + endloop +endfacet +facet normal 0.6870641468694507 -0.3966766701456196 -0.6087614290087188 + outer loop + vertex -165.69644096740998 -77.54019596059086 597.6928932188135 + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + vertex -165.5588134031058 -77.61965527188984 597.9000000000001 + endloop +endfacet +facet normal 0.6870641468694507 -0.3966766701456196 -0.6087614290087188 + outer loop + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + vertex -165.69644096740998 -77.54019596059086 597.6928932188135 + vertex -15.696440967410519 182.26742517473969 597.6928932188135 + endloop +endfacet +facet normal -0.6870641468694719 0.39667667014558666 -0.6087614290087161 + outer loop + vertex -32.64727067122648 192.05399126722477 597.9 + vertex -182.50964310692174 -67.83308917940481 597.6928932188135 + vertex -182.64727067122598 -67.75362986810585 597.9000000000001 + endloop +endfacet +facet normal -0.6870641468694719 0.39667667014558666 -0.6087614290087161 + outer loop + vertex -182.50964310692174 -67.83308917940481 597.6928932188135 + vertex -32.64727067122648 192.05399126722477 597.9 + vertex -32.509643106922276 191.9745319559258 597.6928932188135 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.1225237454890334e-14 + outer loop + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -177.047528410033 -70.98664256999795 597.8000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.1225237454890334e-14 + outer loop + vertex -177.047528410033 -70.98664256999788 599.2000000000002 + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + vertex -27.04752841003354 188.82097856533272 599.2 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -6.007129263248552e-15 + outer loop + vertex -32.416885913497055 191.9209785653327 604.0 + vertex -182.41688591349654 -67.88664256999789 603.6 + vertex -182.41688591349654 -67.88664256999789 604.0000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -6.007129263248552e-15 + outer loop + vertex -182.41688591349654 -67.88664256999789 603.6 + vertex -32.416885913497055 191.9209785653327 604.0 + vertex -32.416885913497055 191.92097856533272 603.6 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -169.25329977597292 -75.48664256999764 599.2000000000002 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -171.15855566429872 -74.38664256999773 599.2000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -169.25329977597292 -75.48664256999764 599.2000000000002 + vertex -19.25329977597341 184.32097856533298 599.2 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -20.8121455027855 185.22097856533284 597.4 + vertex -166.30881340310586 -77.1866425699976 597.4000000000001 + vertex -170.812145502785 -74.58664256999778 597.4000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -166.30881340310586 -77.1866425699976 597.4000000000001 + vertex -20.8121455027855 185.22097856533284 597.4 + vertex -16.30881340310635 182.62097856533293 597.4 + endloop +endfacet +facet normal 0.11303899832184437 -0.06526309610999445 0.9914448613738092 + outer loop + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + vertex -17.706674076514883 183.42803380141493 598.0545186779375 + vertex -167.7066740765144 -76.3795873339156 598.0545186779376 + endloop +endfacet +facet normal 0.11303899832184437 -0.06526309610999445 0.9914448613738092 + outer loop + vertex -17.706674076514883 183.42803380141493 598.0545186779375 + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + endloop +endfacet +facet normal 0.8586164364012803 -0.49572243068687194 -0.1305261922200513 + outer loop + vertex -26.441310627384293 188.47097856533296 607.4 + vertex -176.3616360572578 -71.38264270450729 608.098811421777 + vertex -176.44131062738379 -71.3366425699976 607.4000000000001 + endloop +endfacet +facet normal 0.8586164364012803 -0.49572243068687194 -0.1305261922200513 + outer loop + vertex -176.3616360572578 -71.38264270450729 608.098811421777 + vertex -26.441310627384293 188.47097856533296 607.4 + vertex -26.361636057258405 188.42497843082322 608.0988114217769 + endloop +endfacet +facet normal 0.5272028623656798 -0.30438071450430665 0.7933533402912488 + outer loop + vertex -175.2721763322748 -72.01164256999762 605.0617314097822 + vertex -25.75644761354496 188.07557271993477 605.4908116907964 + vertex -175.75644761354442 -71.73204841539578 605.4908116907965 + endloop +endfacet +facet normal 0.5272028623656798 -0.30438071450430665 0.7933533402912488 + outer loop + vertex -25.75644761354496 188.07557271993477 605.4908116907964 + vertex -175.2721763322748 -72.01164256999762 605.0617314097822 + vertex -25.272176332275308 187.79597856533294 605.061731409782 + endloop +endfacet +facet normal 0.8001031451912723 -0.4619397662556388 -0.3826834323650808 + outer loop + vertex -176.3616360572578 -71.38264270450729 608.098811421777 + vertex -26.128042037166267 188.29011286044198 608.7500000000001 + vertex -176.12804203716573 -71.51750827488856 608.7500000000001 + endloop +endfacet +facet normal 0.8001031451912723 -0.4619397662556388 -0.3826834323650808 + outer loop + vertex -26.128042037166267 188.29011286044198 608.7500000000001 + vertex -176.3616360572578 -71.38264270450729 608.098811421777 + vertex -26.361636057258405 188.42497843082322 608.0988114217769 + endloop +endfacet +facet normal 0.8001031451912779 -0.4619397662556308 -0.38268343236507885 + outer loop + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -165.5588134031058 -77.61965527188984 597.9000000000001 + endloop +endfacet +facet normal 0.8001031451912779 -0.4619397662556308 -0.38268343236507885 + outer loop + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + vertex -15.47229709936849 182.13801565218841 598.1411809548975 + endloop +endfacet +facet normal 0.11303899832179289 -0.06526309611005209 -0.9914448613738114 + outer loop + vertex -24.70823048087963 187.47038427622155 610.0079997309805 + vertex -174.1030420371657 -72.68664256999745 610.1000000000001 + vertex -174.70823048087914 -72.33723685910905 610.0079997309806 + endloop +endfacet +facet normal 0.11303899832179289 -0.06526309611005209 -0.9914448613738114 + outer loop + vertex -174.1030420371657 -72.68664256999745 610.1000000000001 + vertex -24.70823048087963 187.47038427622155 610.0079997309805 + vertex -24.103042037166183 187.1209785653331 610.1 + endloop +endfacet +facet normal -0.5272028623656798 0.30438071450430665 -0.7933533402912488 + outer loop + vertex -22.933907742057176 186.4459785653332 609.7382685902181 + vertex -172.44963646078705 -73.64123672459925 609.3091883092038 + vertex -172.93390774205668 -73.36164256999741 609.7382685902181 + endloop +endfacet +facet normal -0.5272028623656798 0.30438071450430665 -0.7933533402912488 + outer loop + vertex -172.44963646078705 -73.64123672459925 609.3091883092038 + vertex -22.933907742057176 186.4459785653332 609.7382685902181 + vertex -22.44963646078752 186.16638441073135 609.3091883092037 + endloop +endfacet +facet normal 0.8001031451912968 -0.4619397662555967 0.3826834323650809 + outer loop + vertex -26.128042037166335 188.29011286044195 606.0500000000001 + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -176.1280420371658 -71.51750827488864 606.0500000000002 + endloop +endfacet +facet normal 0.8001031451912968 -0.4619397662555967 0.3826834323650809 + outer loop + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -26.128042037166335 188.29011286044195 606.0500000000001 + vertex -26.361636057258405 188.42497843082322 606.7011885782233 + endloop +endfacet +facet normal 0.3314135740355922 -0.19134171618256895 -0.9238795325112817 + outer loop + vertex -25.27217633227526 187.79597856533303 609.738268590218 + vertex -174.70823048087914 -72.33723685910905 610.0079997309806 + vertex -175.27217633227468 -72.01164256999746 609.7382685902181 + endloop +endfacet +facet normal 0.3314135740355922 -0.19134171618256895 -0.9238795325112817 + outer loop + vertex -174.70823048087914 -72.33723685910905 610.0079997309806 + vertex -25.27217633227526 187.79597856533303 609.738268590218 + vertex -24.70823048087963 187.47038427622155 610.0079997309805 + endloop +endfacet +facet normal -0.1130389983217937 0.06526309611005116 0.9914448613738113 + outer loop + vertex -173.4978535934523 -73.03604828088599 604.7920002690196 + vertex -24.103042037166297 187.12097856533296 604.7 + vertex -174.10304203716578 -72.68664256999762 604.7000000000002 + endloop +endfacet +facet normal -0.1130389983217937 0.06526309611005116 0.9914448613738113 + outer loop + vertex -24.103042037166297 187.12097856533296 604.7 + vertex -173.4978535934523 -73.03604828088599 604.7920002690196 + vertex -23.497853593452852 186.77157285444454 604.7920002690196 + endloop +endfacet +facet normal -0.8001031451912723 0.4619397662556388 0.3826834323650808 + outer loop + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + vertex -22.078042037166263 185.95184427022406 606.0500000000001 + vertex -172.07804203716574 -73.85577686510652 606.0500000000002 + endloop +endfacet +facet normal -0.8001031451912723 0.4619397662556388 0.3826834323650808 + outer loop + vertex -22.078042037166263 185.95184427022406 606.0500000000001 + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + vertex -21.844448017074143 185.81697869984282 606.7011885782233 + endloop +endfacet +facet normal -0.33141357403562616 0.19134171618250684 -0.9238795325112824 + outer loop + vertex -23.49785359345274 186.77157285444477 610.0079997309805 + vertex -172.93390774205668 -73.36164256999741 609.7382685902181 + vertex -173.49785359345225 -73.03604828088585 610.0079997309806 + endloop +endfacet +facet normal -0.33141357403562616 0.19134171618250684 -0.9238795325112824 + outer loop + vertex -172.93390774205668 -73.36164256999741 609.7382685902181 + vertex -23.49785359345274 186.77157285444477 610.0079997309805 + vertex -22.933907742057176 186.4459785653332 609.7382685902181 + endloop +endfacet +facet normal 0.6870641468694536 -0.3966766701456156 -0.6087614290087181 + outer loop + vertex -26.128042037166267 188.29011286044198 608.7500000000001 + vertex -175.75644761354437 -71.73204841539567 609.3091883092038 + vertex -176.12804203716573 -71.51750827488856 608.7500000000001 + endloop +endfacet +facet normal 0.6870641468694536 -0.3966766701456156 -0.6087614290087181 + outer loop + vertex -175.75644761354437 -71.73204841539567 609.3091883092038 + vertex -26.128042037166267 188.29011286044198 608.7500000000001 + vertex -25.75644761354487 188.0755727199349 609.3091883092037 + endloop +endfacet +facet normal 0.8586164364012749 -0.4957224306868801 0.13052619222005518 + outer loop + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -26.441310627384293 188.47097856533296 607.4 + vertex -176.44131062738379 -71.3366425699976 607.4000000000001 + endloop +endfacet +facet normal 0.8586164364012749 -0.4957224306868801 0.13052619222005518 + outer loop + vertex -26.441310627384293 188.47097856533296 607.4 + vertex -176.36163605725787 -71.38264270450735 606.7011885782233 + vertex -26.361636057258405 188.42497843082322 606.7011885782233 + endloop +endfacet +facet normal -0.8001031451912879 0.46193976625560285 -0.38268343236509217 + outer loop + vertex -22.078042037166195 185.95184427022414 608.7500000000001 + vertex -171.8444480170736 -73.99064243548767 608.098811421777 + vertex -172.0780420371657 -73.8557768651064 608.7500000000001 + endloop +endfacet +facet normal -0.8001031451912879 0.46193976625560285 -0.38268343236509217 + outer loop + vertex -171.8444480170736 -73.99064243548767 608.098811421777 + vertex -22.078042037166195 185.95184427022414 608.7500000000001 + vertex -21.84444801707412 185.81697869984293 608.0988114217769 + endloop +endfacet +facet normal -0.11303899832176335 0.06526309611003223 0.9914448613738159 + outer loop + vertex -166.9894136987799 -76.79369780607962 598.0545186779376 + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + vertex -167.34804388764715 -76.58664256999762 598.0000000000001 + endloop +endfacet +facet normal -0.11303899832176335 0.06526309611003223 0.9914448613738159 + outer loop + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + vertex -166.9894136987799 -76.79369780607962 598.0545186779376 + vertex -16.98941369878049 183.01392332925096 598.0545186779375 + endloop +endfacet +facet normal -0.6870641468694504 0.3966766701456194 0.6087614290087194 + outer loop + vertex -22.078042037166263 185.95184427022406 606.0500000000001 + vertex -172.44963646078708 -73.64123672459937 605.4908116907965 + vertex -172.07804203716574 -73.85577686510652 606.0500000000002 + endloop +endfacet +facet normal -0.6870641468694504 0.3966766701456194 0.6087614290087194 + outer loop + vertex -172.44963646078708 -73.64123672459937 605.4908116907965 + vertex -22.078042037166263 185.95184427022406 606.0500000000001 + vertex -22.449636460787655 186.16638441073113 605.4908116907964 + endloop +endfacet +facet normal 0.5272028623656518 -0.3043807145043581 -0.7933533402912477 + outer loop + vertex -25.75644761354487 188.0755727199349 609.3091883092037 + vertex -175.27217633227468 -72.01164256999746 609.7382685902181 + vertex -175.75644761354437 -71.73204841539567 609.3091883092038 + endloop +endfacet +facet normal 0.5272028623656518 -0.3043807145043581 -0.7933533402912477 + outer loop + vertex -175.27217633227468 -72.01164256999746 609.7382685902181 + vertex -25.75644761354487 188.0755727199349 609.3091883092037 + vertex -25.27217633227526 187.79597856533303 609.738268590218 + endloop +endfacet +facet normal 0.11303899832182897 -0.06526309610998697 0.9914448613738115 + outer loop + vertex -174.10304203716578 -72.68664256999762 604.7000000000002 + vertex -24.70823048087974 187.47038427622132 604.7920002690196 + vertex -174.70823048087922 -72.33723685910924 604.7920002690196 + endloop +endfacet +facet normal 0.11303899832182897 -0.06526309610998697 0.9914448613738115 + outer loop + vertex -24.70823048087974 187.47038427622132 604.7920002690196 + vertex -174.10304203716578 -72.68664256999762 604.7000000000002 + vertex -24.103042037166297 187.12097856533296 604.7 + endloop +endfacet +facet normal -0.687064146869468 0.3966766701455844 -0.6087614290087221 + outer loop + vertex -22.44963646078752 186.16638441073135 609.3091883092037 + vertex -172.0780420371657 -73.8557768651064 608.7500000000001 + vertex -172.44963646078705 -73.64123672459925 609.3091883092038 + endloop +endfacet +facet normal -0.687064146869468 0.3966766701455844 -0.6087614290087221 + outer loop + vertex -172.0780420371657 -73.8557768651064 608.7500000000001 + vertex -22.44963646078752 186.16638441073135 609.3091883092037 + vertex -22.078042037166195 185.95184427022414 608.7500000000001 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 -0.13052619222005102 + outer loop + vertex -171.8444480170736 -73.99064243548767 608.098811421777 + vertex -21.764773446948233 185.77097856533308 607.4000000000001 + vertex -171.76477344694774 -74.03664256999745 607.4000000000001 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 -0.13052619222005102 + outer loop + vertex -21.764773446948233 185.77097856533308 607.4000000000001 + vertex -171.8444480170736 -73.99064243548767 608.098811421777 + vertex -21.84444801707412 185.81697869984293 608.0988114217769 + endloop +endfacet +facet normal -0.11303899832182897 0.06526309610998697 -0.9914448613738115 + outer loop + vertex -24.103042037166183 187.1209785653331 610.1 + vertex -173.49785359345225 -73.03604828088585 610.0079997309806 + vertex -174.1030420371657 -72.68664256999745 610.1000000000001 + endloop +endfacet +facet normal -0.11303899832182897 0.06526309610998697 -0.9914448613738115 + outer loop + vertex -173.49785359345225 -73.03604828088585 610.0079997309806 + vertex -24.103042037166183 187.1209785653331 610.1 + vertex -23.49785359345274 186.77157285444477 610.0079997309805 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -166.65522356461958 -76.98664256999763 598.214359353945 + vertex -16.98941369878049 183.01392332925096 598.0545186779375 + vertex -166.9894136987799 -76.79369780607962 598.0545186779376 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -16.98941369878049 183.01392332925096 598.0545186779375 + vertex -166.65522356461958 -76.98664256999763 598.214359353945 + vertex -16.655223564620155 182.8209785653329 598.2143593539449 + endloop +endfacet +facet normal 0.6870641468694714 -0.39667667014558067 0.6087614290087208 + outer loop + vertex -175.75644761354442 -71.73204841539578 605.4908116907965 + vertex -26.128042037166335 188.29011286044195 606.0500000000001 + vertex -176.1280420371658 -71.51750827488864 606.0500000000002 + endloop +endfacet +facet normal 0.6870641468694714 -0.39667667014558067 0.6087614290087208 + outer loop + vertex -26.128042037166335 188.29011286044195 606.0500000000001 + vertex -175.75644761354442 -71.73204841539578 605.4908116907965 + vertex -25.75644761354496 188.07557271993477 605.4908116907964 + endloop +endfacet +facet normal -0.5272028623656435 0.3043807145043646 0.7933533402912507 + outer loop + vertex -166.36824799053383 -77.1523279949468 598.4686291501016 + vertex -16.655223564620155 182.8209785653329 598.2143593539449 + vertex -166.65522356461958 -76.98664256999763 598.214359353945 + endloop +endfacet +facet normal -0.5272028623656435 0.3043807145043646 0.7933533402912507 + outer loop + vertex -16.655223564620155 182.8209785653329 598.2143593539449 + vertex -166.36824799053383 -77.1523279949468 598.4686291501016 + vertex -16.36824799053443 182.6552931403837 598.4686291501016 + endloop +endfacet +facet normal 0.33141357403559235 -0.19134171618249016 0.923879532511298 + outer loop + vertex -167.7066740765144 -76.3795873339156 598.0545186779376 + vertex -18.04086421067524 183.6209785653329 598.2143593539449 + vertex -168.04086421067473 -76.18664256999767 598.214359353945 + endloop +endfacet +facet normal 0.33141357403559235 -0.19134171618249016 0.923879532511298 + outer loop + vertex -18.04086421067524 183.6209785653329 598.2143593539449 + vertex -167.7066740765144 -76.3795873339156 598.0545186779376 + vertex -17.706674076514883 183.42803380141493 598.0545186779375 + endloop +endfacet +facet normal -0.5272028623656518 0.3043807145043581 0.7933533402912477 + outer loop + vertex -172.44963646078708 -73.64123672459937 605.4908116907965 + vertex -22.933907742057286 186.44597856533298 605.061731409782 + vertex -172.93390774205676 -73.36164256999754 605.0617314097822 + endloop +endfacet +facet normal -0.5272028623656518 0.3043807145043581 0.7933533402912477 + outer loop + vertex -22.933907742057286 186.44597856533298 605.061731409782 + vertex -172.44963646078708 -73.64123672459937 605.4908116907965 + vertex -22.449636460787655 186.16638441073113 605.4908116907964 + endloop +endfacet +facet normal -0.3314135740355922 0.19134171618256895 0.9238795325112817 + outer loop + vertex -172.93390774205676 -73.36164256999754 605.0617314097822 + vertex -23.497853593452852 186.77157285444454 604.7920002690196 + vertex -173.4978535934523 -73.03604828088599 604.7920002690196 + endloop +endfacet +facet normal -0.3314135740355922 0.19134171618256895 0.9238795325112817 + outer loop + vertex -23.497853593452852 186.77157285444454 604.7920002690196 + vertex -172.93390774205676 -73.36164256999754 605.0617314097822 + vertex -22.933907742057286 186.44597856533298 605.061731409782 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 0.1305261922200513 + outer loop + vertex -21.764773446948233 185.77097856533308 607.4000000000001 + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + vertex -171.76477344694774 -74.03664256999745 607.4000000000001 + endloop +endfacet +facet normal -0.8586164364012803 0.49572243068687194 0.1305261922200513 + outer loop + vertex -171.84444801707363 -73.9906424354877 606.7011885782233 + vertex -21.764773446948233 185.77097856533308 607.4000000000001 + vertex -21.844448017074143 185.81697869984282 606.7011885782233 + endloop +endfacet +facet normal 0.8586164364012798 -0.49572243068687166 -0.13052619222005538 + outer loop + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + endloop +endfacet +facet normal 0.8586164364012798 -0.49572243068687166 -0.13052619222005538 + outer loop + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -165.47229709936798 -77.6696054831421 598.1411809548977 + vertex -15.47229709936849 182.13801565218841 598.1411809548975 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -16.14804388764763 182.52815824230544 598.8 + vertex -166.36824799053383 -77.1523279949468 598.4686291501016 + vertex -166.1480438876471 -77.27946289302511 598.8000000000001 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -166.36824799053383 -77.1523279949468 598.4686291501016 + vertex -16.14804388764763 182.52815824230544 598.8 + vertex -16.36824799053443 182.6552931403837 598.4686291501016 + endloop +endfacet +facet normal 0.3314135740356219 -0.19134171618251283 0.9238795325112827 + outer loop + vertex -174.70823048087922 -72.33723685910924 604.7920002690196 + vertex -25.272176332275308 187.79597856533294 605.061731409782 + vertex -175.2721763322748 -72.01164256999762 605.0617314097822 + endloop +endfacet +facet normal 0.3314135740356219 -0.19134171618251283 0.9238795325112827 + outer loop + vertex -25.272176332275308 187.79597856533294 605.061731409782 + vertex -174.70823048087922 -72.33723685910924 604.7920002690196 + vertex -24.70823048087974 187.47038427622132 604.7920002690196 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -18.040864210675174 183.620978565333 600.9856406460551 + vertex -167.7066740765143 -76.37958733391552 601.1454813220627 + vertex -168.04086421067464 -76.18664256999756 600.9856406460553 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -167.7066740765143 -76.37958733391552 601.1454813220627 + vertex -18.040864210675174 183.620978565333 600.9856406460551 + vertex -17.70667407651486 183.42803380141498 601.1454813220626 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -17.34804388764763 183.22097856533298 601.2 + vertex -166.98941369877988 -76.79369780607954 601.1454813220627 + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -166.98941369877988 -76.79369780607954 601.1454813220627 + vertex -17.34804388764763 183.22097856533298 601.2 + vertex -16.989413698780353 183.013923329251 601.1454813220626 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868809 -0.1305261922200438 + outer loop + vertex -16.009617801667087 182.44823790430183 600.014110472164 + vertex -165.96240324159197 -77.38664256999755 599.6 + vertex -166.0096178016666 -77.35938323102881 600.0141104721641 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868809 -0.1305261922200438 + outer loop + vertex -165.96240324159197 -77.38664256999755 599.6 + vertex -16.009617801667087 182.44823790430183 600.014110472164 + vertex -15.9624032415925 182.4209785653331 599.6 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -18.73368453370276 184.020978565333 599.6 + vertex -168.68646997362762 -75.81390190896636 600.0141104721642 + vertex -168.73368453370225 -75.78664256999762 599.6000000000001 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -168.68646997362762 -75.81390190896636 600.0141104721642 + vertex -18.73368453370276 184.020978565333 599.6 + vertex -18.686469973628128 183.99371922636428 600.0141104721641 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -18.327839784760943 183.78666399028216 598.4686291501016 + vertex -168.54804388764717 -75.89382224697007 598.8000000000002 + vertex -168.32783978476044 -76.0209571450484 598.4686291501016 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -168.54804388764717 -75.89382224697007 598.8000000000002 + vertex -18.327839784760943 183.78666399028216 598.4686291501016 + vertex -18.54804388764774 183.91379888836042 598.8000000000001 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -16.009617801666817 182.44823790430226 615.6141104721642 + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -16.009617801666817 182.44823790430226 615.6141104721642 + vertex -15.962403241592297 182.42097856533346 615.2 + endloop +endfacet +facet normal -0.5272028623657163 0.3043807145043165 -0.7933533402912205 + outer loop + vertex -16.655223564620066 182.82097856533304 600.9856406460551 + vertex -166.36824799053383 -77.15232799494673 600.7313708498986 + vertex -166.65522356461955 -76.98664256999751 600.9856406460552 + endloop +endfacet +facet normal -0.5272028623657163 0.3043807145043165 -0.7933533402912205 + outer loop + vertex -166.36824799053383 -77.15232799494673 600.7313708498986 + vertex -16.655223564620066 182.82097856533304 600.9856406460551 + vertex -16.368247990534297 182.65529314038383 600.7313708498986 + endloop +endfacet +facet normal 0.11303899832176201 -0.06526309611003285 -0.991444861373816 + outer loop + vertex -17.70667407651486 183.42803380141498 601.1454813220626 + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + vertex -167.7066740765143 -76.37958733391552 601.1454813220627 + endloop +endfacet +facet normal 0.11303899832176201 -0.06526309611003285 -0.991444861373816 + outer loop + vertex -167.34804388764707 -76.58664256999752 601.2000000000002 + vertex -17.70667407651486 183.42803380141498 601.1454813220626 + vertex -17.34804388764763 183.22097856533298 601.2 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -165.96240324159197 -77.38664256999755 599.6 + vertex -16.009617801667087 182.4482379043018 599.185889527836 + vertex -166.00961780166662 -77.35938323102883 599.1858895278361 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -16.009617801667087 182.4482379043018 599.185889527836 + vertex -165.96240324159197 -77.38664256999755 599.6 + vertex -15.9624032415925 182.4209785653331 599.6 + endloop +endfacet +facet normal 0.3314135740355431 -0.1913417161825406 -0.9238795325113052 + outer loop + vertex -18.0408642106749 183.62097856533347 616.5856406460551 + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + endloop +endfacet +facet normal 0.3314135740355431 -0.1913417161825406 -0.9238795325113052 + outer loop + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + vertex -18.0408642106749 183.62097856533347 616.5856406460551 + vertex -17.706674076514545 183.42803380141552 616.7454813220626 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -166.36824799053383 -77.15232799494673 600.7313708498986 + vertex -16.14804388764759 182.52815824230547 600.4000000000001 + vertex -166.14804388764708 -77.27946289302508 600.4000000000002 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -16.14804388764759 182.52815824230547 600.4000000000001 + vertex -166.36824799053383 -77.15232799494673 600.7313708498986 + vertex -16.368247990534297 182.65529314038383 600.7313708498986 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -16.148043887647408 182.52815824230598 616.0 + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -16.148043887647408 182.52815824230598 616.0 + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -16.368247990534048 182.6552931403843 616.3313708498985 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -18.733684533702558 184.0209785653334 615.2 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -18.733684533702558 184.0209785653334 615.2 + vertex -18.686469973627858 183.99371922636468 615.6141104721642 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -16.989413698780083 183.01392332925155 616.7454813220626 + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + vertex -16.989413698780083 183.01392332925155 616.7454813220626 + vertex -16.65522356461977 182.82097856533352 616.5856406460551 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + vertex -16.009617801666817 182.44823790430226 615.6141104721642 + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -16.009617801666817 182.44823790430226 615.6141104721642 + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + vertex -16.148043887647408 182.52815824230598 616.0 + endloop +endfacet +facet normal -0.33141357403559024 0.19134171618248894 -0.923879532511299 + outer loop + vertex -16.989413698780353 183.013923329251 601.1454813220626 + vertex -166.65522356461955 -76.98664256999751 600.9856406460552 + vertex -166.98941369877988 -76.79369780607954 601.1454813220627 + endloop +endfacet +facet normal -0.33141357403559024 0.19134171618248894 -0.923879532511299 + outer loop + vertex -166.65522356461955 -76.98664256999751 600.9856406460552 + vertex -16.989413698780353 183.013923329251 601.1454813220626 + vertex -16.655223564620066 182.82097856533304 600.9856406460551 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -18.32783978476092 183.78666399028225 600.7313708498986 + vertex -168.04086421067464 -76.18664256999756 600.9856406460553 + vertex -168.32783978476039 -76.02095714504833 600.7313708498987 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -168.04086421067464 -76.18664256999756 600.9856406460553 + vertex -18.32783978476092 183.78666399028225 600.7313708498986 + vertex -18.040864210675174 183.620978565333 600.9856406460551 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -16.009617801666884 182.44823790430226 614.785889527836 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -16.009617801666884 182.44823790430226 614.785889527836 + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -15.962403241592297 182.42097856533346 615.2 + endloop +endfacet +facet normal 0.5272028623656568 -0.30438071450436105 -0.7933533402912432 + outer loop + vertex -18.327839784760627 183.78666399028273 616.3313708498986 + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + endloop +endfacet +facet normal 0.5272028623656568 -0.30438071450436105 -0.7933533402912432 + outer loop + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + vertex -18.327839784760627 183.78666399028273 616.3313708498986 + vertex -18.0408642106749 183.62097856533347 616.5856406460551 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -18.686469973627858 183.99371922636468 615.6141104721642 + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + vertex -18.686469973627858 183.99371922636468 615.6141104721642 + vertex -18.54804388764745 183.91379888836096 616.0 + endloop +endfacet +facet normal 0.8586164364012763 -0.4957224306868808 0.1305261922200434 + outer loop + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + vertex -18.73368453370276 184.020978565333 599.6 + vertex -168.73368453370225 -75.78664256999762 599.6000000000001 + endloop +endfacet +facet normal 0.8586164364012763 -0.4957224306868808 0.1305261922200434 + outer loop + vertex -18.73368453370276 184.020978565333 599.6 + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + vertex -18.68646997362817 183.99371922636422 599.185889527836 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -18.686469973628128 183.99371922636428 600.0141104721641 + vertex -168.54804388764714 -75.89382224697005 600.4000000000002 + vertex -168.68646997362762 -75.81390190896636 600.0141104721642 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -168.54804388764714 -75.89382224697005 600.4000000000002 + vertex -18.686469973628128 183.99371922636428 600.0141104721641 + vertex -18.548043887647626 183.91379888836056 600.4000000000001 + endloop +endfacet +facet normal -0.8001031451913012 0.4619397662555992 -0.38268343236506847 + outer loop + vertex -166.14804388764708 -77.27946289302508 600.4000000000002 + vertex -16.009617801667087 182.44823790430183 600.014110472164 + vertex -166.0096178016666 -77.35938323102881 600.0141104721641 + endloop +endfacet +facet normal -0.8001031451913012 0.4619397662555992 -0.38268343236506847 + outer loop + vertex -16.009617801667087 182.44823790430183 600.014110472164 + vertex -166.14804388764708 -77.27946289302508 600.4000000000002 + vertex -16.14804388764759 182.52815824230547 600.4000000000001 + endloop +endfacet +facet normal 0.11303899832181014 -0.06526309611005923 -0.9914448613738089 + outer loop + vertex -17.706674076514545 183.42803380141552 616.7454813220626 + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + endloop +endfacet +facet normal 0.11303899832181014 -0.06526309611005923 -0.9914448613738089 + outer loop + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + vertex -17.706674076514545 183.42803380141552 616.7454813220626 + vertex -17.348043887647314 183.2209785653335 616.8000000000001 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -17.348043887647314 183.2209785653335 616.8000000000001 + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + vertex -17.348043887647314 183.2209785653335 616.8000000000001 + vertex -16.989413698780083 183.01392332925155 616.7454813220626 + endloop +endfacet +facet normal 0.8001031451912916 -0.46193976625560496 0.38268343236508173 + outer loop + vertex -18.54804388764774 183.91379888836042 598.8000000000001 + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + vertex -168.54804388764717 -75.89382224697007 598.8000000000002 + endloop +endfacet +facet normal 0.8001031451912916 -0.46193976625560496 0.38268343236508173 + outer loop + vertex -168.68646997362765 -75.81390190896637 599.1858895278361 + vertex -18.54804388764774 183.91379888836042 598.8000000000001 + vertex -18.68646997362817 183.99371922636422 599.185889527836 + endloop +endfacet +facet normal 0.5272028623657087 -0.3043807145043233 0.7933533402912231 + outer loop + vertex -168.04086421067473 -76.18664256999767 598.214359353945 + vertex -18.327839784760943 183.78666399028216 598.4686291501016 + vertex -168.32783978476044 -76.0209571450484 598.4686291501016 + endloop +endfacet +facet normal 0.5272028623657087 -0.3043807145043233 0.7933533402912231 + outer loop + vertex -18.327839784760943 183.78666399028216 598.4686291501016 + vertex -168.04086421067473 -76.18664256999767 598.214359353945 + vertex -18.04086421067524 183.6209785653329 598.2143593539449 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -16.65522356461977 182.82097856533352 616.5856406460551 + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -16.65522356461977 182.82097856533352 616.5856406460551 + vertex -16.368247990534048 182.6552931403843 616.3313708498985 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -16.009617801667087 182.4482379043018 599.185889527836 + vertex -166.1480438876471 -77.27946289302511 598.8000000000001 + vertex -166.00961780166662 -77.35938323102883 599.1858895278361 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -166.1480438876471 -77.27946289302511 598.8000000000001 + vertex -16.009617801667087 182.4482379043018 599.185889527836 + vertex -16.14804388764763 182.52815824230544 598.8 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -16.009617801666884 182.44823790430226 614.785889527836 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + vertex -16.009617801666884 182.44823790430226 614.785889527836 + vertex -16.148043887647408 182.52815824230586 614.4000000000001 + endloop +endfacet +facet normal 0.6870641468694545 -0.39667667014561614 -0.6087614290087167 + outer loop + vertex -18.54804388764745 183.91379888836096 616.0 + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + endloop +endfacet +facet normal 0.6870641468694545 -0.39667667014561614 -0.6087614290087167 + outer loop + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + vertex -18.54804388764745 183.91379888836096 616.0 + vertex -18.327839784760627 183.78666399028273 616.3313708498986 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -18.548043887647626 183.91379888836056 600.4000000000001 + vertex -168.32783978476039 -76.02095714504833 600.7313708498987 + vertex -168.54804388764714 -75.89382224697005 600.4000000000002 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -168.32783978476039 -76.02095714504833 600.7313708498987 + vertex -18.548043887647626 183.91379888836056 600.4000000000001 + vertex -18.32783978476092 183.78666399028225 600.7313708498986 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -182.24368083273947 -67.9866425699975 615.2000000000002 + vertex -32.19646627266537 191.79371922636432 615.6141104721642 + vertex -182.19646627266485 -68.01390190896625 615.6141104721642 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.13052619222006182 + outer loop + vertex -32.19646627266537 191.79371922636432 615.6141104721642 + vertex -182.24368083273947 -67.9866425699975 615.2000000000002 + vertex -32.243680832740026 191.82097856533298 615.2 + endloop +endfacet +facet normal -0.5272028623657087 0.3043807145043233 -0.7933533402912231 + outer loop + vertex -30.165219863657242 190.6209785653331 616.5856406460551 + vertex -179.878244289571 -69.35232799494665 616.3313708498987 + vertex -180.16521986365672 -69.18664256999742 616.5856406460553 + endloop +endfacet +facet normal -0.5272028623657087 0.3043807145043233 -0.7933533402912231 + outer loop + vertex -179.878244289571 -69.35232799494665 616.3313708498987 + vertex -30.165219863657242 190.6209785653331 616.5856406460551 + vertex -29.87824428957154 190.4552931403839 616.3313708498986 + endloop +endfacet +facet normal 0.331413574035631 -0.19134171618251528 0.9238795325112789 + outer loop + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + vertex -18.040864210674947 183.62097856533344 613.814359353945 + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + endloop +endfacet +facet normal 0.331413574035631 -0.19134171618251528 0.9238795325112789 + outer loop + vertex -18.040864210674947 183.62097856533344 613.814359353945 + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + vertex -17.70667407651468 183.42803380141538 613.6545186779375 + endloop +endfacet +facet normal -0.5272028623656505 0.3043807145043517 0.7933533402912508 + outer loop + vertex -179.87824428957106 -69.35232799494672 614.0686291501016 + vertex -30.16521986365731 190.62097856533308 613.814359353945 + vertex -180.1652198636568 -69.1866425699975 613.814359353945 + endloop +endfacet +facet normal -0.5272028623656505 0.3043807145043517 0.7933533402912508 + outer loop + vertex -30.16521986365731 190.62097856533308 613.814359353945 + vertex -179.87824428957106 -69.35232799494672 614.0686291501016 + vertex -29.878244289571587 190.45529314038384 614.0686291501015 + endloop +endfacet +facet normal -0.5272028623656863 0.30438071450437804 0.7933533402912171 + outer loop + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -16.655223564619817 182.82097856533343 613.814359353945 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + endloop +endfacet +facet normal -0.5272028623656863 0.30438071450437804 0.7933533402912171 + outer loop + vertex -16.655223564619817 182.82097856533343 613.814359353945 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -16.368247990534094 182.65529314038423 614.0686291501015 + endloop +endfacet +facet normal 0.6870641468694759 -0.39667667014558894 0.6087614290087102 + outer loop + vertex -18.327839784760762 183.78666399028262 614.0686291501016 + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + endloop +endfacet +facet normal 0.6870641468694759 -0.39667667014558894 0.6087614290087102 + outer loop + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -18.327839784760762 183.78666399028262 614.0686291501016 + vertex -18.548043887647424 183.91379888836096 614.4000000000001 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -31.550860509712418 191.42097856533306 616.5856406460551 + vertex -181.2166703755515 -68.57958733391541 616.7454813220627 + vertex -181.55086050971187 -68.38664256999745 616.5856406460553 + endloop +endfacet +facet normal 0.3314135740355987 -0.1913417161825699 -0.9238795325112792 + outer loop + vertex -181.2166703755515 -68.57958733391541 616.7454813220627 + vertex -31.550860509712418 191.42097856533306 616.5856406460551 + vertex -31.21667037555206 191.22803380141514 616.7454813220626 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -32.05804018668489 191.71379888836057 616.0 + vertex -181.83783608379758 -68.22095714504822 616.3313708498987 + vertex -182.05804018668434 -68.09382224696995 616.0000000000001 + endloop +endfacet +facet normal 0.6870641468694428 -0.39667667014560937 -0.6087614290087343 + outer loop + vertex -181.83783608379758 -68.22095714504822 616.3313708498987 + vertex -32.05804018668489 191.71379888836057 616.0 + vertex -31.837836083798095 191.58666399028237 616.3313708498986 + endloop +endfacet +facet normal -0.33141357403559235 0.19134171618249016 -0.923879532511298 + outer loop + vertex -30.499409997817644 190.81392332925108 616.7454813220626 + vertex -180.16521986365672 -69.18664256999742 616.5856406460553 + vertex -180.49940999781703 -68.99369780607941 616.7454813220626 + endloop +endfacet +facet normal -0.33141357403559235 0.19134171618249016 -0.923879532511298 + outer loop + vertex -180.16521986365672 -69.18664256999742 616.5856406460553 + vertex -30.499409997817644 190.81392332925108 616.7454813220626 + vertex -30.165219863657242 190.6209785653331 616.5856406460551 + endloop +endfacet +facet normal -0.11303899832180345 0.06526309611005678 0.9914448613738097 + outer loop + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + vertex -17.348043887647428 183.2209785653335 613.6 + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + endloop +endfacet +facet normal -0.11303899832180345 0.06526309611005678 0.9914448613738097 + outer loop + vertex -17.348043887647428 183.2209785653335 613.6 + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + vertex -16.989413698780176 183.0139233292514 613.6545186779375 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -179.878244289571 -69.35232799494665 616.3313708498987 + vertex -29.658040186684875 190.32815824230553 616.0 + vertex -179.65804018668427 -69.47946289302497 616.0000000000001 + endloop +endfacet +facet normal -0.6870641468694699 0.39667667014557983 -0.608761429008723 + outer loop + vertex -29.658040186684875 190.32815824230553 616.0 + vertex -179.878244289571 -69.35232799494665 616.3313708498987 + vertex -29.87824428957154 190.4552931403839 616.3313708498986 + endloop +endfacet +facet normal -0.8001031451912916 0.46193976625560496 -0.38268343236508173 + outer loop + vertex -179.65804018668427 -69.47946289302497 616.0000000000001 + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -179.51961410070382 -69.55938323102869 615.6141104721642 + endloop +endfacet +facet normal -0.8001031451912916 0.46193976625560496 -0.38268343236508173 + outer loop + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -179.65804018668427 -69.47946289302497 616.0000000000001 + vertex -29.658040186684875 190.32815824230553 616.0 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868808 -0.1305261922200434 + outer loop + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -179.4723995406292 -69.58664256999745 615.2000000000002 + vertex -179.51961410070382 -69.55938323102869 615.6141104721642 + endloop +endfacet +facet normal -0.8586164364012763 0.4957224306868808 -0.1305261922200434 + outer loop + vertex -179.4723995406292 -69.58664256999745 615.2000000000002 + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -29.472399540629766 190.22097856533307 615.2 + endloop +endfacet +facet normal -0.6870641468694373 0.39667667014560615 0.6087614290087427 + outer loop + vertex -16.148043887647408 182.52815824230586 614.4000000000001 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + endloop +endfacet +facet normal -0.6870641468694373 0.39667667014560615 0.6087614290087427 + outer loop + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -16.148043887647408 182.52815824230586 614.4000000000001 + vertex -16.368247990534094 182.65529314038423 614.0686291501015 + endloop +endfacet +facet normal 0.85861643640128 -0.4957224306868831 0.13052619222001063 + outer loop + vertex -18.6864699736279 183.99371922636473 614.785889527836 + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + endloop +endfacet +facet normal 0.85861643640128 -0.4957224306868831 0.13052619222001063 + outer loop + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + vertex -18.6864699736279 183.99371922636473 614.785889527836 + vertex -18.733684533702558 184.0209785653334 615.2 + endloop +endfacet +facet normal 0.33141357403559024 -0.19134171618248894 0.923879532511299 + outer loop + vertex -181.21667037555162 -68.57958733391551 613.6545186779376 + vertex -31.550860509712486 191.42097856533303 613.814359353945 + vertex -181.55086050971195 -68.38664256999753 613.814359353945 + endloop +endfacet +facet normal 0.33141357403559024 -0.19134171618248894 0.923879532511299 + outer loop + vertex -31.550860509712486 191.42097856533303 613.814359353945 + vertex -181.21667037555162 -68.57958733391551 613.6545186779376 + vertex -31.216670375552127 191.22803380141505 613.6545186779375 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -31.83783608379821 191.58666399028218 614.0686291501016 + vertex -182.0580401866844 -68.09382224696996 614.4000000000001 + vertex -181.83783608379764 -68.22095714504829 614.0686291501017 + endloop +endfacet +facet normal 0.6870641468694699 -0.39667667014557983 0.608761429008723 + outer loop + vertex -182.0580401866844 -68.09382224696996 614.4000000000001 + vertex -31.83783608379821 191.58666399028218 614.0686291501016 + vertex -32.05804018668489 191.71379888836057 614.4000000000001 + endloop +endfacet +facet normal -0.11303899832184437 0.06526309610999445 -0.9914448613738092 + outer loop + vertex -30.858040186684853 191.02097856533317 616.8000000000001 + vertex -180.49940999781703 -68.99369780607941 616.7454813220626 + vertex -180.85804018668432 -68.78664256999744 616.8000000000002 + endloop +endfacet +facet normal -0.11303899832184437 0.06526309610999445 -0.9914448613738092 + outer loop + vertex -180.49940999781703 -68.99369780607941 616.7454813220626 + vertex -30.858040186684853 191.02097856533317 616.8000000000001 + vertex -30.499409997817644 190.81392332925108 616.7454813220626 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -29.658040186684833 190.32815824230553 614.4000000000001 + vertex -179.87824428957106 -69.35232799494672 614.0686291501016 + vertex -179.65804018668433 -69.47946289302502 614.4000000000001 + endloop +endfacet +facet normal -0.6870641468694428 0.39667667014560937 0.6087614290087343 + outer loop + vertex -179.87824428957106 -69.35232799494672 614.0686291501016 + vertex -29.658040186684833 190.32815824230553 614.4000000000001 + vertex -29.878244289571587 190.45529314038384 614.0686291501015 + endloop +endfacet +facet normal 0.5272028623657163 -0.3043807145043165 0.7933533402912205 + outer loop + vertex -181.55086050971195 -68.38664256999753 613.814359353945 + vertex -31.83783608379821 191.58666399028218 614.0686291501016 + vertex -181.83783608379764 -68.22095714504829 614.0686291501017 + endloop +endfacet +facet normal 0.5272028623657163 -0.3043807145043165 0.7933533402912205 + outer loop + vertex -31.83783608379821 191.58666399028218 614.0686291501016 + vertex -181.55086050971195 -68.38664256999753 613.814359353945 + vertex -31.550860509712486 191.42097856533303 613.814359353945 + endloop +endfacet +facet normal -0.33141357403555843 0.19134171618255227 0.9238795325112973 + outer loop + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + vertex -16.989413698780176 183.0139233292514 613.6545186779375 + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + endloop +endfacet +facet normal -0.33141357403555843 0.19134171618255227 0.9238795325112973 + outer loop + vertex -16.989413698780176 183.0139233292514 613.6545186779375 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + vertex -16.655223564619817 182.82097856533343 613.814359353945 + endloop +endfacet +facet normal 0.5272028623657142 -0.3043807145043265 0.7933533402912182 + outer loop + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + vertex -18.327839784760762 183.78666399028262 614.0686291501016 + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + endloop +endfacet +facet normal 0.5272028623657142 -0.3043807145043265 0.7933533402912182 + outer loop + vertex -18.327839784760762 183.78666399028262 614.0686291501016 + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + vertex -18.040864210674947 183.62097856533344 613.814359353945 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -32.19646627266537 191.79371922636432 615.6141104721642 + vertex -182.05804018668434 -68.09382224696995 616.0000000000001 + vertex -182.19646627266485 -68.01390190896625 615.6141104721642 + endloop +endfacet +facet normal 0.8001031451912762 -0.4619397662556186 -0.3826834323650973 + outer loop + vertex -182.05804018668434 -68.09382224696995 616.0000000000001 + vertex -32.19646627266537 191.79371922636432 615.6141104721642 + vertex -32.05804018668489 191.71379888836057 616.0 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -29.472399540629766 190.22097856533307 615.2 + vertex -179.51961410070382 -69.5593832310287 614.785889527836 + vertex -179.4723995406292 -69.58664256999745 615.2000000000002 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -179.51961410070382 -69.5593832310287 614.785889527836 + vertex -29.472399540629766 190.22097856533307 615.2 + vertex -29.51961410070433 190.24823790430182 614.785889527836 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -31.837836083798095 191.58666399028237 616.3313708498986 + vertex -181.55086050971187 -68.38664256999745 616.5856406460553 + vertex -181.83783608379758 -68.22095714504822 616.3313708498987 + endloop +endfacet +facet normal 0.5272028623656435 -0.3043807145043646 -0.7933533402912507 + outer loop + vertex -181.55086050971187 -68.38664256999745 616.5856406460553 + vertex -31.837836083798095 191.58666399028237 616.3313708498986 + vertex -31.550860509712418 191.42097856533306 616.5856406460551 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -180.85804018668438 -68.78664256999751 613.6000000000001 + vertex -31.216670375552127 191.22803380141505 613.6545186779375 + vertex -181.21667037555162 -68.57958733391551 613.6545186779376 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -31.216670375552127 191.22803380141505 613.6545186779375 + vertex -180.85804018668438 -68.78664256999751 613.6000000000001 + vertex -30.858040186684896 191.02097856533302 613.6 + endloop +endfacet +facet normal 0.8586164364012764 -0.49572243068688093 0.13052619222004297 + outer loop + vertex -32.19646627266537 191.79371922636426 614.785889527836 + vertex -182.24368083273947 -67.9866425699975 615.2000000000002 + vertex -182.19646627266488 -68.01390190896626 614.7858895278362 + endloop +endfacet +facet normal 0.8586164364012764 -0.49572243068688093 0.13052619222004297 + outer loop + vertex -182.24368083273947 -67.9866425699975 615.2000000000002 + vertex -32.19646627266537 191.79371922636426 614.785889527836 + vertex -32.243680832740026 191.82097856533298 615.2 + endloop +endfacet +facet normal 0.8001031451912812 -0.46193976625559896 0.3826834323651106 + outer loop + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -18.6864699736279 183.99371922636473 614.785889527836 + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + endloop +endfacet +facet normal 0.8001031451912812 -0.46193976625559896 0.3826834323651106 + outer loop + vertex -18.6864699736279 183.99371922636473 614.785889527836 + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -18.548043887647424 183.91379888836096 614.4000000000001 + endloop +endfacet +facet normal 0.11303899832176335 -0.06526309611003223 -0.9914448613738159 + outer loop + vertex -31.21667037555206 191.22803380141514 616.7454813220626 + vertex -180.85804018668432 -68.78664256999744 616.8000000000002 + vertex -181.2166703755515 -68.57958733391541 616.7454813220627 + endloop +endfacet +facet normal 0.11303899832176335 -0.06526309611003223 -0.9914448613738159 + outer loop + vertex -180.85804018668432 -68.78664256999744 616.8000000000002 + vertex -31.21667037555206 191.22803380141514 616.7454813220626 + vertex -30.858040186684853 191.02097856533317 616.8000000000001 + endloop +endfacet +facet normal 0.8001031451913012 -0.4619397662555992 0.38268343236506847 + outer loop + vertex -32.05804018668489 191.71379888836057 614.4000000000001 + vertex -182.19646627266488 -68.01390190896626 614.7858895278362 + vertex -182.0580401866844 -68.09382224696996 614.4000000000001 + endloop +endfacet +facet normal 0.8001031451913012 -0.4619397662555992 0.38268343236506847 + outer loop + vertex -182.19646627266488 -68.01390190896626 614.7858895278362 + vertex -32.05804018668489 191.71379888836057 614.4000000000001 + vertex -32.19646627266537 191.79371922636426 614.785889527836 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -29.51961410070433 190.24823790430182 614.785889527836 + vertex -179.65804018668433 -69.47946289302502 614.4000000000001 + vertex -179.51961410070382 -69.5593832310287 614.785889527836 + endloop +endfacet +facet normal -0.8001031451912762 0.4619397662556186 0.3826834323650973 + outer loop + vertex -179.65804018668433 -69.47946289302502 614.4000000000001 + vertex -29.51961410070433 190.24823790430182 614.785889527836 + vertex -29.658040186684833 190.32815824230553 614.4000000000001 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + vertex -17.70667407651468 183.42803380141538 613.6545186779375 + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -17.70667407651468 183.42803380141538 613.6545186779375 + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + vertex -17.348043887647428 183.2209785653335 613.6 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -29.65804018668508 190.3281582423051 600.4000000000001 + vertex -179.51961410070408 -69.55938323102919 600.0141104721642 + vertex -179.65804018668462 -69.47946289302546 600.4000000000002 + endloop +endfacet +facet normal -0.8001031451912812 0.46193976625559896 -0.3826834323651106 + outer loop + vertex -179.51961410070408 -69.55938323102919 600.0141104721642 + vertex -29.65804018668508 190.3281582423051 600.4000000000001 + vertex -29.51961410070458 190.24823790430136 600.0141104721641 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -29.51961410070458 190.24823790430136 600.0141104721641 + vertex -179.47239954062948 -69.58664256999793 599.6000000000001 + vertex -179.51961410070408 -69.55938323102919 600.0141104721642 + endloop +endfacet +facet normal -0.85861643640128 0.4957224306868831 -0.13052619222001063 + outer loop + vertex -179.47239954062948 -69.58664256999793 599.6000000000001 + vertex -29.51961410070458 190.24823790430136 600.0141104721641 + vertex -29.472399540629993 190.22097856533262 599.6 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -29.519614100704626 190.24823790430136 599.185889527836 + vertex -179.65804018668462 -69.4794628930255 598.8000000000002 + vertex -179.5196141007041 -69.5593832310292 599.1858895278361 + endloop +endfacet +facet normal -0.8001031451912887 0.4619397662556257 0.3826834323650627 + outer loop + vertex -179.65804018668462 -69.4794628930255 598.8000000000002 + vertex -29.519614100704626 190.24823790430136 599.185889527836 + vertex -29.65804018668515 190.32815824230505 598.8000000000001 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -29.472399540629993 190.22097856533262 599.6 + vertex -179.5196141007041 -69.5593832310292 599.1858895278361 + vertex -179.47239954062948 -69.58664256999793 599.6000000000001 + endloop +endfacet +facet normal -0.858616436401279 0.4957224306868712 0.13052619222006182 + outer loop + vertex -179.5196141007041 -69.5593832310292 599.1858895278361 + vertex -29.472399540629993 190.22097856533262 599.6 + vertex -29.519614100704626 190.24823790430136 599.185889527836 + endloop +endfacet +facet normal -0.11303899832176201 0.06526309611003285 0.991444861373816 + outer loop + vertex -180.4994099978171 -68.99369780607952 613.6545186779376 + vertex -30.858040186684896 191.02097856533302 613.6 + vertex -180.85804018668438 -68.78664256999751 613.6000000000001 + endloop +endfacet +facet normal -0.11303899832176201 0.06526309611003285 0.991444861373816 + outer loop + vertex -30.858040186684896 191.02097856533302 613.6 + vertex -180.4994099978171 -68.99369780607952 613.6545186779376 + vertex -30.499409997817644 190.81392332925108 613.6545186779375 + endloop +endfacet +facet normal -0.11303899832181014 0.06526309611005923 0.9914448613738089 + outer loop + vertex -180.49940999781742 -68.99369780607998 598.0545186779377 + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + endloop +endfacet +facet normal -0.11303899832181014 0.06526309611005923 0.9914448613738089 + outer loop + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + vertex -180.49940999781742 -68.99369780607998 598.0545186779377 + vertex -30.49940999781794 190.81392332925054 598.0545186779376 + endloop +endfacet +facet normal 0.85861643640128 -0.49572243068688304 0.13052619222001038 + outer loop + vertex -32.19646627266567 191.7937192263638 599.185889527836 + vertex -182.24368083273973 -67.986642569998 599.6000000000001 + vertex -182.19646627266513 -68.01390190896676 599.1858895278361 + endloop +endfacet +facet normal 0.85861643640128 -0.49572243068688304 0.13052619222001038 + outer loop + vertex -182.24368083273973 -67.986642569998 599.6000000000001 + vertex -32.19646627266567 191.7937192263638 599.185889527836 + vertex -32.24368083274032 191.82097856533252 599.6 + endloop +endfacet +facet normal 0.6870641468694346 -0.3966766701456103 -0.6087614290087431 + outer loop + vertex -32.05804018668521 191.7137988883601 600.4000000000001 + vertex -181.83783608379784 -68.2209571450487 600.7313708498987 + vertex -182.05804018668462 -68.09382224697045 600.4000000000002 + endloop +endfacet +facet normal 0.6870641468694346 -0.3966766701456103 -0.6087614290087431 + outer loop + vertex -181.83783608379784 -68.2209571450487 600.7313708498987 + vertex -32.05804018668521 191.7137988883601 600.4000000000001 + vertex -31.83783608379839 191.58666399028183 600.7313708498986 + endloop +endfacet +facet normal -0.3314135740355431 0.1913417161825406 0.9238795325113052 + outer loop + vertex -180.1652198636571 -69.186642569998 598.214359353945 + vertex -30.49940999781794 190.81392332925054 598.0545186779376 + vertex -180.49940999781742 -68.99369780607998 598.0545186779377 + endloop +endfacet +facet normal -0.3314135740355431 0.1913417161825406 0.9238795325113052 + outer loop + vertex -30.49940999781794 190.81392332925054 598.0545186779376 + vertex -180.1652198636571 -69.186642569998 598.214359353945 + vertex -30.16521986365758 190.62097856533256 598.2143593539449 + endloop +endfacet +facet normal 0.5272028623656863 -0.30438071450437804 -0.7933533402912171 + outer loop + vertex -31.83783608379839 191.58666399028183 600.7313708498986 + vertex -181.55086050971215 -68.38664256999796 600.9856406460553 + vertex -181.83783608379784 -68.2209571450487 600.7313708498987 + endloop +endfacet +facet normal 0.5272028623656863 -0.30438071450437804 -0.7933533402912171 + outer loop + vertex -181.55086050971215 -68.38664256999796 600.9856406460553 + vertex -31.83783608379839 191.58666399028183 600.7313708498986 + vertex -31.550860509712663 191.42097856533266 600.9856406460552 + endloop +endfacet +facet normal 0.5272028623656848 -0.30438071450430954 0.7933533402912443 + outer loop + vertex -181.55086050971227 -68.38664256999803 598.214359353945 + vertex -31.837836083798503 191.58666399028175 598.4686291501016 + vertex -181.83783608379792 -68.22095714504879 598.4686291501016 + endloop +endfacet +facet normal 0.5272028623656848 -0.30438071450430954 0.7933533402912443 + outer loop + vertex -31.837836083798503 191.58666399028175 598.4686291501016 + vertex -181.55086050971227 -68.38664256999803 598.214359353945 + vertex -31.55086050971271 191.42097856533258 598.2143593539449 + endloop +endfacet +facet normal 0.11303899832180345 -0.06526309611005678 -0.9914448613738097 + outer loop + vertex -31.216670375552397 191.2280338014146 601.1454813220626 + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + vertex -181.2166703755518 -68.57958733391588 601.1454813220627 + endloop +endfacet +facet normal 0.11303899832180345 -0.06526309611005678 -0.9914448613738097 + outer loop + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + vertex -31.216670375552397 191.2280338014146 601.1454813220626 + vertex -30.858040186685123 191.02097856533257 601.2 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -30.165219863657512 190.6209785653327 600.9856406460552 + vertex -179.87824428957128 -69.35232799494715 600.7313708498986 + vertex -180.165219863657 -69.18664256999789 600.9856406460553 + endloop +endfacet +facet normal -0.5272028623657142 0.3043807145043265 -0.7933533402912182 + outer loop + vertex -179.87824428957128 -69.35232799494715 600.7313708498986 + vertex -30.165219863657512 190.6209785653327 600.9856406460552 + vertex -29.878244289571832 190.4552931403834 600.7313708498986 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -179.87824428957128 -69.35232799494715 600.7313708498986 + vertex -29.65804018668508 190.3281582423051 600.4000000000001 + vertex -179.65804018668462 -69.47946289302546 600.4000000000002 + endloop +endfacet +facet normal -0.6870641468694759 0.39667667014558894 -0.6087614290087102 + outer loop + vertex -29.65804018668508 190.3281582423051 600.4000000000001 + vertex -179.87824428957128 -69.35232799494715 600.7313708498986 + vertex -29.878244289571832 190.4552931403834 600.7313708498986 + endloop +endfacet +facet normal 0.6870641468695006 -0.39667667014558633 0.608761429008684 + outer loop + vertex -31.837836083798503 191.58666399028175 598.4686291501016 + vertex -182.05804018668465 -68.09382224697046 598.8000000000002 + vertex -181.83783608379792 -68.22095714504879 598.4686291501016 + endloop +endfacet +facet normal 0.6870641468695006 -0.39667667014558633 0.608761429008684 + outer loop + vertex -182.05804018668465 -68.09382224697046 598.8000000000002 + vertex -31.837836083798503 191.58666399028175 598.4686291501016 + vertex -32.05804018668523 191.71379888836003 598.8000000000001 + endloop +endfacet +facet normal 0.3314135740356312 -0.1913417161825154 0.9238795325112787 + outer loop + vertex -181.21667037555187 -68.57958733391598 598.0545186779377 + vertex -31.55086050971271 191.42097856533258 598.2143593539449 + vertex -181.55086050971227 -68.38664256999803 598.214359353945 + endloop +endfacet +facet normal 0.3314135740356312 -0.1913417161825154 0.9238795325112787 + outer loop + vertex -31.55086050971271 191.42097856533258 598.2143593539449 + vertex -181.21667037555187 -68.57958733391598 598.0545186779377 + vertex -31.216670375552397 191.22803380141454 598.0545186779376 + endloop +endfacet +facet normal -0.5272028623656586 0.30438071450435644 0.7933533402912438 + outer loop + vertex -179.87824428957134 -69.35232799494719 598.4686291501016 + vertex -30.16521986365758 190.62097856533256 598.2143593539449 + vertex -180.1652198636571 -69.186642569998 598.214359353945 + endloop +endfacet +facet normal -0.5272028623656586 0.30438071450435644 0.7933533402912438 + outer loop + vertex -30.16521986365758 190.62097856533256 598.2143593539449 + vertex -179.87824428957134 -69.35232799494719 598.4686291501016 + vertex -29.878244289571857 190.45529314038336 598.4686291501016 + endloop +endfacet +facet normal 0.8001031451912812 -0.461939766255599 0.38268343236511043 + outer loop + vertex -182.05804018668465 -68.09382224697046 598.8000000000002 + vertex -32.19646627266567 191.7937192263638 599.185889527836 + vertex -182.19646627266513 -68.01390190896676 599.1858895278361 + endloop +endfacet +facet normal 0.8001031451912812 -0.461939766255599 0.38268343236511043 + outer loop + vertex -32.19646627266567 191.7937192263638 599.185889527836 + vertex -182.05804018668465 -68.09382224697046 598.8000000000002 + vertex -32.05804018668523 191.71379888836003 598.8000000000001 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -182.1964662726651 -68.01390190896674 600.0141104721642 + vertex -32.05804018668521 191.7137988883601 600.4000000000001 + vertex -182.05804018668462 -68.09382224697045 600.4000000000002 + endloop +endfacet +facet normal 0.8001031451912887 -0.4619397662556257 -0.3826834323650627 + outer loop + vertex -32.05804018668521 191.7137988883601 600.4000000000001 + vertex -182.1964662726651 -68.01390190896674 600.0141104721642 + vertex -32.19646627266562 191.79371922636386 600.0141104721641 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -180.1652198636568 -69.1866425699975 613.814359353945 + vertex -30.499409997817644 190.81392332925108 613.6545186779375 + vertex -180.4994099978171 -68.99369780607952 613.6545186779376 + endloop +endfacet +facet normal -0.3314135740355987 0.1913417161825699 0.9238795325112792 + outer loop + vertex -30.499409997817644 190.81392332925108 613.6545186779375 + vertex -180.1652198636568 -69.1866425699975 613.814359353945 + vertex -30.16521986365731 190.62097856533308 613.814359353945 + endloop +endfacet +facet normal -0.6870641468694545 0.39667667014561614 0.6087614290087167 + outer loop + vertex -29.65804018668515 190.32815824230505 598.8000000000001 + vertex -179.87824428957134 -69.35232799494719 598.4686291501016 + vertex -179.65804018668462 -69.4794628930255 598.8000000000002 + endloop +endfacet +facet normal -0.6870641468694545 0.39667667014561614 0.6087614290087167 + outer loop + vertex -179.87824428957134 -69.35232799494719 598.4686291501016 + vertex -29.65804018668515 190.32815824230505 598.8000000000001 + vertex -29.878244289571857 190.45529314038336 598.4686291501016 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + vertex -31.216670375552397 191.22803380141454 598.0545186779376 + vertex -181.21667037555187 -68.57958733391598 598.0545186779377 + endloop +endfacet +facet normal 0.11303899832184455 -0.06526309610999596 0.9914448613738092 + outer loop + vertex -31.216670375552397 191.22803380141454 598.0545186779376 + vertex -180.85804018668463 -68.786642569998 598.0000000000001 + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + endloop +endfacet +facet normal 0.33141357403555843 -0.19134171618255227 -0.9238795325112973 + outer loop + vertex -31.550860509712663 191.42097856533266 600.9856406460552 + vertex -181.2166703755518 -68.57958733391588 601.1454813220627 + vertex -181.55086050971215 -68.38664256999796 600.9856406460553 + endloop +endfacet +facet normal 0.33141357403555843 -0.19134171618255227 -0.9238795325112973 + outer loop + vertex -181.2166703755518 -68.57958733391588 601.1454813220627 + vertex -31.550860509712663 191.42097856533266 600.9856406460552 + vertex -31.216670375552397 191.2280338014146 601.1454813220626 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -30.499409997817846 190.81392332925068 601.1454813220626 + vertex -180.165219863657 -69.18664256999789 600.9856406460553 + vertex -180.49940999781734 -68.99369780607992 601.1454813220627 + endloop +endfacet +facet normal -0.331413574035631 0.19134171618251528 -0.9238795325112789 + outer loop + vertex -180.165219863657 -69.18664256999789 600.9856406460553 + vertex -30.499409997817846 190.81392332925068 601.1454813220626 + vertex -30.165219863657512 190.6209785653327 600.9856406460552 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.130526192220062 + outer loop + vertex -182.24368083273973 -67.986642569998 599.6000000000001 + vertex -32.19646627266562 191.79371922636386 600.0141104721641 + vertex -182.1964662726651 -68.01390190896674 600.0141104721642 + endloop +endfacet +facet normal 0.858616436401279 -0.4957224306868712 -0.130526192220062 + outer loop + vertex -32.19646627266562 191.79371922636386 600.0141104721641 + vertex -182.24368083273973 -67.986642569998 599.6000000000001 + vertex -32.24368083274032 191.82097856533252 599.6 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -30.858040186685123 191.02097856533257 601.2 + vertex -180.49940999781734 -68.99369780607992 601.1454813220627 + vertex -180.85804018668452 -68.7866425699979 601.2000000000002 + endloop +endfacet +facet normal -0.11303899832184455 0.06526309610999596 -0.9914448613738092 + outer loop + vertex -180.49940999781734 -68.99369780607992 601.1454813220627 + vertex -30.858040186685123 191.02097856533257 601.2 + vertex -30.499409997817846 190.81392332925068 601.1454813220626 + endloop +endfacet +facet normal -0.8586164364012798 0.49572243068687166 0.13052619222005538 + outer loop + vertex -32.73378697496399 192.1039414784776 616.6588190451026 + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -182.7337869749635 -67.70367965685296 616.6588190451026 + endloop +endfacet +facet normal -0.8586164364012798 0.49572243068687166 0.13052619222005538 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -32.73378697496399 192.1039414784776 616.6588190451026 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 1.5003536199769236e-15 + outer loop + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -32.7632960750107 192.12097856533296 611.2 + vertex -182.76329607501023 -67.68664256999767 611.2000000000002 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 1.5003536199769236e-15 + outer loop + vertex -32.7632960750107 192.12097856533296 611.2 + vertex -182.76329607501015 -67.68664256999749 616.4000000000001 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -4.464960093105168e-15 + outer loop + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -182.41688591349643 -67.88664256999766 610.8000000000002 + vertex -182.41688591349643 -67.88664256999765 611.2000000000002 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -4.464960093105168e-15 + outer loop + vertex -182.41688591349643 -67.88664256999766 610.8000000000002 + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -32.416885913497005 191.92097856533286 610.8000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -179.44268224691524 -69.60379985752284 613.0000000000002 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -179.44268224691524 -69.60379985752284 613.0000000000002 + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + endloop +endfacet +facet normal -0.8001031451912832 0.46193976625562266 0.3826834323650778 + outer loop + vertex -32.64727067122619 192.0539912672253 616.9 + vertex -182.7337869749635 -67.70367965685296 616.6588190451026 + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + endloop +endfacet +facet normal -0.8001031451912832 0.46193976625562266 0.3826834323650778 + outer loop + vertex -182.7337869749635 -67.70367965685296 616.6588190451026 + vertex -32.64727067122619 192.0539912672253 616.9 + vertex -32.73378697496399 192.1039414784776 616.6588190451026 + endloop +endfacet +facet normal -0.6123724356958127 0.353553390593238 -0.7071067811865498 + outer loop + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -179.44268224691524 -69.60379985752284 613.0000000000002 + endloop +endfacet +facet normal -0.6123724356958127 0.353553390593238 -0.7071067811865498 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + endloop +endfacet +facet normal -3.1938264052337434e-15 -3.9640061956236146e-14 -1.0 + outer loop + vertex -32.416885913497005 191.92097856533286 610.8000000000001 + vertex -181.2044503481982 -68.58664256999764 610.8000000000002 + vertex -182.41688591349643 -67.88664256999766 610.8000000000002 + endloop +endfacet +facet normal -3.1938264052337434e-15 -3.9640061956236146e-14 -1.0 + outer loop + vertex -181.2044503481982 -68.58664256999764 610.8000000000002 + vertex -32.416885913497005 191.92097856533286 610.8000000000001 + vertex -31.2044503481987 191.22097856533293 610.8000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -32.7632960750107 192.12097856533296 611.2 + vertex -182.41688591349643 -67.88664256999765 611.2000000000002 + vertex -182.76329607501023 -67.68664256999767 611.2000000000002 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -182.41688591349643 -67.88664256999765 611.2000000000002 + vertex -32.7632960750107 192.12097856533296 611.2 + vertex -32.41688591349694 191.92097856533292 611.2 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -181.2044503481982 -68.58664256999764 610.8000000000002 + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -181.20445034819815 -68.58664256999758 613.0000000000002 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -181.2044503481982 -68.58664256999764 610.8000000000002 + vertex -31.2044503481987 191.22097856533293 610.8000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -1.052465433482836e-15 + outer loop + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -177.30733603116826 -70.83664256999775 604.2656854249494 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -1.052465433482836e-15 + outer loop + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -177.30733603116815 -70.83664256999754 610.5343145750509 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -165.44278799932138 -77.68664256999759 598.4000000000002 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -15.442787999321782 182.12097856533316 603.6 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -15.789198160835541 182.3209785653332 603.6 + vertex -165.78919816083507 -77.4866425699974 603.6000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -15.789198160835541 182.3209785653332 603.6 + vertex -165.44278799932127 -77.68664256999742 603.6000000000001 + vertex -15.442787999321782 182.12097856533316 603.6 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.7394170869210427e-15 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.7394170869210427e-15 + outer loop + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -165.78919816083504 -77.4866425699974 604.0000000000001 + vertex -17.00163372613378 183.02097856533314 604.0000000000001 + vertex -167.0016337261333 -76.78664256999741 604.0000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -17.00163372613378 183.02097856533314 604.0000000000001 + vertex -165.78919816083504 -77.4866425699974 604.0000000000001 + vertex -15.789198160835564 182.32097856533315 604.0000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -18.76340182741655 184.03813585285874 613.0 + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + vertex -18.76340182741655 184.03813585285874 613.0 + vertex -17.001633726133644 183.0209785653334 613.0 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -167.00163372613315 -76.78664256999721 610.8000000000002 + vertex -167.00163372613315 -76.78664256999713 613.0000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -167.00163372613315 -76.78664256999721 610.8000000000002 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -17.00163372613367 183.02097856533337 610.8000000000001 + endloop +endfacet +facet normal -3.1938264052335824e-15 -3.964006195623624e-14 -1.0 + outer loop + vertex -17.00163372613367 183.02097856533337 610.8000000000001 + vertex -165.7891981608349 -77.48664256999719 610.8000000000002 + vertex -167.00163372613315 -76.78664256999721 610.8000000000002 + endloop +endfacet +facet normal -3.1938264052335824e-15 -3.964006195623624e-14 -1.0 + outer loop + vertex -165.7891981608349 -77.48664256999719 610.8000000000002 + vertex -17.00163372613367 183.02097856533337 610.8000000000001 + vertex -15.789198160835406 182.32097856533338 610.8000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + vertex -18.76340182741671 184.03813585285843 601.8000000000001 + vertex -168.7634018274162 -75.76948528247219 601.8000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -18.76340182741671 184.03813585285843 601.8000000000001 + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + endloop +endfacet +facet normal 0.6123724356958127 -0.353553390593238 0.7071067811865498 + outer loop + vertex -168.7634018274162 -75.76948528247219 601.8000000000001 + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -170.8987480431633 -74.53664256999755 604.2656854249494 + endloop +endfacet +facet normal 0.6123724356958127 -0.353553390593238 0.7071067811865498 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -168.7634018274162 -75.76948528247219 601.8000000000001 + vertex -18.76340182741671 184.03813585285843 601.8000000000001 + endloop +endfacet +facet normal 0.6123724356957985 -0.35355339059327495 -0.7071067811865437 + outer loop + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -18.76340182741655 184.03813585285874 613.0 + vertex -168.76340182741606 -75.76948528247182 613.0000000000001 + endloop +endfacet +facet normal 0.6123724356957985 -0.35355339059327495 -0.7071067811865437 + outer loop + vertex -18.76340182741655 184.03813585285874 613.0 + vertex -170.89874804316318 -74.53664256999733 610.5343145750509 + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.7891981608349 -77.48664256999719 610.8000000000002 + vertex -15.789198160835406 182.32097856533338 611.2 + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.789198160835406 182.32097856533338 611.2 + vertex -165.7891981608349 -77.48664256999719 610.8000000000002 + vertex -15.789198160835406 182.32097856533338 610.8000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -15.789198160835406 182.32097856533338 611.2 + vertex -165.44278799932115 -77.68664256999716 611.2000000000002 + vertex -165.7891981608349 -77.4866425699972 611.2000000000002 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -165.44278799932115 -77.68664256999716 611.2000000000002 + vertex -15.789198160835406 182.32097856533338 611.2 + vertex -15.442787999321647 182.12097856533347 611.2 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.789198160835541 182.3209785653332 603.6 + vertex -165.78919816083504 -77.4866425699974 604.0000000000001 + vertex -165.78919816083507 -77.4866425699974 603.6000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.78919816083504 -77.4866425699974 604.0000000000001 + vertex -15.789198160835541 182.3209785653332 603.6 + vertex -15.789198160835564 182.32097856533315 604.0000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -167.0016337261333 -76.78664256999741 604.0000000000001 + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + vertex -167.0016337261333 -76.78664256999751 601.8000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + vertex -167.0016337261333 -76.78664256999741 604.0000000000001 + vertex -17.00163372613378 183.02097856533314 604.0000000000001 + endloop +endfacet +facet normal 0.6870641468694694 -0.39667667014558516 0.6087614290087203 + outer loop + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + endloop +endfacet +facet normal 0.6870641468694694 -0.39667667014558516 0.6087614290087203 + outer loop + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -15.696440967410226 182.26742517474023 617.1071067811866 + endloop +endfacet +facet normal 0.3314135740356083 -0.19134171618249934 0.9238795325112903 + outer loop + vertex -165.87580070121325 -77.43664256999696 617.2660254037846 + vertex -16.08466953506398 182.49156904278232 617.3659258262891 + vertex -166.08466953506345 -77.31605209254823 617.3659258262892 + endloop +endfacet +facet normal 0.3314135740356083 -0.19134171618249934 0.9238795325112903 + outer loop + vertex -16.08466953506398 182.49156904278232 617.3659258262891 + vertex -165.87580070121325 -77.43664256999696 617.2660254037846 + vertex -15.875800701213773 182.37097856533364 617.2660254037845 + endloop +endfacet +facet normal 0.11303899832185436 -0.06526309611000022 0.9914448613738078 + outer loop + vertex -166.08466953506345 -77.31605209254823 617.3659258262892 + vertex -16.30881340310601 182.6209785653336 617.4000000000001 + vertex -166.30881340310546 -77.18664256999696 617.4000000000002 + endloop +endfacet +facet normal 0.11303899832185436 -0.06526309611000022 0.9914448613738078 + outer loop + vertex -16.30881340310601 182.6209785653336 617.4000000000001 + vertex -166.08466953506345 -77.31605209254823 617.3659258262892 + vertex -16.08466953506398 182.49156904278232 617.3659258262891 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -166.30881340310546 -77.18664256999696 617.4000000000002 + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -170.81214550278463 -74.58664256999712 617.4000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -166.30881340310546 -77.18664256999696 617.4000000000002 + vertex -16.30881340310601 182.6209785653336 617.4000000000001 + endloop +endfacet +facet normal 0.5272028623656805 -0.304380714504307 0.7933533402912483 + outer loop + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + vertex -15.875800701213773 182.37097856533364 617.2660254037845 + vertex -165.87580070121325 -77.43664256999696 617.2660254037846 + endloop +endfacet +facet normal 0.5272028623656805 -0.304380714504307 0.7933533402912483 + outer loop + vertex -15.875800701213773 182.37097856533364 617.2660254037845 + vertex -165.69644096740967 -77.54019596059021 617.1071067811868 + vertex -15.696440967410226 182.26742517474023 617.1071067811866 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -165.44278799932115 -77.68664256999716 611.2000000000002 + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -165.44278799932115 -77.68664256999716 611.2000000000002 + vertex -15.442787999321647 182.12097856533347 611.2 + endloop +endfacet +facet normal 0.800103145191287 -0.4619397662556136 0.3826834323650807 + outer loop + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -165.5588134031055 -77.6196552718892 616.9000000000001 + endloop +endfacet +facet normal 0.800103145191287 -0.4619397662556136 0.3826834323650807 + outer loop + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + vertex -15.472297099368197 182.13801565218895 616.6588190451026 + endloop +endfacet +facet normal 0.8586164364012796 -0.4957224306868715 0.13052619222005726 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + vertex -165.44278799932107 -77.68664256999702 616.4000000000001 + endloop +endfacet +facet normal 0.8586164364012796 -0.4957224306868715 0.13052619222005726 + outer loop + vertex -165.47229709936767 -77.6696054831415 616.6588190451026 + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -15.472297099368197 182.13801565218895 616.6588190451026 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + vertex -20.81214550278514 185.22097856533344 617.0000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -19.25329977597314 184.3209785653334 615.6 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + vertex -170.81214550278463 -74.58664256999712 617.4000000000002 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -9.400019899202893e-16 + outer loop + vertex -170.81214550278463 -74.58664256999712 617.0000000000002 + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -20.81214550278514 185.22097856533344 617.0000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -21.158555664298966 185.4209785653334 615.6 + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -171.15855566429843 -74.38664256999722 615.6000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -169.25329977597266 -75.48664256999713 615.6000000000001 + vertex -21.158555664298966 185.4209785653334 615.6 + vertex -19.25329977597314 184.3209785653334 615.6 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + vertex -26.81743808261196 188.6881358528584 611.1 + vertex -176.81743808261143 -71.11948528247211 611.1000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -26.81743808261196 188.6881358528584 611.1 + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + vertex -21.38864599172034 185.55382127780788 611.1 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -8.997049082914166e-15 + outer loop + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -21.158555664298966 185.4209785653334 615.6 + vertex -171.15855566429843 -74.38664256999722 615.6000000000001 + endloop +endfacet +facet normal -0.866025403784458 0.49999999999996647 -8.997049082914166e-15 + outer loop + vertex -21.158555664298966 185.4209785653334 615.6 + vertex -171.1585556642984 -74.38664256999712 617.0000000000002 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + endloop +endfacet +facet normal -0.6123724356957956 0.3535533905932733 0.7071067811865469 + outer loop + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -21.38864599172034 185.55382127780788 611.1 + vertex -171.3886459917198 -74.25379985752271 611.1000000000001 + endloop +endfacet +facet normal -0.6123724356957956 0.3535533905932733 0.7071067811865469 + outer loop + vertex -21.38864599172034 185.55382127780788 611.1 + vertex -169.2532997759727 -75.4866425699972 613.5656854249494 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + endloop +endfacet +facet normal 0.6123724356958173 -0.35355339059322943 0.7071067811865499 + outer loop + vertex -176.81743808261143 -71.11948528247211 611.1000000000001 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + endloop +endfacet +facet normal 0.6123724356958173 -0.35355339059322943 0.7071067811865499 + outer loop + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -176.81743808261143 -71.11948528247211 611.1000000000001 + vertex -26.81743808261196 188.6881358528584 611.1 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -177.04752841003275 -70.98664256999737 615.6000000000001 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + endloop +endfacet +facet normal -1.7149041329274733e-14 -3.158301486324293e-14 -1.0 + outer loop + vertex -177.04752841003275 -70.98664256999737 615.6000000000001 + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -27.047528410033223 188.82097856533326 615.6 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.6118274155526564e-14 + outer loop + vertex -27.047528410033223 188.82097856533326 615.6 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -177.04752841003275 -70.98664256999737 615.6000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 2.6118274155526564e-14 + outer loop + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -27.047528410033223 188.82097856533326 615.6 + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -178.95278429835852 -69.88664256999742 615.6000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 9.400019899202893e-16 + outer loop + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -178.95278429835852 -69.88664256999746 613.5656854249494 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + vertex -177.3939385715465 -70.78664256999731 617.0000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + vertex -177.04752841003275 -70.98664256999729 617.0000000000002 + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.464960093105168e-15 + outer loop + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -177.3939385715465 -70.78664256999731 617.0000000000002 + endloop +endfacet +facet normal 0.866025403784458 -0.49999999999996647 4.464960093105168e-15 + outer loop + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + vertex -27.39393857154703 189.02097856533325 617.4000000000001 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -31.897270671226153 191.6209785653332 617.4 + vertex -181.89727067122564 -68.18664256999743 617.4000000000002 + endloop +endfacet +facet normal 1.7149041329274733e-14 3.158301486324293e-14 1.0 + outer loop + vertex -31.897270671226153 191.6209785653332 617.4 + vertex -177.3939385715465 -70.78664256999726 617.4000000000002 + vertex -27.39393857154703 189.02097856533325 617.4000000000001 + endloop +endfacet +facet normal -0.11303899832181771 0.06526309611006642 0.9914448613738075 + outer loop + vertex -181.89727067122564 -68.18664256999743 617.4000000000002 + vertex -32.12141453926819 191.75038808788443 617.3659258262891 + vertex -182.12141453926765 -68.05723304744619 617.3659258262892 + endloop +endfacet +facet normal -0.11303899832181771 0.06526309611006642 0.9914448613738075 + outer loop + vertex -32.12141453926819 191.75038808788443 617.3659258262891 + vertex -181.89727067122564 -68.18664256999743 617.4000000000002 + vertex -31.897270671226153 191.6209785653332 617.4 + endloop +endfacet +facet normal -0.3314135740355741 0.1913417161825613 0.9238795325112896 + outer loop + vertex -182.12141453926765 -68.05723304744619 617.3659258262892 + vertex -32.33028337311844 191.87097856533305 617.2660254037845 + vertex -182.33028337311788 -67.93664256999747 617.2660254037846 + endloop +endfacet +facet normal -0.3314135740355741 0.1913417161825613 0.9238795325112896 + outer loop + vertex -32.33028337311844 191.87097856533305 617.2660254037845 + vertex -182.12141453926765 -68.05723304744619 617.3659258262892 + vertex -32.12141453926819 191.75038808788443 617.3659258262891 + endloop +endfacet +facet normal -0.5272028623656494 0.3043807145043624 0.7933533402912476 + outer loop + vertex -182.33028337311788 -67.93664256999747 617.2660254037846 + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -182.50964310692143 -67.83308917940421 617.1071067811868 + endloop +endfacet +facet normal -0.5272028623656494 0.3043807145043624 0.7933533402912476 + outer loop + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -182.33028337311788 -67.93664256999747 617.2660254037846 + vertex -32.33028337311844 191.87097856533305 617.2660254037845 + endloop +endfacet +facet normal -0.6870641468694532 0.396676670145621 0.6087614290087151 + outer loop + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + vertex -182.50964310692143 -67.83308917940421 617.1071067811868 + endloop +endfacet +facet normal -0.6870641468694532 0.396676670145621 0.6087614290087151 + outer loop + vertex -182.64727067122567 -67.75362986810526 616.9000000000001 + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -32.64727067122619 192.0539912672253 616.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -32.7632960750107 192.12097856533296 611.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -32.19646627266537 191.79371922636426 614.785889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -32.19646627266537 191.79371922636426 614.785889527836 + vertex -32.05804018668489 191.71379888836057 614.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -32.05804018668489 191.71379888836057 614.4000000000001 + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -32.05804018668489 191.71379888836057 614.4000000000001 + vertex -31.83783608379821 191.58666399028218 614.0686291501016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -31.83783608379821 191.58666399028218 614.0686291501016 + vertex -31.550860509712486 191.42097856533303 613.814359353945 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -31.550860509712486 191.42097856533303 613.814359353945 + vertex -31.216670375552127 191.22803380141505 613.6545186779375 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + vertex -31.216670375552127 191.22803380141505 613.6545186779375 + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + vertex -31.216670375552127 191.22803380141505 613.6545186779375 + vertex -30.858040186684896 191.02097856533302 613.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + vertex -30.858040186684896 191.02097856533302 613.6 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266537 191.79371922636426 614.785889527836 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -32.243680832740026 191.82097856533298 615.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.243680832740026 191.82097856533298 615.2 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -32.19646627266537 191.79371922636432 615.6141104721642 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266537 191.79371922636432 615.6141104721642 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -32.05804018668489 191.71379888836057 616.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.05804018668489 191.71379888836057 616.0 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -31.837836083798095 191.58666399028237 616.3313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.837836083798095 191.58666399028237 616.3313708498986 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -31.550860509712418 191.42097856533306 616.5856406460551 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712418 191.42097856533306 616.5856406460551 + vertex -32.76329607501063 192.12097856533305 616.4000000000001 + vertex -32.73378697496399 192.1039414784776 616.6588190451026 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712418 191.42097856533306 616.5856406460551 + vertex -32.73378697496399 192.1039414784776 616.6588190451026 + vertex -31.21667037555206 191.22803380141514 616.7454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.21667037555206 191.22803380141514 616.7454813220626 + vertex -32.73378697496399 192.1039414784776 616.6588190451026 + vertex -32.64727067122619 192.0539912672253 616.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.21667037555206 191.22803380141514 616.7454813220626 + vertex -32.64727067122619 192.0539912672253 616.9 + vertex -30.858040186684853 191.02097856533317 616.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + vertex -32.64727067122619 192.0539912672253 616.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -27.39393857154703 189.02097856533325 617.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154703 189.02097856533325 617.4000000000001 + vertex -32.50964310692196 191.9745319559264 617.1071067811866 + vertex -32.33028337311844 191.87097856533305 617.2660254037845 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154703 189.02097856533325 617.4000000000001 + vertex -32.33028337311844 191.87097856533305 617.2660254037845 + vertex -32.12141453926819 191.75038808788443 617.3659258262891 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.39393857154703 189.02097856533325 617.4000000000001 + vertex -32.12141453926819 191.75038808788443 617.3659258262891 + vertex -31.897270671226153 191.6209785653332 617.4 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -29.658040186684833 190.32815824230553 614.4000000000001 + vertex -28.95278429835905 189.92097856533314 615.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.658040186684833 190.32815824230553 614.4000000000001 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -29.878244289571587 190.45529314038384 614.0686291501015 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.878244289571587 190.45529314038384 614.0686291501015 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -30.16521986365731 190.62097856533308 613.814359353945 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.16521986365731 190.62097856533308 613.814359353945 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -30.499409997817644 190.81392332925108 613.6545186779375 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.499409997817644 190.81392332925108 613.6545186779375 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + vertex -30.858040186684896 191.02097856533302 613.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -29.658040186684833 190.32815824230553 614.4000000000001 + vertex -29.51961410070433 190.24823790430182 614.785889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -29.51961410070433 190.24823790430182 614.785889527836 + vertex -29.472399540629766 190.22097856533307 615.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -29.472399540629766 190.22097856533307 615.2 + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835905 189.92097856533314 615.6 + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -27.047528410033223 188.82097856533326 615.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033223 188.82097856533326 615.6 + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -29.51961410070431 190.24823790430187 615.6141104721642 + vertex -29.658040186684875 190.32815824230553 616.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -29.658040186684875 190.32815824230553 616.0 + vertex -29.87824428957154 190.4552931403839 616.3313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -29.87824428957154 190.4552931403839 616.3313708498986 + vertex -30.165219863657242 190.6209785653331 616.5856406460551 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -30.165219863657242 190.6209785653331 616.5856406460551 + vertex -30.499409997817644 190.81392332925108 616.7454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -30.499409997817644 190.81392332925108 616.7454813220626 + vertex -30.858040186684853 191.02097856533317 616.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -30.858040186684853 191.02097856533317 616.8000000000001 + vertex -32.64727067122619 192.0539912672253 616.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033244 188.82097856533326 617.0000000000001 + vertex -32.64727067122619 192.0539912672253 616.9 + vertex -27.39393857154705 189.02097856533325 617.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -21.15855566429926 185.4209785653328 597.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -17.706674076514883 183.42803380141493 598.0545186779375 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -17.706674076514883 183.42803380141493 598.0545186779375 + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.706674076514883 183.42803380141493 598.0545186779375 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -18.04086421067524 183.6209785653329 598.2143593539449 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.04086421067524 183.6209785653329 598.2143593539449 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -18.327839784760943 183.78666399028216 598.4686291501016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.327839784760943 183.78666399028216 598.4686291501016 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -18.54804388764774 183.91379888836042 598.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.54804388764774 183.91379888836042 598.8000000000001 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -18.68646997362817 183.99371922636422 599.185889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.68646997362817 183.99371922636422 599.185889527836 + vertex -21.158555664299215 185.4209785653329 599.2 + vertex -19.25329977597341 184.32097856533298 599.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.68646997362817 183.99371922636422 599.185889527836 + vertex -19.25329977597341 184.32097856533298 599.2 + vertex -18.73368453370276 184.020978565333 599.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.73368453370276 184.020978565333 599.6 + vertex -19.25329977597341 184.32097856533298 599.2 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.73368453370276 184.020978565333 599.6 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -18.686469973628128 183.99371922636428 600.0141104721641 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.686469973628128 183.99371922636428 600.0141104721641 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -18.548043887647626 183.91379888836056 600.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647626 183.91379888836056 600.4000000000001 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -18.32783978476092 183.78666399028225 600.7313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.32783978476092 183.78666399028225 600.7313708498986 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -18.040864210675174 183.620978565333 600.9856406460551 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.040864210675174 183.620978565333 600.9856406460551 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -17.70667407651486 183.42803380141498 601.1454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.70667407651486 183.42803380141498 601.1454813220626 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -17.34804388764763 183.22097856533298 601.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.00163372613378 183.02097856533314 604.0000000000001 + vertex -15.789198160835541 182.3209785653332 603.6 + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.789198160835541 182.3209785653332 603.6 + vertex -17.00163372613378 183.02097856533314 604.0000000000001 + vertex -15.789198160835564 182.32097856533315 604.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + vertex -15.47229709936849 182.13801565218841 598.1411809548975 + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.47229709936849 182.13801565218841 598.1411809548975 + vertex -17.348043887647677 183.22097856533296 598.0000000000001 + vertex -16.98941369878049 183.01392332925096 598.0545186779375 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.47229709936849 182.13801565218841 598.1411809548975 + vertex -16.98941369878049 183.01392332925096 598.0545186779375 + vertex -16.655223564620155 182.8209785653329 598.2143593539449 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.47229709936849 182.13801565218841 598.1411809548975 + vertex -16.655223564620155 182.8209785653329 598.2143593539449 + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -16.655223564620155 182.8209785653329 598.2143593539449 + vertex -16.36824799053443 182.6552931403837 598.4686291501016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -16.36824799053443 182.6552931403837 598.4686291501016 + vertex -16.14804388764763 182.52815824230544 598.8 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -16.14804388764763 182.52815824230544 598.8 + vertex -16.009617801667087 182.4482379043018 599.185889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.44278799932185 182.12097856533305 598.4000000000001 + vertex -16.009617801667087 182.4482379043018 599.185889527836 + vertex -15.442787999321782 182.12097856533316 603.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -16.009617801667087 182.4482379043018 599.185889527836 + vertex -15.9624032415925 182.4209785653331 599.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -15.9624032415925 182.4209785653331 599.6 + vertex -16.009617801667087 182.44823790430183 600.014110472164 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -16.009617801667087 182.44823790430183 600.014110472164 + vertex -16.14804388764759 182.52815824230547 600.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -16.14804388764759 182.52815824230547 600.4000000000001 + vertex -16.368247990534297 182.65529314038383 600.7313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -16.368247990534297 182.65529314038383 600.7313708498986 + vertex -16.655223564620066 182.82097856533304 600.9856406460551 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -16.655223564620066 182.82097856533304 600.9856406460551 + vertex -16.989413698780353 183.013923329251 601.1454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -16.989413698780353 183.013923329251 601.1454813220626 + vertex -17.34804388764763 183.22097856533298 601.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -17.34804388764763 183.22097856533298 601.2 + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + vertex -17.34804388764763 183.22097856533298 601.2 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + vertex -18.76340182741671 184.03813585285843 601.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321782 182.12097856533316 603.6 + vertex -17.001633726133846 183.02097856533308 601.8000000000001 + vertex -15.789198160835541 182.3209785653332 603.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.472399540629993 190.22097856533262 599.6 + vertex -28.95278429835934 189.92097856533263 599.2 + vertex -29.519614100704626 190.24823790430136 599.185889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835934 189.92097856533263 599.2 + vertex -29.472399540629993 190.22097856533262 599.6 + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -29.472399540629993 190.22097856533262 599.6 + vertex -29.51961410070458 190.24823790430136 600.0141104721641 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -29.51961410070458 190.24823790430136 600.0141104721641 + vertex -29.65804018668508 190.3281582423051 600.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -29.65804018668508 190.3281582423051 600.4000000000001 + vertex -29.878244289571832 190.4552931403834 600.7313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -29.878244289571832 190.4552931403834 600.7313708498986 + vertex -30.165219863657512 190.6209785653327 600.9856406460552 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -30.165219863657512 190.6209785653327 600.9856406460552 + vertex -30.499409997817846 190.81392332925068 601.1454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -30.499409997817846 190.81392332925068 601.1454813220626 + vertex -30.858040186685123 191.02097856533257 601.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.12141453926854 191.75038808788375 597.434074173711 + vertex -27.3939385715473 189.02097856533265 597.4 + vertex -31.897270671226536 191.62097856533254 597.4 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.3939385715473 189.02097856533265 597.4 + vertex -32.12141453926854 191.75038808788375 597.434074173711 + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + vertex -32.12141453926854 191.75038808788375 597.434074173711 + vertex -32.33028337311871 191.8709785653325 597.5339745962156 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + vertex -32.33028337311871 191.8709785653325 597.5339745962156 + vertex -32.509643106922276 191.9745319559258 597.6928932188135 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + vertex -32.509643106922276 191.9745319559258 597.6928932188135 + vertex -32.64727067122648 192.05399126722477 597.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.393938571547345 189.02097856533257 597.8000000000001 + vertex -32.64727067122648 192.05399126722477 597.9 + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + vertex -32.64727067122648 192.05399126722477 597.9 + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + vertex -30.49940999781794 190.81392332925054 598.0545186779376 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.047528410033514 188.8209785653326 597.8000000000001 + vertex -30.49940999781794 190.81392332925054 598.0545186779376 + vertex -27.04752841003354 188.82097856533272 599.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003354 188.82097856533272 599.2 + vertex -30.49940999781794 190.81392332925054 598.0545186779376 + vertex -30.16521986365758 190.62097856533256 598.2143593539449 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003354 188.82097856533272 599.2 + vertex -30.16521986365758 190.62097856533256 598.2143593539449 + vertex -29.878244289571857 190.45529314038336 598.4686291501016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003354 188.82097856533272 599.2 + vertex -29.878244289571857 190.45529314038336 598.4686291501016 + vertex -29.65804018668515 190.32815824230505 598.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003354 188.82097856533272 599.2 + vertex -29.65804018668515 190.32815824230505 598.8000000000001 + vertex -29.519614100704626 190.24823790430136 599.185889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.04752841003354 188.82097856533272 599.2 + vertex -29.519614100704626 190.24823790430136 599.185889527836 + vertex -28.95278429835934 189.92097856533263 599.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.8121455027855 185.22097856533284 597.4 + vertex -16.08466953506432 182.4915690427817 597.434074173711 + vertex -16.30881340310635 182.62097856533293 597.4 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.08466953506432 182.4915690427817 597.434074173711 + vertex -20.8121455027855 185.22097856533284 597.4 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.08466953506432 182.4915690427817 597.434074173711 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -15.875800701214134 182.37097856533296 597.5339745962156 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.875800701214134 182.37097856533296 597.5339745962156 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -15.696440967410519 182.26742517473969 597.6928932188135 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.696440967410519 182.26742517473969 597.6928932188135 + vertex -20.812145502785476 185.2209785653328 597.8000000000001 + vertex -15.558813403106319 182.18796586344075 597.9000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.73378697496431 192.10394147847708 598.1411809548975 + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + vertex -32.64727067122648 192.05399126722477 597.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.85804018668517 191.02097856533263 598.0000000000001 + vertex -32.73378697496431 192.10394147847708 598.1411809548975 + vertex -31.216670375552397 191.22803380141454 598.0545186779376 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.216670375552397 191.22803380141454 598.0545186779376 + vertex -32.73378697496431 192.10394147847708 598.1411809548975 + vertex -31.55086050971271 191.42097856533258 598.2143593539449 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.55086050971271 191.42097856533258 598.2143593539449 + vertex -32.73378697496431 192.10394147847708 598.1411809548975 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.55086050971271 191.42097856533258 598.2143593539449 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + vertex -31.837836083798503 191.58666399028175 598.4686291501016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.837836083798503 191.58666399028175 598.4686291501016 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + vertex -32.05804018668523 191.71379888836003 598.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.05804018668523 191.71379888836003 598.8000000000001 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + vertex -32.19646627266567 191.7937192263638 599.185889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266567 191.7937192263638 599.185889527836 + vertex -32.76329607501093 192.1209785653325 598.4000000000001 + vertex -32.763296075010814 192.12097856533268 603.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266567 191.7937192263638 599.185889527836 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -32.24368083274032 191.82097856533252 599.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.24368083274032 191.82097856533252 599.6 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -32.19646627266562 191.79371922636386 600.0141104721641 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.19646627266562 191.79371922636386 600.0141104721641 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -32.05804018668521 191.7137988883601 600.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.05804018668521 191.7137988883601 600.4000000000001 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -31.83783608379839 191.58666399028183 600.7313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.83783608379839 191.58666399028183 600.7313708498986 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -31.550860509712663 191.42097856533266 600.9856406460552 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.550860509712663 191.42097856533266 600.9856406460552 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -31.216670375552397 191.2280338014146 601.1454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.216670375552397 191.2280338014146 601.1454813220626 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -30.858040186685123 191.02097856533257 601.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.858040186685123 191.02097856533257 601.2 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -30.858040186685123 191.02097856533257 601.2 + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -32.763296075010814 192.12097856533268 603.6 + vertex -32.416885913497055 191.92097856533272 603.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + vertex -32.416885913497055 191.92097856533272 603.6 + vertex -31.204450348198836 191.2209785653327 604.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.204450348198836 191.2209785653327 604.0000000000001 + vertex -32.416885913497055 191.92097856533272 603.6 + vertex -32.416885913497055 191.9209785653327 604.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -26.81743808261196 188.6881358528584 611.1 + vertex -21.38864599172034 185.55382127780788 611.1 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.81743808261196 188.6881358528584 611.1 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.81743808261196 188.6881358528584 611.1 + vertex -29.442682246915748 190.20382127780772 613.0000000000001 + vertex -28.95278429835907 189.9209785653331 613.5656854249493 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -31.2044503481987 191.22097856533293 610.8000000000001 + vertex -32.416885913497005 191.92097856533286 610.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -31.2044503481987 191.22097856533293 610.8000000000001 + vertex -32.41688591349694 191.92097856533292 611.2 + vertex -31.204450348198726 191.22097856533298 613.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -24.70823048087974 187.47038427622132 604.7920002690196 + vertex -24.103042037166297 187.12097856533296 604.7 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -24.70823048087974 187.47038427622132 604.7920002690196 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -25.272176332275308 187.79597856533294 605.061731409782 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.272176332275308 187.79597856533294 605.061731409782 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -25.75644761354496 188.07557271993477 605.4908116907964 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.75644761354496 188.07557271993477 605.4908116907964 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -26.128042037166335 188.29011286044195 606.0500000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.128042037166335 188.29011286044195 606.0500000000001 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -26.361636057258405 188.42497843082322 606.7011885782233 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.361636057258405 188.42497843082322 606.7011885782233 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.361636057258405 188.42497843082322 606.7011885782233 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -26.441310627384293 188.47097856533296 607.4 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.441310627384293 188.47097856533296 607.4 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -26.361636057258405 188.42497843082322 608.0988114217769 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.361636057258405 188.42497843082322 608.0988114217769 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -26.128042037166267 188.29011286044198 608.7500000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.128042037166267 188.29011286044198 608.7500000000001 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -25.75644761354487 188.0755727199349 609.3091883092037 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.75644761354487 188.0755727199349 609.3091883092037 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -25.27217633227526 187.79597856533303 609.738268590218 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -25.27217633227526 187.79597856533303 609.738268590218 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -24.70823048087963 187.47038427622155 610.0079997309805 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -24.70823048087963 187.47038427622155 610.0079997309805 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -24.103042037166183 187.1209785653331 610.1 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -24.103042037166183 187.1209785653331 610.1 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -27.30733603116866 188.97097856533304 610.5343145750509 + vertex -21.38864599172034 185.55382127780788 611.1 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -21.38864599172034 185.55382127780788 611.1 + vertex -18.76340182741655 184.03813585285874 613.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.76340182741655 184.03813585285874 613.0 + vertex -21.38864599172034 185.55382127780788 611.1 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.76340182741655 184.03813585285874 613.0 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -17.001633726133644 183.0209785653334 613.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -19.25329977597314 184.3209785653334 615.6 + vertex -21.158555664298966 185.4209785653334 615.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -19.25329977597314 184.3209785653334 615.6 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -18.686469973627858 183.99371922636468 615.6141104721642 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.686469973627858 183.99371922636468 615.6141104721642 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -18.54804388764745 183.91379888836096 616.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.54804388764745 183.91379888836096 616.0 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -18.327839784760627 183.78666399028273 616.3313708498986 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.327839784760627 183.78666399028273 616.3313708498986 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -18.0408642106749 183.62097856533347 616.5856406460551 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.0408642106749 183.62097856533347 616.5856406460551 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -17.706674076514545 183.42803380141552 616.7454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.706674076514545 183.42803380141552 616.7454813220626 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -17.348043887647314 183.2209785653335 616.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.348043887647314 183.2209785653335 616.8000000000001 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -15.558813403106003 182.18796586344135 616.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -21.158555664298945 185.4209785653334 617.0000000000001 + vertex -20.81214550278514 185.22097856533344 617.0000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -20.81214550278514 185.22097856533344 617.0000000000001 + vertex -15.696440967410226 182.26742517474023 617.1071067811866 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.696440967410226 182.26742517474023 617.1071067811866 + vertex -20.81214550278514 185.22097856533344 617.0000000000001 + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.696440967410226 182.26742517474023 617.1071067811866 + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -15.875800701213773 182.37097856533364 617.2660254037845 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.875800701213773 182.37097856533364 617.2660254037845 + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -16.08466953506398 182.49156904278232 617.3659258262891 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.08466953506398 182.49156904278232 617.3659258262891 + vertex -20.81214550278516 185.22097856533344 617.4000000000001 + vertex -16.30881340310601 182.6209785653336 617.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -15.789198160835406 182.32097856533338 610.8000000000001 + vertex -17.00163372613367 183.02097856533337 610.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.789198160835406 182.32097856533338 610.8000000000001 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -15.789198160835406 182.32097856533338 611.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.789198160835406 182.32097856533338 611.2 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -15.442787999321647 182.12097856533347 611.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321647 182.12097856533347 611.2 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -16.148043887647408 182.52815824230586 614.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321647 182.12097856533347 611.2 + vertex -16.148043887647408 182.52815824230586 614.4000000000001 + vertex -16.009617801666884 182.44823790430226 614.785889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321647 182.12097856533347 611.2 + vertex -16.009617801666884 182.44823790430226 614.785889527836 + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.148043887647408 182.52815824230586 614.4000000000001 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -16.368247990534094 182.65529314038423 614.0686291501015 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.368247990534094 182.65529314038423 614.0686291501015 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -16.655223564619817 182.82097856533343 613.814359353945 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.655223564619817 182.82097856533343 613.814359353945 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -16.989413698780176 183.0139233292514 613.6545186779375 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -16.989413698780176 183.0139233292514 613.6545186779375 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -17.348043887647428 183.2209785653335 613.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.348043887647428 183.2209785653335 613.6 + vertex -17.001633726133644 183.0209785653334 613.0 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -16.009617801666884 182.44823790430226 614.785889527836 + vertex -15.962403241592297 182.42097856533346 615.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -15.962403241592297 182.42097856533346 615.2 + vertex -16.009617801666817 182.44823790430226 615.6141104721642 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -16.009617801666817 182.44823790430226 615.6141104721642 + vertex -16.148043887647408 182.52815824230598 616.0 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -16.148043887647408 182.52815824230598 616.0 + vertex -16.368247990534048 182.6552931403843 616.3313708498985 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -16.368247990534048 182.6552931403843 616.3313708498985 + vertex -16.65522356461977 182.82097856533352 616.5856406460551 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.442787999321533 182.1209785653336 616.4000000000001 + vertex -16.65522356461977 182.82097856533352 616.5856406460551 + vertex -15.472297099368197 182.13801565218895 616.6588190451026 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368197 182.13801565218895 616.6588190451026 + vertex -16.65522356461977 182.82097856533352 616.5856406460551 + vertex -16.989413698780083 183.01392332925155 616.7454813220626 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.472297099368197 182.13801565218895 616.6588190451026 + vertex -16.989413698780083 183.01392332925155 616.7454813220626 + vertex -15.558813403106003 182.18796586344135 616.9 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -15.558813403106003 182.18796586344135 616.9 + vertex -16.989413698780083 183.01392332925155 616.7454813220626 + vertex -17.348043887647314 183.2209785653335 616.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -17.70667407651468 183.42803380141538 613.6545186779375 + vertex -17.348043887647428 183.2209785653335 613.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -17.70667407651468 183.42803380141538 613.6545186779375 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -18.040864210674947 183.62097856533344 613.814359353945 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.040864210674947 183.62097856533344 613.814359353945 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -18.327839784760762 183.78666399028262 614.0686291501016 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.327839784760762 183.78666399028262 614.0686291501016 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -18.548043887647424 183.91379888836096 614.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647424 183.91379888836096 614.4000000000001 + vertex -19.253299775973208 184.32097856533338 613.5656854249493 + vertex -19.25329977597314 184.3209785653334 615.6 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.548043887647424 183.91379888836096 614.4000000000001 + vertex -19.25329977597314 184.3209785653334 615.6 + vertex -18.6864699736279 183.99371922636473 614.785889527836 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.6864699736279 183.99371922636473 614.785889527836 + vertex -19.25329977597314 184.3209785653334 615.6 + vertex -18.733684533702558 184.0209785653334 615.2 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.733684533702558 184.0209785653334 615.2 + vertex -19.25329977597314 184.3209785653334 615.6 + vertex -18.686469973627858 183.99371922636468 615.6141104721642 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -29.44268224691593 190.20382127780732 601.8000000000001 + vertex -26.817438082612185 188.68813585285818 603.7 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -29.44268224691593 190.20382127780732 601.8000000000001 + vertex -28.95278429835932 189.92097856533272 601.2343145750508 + vertex -31.20445034819886 191.2209785653327 601.8000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.817438082612185 188.68813585285818 603.7 + vertex -29.44268224691593 190.20382127780732 601.8000000000001 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -26.817438082612185 188.68813585285818 603.7 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -21.38864599172057 185.5538212778076 603.7 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.38864599172057 185.5538212778076 603.7 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -27.307336031168774 188.97097856533284 604.2656854249493 + vertex -24.103042037166297 187.12097856533296 604.7 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -24.103042037166297 187.12097856533296 604.7 + vertex -23.497853593452852 186.77157285444454 604.7920002690196 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -23.497853593452852 186.77157285444454 604.7920002690196 + vertex -22.933907742057286 186.44597856533298 605.061731409782 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -22.933907742057286 186.44597856533298 605.061731409782 + vertex -22.449636460787655 186.16638441073113 605.4908116907964 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -22.449636460787655 186.16638441073113 605.4908116907964 + vertex -22.078042037166263 185.95184427022406 606.0500000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -22.078042037166263 185.95184427022406 606.0500000000001 + vertex -21.844448017074143 185.81697869984282 606.7011885782233 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + vertex -21.844448017074143 185.81697869984282 606.7011885782233 + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -21.844448017074143 185.81697869984282 606.7011885782233 + vertex -21.764773446948233 185.77097856533308 607.4000000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -21.764773446948233 185.77097856533308 607.4000000000001 + vertex -21.84444801707412 185.81697869984293 608.0988114217769 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -21.84444801707412 185.81697869984293 608.0988114217769 + vertex -22.078042037166195 185.95184427022414 608.7500000000001 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -22.078042037166195 185.95184427022414 608.7500000000001 + vertex -22.44963646078752 186.16638441073135 609.3091883092037 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -22.44963646078752 186.16638441073135 609.3091883092037 + vertex -22.933907742057176 186.4459785653332 609.7382685902181 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -22.933907742057176 186.4459785653332 609.7382685902181 + vertex -23.49785359345274 186.77157285444477 610.0079997309805 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -20.898748043163778 185.2709785653332 610.5343145750508 + vertex -23.49785359345274 186.77157285444477 610.0079997309805 + vertex -24.103042037166183 187.1209785653331 610.1 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -21.38864599172057 185.5538212778076 603.7 + vertex -18.76340182741671 184.03813585285843 601.8000000000001 + vertex -19.25329977597341 184.32097856533298 601.2343145750508 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844387 -2.9750497701033105e-16 + outer loop + vertex -18.76340182741671 184.03813585285843 601.8000000000001 + vertex -21.38864599172057 185.5538212778076 603.7 + vertex -20.89874804316382 185.27097856533302 604.2656854249493 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + vertex -167.3480438876469 -76.58664256999711 613.6000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + vertex -166.98941369877966 -76.79369780607912 613.6545186779376 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -167.7066740765141 -76.3795873339151 613.6545186779376 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + vertex -166.65522356461935 -76.98664256999712 613.814359353945 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.0408642106745 -76.18664256999716 613.814359353945 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + vertex -166.3682479905336 -77.1523279949463 614.0686291501016 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.3278397847602 -76.0209571450479 614.0686291501017 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -166.14804388764685 -77.27946289302463 614.4000000000001 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.5480438876469 -75.89382224696958 614.4000000000001 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + vertex -166.00961780166637 -77.35938323102832 614.785889527836 + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.6864699736274 -75.81390190896589 614.785889527836 + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + vertex -165.96240324159172 -77.38664256999704 615.2000000000002 + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.73368453370196 -75.78664256999716 615.2000000000002 + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -166.00961780166634 -77.3593832310283 615.6141104721642 + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.68646997362737 -75.81390190896586 615.6141104721642 + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + vertex -166.14804388764685 -77.27946289302459 616.0000000000001 + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.54804388764688 -75.89382224696955 616.0000000000001 + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + vertex -166.36824799053355 -77.15232799494626 616.3313708498986 + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.32783978476013 -76.02095714504783 616.3313708498987 + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + vertex -166.65522356461926 -76.98664256999704 616.5856406460553 + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -168.0408642106744 -76.18664256999706 616.5856406460553 + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + endloop +endfacet +facet normal -0.5000000000000001 -0.8660254037844387 2.970018574227155e-16 + outer loop + vertex -167.70667407651402 -76.37958733391504 616.7454813220626 + vertex -166.98941369877957 -76.79369780607902 616.7454813220626 + vertex -167.3480438876468 -76.58664256999705 616.8000000000002 + endloop +endfacet +facet normal 0.9991524752349781 -0.04116225494086089 1.0458099413404686e-16 + outer loop + vertex -183.85388894480468 -84.92343822226249 -3.000000000000062 + vertex -183.79272159323875 -83.43869180085144 -62.600000000000065 + vertex -183.79272159323875 -83.43869180085144 -3.000000000000062 + endloop +endfacet +facet normal 0.9991524752349781 -0.04116225494086089 1.0458099413404686e-16 + outer loop + vertex -183.79272159323875 -83.43869180085144 -62.600000000000065 + vertex -183.85388894480468 -84.92343822226249 -3.000000000000062 + vertex -183.85388894480468 -84.92343822226248 -62.600000000000065 + endloop +endfacet +facet normal 0.9783396194476196 -0.2070062535748305 7.690445521229571e-17 + outer loop + vertex -183.23793366531743 -79.01795063489288 -3.000000000000062 + vertex -182.93032116189778 -77.5641322388989 -62.600000000000065 + vertex -182.93032116189778 -77.56413223889892 -3.000000000000062 + endloop +endfacet +facet normal 0.9783396194476196 -0.2070062535748305 7.690445521229571e-17 + outer loop + vertex -182.93032116189778 -77.5641322388989 -62.600000000000065 + vertex -183.23793366531743 -79.01795063489288 -3.000000000000062 + vertex -183.2379336653174 -79.01795063489288 -62.600000000000065 + endloop +endfacet +facet normal 0.3493898658303789 0.9369774392454868 1.8208893893752719e-16 + outer loop + vertex -160.05051943746048 -119.17973017368655 -3.000000000000062 + vertex -161.44287339178103 -118.66053478977186 -62.600000000000065 + vertex -161.44287339178106 -118.66053478977186 -3.000000000000062 + endloop +endfacet +facet normal 0.3493898658303789 0.9369774392454868 1.8208893893752719e-16 + outer loop + vertex -161.44287339178103 -118.66053478977186 -62.600000000000065 + vertex -160.05051943746048 -119.17973017368655 -3.000000000000062 + vertex -160.05051943746045 -119.17973017368655 -62.600000000000065 + endloop +endfacet +facet normal 0.9859209640962954 0.1672119988380962 1.3498487096513938e-16 + outer loop + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -183.4776212540151 -90.84902740611355 -62.600000000000065 + vertex -183.4776212540151 -90.84902740611355 -3.000000000000062 + endloop +endfacet +facet normal 0.9859209640962954 0.1672119988380962 1.3498487096513938e-16 + outer loop + vertex -183.4776212540151 -90.84902740611355 -62.600000000000065 + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000018 -1.962553415389855e-17 + outer loop + vertex -168.13557599864257 -82.35068819883378 -3.0000000000000733 + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -168.13557599864257 -82.35068819883378 -62.60000000000008 + endloop +endfacet +facet normal -0.8660254037844378 0.5000000000000018 -1.962553415389855e-17 + outer loop + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -168.13557599864257 -82.35068819883378 -3.0000000000000733 + vertex -166.9427879993213 -80.28471878135093 -3.0000000000000733 + endloop +endfacet +facet normal 0.9447323868310444 -0.3278425190125857 5.4692334833071485e-17 + outer loop + vertex -181.64696360879708 -73.2975486533744 -3.000000000000062 + vertex -182.13413950932804 -74.70142650515936 -62.600000000000065 + vertex -181.64696360879708 -73.2975486533744 -62.600000000000065 + endloop +endfacet +facet normal 0.9447323868310444 -0.3278425190125857 5.4692334833071485e-17 + outer loop + vertex -182.13413950932804 -74.70142650515936 -62.600000000000065 + vertex -181.64696360879708 -73.2975486533744 -3.000000000000062 + vertex -182.13413950932804 -74.70142650515936 -3.000000000000062 + endloop +endfacet +facet normal 0.9576170825074752 -0.2880443078588281 6.220955760198354e-17 + outer loop + vertex -182.13413950932804 -74.70142650515936 -3.000000000000062 + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + vertex -182.13413950932804 -74.70142650515936 -62.600000000000065 + endloop +endfacet +facet normal 0.9576170825074752 -0.2880443078588281 6.220955760198354e-17 + outer loop + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + vertex -182.13413950932804 -74.70142650515936 -3.000000000000062 + vertex -182.56217503533784 -76.12445109007135 -3.000000000000062 + endloop +endfacet +facet normal 0.6049992586789453 0.7962260338609424 1.8892534971894295e-16 + outer loop + vertex -169.23317972702915 -114.37079976539466 -3.000000000000062 + vertex -170.4163762698104 -113.47176732886022 -62.600000000000065 + vertex -170.4163762698104 -113.47176732886022 -3.000000000000062 + endloop +endfacet +facet normal 0.6049992586789453 0.7962260338609424 1.8892534971894295e-16 + outer loop + vertex -170.4163762698104 -113.47176732886022 -62.600000000000065 + vertex -169.23317972702915 -114.37079976539466 -3.000000000000062 + vertex -169.23317972702915 -114.37079976539466 -62.600000000000065 + endloop +endfacet +facet normal 0.5363402452594351 0.8440018609665794 1.886138071888623e-16 + outer loop + vertex -166.7592266656199 -116.01656572439911 -3.000000000000062 + vertex -168.01341836688118 -115.21956098333553 -62.600000000000065 + vertex -168.0134183668812 -115.21956098333553 -3.000000000000062 + endloop +endfacet +facet normal 0.5363402452594351 0.8440018609665794 1.886138071888623e-16 + outer loop + vertex -168.01341836688118 -115.21956098333553 -62.600000000000065 + vertex -166.7592266656199 -116.01656572439911 -3.000000000000062 + vertex -166.7592266656199 -116.01656572439911 -62.600000000000065 + endloop +endfacet +facet normal 0.3882711944089147 0.9215451587373646 1.8404317463084536e-16 + outer loop + vertex -161.44287339178106 -118.66053478977186 -3.000000000000062 + vertex -162.812294887016 -118.08356152420488 -62.600000000000065 + vertex -162.812294887016 -118.08356152420488 -3.000000000000062 + endloop +endfacet +facet normal 0.3882711944089147 0.9215451587373646 1.8404317463084536e-16 + outer loop + vertex -162.812294887016 -118.08356152420488 -62.600000000000065 + vertex -161.44287339178106 -118.66053478977186 -3.000000000000062 + vertex -161.44287339178103 -118.66053478977186 -62.600000000000065 + endloop +endfacet +facet normal 0.9922171154055781 -0.12451986145283667 9.106128389727609e-17 + outer loop + vertex -183.66951149281198 -81.95780265849699 -3.000000000000062 + vertex -183.48447425047996 -80.48336222235157 -62.600000000000065 + vertex -183.48447425047996 -80.48336222235157 -3.000000000000062 + endloop +endfacet +facet normal 0.9922171154055781 -0.12451986145283667 9.106128389727609e-17 + outer loop + vertex -183.48447425047996 -80.48336222235157 -62.600000000000065 + vertex -183.66951149281198 -81.95780265849699 -3.000000000000062 + vertex -183.66951149281198 -81.95780265849699 -62.600000000000065 + endloop +endfacet +facet normal 0.9688260316082282 -0.24774204422796747 6.96179190577175e-17 + outer loop + vertex -182.93032116189778 -77.56413223889892 -3.000000000000062 + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + vertex -182.56217503533784 -76.12445109007135 -3.000000000000062 + endloop +endfacet +facet normal 0.9688260316082282 -0.24774204422796747 6.96179190577175e-17 + outer loop + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + vertex -182.93032116189778 -77.56413223889892 -3.000000000000062 + vertex -182.93032116189778 -77.5641322388989 -62.600000000000065 + endloop +endfacet +facet normal 0.42647308217928137 0.9045002543816689 1.8567535078147326e-16 + outer loop + vertex -162.812294887016 -118.08356152420488 -3.000000000000062 + vertex -164.1563875546969 -117.4498200300001 -62.600000000000065 + vertex -164.15638755469692 -117.4498200300001 -3.000000000000062 + endloop +endfacet +facet normal 0.42647308217928137 0.9045002543816689 1.8567535078147326e-16 + outer loop + vertex -164.1563875546969 -117.4498200300001 -62.600000000000065 + vertex -162.812294887016 -118.08356152420488 -3.000000000000062 + vertex -162.812294887016 -118.08356152420488 -62.600000000000065 + endloop +endfacet +facet normal 0.9990971750681178 0.0424833469833426 1.1736899405614504e-16 + outer loop + vertex -183.78977600789938 -87.89410799071464 -3.000000000000062 + vertex -183.85290650996635 -86.40944374567493 -62.600000000000065 + vertex -183.85290650996637 -86.40944374567495 -3.000000000000062 + endloop +endfacet +facet normal 0.9990971750681178 0.0424833469833426 1.1736899405614504e-16 + outer loop + vertex -183.85290650996635 -86.40944374567493 -62.600000000000065 + vertex -183.78977600789938 -87.89410799071464 -3.000000000000062 + vertex -183.78977600789938 -87.89410799071463 -62.600000000000065 + endloop +endfacet +facet normal 0.22935485323248844 0.9733428744788262 1.7433085302539715e-16 + outer loop + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + vertex -155.760402807068 -120.38207845891769 -62.600000000000065 + vertex -157.20679601081653 -120.04125580570843 -62.600000000000065 + endloop +endfacet +facet normal 0.22935485323248844 0.9733428744788262 1.7433085302539715e-16 + outer loop + vertex -155.760402807068 -120.38207845891769 -62.600000000000065 + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + vertex -155.76040280706803 -120.38207845891769 -3.000000000000062 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.69786561188505e-17 + outer loop + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + vertex -175.9278333507478 -89.73630142461471 -62.600000000000065 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.69786561188505e-17 + outer loop + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + vertex -182.55292768969878 -93.5613014246147 -3.000000000000062 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.69786561188505e-17 + outer loop + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -168.13557599864257 -82.35068819883378 -62.60000000000008 + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.69786561188505e-17 + outer loop + vertex -168.13557599864257 -82.35068819883378 -62.60000000000008 + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -168.13557599864257 -82.35068819883378 -3.0000000000000733 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.69786561188505e-17 + outer loop + vertex -155.3855759986426 -104.43433599533697 -3.000000000000062 + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -155.38557599864257 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.69786561188505e-17 + outer loop + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -155.3855759986426 -104.43433599533697 -3.000000000000062 + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + endloop +endfacet +facet normal 0.9999997814571896 0.0006611244764012646 1.1107217741834893e-16 + outer loop + vertex -183.85290650996637 -86.40944374567495 -3.000000000000062 + vertex -183.85388894480468 -84.92343822226248 -62.600000000000065 + vertex -183.85388894480468 -84.92343822226249 -3.000000000000062 + endloop +endfacet +facet normal 0.9999997814571896 0.0006611244764012646 1.1107217741834893e-16 + outer loop + vertex -183.85388894480468 -84.92343822226248 -62.600000000000065 + vertex -183.85290650996637 -86.40944374567495 -3.000000000000062 + vertex -183.85290650996635 -86.40944374567493 -62.600000000000065 + endloop +endfacet +facet normal 0.5005724413202164 0.8656946522826156 1.879626683638603e-16 + outer loop + vertex -165.47279934959988 -116.76041929963284 -3.000000000000062 + vertex -166.7592266656199 -116.01656572439911 -62.600000000000065 + vertex -166.7592266656199 -116.01656572439911 -3.000000000000062 + endloop +endfacet +facet normal 0.5005724413202164 0.8656946522826156 1.879626683638603e-16 + outer loop + vertex -166.7592266656199 -116.01656572439911 -62.600000000000065 + vertex -165.47279934959988 -116.76041929963284 -3.000000000000062 + vertex -165.47279934959988 -116.76041929963284 -62.600000000000065 + endloop +endfacet +facet normal 0.9964462355504107 0.08423122732939085 1.2346042516618458e-16 + outer loop + vertex -183.6646079114895 -89.37483292412786 -3.000000000000062 + vertex -183.78977600789938 -87.89410799071463 -62.600000000000065 + vertex -183.78977600789938 -87.89410799071464 -3.000000000000062 + endloop +endfacet +facet normal 0.9964462355504107 0.08423122732939085 1.2346042516618458e-16 + outer loop + vertex -183.78977600789938 -87.89410799071463 -62.600000000000065 + vertex -183.6646079114895 -89.37483292412786 -3.000000000000062 + vertex -183.6646079114895 -89.37483292412786 -62.600000000000065 + endloop +endfacet +facet normal 0.9861411980746724 -0.165908219988794 8.405641526142146e-17 + outer loop + vertex -183.48447425047996 -80.48336222235157 -3.000000000000062 + vertex -183.2379336653174 -79.01795063489288 -62.600000000000065 + vertex -183.23793366531743 -79.01795063489288 -3.000000000000062 + endloop +endfacet +facet normal 0.9861411980746724 -0.165908219988794 8.405641526142146e-17 + outer loop + vertex -183.2379336653174 -79.01795063489288 -62.600000000000065 + vertex -183.48447425047996 -80.48336222235157 -3.000000000000062 + vertex -183.48447425047996 -80.48336222235157 -62.600000000000065 + endloop +endfacet +facet normal 0.6377703208595259 0.7702266016119785 1.8858520825170087e-16 + outer loop + vertex -170.4163762698104 -113.47176732886022 -3.000000000000062 + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + endloop +endfacet +facet normal 0.6377703208595259 0.7702266016119785 1.8858520825170087e-16 + outer loop + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -170.4163762698104 -113.47176732886022 -3.000000000000062 + vertex -170.4163762698104 -113.47176732886022 -62.600000000000065 + endloop +endfacet +facet normal 0.5711695004343895 0.82083213982734 1.8893488826187023e-16 + outer loop + vertex -168.0134183668812 -115.21956098333553 -3.000000000000062 + vertex -169.23317972702915 -114.37079976539466 -62.600000000000065 + vertex -169.23317972702915 -114.37079976539466 -3.000000000000062 + endloop +endfacet +facet normal 0.5711695004343895 0.82083213982734 1.8893488826187023e-16 + outer loop + vertex -169.23317972702915 -114.37079976539466 -62.600000000000065 + vertex -168.0134183668812 -115.21956098333553 -3.000000000000062 + vertex -168.01341836688118 -115.21956098333553 -62.600000000000065 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.69786561188505e-17 + outer loop + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -161.12500000000003 -104.86124264156595 -62.600000000000065 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.69786561188505e-17 + outer loop + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -154.54940691211777 -101.0648222021957 -3.000000000000062 + endloop +endfacet +facet normal 0.1884462435099412 0.9820835062798846 1.7112811674140545e-16 + outer loop + vertex -155.76040280706803 -120.38207845891769 -3.000000000000062 + vertex -154.30102097334645 -120.66211067883884 -62.600000000000065 + vertex -155.760402807068 -120.38207845891769 -62.600000000000065 + endloop +endfacet +facet normal 0.1884462435099412 0.9820835062798846 1.7112811674140545e-16 + outer loop + vertex -154.30102097334645 -120.66211067883884 -62.600000000000065 + vertex -155.76040280706803 -120.38207845891769 -3.000000000000062 + vertex -154.30102097334645 -120.66211067883884 -3.000000000000062 + endloop +endfacet +facet normal 0.9301944916753182 -0.36706703428242676 4.7079405236779536e-17 + outer loop + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -181.64696360879708 -73.2975486533744 -62.600000000000065 + vertex -181.10149984918357 -71.91527419881089 -62.600000000000065 + endloop +endfacet +facet normal 0.9301944916753182 -0.36706703428242676 4.7079405236779536e-17 + outer loop + vertex -181.64696360879708 -73.2975486533744 -62.600000000000065 + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -181.64696360879708 -73.2975486533744 -3.000000000000062 + endloop +endfacet +facet normal 0.3098971353857546 0.9507700907578569 1.7981606344395074e-16 + outer loop + vertex -158.63766952233075 -119.64023912920041 -3.000000000000062 + vertex -160.05051943746045 -119.17973017368655 -62.600000000000065 + vertex -160.05051943746048 -119.17973017368655 -3.000000000000062 + endloop +endfacet +facet normal 0.3098971353857546 0.9507700907578569 1.7981606344395074e-16 + outer loop + vertex -160.05051943746045 -119.17973017368655 -62.600000000000065 + vertex -158.63766952233075 -119.64023912920041 -3.000000000000062 + vertex -158.63766952233073 -119.64023912920041 -62.600000000000065 + endloop +endfacet +facet normal 0.26986211191721243 0.9628989773343732 1.7722852548447586e-16 + outer loop + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + vertex -158.63766952233073 -119.64023912920041 -62.600000000000065 + vertex -158.63766952233075 -119.64023912920041 -3.000000000000062 + endloop +endfacet +facet normal 0.26986211191721243 0.9628989773343732 1.7722852548447586e-16 + outer loop + vertex -158.63766952233073 -119.64023912920041 -62.600000000000065 + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + vertex -157.20679601081653 -120.04125580570843 -62.600000000000065 + endloop +endfacet +facet normal 0.996556739113654 -0.08291360399331692 9.790680320921971e-17 + outer loop + vertex -183.79272159323875 -83.43869180085144 -3.000000000000062 + vertex -183.66951149281198 -81.95780265849699 -62.600000000000065 + vertex -183.66951149281198 -81.95780265849699 -3.000000000000062 + endloop +endfacet +facet normal 0.996556739113654 -0.08291360399331692 9.790680320921971e-17 + outer loop + vertex -183.66951149281198 -81.95780265849699 -62.600000000000065 + vertex -183.79272159323875 -83.43869180085144 -3.000000000000062 + vertex -183.79272159323875 -83.43869180085144 -62.600000000000065 + endloop +endfacet +facet normal 0.9920516018175792 0.1258317103562346 1.2933581127401296e-16 + outer loop + vertex -183.4776212540151 -90.84902740611355 -3.000000000000062 + vertex -183.6646079114895 -89.37483292412786 -62.600000000000065 + vertex -183.6646079114895 -89.37483292412786 -3.000000000000062 + endloop +endfacet +facet normal 0.9920516018175792 0.1258317103562346 1.2933581127401296e-16 + outer loop + vertex -183.6646079114895 -89.37483292412786 -62.600000000000065 + vertex -183.4776212540151 -90.84902740611355 -3.000000000000062 + vertex -183.4776212540151 -90.84902740611355 -62.600000000000065 + endloop +endfacet +facet normal -0.9063077870366506 -0.42261826174069833 -1.6521615319541632e-16 + outer loop + vertex -121.30115981622716 -94.96515470653594 -62.600000000000065 + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + endloop +endfacet +facet normal -0.9063077870366506 -0.42261826174069833 -1.6521615319541632e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -121.30115981622716 -94.96515470653594 -62.600000000000065 + vertex -121.30115981622716 -94.96515470653594 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -162.12500000000003 -103.12919183399708 -62.600000000000065 + vertex -162.12500000000006 -103.12919183399708 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -162.12500000000003 -103.12919183399708 -62.600000000000065 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -161.12500000000003 -104.86124264156595 -62.600000000000065 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.697865611885051e-17 + outer loop + vertex -170.37500000000006 -88.83977267155386 -62.600000000000065 + vertex -174.92783335074782 -91.46835223218358 -3.000000000000062 + vertex -174.9278333507478 -91.46835223218358 -62.600000000000065 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.697865611885051e-17 + outer loop + vertex -174.92783335074782 -91.46835223218358 -3.000000000000062 + vertex -170.37500000000006 -88.83977267155386 -62.600000000000065 + vertex -170.37500000000006 -88.83977267155386 -3.000000000000062 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.697865611885051e-17 + outer loop + vertex -166.67783335074782 -105.75777139462681 -3.000000000000062 + vertex -162.12500000000003 -103.12919183399708 -62.600000000000065 + vertex -166.67783335074782 -105.75777139462681 -62.600000000000065 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.697865611885051e-17 + outer loop + vertex -162.12500000000003 -103.12919183399708 -62.600000000000065 + vertex -166.67783335074782 -105.75777139462681 -3.000000000000062 + vertex -162.12500000000006 -103.12919183399708 -3.000000000000062 + endloop +endfacet +facet normal 1.0 -7.771561172376092e-16 1.629868445721389e-16 + outer loop + vertex -150.00000000000009 -121.1247965983122 -3.000000000000062 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 1.0 -7.771561172376092e-16 1.629868445721389e-16 + outer loop + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -150.00000000000009 -121.1247965983122 -3.000000000000062 + vertex -150.00000000000009 -121.1247965983122 -62.600000000000065 + endloop +endfacet +facet normal 1.0 -7.771561172376092e-16 1.629868445721389e-16 + outer loop + vertex -150.00000000000009 -121.1247965983122 -62.600000000000065 + vertex -150.00000000000009 -121.1247965983122 -3.000000000000062 + vertex -150.00000000000009 -124.13030787576977 -3.000000000000062 + endloop +endfacet +facet normal 1.0 -7.771561172376092e-16 1.629868445721389e-16 + outer loop + vertex -150.00000000000009 -121.1247965983122 -62.600000000000065 + vertex -150.00000000000009 -124.13030787576977 -3.000000000000062 + vertex -150.00000000000006 -124.13030787576977 -62.600000000000065 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -1.7258201180401957e-16 + outer loop + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + vertex -166.67783335074782 -105.75777139462681 -3.000000000000062 + vertex -166.67783335074782 -105.75777139462681 -62.600000000000065 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -1.7258201180401957e-16 + outer loop + vertex -166.67783335074782 -105.75777139462681 -3.000000000000062 + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + vertex -165.67783335074782 -107.48982220219568 -3.000000000000062 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.69786561188505e-17 + outer loop + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -164.79940691211775 -83.31130142461471 -62.600000000000065 + endloop +endfacet +facet normal 0.49999999999999967 -0.8660254037844388 -7.69786561188505e-17 + outer loop + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -171.37500000000006 -87.10772186398499 -3.000000000000062 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -1.725820118040196e-16 + outer loop + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -164.79940691211775 -83.31130142461471 -62.600000000000065 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -1.725820118040196e-16 + outer loop + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -154.54940691211777 -101.0648222021957 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.725820118040196e-16 + outer loop + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + vertex -182.55292768969878 -93.5613014246147 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.725820118040196e-16 + outer loop + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + vertex -172.30292768969878 -111.31482220219567 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + vertex -142.48536047767334 -58.14921585984326 -62.600000000000044 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -137.83892438837398 -66.19707924063145 -35.9058285412303 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.83892438837398 -66.19707924063145 -35.9058285412303 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -137.5866466257073 -66.63403714318997 -37.39220118838113 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.5866466257073 -66.63403714318997 -37.39220118838113 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -137.2395218533462 -67.23527488548514 -38.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.2395218533462 -67.23527488548514 -38.800000000000054 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -136.80348947238699 -67.99050512305173 -40.105137148104696 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -136.80348947238699 -67.99050512305173 -40.105137148104696 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -136.28601011775885 -68.88680565713561 -41.28528137423862 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -136.28601011775885 -68.88680565713561 -41.28528137423862 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -135.6959380046919 -69.9088405370971 -42.32024008349487 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -135.6959380046919 -69.9088405370971 -42.32024008349487 + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -137.83892438837398 -66.19707924063145 -35.9058285412303 + vertex -137.99203859888243 -65.93187764867001 -34.36631430664067 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -137.99203859888243 -65.93187764867001 -34.36631430664067 + vertex -138.04336943063956 -65.84297004007189 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -135.6959380046919 -69.9088405370971 -42.32024008349487 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -135.04336943063956 -71.03912246277851 -43.19230484541332 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -135.04336943063956 -71.03912246277851 -43.19230484541332 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -134.33947002483012 -72.25831199705806 -43.8865543901355 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -134.33947002483012 -72.25831199705806 -43.8865543901355 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -133.5962837012547 -73.54554846898098 -44.391109915468874 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -133.5962837012547 -73.54554846898098 -44.391109915468874 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -132.8265265839599 -74.87880690562336 -44.69733833648578 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -132.8265265839599 -74.87880690562336 -44.69733833648578 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -132.0433694306396 -76.23527488548514 -44.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -132.0433694306396 -76.23527488548514 -44.800000000000054 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -131.26021227731925 -77.59174286534694 -44.69733833648578 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -131.26021227731925 -77.59174286534694 -44.69733833648578 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -130.49045516002442 -78.92500130198931 -44.391109915468874 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -130.49045516002442 -78.92500130198931 -44.391109915468874 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -129.74726883644905 -80.21223777391224 -43.8865543901355 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -129.74726883644905 -80.21223777391224 -43.8865543901355 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -129.0433694306396 -81.43142730819177 -43.192304845413325 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -129.0433694306396 -81.43142730819177 -43.192304845413325 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -128.39080085658725 -82.56170923387319 -42.32024008349488 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -128.39080085658725 -82.56170923387319 -42.32024008349488 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -127.8007287435203 -83.5837441138347 -41.285281374238636 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -127.8007287435203 -83.5837441138347 -41.285281374238636 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -127.28324938889217 -84.48004464791855 -40.10513714810471 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -127.28324938889217 -84.48004464791855 -40.10513714810471 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -126.84721700793295 -85.23527488548515 -38.80000000000006 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -126.84721700793295 -85.23527488548515 -38.80000000000006 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -126.50009223557186 -85.83651262778034 -37.392201188381144 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -126.50009223557186 -85.83651262778034 -37.392201188381144 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -126.24781447290516 -86.27347053033886 -35.905828541230306 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -126.24781447290516 -86.27347053033886 -35.905828541230306 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -126.09470026239671 -86.53867212230028 -34.36631430664068 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -126.09470026239671 -86.53867212230028 -34.36631430664068 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -126.04336943063956 -86.62757973089842 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -135.6959380046919 -69.9088405370971 -23.279759916505228 + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -135.6959380046919 -69.9088405370971 -23.279759916505228 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -136.28601011775885 -68.88680565713561 -24.314718625761483 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -136.28601011775885 -68.88680565713561 -24.314718625761483 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -136.80348947238699 -67.99050512305173 -25.4948628518954 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -136.80348947238699 -67.99050512305173 -25.4948628518954 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -137.2395218533462 -67.23527488548514 -26.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.2395218533462 -67.23527488548514 -26.800000000000054 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -137.5866466257073 -66.63403714318997 -28.207798811618975 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.5866466257073 -66.63403714318997 -28.207798811618975 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -137.83892438837398 -66.19707924063145 -29.6941714587698 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.83892438837398 -66.19707924063145 -29.6941714587698 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -137.99203859888243 -65.93187764867001 -31.233685693359433 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -137.99203859888243 -65.93187764867001 -31.233685693359433 + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -138.04336943063956 -65.84297004007189 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -135.6959380046919 -69.9088405370971 -23.279759916505228 + vertex -135.04336943063956 -71.03912246277852 -22.40769515458679 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -135.04336943063956 -71.03912246277852 -22.40769515458679 + vertex -134.33947002483012 -72.25831199705806 -21.71344560986461 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -134.33947002483012 -72.25831199705806 -21.71344560986461 + vertex -133.5962837012547 -73.54554846898098 -21.208890084531234 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -133.5962837012547 -73.54554846898098 -21.208890084531234 + vertex -132.8265265839599 -74.87880690562336 -20.90266166351433 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -132.8265265839599 -74.87880690562336 -20.90266166351433 + vertex -132.0433694306396 -76.23527488548514 -20.80000000000005 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -132.0433694306396 -76.23527488548514 -20.80000000000005 + vertex -131.26021227731925 -77.59174286534694 -20.90266166351433 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -131.26021227731925 -77.59174286534694 -20.90266166351433 + vertex -130.49045516002442 -78.92500130198931 -21.208890084531237 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -130.49045516002442 -78.92500130198931 -21.208890084531237 + vertex -129.74726883644902 -80.21223777391226 -21.71344560986461 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -129.74726883644902 -80.21223777391226 -21.71344560986461 + vertex -129.04336943063956 -81.43142730819179 -22.407695154586794 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -129.04336943063956 -81.43142730819179 -22.407695154586794 + vertex -128.39080085658725 -82.56170923387319 -23.279759916505235 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -128.39080085658725 -82.56170923387319 -23.279759916505235 + vertex -127.8007287435203 -83.5837441138347 -24.314718625761483 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -127.8007287435203 -83.5837441138347 -24.314718625761483 + vertex -127.28324938889217 -84.48004464791856 -25.494862851895416 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -127.28324938889217 -84.48004464791856 -25.494862851895416 + vertex -126.84721700793295 -85.23527488548515 -26.800000000000058 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -126.84721700793295 -85.23527488548515 -26.800000000000058 + vertex -126.50009223557186 -85.83651262778034 -28.207798811618986 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -126.50009223557186 -85.83651262778034 -28.207798811618986 + vertex -126.24781447290516 -86.27347053033886 -29.69417145876981 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -126.24781447290516 -86.27347053033886 -29.69417145876981 + vertex -126.09470026239671 -86.53867212230028 -31.233685693359437 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -126.09470026239671 -86.53867212230028 -31.233685693359437 + vertex -126.04336943063956 -86.62757973089842 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844389 -0.4999999999999997 -1.892594954730131e-16 + outer loop + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -126.04336943063956 -86.62757973089842 -32.800000000000054 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -170.37500000000006 -88.83977267155386 -3.000000000000062 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -171.37500000000006 -87.10772186398499 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -170.37500000000006 -88.83977267155386 -3.000000000000062 + vertex -170.37500000000006 -88.83977267155386 -62.600000000000065 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.69786561188505e-17 + outer loop + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + vertex -172.30292768969878 -111.31482220219567 -62.600000000000065 + endloop +endfacet +facet normal -0.49999999999999967 0.8660254037844388 7.69786561188505e-17 + outer loop + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + vertex -165.67783335074782 -107.48982220219568 -3.000000000000062 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -1.7258201180401957e-16 + outer loop + vertex -174.9278333507478 -91.46835223218358 -62.600000000000065 + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + vertex -175.9278333507478 -89.73630142461471 -62.600000000000065 + endloop +endfacet +facet normal -0.866025403784439 -0.4999999999999995 -1.7258201180401957e-16 + outer loop + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + vertex -174.9278333507478 -91.46835223218358 -62.600000000000065 + vertex -174.92783335074782 -91.46835223218358 -3.000000000000062 + endloop +endfacet +facet normal 0.463928679161666 0.8858725532780165 1.869826112231559e-16 + outer loop + vertex -164.15638755469692 -117.4498200300001 -3.000000000000062 + vertex -165.47279934959988 -116.76041929963284 -62.600000000000065 + vertex -165.47279934959988 -116.76041929963284 -3.000000000000062 + endloop +endfacet +facet normal 0.463928679161666 0.8858725532780165 1.869826112231559e-16 + outer loop + vertex -165.47279934959988 -116.76041929963284 -62.600000000000065 + vertex -164.15638755469692 -117.4498200300001 -3.000000000000062 + vertex -164.1563875546969 -117.4498200300001 -62.600000000000065 + endloop +endfacet +facet normal -0.5088614820537041 -0.8608484141137207 -1.8814124863278161e-16 + outer loop + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -181.10149984918357 -71.91527419881089 -62.600000000000065 + endloop +endfacet +facet normal -0.5088614820537041 -0.8608484141137207 -1.8814124863278161e-16 + outer loop + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -166.9427879993213 -80.28471878135093 -3.0000000000000733 + endloop +endfacet +facet normal -0.9961946980917453 0.0871557427476599 -9.72177645250264e-17 + outer loop + vertex -121.11730055134129 -97.06667572052845 -62.600000000000065 + vertex -121.05538705967449 -96.35900127253034 -3.000000000000062 + vertex -121.05538705967449 -96.35900127253032 -62.600000000000065 + endloop +endfacet +facet normal -0.9961946980917453 0.0871557427476599 -9.72177645250264e-17 + outer loop + vertex -121.05538705967449 -96.35900127253034 -3.000000000000062 + vertex -121.11730055134129 -97.06667572052845 -62.600000000000065 + vertex -121.11730055134132 -97.06667572052847 -3.000000000000062 + endloop +endfacet +facet normal -0.9684976081015079 -0.24902285658480888 -1.4556488299553898e-16 + outer loop + vertex -185.4387908187414 -96.0143915896302 -62.600000000000065 + vertex -185.8400915835195 -94.45365601640981 -3.000000000000062 + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + endloop +endfacet +facet normal -0.9684976081015079 -0.24902285658480888 -1.4556488299553898e-16 + outer loop + vertex -185.8400915835195 -94.45365601640981 -3.000000000000062 + vertex -185.4387908187414 -96.0143915896302 -62.600000000000065 + vertex -185.4387908187414 -96.01439158963021 -3.000000000000062 + endloop +endfacet +facet normal -0.9780650504691567 -0.20829968087053335 -1.4039771887661552e-16 + outer loop + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + vertex -186.1757668800877 -92.8775024932399 -3.000000000000062 + vertex -186.1757668800877 -92.8775024932399 -62.600000000000065 + endloop +endfacet +facet normal -0.9780650504691567 -0.20829968087053335 -1.4039771887661552e-16 + outer loop + vertex -186.1757668800877 -92.8775024932399 -3.000000000000062 + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + vertex -185.8400915835195 -94.45365601640981 -3.000000000000062 + endloop +endfacet +facet normal -0.9999473364568806 -0.010262763409049967 -1.1253499041091418e-16 + outer loop + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -153.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal -0.9999473364568806 -0.010262763409049967 -1.1253499041091418e-16 + outer loop + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -152.83120430088542 -120.88086243345154 -3.000000000000062 + endloop +endfacet +facet normal -0.9301944916753129 0.3670670342824406 -4.7079405236776824e-17 + outer loop + vertex -184.45996930827113 -72.25495624273319 -3.000000000000062 + vertex -183.86844014664095 -70.75594620798753 -62.600000000000065 + vertex -184.45996930827113 -72.25495624273319 -62.600000000000065 + endloop +endfacet +facet normal -0.9301944916753129 0.3670670342824406 -4.7079405236776824e-17 + outer loop + vertex -183.86844014664095 -70.75594620798753 -62.600000000000065 + vertex -184.45996930827113 -72.25495624273319 -3.000000000000062 + vertex -183.86844014664098 -70.75594620798753 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + vertex -162.24146450794694 -80.14178763147345 -62.600000000000065 + vertex -162.24146450794694 -80.14178763147346 -3.0000000000000733 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -162.24146450794694 -80.14178763147345 -62.600000000000065 + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + vertex -150.52555624752685 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal -0.832965141375823 -0.5533254677427698 -1.7706975454735813e-16 + outer loop + vertex -179.97359427394684 -107.62533725842027 -62.600000000000065 + vertex -180.8652792237608 -106.28301249011629 -3.000000000000062 + vertex -180.8652792237608 -106.28301249011629 -62.600000000000065 + endloop +endfacet +facet normal -0.832965141375823 -0.5533254677427698 -1.7706975454735813e-16 + outer loop + vertex -180.8652792237608 -106.28301249011629 -3.000000000000062 + vertex -179.97359427394684 -107.62533725842027 -62.600000000000065 + vertex -179.97359427394684 -107.62533725842027 -3.000000000000062 + endloop +endfacet +facet normal -0.5735764363510409 0.8191520442889955 6.164421566816318e-17 + outer loop + vertex -123.09305442107782 -99.88834467140568 -3.000000000000062 + vertex -122.5111471173357 -99.48088879078615 -62.600000000000065 + vertex -123.09305442107781 -99.88834467140568 -62.600000000000065 + endloop +endfacet +facet normal -0.5735764363510409 0.8191520442889955 6.164421566816318e-17 + outer loop + vertex -122.5111471173357 -99.48088879078615 -62.600000000000065 + vertex -123.09305442107782 -99.88834467140568 -3.000000000000062 + vertex -122.51114711733571 -99.48088879078617 -3.000000000000062 + endloop +endfacet +facet normal -0.6377703208595383 -0.7702266016119681 -1.8858520825170067e-16 + outer loop + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + vertex -173.52216003924204 -114.7941924405858 -3.000000000000062 + vertex -173.522160039242 -114.79419244058579 -62.600000000000065 + endloop +endfacet +facet normal -0.6377703208595383 -0.7702266016119681 -1.8858520825170067e-16 + outer loop + vertex -173.52216003924204 -114.7941924405858 -3.000000000000062 + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + vertex -172.28093853645183 -115.82196041748446 -3.000000000000062 + endloop +endfacet +facet normal -0.7071067811865518 0.7071067811865431 2.968816052123318e-17 + outer loop + vertex -122.51114711733571 -99.48088879078617 -3.000000000000062 + vertex -122.0088342642253 -98.97857593767576 -62.600000000000065 + vertex -122.5111471173357 -99.48088879078615 -62.600000000000065 + endloop +endfacet +facet normal -0.7071067811865518 0.7071067811865431 2.968816052123318e-17 + outer loop + vertex -122.0088342642253 -98.97857593767576 -62.600000000000065 + vertex -122.51114711733571 -99.48088879078617 -3.000000000000062 + vertex -122.0088342642253 -98.97857593767576 -3.000000000000062 + endloop +endfacet +facet normal -0.6694253404686544 -0.7428793398247298 -1.8791505907811667e-16 + outer loop + vertex -173.522160039242 -114.79419244058579 -62.600000000000065 + vertex -174.7193113822874 -113.7154123447499 -3.000000000000062 + vertex -174.71931138228737 -113.7154123447499 -62.600000000000065 + endloop +endfacet +facet normal -0.6694253404686544 -0.7428793398247298 -1.8791505907811667e-16 + outer loop + vertex -174.7193113822874 -113.7154123447499 -3.000000000000062 + vertex -173.522160039242 -114.79419244058579 -62.600000000000065 + vertex -173.52216003924204 -114.7941924405858 -3.000000000000062 + endloop +endfacet +facet normal -0.9140288370919263 0.4056492141794201 -3.9384090777526054e-17 + outer loop + vertex -183.86844014664098 -70.75594620798753 -3.000000000000062 + vertex -183.21473573526941 -69.28298715360737 -62.600000000000065 + vertex -183.86844014664095 -70.75594620798753 -62.600000000000065 + endloop +endfacet +facet normal -0.9140288370919263 0.4056492141794201 -3.9384090777526054e-17 + outer loop + vertex -183.21473573526941 -69.28298715360737 -62.600000000000065 + vertex -183.86844014664098 -70.75594620798753 -3.000000000000062 + vertex -183.21473573526944 -69.28298715360738 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -137.79045781652974 -37.79140174573234 -42.69777747886726 + vertex -138.17868638418352 -38.463833349858376 -42.800000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -137.79045781652974 -37.79140174573234 -42.69777747886726 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -137.42868638418355 -37.16479524418171 -42.39807621135338 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -137.42868638418355 -37.16479524418171 -42.39807621135338 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -137.11802621240372 -36.62671604277097 -41.9213203435597 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -137.11802621240372 -36.62671604277097 -41.9213203435597 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -136.87964827850686 -36.21383334985837 -41.30000000000006 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.87964827850686 -36.21383334985837 -41.30000000000006 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -136.72979764474994 -35.95428443864494 -40.57645713530762 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.72979764474994 -35.95428443864494 -40.57645713530762 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -136.67868638418352 -35.86575713850505 -25.800000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.67868638418352 -35.86575713850505 -25.800000000000054 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -136.7297976447499 -35.95428443864494 -25.02354286469249 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.7297976447499 -35.95428443864494 -25.02354286469249 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -136.87964827850686 -36.213833349858376 -24.300000000000058 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -136.87964827850686 -36.213833349858376 -24.300000000000058 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -137.1180262124037 -36.62671604277098 -23.678679656440412 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -137.1180262124037 -36.62671604277098 -23.678679656440412 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -137.42868638418352 -37.164795244181704 -23.201923788646738 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -137.42868638418352 -37.164795244181704 -23.201923788646738 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -137.79045781652974 -37.791401745732315 -22.902222521132845 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -137.79045781652974 -37.791401745732315 -22.902222521132845 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -138.17868638418352 -38.46383334985837 -22.800000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -138.17868638418352 -38.46383334985837 -22.800000000000054 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -139.62757512361713 -40.97338226107177 -40.576457135307614 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -139.62757512361713 -40.97338226107177 -40.576457135307614 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -139.4777244898602 -40.71383334985835 -41.300000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -139.4777244898602 -40.71383334985835 -41.300000000000054 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -139.4777244898602 -40.71383334985835 -41.300000000000054 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -139.23934655596338 -40.30095065694574 -41.9213203435597 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -139.23934655596338 -40.30095065694574 -41.9213203435597 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -138.92868638418352 -39.76287145553502 -42.39807621135337 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -138.92868638418352 -39.76287145553502 -42.39807621135337 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -138.56691495183733 -39.13626495398441 -42.69777747886726 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -138.56691495183733 -39.13626495398441 -42.69777747886726 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + vertex -138.17868638418352 -38.463833349858376 -42.800000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -139.62757512361713 -40.97338226107177 -40.576457135307614 + vertex -139.67868638418355 -41.06190956121165 -39.800000000000054 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -139.67868638418355 -41.06190956121165 -39.800000000000054 + vertex -139.67868638418355 -41.06190956121165 -25.800000000000047 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -139.67868638418355 -41.06190956121165 -25.800000000000047 + vertex -139.62757512361713 -40.97338226107177 -25.02354286469249 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -139.62757512361713 -40.97338226107177 -25.02354286469249 + vertex -139.4777244898602 -40.713833349858334 -24.30000000000005 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -139.4777244898602 -40.713833349858334 -24.30000000000005 + vertex -139.23934655596335 -40.30095065694573 -23.678679656440412 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -139.23934655596335 -40.30095065694573 -23.678679656440412 + vertex -138.92868638418352 -39.76287145553501 -23.201923788646738 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -138.92868638418352 -39.76287145553501 -23.201923788646738 + vertex -138.56691495183733 -39.13626495398439 -22.902222521132845 + endloop +endfacet +facet normal 0.866025403784438 -0.5000000000000011 1.9625534153898658e-17 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -138.56691495183733 -39.13626495398439 -22.902222521132845 + vertex -138.17868638418352 -38.46383334985837 -22.800000000000054 + endloop +endfacet +facet normal 0.8660254037844383 -0.500000000000001 1.9625534153898698e-17 + outer loop + vertex -149.54404727542408 -58.14921585984325 -62.60000000000005 + vertex -162.24146450794694 -80.14178763147346 -3.0000000000000733 + vertex -162.24146450794694 -80.14178763147345 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844383 -0.500000000000001 1.9625534153898698e-17 + outer loop + vertex -162.24146450794694 -80.14178763147346 -3.0000000000000733 + vertex -149.54404727542408 -58.14921585984325 -62.60000000000005 + vertex -149.54404727542408 -58.14921585984326 -3.000000000000051 + endloop +endfacet +facet normal -0.9688260316082291 0.24774204422796448 -6.961791905771806e-17 + outer loop + vertex -185.85170873014454 -76.88186053635415 -62.600000000000065 + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -185.4524719966983 -75.32059570808373 -62.600000000000065 + endloop +endfacet +facet normal -0.9688260316082291 0.24774204422796448 -6.961791905771806e-17 + outer loop + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -185.85170873014454 -76.88186053635415 -62.600000000000065 + vertex -185.85170873014454 -76.88186053635415 -3.000000000000062 + endloop +endfacet +facet normal -0.9965567391136523 0.08291360399333735 -9.790680320921636e-17 + outer loop + vertex -186.78694043921737 -83.25253728872076 -62.600000000000065 + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + endloop +endfacet +facet normal -0.9965567391136523 0.08291360399333735 -9.790680320921636e-17 + outer loop + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + vertex -186.78694043921737 -83.25253728872076 -62.600000000000065 + vertex -186.78694043921737 -83.25253728872076 -3.000000000000062 + endloop +endfacet +facet normal -0.258819045102516 0.9659258262890695 1.1902318351521168e-16 + outer loop + vertex -124.423047334483 -100.37242250367015 -3.000000000000062 + vertex -123.73687521648672 -100.1885632387843 -62.600000000000065 + vertex -124.423047334483 -100.37242250367015 -62.600000000000065 + endloop +endfacet +facet normal -0.258819045102516 0.9659258262890695 1.1902318351521168e-16 + outer loop + vertex -123.73687521648672 -100.1885632387843 -62.600000000000065 + vertex -124.423047334483 -100.37242250367015 -3.000000000000062 + vertex -123.73687521648675 -100.1885632387843 -3.000000000000062 + endloop +endfacet +facet normal -0.9859209640962909 -0.16721199883812263 -1.3498487096514298e-16 + outer loop + vertex -186.1757668800877 -92.8775024932399 -62.600000000000065 + vertex -186.44522930588298 -91.28868915165077 -3.000000000000062 + vertex -186.44522930588298 -91.28868915165076 -62.600000000000065 + endloop +endfacet +facet normal -0.9859209640962909 -0.16721199883812263 -1.3498487096514298e-16 + outer loop + vertex -186.44522930588298 -91.28868915165077 -3.000000000000062 + vertex -186.1757668800877 -92.8775024932399 -62.600000000000065 + vertex -186.1757668800877 -92.8775024932399 -3.000000000000062 + endloop +endfacet +facet normal -0.8090947071516227 -0.5876782749593777 -1.7967531110889026e-16 + outer loop + vertex -179.0265497157926 -108.92919478062029 -62.600000000000065 + vertex -179.97359427394684 -107.62533725842027 -3.000000000000062 + vertex -179.97359427394684 -107.62533725842027 -62.600000000000065 + endloop +endfacet +facet normal -0.8090947071516227 -0.5876782749593777 -1.7967531110889026e-16 + outer loop + vertex -179.97359427394684 -107.62533725842027 -3.000000000000062 + vertex -179.0265497157926 -108.92919478062029 -62.600000000000065 + vertex -179.0265497157926 -108.92919478062029 -3.000000000000062 + endloop +endfacet +facet normal 0.14720786925726986 0.9891055773923907 1.676259211423392e-16 + outer loop + vertex -154.30102097334645 -120.66211067883884 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -154.30102097334645 -120.66211067883884 -62.600000000000065 + endloop +endfacet +facet normal 0.14720786925726986 0.9891055773923907 1.676259211423392e-16 + outer loop + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -154.30102097334645 -120.66211067883884 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -3.000000000000062 + endloop +endfacet +facet normal -0.8962637115698704 0.4435215432456468 -3.161985758607215e-17 + outer loop + vertex -183.21473573526944 -69.28298715360738 -3.000000000000062 + vertex -182.50000000000003 -67.83865662978121 -62.600000000000065 + vertex -183.21473573526941 -69.28298715360737 -62.600000000000065 + endloop +endfacet +facet normal -0.8962637115698704 0.4435215432456468 -3.161985758607215e-17 + outer loop + vertex -182.50000000000003 -67.83865662978121 -62.600000000000065 + vertex -183.21473573526944 -69.28298715360738 -3.000000000000062 + vertex -182.50000000000003 -67.83865662978121 -3.000000000000062 + endloop +endfacet +facet normal -0.9063077870366494 0.42261826174070066 -3.5931751782467846e-17 + outer loop + vertex -121.60137838360578 -98.39666863393364 -3.000000000000062 + vertex -121.30115981622716 -97.75284783852473 -62.600000000000065 + vertex -121.60137838360576 -98.39666863393364 -62.600000000000065 + endloop +endfacet +facet normal -0.9063077870366494 0.42261826174070066 -3.5931751782467846e-17 + outer loop + vertex -121.30115981622716 -97.75284783852473 -62.600000000000065 + vertex -121.60137838360578 -98.39666863393364 -3.000000000000062 + vertex -121.30115981622716 -97.75284783852474 -3.000000000000062 + endloop +endfacet +facet normal -0.9447323868310465 0.3278425190125801 -5.469233483307261e-17 + outer loop + vertex -184.98828809559382 -73.77739412070686 -3.000000000000062 + vertex -184.45996930827113 -72.25495624273319 -62.600000000000065 + vertex -184.9882880955938 -73.77739412070684 -62.600000000000065 + endloop +endfacet +facet normal -0.9447323868310465 0.3278425190125801 -5.469233483307261e-17 + outer loop + vertex -184.45996930827113 -72.25495624273319 -62.600000000000065 + vertex -184.98828809559382 -73.77739412070686 -3.000000000000062 + vertex -184.45996930827113 -72.25495624273319 -3.000000000000062 + endloop +endfacet +facet normal -0.9964462355504122 -0.08423122732937333 -1.2346042516618207e-16 + outer loop + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + vertex -186.7837460938633 -88.08422144198268 -3.000000000000062 + vertex -186.7837460938633 -88.08422144198268 -62.600000000000065 + endloop +endfacet +facet normal -0.9964462355504122 -0.08423122732937333 -1.2346042516618207e-16 + outer loop + vertex -186.7837460938633 -88.08422144198268 -3.000000000000062 + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + vertex -186.6480073251051 -89.68999627675343 -3.000000000000062 + endloop +endfacet +facet normal -0.6049992586789363 -0.7962260338609493 -1.8892534971894305e-16 + outer loop + vertex -170.99781890355263 -116.79691777090852 -62.600000000000065 + vertex -172.28093853645183 -115.82196041748446 -3.000000000000062 + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + endloop +endfacet +facet normal -0.6049992586789363 -0.7962260338609493 -1.8892534971894305e-16 + outer loop + vertex -172.28093853645183 -115.82196041748446 -3.000000000000062 + vertex -170.99781890355263 -116.79691777090852 -62.600000000000065 + vertex -170.99781890355263 -116.79691777090852 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.8925949547301314e-16 + outer loop + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -135.488087460942 -29.803579312013984 -62.60000000000003 + vertex -135.488087460942 -29.803579312013987 -3.0000000000000284 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.8925949547301314e-16 + outer loop + vertex -135.488087460942 -29.803579312013984 -62.60000000000003 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + endloop +endfacet +facet normal -0.9922171154055797 0.12451986145282407 -9.106128389727817e-17 + outer loop + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + vertex -186.4526610503061 -80.0476247769353 -3.000000000000062 + vertex -186.4526610503061 -80.04762477693528 -62.600000000000065 + endloop +endfacet +facet normal -0.9922171154055797 0.12451986145282407 -9.106128389727817e-17 + outer loop + vertex -186.4526610503061 -80.0476247769353 -3.000000000000062 + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + endloop +endfacet +facet normal -0.9920516018175768 -0.12583171035625318 -1.293358112740155e-16 + outer loop + vertex -186.44522930588298 -91.28868915165076 -62.600000000000065 + vertex -186.6480073251051 -89.68999627675343 -3.000000000000062 + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + endloop +endfacet +facet normal -0.9920516018175768 -0.12583171035625318 -1.293358112740155e-16 + outer loop + vertex -186.6480073251051 -89.68999627675343 -3.000000000000062 + vertex -186.44522930588298 -91.28868915165076 -62.600000000000065 + vertex -186.44522930588298 -91.28868915165077 -3.000000000000062 + endloop +endfacet +facet normal 0.5000000000000009 0.8660254037844384 1.6454656576428186e-16 + outer loop + vertex -179.8971508823612 -69.34141226851 -3.0000000000000733 + vertex -182.50000000000003 -67.83865662978121 -62.600000000000065 + vertex -182.50000000000003 -67.83865662978121 -3.000000000000062 + endloop +endfacet +facet normal 0.5000000000000009 0.8660254037844384 1.6454656576428186e-16 + outer loop + vertex -182.50000000000003 -67.83865662978121 -62.600000000000065 + vertex -179.8971508823612 -69.34141226851 -3.0000000000000733 + vertex -179.8971508823612 -69.34141226850998 -62.60000000000008 + endloop +endfacet +facet normal 0.5000000000000009 0.8660254037844384 1.6454656576428186e-16 + outer loop + vertex -179.8971508823612 -69.34141226850998 -62.60000000000008 + vertex -179.8971508823612 -69.34141226851 -3.0000000000000733 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + endloop +endfacet +facet normal 0.5000000000000009 0.8660254037844384 1.6454656576428186e-16 + outer loop + vertex -179.8971508823612 -69.34141226850998 -62.60000000000008 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + endloop +endfacet +facet normal 1.0547118733938985e-15 -1.0 -1.529564776501206e-16 + outer loop + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -155.38557599864257 -104.43433599533697 -62.600000000000065 + vertex -153.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 1.0547118733938985e-15 -1.0 -1.529564776501206e-16 + outer loop + vertex -155.38557599864257 -104.43433599533697 -62.600000000000065 + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -155.3855759986426 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -0.8762939397707025 -0.4817768478467397 -1.7093417315095018e-16 + outer loop + vertex -181.7000441941546 -104.9045694272622 -62.600000000000065 + vertex -182.47642841905977 -103.49242022528482 -3.000000000000062 + vertex -182.47642841905974 -103.4924202252848 -62.600000000000065 + endloop +endfacet +facet normal -0.8762939397707025 -0.4817768478467397 -1.7093417315095018e-16 + outer loop + vertex -182.47642841905977 -103.49242022528482 -3.000000000000062 + vertex -181.7000441941546 -104.9045694272622 -62.600000000000065 + vertex -181.7000441941546 -104.90456942726223 -3.000000000000062 + endloop +endfacet +facet normal -0.699908923976171 -0.7142321038279633 -1.869160749009371e-16 + outer loop + vertex -174.71931138228737 -113.7154123447499 -62.600000000000065 + vertex -175.87029765489729 -112.58750790128374 -3.000000000000062 + vertex -175.87029765489726 -112.58750790128374 -62.600000000000065 + endloop +endfacet +facet normal -0.699908923976171 -0.7142321038279633 -1.869160749009371e-16 + outer loop + vertex -175.87029765489729 -112.58750790128374 -3.000000000000062 + vertex -174.71931138228737 -113.7154123447499 -62.600000000000065 + vertex -174.7193113822874 -113.7154123447499 -3.000000000000062 + endloop +endfacet +facet normal -0.9576170825074752 0.2880443078588285 -6.220955760198349e-17 + outer loop + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -184.9882880955938 -73.77739412070684 -62.600000000000065 + vertex -185.4524719966983 -75.32059570808373 -62.600000000000065 + endloop +endfacet +facet normal -0.9576170825074752 0.2880443078588285 -6.220955760198349e-17 + outer loop + vertex -184.9882880955938 -73.77739412070684 -62.600000000000065 + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -184.98828809559382 -73.77739412070686 -3.000000000000062 + endloop +endfacet +facet normal -0.5711695004343966 -0.8208321398273353 -1.8893488826187028e-16 + outer loop + vertex -169.6750464882625 -117.71735841031693 -62.600000000000065 + vertex -170.99781890355263 -116.79691777090852 -3.000000000000062 + vertex -170.99781890355263 -116.79691777090852 -62.600000000000065 + endloop +endfacet +facet normal -0.5711695004343966 -0.8208321398273353 -1.8893488826187028e-16 + outer loop + vertex -170.99781890355263 -116.79691777090852 -3.000000000000062 + vertex -169.6750464882625 -117.71735841031693 -62.600000000000065 + vertex -169.6750464882625 -117.71735841031693 -3.000000000000062 + endloop +endfacet +facet normal -0.25881904510253206 -0.9659258262890653 -1.7646604060570632e-16 + outer loop + vertex -144.6208573105543 -56.357321254992605 -62.60000000000005 + vertex -145.30702942855058 -56.173461990106745 -3.000000000000051 + vertex -145.30702942855055 -56.173461990106745 -62.60000000000005 + endloop +endfacet +facet normal -0.25881904510253206 -0.9659258262890653 -1.7646604060570632e-16 + outer loop + vertex -145.30702942855058 -56.173461990106745 -3.000000000000051 + vertex -144.6208573105543 -56.357321254992605 -62.60000000000005 + vertex -144.6208573105543 -56.357321254992605 -3.000000000000051 + endloop +endfacet +facet normal -0.8191520442889846 0.5735764363510566 -3.1699543601946607e-18 + outer loop + vertex -122.0088342642253 -98.97857593767576 -3.000000000000062 + vertex -121.60137838360576 -98.39666863393364 -62.600000000000065 + vertex -122.0088342642253 -98.97857593767576 -62.600000000000065 + endloop +endfacet +facet normal -0.8191520442889846 0.5735764363510566 -3.1699543601946607e-18 + outer loop + vertex -121.60137838360576 -98.39666863393364 -62.600000000000065 + vertex -122.0088342642253 -98.97857593767576 -3.000000000000062 + vertex -121.60137838360578 -98.39666863393364 -3.000000000000062 + endloop +endfacet +facet normal -0.5713404822174107 -0.8207131370823649 -1.889356600540166e-16 + outer loop + vertex -143.4299095783621 -57.03842292728552 -62.600000000000065 + vertex -143.9770365151454 -56.65753982237123 -3.000000000000051 + vertex -143.97703651514536 -56.65753982237123 -62.60000000000005 + endloop +endfacet +facet normal -0.5713404822174107 -0.8207131370823649 -1.889356600540166e-16 + outer loop + vertex -143.9770365151454 -56.65753982237123 -3.000000000000051 + vertex -143.4299095783621 -57.03842292728552 -62.600000000000065 + vertex -143.42990957836213 -57.03842292728552 -3.000000000000062 + endloop +endfacet +facet normal 0.08715574274766985 -0.9961946980917447 -1.427026653124568e-16 + outer loop + vertex -146.0147038765487 -56.111548498439944 -62.60000000000005 + vertex -146.72237832454684 -56.17346199010676 -3.000000000000051 + vertex -146.72237832454684 -56.173461990106745 -62.60000000000005 + endloop +endfacet +facet normal 0.08715574274766985 -0.9961946980917447 -1.427026653124568e-16 + outer loop + vertex -146.72237832454684 -56.17346199010676 -3.000000000000051 + vertex -146.0147038765487 -56.111548498439944 -62.60000000000005 + vertex -146.0147038765487 -56.111548498439944 -3.000000000000051 + endloop +endfacet +facet normal -0.9961946980917452 -0.08715574274766245 -1.2387983536035098e-16 + outer loop + vertex -121.05538705967449 -96.35900127253032 -62.600000000000065 + vertex -121.11730055134132 -95.65132682453219 -3.000000000000062 + vertex -121.11730055134129 -95.65132682453219 -62.600000000000065 + endloop +endfacet +facet normal -0.9961946980917452 -0.08715574274766245 -1.2387983536035098e-16 + outer loop + vertex -121.11730055134132 -95.65132682453219 -3.000000000000062 + vertex -121.05538705967449 -96.35900127253032 -62.600000000000065 + vertex -121.05538705967449 -96.35900127253034 -3.000000000000062 + endloop +endfacet +facet normal -0.0871557427476532 -0.9961946980917461 -1.620461988352189e-16 + outer loop + vertex -145.30702942855055 -56.173461990106745 -62.60000000000005 + vertex -146.0147038765487 -56.111548498439944 -3.000000000000051 + vertex -146.0147038765487 -56.111548498439944 -62.60000000000005 + endloop +endfacet +facet normal -0.0871557427476532 -0.9961946980917461 -1.620461988352189e-16 + outer loop + vertex -146.0147038765487 -56.111548498439944 -3.000000000000051 + vertex -145.30702942855055 -56.173461990106745 -62.60000000000005 + vertex -145.30702942855058 -56.173461990106745 -3.000000000000051 + endloop +endfacet +facet normal -0.8152236677528554 -0.5791462436514476 -1.7905041902021298e-16 + outer loop + vertex -142.48536047767334 -58.14921585984326 -62.600000000000044 + vertex -142.89319062544632 -57.575141880201315 -3.000000000000062 + vertex -142.89319062544632 -57.575141880201315 -62.600000000000065 + endloop +endfacet +facet normal -0.8152236677528554 -0.5791462436514476 -1.7905041902021298e-16 + outer loop + vertex -142.89319062544632 -57.575141880201315 -3.000000000000062 + vertex -142.48536047767334 -58.14921585984326 -62.600000000000044 + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + endloop +endfacet +facet normal 0.7071067811865518 -0.7071067811865431 -2.968816052123318e-17 + outer loop + vertex -148.63427854169413 -57.064995702990736 -62.60000000000005 + vertex -149.13659139480455 -57.56730855610115 -3.000000000000051 + vertex -149.13659139480453 -57.567308556101146 -62.60000000000005 + endloop +endfacet +facet normal 0.7071067811865518 -0.7071067811865431 -2.968816052123318e-17 + outer loop + vertex -149.13659139480455 -57.56730855610115 -3.000000000000051 + vertex -148.63427854169413 -57.064995702990736 -62.60000000000005 + vertex -148.63427854169413 -57.064995702990736 -3.000000000000051 + endloop +endfacet +facet normal -0.4226182617407045 0.9063077870366477 9.172724251549004e-17 + outer loop + vertex -123.73687521648675 -100.1885632387843 -3.000000000000062 + vertex -123.09305442107781 -99.88834467140568 -62.600000000000065 + vertex -123.73687521648672 -100.1885632387843 -62.600000000000065 + endloop +endfacet +facet normal -0.4226182617407045 0.9063077870366477 9.172724251549004e-17 + outer loop + vertex -123.09305442107781 -99.88834467140568 -62.600000000000065 + vertex -123.73687521648675 -100.1885632387843 -3.000000000000062 + vertex -123.09305442107782 -99.88834467140568 -3.000000000000062 + endloop +endfacet +facet normal -0.7128176874195393 -0.7013493740653512 -1.863780773340388e-16 + outer loop + vertex -142.89319062544632 -57.575141880201315 -62.600000000000065 + vertex -143.3951292114033 -57.06499570299075 -3.000000000000051 + vertex -143.3951292114033 -57.06499570299075 -62.600000000000044 + endloop +endfacet +facet normal -0.7128176874195393 -0.7013493740653512 -1.863780773340388e-16 + outer loop + vertex -143.3951292114033 -57.06499570299075 -3.000000000000051 + vertex -142.89319062544632 -57.575141880201315 -62.600000000000065 + vertex -142.89319062544632 -57.575141880201315 -3.000000000000062 + endloop +endfacet +facet normal 0.5735764363510409 -0.8191520442889955 -6.164421566816318e-17 + outer loop + vertex -148.05237123795203 -56.65753982237123 -62.60000000000005 + vertex -148.63427854169413 -57.064995702990736 -3.000000000000051 + vertex -148.63427854169413 -57.064995702990736 -62.60000000000005 + endloop +endfacet +facet normal 0.5735764363510409 -0.8191520442889955 -6.164421566816318e-17 + outer loop + vertex -148.63427854169413 -57.064995702990736 -3.000000000000051 + vertex -148.05237123795203 -56.65753982237123 -62.60000000000005 + vertex -148.05237123795203 -56.657539822371234 -3.000000000000051 + endloop +endfacet +facet normal -2.775557561562891e-16 1.0 1.529564776501207e-16 + outer loop + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + vertex -125.13072178248112 -100.43433599533697 -62.600000000000065 + vertex -150.52555624752685 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal -2.775557561562891e-16 1.0 1.529564776501207e-16 + outer loop + vertex -125.13072178248112 -100.43433599533697 -62.600000000000065 + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + vertex -125.13072178248112 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 0.25881904510251413 -0.9659258262890702 -1.19023183515212e-16 + outer loop + vertex -146.72237832454684 -56.173461990106745 -62.60000000000005 + vertex -147.4085504425431 -56.357321254992605 -3.000000000000051 + vertex -147.4085504425431 -56.357321254992605 -62.60000000000005 + endloop +endfacet +facet normal 0.25881904510251413 -0.9659258262890702 -1.19023183515212e-16 + outer loop + vertex -147.4085504425431 -56.357321254992605 -3.000000000000051 + vertex -146.72237832454684 -56.173461990106745 -62.60000000000005 + vertex -146.72237832454684 -56.17346199010676 -3.000000000000051 + endloop +endfacet +facet normal -0.6071044080923507 -0.7946220722298348 -1.8891362409815958e-16 + outer loop + vertex -143.3951292114033 -57.06499570299075 -62.600000000000044 + vertex -143.42990957836213 -57.03842292728552 -3.000000000000062 + vertex -143.4299095783621 -57.03842292728552 -62.600000000000065 + endloop +endfacet +facet normal -0.6071044080923507 -0.7946220722298348 -1.8891362409815958e-16 + outer loop + vertex -143.42990957836213 -57.03842292728552 -3.000000000000062 + vertex -143.3951292114033 -57.06499570299075 -62.600000000000044 + vertex -143.3951292114033 -57.06499570299075 -3.000000000000051 + endloop +endfacet +facet normal -0.9659258262890695 0.2588190451025158 -6.760178110917347e-17 + outer loop + vertex -121.30115981622716 -97.75284783852473 -62.600000000000065 + vertex -121.11730055134132 -97.06667572052847 -3.000000000000062 + vertex -121.11730055134129 -97.06667572052845 -62.600000000000065 + endloop +endfacet +facet normal -0.9659258262890695 0.2588190451025158 -6.760178110917347e-17 + outer loop + vertex -121.11730055134132 -97.06667572052847 -3.000000000000062 + vertex -121.30115981622716 -97.75284783852473 -62.600000000000065 + vertex -121.30115981622716 -97.75284783852474 -3.000000000000062 + endloop +endfacet +facet normal -0.9659258262890692 -0.25881904510251724 -1.4677788008447076e-16 + outer loop + vertex -121.11730055134129 -95.65132682453219 -62.600000000000065 + vertex -121.30115981622716 -94.96515470653594 -3.000000000000062 + vertex -121.30115981622716 -94.96515470653594 -62.600000000000065 + endloop +endfacet +facet normal -0.9659258262890692 -0.25881904510251724 -1.4677788008447076e-16 + outer loop + vertex -121.30115981622716 -94.96515470653594 -3.000000000000062 + vertex -121.11730055134129 -95.65132682453219 -62.600000000000065 + vertex -121.11730055134132 -95.65132682453219 -3.000000000000062 + endloop +endfacet +facet normal 0.4226182617407045 -0.9063077870366477 -9.172724251549004e-17 + outer loop + vertex -147.4085504425431 -56.357321254992605 -62.60000000000005 + vertex -148.05237123795203 -56.657539822371234 -3.000000000000051 + vertex -148.05237123795203 -56.65753982237123 -62.60000000000005 + endloop +endfacet +facet normal 0.4226182617407045 -0.9063077870366477 -9.172724251549004e-17 + outer loop + vertex -148.05237123795203 -56.657539822371234 -3.000000000000051 + vertex -147.4085504425431 -56.357321254992605 -62.60000000000005 + vertex -147.4085504425431 -56.357321254992605 -3.000000000000051 + endloop +endfacet +facet normal -0.3963729504701247 -0.9180895839380863 -1.8441368268833e-16 + outer loop + vertex -144.05167483247536 -56.603058209358565 -62.600000000000065 + vertex -144.6208573105543 -56.357321254992605 -3.000000000000051 + vertex -144.6208573105543 -56.357321254992605 -62.60000000000005 + endloop +endfacet +facet normal -0.3963729504701247 -0.9180895839380863 -1.8441368268833e-16 + outer loop + vertex -144.6208573105543 -56.357321254992605 -3.000000000000051 + vertex -144.05167483247536 -56.603058209358565 -62.600000000000065 + vertex -144.05167483247536 -56.603058209358565 -3.000000000000062 + endloop +endfacet +facet normal 0.8191520442889846 -0.5735764363510566 3.1699543601946607e-18 + outer loop + vertex -149.13659139480453 -57.567308556101146 -62.60000000000005 + vertex -149.54404727542408 -58.14921585984326 -3.000000000000051 + vertex -149.54404727542408 -58.14921585984325 -62.60000000000005 + endloop +endfacet +facet normal 0.8191520442889846 -0.5735764363510566 3.1699543601946607e-18 + outer loop + vertex -149.54404727542408 -58.14921585984326 -3.000000000000051 + vertex -149.13659139480453 -57.567308556101146 -62.60000000000005 + vertex -149.13659139480455 -57.56730855610115 -3.000000000000051 + endloop +endfacet +facet normal -0.5895807326816714 -0.8077094524954771 -1.8897080252742142e-16 + outer loop + vertex -143.97703651514536 -56.65753982237123 -62.60000000000005 + vertex -144.05167483247536 -56.603058209358565 -3.000000000000062 + vertex -144.05167483247536 -56.603058209358565 -62.600000000000065 + endloop +endfacet +facet normal -0.5895807326816714 -0.8077094524954771 -1.8897080252742142e-16 + outer loop + vertex -144.05167483247536 -56.603058209358565 -3.000000000000062 + vertex -143.97703651514536 -56.65753982237123 -62.60000000000005 + vertex -143.9770365151454 -56.65753982237123 -3.000000000000051 + endloop +endfacet +facet normal -0.08715574274766985 0.9961946980917447 1.427026653124568e-16 + outer loop + vertex -125.13072178248112 -100.43433599533697 -3.000000000000062 + vertex -124.423047334483 -100.37242250367015 -62.600000000000065 + vertex -125.13072178248112 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal -0.08715574274766985 0.9961946980917447 1.427026653124568e-16 + outer loop + vertex -124.423047334483 -100.37242250367015 -62.600000000000065 + vertex -125.13072178248112 -100.43433599533697 -3.000000000000062 + vertex -124.423047334483 -100.37242250367015 -3.000000000000062 + endloop +endfacet +facet normal -0.30989713538576086 -0.9507700907578549 -1.7981606344395116e-16 + outer loop + vertex -159.50749867976714 -122.51137082887449 -62.600000000000065 + vertex -161.03966632807823 -122.01197105835386 -3.000000000000062 + vertex -161.03966632807823 -122.01197105835386 -62.600000000000065 + endloop +endfacet +facet normal -0.30989713538576086 -0.9507700907578549 -1.7981606344395116e-16 + outer loop + vertex -161.03966632807823 -122.01197105835386 -3.000000000000062 + vertex -159.50749867976714 -122.51137082887449 -62.600000000000065 + vertex -159.50749867976717 -122.51137082887449 -3.000000000000062 + endloop +endfacet +facet normal -0.14720786925725476 -0.989105577392393 -1.6762592114233786e-16 + outer loop + vertex -153.2106669582428 -123.85676701721616 -3.000000000000062 + vertex -154.8046123096754 -123.61954128089435 -62.600000000000065 + vertex -153.2106669582428 -123.85676701721613 -62.600000000000065 + endloop +endfacet +facet normal -0.14720786925725476 -0.989105577392393 -1.6762592114233786e-16 + outer loop + vertex -154.8046123096754 -123.61954128089435 -62.600000000000065 + vertex -153.2106669582428 -123.85676701721616 -3.000000000000062 + vertex -154.8046123096754 -123.61954128089435 -3.000000000000062 + endloop +endfacet +facet normal -0.2698621119172056 -0.9628989773343752 -1.7722852548447542e-16 + outer loop + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -159.50749867976717 -122.51137082887449 -3.000000000000062 + vertex -159.50749867976714 -122.51137082887449 -62.600000000000065 + endloop +endfacet +facet normal -0.2698621119172056 -0.9628989773343752 -1.7722852548447542e-16 + outer loop + vertex -159.50749867976717 -122.51137082887449 -3.000000000000062 + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -157.9557853097267 -122.94625408972136 -3.000000000000062 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -104.99807621135338 -100.43433599533701 -41.30000000000007 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -104.99807621135338 -100.43433599533701 -41.30000000000007 + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -105.29777747886726 -100.434335995337 -40.57645713530763 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -105.29777747886726 -100.434335995337 -40.57645713530763 + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -104.99807621135338 -100.43433599533701 -41.30000000000007 + vertex -104.52132034355971 -100.43433599533698 -41.921320343559714 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -104.52132034355971 -100.43433599533698 -41.921320343559714 + vertex -103.90000000000006 -100.43433599533698 -42.398076211353384 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -103.90000000000006 -100.43433599533698 -42.398076211353384 + vertex -103.17645713530764 -100.43433599533697 -42.69777747886727 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -103.17645713530764 -100.43433599533697 -42.69777747886727 + vertex -102.40000000000003 -100.43433599533698 -42.80000000000007 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -105.29777747886726 -100.434335995337 -40.57645713530763 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -105.40000000000005 -100.434335995337 -39.80000000000007 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -105.40000000000005 -100.434335995337 -39.80000000000007 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -105.40000000000008 -100.434335995337 -25.800000000000065 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -105.40000000000008 -100.434335995337 -25.800000000000065 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -105.29777747886726 -100.434335995337 -25.0235428646925 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -105.29777747886726 -100.434335995337 -25.0235428646925 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -104.99807621135338 -100.43433599533701 -24.30000000000006 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -104.99807621135338 -100.43433599533701 -24.30000000000006 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -104.52132034355971 -100.43433599533698 -23.678679656440423 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -104.52132034355971 -100.43433599533698 -23.678679656440423 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -103.90000000000006 -100.43433599533698 -23.20192378864675 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -103.90000000000006 -100.43433599533698 -23.20192378864675 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -103.17645713530761 -100.434335995337 -22.90222252113286 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -103.17645713530761 -100.434335995337 -22.90222252113286 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -102.40000000000006 -100.434335995337 -22.800000000000065 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -99.50222252113285 -100.43433599533701 -40.57645713530763 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -99.50222252113285 -100.43433599533701 -40.57645713530763 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -99.80192378864673 -100.43433599533701 -41.30000000000007 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -99.80192378864673 -100.43433599533701 -41.30000000000007 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -100.27867965644039 -100.43433599533701 -41.921320343559714 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -100.27867965644039 -100.43433599533701 -41.921320343559714 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -100.90000000000003 -100.434335995337 -42.398076211353384 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -100.90000000000003 -100.434335995337 -42.398076211353384 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -101.62354286469248 -100.43433599533698 -42.69777747886727 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -101.62354286469248 -100.43433599533698 -42.69777747886727 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -102.40000000000003 -100.43433599533698 -42.80000000000007 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -99.40000000000005 -100.43433599533698 -25.800000000000065 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -99.40000000000005 -100.43433599533698 -25.800000000000065 + vertex -99.50222252113285 -100.434335995337 -25.0235428646925 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -99.50222252113285 -100.434335995337 -25.0235428646925 + vertex -99.80192378864673 -100.43433599533698 -24.300000000000068 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -99.80192378864673 -100.43433599533698 -24.300000000000068 + vertex -100.27867965644042 -100.434335995337 -23.678679656440423 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -100.27867965644042 -100.434335995337 -23.678679656440423 + vertex -100.90000000000005 -100.43433599533701 -23.20192378864675 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -100.90000000000005 -100.43433599533701 -23.20192378864675 + vertex -101.62354286469248 -100.43433599533701 -22.90222252113286 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -101.62354286469248 -100.43433599533701 -22.90222252113286 + vertex -102.40000000000006 -100.434335995337 -22.800000000000065 + endloop +endfacet +facet normal -4.996003610813203e-16 1.0 1.5295647765012062e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + vertex -102.40000000000006 -100.434335995337 -22.800000000000065 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -133.51561261707312 -65.08527488548513 -26.800000000000054 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -133.51561261707312 -65.08527488548513 -26.800000000000054 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -133.07958023611388 -65.84050512305173 -25.4948628518954 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -133.07958023611388 -65.84050512305173 -25.4948628518954 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -132.56210088148578 -66.7368056571356 -24.314718625761483 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -132.56210088148578 -66.7368056571356 -24.314718625761483 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -131.9720287684188 -67.7588405370971 -23.279759916505228 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -131.9720287684188 -67.7588405370971 -23.279759916505228 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -131.31946019436646 -68.88912246277852 -22.40769515458679 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -131.31946019436646 -68.88912246277852 -22.40769515458679 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -133.51561261707312 -65.08527488548513 -26.800000000000054 + vertex -133.8627373894342 -64.48403714318997 -28.207798811618975 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -133.8627373894342 -64.48403714318997 -28.207798811618975 + vertex -134.11501515210088 -64.04707924063145 -29.6941714587698 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -134.11501515210088 -64.04707924063145 -29.6941714587698 + vertex -134.26812936260933 -63.781877648670005 -31.233685693359433 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -134.26812936260933 -63.781877648670005 -31.233685693359433 + vertex -134.31946019436648 -63.69297004007188 -32.800000000000054 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -131.31946019436646 -68.88912246277852 -22.40769515458679 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -130.615560788557 -70.10831199705805 -21.71344560986461 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -130.615560788557 -70.10831199705805 -21.71344560986461 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -129.87237446498162 -71.39554846898098 -21.208890084531234 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -129.87237446498162 -71.39554846898098 -21.208890084531234 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -129.1026173476868 -72.72880690562336 -20.90266166351433 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -129.1026173476868 -72.72880690562336 -20.90266166351433 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -128.31946019436646 -74.08527488548513 -20.80000000000005 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -128.31946019436646 -74.08527488548513 -20.80000000000005 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -127.53630304104615 -75.44174286534694 -20.90266166351433 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -127.53630304104615 -75.44174286534694 -20.90266166351433 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -126.76654592375135 -76.7750013019893 -21.208890084531237 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -126.76654592375135 -76.7750013019893 -21.208890084531237 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -126.02335960017594 -78.06223777391226 -21.71344560986461 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -126.02335960017594 -78.06223777391226 -21.71344560986461 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -125.31946019436647 -79.28142730819178 -22.407695154586794 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -125.31946019436647 -79.28142730819178 -22.407695154586794 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -124.66689162031415 -80.41170923387318 -23.279759916505235 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -124.66689162031415 -80.41170923387318 -23.279759916505235 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -124.0768195072472 -81.43374411383469 -24.314718625761483 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -124.0768195072472 -81.43374411383469 -24.314718625761483 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -123.55934015261907 -82.33004464791856 -25.494862851895416 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -123.55934015261907 -82.33004464791856 -25.494862851895416 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -123.12330777165984 -83.08527488548516 -26.800000000000058 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -123.12330777165984 -83.08527488548516 -26.800000000000058 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -122.77618299929875 -83.68651262778033 -28.207798811618986 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -122.77618299929875 -83.68651262778033 -28.207798811618986 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -122.52390523663206 -84.12347053033885 -29.69417145876981 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -122.52390523663206 -84.12347053033885 -29.69417145876981 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -122.37079102612361 -84.38867212230028 -31.233685693359437 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -122.37079102612361 -84.38867212230028 -31.233685693359437 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -122.31946019436648 -84.47757973089841 -32.800000000000054 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -131.31946019436648 -68.8891224627785 -43.19230484541332 + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -131.31946019436648 -68.8891224627785 -43.19230484541332 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -131.9720287684188 -67.7588405370971 -42.32024008349487 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -131.9720287684188 -67.7588405370971 -42.32024008349487 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -132.56210088148578 -66.7368056571356 -41.28528137423862 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -132.56210088148578 -66.7368056571356 -41.28528137423862 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -133.07958023611388 -65.84050512305173 -40.105137148104696 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -133.07958023611388 -65.84050512305173 -40.105137148104696 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -133.51561261707312 -65.08527488548513 -38.800000000000054 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -133.51561261707312 -65.08527488548513 -38.800000000000054 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -133.8627373894342 -64.48403714318997 -37.39220118838113 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -133.8627373894342 -64.48403714318997 -37.39220118838113 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -134.11501515210088 -64.04707924063145 -35.9058285412303 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -134.11501515210088 -64.04707924063145 -35.9058285412303 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -134.26812936260933 -63.781877648670005 -34.36631430664067 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -134.26812936260933 -63.781877648670005 -34.36631430664067 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -134.31946019436648 -63.69297004007188 -32.800000000000054 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -131.31946019436648 -68.8891224627785 -43.19230484541332 + vertex -130.615560788557 -70.10831199705805 -43.8865543901355 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -130.615560788557 -70.10831199705805 -43.8865543901355 + vertex -129.87237446498162 -71.39554846898098 -44.391109915468874 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -129.87237446498162 -71.39554846898098 -44.391109915468874 + vertex -129.1026173476868 -72.72880690562336 -44.69733833648578 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -129.1026173476868 -72.72880690562336 -44.69733833648578 + vertex -128.31946019436646 -74.08527488548513 -44.800000000000054 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -128.31946019436646 -74.08527488548513 -44.800000000000054 + vertex -127.53630304104615 -75.44174286534694 -44.69733833648578 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -127.53630304104615 -75.44174286534694 -44.69733833648578 + vertex -126.76654592375135 -76.7750013019893 -44.391109915468874 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -126.76654592375135 -76.7750013019893 -44.391109915468874 + vertex -126.02335960017594 -78.06223777391224 -43.8865543901355 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -126.02335960017594 -78.06223777391224 -43.8865543901355 + vertex -125.31946019436647 -79.28142730819178 -43.192304845413325 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -125.31946019436647 -79.28142730819178 -43.192304845413325 + vertex -124.66689162031415 -80.41170923387318 -42.32024008349488 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -124.66689162031415 -80.41170923387318 -42.32024008349488 + vertex -124.0768195072472 -81.43374411383469 -41.285281374238636 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -124.0768195072472 -81.43374411383469 -41.285281374238636 + vertex -123.55934015261907 -82.33004464791854 -40.10513714810471 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -123.55934015261907 -82.33004464791854 -40.10513714810471 + vertex -123.12330777165984 -83.08527488548516 -38.80000000000006 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -123.12330777165984 -83.08527488548516 -38.80000000000006 + vertex -122.77618299929875 -83.68651262778033 -37.392201188381144 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -122.77618299929875 -83.68651262778033 -37.392201188381144 + vertex -122.52390523663206 -84.12347053033885 -35.905828541230306 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -122.52390523663206 -84.12347053033885 -35.905828541230306 + vertex -122.37079102612361 -84.38867212230028 -34.36631430664068 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -122.37079102612361 -84.38867212230028 -34.36631430664068 + vertex -122.31946019436648 -84.47757973089841 -32.800000000000054 + endloop +endfacet +facet normal 0.866025403784439 0.4999999999999995 1.7258201180401957e-16 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -122.31946019436648 -84.47757973089841 -32.800000000000054 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -0.22935485323249694 -0.9733428744788242 -1.7433085302539781e-16 + outer loop + vertex -156.38724158134562 -123.31585983302554 -3.000000000000062 + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -156.38724158134562 -123.31585983302554 -62.600000000000065 + endloop +endfacet +facet normal -0.22935485323249694 -0.9733428744788242 -1.7433085302539781e-16 + outer loop + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -156.38724158134562 -123.31585983302554 -3.000000000000062 + vertex -157.9557853097267 -122.94625408972136 -3.000000000000062 + endloop +endfacet +facet normal -0.3493898658303786 -0.936977439245487 -1.820889389375272e-16 + outer loop + vertex -161.03966632807823 -122.01197105835386 -62.600000000000065 + vertex -162.5496070945836 -121.44892868430702 -3.000000000000062 + vertex -162.54960709458356 -121.44892868430702 -62.600000000000065 + endloop +endfacet +facet normal -0.3493898658303786 -0.936977439245487 -1.820889389375272e-16 + outer loop + vertex -162.5496070945836 -121.44892868430702 -3.000000000000062 + vertex -161.03966632807823 -122.01197105835386 -62.600000000000065 + vertex -161.03966632807823 -122.01197105835386 -3.000000000000062 + endloop +endfacet +facet normal -0.4264730821792865 -0.9045002543816665 -1.8567535078147346e-16 + outer loop + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + vertex -165.492282441152 -120.135966871173 -3.000000000000062 + vertex -165.492282441152 -120.135966871173 -62.600000000000065 + endloop +endfacet +facet normal -0.4264730821792865 -0.9045002543816665 -1.8567535078147346e-16 + outer loop + vertex -165.492282441152 -120.135966871173 -3.000000000000062 + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + endloop +endfacet +facet normal -0.1884462435099426 -0.9820835062798843 -1.7112811674140554e-16 + outer loop + vertex -154.8046123096754 -123.61954128089435 -3.000000000000062 + vertex -156.38724158134562 -123.31585983302554 -62.600000000000065 + vertex -154.8046123096754 -123.61954128089435 -62.600000000000065 + endloop +endfacet +facet normal -0.1884462435099426 -0.9820835062798843 -1.7112811674140554e-16 + outer loop + vertex -156.38724158134562 -123.31585983302554 -62.600000000000065 + vertex -154.8046123096754 -123.61954128089435 -3.000000000000062 + vertex -156.38724158134562 -123.31585983302554 -3.000000000000062 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -109.18236190979498 -104.43433599533701 -55.53185165257819 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -109.18236190979498 -104.43433599533701 -55.53185165257819 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -108.70000000000003 -104.43433599533698 -55.332050807568926 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.70000000000003 -104.43433599533698 -55.332050807568926 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -108.2857864376269 -104.43433599533701 -55.01421356237315 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.2857864376269 -104.43433599533701 -55.01421356237315 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -107.96794919243113 -104.43433599533698 -54.600000000000044 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.96794919243113 -104.43433599533698 -54.600000000000044 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -99.50222252113285 -104.43433599533697 -40.57645713530763 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.50222252113285 -104.43433599533697 -40.57645713530763 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -99.40000000000006 -104.43433599533697 -39.80000000000006 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.40000000000006 -104.43433599533697 -39.80000000000006 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -109.18236190979498 -104.43433599533701 -55.53185165257819 + vertex -109.7 -104.43433599533701 -55.60000000000006 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -109.7 -104.43433599533701 -55.60000000000006 + vertex -134.50000000000003 -104.43433599533697 -55.600000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.96794919243113 -104.43433599533698 -54.600000000000044 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -107.76814834742189 -104.43433599533701 -54.11763809020509 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.76814834742189 -104.43433599533701 -54.11763809020509 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -107.7 -104.43433599533701 -53.60000000000005 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.7 -104.43433599533701 -53.60000000000005 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -107.7 -104.43433599533701 -51.600000000000044 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.7 -104.43433599533701 -51.600000000000044 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.7 -104.43433599533701 -51.600000000000044 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -107.76814834742189 -104.43433599533698 -51.082361909795 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.76814834742189 -104.43433599533698 -51.082361909795 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -107.96794919243113 -104.43433599533701 -50.60000000000003 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.96794919243113 -104.43433599533701 -50.60000000000003 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -108.28578643762692 -104.43433599533701 -50.185786437626945 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.28578643762692 -104.43433599533701 -50.185786437626945 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -108.70000000000003 -104.43433599533698 -49.86794919243116 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.70000000000003 -104.43433599533698 -49.86794919243116 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -109.18236190979498 -104.43433599533701 -49.6681483474219 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -109.18236190979498 -104.43433599533701 -49.6681483474219 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -109.7 -104.43433599533701 -49.60000000000003 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -100.90000000000006 -104.43433599533697 -42.398076211353384 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -100.90000000000006 -104.43433599533697 -42.398076211353384 + vertex -101.62354286469251 -104.43433599533694 -42.697777478867266 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -101.62354286469251 -104.43433599533694 -42.697777478867266 + vertex -102.40000000000006 -104.43433599533694 -42.80000000000007 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.40000000000006 -104.43433599533697 -39.80000000000006 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -99.40000000000006 -104.43433599533692 -25.800000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.40000000000006 -104.43433599533692 -25.800000000000065 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -99.50222252113285 -104.43433599533694 -25.0235428646925 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.50222252113285 -104.43433599533694 -25.0235428646925 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -99.80192378864675 -104.43433599533692 -24.300000000000068 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -99.80192378864675 -104.43433599533692 -24.300000000000068 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -100.27867965644042 -104.43433599533694 -23.678679656440423 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -100.27867965644042 -104.43433599533694 -23.678679656440423 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -100.90000000000006 -104.43433599533697 -23.20192378864675 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -100.90000000000006 -104.43433599533697 -23.20192378864675 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -101.62354286469251 -104.43433599533697 -22.90222252113286 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -101.62354286469251 -104.43433599533697 -22.90222252113286 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -108.2857864376269 -104.43433599533714 -15.41421356237314 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -108.2857864376269 -104.43433599533714 -15.41421356237314 + vertex -108.7 -104.43433599533714 -15.732050807568926 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -108.7 -104.43433599533714 -15.732050807568926 + vertex -109.18236190979493 -104.43433599533714 -15.931851652578185 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -109.18236190979493 -104.43433599533714 -15.931851652578185 + vertex -109.7 -104.43433599533714 -16.00000000000005 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -109.7 -104.43433599533714 -16.00000000000005 + vertex -134.5 -104.4343359953371 -16.000000000000068 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.2857864376269 -104.43433599533714 -15.41421356237314 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -107.9679491924311 -104.43433599533714 -15.000000000000046 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.9679491924311 -104.43433599533714 -15.000000000000046 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -107.76814834742186 -104.43433599533716 -14.517638090205088 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.76814834742186 -104.43433599533716 -14.517638090205088 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -107.7 -104.43433599533714 -14.000000000000048 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.7 -104.43433599533714 -14.000000000000048 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -107.7 -104.43433599533714 -12.000000000000034 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.7 -104.43433599533714 -12.000000000000034 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -107.76814834742186 -104.43433599533714 -11.482361909795 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.76814834742186 -104.43433599533714 -11.482361909795 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -107.9679491924311 -104.43433599533714 -11.000000000000036 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -107.9679491924311 -104.43433599533714 -11.000000000000036 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -108.2857864376269 -104.43433599533714 -10.585786437626947 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.2857864376269 -104.43433599533714 -10.585786437626947 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -108.7 -104.43433599533714 -10.267949192431168 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -108.7 -104.43433599533714 -10.267949192431168 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -109.18236190979493 -104.43433599533714 -10.068148347421902 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -109.18236190979493 -104.43433599533714 -10.068148347421902 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -109.7 -104.43433599533714 -10.000000000000037 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -136.43185165257816 -104.43433599533697 -54.117638090205105 + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -136.43185165257816 -104.43433599533697 -54.117638090205105 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -136.23205080756892 -104.43433599533697 -54.60000000000007 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -136.23205080756892 -104.43433599533697 -54.60000000000007 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -135.91421356237313 -104.43433599533697 -55.01421356237316 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.91421356237313 -104.43433599533697 -55.01421356237316 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -135.50000000000003 -104.43433599533694 -55.33205080756895 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.50000000000003 -104.43433599533694 -55.33205080756895 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -135.01763809020508 -104.43433599533697 -55.531851652578204 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020508 -104.43433599533697 -55.531851652578204 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -134.50000000000003 -104.43433599533697 -55.600000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.43185165257816 -104.43433599533697 -54.117638090205105 + vertex -136.50000000000006 -104.43433599533697 -53.60000000000007 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.50000000000006 -104.43433599533697 -53.60000000000007 + vertex -136.50000000000006 -104.43433599533697 -51.600000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.50000000000006 -104.43433599533697 -51.600000000000065 + vertex -136.43185165257816 -104.43433599533697 -51.08236190979502 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.43185165257816 -104.43433599533697 -51.08236190979502 + vertex -136.23205080756892 -104.43433599533697 -50.60000000000005 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.23205080756892 -104.43433599533697 -50.60000000000005 + vertex -135.91421356237313 -104.43433599533697 -50.185786437626966 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.91421356237313 -104.43433599533697 -50.185786437626966 + vertex -135.50000000000006 -104.43433599533697 -49.86794919243118 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.50000000000006 -104.43433599533697 -49.86794919243118 + vertex -135.01763809020508 -104.43433599533697 -49.66814834742192 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.01763809020508 -104.43433599533697 -49.66814834742192 + vertex -134.50000000000006 -104.43433599533697 -49.60000000000006 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -134.50000000000006 -104.43433599533697 -49.60000000000006 + vertex -109.7 -104.43433599533701 -49.60000000000003 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -104.52132034355974 -104.43433599533697 -41.921320343559714 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -104.52132034355974 -104.43433599533697 -41.921320343559714 + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -103.90000000000008 -104.43433599533694 -42.39807621135338 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -103.90000000000008 -104.43433599533694 -42.39807621135338 + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -103.17645713530764 -104.43433599533692 -42.697777478867266 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -103.17645713530764 -104.43433599533692 -42.697777478867266 + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -102.40000000000006 -104.43433599533694 -42.80000000000007 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -104.52132034355974 -104.43433599533697 -41.921320343559714 + vertex -104.99807621135338 -104.43433599533697 -41.30000000000007 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -104.99807621135338 -104.43433599533697 -41.30000000000007 + vertex -105.29777747886729 -104.43433599533694 -40.57645713530763 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -105.29777747886729 -104.43433599533694 -40.57645713530763 + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + vertex -135.5 -104.43433599533714 -15.732050807568942 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.5 -104.43433599533714 -15.732050807568942 + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + vertex -105.40000000000008 -104.43433599533694 -25.800000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -105.40000000000008 -104.43433599533694 -25.800000000000065 + vertex -105.29777747886729 -104.43433599533694 -25.0235428646925 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -105.29777747886729 -104.43433599533694 -25.0235428646925 + vertex -104.99807621135338 -104.43433599533697 -24.30000000000006 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -104.99807621135338 -104.43433599533697 -24.30000000000006 + vertex -104.52132034355974 -104.43433599533697 -23.678679656440423 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -104.52132034355974 -104.43433599533697 -23.678679656440423 + vertex -103.90000000000008 -104.43433599533694 -23.20192378864675 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -103.90000000000008 -104.43433599533694 -23.20192378864675 + vertex -103.17645713530764 -104.43433599533694 -22.90222252113286 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -103.17645713530764 -104.43433599533694 -22.90222252113286 + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -134.5 -104.4343359953371 -16.000000000000068 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -136.23205080756892 -104.43433599533712 -15.000000000000062 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.23205080756892 -104.43433599533712 -15.000000000000062 + vertex -136.43185165257813 -104.43433599533714 -14.517638090205104 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.43185165257813 -104.43433599533714 -14.517638090205104 + vertex -136.50000000000003 -104.43433599533712 -14.000000000000064 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.50000000000003 -104.43433599533712 -14.000000000000064 + vertex -136.50000000000003 -104.43433599533712 -12.000000000000052 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.50000000000003 -104.43433599533712 -12.000000000000052 + vertex -136.43185165257813 -104.43433599533714 -11.482361909795022 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.43185165257813 -104.43433599533714 -11.482361909795022 + vertex -136.23205080756892 -104.43433599533712 -11.000000000000048 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -136.23205080756892 -104.43433599533712 -11.000000000000048 + vertex -135.91421356237313 -104.43433599533712 -10.58578643762697 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.91421356237313 -104.43433599533712 -10.58578643762697 + vertex -135.50000000000003 -104.43433599533714 -10.267949192431178 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.50000000000003 -104.43433599533714 -10.267949192431178 + vertex -135.01763809020505 -104.43433599533714 -10.068148347421925 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -135.01763809020505 -104.43433599533714 -10.068148347421925 + vertex -134.5 -104.4343359953371 -10.00000000000005 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -134.5 -104.4343359953371 -10.00000000000005 + vertex -109.7 -104.43433599533714 -10.000000000000037 + endloop +endfacet +facet normal 3.3306690738754686e-16 -1.0 -8.065757021836445e-17 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -109.7 -104.43433599533714 -10.000000000000037 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -0.06403093220853912 -0.9979479143324594 -1.5974817945265748e-16 + outer loop + vertex -150.00000000000009 -124.13030787576977 -3.000000000000062 + vertex -151.60819479272953 -124.0271219175925 -62.600000000000065 + vertex -150.00000000000006 -124.13030787576977 -62.600000000000065 + endloop +endfacet +facet normal -0.06403093220853912 -0.9979479143324594 -1.5974817945265748e-16 + outer loop + vertex -151.60819479272953 -124.0271219175925 -62.600000000000065 + vertex -150.00000000000009 -124.13030787576977 -3.000000000000062 + vertex -151.60819479272953 -124.02712191759251 -3.000000000000062 + endloop +endfacet +facet normal -0.3882711944089187 -0.9215451587373632 -1.840431746308456e-16 + outer loop + vertex -162.54960709458356 -121.44892868430702 -62.600000000000065 + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + endloop +endfacet +facet normal -0.3882711944089187 -0.9215451587373632 -1.840431746308456e-16 + outer loop + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + vertex -162.54960709458356 -121.44892868430702 -62.600000000000065 + vertex -162.5496070945836 -121.44892868430702 -3.000000000000062 + endloop +endfacet +facet normal -0.10571189404138018 -0.9943967998028674 -1.6383039476578026e-16 + outer loop + vertex -151.60819479272953 -124.02712191759251 -3.000000000000062 + vertex -153.2106669582428 -123.85676701721613 -62.600000000000065 + vertex -151.60819479272953 -124.0271219175925 -62.600000000000065 + endloop +endfacet +facet normal -0.10571189404138018 -0.9943967998028674 -1.6383039476578026e-16 + outer loop + vertex -153.2106669582428 -123.85676701721613 -62.600000000000065 + vertex -151.60819479272953 -124.02712191759251 -3.000000000000062 + vertex -153.2106669582428 -123.85676701721616 -3.000000000000062 + endloop +endfacet +facet normal -0.9990971750681177 -0.042483346983344376 -1.1736899405614529e-16 + outer loop + vertex -186.7837460938633 -88.08422144198268 -62.600000000000065 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + endloop +endfacet +facet normal -0.9990971750681177 -0.042483346983344376 -1.1736899405614529e-16 + outer loop + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + vertex -186.7837460938633 -88.08422144198268 -62.600000000000065 + vertex -186.7837460938633 -88.08422144198268 -3.000000000000062 + endloop +endfacet +facet normal -0.9297083246305115 -0.36829666182675036 -1.5950409550416873e-16 + outer loop + vertex -183.8487247516966 -100.57694261544428 -62.600000000000065 + vertex -184.4422354602446 -99.07871603973354 -3.000000000000062 + vertex -184.4422354602446 -99.07871603973354 -62.600000000000065 + endloop +endfacet +facet normal -0.9297083246305115 -0.36829666182675036 -1.5950409550416873e-16 + outer loop + vertex -184.4422354602446 -99.07871603973354 -3.000000000000062 + vertex -183.8487247516966 -100.57694261544428 -62.600000000000065 + vertex -183.84872475169664 -100.57694261544428 -3.000000000000062 + endloop +endfacet +facet normal -0.9991524752349786 0.04116225494085001 -1.0458099413404861e-16 + outer loop + vertex -186.85327348436147 -84.86267323343132 -62.600000000000065 + vertex -186.78694043921737 -83.25253728872076 -3.000000000000062 + vertex -186.78694043921737 -83.25253728872076 -62.600000000000065 + endloop +endfacet +facet normal -0.9991524752349786 0.04116225494085001 -1.0458099413404861e-16 + outer loop + vertex -186.78694043921737 -83.25253728872076 -3.000000000000062 + vertex -186.85327348436147 -84.86267323343132 -62.600000000000065 + vertex -186.8532734843615 -84.86267323343132 -3.000000000000062 + endloop +endfacet +facet normal -0.8553779590758187 -0.5180043891004082 -1.7415434132155012e-16 + outer loop + vertex -180.8652792237608 -106.28301249011629 -62.600000000000065 + vertex -181.7000441941546 -104.90456942726223 -3.000000000000062 + vertex -181.7000441941546 -104.9045694272622 -62.600000000000065 + endloop +endfacet +facet normal -0.8553779590758187 -0.5180043891004082 -1.7415434132155012e-16 + outer loop + vertex -181.7000441941546 -104.90456942726223 -3.000000000000062 + vertex -180.8652792237608 -106.28301249011629 -62.600000000000065 + vertex -180.8652792237608 -106.28301249011629 -3.000000000000062 + endloop +endfacet +facet normal -0.5005724413202218 -0.8656946522826123 -1.8796266836386042e-16 + outer loop + vertex -166.91986759538986 -119.38834500102287 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + endloop +endfacet +facet normal -0.5005724413202218 -0.8656946522826123 -1.8796266836386042e-16 + outer loop + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -166.91986759538986 -119.38834500102287 -62.600000000000065 + vertex -166.9198675953899 -119.38834500102287 -3.000000000000062 + endloop +endfacet +facet normal -0.536340245259425 -0.8440018609665858 -1.886138071888622e-16 + outer loop + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -169.6750464882625 -117.71735841031693 -3.000000000000062 + vertex -169.6750464882625 -117.71735841031693 -62.600000000000065 + endloop +endfacet +facet normal -0.536340245259425 -0.8440018609665858 -1.886138071888622e-16 + outer loop + vertex -169.6750464882625 -117.71735841031693 -3.000000000000062 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + endloop +endfacet +facet normal -0.7571505514688204 -0.6532404170062207 -1.8393916645092185e-16 + outer loop + vertex -176.97310473123767 -111.41245284482866 -62.600000000000065 + vertex -178.0258027948761 -110.19230341949634 -3.000000000000062 + vertex -178.0258027948761 -110.19230341949631 -62.600000000000065 + endloop +endfacet +facet normal -0.7571505514688204 -0.6532404170062207 -1.8393916645092185e-16 + outer loop + vertex -178.0258027948761 -110.19230341949634 -3.000000000000062 + vertex -176.97310473123767 -111.41245284482866 -62.600000000000065 + vertex -176.9731047312377 -111.41245284482866 -3.000000000000062 + endloop +endfacet +facet normal -0.4639286791616627 -0.8858725532780182 -1.869826112231558e-16 + outer loop + vertex -165.492282441152 -120.135966871173 -62.600000000000065 + vertex -166.9198675953899 -119.38834500102287 -3.000000000000062 + vertex -166.91986759538986 -119.38834500102287 -62.600000000000065 + endloop +endfacet +facet normal -0.4639286791616627 -0.8858725532780182 -1.869826112231558e-16 + outer loop + vertex -166.9198675953899 -119.38834500102287 -3.000000000000062 + vertex -165.492282441152 -120.135966871173 -62.600000000000065 + vertex -165.492282441152 -120.135966871173 -3.000000000000062 + endloop +endfacet +facet normal -0.7838084275862288 -0.6210026963265165 -1.8196645150886382e-16 + outer loop + vertex -178.0258027948761 -110.19230341949631 -62.600000000000065 + vertex -179.0265497157926 -108.92919478062029 -3.000000000000062 + vertex -179.0265497157926 -108.92919478062029 -62.600000000000065 + endloop +endfacet +facet normal -0.7838084275862288 -0.6210026963265165 -1.8196645150886382e-16 + outer loop + vertex -179.0265497157926 -108.92919478062029 -3.000000000000062 + vertex -178.0258027948761 -110.19230341949631 -62.600000000000065 + vertex -178.0258027948761 -110.19230341949634 -3.000000000000062 + endloop +endfacet +facet normal -0.9783396194476177 0.20700625357483915 -7.690445521229414e-17 + outer loop + vertex -186.1852996663851 -78.4584565279085 -62.600000000000065 + vertex -185.85170873014454 -76.88186053635415 -3.000000000000062 + vertex -185.85170873014454 -76.88186053635415 -62.600000000000065 + endloop +endfacet +facet normal -0.9783396194476177 0.20700625357483915 -7.690445521229414e-17 + outer loop + vertex -185.85170873014454 -76.88186053635415 -3.000000000000062 + vertex -186.1852996663851 -78.4584565279085 -62.600000000000065 + vertex -186.1852996663851 -78.45845652790851 -3.000000000000062 + endloop +endfacet +facet normal -0.9999997814571895 -0.0006611244764069267 -1.1107217741834977e-16 + outer loop + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + vertex -186.8532734843615 -84.86267323343132 -3.000000000000062 + vertex -186.85327348436147 -84.86267323343132 -62.600000000000065 + endloop +endfacet +facet normal -0.9999997814571895 -0.0006611244764069267 -1.1107217741834977e-16 + outer loop + vertex -186.8532734843615 -84.86267323343132 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + endloop +endfacet +facet normal -0.9134916689428522 -0.4068574329811398 -1.6360263546573034e-16 + outer loop + vertex -183.1930732936331 -102.04903602242166 -62.600000000000065 + vertex -183.84872475169664 -100.57694261544428 -3.000000000000062 + vertex -183.8487247516966 -100.57694261544428 -62.600000000000065 + endloop +endfacet +facet normal -0.9134916689428522 -0.4068574329811398 -1.6360263546573034e-16 + outer loop + vertex -183.84872475169664 -100.57694261544428 -3.000000000000062 + vertex -183.1930732936331 -102.04903602242166 -62.600000000000065 + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + endloop +endfacet +facet normal -0.8956764823140547 -0.4447062390269794 -1.67414885049686e-16 + outer loop + vertex -182.47642841905974 -103.4924202252848 -62.600000000000065 + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + vertex -183.1930732936331 -102.04903602242166 -62.600000000000065 + endloop +endfacet +facet normal -0.8956764823140547 -0.4447062390269794 -1.67414885049686e-16 + outer loop + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + vertex -182.47642841905974 -103.4924202252848 -62.600000000000065 + vertex -182.47642841905977 -103.49242022528482 -3.000000000000062 + endloop +endfacet +facet normal -0.9861411980746706 0.16590821998880342 -8.405641526141981e-17 + outer loop + vertex -186.4526610503061 -80.04762477693528 -62.600000000000065 + vertex -186.1852996663851 -78.45845652790851 -3.000000000000062 + vertex -186.1852996663851 -78.4584565279085 -62.600000000000065 + endloop +endfacet +facet normal -0.9861411980746706 0.16590821998880342 -8.405641526141981e-17 + outer loop + vertex -186.1852996663851 -78.45845652790851 -3.000000000000062 + vertex -186.4526610503061 -80.04762477693528 -62.600000000000065 + vertex -186.4526610503061 -80.0476247769353 -3.000000000000062 + endloop +endfacet +facet normal -0.9572353791850615 -0.28931026396661363 -1.5047732123427995e-16 + outer loop + vertex -184.97256682717617 -97.55697806144177 -62.600000000000065 + vertex -185.4387908187414 -96.01439158963021 -3.000000000000062 + vertex -185.4387908187414 -96.0143915896302 -62.600000000000065 + endloop +endfacet +facet normal -0.9572353791850615 -0.28931026396661363 -1.5047732123427995e-16 + outer loop + vertex -185.4387908187414 -96.01439158963021 -3.000000000000062 + vertex -184.97256682717617 -97.55697806144177 -62.600000000000065 + vertex -184.9725668271762 -97.55697806144177 -3.000000000000062 + endloop +endfacet +facet normal -0.944298071640538 -0.3290914035582841 -1.5512643725333327e-16 + outer loop + vertex -184.4422354602446 -99.07871603973354 -62.600000000000065 + vertex -184.9725668271762 -97.55697806144177 -3.000000000000062 + vertex -184.97256682717617 -97.55697806144177 -62.600000000000065 + endloop +endfacet +facet normal -0.944298071640538 -0.3290914035582841 -1.5512643725333327e-16 + outer loop + vertex -184.9725668271762 -97.55697806144177 -3.000000000000062 + vertex -184.4422354602446 -99.07871603973354 -62.600000000000065 + vertex -184.4422354602446 -99.07871603973354 -3.000000000000062 + endloop +endfacet +facet normal -0.7291677277631985 -0.6843350237921877 -1.8559000385555467e-16 + outer loop + vertex -175.87029765489726 -112.58750790128374 -62.600000000000065 + vertex -176.9731047312377 -111.41245284482866 -3.000000000000062 + vertex -176.97310473123767 -111.41245284482866 -62.600000000000065 + endloop +endfacet +facet normal -0.7291677277631985 -0.6843350237921877 -1.8559000385555467e-16 + outer loop + vertex -176.9731047312377 -111.41245284482866 -3.000000000000062 + vertex -175.87029765489726 -112.58750790128374 -62.600000000000065 + vertex -175.87029765489729 -112.58750790128374 -3.000000000000062 + endloop +endfacet +facet normal 0.793353340291227 -1.6653345369377353e-16 -0.6087614290087313 + outer loop + vertex -107.96794919243113 -104.43433599533698 -54.600000000000044 + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + vertex -108.2857864376269 -104.43433599533701 -55.01421356237315 + endloop +endfacet +facet normal 0.793353340291227 -1.6653345369377353e-16 -0.6087614290087313 + outer loop + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + vertex -107.96794919243113 -104.43433599533698 -54.600000000000044 + vertex -107.96794919243113 -106.43433599533697 -54.600000000000044 + endloop +endfacet +facet normal -0.608761429008725 7.771561172376093e-16 -0.7933533402912317 + outer loop + vertex -135.50000000000006 -106.43433599533691 -55.33205080756895 + vertex -135.91421356237313 -104.43433599533697 -55.01421356237316 + vertex -135.50000000000003 -104.43433599533694 -55.33205080756895 + endloop +endfacet +facet normal -0.608761429008725 7.771561172376093e-16 -0.7933533402912317 + outer loop + vertex -135.91421356237313 -104.43433599533697 -55.01421356237316 + vertex -135.50000000000006 -106.43433599533691 -55.33205080756895 + vertex -135.91421356237313 -106.43433599533691 -55.01421356237316 + endloop +endfacet +facet normal -0.3826834323650807 -1.9428902930940227e-16 0.9238795325112906 + outer loop + vertex -135.50000000000006 -104.43433599533697 -49.86794919243118 + vertex -135.01763809020508 -106.43433599533691 -49.66814834742192 + vertex -135.01763809020508 -104.43433599533697 -49.66814834742192 + endloop +endfacet +facet normal -0.3826834323650807 -1.9428902930940227e-16 0.9238795325112906 + outer loop + vertex -135.01763809020508 -106.43433599533691 -49.66814834742192 + vertex -135.50000000000006 -104.43433599533697 -49.86794919243118 + vertex -135.50000000000009 -106.43433599533691 -49.86794919243118 + endloop +endfacet +facet normal 0.38268343236510116 1.9428902930940222e-16 -0.923879532511282 + outer loop + vertex -108.70000000000005 -106.43433599533697 -55.332050807568926 + vertex -109.18236190979498 -104.43433599533701 -55.53185165257819 + vertex -108.70000000000003 -104.43433599533698 -55.332050807568926 + endloop +endfacet +facet normal 0.38268343236510116 1.9428902930940222e-16 -0.923879532511282 + outer loop + vertex -109.18236190979498 -104.43433599533701 -55.53185165257819 + vertex -108.70000000000005 -106.43433599533697 -55.332050807568926 + vertex -109.18236190979498 -106.43433599533697 -55.53185165257819 + endloop +endfacet +facet normal -1.0 5.551115123125781e-16 5.933957380480175e-32 + outer loop + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + vertex -136.50000000000006 -104.43433599533697 -51.600000000000065 + vertex -136.50000000000006 -104.43433599533697 -53.60000000000007 + endloop +endfacet +facet normal -1.0 5.551115123125781e-16 5.933957380480175e-32 + outer loop + vertex -136.50000000000006 -104.43433599533697 -51.600000000000065 + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + vertex -136.50000000000006 -106.43433599533697 -51.600000000000065 + endloop +endfacet +facet normal -0.9238795325112814 7.771561172376095e-16 -0.3826834323651031 + outer loop + vertex -136.23205080756892 -104.43433599533697 -54.60000000000007 + vertex -136.4318516525782 -106.43433599533691 -54.117638090205105 + vertex -136.43185165257816 -104.43433599533697 -54.117638090205105 + endloop +endfacet +facet normal -0.9238795325112814 7.771561172376095e-16 -0.3826834323651031 + outer loop + vertex -136.4318516525782 -106.43433599533691 -54.117638090205105 + vertex -136.23205080756892 -104.43433599533697 -54.60000000000007 + vertex -136.23205080756892 -106.43433599533697 -54.60000000000007 + endloop +endfacet +facet normal -0.9238795325112833 2.7755575615628914e-16 0.3826834323650983 + outer loop + vertex -136.4318516525782 -106.43433599533691 -51.08236190979502 + vertex -136.23205080756892 -104.43433599533697 -50.60000000000005 + vertex -136.43185165257816 -104.43433599533697 -51.08236190979502 + endloop +endfacet +facet normal -0.9238795325112833 2.7755575615628914e-16 0.3826834323650983 + outer loop + vertex -136.23205080756892 -104.43433599533697 -50.60000000000005 + vertex -136.4318516525782 -106.43433599533691 -51.08236190979502 + vertex -136.23205080756892 -106.43433599533697 -50.60000000000005 + endloop +endfacet +facet normal 6.822499554551367e-16 4.884367980290835e-16 -1.0 + outer loop + vertex -109.70000000000003 -106.43433599533697 -55.60000000000006 + vertex -134.50000000000003 -104.43433599533697 -55.600000000000065 + vertex -109.7 -104.43433599533701 -55.60000000000006 + endloop +endfacet +facet normal 6.822499554551367e-16 4.884367980290835e-16 -1.0 + outer loop + vertex -134.50000000000003 -104.43433599533697 -55.600000000000065 + vertex -109.70000000000003 -106.43433599533697 -55.60000000000006 + vertex -134.50000000000006 -106.43433599533694 -55.600000000000065 + endloop +endfacet +facet normal -0.6087614290087396 -5.5511151231257704e-17 0.7933533402912205 + outer loop + vertex -135.91421356237313 -104.43433599533697 -50.185786437626966 + vertex -135.50000000000009 -106.43433599533691 -49.86794919243118 + vertex -135.50000000000006 -104.43433599533697 -49.86794919243118 + endloop +endfacet +facet normal -0.6087614290087396 -5.5511151231257704e-17 0.7933533402912205 + outer loop + vertex -135.50000000000009 -106.43433599533691 -49.86794919243118 + vertex -135.91421356237313 -104.43433599533697 -50.185786437626966 + vertex -135.91421356237313 -106.43433599533694 -50.185786437626966 + endloop +endfacet +facet normal 0.6087614290087087 -5.551115123125794e-17 -0.7933533402912444 + outer loop + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + vertex -108.70000000000003 -104.43433599533698 -55.332050807568926 + vertex -108.2857864376269 -104.43433599533701 -55.01421356237315 + endloop +endfacet +facet normal 0.6087614290087087 -5.551115123125794e-17 -0.7933533402912444 + outer loop + vertex -108.70000000000003 -104.43433599533698 -55.332050807568926 + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + vertex -108.70000000000005 -106.43433599533697 -55.332050807568926 + endloop +endfacet +facet normal 0.9238795325112992 -2.220446049250313e-16 -0.38268343236505953 + outer loop + vertex -107.76814834742189 -104.43433599533701 -54.11763809020509 + vertex -107.96794919243113 -106.43433599533697 -54.600000000000044 + vertex -107.96794919243113 -104.43433599533698 -54.600000000000044 + endloop +endfacet +facet normal 0.9238795325112992 -2.220446049250313e-16 -0.38268343236505953 + outer loop + vertex -107.96794919243113 -106.43433599533697 -54.600000000000044 + vertex -107.76814834742189 -104.43433599533701 -54.11763809020509 + vertex -107.7681483474219 -106.43433599533697 -54.11763809020509 + endloop +endfacet +facet normal -0.13052619222005019 5.481726184086709e-16 -0.9914448613738106 + outer loop + vertex -134.50000000000006 -106.43433599533694 -55.600000000000065 + vertex -135.01763809020508 -104.43433599533697 -55.531851652578204 + vertex -134.50000000000003 -104.43433599533697 -55.600000000000065 + endloop +endfacet +facet normal -0.13052619222005019 5.481726184086709e-16 -0.9914448613738106 + outer loop + vertex -135.01763809020508 -104.43433599533697 -55.531851652578204 + vertex -134.50000000000006 -106.43433599533694 -55.600000000000065 + vertex -135.01763809020508 -106.43433599533691 -55.531851652578204 + endloop +endfacet +facet normal 0.9238795325113052 -7.771561172376093e-16 0.38268343236504543 + outer loop + vertex -107.96794919243113 -106.43433599533697 -50.60000000000003 + vertex -107.76814834742189 -104.43433599533698 -51.082361909795 + vertex -107.96794919243113 -104.43433599533701 -50.60000000000003 + endloop +endfacet +facet normal 0.9238795325113052 -7.771561172376093e-16 0.38268343236504543 + outer loop + vertex -107.76814834742189 -104.43433599533698 -51.082361909795 + vertex -107.96794919243113 -106.43433599533697 -50.60000000000003 + vertex -107.7681483474219 -106.43433599533697 -51.082361909795 + endloop +endfacet +facet normal 1.0 -5.551115123125781e-16 2.442162611707109e-15 + outer loop + vertex -107.70000000000003 -106.43433599533698 -51.600000000000044 + vertex -107.7 -104.43433599533701 -53.60000000000005 + vertex -107.7 -104.43433599533701 -51.600000000000044 + endloop +endfacet +facet normal 1.0 -5.551115123125781e-16 2.442162611707109e-15 + outer loop + vertex -107.7 -104.43433599533701 -53.60000000000005 + vertex -107.70000000000003 -106.43433599533698 -51.600000000000044 + vertex -107.70000000000003 -106.43433599533698 -53.60000000000005 + endloop +endfacet +facet normal 0.793353340291223 -7.771561172376093e-16 0.6087614290087365 + outer loop + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + vertex -107.96794919243113 -104.43433599533701 -50.60000000000003 + vertex -108.28578643762692 -104.43433599533701 -50.185786437626945 + endloop +endfacet +facet normal 0.793353340291223 -7.771561172376093e-16 0.6087614290087365 + outer loop + vertex -107.96794919243113 -104.43433599533701 -50.60000000000003 + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + vertex -107.96794919243113 -106.43433599533697 -50.60000000000003 + endloop +endfacet +facet normal -0.13052619222005263 -4.024558464266191e-16 0.9914448613738104 + outer loop + vertex -135.01763809020508 -104.43433599533697 -49.66814834742192 + vertex -134.50000000000006 -106.43433599533694 -49.60000000000006 + vertex -134.50000000000006 -104.43433599533697 -49.60000000000006 + endloop +endfacet +facet normal -0.13052619222005263 -4.024558464266191e-16 0.9914448613738104 + outer loop + vertex -134.50000000000006 -106.43433599533694 -49.60000000000006 + vertex -135.01763809020508 -104.43433599533697 -49.66814834742192 + vertex -135.01763809020508 -106.43433599533691 -49.66814834742192 + endloop +endfacet +facet normal -0.9914448613738086 6.661338147750937e-16 -0.13052619222006553 + outer loop + vertex -136.43185165257816 -104.43433599533697 -54.117638090205105 + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + vertex -136.50000000000006 -104.43433599533697 -53.60000000000007 + endloop +endfacet +facet normal -0.9914448613738086 6.661338147750937e-16 -0.13052619222006553 + outer loop + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + vertex -136.43185165257816 -104.43433599533697 -54.117638090205105 + vertex -136.4318516525782 -106.43433599533691 -54.117638090205105 + endloop +endfacet +facet normal -0.79335334029125 1.6653345369377353e-16 0.6087614290087011 + outer loop + vertex -136.23205080756892 -106.43433599533697 -50.60000000000005 + vertex -135.91421356237313 -104.43433599533697 -50.185786437626966 + vertex -136.23205080756892 -104.43433599533697 -50.60000000000005 + endloop +endfacet +facet normal -0.79335334029125 1.6653345369377353e-16 0.6087614290087011 + outer loop + vertex -135.91421356237313 -104.43433599533697 -50.185786437626966 + vertex -136.23205080756892 -106.43433599533697 -50.60000000000005 + vertex -135.91421356237313 -106.43433599533694 -50.185786437626966 + endloop +endfacet +facet normal 0.9914448613738078 -6.661338147750936e-16 0.13052619222007122 + outer loop + vertex -107.7681483474219 -106.43433599533697 -51.082361909795 + vertex -107.7 -104.43433599533701 -51.600000000000044 + vertex -107.76814834742189 -104.43433599533698 -51.082361909795 + endloop +endfacet +facet normal 0.9914448613738078 -6.661338147750936e-16 0.13052619222007122 + outer loop + vertex -107.7 -104.43433599533701 -51.600000000000044 + vertex -107.7681483474219 -106.43433599533697 -51.082361909795 + vertex -107.70000000000003 -106.43433599533698 -51.600000000000044 + endloop +endfacet +facet normal 0.6087614290087019 -7.771561172376095e-16 0.7933533402912496 + outer loop + vertex -108.70000000000003 -104.43433599533698 -49.86794919243116 + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + vertex -108.28578643762692 -104.43433599533701 -50.185786437626945 + endloop +endfacet +facet normal 0.6087614290087019 -7.771561172376095e-16 0.7933533402912496 + outer loop + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + vertex -108.70000000000003 -104.43433599533698 -49.86794919243116 + vertex -108.70000000000005 -106.43433599533697 -49.86794919243116 + endloop +endfacet +facet normal 0.13052619222005296 4.024558464266191e-16 -0.9914448613738103 + outer loop + vertex -109.18236190979498 -106.43433599533697 -55.53185165257819 + vertex -109.7 -104.43433599533701 -55.60000000000006 + vertex -109.18236190979498 -104.43433599533701 -55.53185165257819 + endloop +endfacet +facet normal 0.13052619222005296 4.024558464266191e-16 -0.9914448613738103 + outer loop + vertex -109.7 -104.43433599533701 -55.60000000000006 + vertex -109.18236190979498 -106.43433599533697 -55.53185165257819 + vertex -109.70000000000003 -106.43433599533697 -55.60000000000006 + endloop +endfacet +facet normal 0.3826834323651082 -6.661338147750938e-16 0.9238795325112792 + outer loop + vertex -109.18236190979498 -104.43433599533701 -49.6681483474219 + vertex -108.70000000000005 -106.43433599533697 -49.86794919243116 + vertex -108.70000000000003 -104.43433599533698 -49.86794919243116 + endloop +endfacet +facet normal 0.3826834323651082 -6.661338147750938e-16 0.9238795325112792 + outer loop + vertex -108.70000000000005 -106.43433599533697 -49.86794919243116 + vertex -109.18236190979498 -104.43433599533701 -49.6681483474219 + vertex -109.18236190979498 -106.43433599533697 -49.6681483474219 + endloop +endfacet +facet normal -0.793353340291236 7.771561172376095e-16 -0.6087614290087197 + outer loop + vertex -135.91421356237313 -104.43433599533697 -55.01421356237316 + vertex -136.23205080756892 -106.43433599533697 -54.60000000000007 + vertex -136.23205080756892 -104.43433599533697 -54.60000000000007 + endloop +endfacet +facet normal -0.793353340291236 7.771561172376095e-16 -0.6087614290087197 + outer loop + vertex -136.23205080756892 -106.43433599533697 -54.60000000000007 + vertex -135.91421356237313 -104.43433599533697 -55.01421356237316 + vertex -135.91421356237313 -106.43433599533691 -55.01421356237316 + endloop +endfacet +facet normal -6.822499554551365e-16 -4.884367980290834e-16 1.0 + outer loop + vertex -134.50000000000006 -104.43433599533697 -49.60000000000006 + vertex -109.70000000000003 -106.43433599533697 -49.60000000000003 + vertex -109.7 -104.43433599533701 -49.60000000000003 + endloop +endfacet +facet normal -6.822499554551365e-16 -4.884367980290834e-16 1.0 + outer loop + vertex -109.70000000000003 -106.43433599533697 -49.60000000000003 + vertex -134.50000000000006 -104.43433599533697 -49.60000000000006 + vertex -134.50000000000006 -106.43433599533694 -49.60000000000006 + endloop +endfacet +facet normal -0.38268343236509783 6.661338147750938e-16 -0.9238795325112834 + outer loop + vertex -135.01763809020508 -106.43433599533691 -55.531851652578204 + vertex -135.50000000000003 -104.43433599533694 -55.33205080756895 + vertex -135.01763809020508 -104.43433599533697 -55.531851652578204 + endloop +endfacet +facet normal -0.38268343236509783 6.661338147750938e-16 -0.9238795325112834 + outer loop + vertex -135.50000000000003 -104.43433599533694 -55.33205080756895 + vertex -135.01763809020508 -106.43433599533691 -55.531851652578204 + vertex -135.50000000000006 -106.43433599533691 -55.33205080756895 + endloop +endfacet +facet normal 0.9914448613738094 -5.551115123125782e-16 -0.1305261922200592 + outer loop + vertex -107.7 -104.43433599533701 -53.60000000000005 + vertex -107.7681483474219 -106.43433599533697 -54.11763809020509 + vertex -107.76814834742189 -104.43433599533701 -54.11763809020509 + endloop +endfacet +facet normal 0.9914448613738094 -5.551115123125782e-16 -0.1305261922200592 + outer loop + vertex -107.7681483474219 -106.43433599533697 -54.11763809020509 + vertex -107.7 -104.43433599533701 -53.60000000000005 + vertex -107.70000000000003 -106.43433599533698 -53.60000000000005 + endloop +endfacet +facet normal -0.9914448613738087 5.551115123125783e-16 0.13052619222006556 + outer loop + vertex -136.50000000000006 -106.43433599533697 -51.600000000000065 + vertex -136.43185165257816 -104.43433599533697 -51.08236190979502 + vertex -136.50000000000006 -104.43433599533697 -51.600000000000065 + endloop +endfacet +facet normal -0.9914448613738087 5.551115123125783e-16 0.13052619222006556 + outer loop + vertex -136.43185165257816 -104.43433599533697 -51.08236190979502 + vertex -136.50000000000006 -106.43433599533697 -51.600000000000065 + vertex -136.4318516525782 -106.43433599533691 -51.08236190979502 + endloop +endfacet +facet normal 0.130526192220053 -5.481726184086709e-16 0.9914448613738103 + outer loop + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -109.18236190979498 -106.43433599533697 -49.6681483474219 + vertex -109.18236190979498 -104.43433599533701 -49.6681483474219 + endloop +endfacet +facet normal 0.130526192220053 -5.481726184086709e-16 0.9914448613738103 + outer loop + vertex -109.18236190979498 -106.43433599533697 -49.6681483474219 + vertex -109.7 -104.43433599533701 -49.60000000000003 + vertex -109.70000000000003 -106.43433599533697 -49.60000000000003 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -109.70000000000005 -106.43433599533701 -16.00000000000005 + vertex -135.0176380902051 -106.43433599533698 -15.931851652578203 + vertex -134.50000000000006 -106.43433599533697 -16.000000000000068 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.0176380902051 -106.43433599533698 -15.931851652578203 + vertex -109.70000000000005 -106.43433599533701 -16.00000000000005 + vertex -109.18236190979502 -106.43433599533701 -15.931851652578185 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.0176380902051 -106.43433599533698 -15.931851652578203 + vertex -109.18236190979502 -106.43433599533701 -15.931851652578185 + vertex -135.50000000000006 -106.43433599533697 -15.732050807568942 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000006 -106.43433599533697 -15.732050807568942 + vertex -109.18236190979502 -106.43433599533701 -15.931851652578185 + vertex -108.70000000000007 -106.43433599533701 -15.732050807568926 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000006 -106.43433599533697 -15.732050807568942 + vertex -108.70000000000007 -106.43433599533701 -15.732050807568926 + vertex -135.9142135623732 -106.43433599533697 -15.414213562373158 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.9142135623732 -106.43433599533697 -15.414213562373158 + vertex -108.70000000000007 -106.43433599533701 -15.732050807568926 + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.9142135623732 -106.43433599533697 -15.414213562373158 + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + vertex -136.23205080756895 -106.43433599533697 -15.000000000000062 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 -15.000000000000062 + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + vertex -107.96794919243118 -106.43433599533701 -15.000000000000046 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 -15.000000000000062 + vertex -107.96794919243118 -106.43433599533701 -15.000000000000046 + vertex -136.43185165257822 -106.43433599533698 -14.517638090205104 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.43185165257822 -106.43433599533698 -14.517638090205104 + vertex -107.96794919243118 -106.43433599533701 -15.000000000000046 + vertex -107.76814834742193 -106.43433599533701 -14.517638090205088 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.43185165257822 -106.43433599533698 -14.517638090205104 + vertex -107.76814834742193 -106.43433599533701 -14.517638090205088 + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + vertex -107.76814834742193 -106.43433599533701 -14.517638090205088 + vertex -107.70000000000007 -106.43433599533701 -14.000000000000048 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + vertex -107.70000000000007 -106.43433599533701 -14.000000000000048 + vertex -136.50000000000009 -106.43433599533697 -12.000000000000052 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 -12.000000000000052 + vertex -107.70000000000007 -106.43433599533701 -14.000000000000048 + vertex -107.70000000000007 -106.43433599533701 -12.000000000000034 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000009 -106.43433599533697 -12.000000000000052 + vertex -107.70000000000007 -106.43433599533701 -12.000000000000034 + vertex -136.43185165257822 -106.43433599533698 -11.482361909795022 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.43185165257822 -106.43433599533698 -11.482361909795022 + vertex -107.70000000000007 -106.43433599533701 -12.000000000000034 + vertex -107.76814834742193 -106.43433599533701 -11.482361909795 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.43185165257822 -106.43433599533698 -11.482361909795022 + vertex -107.76814834742193 -106.43433599533701 -11.482361909795 + vertex -136.23205080756895 -106.43433599533697 -11.000000000000048 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 -11.000000000000048 + vertex -107.76814834742193 -106.43433599533701 -11.482361909795 + vertex -107.96794919243118 -106.43433599533701 -11.000000000000036 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756895 -106.43433599533697 -11.000000000000048 + vertex -107.96794919243118 -106.43433599533701 -11.000000000000036 + vertex -135.9142135623732 -106.43433599533697 -10.58578643762697 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.9142135623732 -106.43433599533697 -10.58578643762697 + vertex -107.96794919243118 -106.43433599533701 -11.000000000000036 + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.9142135623732 -106.43433599533697 -10.58578643762697 + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + vertex -135.50000000000009 -106.43433599533698 -10.267949192431178 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000009 -106.43433599533698 -10.267949192431178 + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + vertex -108.70000000000007 -106.43433599533701 -10.267949192431168 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000009 -106.43433599533698 -10.267949192431178 + vertex -108.70000000000007 -106.43433599533701 -10.267949192431168 + vertex -135.0176380902051 -106.43433599533698 -10.068148347421925 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.0176380902051 -106.43433599533698 -10.068148347421925 + vertex -108.70000000000007 -106.43433599533701 -10.267949192431168 + vertex -109.18236190979502 -106.43433599533701 -10.068148347421902 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.0176380902051 -106.43433599533698 -10.068148347421925 + vertex -109.18236190979502 -106.43433599533701 -10.068148347421902 + vertex -134.50000000000006 -106.43433599533697 -10.00000000000005 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -134.50000000000006 -106.43433599533697 -10.00000000000005 + vertex -109.18236190979502 -106.43433599533701 -10.068148347421902 + vertex -109.70000000000007 -106.43433599533701 -10.000000000000037 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -109.70000000000003 -106.43433599533697 -55.60000000000006 + vertex -135.01763809020508 -106.43433599533691 -55.531851652578204 + vertex -134.50000000000006 -106.43433599533694 -55.600000000000065 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.01763809020508 -106.43433599533691 -55.531851652578204 + vertex -109.70000000000003 -106.43433599533697 -55.60000000000006 + vertex -109.18236190979498 -106.43433599533697 -55.53185165257819 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.01763809020508 -106.43433599533691 -55.531851652578204 + vertex -109.18236190979498 -106.43433599533697 -55.53185165257819 + vertex -135.50000000000006 -106.43433599533691 -55.33205080756895 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000006 -106.43433599533691 -55.33205080756895 + vertex -109.18236190979498 -106.43433599533697 -55.53185165257819 + vertex -108.70000000000005 -106.43433599533697 -55.332050807568926 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000006 -106.43433599533691 -55.33205080756895 + vertex -108.70000000000005 -106.43433599533697 -55.332050807568926 + vertex -135.91421356237313 -106.43433599533691 -55.01421356237316 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.91421356237313 -106.43433599533691 -55.01421356237316 + vertex -108.70000000000005 -106.43433599533697 -55.332050807568926 + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.91421356237313 -106.43433599533691 -55.01421356237316 + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + vertex -136.23205080756892 -106.43433599533697 -54.60000000000007 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756892 -106.43433599533697 -54.60000000000007 + vertex -108.28578643762692 -106.43433599533697 -55.01421356237315 + vertex -107.96794919243113 -106.43433599533697 -54.600000000000044 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756892 -106.43433599533697 -54.60000000000007 + vertex -107.96794919243113 -106.43433599533697 -54.600000000000044 + vertex -136.4318516525782 -106.43433599533691 -54.117638090205105 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.4318516525782 -106.43433599533691 -54.117638090205105 + vertex -107.96794919243113 -106.43433599533697 -54.600000000000044 + vertex -107.7681483474219 -106.43433599533697 -54.11763809020509 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.4318516525782 -106.43433599533691 -54.117638090205105 + vertex -107.7681483474219 -106.43433599533697 -54.11763809020509 + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + vertex -107.7681483474219 -106.43433599533697 -54.11763809020509 + vertex -107.70000000000003 -106.43433599533698 -53.60000000000005 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000006 -106.43433599533697 -53.60000000000007 + vertex -107.70000000000003 -106.43433599533698 -53.60000000000005 + vertex -136.50000000000006 -106.43433599533697 -51.600000000000065 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000006 -106.43433599533697 -51.600000000000065 + vertex -107.70000000000003 -106.43433599533698 -53.60000000000005 + vertex -107.70000000000003 -106.43433599533698 -51.600000000000044 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.50000000000006 -106.43433599533697 -51.600000000000065 + vertex -107.70000000000003 -106.43433599533698 -51.600000000000044 + vertex -136.4318516525782 -106.43433599533691 -51.08236190979502 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.4318516525782 -106.43433599533691 -51.08236190979502 + vertex -107.70000000000003 -106.43433599533698 -51.600000000000044 + vertex -107.7681483474219 -106.43433599533697 -51.082361909795 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.4318516525782 -106.43433599533691 -51.08236190979502 + vertex -107.7681483474219 -106.43433599533697 -51.082361909795 + vertex -136.23205080756892 -106.43433599533697 -50.60000000000005 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756892 -106.43433599533697 -50.60000000000005 + vertex -107.7681483474219 -106.43433599533697 -51.082361909795 + vertex -107.96794919243113 -106.43433599533697 -50.60000000000003 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -136.23205080756892 -106.43433599533697 -50.60000000000005 + vertex -107.96794919243113 -106.43433599533697 -50.60000000000003 + vertex -135.91421356237313 -106.43433599533694 -50.185786437626966 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.91421356237313 -106.43433599533694 -50.185786437626966 + vertex -107.96794919243113 -106.43433599533697 -50.60000000000003 + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.91421356237313 -106.43433599533694 -50.185786437626966 + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + vertex -135.50000000000009 -106.43433599533691 -49.86794919243118 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000009 -106.43433599533691 -49.86794919243118 + vertex -108.28578643762695 -106.43433599533697 -50.185786437626945 + vertex -108.70000000000005 -106.43433599533697 -49.86794919243116 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.50000000000009 -106.43433599533691 -49.86794919243118 + vertex -108.70000000000005 -106.43433599533697 -49.86794919243116 + vertex -135.01763809020508 -106.43433599533691 -49.66814834742192 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.01763809020508 -106.43433599533691 -49.66814834742192 + vertex -108.70000000000005 -106.43433599533697 -49.86794919243116 + vertex -109.18236190979498 -106.43433599533697 -49.6681483474219 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -135.01763809020508 -106.43433599533691 -49.66814834742192 + vertex -109.18236190979498 -106.43433599533697 -49.6681483474219 + vertex -134.50000000000006 -106.43433599533694 -49.60000000000006 + endloop +endfacet +facet normal -3.3306690738754686e-16 -1.0 -4.884367980290837e-16 + outer loop + vertex -134.50000000000006 -106.43433599533694 -49.60000000000006 + vertex -109.18236190979498 -106.43433599533697 -49.6681483474219 + vertex -109.70000000000003 -106.43433599533697 -49.60000000000003 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -159.68365785199265 -63.71153654742286 -55.531851652578204 + vertex -147.02483880689013 -41.78581879748475 -55.600000000000065 + vertex -159.42483880689016 -63.263248811338826 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -147.02483880689013 -41.78581879748475 -55.600000000000065 + vertex -159.68365785199265 -63.71153654742286 -55.531851652578204 + vertex -146.76601976178762 -41.337531061400725 -55.531851652578204 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.76601976178762 -41.337531061400725 -55.531851652578204 + vertex -159.68365785199265 -63.71153654742286 -55.531851652578204 + vertex -159.92483880689014 -64.12927421512327 -55.33205080756894 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.76601976178762 -41.337531061400725 -55.531851652578204 + vertex -159.92483880689014 -64.12927421512327 -55.33205080756894 + vertex -146.52483880689013 -40.91979339370032 -55.33205080756894 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.52483880689013 -40.91979339370032 -55.33205080756894 + vertex -159.92483880689014 -64.12927421512327 -55.33205080756894 + vertex -160.1319455880767 -64.48799368273042 -55.01421356237316 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.52483880689013 -40.91979339370032 -55.33205080756894 + vertex -160.1319455880767 -64.48799368273042 -55.01421356237316 + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + vertex -160.1319455880767 -64.48799368273042 -55.01421356237316 + vertex -160.29086421067458 -64.76324881133884 -54.60000000000006 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + vertex -160.29086421067458 -64.76324881133884 -54.60000000000006 + vertex -146.15881340310568 -40.28581879748475 -54.60000000000006 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -54.60000000000006 + vertex -160.29086421067458 -64.76324881133884 -54.60000000000006 + vertex -160.3907646331792 -64.93628141881446 -54.117638090205105 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -54.60000000000006 + vertex -160.3907646331792 -64.93628141881446 -54.117638090205105 + vertex -146.05891298060106 -40.11278619000914 -54.117638090205105 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.05891298060106 -40.11278619000914 -54.117638090205105 + vertex -160.3907646331792 -64.93628141881446 -54.117638090205105 + vertex -160.42483880689014 -64.99529961890774 -53.60000000000006 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.05891298060106 -40.11278619000914 -54.117638090205105 + vertex -160.42483880689014 -64.99529961890774 -53.60000000000006 + vertex -146.02483880689013 -40.05376798991588 -53.60000000000006 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.02483880689013 -40.05376798991588 -53.60000000000006 + vertex -160.42483880689014 -64.99529961890774 -53.60000000000006 + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.02483880689013 -40.05376798991588 -53.60000000000006 + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + vertex -146.02483880689013 -40.05376798991588 -51.60000000000005 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.02483880689013 -40.05376798991588 -51.60000000000005 + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + vertex -160.3907646331792 -64.93628141881446 -51.082361909795004 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.02483880689013 -40.05376798991588 -51.60000000000005 + vertex -160.3907646331792 -64.93628141881446 -51.082361909795004 + vertex -146.05891298060106 -40.112786190009146 -51.082361909795004 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.05891298060106 -40.112786190009146 -51.082361909795004 + vertex -160.3907646331792 -64.93628141881446 -51.082361909795004 + vertex -160.29086421067458 -64.76324881133884 -50.600000000000044 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.05891298060106 -40.112786190009146 -51.082361909795004 + vertex -160.29086421067458 -64.76324881133884 -50.600000000000044 + vertex -146.15881340310568 -40.28581879748475 -50.600000000000044 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -50.600000000000044 + vertex -160.29086421067458 -64.76324881133884 -50.600000000000044 + vertex -160.1319455880767 -64.48799368273043 -50.18578643762695 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -50.600000000000044 + vertex -160.1319455880767 -64.48799368273043 -50.18578643762695 + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + vertex -160.1319455880767 -64.48799368273043 -50.18578643762695 + vertex -159.92483880689014 -64.12927421512329 -49.867949192431176 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + vertex -159.92483880689014 -64.12927421512329 -49.867949192431176 + vertex -146.52483880689013 -40.91979339370032 -49.867949192431176 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.52483880689013 -40.91979339370032 -49.867949192431176 + vertex -159.92483880689014 -64.12927421512329 -49.867949192431176 + vertex -159.68365785199265 -63.71153654742286 -49.668148347421905 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.52483880689013 -40.91979339370032 -49.867949192431176 + vertex -159.68365785199265 -63.71153654742286 -49.668148347421905 + vertex -146.76601976178762 -41.337531061400725 -49.668148347421905 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.76601976178762 -41.337531061400725 -49.668148347421905 + vertex -159.68365785199265 -63.71153654742286 -49.668148347421905 + vertex -159.42483880689016 -63.263248811338826 -49.600000000000044 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -1.2429902774456645e-16 + outer loop + vertex -146.76601976178762 -41.337531061400725 -49.668148347421905 + vertex -159.42483880689016 -63.263248811338826 -49.600000000000044 + vertex -147.02483880689013 -41.78581879748475 -49.600000000000044 + endloop +endfacet +facet normal -4.548333036367583e-16 -4.884367980290836e-16 1.0 + outer loop + vertex -134.5 -104.4343359953371 -10.00000000000005 + vertex -109.70000000000007 -106.43433599533701 -10.000000000000037 + vertex -109.7 -104.43433599533714 -10.000000000000037 + endloop +endfacet +facet normal -4.548333036367583e-16 -4.884367980290836e-16 1.0 + outer loop + vertex -109.70000000000007 -106.43433599533701 -10.000000000000037 + vertex -134.5 -104.4343359953371 -10.00000000000005 + vertex -134.50000000000006 -106.43433599533697 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -159.68365785199268 -63.71153654742285 -15.931851652578198 + vertex -147.02483880689016 -41.78581879748475 -16.00000000000006 + vertex -159.42483880689016 -63.263248811338826 -16.00000000000006 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -147.02483880689016 -41.78581879748475 -16.00000000000006 + vertex -159.68365785199268 -63.71153654742285 -15.931851652578198 + vertex -146.76601976178765 -41.337531061400725 -15.931851652578198 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.76601976178765 -41.337531061400725 -15.931851652578198 + vertex -159.68365785199268 -63.71153654742285 -15.931851652578198 + vertex -159.92483880689014 -64.12927421512326 -15.732050807568937 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.76601976178765 -41.337531061400725 -15.931851652578198 + vertex -159.92483880689014 -64.12927421512326 -15.732050807568937 + vertex -146.52483880689016 -40.91979339370032 -15.732050807568937 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.52483880689016 -40.91979339370032 -15.732050807568937 + vertex -159.92483880689014 -64.12927421512326 -15.732050807568937 + vertex -160.1319455880767 -64.48799368273042 -15.414213562373153 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.52483880689016 -40.91979339370032 -15.732050807568937 + vertex -160.1319455880767 -64.48799368273042 -15.414213562373153 + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + vertex -160.1319455880767 -64.48799368273042 -15.414213562373153 + vertex -160.2908642106746 -64.76324881133883 -15.000000000000057 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + vertex -160.2908642106746 -64.76324881133883 -15.000000000000057 + vertex -146.15881340310568 -40.28581879748475 -15.000000000000057 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -15.000000000000057 + vertex -160.2908642106746 -64.76324881133883 -15.000000000000057 + vertex -160.39076463317923 -64.93628141881445 -14.517638090205098 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -15.000000000000057 + vertex -160.39076463317923 -64.93628141881445 -14.517638090205098 + vertex -146.0589129806011 -40.11278619000914 -14.517638090205098 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.0589129806011 -40.11278619000914 -14.517638090205098 + vertex -160.39076463317923 -64.93628141881445 -14.517638090205098 + vertex -160.42483880689014 -64.99529961890771 -14.000000000000059 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.0589129806011 -40.11278619000914 -14.517638090205098 + vertex -160.42483880689014 -64.99529961890771 -14.000000000000059 + vertex -146.02483880689016 -40.053767989915876 -14.000000000000059 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.02483880689016 -40.053767989915876 -14.000000000000059 + vertex -160.42483880689014 -64.99529961890771 -14.000000000000059 + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.02483880689016 -40.053767989915876 -14.000000000000059 + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + vertex -146.02483880689016 -40.053767989915876 -12.000000000000046 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.02483880689016 -40.053767989915876 -12.000000000000046 + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + vertex -160.39076463317923 -64.93628141881445 -11.482361909795012 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.02483880689016 -40.053767989915876 -12.000000000000046 + vertex -160.39076463317923 -64.93628141881445 -11.482361909795012 + vertex -146.05891298060106 -40.11278619000914 -11.482361909795012 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.05891298060106 -40.11278619000914 -11.482361909795012 + vertex -160.39076463317923 -64.93628141881445 -11.482361909795012 + vertex -160.2908642106746 -64.76324881133883 -11.000000000000048 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.05891298060106 -40.11278619000914 -11.482361909795012 + vertex -160.2908642106746 -64.76324881133883 -11.000000000000048 + vertex -146.15881340310568 -40.28581879748475 -11.000000000000048 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -11.000000000000048 + vertex -160.2908642106746 -64.76324881133883 -11.000000000000048 + vertex -160.13194558807672 -64.48799368273043 -10.58578643762696 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.15881340310568 -40.28581879748475 -11.000000000000048 + vertex -160.13194558807672 -64.48799368273043 -10.58578643762696 + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + vertex -160.13194558807672 -64.48799368273043 -10.58578643762696 + vertex -159.92483880689016 -64.12927421512327 -10.267949192431178 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + vertex -159.92483880689016 -64.12927421512327 -10.267949192431178 + vertex -146.52483880689016 -40.91979339370032 -10.267949192431178 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.52483880689016 -40.91979339370032 -10.267949192431178 + vertex -159.92483880689016 -64.12927421512327 -10.267949192431178 + vertex -159.68365785199268 -63.71153654742285 -10.068148347421912 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.52483880689016 -40.91979339370032 -10.267949192431178 + vertex -159.68365785199268 -63.71153654742285 -10.068148347421912 + vertex -146.76601976178765 -41.337531061400725 -10.068148347421912 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.76601976178765 -41.337531061400725 -10.068148347421912 + vertex -159.68365785199268 -63.71153654742285 -10.068148347421912 + vertex -159.42483880689016 -63.263248811338826 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844386 0.5000000000000002 -2.013447875437003e-16 + outer loop + vertex -146.76601976178765 -41.337531061400725 -10.068148347421912 + vertex -159.42483880689016 -63.263248811338826 -10.00000000000005 + vertex -147.02483880689016 -41.78581879748475 -10.00000000000005 + endloop +endfacet +facet normal 0.9238795325112884 -2.775557561562892e-16 -0.3826834323650861 + outer loop + vertex -107.76814834742186 -104.43433599533716 -14.517638090205088 + vertex -107.96794919243118 -106.43433599533701 -15.000000000000046 + vertex -107.9679491924311 -104.43433599533714 -15.000000000000046 + endloop +endfacet +facet normal 0.9238795325112884 -2.775557561562892e-16 -0.3826834323650861 + outer loop + vertex -107.96794919243118 -106.43433599533701 -15.000000000000046 + vertex -107.76814834742186 -104.43433599533716 -14.517638090205088 + vertex -107.76814834742193 -106.43433599533701 -14.517638090205088 + endloop +endfacet +facet normal -0.13052619222005338 5.481726184086709e-16 -0.9914448613738102 + outer loop + vertex -134.50000000000006 -106.43433599533697 -16.000000000000068 + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -134.5 -104.4343359953371 -16.000000000000068 + endloop +endfacet +facet normal -0.13052619222005338 5.481726184086709e-16 -0.9914448613738102 + outer loop + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + vertex -134.50000000000006 -106.43433599533697 -16.000000000000068 + vertex -135.0176380902051 -106.43433599533698 -15.931851652578203 + endloop +endfacet +facet normal -0.3826834323650754 -1.9428902930940227e-16 0.9238795325112927 + outer loop + vertex -135.50000000000003 -104.43433599533714 -10.267949192431178 + vertex -135.0176380902051 -106.43433599533698 -10.068148347421925 + vertex -135.01763809020505 -104.43433599533714 -10.068148347421925 + endloop +endfacet +facet normal -0.3826834323650754 -1.9428902930940227e-16 0.9238795325112927 + outer loop + vertex -135.0176380902051 -106.43433599533698 -10.068148347421925 + vertex -135.50000000000003 -104.43433599533714 -10.267949192431178 + vertex -135.50000000000009 -106.43433599533698 -10.267949192431178 + endloop +endfacet +facet normal -0.7933533402912271 7.771561172376095e-16 -0.6087614290087314 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -136.23205080756895 -106.43433599533697 -15.000000000000062 + vertex -136.23205080756892 -104.43433599533712 -15.000000000000062 + endloop +endfacet +facet normal -0.7933533402912271 7.771561172376095e-16 -0.6087614290087314 + outer loop + vertex -136.23205080756895 -106.43433599533697 -15.000000000000062 + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -135.9142135623732 -106.43433599533697 -15.414213562373158 + endloop +endfacet +facet normal 6.822499554551369e-16 4.884367980290835e-16 -1.0 + outer loop + vertex -109.70000000000005 -106.43433599533701 -16.00000000000005 + vertex -134.5 -104.4343359953371 -16.000000000000068 + vertex -109.7 -104.43433599533714 -16.00000000000005 + endloop +endfacet +facet normal 6.822499554551369e-16 4.884367980290835e-16 -1.0 + outer loop + vertex -134.5 -104.4343359953371 -16.000000000000068 + vertex -109.70000000000005 -106.43433599533701 -16.00000000000005 + vertex -134.50000000000006 -106.43433599533697 -16.000000000000068 + endloop +endfacet +facet normal 0.9238795325112942 -7.771561172376093e-16 0.38268343236507185 + outer loop + vertex -107.96794919243118 -106.43433599533701 -11.000000000000036 + vertex -107.76814834742186 -104.43433599533714 -11.482361909795 + vertex -107.9679491924311 -104.43433599533714 -11.000000000000036 + endloop +endfacet +facet normal 0.9238795325112942 -7.771561172376093e-16 0.38268343236507185 + outer loop + vertex -107.76814834742186 -104.43433599533714 -11.482361909795 + vertex -107.96794919243118 -106.43433599533701 -11.000000000000036 + vertex -107.76814834742193 -106.43433599533701 -11.482361909795 + endloop +endfacet +facet normal 0.9914448613738122 -4.996003610813203e-16 -0.13052619222003797 + outer loop + vertex -107.7 -104.43433599533714 -14.000000000000048 + vertex -107.76814834742193 -106.43433599533701 -14.517638090205088 + vertex -107.76814834742186 -104.43433599533716 -14.517638090205088 + endloop +endfacet +facet normal 0.9914448613738122 -4.996003610813203e-16 -0.13052619222003797 + outer loop + vertex -107.76814834742193 -106.43433599533701 -14.517638090205088 + vertex -107.7 -104.43433599533714 -14.000000000000048 + vertex -107.70000000000007 -106.43433599533701 -14.000000000000048 + endloop +endfacet +facet normal 0.7933533402912275 -7.771561172376095e-16 0.6087614290087308 + outer loop + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + vertex -107.9679491924311 -104.43433599533714 -11.000000000000036 + vertex -108.2857864376269 -104.43433599533714 -10.585786437626947 + endloop +endfacet +facet normal 0.7933533402912275 -7.771561172376095e-16 0.6087614290087308 + outer loop + vertex -107.9679491924311 -104.43433599533714 -11.000000000000036 + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + vertex -107.96794919243118 -106.43433599533701 -11.000000000000036 + endloop +endfacet +facet normal 0.6087614290087124 -7.771561172376095e-16 0.7933533402912416 + outer loop + vertex -108.7 -104.43433599533714 -10.267949192431168 + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + vertex -108.2857864376269 -104.43433599533714 -10.585786437626947 + endloop +endfacet +facet normal 0.6087614290087124 -7.771561172376095e-16 0.7933533402912416 + outer loop + vertex -108.28578643762697 -106.43433599533701 -10.585786437626947 + vertex -108.7 -104.43433599533714 -10.267949192431168 + vertex -108.70000000000007 -106.43433599533701 -10.267949192431168 + endloop +endfacet +facet normal -0.38268343236509783 6.661338147750938e-16 -0.9238795325112834 + outer loop + vertex -135.0176380902051 -106.43433599533698 -15.931851652578203 + vertex -135.5 -104.43433599533714 -15.732050807568942 + vertex -135.01763809020505 -104.43433599533714 -15.931851652578203 + endloop +endfacet +facet normal -0.38268343236509783 6.661338147750938e-16 -0.9238795325112834 + outer loop + vertex -135.5 -104.43433599533714 -15.732050807568942 + vertex -135.0176380902051 -106.43433599533698 -15.931851652578203 + vertex -135.50000000000006 -106.43433599533697 -15.732050807568942 + endloop +endfacet +facet normal 0.3826834323651082 -6.661338147750938e-16 0.9238795325112792 + outer loop + vertex -109.18236190979493 -104.43433599533714 -10.068148347421902 + vertex -108.70000000000007 -106.43433599533701 -10.267949192431168 + vertex -108.7 -104.43433599533714 -10.267949192431168 + endloop +endfacet +facet normal 0.3826834323651082 -6.661338147750938e-16 0.9238795325112792 + outer loop + vertex -108.70000000000007 -106.43433599533701 -10.267949192431168 + vertex -109.18236190979493 -104.43433599533714 -10.068148347421902 + vertex -109.18236190979502 -106.43433599533701 -10.068148347421902 + endloop +endfacet +facet normal 0.13052619222005019 -5.481726184086709e-16 0.9914448613738106 + outer loop + vertex -109.7 -104.43433599533714 -10.000000000000037 + vertex -109.18236190979502 -106.43433599533701 -10.068148347421902 + vertex -109.18236190979493 -104.43433599533714 -10.068148347421902 + endloop +endfacet +facet normal 0.13052619222005019 -5.481726184086709e-16 0.9914448613738106 + outer loop + vertex -109.18236190979502 -106.43433599533701 -10.068148347421902 + vertex -109.7 -104.43433599533714 -10.000000000000037 + vertex -109.70000000000007 -106.43433599533701 -10.000000000000037 + endloop +endfacet +facet normal 0.38268343236509894 1.9428902930940227e-16 -0.9238795325112831 + outer loop + vertex -108.70000000000007 -106.43433599533701 -15.732050807568926 + vertex -109.18236190979493 -104.43433599533714 -15.931851652578185 + vertex -108.7 -104.43433599533714 -15.732050807568926 + endloop +endfacet +facet normal 0.38268343236509894 1.9428902930940227e-16 -0.9238795325112831 + outer loop + vertex -109.18236190979493 -104.43433599533714 -15.931851652578185 + vertex -108.70000000000007 -106.43433599533701 -15.732050807568926 + vertex -109.18236190979502 -106.43433599533701 -15.931851652578185 + endloop +endfacet +facet normal 1.0 -5.551115123125781e-16 -5.933957380480175e-32 + outer loop + vertex -107.70000000000007 -106.43433599533701 -12.000000000000034 + vertex -107.7 -104.43433599533714 -14.000000000000048 + vertex -107.7 -104.43433599533714 -12.000000000000034 + endloop +endfacet +facet normal 1.0 -5.551115123125781e-16 -5.933957380480175e-32 + outer loop + vertex -107.7 -104.43433599533714 -14.000000000000048 + vertex -107.70000000000007 -106.43433599533701 -12.000000000000034 + vertex -107.70000000000007 -106.43433599533701 -14.000000000000048 + endloop +endfacet +facet normal -0.7933533402912331 2.2204460492503136e-16 0.6087614290087234 + outer loop + vertex -136.23205080756895 -106.43433599533697 -11.000000000000048 + vertex -135.91421356237313 -104.43433599533712 -10.58578643762697 + vertex -136.23205080756892 -104.43433599533712 -11.000000000000048 + endloop +endfacet +facet normal -0.7933533402912331 2.2204460492503136e-16 0.6087614290087234 + outer loop + vertex -135.91421356237313 -104.43433599533712 -10.58578643762697 + vertex -136.23205080756895 -106.43433599533697 -11.000000000000048 + vertex -135.9142135623732 -106.43433599533697 -10.58578643762697 + endloop +endfacet +facet normal 0.6087614290087191 -1.1260555418304602e-31 -0.7933533402912364 + outer loop + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + vertex -108.7 -104.43433599533714 -15.732050807568926 + vertex -108.2857864376269 -104.43433599533714 -15.41421356237314 + endloop +endfacet +facet normal 0.6087614290087191 -1.1260555418304602e-31 -0.7933533402912364 + outer loop + vertex -108.7 -104.43433599533714 -15.732050807568926 + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + vertex -108.70000000000007 -106.43433599533701 -15.732050807568926 + endloop +endfacet +facet normal -0.6087614290087109 1.1260555418304691e-31 0.7933533402912427 + outer loop + vertex -135.91421356237313 -104.43433599533712 -10.58578643762697 + vertex -135.50000000000009 -106.43433599533698 -10.267949192431178 + vertex -135.50000000000003 -104.43433599533714 -10.267949192431178 + endloop +endfacet +facet normal -0.6087614290087109 1.1260555418304691e-31 0.7933533402912427 + outer loop + vertex -135.50000000000009 -106.43433599533698 -10.267949192431178 + vertex -135.91421356237313 -104.43433599533712 -10.58578643762697 + vertex -135.9142135623732 -106.43433599533697 -10.58578643762697 + endloop +endfacet +facet normal -0.9238795325113018 3.33066907387547e-16 0.3826834323650538 + outer loop + vertex -136.43185165257822 -106.43433599533698 -11.482361909795022 + vertex -136.23205080756892 -104.43433599533712 -11.000000000000048 + vertex -136.43185165257813 -104.43433599533714 -11.482361909795022 + endloop +endfacet +facet normal -0.9238795325113018 3.33066907387547e-16 0.3826834323650538 + outer loop + vertex -136.23205080756892 -104.43433599533712 -11.000000000000048 + vertex -136.43185165257822 -106.43433599533698 -11.482361909795022 + vertex -136.23205080756895 -106.43433599533697 -11.000000000000048 + endloop +endfacet +facet normal -0.9238795325112971 7.216449660063517e-16 -0.38268343236506525 + outer loop + vertex -136.23205080756892 -104.43433599533712 -15.000000000000062 + vertex -136.43185165257822 -106.43433599533698 -14.517638090205104 + vertex -136.43185165257813 -104.43433599533714 -14.517638090205104 + endloop +endfacet +facet normal -0.9238795325112971 7.216449660063517e-16 -0.38268343236506525 + outer loop + vertex -136.43185165257822 -106.43433599533698 -14.517638090205104 + vertex -136.23205080756892 -104.43433599533712 -15.000000000000062 + vertex -136.23205080756895 -106.43433599533697 -15.000000000000062 + endloop +endfacet +facet normal -0.9914448613738078 6.661338147750936e-16 -0.13052619222007122 + outer loop + vertex -136.43185165257813 -104.43433599533714 -14.517638090205104 + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + vertex -136.50000000000003 -104.43433599533712 -14.000000000000064 + endloop +endfacet +facet normal -0.9914448613738078 6.661338147750936e-16 -0.13052619222007122 + outer loop + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + vertex -136.43185165257813 -104.43433599533714 -14.517638090205104 + vertex -136.43185165257822 -106.43433599533698 -14.517638090205104 + endloop +endfacet +facet normal 0.9914448613738107 -6.661338147750937e-16 0.13052619222005 + outer loop + vertex -107.76814834742193 -106.43433599533701 -11.482361909795 + vertex -107.7 -104.43433599533714 -12.000000000000034 + vertex -107.76814834742186 -104.43433599533714 -11.482361909795 + endloop +endfacet +facet normal 0.9914448613738107 -6.661338147750937e-16 0.13052619222005 + outer loop + vertex -107.7 -104.43433599533714 -12.000000000000034 + vertex -107.76814834742193 -106.43433599533701 -11.482361909795 + vertex -107.70000000000007 -106.43433599533701 -12.000000000000034 + endloop +endfacet +facet normal 0.7933533402912359 -1.6653345369377353e-16 -0.6087614290087195 + outer loop + vertex -107.9679491924311 -104.43433599533714 -15.000000000000046 + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + vertex -108.2857864376269 -104.43433599533714 -15.41421356237314 + endloop +endfacet +facet normal 0.7933533402912359 -1.6653345369377353e-16 -0.6087614290087195 + outer loop + vertex -108.28578643762695 -106.43433599533701 -15.41421356237314 + vertex -107.9679491924311 -104.43433599533714 -15.000000000000046 + vertex -107.96794919243118 -106.43433599533701 -15.000000000000046 + endloop +endfacet +facet normal -0.6087614290087041 7.771561172376093e-16 -0.7933533402912477 + outer loop + vertex -135.50000000000006 -106.43433599533697 -15.732050807568942 + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -135.5 -104.43433599533714 -15.732050807568942 + endloop +endfacet +facet normal -0.6087614290087041 7.771561172376093e-16 -0.7933533402912477 + outer loop + vertex -135.9142135623731 -104.4343359953371 -15.414213562373158 + vertex -135.50000000000006 -106.43433599533697 -15.732050807568942 + vertex -135.9142135623732 -106.43433599533697 -15.414213562373158 + endloop +endfacet +facet normal 0.13052619222005016 4.024558464266191e-16 -0.9914448613738106 + outer loop + vertex -109.18236190979502 -106.43433599533701 -15.931851652578185 + vertex -109.7 -104.43433599533714 -16.00000000000005 + vertex -109.18236190979493 -104.43433599533714 -15.931851652578185 + endloop +endfacet +facet normal 0.13052619222005016 4.024558464266191e-16 -0.9914448613738106 + outer loop + vertex -109.7 -104.43433599533714 -16.00000000000005 + vertex -109.18236190979502 -106.43433599533701 -15.931851652578185 + vertex -109.70000000000005 -106.43433599533701 -16.00000000000005 + endloop +endfacet +facet normal -0.1305261922200746 -4.024558464266191e-16 0.9914448613738074 + outer loop + vertex -135.01763809020505 -104.43433599533714 -10.068148347421925 + vertex -134.50000000000006 -106.43433599533697 -10.00000000000005 + vertex -134.5 -104.4343359953371 -10.00000000000005 + endloop +endfacet +facet normal -0.1305261922200746 -4.024558464266191e-16 0.9914448613738074 + outer loop + vertex -134.50000000000006 -106.43433599533697 -10.00000000000005 + vertex -135.01763809020505 -104.43433599533714 -10.068148347421925 + vertex -135.0176380902051 -106.43433599533698 -10.068148347421925 + endloop +endfacet +facet normal -1.0 5.551115123125781e-16 5.933957380480175e-32 + outer loop + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + vertex -136.50000000000003 -104.43433599533712 -12.000000000000052 + vertex -136.50000000000003 -104.43433599533712 -14.000000000000064 + endloop +endfacet +facet normal -1.0 5.551115123125781e-16 5.933957380480175e-32 + outer loop + vertex -136.50000000000003 -104.43433599533712 -12.000000000000052 + vertex -136.50000000000009 -106.43433599533697 -14.000000000000064 + vertex -136.50000000000009 -106.43433599533697 -12.000000000000052 + endloop +endfacet +facet normal -0.9914448613738076 4.996003610813203e-16 0.1305261922200726 + outer loop + vertex -136.50000000000009 -106.43433599533697 -12.000000000000052 + vertex -136.43185165257813 -104.43433599533714 -11.482361909795022 + vertex -136.50000000000003 -104.43433599533712 -12.000000000000052 + endloop +endfacet +facet normal -0.9914448613738076 4.996003610813203e-16 0.1305261922200726 + outer loop + vertex -136.43185165257813 -104.43433599533714 -11.482361909795022 + vertex -136.50000000000009 -106.43433599533697 -12.000000000000052 + vertex -136.43185165257822 -106.43433599533698 -11.482361909795022 + endloop +endfacet +facet normal -0.39667667014561114 -0.6870641468694494 0.6087614290087259 + outer loop + vertex -160.29086421067458 -64.76324881133884 -50.600000000000044 + vertex -158.39989478050782 -65.4879936827304 -50.18578643762695 + vertex -160.1319455880767 -64.48799368273043 -50.18578643762695 + endloop +endfacet +facet normal -0.39667667014561114 -0.6870641468694494 0.6087614290087259 + outer loop + vertex -158.39989478050782 -65.4879936827304 -50.18578643762695 + vertex -160.29086421067458 -64.76324881133884 -50.600000000000044 + vertex -158.55881340310572 -65.76324881133884 -50.600000000000044 + endloop +endfacet +facet normal -0.49999999999998573 -0.866025403784447 1.5259013723954617e-31 + outer loop + vertex -158.69278799932127 -65.9952996189077 -53.60000000000006 + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + vertex -160.42483880689014 -64.99529961890774 -53.60000000000006 + endloop +endfacet +facet normal -0.49999999999998573 -0.866025403784447 1.5259013723954617e-31 + outer loop + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + vertex -158.69278799932127 -65.9952996189077 -53.60000000000006 + vertex -158.69278799932127 -65.9952996189077 -51.60000000000005 + endloop +endfacet +facet normal -0.06526309611002494 -0.11303899832181426 0.9914448613738107 + outer loop + vertex -159.42483880689016 -63.263248811338826 -49.600000000000044 + vertex -157.9516070444238 -64.71153654742285 -49.668148347421905 + vertex -157.6927879993213 -64.26324881133883 -49.600000000000044 + endloop +endfacet +facet normal -0.06526309611002494 -0.11303899832181426 0.9914448613738107 + outer loop + vertex -157.9516070444238 -64.71153654742285 -49.668148347421905 + vertex -159.42483880689016 -63.263248811338826 -49.600000000000044 + vertex -159.68365785199265 -63.71153654742286 -49.668148347421905 + endloop +endfacet +facet normal -0.46193976625564737 -0.8001031451912702 -0.38268343236507574 + outer loop + vertex -158.55881340310572 -65.76324881133884 -54.60000000000006 + vertex -160.3907646331792 -64.93628141881446 -54.117638090205105 + vertex -160.29086421067458 -64.76324881133884 -54.60000000000006 + endloop +endfacet +facet normal -0.46193976625564737 -0.8001031451912702 -0.38268343236507574 + outer loop + vertex -160.3907646331792 -64.93628141881446 -54.117638090205105 + vertex -158.55881340310572 -65.76324881133884 -54.60000000000006 + vertex -158.65871382561033 -65.93628141881445 -54.117638090205105 + endloop +endfacet +facet normal -0.46193976625564803 -0.8001031451912715 0.3826834323650719 + outer loop + vertex -160.3907646331792 -64.93628141881446 -51.082361909795004 + vertex -158.55881340310572 -65.76324881133884 -50.600000000000044 + vertex -160.29086421067458 -64.76324881133884 -50.600000000000044 + endloop +endfacet +facet normal -0.46193976625564803 -0.8001031451912715 0.3826834323650719 + outer loop + vertex -158.55881340310572 -65.76324881133884 -50.600000000000044 + vertex -160.3907646331792 -64.93628141881446 -51.082361909795004 + vertex -158.65871382561033 -65.93628141881445 -51.082361909795004 + endloop +endfacet +facet normal -0.4957224306868973 -0.8586164364012647 0.1305261922200579 + outer loop + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + vertex -158.65871382561033 -65.93628141881445 -51.082361909795004 + vertex -160.3907646331792 -64.93628141881446 -51.082361909795004 + endloop +endfacet +facet normal -0.4957224306868973 -0.8586164364012647 0.1305261922200579 + outer loop + vertex -158.65871382561033 -65.93628141881445 -51.082361909795004 + vertex -160.42483880689014 -64.99529961890774 -51.60000000000005 + vertex -158.69278799932127 -65.9952996189077 -51.60000000000005 + endloop +endfacet +facet normal -0.06526309611002495 -0.11303899832181433 -0.9914448613738107 + outer loop + vertex -157.9516070444238 -64.71153654742285 -55.531851652578204 + vertex -159.42483880689016 -63.263248811338826 -55.600000000000065 + vertex -157.6927879993213 -64.26324881133883 -55.600000000000065 + endloop +endfacet +facet normal -0.06526309611002495 -0.11303899832181433 -0.9914448613738107 + outer loop + vertex -159.42483880689016 -63.263248811338826 -55.600000000000065 + vertex -157.9516070444238 -64.71153654742285 -55.531851652578204 + vertex -159.68365785199265 -63.71153654742286 -55.531851652578204 + endloop +endfacet +facet normal -0.30438071450435783 -0.5272028623656784 0.7933533402912303 + outer loop + vertex -159.92483880689014 -64.12927421512329 -49.867949192431176 + vertex -158.39989478050782 -65.4879936827304 -50.18578643762695 + vertex -158.19278799932127 -65.1292742151233 -49.867949192431176 + endloop +endfacet +facet normal -0.30438071450435783 -0.5272028623656784 0.7933533402912303 + outer loop + vertex -158.39989478050782 -65.4879936827304 -50.18578643762695 + vertex -159.92483880689014 -64.12927421512329 -49.867949192431176 + vertex -160.1319455880767 -64.48799368273043 -50.18578643762695 + endloop +endfacet +facet normal 0.0652630961100257 0.1130389983218156 -0.9914448613738105 + outer loop + vertex -145.2927879993213 -42.785818797484744 -16.00000000000006 + vertex -146.76601976178765 -41.337531061400725 -15.931851652578198 + vertex -145.03396895421878 -42.33753106140071 -15.931851652578198 + endloop +endfacet +facet normal 0.0652630961100257 0.1130389983218156 -0.9914448613738105 + outer loop + vertex -146.76601976178765 -41.337531061400725 -15.931851652578198 + vertex -145.2927879993213 -42.785818797484744 -16.00000000000006 + vertex -147.02483880689016 -41.78581879748475 -16.00000000000006 + endloop +endfacet +facet normal 0.30438071450435905 0.5272028623656683 -0.7933533402912365 + outer loop + vertex -144.7927879993213 -41.91979339370032 -15.732050807568937 + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + vertex -144.58568121813474 -41.56107392609316 -15.414213562373153 + endloop +endfacet +facet normal 0.30438071450435905 0.5272028623656683 -0.7933533402912365 + outer loop + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + vertex -144.7927879993213 -41.91979339370032 -15.732050807568937 + vertex -146.52483880689016 -40.91979339370032 -15.732050807568937 + endloop +endfacet +facet normal -0.4957224306869059 -0.8586164364012638 -0.13052619222003028 + outer loop + vertex -158.65871382561036 -65.93628141881446 -14.517638090205098 + vertex -160.42483880689014 -64.99529961890771 -14.000000000000059 + vertex -160.39076463317923 -64.93628141881445 -14.517638090205098 + endloop +endfacet +facet normal -0.4957224306869059 -0.8586164364012638 -0.13052619222003028 + outer loop + vertex -160.42483880689014 -64.99529961890771 -14.000000000000059 + vertex -158.65871382561036 -65.93628141881446 -14.517638090205098 + vertex -158.69278799932127 -65.9952996189077 -14.000000000000059 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex -147.02483880689016 -41.78581879748475 -10.00000000000005 + vertex -157.6927879993213 -64.26324881133883 -10.00000000000005 + vertex -145.2927879993213 -42.785818797484744 -10.00000000000005 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex -157.6927879993213 -64.26324881133883 -10.00000000000005 + vertex -147.02483880689016 -41.78581879748475 -10.00000000000005 + vertex -159.42483880689016 -63.263248811338826 -10.00000000000005 + endloop +endfacet +facet normal 0.46193976625564875 0.8001031451912675 0.3826834323650799 + outer loop + vertex -146.15881340310568 -40.28581879748475 -11.000000000000048 + vertex -144.3268621730322 -41.112786190009146 -11.482361909795012 + vertex -146.05891298060106 -40.11278619000914 -11.482361909795012 + endloop +endfacet +facet normal 0.46193976625564875 0.8001031451912675 0.3826834323650799 + outer loop + vertex -144.3268621730322 -41.112786190009146 -11.482361909795012 + vertex -146.15881340310568 -40.28581879748475 -11.000000000000048 + vertex -144.42676259553681 -41.28581879748476 -11.000000000000048 + endloop +endfacet +facet normal 0.4999999999999989 0.8660254037844393 -1.5259013723954584e-31 + outer loop + vertex -144.2927879993213 -41.05376798991587 -12.000000000000046 + vertex -146.02483880689016 -40.053767989915876 -14.000000000000059 + vertex -146.02483880689016 -40.053767989915876 -12.000000000000046 + endloop +endfacet +facet normal 0.4999999999999989 0.8660254037844393 -1.5259013723954584e-31 + outer loop + vertex -146.02483880689016 -40.053767989915876 -14.000000000000059 + vertex -144.2927879993213 -41.05376798991587 -12.000000000000046 + vertex -144.2927879993213 -41.05376798991587 -14.000000000000059 + endloop +endfacet +facet normal 0.19134171618254736 0.3314135740355969 -0.9238795325112844 + outer loop + vertex -145.03396895421878 -42.33753106140071 -15.931851652578198 + vertex -146.52483880689016 -40.91979339370032 -15.732050807568937 + vertex -144.7927879993213 -41.91979339370032 -15.732050807568937 + endloop +endfacet +facet normal 0.19134171618254736 0.3314135740355969 -0.9238795325112844 + outer loop + vertex -146.52483880689016 -40.91979339370032 -15.732050807568937 + vertex -145.03396895421878 -42.33753106140071 -15.931851652578198 + vertex -146.76601976178765 -41.337531061400725 -15.931851652578198 + endloop +endfacet +facet normal -0.3966766701456126 -0.6870641468694436 -0.6087614290087314 + outer loop + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -160.2908642106746 -64.76324881133883 -15.000000000000057 + vertex -160.1319455880767 -64.48799368273042 -15.414213562373153 + endloop +endfacet +facet normal -0.3966766701456126 -0.6870641468694436 -0.6087614290087314 + outer loop + vertex -160.2908642106746 -64.76324881133883 -15.000000000000057 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -158.55881340310575 -65.76324881133881 -15.000000000000057 + endloop +endfacet +facet normal 0.46193976625564753 0.8001031451912655 -0.38268343236508495 + outer loop + vertex -144.32686217303223 -41.11278619000914 -14.517638090205098 + vertex -146.15881340310568 -40.28581879748475 -15.000000000000057 + vertex -146.0589129806011 -40.11278619000914 -14.517638090205098 + endloop +endfacet +facet normal 0.46193976625564753 0.8001031451912655 -0.38268343236508495 + outer loop + vertex -146.15881340310568 -40.28581879748475 -15.000000000000057 + vertex -144.32686217303223 -41.11278619000914 -14.517638090205098 + vertex -144.42676259553681 -41.28581879748476 -15.000000000000057 + endloop +endfacet +facet normal 0.3043807145043553 0.5272028623656618 0.7933533402912423 + outer loop + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + vertex -144.7927879993213 -41.91979339370032 -10.267949192431178 + vertex -144.58568121813474 -41.56107392609316 -10.58578643762696 + endloop +endfacet +facet normal 0.3043807145043553 0.5272028623656618 0.7933533402912423 + outer loop + vertex -144.7927879993213 -41.91979339370032 -10.267949192431178 + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + vertex -146.52483880689016 -40.91979339370032 -10.267949192431178 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -157.6927879993213 -64.26324881133883 -16.00000000000006 + vertex -147.02483880689016 -41.78581879748475 -16.00000000000006 + vertex -145.2927879993213 -42.785818797484744 -16.00000000000006 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -147.02483880689016 -41.78581879748475 -16.00000000000006 + vertex -157.6927879993213 -64.26324881133883 -16.00000000000006 + vertex -159.42483880689016 -63.263248811338826 -16.00000000000006 + endloop +endfacet +facet normal 0.396676670145619 0.6870641468694485 0.6087614290087214 + outer loop + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + vertex -144.42676259553681 -41.28581879748476 -11.000000000000048 + vertex -146.15881340310568 -40.28581879748475 -11.000000000000048 + endloop +endfacet +facet normal 0.396676670145619 0.6870641468694485 0.6087614290087214 + outer loop + vertex -144.42676259553681 -41.28581879748476 -11.000000000000048 + vertex -146.3177320257036 -40.56107392609316 -10.58578643762696 + vertex -144.58568121813474 -41.56107392609316 -10.58578643762696 + endloop +endfacet +facet normal 0.49572243068690514 0.8586164364012606 0.13052619222005535 + outer loop + vertex -146.05891298060106 -40.11278619000914 -11.482361909795012 + vertex -144.2927879993213 -41.05376798991587 -12.000000000000046 + vertex -146.02483880689016 -40.053767989915876 -12.000000000000046 + endloop +endfacet +facet normal 0.49572243068690514 0.8586164364012606 0.13052619222005535 + outer loop + vertex -144.2927879993213 -41.05376798991587 -12.000000000000046 + vertex -146.05891298060106 -40.11278619000914 -11.482361909795012 + vertex -144.3268621730322 -41.112786190009146 -11.482361909795012 + endloop +endfacet +facet normal 0.396676670145621 0.687064146869452 -0.6087614290087162 + outer loop + vertex -144.42676259553681 -41.28581879748476 -15.000000000000057 + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + vertex -146.15881340310568 -40.28581879748475 -15.000000000000057 + endloop +endfacet +facet normal 0.396676670145621 0.687064146869452 -0.6087614290087162 + outer loop + vertex -146.3177320257036 -40.56107392609316 -15.414213562373153 + vertex -144.42676259553681 -41.28581879748476 -15.000000000000057 + vertex -144.58568121813474 -41.56107392609316 -15.414213562373153 + endloop +endfacet +facet normal -0.3043807145043605 -0.527202862365668 -0.7933533402912359 + outer loop + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -159.92483880689014 -64.12927421512326 -15.732050807568937 + vertex -158.1927879993213 -65.12927421512326 -15.732050807568937 + endloop +endfacet +facet normal -0.3043807145043605 -0.527202862365668 -0.7933533402912359 + outer loop + vertex -159.92483880689014 -64.12927421512326 -15.732050807568937 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -160.1319455880767 -64.48799368273042 -15.414213562373153 + endloop +endfacet +facet normal 0.0652630961100256 0.11303899832181541 0.9914448613738105 + outer loop + vertex -146.76601976178765 -41.337531061400725 -10.068148347421912 + vertex -145.2927879993213 -42.785818797484744 -10.00000000000005 + vertex -145.03396895421878 -42.33753106140071 -10.068148347421912 + endloop +endfacet +facet normal 0.0652630961100256 0.11303899832181541 0.9914448613738105 + outer loop + vertex -145.2927879993213 -42.785818797484744 -10.00000000000005 + vertex -146.76601976178765 -41.337531061400725 -10.068148347421912 + vertex -147.02483880689016 -41.78581879748475 -10.00000000000005 + endloop +endfacet +facet normal 0.495722430686905 0.8586164364012607 -0.13052619222005396 + outer loop + vertex -144.2927879993213 -41.05376798991587 -14.000000000000059 + vertex -146.0589129806011 -40.11278619000914 -14.517638090205098 + vertex -146.02483880689016 -40.053767989915876 -14.000000000000059 + endloop +endfacet +facet normal 0.495722430686905 0.8586164364012607 -0.13052619222005396 + outer loop + vertex -146.0589129806011 -40.11278619000914 -14.517638090205098 + vertex -144.2927879993213 -41.05376798991587 -14.000000000000059 + vertex -144.32686217303223 -41.11278619000914 -14.517638090205098 + endloop +endfacet +facet normal 0.1913417161825518 0.33141357403560456 0.9238795325112809 + outer loop + vertex -146.52483880689016 -40.91979339370032 -10.267949192431178 + vertex -145.03396895421878 -42.33753106140071 -10.068148347421912 + vertex -144.7927879993213 -41.91979339370032 -10.267949192431178 + endloop +endfacet +facet normal 0.1913417161825518 0.33141357403560456 0.9238795325112809 + outer loop + vertex -145.03396895421878 -42.33753106140071 -10.068148347421912 + vertex -146.52483880689016 -40.91979339370032 -10.267949192431178 + vertex -146.76601976178765 -41.337531061400725 -10.068148347421912 + endloop +endfacet +facet normal -0.19134171618254825 -0.3314135740355942 0.9238795325112852 + outer loop + vertex -159.68365785199268 -63.71153654742285 -10.068148347421912 + vertex -158.1927879993213 -65.12927421512329 -10.267949192431178 + vertex -157.9516070444238 -64.71153654742285 -10.068148347421912 + endloop +endfacet +facet normal -0.19134171618254825 -0.3314135740355942 0.9238795325112852 + outer loop + vertex -158.1927879993213 -65.12927421512329 -10.267949192431178 + vertex -159.68365785199268 -63.71153654742285 -10.068148347421912 + vertex -159.92483880689016 -64.12927421512327 -10.267949192431178 + endloop +endfacet +facet normal -0.19134171618255053 -0.33141357403559846 -0.9238795325112833 + outer loop + vertex -158.1927879993213 -65.12927421512326 -15.732050807568937 + vertex -159.68365785199268 -63.71153654742285 -15.931851652578198 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + endloop +endfacet +facet normal -0.19134171618255053 -0.33141357403559846 -0.9238795325112833 + outer loop + vertex -159.68365785199268 -63.71153654742285 -15.931851652578198 + vertex -158.1927879993213 -65.12927421512326 -15.732050807568937 + vertex -159.92483880689014 -64.12927421512326 -15.732050807568937 + endloop +endfacet +facet normal -0.3043807145043595 -0.5272028623656718 0.7933533402912339 + outer loop + vertex -159.92483880689016 -64.12927421512327 -10.267949192431178 + vertex -158.39989478050782 -65.48799368273042 -10.58578643762696 + vertex -158.1927879993213 -65.12927421512329 -10.267949192431178 + endloop +endfacet +facet normal -0.3043807145043595 -0.5272028623656718 0.7933533402912339 + outer loop + vertex -158.39989478050782 -65.48799368273042 -10.58578643762696 + vertex -159.92483880689016 -64.12927421512327 -10.267949192431178 + vertex -160.13194558807672 -64.48799368273043 -10.58578643762696 + endloop +endfacet +facet normal -0.06526309611002479 -0.11303899832181329 -0.9914448613738107 + outer loop + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -159.42483880689016 -63.263248811338826 -16.00000000000006 + vertex -157.6927879993213 -64.26324881133883 -16.00000000000006 + endloop +endfacet +facet normal -0.06526309611002479 -0.11303899832181329 -0.9914448613738107 + outer loop + vertex -159.42483880689016 -63.263248811338826 -16.00000000000006 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -159.68365785199268 -63.71153654742285 -15.931851652578198 + endloop +endfacet +facet normal -0.3966766701456119 -0.6870641468694498 0.6087614290087249 + outer loop + vertex -160.2908642106746 -64.76324881133883 -11.000000000000048 + vertex -158.39989478050782 -65.48799368273042 -10.58578643762696 + vertex -160.13194558807672 -64.48799368273043 -10.58578643762696 + endloop +endfacet +facet normal -0.3966766701456119 -0.6870641468694498 0.6087614290087249 + outer loop + vertex -158.39989478050782 -65.48799368273042 -10.58578643762696 + vertex -160.2908642106746 -64.76324881133883 -11.000000000000048 + vertex -158.55881340310575 -65.76324881133881 -11.000000000000048 + endloop +endfacet +facet normal -0.4957224306869059 -0.8586164364012638 0.13052619222003028 + outer loop + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + vertex -158.65871382561036 -65.93628141881446 -11.482361909795012 + vertex -160.39076463317923 -64.93628141881445 -11.482361909795012 + endloop +endfacet +facet normal -0.4957224306869059 -0.8586164364012638 0.13052619222003028 + outer loop + vertex -158.65871382561036 -65.93628141881446 -11.482361909795012 + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + vertex -158.69278799932127 -65.9952996189077 -12.000000000000046 + endloop +endfacet +facet normal -0.06526309611002476 -0.11303899832181324 0.9914448613738107 + outer loop + vertex -159.42483880689016 -63.263248811338826 -10.00000000000005 + vertex -157.9516070444238 -64.71153654742285 -10.068148347421912 + vertex -157.6927879993213 -64.26324881133883 -10.00000000000005 + endloop +endfacet +facet normal -0.06526309611002476 -0.11303899832181324 0.9914448613738107 + outer loop + vertex -157.9516070444238 -64.71153654742285 -10.068148347421912 + vertex -159.42483880689016 -63.263248811338826 -10.00000000000005 + vertex -159.68365785199268 -63.71153654742285 -10.068148347421912 + endloop +endfacet +facet normal -0.46193976625564404 -0.8001031451912636 -0.3826834323650928 + outer loop + vertex -158.55881340310575 -65.76324881133881 -15.000000000000057 + vertex -160.39076463317923 -64.93628141881445 -14.517638090205098 + vertex -160.2908642106746 -64.76324881133883 -15.000000000000057 + endloop +endfacet +facet normal -0.46193976625564404 -0.8001031451912636 -0.3826834323650928 + outer loop + vertex -160.39076463317923 -64.93628141881445 -14.517638090205098 + vertex -158.55881340310575 -65.76324881133881 -15.000000000000057 + vertex -158.65871382561036 -65.93628141881446 -14.517638090205098 + endloop +endfacet +facet normal -0.4999999999999948 -0.8660254037844417 1.3926223557130775e-29 + outer loop + vertex -158.69278799932127 -65.9952996189077 -14.000000000000059 + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + vertex -160.42483880689014 -64.99529961890771 -14.000000000000059 + endloop +endfacet +facet normal -0.4999999999999948 -0.8660254037844417 1.3926223557130775e-29 + outer loop + vertex -160.42483880689014 -64.99529961890771 -12.000000000000046 + vertex -158.69278799932127 -65.9952996189077 -14.000000000000059 + vertex -158.69278799932127 -65.9952996189077 -12.000000000000046 + endloop +endfacet +facet normal -0.46193976625564476 -0.8001031451912652 0.3826834323650892 + outer loop + vertex -160.39076463317923 -64.93628141881445 -11.482361909795012 + vertex -158.55881340310575 -65.76324881133881 -11.000000000000048 + vertex -160.2908642106746 -64.76324881133883 -11.000000000000048 + endloop +endfacet +facet normal -0.46193976625564476 -0.8001031451912652 0.3826834323650892 + outer loop + vertex -158.55881340310575 -65.76324881133881 -11.000000000000048 + vertex -160.39076463317923 -64.93628141881445 -11.482361909795012 + vertex -158.65871382561036 -65.93628141881446 -11.482361909795012 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex -147.02483880689013 -41.78581879748475 -49.600000000000044 + vertex -157.6927879993213 -64.26324881133883 -49.600000000000044 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex -157.6927879993213 -64.26324881133883 -49.600000000000044 + vertex -147.02483880689013 -41.78581879748475 -49.600000000000044 + vertex -159.42483880689016 -63.263248811338826 -49.600000000000044 + endloop +endfacet +facet normal 0.30438071450435866 0.5272028623656677 -0.7933533402912368 + outer loop + vertex -144.79278799932126 -41.91979339370032 -55.33205080756894 + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + vertex -144.5856812181347 -41.56107392609316 -55.01421356237316 + endloop +endfacet +facet normal 0.30438071450435866 0.5272028623656677 -0.7933533402912368 + outer loop + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + vertex -144.79278799932126 -41.91979339370032 -55.33205080756894 + vertex -146.52483880689013 -40.91979339370032 -55.33205080756894 + endloop +endfacet +facet normal -0.49572243068689736 -0.8586164364012647 -0.1305261922200579 + outer loop + vertex -158.65871382561033 -65.93628141881445 -54.117638090205105 + vertex -160.42483880689014 -64.99529961890774 -53.60000000000006 + vertex -160.3907646331792 -64.93628141881446 -54.117638090205105 + endloop +endfacet +facet normal -0.49572243068689736 -0.8586164364012647 -0.1305261922200579 + outer loop + vertex -160.42483880689014 -64.99529961890774 -53.60000000000006 + vertex -158.65871382561033 -65.93628141881445 -54.117638090205105 + vertex -158.69278799932127 -65.9952996189077 -53.60000000000006 + endloop +endfacet +facet normal 0.06526309611002559 0.11303899832181546 -0.9914448613738105 + outer loop + vertex -145.29278799932126 -42.78581879748475 -55.600000000000065 + vertex -146.76601976178762 -41.337531061400725 -55.531851652578204 + vertex -145.03396895421875 -42.33753106140071 -55.531851652578204 + endloop +endfacet +facet normal 0.06526309611002559 0.11303899832181546 -0.9914448613738105 + outer loop + vertex -146.76601976178762 -41.337531061400725 -55.531851652578204 + vertex -145.29278799932126 -42.78581879748475 -55.600000000000065 + vertex -147.02483880689013 -41.78581879748475 -55.600000000000065 + endloop +endfacet +facet normal 0.4999999999999989 0.8660254037844393 -1.5259013723954584e-31 + outer loop + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + vertex -146.02483880689013 -40.05376798991588 -53.60000000000006 + vertex -146.02483880689013 -40.05376798991588 -51.60000000000005 + endloop +endfacet +facet normal 0.4999999999999989 0.8660254037844393 -1.5259013723954584e-31 + outer loop + vertex -146.02483880689013 -40.05376798991588 -53.60000000000006 + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + vertex -144.29278799932126 -41.05376798991587 -53.60000000000006 + endloop +endfacet +facet normal 0.3966766701456189 0.6870641468694462 0.6087614290087244 + outer loop + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + vertex -144.42676259553681 -41.285818797484765 -50.600000000000044 + vertex -146.15881340310568 -40.28581879748475 -50.600000000000044 + endloop +endfacet +facet normal 0.3966766701456189 0.6870641468694462 0.6087614290087244 + outer loop + vertex -144.42676259553681 -41.285818797484765 -50.600000000000044 + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + vertex -144.5856812181347 -41.56107392609316 -50.18578643762695 + endloop +endfacet +facet normal -0.39667667014561114 -0.6870641468694373 -0.6087614290087392 + outer loop + vertex -158.39989478050782 -65.4879936827304 -55.01421356237316 + vertex -160.29086421067458 -64.76324881133884 -54.60000000000006 + vertex -160.1319455880767 -64.48799368273042 -55.01421356237316 + endloop +endfacet +facet normal -0.39667667014561114 -0.6870641468694373 -0.6087614290087392 + outer loop + vertex -160.29086421067458 -64.76324881133884 -54.60000000000006 + vertex -158.39989478050782 -65.4879936827304 -55.01421356237316 + vertex -158.55881340310572 -65.76324881133884 -54.60000000000006 + endloop +endfacet +facet normal 0.3043807145043551 0.5272028623656614 0.7933533402912423 + outer loop + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + vertex -144.79278799932126 -41.91979339370032 -49.867949192431176 + vertex -144.5856812181347 -41.56107392609316 -50.18578643762695 + endloop +endfacet +facet normal 0.3043807145043551 0.5272028623656614 0.7933533402912423 + outer loop + vertex -144.79278799932126 -41.91979339370032 -49.867949192431176 + vertex -146.31773202570358 -40.561073926093165 -50.18578643762695 + vertex -146.52483880689013 -40.91979339370032 -49.867949192431176 + endloop +endfacet +facet normal 0.1913417161825473 0.33141357403559696 -0.9238795325112844 + outer loop + vertex -145.03396895421875 -42.33753106140071 -55.531851652578204 + vertex -146.52483880689013 -40.91979339370032 -55.33205080756894 + vertex -144.79278799932126 -41.91979339370032 -55.33205080756894 + endloop +endfacet +facet normal 0.1913417161825473 0.33141357403559696 -0.9238795325112844 + outer loop + vertex -146.52483880689013 -40.91979339370032 -55.33205080756894 + vertex -145.03396895421875 -42.33753106140071 -55.531851652578204 + vertex -146.76601976178762 -41.337531061400725 -55.531851652578204 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -157.6927879993213 -64.26324881133883 -55.600000000000065 + vertex -147.02483880689013 -41.78581879748475 -55.600000000000065 + vertex -145.29278799932126 -42.78581879748475 -55.600000000000065 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -147.02483880689013 -41.78581879748475 -55.600000000000065 + vertex -157.6927879993213 -64.26324881133883 -55.600000000000065 + vertex -159.42483880689016 -63.263248811338826 -55.600000000000065 + endloop +endfacet +facet normal 0.4619397662556504 0.8001031451912681 0.38268343236507585 + outer loop + vertex -146.15881340310568 -40.28581879748475 -50.600000000000044 + vertex -144.32686217303217 -41.11278619000915 -51.082361909795004 + vertex -146.05891298060106 -40.112786190009146 -51.082361909795004 + endloop +endfacet +facet normal 0.4619397662556504 0.8001031451912681 0.38268343236507585 + outer loop + vertex -144.32686217303217 -41.11278619000915 -51.082361909795004 + vertex -146.15881340310568 -40.28581879748475 -50.600000000000044 + vertex -144.42676259553681 -41.285818797484765 -50.600000000000044 + endloop +endfacet +facet normal 0.49572243068690514 0.8586164364012606 0.1305261922200554 + outer loop + vertex -146.05891298060106 -40.112786190009146 -51.082361909795004 + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + vertex -146.02483880689013 -40.05376798991588 -51.60000000000005 + endloop +endfacet +facet normal 0.49572243068690514 0.8586164364012606 0.1305261922200554 + outer loop + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + vertex -146.05891298060106 -40.112786190009146 -51.082361909795004 + vertex -144.32686217303217 -41.11278619000915 -51.082361909795004 + endloop +endfacet +facet normal 0.39667667014562075 0.6870641468694496 -0.6087614290087193 + outer loop + vertex -144.42676259553681 -41.285818797484765 -54.60000000000006 + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + vertex -146.15881340310568 -40.28581879748475 -54.60000000000006 + endloop +endfacet +facet normal 0.39667667014562075 0.6870641468694496 -0.6087614290087193 + outer loop + vertex -146.31773202570358 -40.561073926093165 -55.01421356237316 + vertex -144.42676259553681 -41.285818797484765 -54.60000000000006 + vertex -144.5856812181347 -41.56107392609316 -55.01421356237316 + endloop +endfacet +facet normal 0.06526309611002554 0.11303899832181535 0.9914448613738105 + outer loop + vertex -146.76601976178762 -41.337531061400725 -49.668148347421905 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -145.03396895421875 -42.33753106140071 -49.668148347421905 + endloop +endfacet +facet normal 0.06526309611002554 0.11303899832181535 0.9914448613738105 + outer loop + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -146.76601976178762 -41.337531061400725 -49.668148347421905 + vertex -147.02483880689013 -41.78581879748475 -49.600000000000044 + endloop +endfacet +facet normal 0.495722430686905 0.8586164364012607 -0.13052619222005396 + outer loop + vertex -144.29278799932126 -41.05376798991587 -53.60000000000006 + vertex -146.05891298060106 -40.11278619000914 -54.117638090205105 + vertex -146.02483880689013 -40.05376798991588 -53.60000000000006 + endloop +endfacet +facet normal 0.495722430686905 0.8586164364012607 -0.13052619222005396 + outer loop + vertex -146.05891298060106 -40.11278619000914 -54.117638090205105 + vertex -144.29278799932126 -41.05376798991587 -53.60000000000006 + vertex -144.3268621730322 -41.11278619000914 -54.117638090205105 + endloop +endfacet +facet normal -0.191341716182544 -0.3314135740355927 0.9238795325112867 + outer loop + vertex -159.68365785199265 -63.71153654742286 -49.668148347421905 + vertex -158.19278799932127 -65.1292742151233 -49.867949192431176 + vertex -157.9516070444238 -64.71153654742285 -49.668148347421905 + endloop +endfacet +facet normal -0.191341716182544 -0.3314135740355927 0.9238795325112867 + outer loop + vertex -158.19278799932127 -65.1292742151233 -49.867949192431176 + vertex -159.68365785199265 -63.71153654742286 -49.668148347421905 + vertex -159.92483880689014 -64.12927421512329 -49.867949192431176 + endloop +endfacet +facet normal 0.4619397662556495 0.8001031451912662 -0.3826834323650809 + outer loop + vertex -144.3268621730322 -41.11278619000914 -54.117638090205105 + vertex -146.15881340310568 -40.28581879748475 -54.60000000000006 + vertex -146.05891298060106 -40.11278619000914 -54.117638090205105 + endloop +endfacet +facet normal 0.4619397662556495 0.8001031451912662 -0.3826834323650809 + outer loop + vertex -146.15881340310568 -40.28581879748475 -54.60000000000006 + vertex -144.3268621730322 -41.11278619000914 -54.117638090205105 + vertex -144.42676259553681 -41.285818797484765 -54.60000000000006 + endloop +endfacet +facet normal -0.3043807145043653 -0.5272028623656765 -0.7933533402912286 + outer loop + vertex -158.39989478050782 -65.4879936827304 -55.01421356237316 + vertex -159.92483880689014 -64.12927421512327 -55.33205080756894 + vertex -158.19278799932127 -65.12927421512327 -55.33205080756894 + endloop +endfacet +facet normal -0.3043807145043653 -0.5272028623656765 -0.7933533402912286 + outer loop + vertex -159.92483880689014 -64.12927421512327 -55.33205080756894 + vertex -158.39989478050782 -65.4879936827304 -55.01421356237316 + vertex -160.1319455880767 -64.48799368273042 -55.01421356237316 + endloop +endfacet +facet normal 0.19134171618255189 0.33141357403560473 0.9238795325112809 + outer loop + vertex -146.52483880689013 -40.91979339370032 -49.867949192431176 + vertex -145.03396895421875 -42.33753106140071 -49.668148347421905 + vertex -144.79278799932126 -41.91979339370032 -49.867949192431176 + endloop +endfacet +facet normal 0.19134171618255189 0.33141357403560473 0.9238795325112809 + outer loop + vertex -145.03396895421875 -42.33753106140071 -49.668148347421905 + vertex -146.52483880689013 -40.91979339370032 -49.867949192431176 + vertex -146.76601976178762 -41.337531061400725 -49.668148347421905 + endloop +endfacet +facet normal -0.1913417161825476 -0.33141357403559557 -0.9238795325112849 + outer loop + vertex -158.19278799932127 -65.12927421512327 -55.33205080756894 + vertex -159.68365785199265 -63.71153654742286 -55.531851652578204 + vertex -157.9516070444238 -64.71153654742285 -55.531851652578204 + endloop +endfacet +facet normal -0.1913417161825476 -0.33141357403559557 -0.9238795325112849 + outer loop + vertex -159.68365785199265 -63.71153654742286 -55.531851652578204 + vertex -158.19278799932127 -65.12927421512327 -55.33205080756894 + vertex -159.92483880689014 -64.12927421512327 -55.33205080756894 + endloop +endfacet +facet normal -1.0 1.5543122344752188e-15 -2.823841496478738e-16 + outer loop + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -99.40000000000006 -104.43433599533692 -25.800000000000065 + vertex -99.40000000000005 -100.43433599533698 -25.800000000000065 + endloop +endfacet +facet normal -1.0 1.5543122344752188e-15 -2.823841496478738e-16 + outer loop + vertex -99.40000000000006 -104.43433599533692 -25.800000000000065 + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -99.40000000000006 -104.43433599533697 -39.80000000000006 + endloop +endfacet +facet normal -0.9914448613738109 1.6098233857064766e-15 -0.1305261922200486 + outer loop + vertex -99.40000000000005 -100.43433599533698 -25.800000000000065 + vertex -99.50222252113285 -104.43433599533694 -25.0235428646925 + vertex -99.50222252113285 -100.434335995337 -25.0235428646925 + endloop +endfacet +facet normal -0.9914448613738109 1.6098233857064766e-15 -0.1305261922200486 + outer loop + vertex -99.50222252113285 -104.43433599533694 -25.0235428646925 + vertex -99.40000000000005 -100.43433599533698 -25.800000000000065 + vertex -99.40000000000006 -104.43433599533692 -25.800000000000065 + endloop +endfacet +facet normal -0.9238795325112841 1.3877787807814457e-15 -0.38268343236509644 + outer loop + vertex -99.50222252113285 -100.434335995337 -25.0235428646925 + vertex -99.80192378864675 -104.43433599533692 -24.300000000000068 + vertex -99.80192378864673 -100.43433599533698 -24.300000000000068 + endloop +endfacet +facet normal -0.9238795325112841 1.3877787807814457e-15 -0.38268343236509644 + outer loop + vertex -99.80192378864675 -104.43433599533692 -24.300000000000068 + vertex -99.50222252113285 -100.434335995337 -25.0235428646925 + vertex -99.50222252113285 -104.43433599533694 -25.0235428646925 + endloop +endfacet +facet normal -0.7933533402912388 1.1657341758564142e-15 -0.6087614290087159 + outer loop + vertex -99.80192378864673 -100.43433599533698 -24.300000000000068 + vertex -100.27867965644042 -104.43433599533694 -23.678679656440423 + vertex -100.27867965644042 -100.434335995337 -23.678679656440423 + endloop +endfacet +facet normal -0.7933533402912388 1.1657341758564142e-15 -0.6087614290087159 + outer loop + vertex -100.27867965644042 -104.43433599533694 -23.678679656440423 + vertex -99.80192378864673 -100.43433599533698 -24.300000000000068 + vertex -99.80192378864675 -104.43433599533692 -24.300000000000068 + endloop +endfacet +facet normal -0.6087614290087219 8.881784197001251e-16 -0.7933533402912344 + outer loop + vertex -100.27867965644042 -104.43433599533694 -23.678679656440423 + vertex -100.90000000000005 -100.43433599533701 -23.20192378864675 + vertex -100.27867965644042 -100.434335995337 -23.678679656440423 + endloop +endfacet +facet normal -0.6087614290087219 8.881784197001251e-16 -0.7933533402912344 + outer loop + vertex -100.90000000000005 -100.43433599533701 -23.20192378864675 + vertex -100.27867965644042 -104.43433599533694 -23.678679656440423 + vertex -100.90000000000006 -104.43433599533697 -23.20192378864675 + endloop +endfacet +facet normal -0.38268343236508884 5.82867087928207e-16 -0.9238795325112871 + outer loop + vertex -100.90000000000006 -104.43433599533697 -23.20192378864675 + vertex -101.62354286469248 -100.43433599533701 -22.90222252113286 + vertex -100.90000000000005 -100.43433599533701 -23.20192378864675 + endloop +endfacet +facet normal -0.38268343236508884 5.82867087928207e-16 -0.9238795325112871 + outer loop + vertex -101.62354286469248 -100.43433599533701 -22.90222252113286 + vertex -100.90000000000006 -104.43433599533697 -23.20192378864675 + vertex -101.62354286469251 -104.43433599533697 -22.90222252113286 + endloop +endfacet +facet normal -0.13052619222005019 1.318389841742372e-16 -0.9914448613738106 + outer loop + vertex -101.62354286469251 -104.43433599533697 -22.90222252113286 + vertex -102.40000000000006 -100.434335995337 -22.800000000000065 + vertex -101.62354286469248 -100.43433599533701 -22.90222252113286 + endloop +endfacet +facet normal -0.13052619222005019 1.318389841742372e-16 -0.9914448613738106 + outer loop + vertex -102.40000000000006 -100.434335995337 -22.800000000000065 + vertex -101.62354286469251 -104.43433599533697 -22.90222252113286 + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + endloop +endfacet +facet normal 0.13052619222005166 -2.6367796834847483e-16 -0.9914448613738105 + outer loop + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -103.17645713530761 -100.434335995337 -22.90222252113286 + vertex -102.40000000000006 -100.434335995337 -22.800000000000065 + endloop +endfacet +facet normal 0.13052619222005166 -2.6367796834847483e-16 -0.9914448613738105 + outer loop + vertex -103.17645713530761 -100.434335995337 -22.90222252113286 + vertex -102.40000000000008 -104.43433599533697 -22.800000000000065 + vertex -103.17645713530764 -104.43433599533694 -22.90222252113286 + endloop +endfacet +facet normal 0.38268343236508595 -6.938893903907229e-16 -0.9238795325112884 + outer loop + vertex -103.17645713530764 -104.43433599533694 -22.90222252113286 + vertex -103.90000000000006 -100.43433599533698 -23.20192378864675 + vertex -103.17645713530761 -100.434335995337 -22.90222252113286 + endloop +endfacet +facet normal 0.38268343236508595 -6.938893903907229e-16 -0.9238795325112884 + outer loop + vertex -103.90000000000006 -100.43433599533698 -23.20192378864675 + vertex -103.17645713530764 -104.43433599533694 -22.90222252113286 + vertex -103.90000000000008 -104.43433599533694 -23.20192378864675 + endloop +endfacet +facet normal 0.6087614290087233 -9.99200722162641e-16 -0.7933533402912333 + outer loop + vertex -103.90000000000008 -104.43433599533694 -23.20192378864675 + vertex -104.52132034355971 -100.43433599533698 -23.678679656440423 + vertex -103.90000000000006 -100.43433599533698 -23.20192378864675 + endloop +endfacet +facet normal 0.6087614290087233 -9.99200722162641e-16 -0.7933533402912333 + outer loop + vertex -104.52132034355971 -100.43433599533698 -23.678679656440423 + vertex -103.90000000000008 -104.43433599533694 -23.20192378864675 + vertex -104.52132034355974 -104.43433599533697 -23.678679656440423 + endloop +endfacet +facet normal 0.7933533402912377 -1.2767564783189298e-15 -0.6087614290087173 + outer loop + vertex -104.52132034355971 -100.43433599533698 -23.678679656440423 + vertex -104.99807621135338 -104.43433599533697 -24.30000000000006 + vertex -104.99807621135338 -100.43433599533701 -24.30000000000006 + endloop +endfacet +facet normal 0.7933533402912377 -1.2767564783189298e-15 -0.6087614290087173 + outer loop + vertex -104.99807621135338 -104.43433599533697 -24.30000000000006 + vertex -104.52132034355971 -100.43433599533698 -23.678679656440423 + vertex -104.52132034355974 -104.43433599533697 -23.678679656440423 + endloop +endfacet +facet normal 0.9238795325112851 -1.4432899320127031e-15 -0.38268343236509383 + outer loop + vertex -104.99807621135338 -100.43433599533701 -24.30000000000006 + vertex -105.29777747886729 -104.43433599533694 -25.0235428646925 + vertex -105.29777747886726 -100.434335995337 -25.0235428646925 + endloop +endfacet +facet normal 0.9238795325112851 -1.4432899320127031e-15 -0.38268343236509383 + outer loop + vertex -105.29777747886729 -104.43433599533694 -25.0235428646925 + vertex -104.99807621135338 -100.43433599533701 -24.30000000000006 + vertex -104.99807621135338 -104.43433599533697 -24.30000000000006 + endloop +endfacet +facet normal 0.99144486137381 -1.609823385706477e-15 -0.13052619222005474 + outer loop + vertex -105.29777747886726 -100.434335995337 -25.0235428646925 + vertex -105.40000000000008 -104.43433599533694 -25.800000000000065 + vertex -105.40000000000008 -100.434335995337 -25.800000000000065 + endloop +endfacet +facet normal 0.99144486137381 -1.609823385706477e-15 -0.13052619222005474 + outer loop + vertex -105.40000000000008 -104.43433599533694 -25.800000000000065 + vertex -105.29777747886726 -100.434335995337 -25.0235428646925 + vertex -105.29777747886729 -104.43433599533694 -25.0235428646925 + endloop +endfacet +facet normal 1.0 -1.5543122344752188e-15 3.4888037310101773e-16 + outer loop + vertex -105.40000000000008 -104.43433599533694 -25.800000000000065 + vertex -105.40000000000005 -100.434335995337 -39.80000000000007 + vertex -105.40000000000008 -100.434335995337 -25.800000000000065 + endloop +endfacet +facet normal 1.0 -1.5543122344752188e-15 3.4888037310101773e-16 + outer loop + vertex -105.40000000000005 -100.434335995337 -39.80000000000007 + vertex -105.40000000000008 -104.43433599533694 -25.800000000000065 + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + endloop +endfacet +facet normal 0.9914448613738108 -1.5543122344752188e-15 0.13052619222004905 + outer loop + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + vertex -105.29777747886726 -100.434335995337 -40.57645713530763 + vertex -105.40000000000005 -100.434335995337 -39.80000000000007 + endloop +endfacet +facet normal 0.9914448613738108 -1.5543122344752188e-15 0.13052619222004905 + outer loop + vertex -105.29777747886726 -100.434335995337 -40.57645713530763 + vertex -105.40000000000008 -104.43433599533694 -39.80000000000006 + vertex -105.29777747886729 -104.43433599533694 -40.57645713530763 + endloop +endfacet +facet normal 0.9238795325112851 -1.4432899320127031e-15 0.38268343236509383 + outer loop + vertex -105.29777747886729 -104.43433599533694 -40.57645713530763 + vertex -104.99807621135338 -100.43433599533701 -41.30000000000007 + vertex -105.29777747886726 -100.434335995337 -40.57645713530763 + endloop +endfacet +facet normal 0.9238795325112851 -1.4432899320127031e-15 0.38268343236509383 + outer loop + vertex -104.99807621135338 -100.43433599533701 -41.30000000000007 + vertex -105.29777747886729 -104.43433599533694 -40.57645713530763 + vertex -104.99807621135338 -104.43433599533697 -41.30000000000007 + endloop +endfacet +facet normal 0.7933533402912375 -1.221245327087672e-15 0.6087614290087175 + outer loop + vertex -104.99807621135338 -104.43433599533697 -41.30000000000007 + vertex -104.52132034355971 -100.43433599533698 -41.921320343559714 + vertex -104.99807621135338 -100.43433599533701 -41.30000000000007 + endloop +endfacet +facet normal 0.7933533402912375 -1.221245327087672e-15 0.6087614290087175 + outer loop + vertex -104.52132034355971 -100.43433599533698 -41.921320343559714 + vertex -104.99807621135338 -104.43433599533697 -41.30000000000007 + vertex -104.52132034355974 -104.43433599533697 -41.921320343559714 + endloop +endfacet +facet normal 0.6087614290087211 -8.881784197001251e-16 0.7933533402912349 + outer loop + vertex -104.52132034355971 -100.43433599533698 -41.921320343559714 + vertex -103.90000000000008 -104.43433599533694 -42.39807621135338 + vertex -103.90000000000006 -100.43433599533698 -42.398076211353384 + endloop +endfacet +facet normal 0.6087614290087211 -8.881784197001251e-16 0.7933533402912349 + outer loop + vertex -103.90000000000008 -104.43433599533694 -42.39807621135338 + vertex -104.52132034355971 -100.43433599533698 -41.921320343559714 + vertex -104.52132034355974 -104.43433599533697 -41.921320343559714 + endloop +endfacet +facet normal 0.382683432365092 -4.996003610813203e-16 0.9238795325112859 + outer loop + vertex -103.90000000000006 -100.43433599533698 -42.398076211353384 + vertex -103.17645713530764 -104.43433599533692 -42.697777478867266 + vertex -103.17645713530764 -100.43433599533697 -42.69777747886727 + endloop +endfacet +facet normal 0.382683432365092 -4.996003610813203e-16 0.9238795325112859 + outer loop + vertex -103.17645713530764 -104.43433599533692 -42.697777478867266 + vertex -103.90000000000006 -100.43433599533698 -42.398076211353384 + vertex -103.90000000000008 -104.43433599533694 -42.39807621135338 + endloop +endfacet +facet normal 0.13052619222004938 -1.4571677198205165e-16 0.9914448613738108 + outer loop + vertex -103.17645713530764 -100.43433599533697 -42.69777747886727 + vertex -102.40000000000006 -104.43433599533694 -42.80000000000007 + vertex -102.40000000000003 -100.43433599533698 -42.80000000000007 + endloop +endfacet +facet normal 0.13052619222004938 -1.4571677198205165e-16 0.9914448613738108 + outer loop + vertex -102.40000000000006 -104.43433599533694 -42.80000000000007 + vertex -103.17645713530764 -100.43433599533697 -42.69777747886727 + vertex -103.17645713530764 -104.43433599533692 -42.697777478867266 + endloop +endfacet +facet normal -0.13052619222005243 2.6367796834847483e-16 0.9914448613738103 + outer loop + vertex -102.40000000000003 -100.43433599533698 -42.80000000000007 + vertex -101.62354286469251 -104.43433599533694 -42.697777478867266 + vertex -101.62354286469248 -100.43433599533698 -42.69777747886727 + endloop +endfacet +facet normal -0.13052619222005243 2.6367796834847483e-16 0.9914448613738103 + outer loop + vertex -101.62354286469251 -104.43433599533694 -42.697777478867266 + vertex -102.40000000000003 -100.43433599533698 -42.80000000000007 + vertex -102.40000000000006 -104.43433599533694 -42.80000000000007 + endloop +endfacet +facet normal -0.38268343236508595 6.938893903907229e-16 0.9238795325112884 + outer loop + vertex -101.62354286469248 -100.43433599533698 -42.69777747886727 + vertex -100.90000000000006 -104.43433599533697 -42.398076211353384 + vertex -100.90000000000003 -100.434335995337 -42.398076211353384 + endloop +endfacet +facet normal -0.38268343236508595 6.938893903907229e-16 0.9238795325112884 + outer loop + vertex -100.90000000000006 -104.43433599533697 -42.398076211353384 + vertex -101.62354286469248 -100.43433599533698 -42.69777747886727 + vertex -101.62354286469251 -104.43433599533694 -42.697777478867266 + endloop +endfacet +facet normal -0.6087614290087179 9.99200722162641e-16 0.7933533402912374 + outer loop + vertex -100.90000000000003 -100.434335995337 -42.398076211353384 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -100.27867965644039 -100.43433599533701 -41.921320343559714 + endloop +endfacet +facet normal -0.6087614290087179 9.99200722162641e-16 0.7933533402912374 + outer loop + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -100.90000000000003 -100.434335995337 -42.398076211353384 + vertex -100.90000000000006 -104.43433599533697 -42.398076211353384 + endloop +endfacet +facet normal -0.7933533402912392 1.2212453270876722e-15 0.6087614290087157 + outer loop + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -99.80192378864673 -100.43433599533701 -41.30000000000007 + vertex -100.27867965644039 -100.43433599533701 -41.921320343559714 + endloop +endfacet +facet normal -0.7933533402912392 1.2212453270876722e-15 0.6087614290087157 + outer loop + vertex -99.80192378864673 -100.43433599533701 -41.30000000000007 + vertex -100.27867965644042 -104.43433599533697 -41.921320343559714 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + endloop +endfacet +facet normal -0.9238795325112857 1.4432899320127035e-15 0.38268343236509245 + outer loop + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -99.50222252113285 -100.43433599533701 -40.57645713530763 + vertex -99.80192378864673 -100.43433599533701 -41.30000000000007 + endloop +endfacet +facet normal -0.9238795325112857 1.4432899320127035e-15 0.38268343236509245 + outer loop + vertex -99.50222252113285 -100.43433599533701 -40.57645713530763 + vertex -99.80192378864673 -104.43433599533697 -41.30000000000007 + vertex -99.50222252113285 -104.43433599533697 -40.57645713530763 + endloop +endfacet +facet normal -0.9914448613738109 1.6098233857064766e-15 0.1305261922200486 + outer loop + vertex -99.50222252113285 -104.43433599533697 -40.57645713530763 + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -99.50222252113285 -100.43433599533701 -40.57645713530763 + endloop +endfacet +facet normal -0.9914448613738109 1.6098233857064766e-15 0.1305261922200486 + outer loop + vertex -99.40000000000005 -100.43433599533701 -39.80000000000007 + vertex -99.50222252113285 -104.43433599533697 -40.57645713530763 + vertex -99.40000000000006 -104.43433599533697 -39.80000000000006 + endloop +endfacet +facet normal -0.49572243068690525 -0.8586164364012615 -0.13052619222004866 + outer loop + vertex -136.67868638418352 -35.86575713850505 -25.800000000000054 + vertex -140.19389925988764 -33.95428443864497 -25.0235428646925 + vertex -140.14278799932123 -33.865757138505074 -25.800000000000065 + endloop +endfacet +facet normal -0.49572243068690525 -0.8586164364012615 -0.13052619222004866 + outer loop + vertex -140.19389925988764 -33.95428443864497 -25.0235428646925 + vertex -136.67868638418352 -35.86575713850505 -25.800000000000054 + vertex -136.7297976447499 -35.95428443864494 -25.02354286469249 + endloop +endfacet +facet normal -0.4999999999999998 -0.8660254037844388 4.1537659655416246e-16 + outer loop + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + vertex -140.14278799932123 -33.865757138505074 -25.800000000000065 + vertex -140.14278799932126 -33.86575713850507 -39.80000000000006 + endloop +endfacet +facet normal -0.4999999999999998 -0.8660254037844388 4.1537659655416246e-16 + outer loop + vertex -140.14278799932123 -33.865757138505074 -25.800000000000065 + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + vertex -136.67868638418352 -35.86575713850505 -25.800000000000054 + endloop +endfacet +facet normal -0.49572243068690514 -0.8586164364012614 0.13052619222004863 + outer loop + vertex -140.19389925988764 -33.954284438644954 -40.57645713530763 + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + vertex -140.14278799932126 -33.86575713850507 -39.80000000000006 + endloop +endfacet +facet normal -0.49572243068690514 -0.8586164364012614 0.13052619222004863 + outer loop + vertex -136.67868638418355 -35.86575713850504 -39.800000000000054 + vertex -140.19389925988764 -33.954284438644954 -40.57645713530763 + vertex -136.72979764474994 -35.95428443864494 -40.57645713530762 + endloop +endfacet +facet normal -0.4619397662556419 -0.8001031451912638 0.3826834323650951 + outer loop + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -136.72979764474994 -35.95428443864494 -40.57645713530762 + vertex -140.19389925988764 -33.954284438644954 -40.57645713530763 + endloop +endfacet +facet normal -0.4619397662556419 -0.8001031451912638 0.3826834323650951 + outer loop + vertex -136.72979764474994 -35.95428443864494 -40.57645713530762 + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -136.87964827850686 -36.21383334985837 -41.30000000000006 + endloop +endfacet +facet normal -0.39667667014561914 -0.6870641468694536 0.6087614290087157 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -136.87964827850686 -36.21383334985837 -41.30000000000006 + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + endloop +endfacet +facet normal -0.39667667014561914 -0.6870641468694536 0.6087614290087157 + outer loop + vertex -136.87964827850686 -36.21383334985837 -41.30000000000006 + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -137.11802621240372 -36.62671604277097 -41.9213203435597 + endloop +endfacet +facet normal -0.30438071450435844 -0.5272028623656669 0.7933533402912374 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -137.42868638418355 -37.16479524418171 -42.39807621135338 + vertex -137.11802621240372 -36.62671604277097 -41.9213203435597 + endloop +endfacet +facet normal -0.30438071450435844 -0.5272028623656669 0.7933533402912374 + outer loop + vertex -137.42868638418355 -37.16479524418171 -42.39807621135338 + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -140.89278799932126 -35.16479524418173 -42.398076211353384 + endloop +endfacet +facet normal -0.191341716182541 -0.3314135740355861 0.9238795325112897 + outer loop + vertex -140.89278799932126 -35.16479524418173 -42.398076211353384 + vertex -137.79045781652974 -37.79140174573234 -42.69777747886726 + vertex -137.42868638418355 -37.16479524418171 -42.39807621135338 + endloop +endfacet +facet normal -0.191341716182541 -0.3314135740355861 0.9238795325112897 + outer loop + vertex -137.79045781652974 -37.79140174573234 -42.69777747886726 + vertex -140.89278799932126 -35.16479524418173 -42.398076211353384 + vertex -141.25455943166745 -35.79140174573236 -42.697777478867266 + endloop +endfacet +facet normal -0.06526309611002579 -0.11303899832181638 0.9914448613738103 + outer loop + vertex -141.25455943166745 -35.79140174573236 -42.697777478867266 + vertex -138.17868638418352 -38.463833349858376 -42.800000000000054 + vertex -137.79045781652974 -37.79140174573234 -42.69777747886726 + endloop +endfacet +facet normal -0.06526309611002579 -0.11303899832181638 0.9914448613738103 + outer loop + vertex -138.17868638418352 -38.463833349858376 -42.800000000000054 + vertex -141.25455943166745 -35.79140174573236 -42.697777478867266 + vertex -141.64278799932123 -36.4638333498584 -42.80000000000006 + endloop +endfacet +facet normal 0.06526309611002504 0.11303899832181324 0.9914448613738107 + outer loop + vertex -141.64278799932123 -36.4638333498584 -42.80000000000006 + vertex -138.56691495183733 -39.13626495398441 -42.69777747886726 + vertex -138.17868638418352 -38.463833349858376 -42.800000000000054 + endloop +endfacet +facet normal 0.06526309611002504 0.11303899832181324 0.9914448613738107 + outer loop + vertex -138.56691495183733 -39.13626495398441 -42.69777747886726 + vertex -141.64278799932123 -36.4638333498584 -42.80000000000006 + vertex -142.031016566975 -37.13626495398446 -42.697777478867266 + endloop +endfacet +facet normal 0.19134171618254625 0.33141357403559346 0.923879532511286 + outer loop + vertex -142.031016566975 -37.13626495398446 -42.697777478867266 + vertex -138.92868638418352 -39.76287145553502 -42.39807621135337 + vertex -138.56691495183733 -39.13626495398441 -42.69777747886726 + endloop +endfacet +facet normal 0.19134171618254625 0.33141357403559346 0.923879532511286 + outer loop + vertex -138.92868638418352 -39.76287145553502 -42.39807621135337 + vertex -142.031016566975 -37.13626495398446 -42.697777478867266 + vertex -142.39278799932126 -37.76287145553507 -42.39807621135338 + endloop +endfacet +facet normal 0.3043807145043607 0.5272028623656694 0.793353340291235 + outer loop + vertex -142.39278799932126 -37.76287145553507 -42.39807621135338 + vertex -139.23934655596338 -40.30095065694574 -41.9213203435597 + vertex -138.92868638418352 -39.76287145553502 -42.39807621135337 + endloop +endfacet +facet normal 0.3043807145043607 0.5272028623656694 0.793353340291235 + outer loop + vertex -139.23934655596338 -40.30095065694574 -41.9213203435597 + vertex -142.39278799932126 -37.76287145553507 -42.39807621135338 + vertex -142.7034481711011 -38.30095065694579 -41.92132034355971 + endloop +endfacet +facet normal 0.3966766701456196 0.6870641468694534 0.6087614290087158 + outer loop + vertex -142.94182610499792 -38.7138333498584 -41.30000000000006 + vertex -139.23934655596338 -40.30095065694574 -41.9213203435597 + vertex -142.7034481711011 -38.30095065694579 -41.92132034355971 + endloop +endfacet +facet normal 0.3966766701456196 0.6870641468694534 0.6087614290087158 + outer loop + vertex -139.23934655596338 -40.30095065694574 -41.9213203435597 + vertex -142.94182610499792 -38.7138333498584 -41.30000000000006 + vertex -139.4777244898602 -40.71383334985835 -41.300000000000054 + endloop +endfacet +facet normal 0.4619397662556426 0.8001031451912641 0.38268343236509395 + outer loop + vertex -143.09167673875487 -38.973382261071826 -40.57645713530762 + vertex -139.4777244898602 -40.71383334985835 -41.300000000000054 + vertex -142.94182610499792 -38.7138333498584 -41.30000000000006 + endloop +endfacet +facet normal 0.4619397662556426 0.8001031451912641 0.38268343236509395 + outer loop + vertex -139.4777244898602 -40.71383334985835 -41.300000000000054 + vertex -143.09167673875487 -38.973382261071826 -40.57645713530762 + vertex -139.62757512361713 -40.97338226107177 -40.576457135307614 + endloop +endfacet +facet normal 0.4957224306869053 0.8586164364012614 0.1305261922200491 + outer loop + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -139.62757512361713 -40.97338226107177 -40.576457135307614 + vertex -143.09167673875487 -38.973382261071826 -40.57645713530762 + endloop +endfacet +facet normal 0.4957224306869053 0.8586164364012614 0.1305261922200491 + outer loop + vertex -139.62757512361713 -40.97338226107177 -40.576457135307614 + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -139.67868638418355 -41.06190956121165 -39.800000000000054 + endloop +endfacet +facet normal 0.4999999999999999 0.8660254037844388 -3.488803731010181e-16 + outer loop + vertex -139.67868638418355 -41.06190956121165 -25.800000000000047 + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -143.14278799932126 -39.06190956121171 -25.80000000000006 + endloop +endfacet +facet normal 0.4999999999999999 0.8660254037844388 -3.488803731010181e-16 + outer loop + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -139.67868638418355 -41.06190956121165 -25.800000000000047 + vertex -139.67868638418355 -41.06190956121165 -39.800000000000054 + endloop +endfacet +facet normal 0.4957224306869047 0.8586164364012607 -0.13052619222005568 + outer loop + vertex -139.62757512361713 -40.97338226107177 -25.02354286469249 + vertex -143.14278799932126 -39.06190956121171 -25.80000000000006 + vertex -143.09167673875484 -38.97338226107182 -25.0235428646925 + endloop +endfacet +facet normal 0.4957224306869047 0.8586164364012607 -0.13052619222005568 + outer loop + vertex -143.14278799932126 -39.06190956121171 -25.80000000000006 + vertex -139.62757512361713 -40.97338226107177 -25.02354286469249 + vertex -139.67868638418355 -41.06190956121165 -25.800000000000047 + endloop +endfacet +facet normal 0.4619397662556422 0.8001031451912644 -0.38268343236509395 + outer loop + vertex -139.4777244898602 -40.713833349858334 -24.30000000000005 + vertex -143.09167673875484 -38.97338226107182 -25.0235428646925 + vertex -142.94182610499792 -38.71383334985839 -24.30000000000006 + endloop +endfacet +facet normal 0.4619397662556422 0.8001031451912644 -0.38268343236509395 + outer loop + vertex -143.09167673875484 -38.97338226107182 -25.0235428646925 + vertex -139.4777244898602 -40.713833349858334 -24.30000000000005 + vertex -139.62757512361713 -40.97338226107177 -25.02354286469249 + endloop +endfacet +facet normal 0.3966766701456185 0.6870641468694525 -0.6087614290087174 + outer loop + vertex -139.23934655596335 -40.30095065694573 -23.678679656440412 + vertex -142.94182610499792 -38.71383334985839 -24.30000000000006 + vertex -142.70344817110106 -38.30095065694578 -23.678679656440423 + endloop +endfacet +facet normal 0.3966766701456185 0.6870641468694525 -0.6087614290087174 + outer loop + vertex -142.94182610499792 -38.71383334985839 -24.30000000000006 + vertex -139.23934655596335 -40.30095065694573 -23.678679656440412 + vertex -139.4777244898602 -40.713833349858334 -24.30000000000005 + endloop +endfacet +facet normal 0.3043807145043611 0.5272028623656717 -0.7933533402912333 + outer loop + vertex -139.23934655596335 -40.30095065694573 -23.678679656440412 + vertex -142.39278799932126 -37.76287145553506 -23.20192378864675 + vertex -138.92868638418352 -39.76287145553501 -23.201923788646738 + endloop +endfacet +facet normal 0.3043807145043611 0.5272028623656717 -0.7933533402912333 + outer loop + vertex -142.39278799932126 -37.76287145553506 -23.20192378864675 + vertex -139.23934655596335 -40.30095065694573 -23.678679656440412 + vertex -142.70344817110106 -38.30095065694578 -23.678679656440423 + endloop +endfacet +facet normal 0.19134171618254506 0.331413574035593 -0.9238795325112863 + outer loop + vertex -138.92868638418352 -39.76287145553501 -23.201923788646738 + vertex -142.03101656697504 -37.13626495398444 -22.902222521132856 + vertex -138.56691495183733 -39.13626495398439 -22.902222521132845 + endloop +endfacet +facet normal 0.19134171618254506 0.331413574035593 -0.9238795325112863 + outer loop + vertex -142.03101656697504 -37.13626495398444 -22.902222521132856 + vertex -138.92868638418352 -39.76287145553501 -23.201923788646738 + vertex -142.39278799932126 -37.76287145553506 -23.20192378864675 + endloop +endfacet +facet normal 0.06526309611002205 0.1130389983218099 -0.9914448613738113 + outer loop + vertex -138.56691495183733 -39.13626495398439 -22.902222521132845 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -138.17868638418352 -38.46383334985837 -22.800000000000054 + endloop +endfacet +facet normal 0.06526309611002205 0.1130389983218099 -0.9914448613738113 + outer loop + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -138.56691495183733 -39.13626495398439 -22.902222521132845 + vertex -142.03101656697504 -37.13626495398444 -22.902222521132856 + endloop +endfacet +facet normal -0.0652630961100219 -0.11303899832180783 -0.9914448613738115 + outer loop + vertex -138.17868638418352 -38.46383334985837 -22.800000000000054 + vertex -141.25455943166747 -35.79140174573234 -22.902222521132856 + vertex -137.79045781652974 -37.791401745732315 -22.902222521132845 + endloop +endfacet +facet normal -0.0652630961100219 -0.11303899832180783 -0.9914448613738115 + outer loop + vertex -141.25455943166747 -35.79140174573234 -22.902222521132856 + vertex -138.17868638418352 -38.46383334985837 -22.800000000000054 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + endloop +endfacet +facet normal -0.1913417161825478 -0.3314135740355961 -0.9238795325112847 + outer loop + vertex -137.79045781652974 -37.791401745732315 -22.902222521132845 + vertex -140.89278799932126 -35.164795244181725 -23.20192378864675 + vertex -137.42868638418352 -37.164795244181704 -23.201923788646738 + endloop +endfacet +facet normal -0.1913417161825478 -0.3314135740355961 -0.9238795325112847 + outer loop + vertex -140.89278799932126 -35.164795244181725 -23.20192378864675 + vertex -137.79045781652974 -37.791401745732315 -22.902222521132845 + vertex -141.25455943166747 -35.79140174573234 -22.902222521132856 + endloop +endfacet +facet normal -0.3043807145043611 -0.52720286236567 -0.7933533402912345 + outer loop + vertex -137.42868638418352 -37.164795244181704 -23.201923788646738 + vertex -140.5821278275414 -34.62671604277101 -23.678679656440423 + vertex -137.1180262124037 -36.62671604277098 -23.678679656440412 + endloop +endfacet +facet normal -0.3043807145043611 -0.52720286236567 -0.7933533402912345 + outer loop + vertex -140.5821278275414 -34.62671604277101 -23.678679656440423 + vertex -137.42868638418352 -37.164795244181704 -23.201923788646738 + vertex -140.89278799932126 -35.164795244181725 -23.20192378864675 + endloop +endfacet +facet normal -0.39667667014561947 -0.6870641468694532 -0.608761429008716 + outer loop + vertex -136.87964827850686 -36.213833349858376 -24.300000000000058 + vertex -140.5821278275414 -34.62671604277101 -23.678679656440423 + vertex -140.34374989364457 -34.2138333498584 -24.300000000000068 + endloop +endfacet +facet normal -0.39667667014561947 -0.6870641468694532 -0.608761429008716 + outer loop + vertex -140.5821278275414 -34.62671604277101 -23.678679656440423 + vertex -136.87964827850686 -36.213833349858376 -24.300000000000058 + vertex -137.1180262124037 -36.62671604277098 -23.678679656440412 + endloop +endfacet +facet normal -0.46193976625564215 -0.8001031451912632 -0.38268343236509644 + outer loop + vertex -136.7297976447499 -35.95428443864494 -25.02354286469249 + vertex -140.34374989364457 -34.2138333498584 -24.300000000000068 + vertex -140.19389925988764 -33.95428443864497 -25.0235428646925 + endloop +endfacet +facet normal -0.46193976625564215 -0.8001031451912632 -0.38268343236509644 + outer loop + vertex -140.34374989364457 -34.2138333498584 -24.300000000000068 + vertex -136.7297976447499 -35.95428443864494 -25.02354286469249 + vertex -136.87964827850686 -36.213833349858376 -24.300000000000058 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -157.9516070444238 -64.71153654742285 -55.531851652578204 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -157.9516070444238 -64.71153654742285 -55.531851652578204 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -158.19278799932127 -65.12927421512327 -55.33205080756894 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.19278799932127 -65.12927421512327 -55.33205080756894 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -158.39989478050782 -65.4879936827304 -55.01421356237316 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.39989478050782 -65.4879936827304 -55.01421356237316 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -158.55881340310572 -65.76324881133884 -54.60000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.55881340310572 -65.76324881133884 -54.60000000000006 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -158.65871382561033 -65.93628141881445 -54.117638090205105 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.65871382561033 -65.93628141881445 -54.117638090205105 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -157.9516070444238 -64.71153654742285 -55.531851652578204 + vertex -157.6927879993213 -64.26324881133883 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.65871382561033 -65.93628141881445 -54.117638090205105 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.69278799932127 -65.9952996189077 -53.60000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.69278799932127 -65.9952996189077 -53.60000000000006 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.69278799932127 -65.9952996189077 -51.60000000000005 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.69278799932127 -65.9952996189077 -51.60000000000005 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.65871382561033 -65.93628141881445 -51.082361909795004 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.65871382561033 -65.93628141881445 -51.082361909795004 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.55881340310572 -65.76324881133884 -50.600000000000044 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.55881340310572 -65.76324881133884 -50.600000000000044 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.39989478050782 -65.4879936827304 -50.18578643762695 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.39989478050782 -65.4879936827304 -50.18578643762695 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.19278799932127 -65.1292742151233 -49.867949192431176 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.19278799932127 -65.1292742151233 -49.867949192431176 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -157.9516070444238 -64.71153654742285 -49.668148347421905 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -157.9516070444238 -64.71153654742285 -49.668148347421905 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -157.6927879993213 -64.26324881133883 -49.600000000000044 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -157.6927879993213 -64.26324881133883 -49.600000000000044 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -142.7034481711011 -38.30095065694579 -41.92132034355971 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -142.7034481711011 -38.30095065694579 -41.92132034355971 + vertex -142.39278799932126 -37.76287145553507 -42.39807621135338 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -142.39278799932126 -37.76287145553507 -42.39807621135338 + vertex -142.031016566975 -37.13626495398446 -42.697777478867266 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -142.031016566975 -37.13626495398446 -42.697777478867266 + vertex -141.64278799932123 -36.4638333498584 -42.80000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -142.7034481711011 -38.30095065694579 -41.92132034355971 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -142.94182610499792 -38.7138333498584 -41.30000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -142.94182610499792 -38.7138333498584 -41.30000000000006 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -143.09167673875487 -38.973382261071826 -40.57645713530762 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -143.09167673875487 -38.973382261071826 -40.57645713530762 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -158.1927879993213 -65.12927421512326 -15.732050807568937 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -158.1927879993213 -65.12927421512326 -15.732050807568937 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -143.14278799932126 -39.06190956121171 -39.80000000000006 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -143.14278799932126 -39.06190956121171 -25.80000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -143.14278799932126 -39.06190956121171 -25.80000000000006 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -143.09167673875484 -38.97338226107182 -25.0235428646925 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -143.09167673875484 -38.97338226107182 -25.0235428646925 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -142.94182610499792 -38.71383334985839 -24.30000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -142.94182610499792 -38.71383334985839 -24.30000000000006 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -142.70344817110106 -38.30095065694578 -23.678679656440423 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -142.70344817110106 -38.30095065694578 -23.678679656440423 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -142.39278799932126 -37.76287145553506 -23.20192378864675 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -142.39278799932126 -37.76287145553506 -23.20192378864675 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -142.03101656697504 -37.13626495398444 -22.902222521132856 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -142.03101656697504 -37.13626495398444 -22.902222521132856 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -157.9516070444238 -64.71153654742285 -15.931851652578198 + vertex -157.6927879993213 -64.26324881133883 -16.00000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.39989478050782 -65.48799368273042 -15.414213562373153 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.55881340310575 -65.76324881133881 -15.000000000000057 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.55881340310575 -65.76324881133881 -15.000000000000057 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.65871382561036 -65.93628141881446 -14.517638090205098 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.65871382561036 -65.93628141881446 -14.517638090205098 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.69278799932127 -65.9952996189077 -14.000000000000059 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.69278799932127 -65.9952996189077 -14.000000000000059 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.69278799932127 -65.9952996189077 -12.000000000000046 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.69278799932127 -65.9952996189077 -12.000000000000046 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.65871382561036 -65.93628141881446 -11.482361909795012 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.65871382561036 -65.93628141881446 -11.482361909795012 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.55881340310575 -65.76324881133881 -11.000000000000048 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.55881340310575 -65.76324881133881 -11.000000000000048 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.39989478050782 -65.48799368273042 -10.58578643762696 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.39989478050782 -65.48799368273042 -10.58578643762696 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -158.1927879993213 -65.12927421512329 -10.267949192431178 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -158.1927879993213 -65.12927421512329 -10.267949192431178 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -157.9516070444238 -64.71153654742285 -10.068148347421912 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -157.9516070444238 -64.71153654742285 -10.068148347421912 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -157.6927879993213 -64.26324881133883 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -157.6927879993213 -64.26324881133883 -10.00000000000005 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -145.2927879993213 -42.785818797484744 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -140.14278799932126 -33.86575713850507 -39.80000000000006 + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.14278799932126 -33.86575713850507 -39.80000000000006 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -140.19389925988764 -33.954284438644954 -40.57645713530763 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.19389925988764 -33.954284438644954 -40.57645713530763 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -144.42676259553681 -41.285818797484765 -54.60000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -144.42676259553681 -41.285818797484765 -54.60000000000006 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -144.5856812181347 -41.56107392609316 -55.01421356237316 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -144.5856812181347 -41.56107392609316 -55.01421356237316 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -144.79278799932126 -41.91979339370032 -55.33205080756894 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -144.79278799932126 -41.91979339370032 -55.33205080756894 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -145.03396895421875 -42.33753106140071 -55.531851652578204 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.03396895421875 -42.33753106140071 -55.531851652578204 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -145.29278799932126 -42.78581879748475 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.29278799932126 -42.78581879748475 -55.600000000000065 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -157.6927879993213 -64.26324881133883 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -144.42676259553681 -41.285818797484765 -54.60000000000006 + vertex -144.3268621730322 -41.11278619000914 -54.117638090205105 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -144.3268621730322 -41.11278619000914 -54.117638090205105 + vertex -144.29278799932126 -41.05376798991587 -53.60000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -144.29278799932126 -41.05376798991587 -53.60000000000006 + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.3437498936446 -34.21383334985839 -41.30000000000007 + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -144.29278799932126 -41.05376798991587 -51.60000000000005 + vertex -144.32686217303217 -41.11278619000915 -51.082361909795004 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -144.32686217303217 -41.11278619000915 -51.082361909795004 + vertex -144.42676259553681 -41.285818797484765 -50.600000000000044 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -144.42676259553681 -41.285818797484765 -50.600000000000044 + vertex -144.5856812181347 -41.56107392609316 -50.18578643762695 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -144.5856812181347 -41.56107392609316 -50.18578643762695 + vertex -144.79278799932126 -41.91979339370032 -49.867949192431176 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -144.79278799932126 -41.91979339370032 -49.867949192431176 + vertex -145.03396895421875 -42.33753106140071 -49.668148347421905 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -145.03396895421875 -42.33753106140071 -49.668148347421905 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.58212782754143 -34.626716042771 -41.921320343559714 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -140.89278799932126 -35.16479524418173 -42.398076211353384 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -140.89278799932126 -35.16479524418173 -42.398076211353384 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -141.25455943166745 -35.79140174573236 -42.697777478867266 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -141.25455943166745 -35.79140174573236 -42.697777478867266 + vertex -145.29278799932126 -42.78581879748475 -49.600000000000044 + vertex -141.64278799932123 -36.4638333498584 -42.80000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -140.14278799932126 -33.86575713850507 -39.80000000000006 + vertex -140.14278799932123 -33.865757138505074 -25.800000000000065 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -140.14278799932123 -33.865757138505074 -25.800000000000065 + vertex -140.19389925988764 -33.95428443864497 -25.0235428646925 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -140.19389925988764 -33.95428443864497 -25.0235428646925 + vertex -140.34374989364457 -34.2138333498584 -24.300000000000068 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -140.34374989364457 -34.2138333498584 -24.300000000000068 + vertex -140.5821278275414 -34.62671604277101 -23.678679656440423 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -140.5821278275414 -34.62671604277101 -23.678679656440423 + vertex -140.89278799932126 -35.164795244181725 -23.20192378864675 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -140.89278799932126 -35.164795244181725 -23.20192378864675 + vertex -141.25455943166747 -35.79140174573234 -22.902222521132856 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -141.25455943166747 -35.79140174573234 -22.902222521132856 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -144.58568121813474 -41.56107392609316 -15.414213562373153 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -144.58568121813474 -41.56107392609316 -15.414213562373153 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -144.7927879993213 -41.91979339370032 -15.732050807568937 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -144.7927879993213 -41.91979339370032 -15.732050807568937 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -145.03396895421878 -42.33753106140071 -15.931851652578198 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.03396895421878 -42.33753106140071 -15.931851652578198 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -145.2927879993213 -42.785818797484744 -16.00000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -145.2927879993213 -42.785818797484744 -16.00000000000006 + vertex -141.64278799932123 -36.4638333498584 -22.800000000000065 + vertex -157.6927879993213 -64.26324881133883 -16.00000000000006 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.58568121813474 -41.56107392609316 -15.414213562373153 + vertex -144.42676259553681 -41.28581879748476 -15.000000000000057 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.42676259553681 -41.28581879748476 -15.000000000000057 + vertex -144.32686217303223 -41.11278619000914 -14.517638090205098 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.32686217303223 -41.11278619000914 -14.517638090205098 + vertex -144.2927879993213 -41.05376798991587 -14.000000000000059 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.2927879993213 -41.05376798991587 -14.000000000000059 + vertex -144.2927879993213 -41.05376798991587 -12.000000000000046 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.2927879993213 -41.05376798991587 -12.000000000000046 + vertex -144.3268621730322 -41.112786190009146 -11.482361909795012 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.3268621730322 -41.112786190009146 -11.482361909795012 + vertex -144.42676259553681 -41.28581879748476 -11.000000000000048 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.42676259553681 -41.28581879748476 -11.000000000000048 + vertex -144.58568121813474 -41.56107392609316 -10.58578643762696 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.58568121813474 -41.56107392609316 -10.58578643762696 + vertex -144.7927879993213 -41.91979339370032 -10.267949192431178 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -144.7927879993213 -41.91979339370032 -10.267949192431178 + vertex -145.03396895421878 -42.33753106140071 -10.068148347421912 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -145.03396895421878 -42.33753106140071 -10.068148347421912 + vertex -145.2927879993213 -42.785818797484744 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844383 0.5000000000000009 -9.792648627520365e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -145.2927879993213 -42.785818797484744 -10.00000000000005 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + endloop +endfacet +facet normal 0.8660254037844396 0.49999999999999845 1.8925949547301314e-16 + outer loop + vertex -93.55470053837932 -102.43433599533697 -3.000000000000062 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844396 0.49999999999999845 1.8925949547301314e-16 + outer loop + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + vertex -93.55470053837932 -102.43433599533697 -3.000000000000062 + vertex -93.5547005383793 -102.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 0.9202212155149957 0.39139866442810445 1.878833171115838e-16 + outer loop + vertex -93.33453298111431 -102.951974085542 -3.000000000000062 + vertex -93.5547005383793 -102.43433599533697 -62.600000000000065 + vertex -93.55470053837932 -102.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 0.9202212155149957 0.39139866442810445 1.878833171115838e-16 + outer loop + vertex -93.5547005383793 -102.43433599533697 -62.600000000000065 + vertex -93.33453298111431 -102.951974085542 -3.000000000000062 + vertex -93.3345329811143 -102.951974085542 -62.600000000000065 + endloop +endfacet +facet normal 0.7331906391044425 -0.6800231516129576 4.897386689705101e-17 + outer loop + vertex -93.41461187235464 -103.84854955771006 -3.000000000000062 + vertex -93.70940107675855 -104.16638680290583 -62.600000000000065 + vertex -93.41461187235463 -103.84854955771006 -62.600000000000065 + endloop +endfacet +facet normal 0.7331906391044425 -0.6800231516129576 4.897386689705101e-17 + outer loop + vertex -93.70940107675855 -104.16638680290583 -62.600000000000065 + vertex -93.41461187235464 -103.84854955771006 -3.000000000000062 + vertex -93.70940107675857 -104.16638680290583 -3.000000000000062 + endloop +endfacet +facet normal 0.9951296050077003 0.09857519585178756 1.725215534807415e-16 + outer loop + vertex -93.28675134594819 -103.43433599533697 -3.000000000000062 + vertex -93.3345329811143 -102.951974085542 -62.600000000000065 + vertex -93.33453298111431 -102.951974085542 -3.000000000000062 + endloop +endfacet +facet normal 0.9951296050077003 0.09857519585178756 1.725215534807415e-16 + outer loop + vertex -93.3345329811143 -102.951974085542 -62.600000000000065 + vertex -93.28675134594819 -103.43433599533697 -3.000000000000062 + vertex -93.28675134594819 -103.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 0.7990717941595379 0.6012356175233279 1.8784422362071584e-16 + outer loop + vertex -135.488087460942 -29.803579312013987 -3.0000000000000284 + vertex -135.82629141839354 -29.3540895692308 -62.60000000000003 + vertex -135.82629141839354 -29.35408956923081 -3.0000000000000284 + endloop +endfacet +facet normal 0.7990717941595379 0.6012356175233279 1.8784422362071584e-16 + outer loop + vertex -135.82629141839354 -29.3540895692308 -62.60000000000003 + vertex -135.488087460942 -29.803579312013987 -3.0000000000000284 + vertex -135.488087460942 -29.803579312013984 -62.60000000000003 + endloop +endfacet +facet normal -0.7990717941595309 0.6012356175233369 -7.411378289433379e-17 + outer loop + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -137.45928458024898 -29.354089569230812 -62.60000000000003 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + endloop +endfacet +facet normal -0.7990717941595309 0.6012356175233369 -7.411378289433379e-17 + outer loop + vertex -137.45928458024898 -29.354089569230812 -62.60000000000003 + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -137.45928458024898 -29.35408956923082 -3.0000000000000284 + endloop +endfacet +facet normal -0.22232200490613085 0.97497329508788 5.601884531566124e-17 + outer loop + vertex -137.06543773013163 -29.07152850444512 -3.0000000000000284 + vertex -136.64278799932126 -28.9751521872678 -62.60000000000003 + vertex -137.0654377301316 -29.071528504445116 -62.60000000000003 + endloop +endfacet +facet normal -0.22232200490613085 0.97497329508788 5.601884531566124e-17 + outer loop + vertex -136.64278799932126 -28.9751521872678 -62.60000000000003 + vertex -137.06543773013163 -29.07152850444512 -3.0000000000000284 + vertex -136.64278799932126 -28.975152187267806 -3.0000000000000284 + endloop +endfacet +facet normal 0.41219617871316877 -0.9110951159205396 -1.1646732101374687e-17 + outer loop + vertex -93.70940107675857 -104.16638680290583 -3.000000000000062 + vertex -94.15102956204204 -104.36618764791508 -62.600000000000065 + vertex -93.70940107675855 -104.16638680290583 -62.600000000000065 + endloop +endfacet +facet normal 0.41219617871316877 -0.9110951159205396 -1.1646732101374687e-17 + outer loop + vertex -94.15102956204204 -104.36618764791508 -62.600000000000065 + vertex -93.70940107675857 -104.16638680290583 -3.000000000000062 + vertex -94.15102956204204 -104.36618764791508 -3.000000000000062 + endloop +endfacet +facet normal -0.5829334262945306 0.8125199200687447 -1.8665829314470092e-17 + outer loop + vertex -137.45928458024898 -29.35408956923082 -3.0000000000000284 + vertex -137.0654377301316 -29.071528504445116 -62.60000000000003 + vertex -137.45928458024898 -29.354089569230812 -62.60000000000003 + endloop +endfacet +facet normal -0.5829334262945306 0.8125199200687447 -1.8665829314470092e-17 + outer loop + vertex -137.0654377301316 -29.071528504445116 -62.60000000000003 + vertex -137.45928458024898 -29.35408956923082 -3.0000000000000284 + vertex -137.06543773013163 -29.07152850444512 -3.0000000000000284 + endloop +endfacet +facet normal 0.22232200490612147 0.9749732950878822 1.2888213579542957e-16 + outer loop + vertex -136.64278799932126 -28.975152187267806 -3.0000000000000284 + vertex -136.22013826851088 -29.07152850444511 -62.60000000000003 + vertex -136.64278799932126 -28.9751521872678 -62.60000000000003 + endloop +endfacet +facet normal 0.22232200490612147 0.9749732950878822 1.2888213579542957e-16 + outer loop + vertex -136.22013826851088 -29.07152850444511 -62.60000000000003 + vertex -136.64278799932126 -28.975152187267806 -3.0000000000000284 + vertex -136.22013826851088 -29.071528504445116 -3.0000000000000284 + endloop +endfacet +facet normal 0.5829334262945255 0.8125199200687483 1.725215534807415e-16 + outer loop + vertex -135.82629141839354 -29.35408956923081 -3.0000000000000284 + vertex -136.22013826851088 -29.07152850444511 -62.60000000000003 + vertex -136.22013826851088 -29.071528504445116 -3.0000000000000284 + endloop +endfacet +facet normal 0.5829334262945255 0.8125199200687483 1.725215534807415e-16 + outer loop + vertex -136.22013826851088 -29.07152850444511 -62.60000000000003 + vertex -135.82629141839354 -29.35408956923081 -3.0000000000000284 + vertex -135.82629141839354 -29.3540895692308 -62.60000000000003 + endloop +endfacet +facet normal 0.9555126440105939 -0.29495014347493387 1.2865950612637304e-16 + outer loop + vertex -93.28675134594819 -103.43433599533697 -3.000000000000062 + vertex -93.41461187235463 -103.84854955771006 -62.600000000000065 + vertex -93.28675134594819 -103.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 0.9555126440105939 -0.29495014347493387 1.2865950612637304e-16 + outer loop + vertex -93.41461187235463 -103.84854955771006 -62.600000000000065 + vertex -93.28675134594819 -103.43433599533697 -3.000000000000062 + vertex -93.41461187235464 -103.84854955771006 -3.000000000000062 + endloop +endfacet +facet normal 0.12114942135544937 -0.9926342819514344 -3.711855016837831e-17 + outer loop + vertex -94.15102956204204 -104.36618764791508 -3.000000000000062 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -94.15102956204204 -104.36618764791508 -62.600000000000065 + endloop +endfacet +facet normal 0.12114942135544937 -0.9926342819514344 -3.711855016837831e-17 + outer loop + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -94.15102956204204 -104.36618764791508 -3.000000000000062 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -174.9278333507478 -91.46835223218358 -62.600000000000065 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -170.37500000000006 -88.83977267155386 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -164.79940691211775 -83.31130142461471 -62.600000000000065 + vertex -168.13557599864257 -82.35068819883378 -62.60000000000008 + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -168.13557599864257 -82.35068819883378 -62.60000000000008 + vertex -164.79940691211775 -83.31130142461471 -62.600000000000065 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -168.13557599864257 -82.35068819883378 -62.60000000000008 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -175.9278333507478 -89.73630142461471 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -175.9278333507478 -89.73630142461471 -62.600000000000065 + vertex -171.37500000000006 -87.10772186398499 -62.600000000000065 + vertex -174.9278333507478 -91.46835223218358 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + vertex -175.9278333507478 -89.73630142461471 -62.600000000000065 + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -135.488087460942 -29.803579312013984 -62.60000000000003 + vertex -134.33338692256274 -31.80357931201398 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -135.488087460942 -29.803579312013984 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -135.82629141839354 -29.3540895692308 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -135.82629141839354 -29.3540895692308 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -136.22013826851088 -29.07152850444511 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -136.22013826851088 -29.07152850444511 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -136.64278799932126 -28.9751521872678 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -136.64278799932126 -28.9751521872678 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -137.0654377301316 -29.071528504445116 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -137.0654377301316 -29.071528504445116 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -137.45928458024898 -29.354089569230812 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -137.45928458024898 -29.354089569230812 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -137.7974885377005 -29.803579312013984 -62.60000000000003 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -149.13659139480453 -57.567308556101146 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -149.13659139480453 -57.567308556101146 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -148.63427854169413 -57.064995702990736 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -148.63427854169413 -57.064995702990736 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -148.05237123795203 -56.65753982237123 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -148.05237123795203 -56.65753982237123 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -147.4085504425431 -56.357321254992605 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -147.4085504425431 -56.357321254992605 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -146.72237832454684 -56.173461990106745 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -146.72237832454684 -56.173461990106745 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -146.0147038765487 -56.111548498439944 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -146.0147038765487 -56.111548498439944 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -145.30702942855055 -56.173461990106745 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -145.30702942855055 -56.173461990106745 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -144.6208573105543 -56.357321254992605 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -144.6208573105543 -56.357321254992605 -62.60000000000005 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -144.05167483247536 -56.603058209358565 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -144.05167483247536 -56.603058209358565 -62.600000000000065 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -143.4299095783621 -57.03842292728552 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -143.4299095783621 -57.03842292728552 -62.600000000000065 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -143.3951292114033 -57.06499570299075 -62.600000000000044 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -143.3951292114033 -57.06499570299075 -62.600000000000044 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -142.89319062544632 -57.575141880201315 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -142.89319062544632 -57.575141880201315 -62.600000000000065 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -142.48536047767334 -58.14921585984326 -62.600000000000044 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -142.48536047767334 -58.14921585984326 -62.600000000000044 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -144.05167483247536 -56.603058209358565 -62.600000000000065 + vertex -143.4299095783621 -57.03842292728552 -62.600000000000065 + vertex -143.97703651514536 -56.65753982237123 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -149.13659139480453 -57.567308556101146 -62.60000000000005 + vertex -149.54404727542408 -58.14921585984325 -62.60000000000005 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -149.54404727542408 -58.14921585984325 -62.60000000000005 + vertex -162.24146450794694 -80.14178763147345 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -162.24146450794694 -80.14178763147345 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -153.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -153.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -150.00000000000009 -121.1247965983122 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -153.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -150.00000000000009 -121.1247965983122 -62.600000000000065 + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -150.00000000000009 -121.1247965983122 -62.600000000000065 + vertex -150.00000000000006 -124.13030787576977 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -150.00000000000006 -124.13030787576977 -62.600000000000065 + vertex -151.60819479272953 -124.0271219175925 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -152.83120430088542 -120.88086243345154 -62.600000000000065 + vertex -151.60819479272953 -124.0271219175925 -62.600000000000065 + vertex -154.30102097334645 -120.66211067883884 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -154.30102097334645 -120.66211067883884 -62.600000000000065 + vertex -151.60819479272953 -124.0271219175925 -62.600000000000065 + vertex -153.2106669582428 -123.85676701721613 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -154.30102097334645 -120.66211067883884 -62.600000000000065 + vertex -153.2106669582428 -123.85676701721613 -62.600000000000065 + vertex -155.760402807068 -120.38207845891769 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -155.760402807068 -120.38207845891769 -62.600000000000065 + vertex -153.2106669582428 -123.85676701721613 -62.600000000000065 + vertex -154.8046123096754 -123.61954128089435 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -155.760402807068 -120.38207845891769 -62.600000000000065 + vertex -154.8046123096754 -123.61954128089435 -62.600000000000065 + vertex -157.20679601081653 -120.04125580570843 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -157.20679601081653 -120.04125580570843 -62.600000000000065 + vertex -154.8046123096754 -123.61954128089435 -62.600000000000065 + vertex -156.38724158134562 -123.31585983302554 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -157.20679601081653 -120.04125580570843 -62.600000000000065 + vertex -156.38724158134562 -123.31585983302554 -62.600000000000065 + vertex -158.63766952233073 -119.64023912920041 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -158.63766952233073 -119.64023912920041 -62.600000000000065 + vertex -156.38724158134562 -123.31585983302554 -62.600000000000065 + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -158.63766952233073 -119.64023912920041 -62.600000000000065 + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -160.05051943746045 -119.17973017368655 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -160.05051943746045 -119.17973017368655 -62.600000000000065 + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -161.44287339178103 -118.66053478977186 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -161.44287339178103 -118.66053478977186 -62.600000000000065 + vertex -157.9557853097267 -122.94625408972136 -62.600000000000065 + vertex -159.50749867976714 -122.51137082887449 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -161.44287339178103 -118.66053478977186 -62.600000000000065 + vertex -159.50749867976714 -122.51137082887449 -62.600000000000065 + vertex -162.812294887016 -118.08356152420488 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -162.812294887016 -118.08356152420488 -62.600000000000065 + vertex -159.50749867976714 -122.51137082887449 -62.600000000000065 + vertex -161.03966632807823 -122.01197105835386 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -162.812294887016 -118.08356152420488 -62.600000000000065 + vertex -161.03966632807823 -122.01197105835386 -62.600000000000065 + vertex -164.1563875546969 -117.4498200300001 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -164.1563875546969 -117.4498200300001 -62.600000000000065 + vertex -161.03966632807823 -122.01197105835386 -62.600000000000065 + vertex -162.54960709458356 -121.44892868430702 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -164.1563875546969 -117.4498200300001 -62.600000000000065 + vertex -162.54960709458356 -121.44892868430702 -62.600000000000065 + vertex -165.47279934959988 -116.76041929963284 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.47279934959988 -116.76041929963284 -62.600000000000065 + vertex -162.54960709458356 -121.44892868430702 -62.600000000000065 + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.47279934959988 -116.76041929963284 -62.600000000000065 + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + vertex -166.7592266656199 -116.01656572439911 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -166.7592266656199 -116.01656572439911 -62.600000000000065 + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + vertex -168.01341836688118 -115.21956098333553 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -168.01341836688118 -115.21956098333553 -62.600000000000065 + vertex -164.03467871431613 -120.82322898190026 -62.600000000000065 + vertex -165.492282441152 -120.135966871173 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -168.01341836688118 -115.21956098333553 -62.600000000000065 + vertex -165.492282441152 -120.135966871173 -62.600000000000065 + vertex -169.23317972702915 -114.37079976539466 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -169.23317972702915 -114.37079976539466 -62.600000000000065 + vertex -165.492282441152 -120.135966871173 -62.600000000000065 + vertex -166.91986759538986 -119.38834500102287 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -169.23317972702915 -114.37079976539466 -62.600000000000065 + vertex -166.91986759538986 -119.38834500102287 -62.600000000000065 + vertex -170.4163762698104 -113.47176732886022 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -170.4163762698104 -113.47176732886022 -62.600000000000065 + vertex -166.91986759538986 -119.38834500102287 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -170.4163762698104 -113.47176732886022 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -172.30292768969878 -111.31482220219567 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -172.30292768969878 -111.31482220219567 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -186.7837460938633 -88.08422144198268 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.7837460938633 -88.08422144198268 -62.600000000000065 + vertex -168.31493602721866 -118.5816716446749 -62.600000000000065 + vertex -169.6750464882625 -117.71735841031693 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.7837460938633 -88.08422144198268 -62.600000000000065 + vertex -169.6750464882625 -117.71735841031693 -62.600000000000065 + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + vertex -169.6750464882625 -117.71735841031693 -62.600000000000065 + vertex -170.99781890355263 -116.79691777090852 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + vertex -170.99781890355263 -116.79691777090852 -62.600000000000065 + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.6480073251051 -89.68999627675343 -62.600000000000065 + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + vertex -186.44522930588298 -91.28868915165076 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.44522930588298 -91.28868915165076 -62.600000000000065 + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + vertex -186.1757668800877 -92.8775024932399 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.1757668800877 -92.8775024932399 -62.600000000000065 + vertex -172.2809385364518 -115.82196041748443 -62.600000000000065 + vertex -173.522160039242 -114.79419244058579 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.1757668800877 -92.8775024932399 -62.600000000000065 + vertex -173.522160039242 -114.79419244058579 -62.600000000000065 + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + vertex -173.522160039242 -114.79419244058579 -62.600000000000065 + vertex -174.71931138228737 -113.7154123447499 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + vertex -174.71931138228737 -113.7154123447499 -62.600000000000065 + vertex -175.87029765489726 -112.58750790128374 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.8400915835195 -94.4536560164098 -62.600000000000065 + vertex -175.87029765489726 -112.58750790128374 -62.600000000000065 + vertex -185.4387908187414 -96.0143915896302 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.4387908187414 -96.0143915896302 -62.600000000000065 + vertex -175.87029765489726 -112.58750790128374 -62.600000000000065 + vertex -176.97310473123767 -111.41245284482866 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.4387908187414 -96.0143915896302 -62.600000000000065 + vertex -176.97310473123767 -111.41245284482866 -62.600000000000065 + vertex -184.97256682717617 -97.55697806144177 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.97256682717617 -97.55697806144177 -62.600000000000065 + vertex -176.97310473123767 -111.41245284482866 -62.600000000000065 + vertex -178.0258027948761 -110.19230341949631 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.97256682717617 -97.55697806144177 -62.600000000000065 + vertex -178.0258027948761 -110.19230341949631 -62.600000000000065 + vertex -184.4422354602446 -99.07871603973354 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.4422354602446 -99.07871603973354 -62.600000000000065 + vertex -178.0258027948761 -110.19230341949631 -62.600000000000065 + vertex -179.0265497157926 -108.92919478062029 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.4422354602446 -99.07871603973354 -62.600000000000065 + vertex -179.0265497157926 -108.92919478062029 -62.600000000000065 + vertex -183.8487247516966 -100.57694261544428 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.8487247516966 -100.57694261544428 -62.600000000000065 + vertex -179.0265497157926 -108.92919478062029 -62.600000000000065 + vertex -179.97359427394684 -107.62533725842027 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.8487247516966 -100.57694261544428 -62.600000000000065 + vertex -179.97359427394684 -107.62533725842027 -62.600000000000065 + vertex -183.1930732936331 -102.04903602242166 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.1930732936331 -102.04903602242166 -62.600000000000065 + vertex -179.97359427394684 -107.62533725842027 -62.600000000000065 + vertex -180.8652792237608 -106.28301249011629 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.1930732936331 -102.04903602242166 -62.600000000000065 + vertex -180.8652792237608 -106.28301249011629 -62.600000000000065 + vertex -182.47642841905974 -103.4924202252848 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -182.47642841905974 -103.4924202252848 -62.600000000000065 + vertex -180.8652792237608 -106.28301249011629 -62.600000000000065 + vertex -181.7000441941546 -104.9045694272622 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -179.8971508823612 -69.34141226850998 -62.60000000000008 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -164.79940691211775 -83.31130142461471 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -164.79940691211775 -83.31130142461471 -62.600000000000065 + vertex -165.44278799932127 -77.68664256999762 -62.600000000000065 + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -179.8971508823612 -69.34141226850998 -62.60000000000008 + vertex -166.9427879993213 -80.28471878135092 -62.60000000000008 + vertex -181.10149984918357 -71.91527419881089 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -179.8971508823612 -69.34141226850998 -62.60000000000008 + vertex -181.10149984918357 -71.91527419881089 -62.600000000000065 + vertex -182.50000000000003 -67.83865662978121 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -182.50000000000003 -67.83865662978121 -62.600000000000065 + vertex -181.10149984918357 -71.91527419881089 -62.600000000000065 + vertex -183.21473573526941 -69.28298715360737 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.21473573526941 -69.28298715360737 -62.600000000000065 + vertex -181.10149984918357 -71.91527419881089 -62.600000000000065 + vertex -181.64696360879708 -73.2975486533744 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.21473573526941 -69.28298715360737 -62.600000000000065 + vertex -181.64696360879708 -73.2975486533744 -62.600000000000065 + vertex -183.86844014664095 -70.75594620798753 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.86844014664095 -70.75594620798753 -62.600000000000065 + vertex -181.64696360879708 -73.2975486533744 -62.600000000000065 + vertex -182.13413950932804 -74.70142650515936 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -183.86844014664095 -70.75594620798753 -62.600000000000065 + vertex -182.13413950932804 -74.70142650515936 -62.600000000000065 + vertex -184.45996930827113 -72.25495624273319 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.45996930827113 -72.25495624273319 -62.600000000000065 + vertex -182.13413950932804 -74.70142650515936 -62.600000000000065 + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.45996930827113 -72.25495624273319 -62.600000000000065 + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + vertex -184.9882880955938 -73.77739412070684 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.9882880955938 -73.77739412070684 -62.600000000000065 + vertex -182.56217503533784 -76.12445109007135 -62.600000000000065 + vertex -182.93032116189778 -77.5641322388989 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -184.9882880955938 -73.77739412070684 -62.600000000000065 + vertex -182.93032116189778 -77.5641322388989 -62.600000000000065 + vertex -185.4524719966983 -75.32059570808373 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.4524719966983 -75.32059570808373 -62.600000000000065 + vertex -182.93032116189778 -77.5641322388989 -62.600000000000065 + vertex -183.2379336653174 -79.01795063489288 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.4524719966983 -75.32059570808373 -62.600000000000065 + vertex -183.2379336653174 -79.01795063489288 -62.600000000000065 + vertex -183.48447425047996 -80.48336222235157 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.4524719966983 -75.32059570808373 -62.600000000000065 + vertex -183.48447425047996 -80.48336222235157 -62.600000000000065 + vertex -185.85170873014454 -76.88186053635415 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.85170873014454 -76.88186053635415 -62.600000000000065 + vertex -183.48447425047996 -80.48336222235157 -62.600000000000065 + vertex -183.66951149281198 -81.95780265849699 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -185.85170873014454 -76.88186053635415 -62.600000000000065 + vertex -183.66951149281198 -81.95780265849699 -62.600000000000065 + vertex -186.1852996663851 -78.4584565279085 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.1852996663851 -78.4584565279085 -62.600000000000065 + vertex -183.66951149281198 -81.95780265849699 -62.600000000000065 + vertex -183.79272159323875 -83.43869180085144 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.1852996663851 -78.4584565279085 -62.600000000000065 + vertex -183.79272159323875 -83.43869180085144 -62.600000000000065 + vertex -186.4526610503061 -80.04762477693528 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.4526610503061 -80.04762477693528 -62.600000000000065 + vertex -183.79272159323875 -83.43869180085144 -62.600000000000065 + vertex -183.85388894480468 -84.92343822226248 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.4526610503061 -80.04762477693528 -62.600000000000065 + vertex -183.85388894480468 -84.92343822226248 -62.600000000000065 + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + vertex -183.85388894480468 -84.92343822226248 -62.600000000000065 + vertex -183.85290650996635 -86.40944374567493 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + vertex -183.85290650996635 -86.40944374567493 -62.600000000000065 + vertex -183.78977600789938 -87.89410799071463 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.65332502274777 -81.64658437726641 -62.600000000000065 + vertex -183.78977600789938 -87.89410799071463 -62.600000000000065 + vertex -186.78694043921737 -83.25253728872076 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.78694043921737 -83.25253728872076 -62.600000000000065 + vertex -183.78977600789938 -87.89410799071463 -62.600000000000065 + vertex -183.6646079114895 -89.37483292412786 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.78694043921737 -83.25253728872076 -62.600000000000065 + vertex -183.6646079114895 -89.37483292412786 -62.600000000000065 + vertex -186.85327348436147 -84.86267323343132 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.85327348436147 -84.86267323343132 -62.600000000000065 + vertex -183.6646079114895 -89.37483292412786 -62.600000000000065 + vertex -183.4776212540151 -90.84902740611355 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.85327348436147 -84.86267323343132 -62.600000000000065 + vertex -183.4776212540151 -90.84902740611355 -62.600000000000065 + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + vertex -183.4776212540151 -90.84902740611355 -62.600000000000065 + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -186.85220808112246 -86.47417461358681 -62.600000000000065 + vertex -183.4221041290405 -91.17636932989382 -62.60000000000009 + vertex -182.55292768969875 -93.5613014246147 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -155.38557599864257 -104.43433599533697 -62.600000000000065 + vertex -161.12500000000003 -104.86124264156595 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -155.38557599864257 -104.43433599533697 -62.600000000000065 + vertex -154.54940691211777 -101.06482220219569 -62.600000000000065 + vertex -153.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -161.12500000000003 -104.86124264156595 -62.600000000000065 + vertex -155.38557599864257 -104.43433599533697 -62.600000000000065 + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -161.12500000000003 -104.86124264156595 -62.600000000000065 + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -161.12500000000003 -104.86124264156595 -62.600000000000065 + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + vertex -162.12500000000003 -103.12919183399708 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + vertex -170.67210412904052 -113.26001712639697 -62.600000000000065 + vertex -172.30292768969878 -111.31482220219567 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -166.67783335074782 -105.75777139462681 -62.600000000000065 + vertex -162.12500000000003 -103.12919183399708 -62.600000000000065 + vertex -165.67783335074782 -107.48982220219568 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -142.45782590751938 -58.19690713431455 -62.600000000000065 + vertex -142.48536047767334 -58.14921585984326 -62.600000000000044 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -93.5547005383793 -102.43433599533697 -62.600000000000065 + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -94.70940107675855 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -93.5547005383793 -102.43433599533697 -62.600000000000065 + vertex -93.3345329811143 -102.951974085542 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -93.3345329811143 -102.951974085542 -62.600000000000065 + vertex -93.28675134594819 -103.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -93.28675134594819 -103.43433599533697 -62.600000000000065 + vertex -93.41461187235463 -103.84854955771006 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -93.41461187235463 -103.84854955771006 -62.600000000000065 + vertex -93.70940107675855 -104.16638680290583 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -93.70940107675855 -104.16638680290583 -62.600000000000065 + vertex -94.15102956204204 -104.36618764791508 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -94.15102956204204 -104.36618764791508 -62.600000000000065 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -94.70940107675858 -104.43433599533697 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -124.423047334483 -100.37242250367015 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -124.423047334483 -100.37242250367015 -62.600000000000065 + vertex -123.73687521648672 -100.1885632387843 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -123.73687521648672 -100.1885632387843 -62.600000000000065 + vertex -123.09305442107781 -99.88834467140568 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -123.09305442107781 -99.88834467140568 -62.600000000000065 + vertex -122.5111471173357 -99.48088879078615 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -122.5111471173357 -99.48088879078615 -62.600000000000065 + vertex -122.0088342642253 -98.97857593767576 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -122.0088342642253 -98.97857593767576 -62.600000000000065 + vertex -121.60137838360576 -98.39666863393364 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.60137838360576 -98.39666863393364 -62.600000000000065 + vertex -121.30115981622716 -97.75284783852473 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.30115981622716 -97.75284783852473 -62.600000000000065 + vertex -121.11730055134129 -97.06667572052845 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.11730055134129 -97.06667572052845 -62.600000000000065 + vertex -121.05538705967449 -96.35900127253032 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.05538705967449 -96.35900127253032 -62.600000000000065 + vertex -121.11730055134129 -95.65132682453219 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.11730055134129 -95.65132682453219 -62.600000000000065 + vertex -121.30115981622716 -94.96515470653594 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.30115981622716 -94.96515470653594 -62.600000000000065 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -113.10682266969962 -100.43433599533697 -62.600000000000065 + vertex -121.60137838360576 -94.32133391112701 -62.600000000000065 + vertex -143.53209771903332 -47.73621377563331 -62.600000000000044 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -124.423047334483 -100.37242250367015 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -125.13072178248112 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -125.13072178248112 -100.43433599533697 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -150.52555624752685 -100.43433599533697 -62.600000000000065 + endloop +endfacet +facet normal 8.050242361863537e-17 2.571917868453463e-16 -1.0 + outer loop + vertex -150.52555624752685 -100.43433599533697 -62.600000000000065 + vertex -150.00000000000006 -104.43433599533697 -62.600000000000065 + vertex -162.24146450794694 -80.14178763147345 -62.600000000000065 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.67783335074782 -105.75777139462681 -3.000000000000062 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -162.12500000000006 -103.12919183399708 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.54940691211777 -101.0648222021957 -3.000000000000062 + vertex -155.3855759986426 -104.43433599533697 -3.000000000000062 + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -155.3855759986426 -104.43433599533697 -3.000000000000062 + vertex -154.54940691211777 -101.0648222021957 -3.000000000000062 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -155.3855759986426 -104.43433599533697 -3.000000000000062 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -165.67783335074782 -107.48982220219568 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -165.67783335074782 -107.48982220219568 -3.000000000000062 + vertex -161.12500000000006 -104.86124264156595 -3.000000000000062 + vertex -166.67783335074782 -105.75777139462681 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + vertex -165.67783335074782 -107.48982220219568 -3.000000000000062 + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -93.55470053837932 -102.43433599533697 -3.000000000000062 + vertex -94.70940107675855 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.55470053837932 -102.43433599533697 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -93.33453298111431 -102.951974085542 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.33453298111431 -102.951974085542 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -93.28675134594819 -103.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.28675134594819 -103.43433599533697 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -93.41461187235464 -103.84854955771006 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.41461187235464 -103.84854955771006 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -93.70940107675857 -104.16638680290583 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -93.70940107675857 -104.16638680290583 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -94.15102956204204 -104.36618764791508 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -94.15102956204204 -104.36618764791508 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -94.70940107675858 -104.43433599533697 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -124.423047334483 -100.37242250367015 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -124.423047334483 -100.37242250367015 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -123.73687521648675 -100.1885632387843 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -123.73687521648675 -100.1885632387843 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -123.09305442107782 -99.88834467140568 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -123.09305442107782 -99.88834467140568 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -122.51114711733571 -99.48088879078617 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -122.51114711733571 -99.48088879078617 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -122.0088342642253 -98.97857593767576 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -122.0088342642253 -98.97857593767576 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.60137838360578 -98.39666863393364 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.60137838360578 -98.39666863393364 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.30115981622716 -97.75284783852474 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.30115981622716 -97.75284783852474 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.11730055134132 -97.06667572052847 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.11730055134132 -97.06667572052847 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.05538705967449 -96.35900127253034 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.05538705967449 -96.35900127253034 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.11730055134132 -95.65132682453219 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.11730055134132 -95.65132682453219 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.30115981622716 -94.96515470653594 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -121.30115981622716 -94.96515470653594 -3.000000000000062 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -124.423047334483 -100.37242250367015 -3.000000000000062 + vertex -125.13072178248112 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -125.13072178248112 -100.43433599533697 -3.000000000000062 + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -166.9427879993213 -80.28471878135093 -3.0000000000000733 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.9427879993213 -80.28471878135093 -3.0000000000000733 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -179.8971508823612 -69.34141226851 -3.0000000000000733 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.9427879993213 -80.28471878135093 -3.0000000000000733 + vertex -179.8971508823612 -69.34141226851 -3.0000000000000733 + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -179.8971508823612 -69.34141226851 -3.0000000000000733 + vertex -182.50000000000003 -67.83865662978121 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -182.50000000000003 -67.83865662978121 -3.000000000000062 + vertex -183.21473573526944 -69.28298715360738 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.1014998491836 -71.91527419881089 -3.000000000000062 + vertex -183.21473573526944 -69.28298715360738 -3.000000000000062 + vertex -181.64696360879708 -73.2975486533744 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.64696360879708 -73.2975486533744 -3.000000000000062 + vertex -183.21473573526944 -69.28298715360738 -3.000000000000062 + vertex -183.86844014664098 -70.75594620798753 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -181.64696360879708 -73.2975486533744 -3.000000000000062 + vertex -183.86844014664098 -70.75594620798753 -3.000000000000062 + vertex -182.13413950932804 -74.70142650515936 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.13413950932804 -74.70142650515936 -3.000000000000062 + vertex -183.86844014664098 -70.75594620798753 -3.000000000000062 + vertex -184.45996930827113 -72.25495624273319 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.13413950932804 -74.70142650515936 -3.000000000000062 + vertex -184.45996930827113 -72.25495624273319 -3.000000000000062 + vertex -182.56217503533784 -76.12445109007135 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.56217503533784 -76.12445109007135 -3.000000000000062 + vertex -184.45996930827113 -72.25495624273319 -3.000000000000062 + vertex -184.98828809559382 -73.77739412070686 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.56217503533784 -76.12445109007135 -3.000000000000062 + vertex -184.98828809559382 -73.77739412070686 -3.000000000000062 + vertex -182.93032116189778 -77.56413223889892 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.93032116189778 -77.56413223889892 -3.000000000000062 + vertex -184.98828809559382 -73.77739412070686 -3.000000000000062 + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.93032116189778 -77.56413223889892 -3.000000000000062 + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -183.23793366531743 -79.01795063489288 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.23793366531743 -79.01795063489288 -3.000000000000062 + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -183.48447425047996 -80.48336222235157 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.48447425047996 -80.48336222235157 -3.000000000000062 + vertex -185.4524719966983 -75.32059570808374 -3.000000000000062 + vertex -185.85170873014454 -76.88186053635415 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.48447425047996 -80.48336222235157 -3.000000000000062 + vertex -185.85170873014454 -76.88186053635415 -3.000000000000062 + vertex -183.66951149281198 -81.95780265849699 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.66951149281198 -81.95780265849699 -3.000000000000062 + vertex -185.85170873014454 -76.88186053635415 -3.000000000000062 + vertex -186.1852996663851 -78.45845652790851 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.66951149281198 -81.95780265849699 -3.000000000000062 + vertex -186.1852996663851 -78.45845652790851 -3.000000000000062 + vertex -183.79272159323875 -83.43869180085144 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.79272159323875 -83.43869180085144 -3.000000000000062 + vertex -186.1852996663851 -78.45845652790851 -3.000000000000062 + vertex -186.4526610503061 -80.0476247769353 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.79272159323875 -83.43869180085144 -3.000000000000062 + vertex -186.4526610503061 -80.0476247769353 -3.000000000000062 + vertex -183.85388894480468 -84.92343822226249 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.85388894480468 -84.92343822226249 -3.000000000000062 + vertex -186.4526610503061 -80.0476247769353 -3.000000000000062 + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.85388894480468 -84.92343822226249 -3.000000000000062 + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + vertex -183.85290650996637 -86.40944374567495 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.85290650996637 -86.40944374567495 -3.000000000000062 + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + vertex -183.78977600789938 -87.89410799071464 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.78977600789938 -87.89410799071464 -3.000000000000062 + vertex -186.65332502274777 -81.64658437726641 -3.000000000000062 + vertex -186.78694043921737 -83.25253728872076 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.78977600789938 -87.89410799071464 -3.000000000000062 + vertex -186.78694043921737 -83.25253728872076 -3.000000000000062 + vertex -183.6646079114895 -89.37483292412786 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.6646079114895 -89.37483292412786 -3.000000000000062 + vertex -186.78694043921737 -83.25253728872076 -3.000000000000062 + vertex -186.8532734843615 -84.86267323343132 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.6646079114895 -89.37483292412786 -3.000000000000062 + vertex -186.8532734843615 -84.86267323343132 -3.000000000000062 + vertex -183.4776212540151 -90.84902740611355 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.4776212540151 -90.84902740611355 -3.000000000000062 + vertex -186.8532734843615 -84.86267323343132 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.4776212540151 -90.84902740611355 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + vertex -182.55292768969878 -93.5613014246147 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -182.55292768969878 -93.5613014246147 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -150.00000000000009 -121.1247965983122 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -154.54940691211777 -101.0648222021957 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.54940691211777 -101.0648222021957 -3.000000000000062 + vertex -150.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000009 -121.1247965983122 -3.000000000000062 + vertex -153.00000000000006 -104.43433599533697 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000009 -121.1247965983122 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -3.000000000000062 + vertex -150.00000000000009 -124.13030787576977 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -150.00000000000009 -124.13030787576977 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -3.000000000000062 + vertex -151.60819479272953 -124.02712191759251 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -151.60819479272953 -124.02712191759251 -3.000000000000062 + vertex -152.83120430088542 -120.88086243345154 -3.000000000000062 + vertex -154.30102097334645 -120.66211067883884 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -151.60819479272953 -124.02712191759251 -3.000000000000062 + vertex -154.30102097334645 -120.66211067883884 -3.000000000000062 + vertex -153.2106669582428 -123.85676701721616 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -153.2106669582428 -123.85676701721616 -3.000000000000062 + vertex -154.30102097334645 -120.66211067883884 -3.000000000000062 + vertex -155.76040280706803 -120.38207845891769 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -153.2106669582428 -123.85676701721616 -3.000000000000062 + vertex -155.76040280706803 -120.38207845891769 -3.000000000000062 + vertex -154.8046123096754 -123.61954128089435 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.8046123096754 -123.61954128089435 -3.000000000000062 + vertex -155.76040280706803 -120.38207845891769 -3.000000000000062 + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -154.8046123096754 -123.61954128089435 -3.000000000000062 + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + vertex -156.38724158134562 -123.31585983302554 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -156.38724158134562 -123.31585983302554 -3.000000000000062 + vertex -157.20679601081656 -120.04125580570843 -3.000000000000062 + vertex -158.63766952233075 -119.64023912920041 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -156.38724158134562 -123.31585983302554 -3.000000000000062 + vertex -158.63766952233075 -119.64023912920041 -3.000000000000062 + vertex -157.9557853097267 -122.94625408972136 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -157.9557853097267 -122.94625408972136 -3.000000000000062 + vertex -158.63766952233075 -119.64023912920041 -3.000000000000062 + vertex -160.05051943746048 -119.17973017368655 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -157.9557853097267 -122.94625408972136 -3.000000000000062 + vertex -160.05051943746048 -119.17973017368655 -3.000000000000062 + vertex -161.44287339178106 -118.66053478977186 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -157.9557853097267 -122.94625408972136 -3.000000000000062 + vertex -161.44287339178106 -118.66053478977186 -3.000000000000062 + vertex -159.50749867976717 -122.51137082887449 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -159.50749867976717 -122.51137082887449 -3.000000000000062 + vertex -161.44287339178106 -118.66053478977186 -3.000000000000062 + vertex -162.812294887016 -118.08356152420488 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -159.50749867976717 -122.51137082887449 -3.000000000000062 + vertex -162.812294887016 -118.08356152420488 -3.000000000000062 + vertex -161.03966632807823 -122.01197105835386 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -161.03966632807823 -122.01197105835386 -3.000000000000062 + vertex -162.812294887016 -118.08356152420488 -3.000000000000062 + vertex -164.15638755469692 -117.4498200300001 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -161.03966632807823 -122.01197105835386 -3.000000000000062 + vertex -164.15638755469692 -117.4498200300001 -3.000000000000062 + vertex -162.5496070945836 -121.44892868430702 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -162.5496070945836 -121.44892868430702 -3.000000000000062 + vertex -164.15638755469692 -117.4498200300001 -3.000000000000062 + vertex -165.47279934959988 -116.76041929963284 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -162.5496070945836 -121.44892868430702 -3.000000000000062 + vertex -165.47279934959988 -116.76041929963284 -3.000000000000062 + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + vertex -165.47279934959988 -116.76041929963284 -3.000000000000062 + vertex -166.7592266656199 -116.01656572439911 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + vertex -166.7592266656199 -116.01656572439911 -3.000000000000062 + vertex -168.0134183668812 -115.21956098333553 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.03467871431616 -120.82322898190026 -3.000000000000062 + vertex -168.0134183668812 -115.21956098333553 -3.000000000000062 + vertex -165.492282441152 -120.135966871173 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -165.492282441152 -120.135966871173 -3.000000000000062 + vertex -168.0134183668812 -115.21956098333553 -3.000000000000062 + vertex -169.23317972702915 -114.37079976539466 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -165.492282441152 -120.135966871173 -3.000000000000062 + vertex -169.23317972702915 -114.37079976539466 -3.000000000000062 + vertex -166.9198675953899 -119.38834500102287 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.9198675953899 -119.38834500102287 -3.000000000000062 + vertex -169.23317972702915 -114.37079976539466 -3.000000000000062 + vertex -170.4163762698104 -113.47176732886022 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -166.9198675953899 -119.38834500102287 -3.000000000000062 + vertex -170.4163762698104 -113.47176732886022 -3.000000000000062 + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -170.4163762698104 -113.47176732886022 -3.000000000000062 + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -170.67210412904052 -113.26001712639697 -3.000000000000062 + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -172.30292768969878 -111.31482220219569 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -186.85220808112246 -86.47417461358681 -3.000000000000062 + vertex -186.7837460938633 -88.08422144198268 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.31493602721866 -118.5816716446749 -3.000000000000062 + vertex -186.7837460938633 -88.08422144198268 -3.000000000000062 + vertex -169.6750464882625 -117.71735841031693 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -169.6750464882625 -117.71735841031693 -3.000000000000062 + vertex -186.7837460938633 -88.08422144198268 -3.000000000000062 + vertex -186.6480073251051 -89.68999627675343 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -169.6750464882625 -117.71735841031693 -3.000000000000062 + vertex -186.6480073251051 -89.68999627675343 -3.000000000000062 + vertex -170.99781890355263 -116.79691777090852 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.99781890355263 -116.79691777090852 -3.000000000000062 + vertex -186.6480073251051 -89.68999627675343 -3.000000000000062 + vertex -186.44522930588298 -91.28868915165077 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -170.99781890355263 -116.79691777090852 -3.000000000000062 + vertex -186.44522930588298 -91.28868915165077 -3.000000000000062 + vertex -172.28093853645183 -115.82196041748446 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -172.28093853645183 -115.82196041748446 -3.000000000000062 + vertex -186.44522930588298 -91.28868915165077 -3.000000000000062 + vertex -186.1757668800877 -92.8775024932399 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -172.28093853645183 -115.82196041748446 -3.000000000000062 + vertex -186.1757668800877 -92.8775024932399 -3.000000000000062 + vertex -173.52216003924204 -114.7941924405858 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -173.52216003924204 -114.7941924405858 -3.000000000000062 + vertex -186.1757668800877 -92.8775024932399 -3.000000000000062 + vertex -185.8400915835195 -94.45365601640981 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -173.52216003924204 -114.7941924405858 -3.000000000000062 + vertex -185.8400915835195 -94.45365601640981 -3.000000000000062 + vertex -174.7193113822874 -113.7154123447499 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -174.7193113822874 -113.7154123447499 -3.000000000000062 + vertex -185.8400915835195 -94.45365601640981 -3.000000000000062 + vertex -185.4387908187414 -96.01439158963021 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -174.7193113822874 -113.7154123447499 -3.000000000000062 + vertex -185.4387908187414 -96.01439158963021 -3.000000000000062 + vertex -175.87029765489729 -112.58750790128374 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -175.87029765489729 -112.58750790128374 -3.000000000000062 + vertex -185.4387908187414 -96.01439158963021 -3.000000000000062 + vertex -184.9725668271762 -97.55697806144177 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -175.87029765489729 -112.58750790128374 -3.000000000000062 + vertex -184.9725668271762 -97.55697806144177 -3.000000000000062 + vertex -176.9731047312377 -111.41245284482866 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -176.9731047312377 -111.41245284482866 -3.000000000000062 + vertex -184.9725668271762 -97.55697806144177 -3.000000000000062 + vertex -184.4422354602446 -99.07871603973354 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -176.9731047312377 -111.41245284482866 -3.000000000000062 + vertex -184.4422354602446 -99.07871603973354 -3.000000000000062 + vertex -178.0258027948761 -110.19230341949634 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -178.0258027948761 -110.19230341949634 -3.000000000000062 + vertex -184.4422354602446 -99.07871603973354 -3.000000000000062 + vertex -183.84872475169664 -100.57694261544428 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -178.0258027948761 -110.19230341949634 -3.000000000000062 + vertex -183.84872475169664 -100.57694261544428 -3.000000000000062 + vertex -179.0265497157926 -108.92919478062029 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -179.0265497157926 -108.92919478062029 -3.000000000000062 + vertex -183.84872475169664 -100.57694261544428 -3.000000000000062 + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -179.0265497157926 -108.92919478062029 -3.000000000000062 + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + vertex -179.97359427394684 -107.62533725842027 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -179.97359427394684 -107.62533725842027 -3.000000000000062 + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + vertex -180.8652792237608 -106.28301249011629 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -180.8652792237608 -106.28301249011629 -3.000000000000062 + vertex -183.1930732936331 -102.04903602242166 -3.000000000000062 + vertex -182.47642841905977 -103.49242022528482 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -180.8652792237608 -106.28301249011629 -3.000000000000062 + vertex -182.47642841905977 -103.49242022528482 -3.000000000000062 + vertex -181.7000441941546 -104.90456942726223 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -168.13557599864257 -82.35068819883378 -3.0000000000000733 + vertex -171.37500000000006 -87.10772186398499 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -168.13557599864257 -82.35068819883378 -3.0000000000000733 + vertex -164.79940691211777 -83.31130142461471 -3.000000000000062 + vertex -166.9427879993213 -80.28471878135093 -3.0000000000000733 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -171.37500000000006 -87.10772186398499 -3.000000000000062 + vertex -168.13557599864257 -82.35068819883378 -3.0000000000000733 + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -171.37500000000006 -87.10772186398499 -3.000000000000062 + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -171.37500000000006 -87.10772186398499 -3.000000000000062 + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + vertex -170.37500000000006 -88.83977267155386 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + vertex -183.42210412904052 -91.17636932989382 -3.000000000000085 + vertex -182.55292768969878 -93.5613014246147 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -174.92783335074782 -91.46835223218358 -3.000000000000062 + vertex -170.37500000000006 -88.83977267155386 -3.000000000000062 + vertex -175.92783335074782 -89.73630142461471 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -135.82629141839354 -29.35408956923081 -3.0000000000000284 + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -135.488087460942 -29.803579312013987 -3.0000000000000284 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -134.33338692256277 -31.803579312013984 -3.0000000000000284 + vertex -135.82629141839354 -29.35408956923081 -3.0000000000000284 + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -135.82629141839354 -29.35408956923081 -3.0000000000000284 + vertex -136.22013826851088 -29.071528504445116 -3.0000000000000284 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -136.22013826851088 -29.071528504445116 -3.0000000000000284 + vertex -136.64278799932126 -28.975152187267806 -3.0000000000000284 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -136.64278799932126 -28.975152187267806 -3.0000000000000284 + vertex -137.06543773013163 -29.07152850444512 -3.0000000000000284 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -137.06543773013163 -29.07152850444512 -3.0000000000000284 + vertex -137.45928458024898 -29.35408956923082 -3.0000000000000284 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -137.45928458024898 -29.35408956923082 -3.0000000000000284 + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -137.7974885377005 -29.803579312013994 -3.0000000000000284 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -149.13659139480455 -57.56730855610115 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -149.13659139480455 -57.56730855610115 -3.000000000000051 + vertex -148.63427854169413 -57.064995702990736 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -148.63427854169413 -57.064995702990736 -3.000000000000051 + vertex -148.05237123795203 -56.657539822371234 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -148.05237123795203 -56.657539822371234 -3.000000000000051 + vertex -147.4085504425431 -56.357321254992605 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -147.4085504425431 -56.357321254992605 -3.000000000000051 + vertex -146.72237832454684 -56.17346199010676 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -146.72237832454684 -56.17346199010676 -3.000000000000051 + vertex -146.0147038765487 -56.111548498439944 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -146.0147038765487 -56.111548498439944 -3.000000000000051 + vertex -145.30702942855058 -56.173461990106745 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -145.30702942855058 -56.173461990106745 -3.000000000000051 + vertex -144.6208573105543 -56.357321254992605 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -144.6208573105543 -56.357321254992605 -3.000000000000051 + vertex -144.05167483247536 -56.603058209358565 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -144.05167483247536 -56.603058209358565 -3.000000000000062 + vertex -143.42990957836213 -57.03842292728552 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -143.42990957836213 -57.03842292728552 -3.000000000000062 + vertex -143.3951292114033 -57.06499570299075 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -143.3951292114033 -57.06499570299075 -3.000000000000051 + vertex -142.89319062544632 -57.575141880201315 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -142.89319062544632 -57.575141880201315 -3.000000000000062 + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.53209771903332 -47.73621377563332 -3.0000000000000395 + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -113.10682266969964 -100.43433599533697 -3.000000000000062 + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -143.42990957836213 -57.03842292728552 -3.000000000000062 + vertex -144.05167483247536 -56.603058209358565 -3.000000000000062 + vertex -143.9770365151454 -56.65753982237123 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -149.13659139480455 -57.56730855610115 -3.000000000000051 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -149.54404727542408 -58.14921585984326 -3.000000000000051 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -149.54404727542408 -58.14921585984326 -3.000000000000051 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -162.24146450794694 -80.14178763147346 -3.0000000000000733 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -162.24146450794694 -80.14178763147346 -3.0000000000000733 + vertex -165.4427879993213 -77.68664256999763 -3.0000000000000733 + vertex -150.52555624752688 -100.43433599533697 -3.000000000000062 + endloop +endfacet +facet normal -9.251431598681811e-17 -3.047983989961055e-16 1.0 + outer loop + vertex -142.45782590751938 -58.19690713431455 -3.000000000000062 + vertex -121.60137838360578 -94.32133391112701 -3.000000000000062 + vertex -142.48536047767337 -58.149215859843274 -3.000000000000051 + endloop +endfacet +facet normal 0.4989294616193014 -0.8641711769176169 -0.06540312923014449 + outer loop + vertex -134.26812936260933 -63.781877648670005 -31.233685693359433 + vertex -138.04336943063956 -65.84297004007189 -32.800000000000054 + vertex -134.31946019436648 -63.69297004007188 -32.800000000000054 + endloop +endfacet +facet normal 0.4989294616193014 -0.8641711769176169 -0.06540312923014449 + outer loop + vertex -138.04336943063956 -65.84297004007189 -32.800000000000054 + vertex -134.26812936260933 -63.781877648670005 -31.233685693359433 + vertex -137.99203859888243 -65.93187764867001 -31.233685693359433 + endloop +endfacet +facet normal 0.49039264020161505 -0.8493849684870419 -0.1950903220161271 + outer loop + vertex -134.11501515210088 -64.04707924063145 -29.6941714587698 + vertex -137.99203859888243 -65.93187764867001 -31.233685693359433 + vertex -134.26812936260933 -63.781877648670005 -31.233685693359433 + endloop +endfacet +facet normal 0.49039264020161505 -0.8493849684870419 -0.1950903220161271 + outer loop + vertex -137.99203859888243 -65.93187764867001 -31.233685693359433 + vertex -134.11501515210088 -64.04707924063145 -29.6941714587698 + vertex -137.83892438837398 -66.19707924063145 -29.6941714587698 + endloop +endfacet +facet normal 0.473465064747552 -0.820065547751649 -0.3214394653031649 + outer loop + vertex -133.8627373894342 -64.48403714318997 -28.207798811618975 + vertex -137.83892438837398 -66.19707924063145 -29.6941714587698 + vertex -134.11501515210088 -64.04707924063145 -29.6941714587698 + endloop +endfacet +facet normal 0.473465064747552 -0.820065547751649 -0.3214394653031649 + outer loop + vertex -137.83892438837398 -66.19707924063145 -29.6941714587698 + vertex -133.8627373894342 -64.48403714318997 -28.207798811618975 + vertex -137.5866466257073 -66.63403714318997 -28.207798811618975 + endloop +endfacet +facet normal 0.4484363707663453 -0.7767145781291056 -0.44228869021899536 + outer loop + vertex -133.51561261707312 -65.08527488548513 -26.800000000000054 + vertex -137.5866466257073 -66.63403714318997 -28.207798811618975 + vertex -133.8627373894342 -64.48403714318997 -28.207798811618975 + endloop +endfacet +facet normal 0.4484363707663453 -0.7767145781291056 -0.44228869021899536 + outer loop + vertex -137.5866466257073 -66.63403714318997 -28.207798811618975 + vertex -133.51561261707312 -65.08527488548513 -26.800000000000054 + vertex -137.2395218533462 -67.23527488548514 -26.800000000000054 + endloop +endfacet +facet normal 0.41573480615127295 -0.7200738067288037 -0.5555702330196005 + outer loop + vertex -133.07958023611388 -65.84050512305173 -25.4948628518954 + vertex -137.2395218533462 -67.23527488548514 -26.800000000000054 + vertex -133.51561261707312 -65.08527488548513 -26.800000000000054 + endloop +endfacet +facet normal 0.41573480615127295 -0.7200738067288037 -0.5555702330196005 + outer loop + vertex -137.2395218533462 -67.23527488548514 -26.800000000000054 + vertex -133.07958023611388 -65.84050512305173 -25.4948628518954 + vertex -136.80348947238699 -67.99050512305173 -25.4948628518954 + endloop +endfacet +facet normal 0.3759199037394864 -0.6511123728531927 -0.6593458151000736 + outer loop + vertex -132.56210088148578 -66.7368056571356 -24.314718625761483 + vertex -136.80348947238699 -67.99050512305173 -25.4948628518954 + vertex -133.07958023611388 -65.84050512305173 -25.4948628518954 + endloop +endfacet +facet normal 0.3759199037394864 -0.6511123728531927 -0.6593458151000736 + outer loop + vertex -136.80348947238699 -67.99050512305173 -25.4948628518954 + vertex -132.56210088148578 -66.7368056571356 -24.314718625761483 + vertex -136.28601011775885 -68.88680565713561 -24.314718625761483 + endloop +endfacet +facet normal 0.32967290755003653 -0.5710102257556211 -0.7518398074789733 + outer loop + vertex -135.6959380046919 -69.9088405370971 -23.279759916505228 + vertex -132.56210088148578 -66.7368056571356 -24.314718625761483 + vertex -131.9720287684188 -67.7588405370971 -23.279759916505228 + endloop +endfacet +facet normal 0.32967290755003653 -0.5710102257556211 -0.7518398074789733 + outer loop + vertex -132.56210088148578 -66.7368056571356 -24.314718625761483 + vertex -135.6959380046919 -69.9088405370971 -23.279759916505228 + vertex -136.28601011775885 -68.88680565713561 -24.314718625761483 + endloop +endfacet +facet normal 0.27778511650979765 -0.4811379353814101 -0.8314696123025496 + outer loop + vertex -135.04336943063956 -71.03912246277852 -22.40769515458679 + vertex -131.9720287684188 -67.7588405370971 -23.279759916505228 + vertex -131.31946019436646 -68.88912246277852 -22.40769515458679 + endloop +endfacet +facet normal 0.27778511650979765 -0.4811379353814101 -0.8314696123025496 + outer loop + vertex -131.9720287684188 -67.7588405370971 -23.279759916505228 + vertex -135.04336943063956 -71.03912246277852 -22.40769515458679 + vertex -135.6959380046919 -69.9088405370971 -23.279759916505228 + endloop +endfacet +facet normal 0.22114434510950054 -0.3830332415362013 -0.8968727415326885 + outer loop + vertex -134.33947002483012 -72.25831199705806 -21.71344560986461 + vertex -131.31946019436646 -68.88912246277852 -22.40769515458679 + vertex -130.615560788557 -70.10831199705805 -21.71344560986461 + endloop +endfacet +facet normal 0.22114434510950054 -0.3830332415362013 -0.8968727415326885 + outer loop + vertex -131.31946019436646 -68.88912246277852 -22.40769515458679 + vertex -134.33947002483012 -72.25831199705806 -21.71344560986461 + vertex -135.04336943063956 -71.03912246277852 -22.40769515458679 + endloop +endfacet +facet normal 0.1607197326515819 -0.27837474273142676 -0.9469301294951049 + outer loop + vertex -133.5962837012547 -73.54554846898098 -21.208890084531234 + vertex -130.615560788557 -70.10831199705805 -21.71344560986461 + vertex -129.87237446498162 -71.39554846898098 -21.208890084531234 + endloop +endfacet +facet normal 0.1607197326515819 -0.27837474273142676 -0.9469301294951049 + outer loop + vertex -130.615560788557 -70.10831199705805 -21.71344560986461 + vertex -133.5962837012547 -73.54554846898098 -21.208890084531234 + vertex -134.33947002483012 -72.25831199705806 -21.71344560986461 + endloop +endfacet +facet normal 0.09754516100806387 -0.16895317489845335 -0.9807852804032307 + outer loop + vertex -132.8265265839599 -74.87880690562336 -20.90266166351433 + vertex -129.87237446498162 -71.39554846898098 -21.208890084531234 + vertex -129.1026173476868 -72.72880690562336 -20.90266166351433 + endloop +endfacet +facet normal 0.09754516100806387 -0.16895317489845335 -0.9807852804032307 + outer loop + vertex -129.87237446498162 -71.39554846898098 -21.208890084531234 + vertex -132.8265265839599 -74.87880690562336 -20.90266166351433 + vertex -133.5962837012547 -73.54554846898098 -21.208890084531234 + endloop +endfacet +facet normal 0.03270156461507213 -0.05664077140030155 -0.9978589232386036 + outer loop + vertex -132.0433694306396 -76.23527488548514 -20.80000000000005 + vertex -129.1026173476868 -72.72880690562336 -20.90266166351433 + vertex -128.31946019436646 -74.08527488548513 -20.80000000000005 + endloop +endfacet +facet normal 0.03270156461507213 -0.05664077140030155 -0.9978589232386036 + outer loop + vertex -129.1026173476868 -72.72880690562336 -20.90266166351433 + vertex -132.0433694306396 -76.23527488548514 -20.80000000000005 + vertex -132.8265265839599 -74.87880690562336 -20.90266166351433 + endloop +endfacet +facet normal -0.03270156461507213 0.05664077140030155 -0.9978589232386036 + outer loop + vertex -131.26021227731925 -77.59174286534694 -20.90266166351433 + vertex -128.31946019436646 -74.08527488548513 -20.80000000000005 + vertex -127.53630304104615 -75.44174286534694 -20.90266166351433 + endloop +endfacet +facet normal -0.03270156461507213 0.05664077140030155 -0.9978589232386036 + outer loop + vertex -128.31946019436646 -74.08527488548513 -20.80000000000005 + vertex -131.26021227731925 -77.59174286534694 -20.90266166351433 + vertex -132.0433694306396 -76.23527488548514 -20.80000000000005 + endloop +endfacet +facet normal -0.09754516100806562 0.16895317489845638 -0.98078528040323 + outer loop + vertex -130.49045516002442 -78.92500130198931 -21.208890084531237 + vertex -127.53630304104615 -75.44174286534694 -20.90266166351433 + vertex -126.76654592375135 -76.7750013019893 -21.208890084531237 + endloop +endfacet +facet normal -0.09754516100806562 0.16895317489845638 -0.98078528040323 + outer loop + vertex -127.53630304104615 -75.44174286534694 -20.90266166351433 + vertex -130.49045516002442 -78.92500130198931 -21.208890084531237 + vertex -131.26021227731925 -77.59174286534694 -20.90266166351433 + endloop +endfacet +facet normal -0.16071973265157807 0.27837474273142016 -0.9469301294951075 + outer loop + vertex -129.74726883644902 -80.21223777391226 -21.71344560986461 + vertex -126.76654592375135 -76.7750013019893 -21.208890084531237 + vertex -126.02335960017594 -78.06223777391226 -21.71344560986461 + endloop +endfacet +facet normal -0.16071973265157807 0.27837474273142016 -0.9469301294951075 + outer loop + vertex -126.76654592375135 -76.7750013019893 -21.208890084531237 + vertex -129.74726883644902 -80.21223777391226 -21.71344560986461 + vertex -130.49045516002442 -78.92500130198931 -21.208890084531237 + endloop +endfacet +facet normal -0.22114434510950196 0.3830332415362037 -0.8968727415326869 + outer loop + vertex -129.04336943063956 -81.43142730819179 -22.407695154586794 + vertex -126.02335960017594 -78.06223777391226 -21.71344560986461 + vertex -125.31946019436647 -79.28142730819178 -22.407695154586794 + endloop +endfacet +facet normal -0.22114434510950196 0.3830332415362037 -0.8968727415326869 + outer loop + vertex -126.02335960017594 -78.06223777391226 -21.71344560986461 + vertex -129.04336943063956 -81.43142730819179 -22.407695154586794 + vertex -129.74726883644902 -80.21223777391226 -21.71344560986461 + endloop +endfacet +facet normal -0.277785116509801 0.48113793538141586 -0.8314696123025452 + outer loop + vertex -128.39080085658725 -82.56170923387319 -23.279759916505235 + vertex -125.31946019436647 -79.28142730819178 -22.407695154586794 + vertex -124.66689162031415 -80.41170923387318 -23.279759916505235 + endloop +endfacet +facet normal -0.277785116509801 0.48113793538141586 -0.8314696123025452 + outer loop + vertex -125.31946019436647 -79.28142730819178 -22.407695154586794 + vertex -128.39080085658725 -82.56170923387319 -23.279759916505235 + vertex -129.04336943063956 -81.43142730819179 -22.407695154586794 + endloop +endfacet +facet normal -0.3296729075500355 0.5710102257556193 -0.7518398074789752 + outer loop + vertex -127.8007287435203 -83.5837441138347 -24.314718625761483 + vertex -124.66689162031415 -80.41170923387318 -23.279759916505235 + vertex -124.0768195072472 -81.43374411383469 -24.314718625761483 + endloop +endfacet +facet normal -0.3296729075500355 0.5710102257556193 -0.7518398074789752 + outer loop + vertex -124.66689162031415 -80.41170923387318 -23.279759916505235 + vertex -127.8007287435203 -83.5837441138347 -24.314718625761483 + vertex -128.39080085658725 -82.56170923387319 -23.279759916505235 + endloop +endfacet +facet normal -0.3759199037394879 0.6511123728531953 -0.65934581510007 + outer loop + vertex -127.8007287435203 -83.5837441138347 -24.314718625761483 + vertex -123.55934015261907 -82.33004464791856 -25.494862851895416 + vertex -127.28324938889217 -84.48004464791856 -25.494862851895416 + endloop +endfacet +facet normal -0.3759199037394879 0.6511123728531953 -0.65934581510007 + outer loop + vertex -123.55934015261907 -82.33004464791856 -25.494862851895416 + vertex -127.8007287435203 -83.5837441138347 -24.314718625761483 + vertex -124.0768195072472 -81.43374411383469 -24.314718625761483 + endloop +endfacet +facet normal -0.41573480615127234 0.7200738067288026 -0.5555702330196021 + outer loop + vertex -127.28324938889217 -84.48004464791856 -25.494862851895416 + vertex -123.12330777165984 -83.08527488548516 -26.800000000000058 + vertex -126.84721700793295 -85.23527488548515 -26.800000000000058 + endloop +endfacet +facet normal -0.41573480615127234 0.7200738067288026 -0.5555702330196021 + outer loop + vertex -123.12330777165984 -83.08527488548516 -26.800000000000058 + vertex -127.28324938889217 -84.48004464791856 -25.494862851895416 + vertex -123.55934015261907 -82.33004464791856 -25.494862851895416 + endloop +endfacet +facet normal -0.4484363707663456 0.7767145781291062 -0.4422886902189939 + outer loop + vertex -126.84721700793295 -85.23527488548515 -26.800000000000058 + vertex -122.77618299929875 -83.68651262778033 -28.207798811618986 + vertex -126.50009223557186 -85.83651262778034 -28.207798811618986 + endloop +endfacet +facet normal -0.4484363707663456 0.7767145781291062 -0.4422886902189939 + outer loop + vertex -122.77618299929875 -83.68651262778033 -28.207798811618986 + vertex -126.84721700793295 -85.23527488548515 -26.800000000000058 + vertex -123.12330777165984 -83.08527488548516 -26.800000000000058 + endloop +endfacet +facet normal -0.47346506474755173 0.8200655477516485 -0.321439465303166 + outer loop + vertex -126.50009223557186 -85.83651262778034 -28.207798811618986 + vertex -122.52390523663206 -84.12347053033885 -29.69417145876981 + vertex -126.24781447290516 -86.27347053033886 -29.69417145876981 + endloop +endfacet +facet normal -0.47346506474755173 0.8200655477516485 -0.321439465303166 + outer loop + vertex -122.52390523663206 -84.12347053033885 -29.69417145876981 + vertex -126.50009223557186 -85.83651262778034 -28.207798811618986 + vertex -122.77618299929875 -83.68651262778033 -28.207798811618986 + endloop +endfacet +facet normal -0.49039264020161505 0.8493849684870419 -0.1950903220161271 + outer loop + vertex -126.24781447290516 -86.27347053033886 -29.69417145876981 + vertex -122.37079102612361 -84.38867212230028 -31.233685693359437 + vertex -126.09470026239671 -86.53867212230028 -31.233685693359437 + endloop +endfacet +facet normal -0.49039264020161505 0.8493849684870419 -0.1950903220161271 + outer loop + vertex -122.37079102612361 -84.38867212230028 -31.233685693359437 + vertex -126.24781447290516 -86.27347053033886 -29.69417145876981 + vertex -122.52390523663206 -84.12347053033885 -29.69417145876981 + endloop +endfacet +facet normal -0.49892946161930135 0.8641711769176168 -0.06540312923014473 + outer loop + vertex -126.09470026239671 -86.53867212230028 -31.233685693359437 + vertex -122.31946019436648 -84.47757973089841 -32.800000000000054 + vertex -126.04336943063956 -86.62757973089842 -32.800000000000054 + endloop +endfacet +facet normal -0.49892946161930135 0.8641711769176168 -0.06540312923014473 + outer loop + vertex -122.31946019436648 -84.47757973089841 -32.800000000000054 + vertex -126.09470026239671 -86.53867212230028 -31.233685693359437 + vertex -122.37079102612361 -84.38867212230028 -31.233685693359437 + endloop +endfacet +facet normal -0.4989294616193014 0.8641711769176169 0.06540312923014402 + outer loop + vertex -126.04336943063956 -86.62757973089842 -32.800000000000054 + vertex -122.37079102612361 -84.38867212230028 -34.36631430664068 + vertex -126.09470026239671 -86.53867212230028 -34.36631430664068 + endloop +endfacet +facet normal -0.4989294616193014 0.8641711769176169 0.06540312923014402 + outer loop + vertex -122.37079102612361 -84.38867212230028 -34.36631430664068 + vertex -126.04336943063956 -86.62757973089842 -32.800000000000054 + vertex -122.31946019436648 -84.47757973089841 -32.800000000000054 + endloop +endfacet +facet normal -0.4903926402016149 0.8493849684870418 0.19509032201612775 + outer loop + vertex -126.09470026239671 -86.53867212230028 -34.36631430664068 + vertex -122.52390523663206 -84.12347053033885 -35.905828541230306 + vertex -126.24781447290516 -86.27347053033886 -35.905828541230306 + endloop +endfacet +facet normal -0.4903926402016149 0.8493849684870418 0.19509032201612775 + outer loop + vertex -122.52390523663206 -84.12347053033885 -35.905828541230306 + vertex -126.09470026239671 -86.53867212230028 -34.36631430664068 + vertex -122.37079102612361 -84.38867212230028 -34.36631430664068 + endloop +endfacet +facet normal -0.473465064747552 0.820065547751649 0.3214394653031649 + outer loop + vertex -126.24781447290516 -86.27347053033886 -35.905828541230306 + vertex -122.77618299929875 -83.68651262778033 -37.392201188381144 + vertex -126.50009223557186 -85.83651262778034 -37.392201188381144 + endloop +endfacet +facet normal -0.473465064747552 0.820065547751649 0.3214394653031649 + outer loop + vertex -122.77618299929875 -83.68651262778033 -37.392201188381144 + vertex -126.24781447290516 -86.27347053033886 -35.905828541230306 + vertex -122.52390523663206 -84.12347053033885 -35.905828541230306 + endloop +endfacet +facet normal -0.4484363707663453 0.7767145781291056 0.44228869021899536 + outer loop + vertex -126.50009223557186 -85.83651262778034 -37.392201188381144 + vertex -123.12330777165984 -83.08527488548516 -38.80000000000006 + vertex -126.84721700793295 -85.23527488548515 -38.80000000000006 + endloop +endfacet +facet normal -0.4484363707663453 0.7767145781291056 0.44228869021899536 + outer loop + vertex -123.12330777165984 -83.08527488548516 -38.80000000000006 + vertex -126.50009223557186 -85.83651262778034 -37.392201188381144 + vertex -122.77618299929875 -83.68651262778033 -37.392201188381144 + endloop +endfacet +facet normal -0.41573480615126907 0.720073806728797 0.5555702330196121 + outer loop + vertex -126.84721700793295 -85.23527488548515 -38.80000000000006 + vertex -123.55934015261907 -82.33004464791854 -40.10513714810471 + vertex -127.28324938889217 -84.48004464791855 -40.10513714810471 + endloop +endfacet +facet normal -0.41573480615126907 0.720073806728797 0.5555702330196121 + outer loop + vertex -123.55934015261907 -82.33004464791854 -40.10513714810471 + vertex -126.84721700793295 -85.23527488548515 -38.80000000000006 + vertex -123.12330777165984 -83.08527488548516 -38.80000000000006 + endloop +endfacet +facet normal -0.37591990373949075 0.6511123728532002 0.6593458151000637 + outer loop + vertex -127.28324938889217 -84.48004464791855 -40.10513714810471 + vertex -124.0768195072472 -81.43374411383469 -41.285281374238636 + vertex -127.8007287435203 -83.5837441138347 -41.285281374238636 + endloop +endfacet +facet normal -0.37591990373949075 0.6511123728532002 0.6593458151000637 + outer loop + vertex -124.0768195072472 -81.43374411383469 -41.285281374238636 + vertex -127.28324938889217 -84.48004464791855 -40.10513714810471 + vertex -123.55934015261907 -82.33004464791854 -40.10513714810471 + endloop +endfacet +facet normal -0.3296729075500355 0.5710102257556193 0.7518398074789752 + outer loop + vertex -128.39080085658725 -82.56170923387319 -42.32024008349488 + vertex -124.0768195072472 -81.43374411383469 -41.285281374238636 + vertex -124.66689162031415 -80.41170923387318 -42.32024008349488 + endloop +endfacet +facet normal -0.3296729075500355 0.5710102257556193 0.7518398074789752 + outer loop + vertex -124.0768195072472 -81.43374411383469 -41.285281374238636 + vertex -128.39080085658725 -82.56170923387319 -42.32024008349488 + vertex -127.8007287435203 -83.5837441138347 -41.285281374238636 + endloop +endfacet +facet normal -0.27778511650979765 0.4811379353814101 0.8314696123025496 + outer loop + vertex -129.0433694306396 -81.43142730819177 -43.192304845413325 + vertex -124.66689162031415 -80.41170923387318 -42.32024008349488 + vertex -125.31946019436647 -79.28142730819178 -43.192304845413325 + endloop +endfacet +facet normal -0.27778511650979765 0.4811379353814101 0.8314696123025496 + outer loop + vertex -124.66689162031415 -80.41170923387318 -42.32024008349488 + vertex -129.0433694306396 -81.43142730819177 -43.192304845413325 + vertex -128.39080085658725 -82.56170923387319 -42.32024008349488 + endloop +endfacet +facet normal -0.22114434510950054 0.3830332415362013 0.8968727415326885 + outer loop + vertex -129.74726883644905 -80.21223777391224 -43.8865543901355 + vertex -125.31946019436647 -79.28142730819178 -43.192304845413325 + vertex -126.02335960017594 -78.06223777391224 -43.8865543901355 + endloop +endfacet +facet normal -0.22114434510950054 0.3830332415362013 0.8968727415326885 + outer loop + vertex -125.31946019436647 -79.28142730819178 -43.192304845413325 + vertex -129.74726883644905 -80.21223777391224 -43.8865543901355 + vertex -129.0433694306396 -81.43142730819177 -43.192304845413325 + endloop +endfacet +facet normal -0.1607197326515819 0.27837474273142676 0.9469301294951049 + outer loop + vertex -130.49045516002442 -78.92500130198931 -44.391109915468874 + vertex -126.02335960017594 -78.06223777391224 -43.8865543901355 + vertex -126.76654592375135 -76.7750013019893 -44.391109915468874 + endloop +endfacet +facet normal -0.1607197326515819 0.27837474273142676 0.9469301294951049 + outer loop + vertex -126.02335960017594 -78.06223777391224 -43.8865543901355 + vertex -130.49045516002442 -78.92500130198931 -44.391109915468874 + vertex -129.74726883644905 -80.21223777391224 -43.8865543901355 + endloop +endfacet +facet normal -0.09754516100806387 0.16895317489845335 0.9807852804032307 + outer loop + vertex -131.26021227731925 -77.59174286534694 -44.69733833648578 + vertex -126.76654592375135 -76.7750013019893 -44.391109915468874 + vertex -127.53630304104615 -75.44174286534694 -44.69733833648578 + endloop +endfacet +facet normal -0.09754516100806387 0.16895317489845335 0.9807852804032307 + outer loop + vertex -126.76654592375135 -76.7750013019893 -44.391109915468874 + vertex -131.26021227731925 -77.59174286534694 -44.69733833648578 + vertex -130.49045516002442 -78.92500130198931 -44.391109915468874 + endloop +endfacet +facet normal -0.03270156461507213 0.05664077140030155 0.9978589232386036 + outer loop + vertex -132.0433694306396 -76.23527488548514 -44.800000000000054 + vertex -127.53630304104615 -75.44174286534694 -44.69733833648578 + vertex -128.31946019436646 -74.08527488548513 -44.800000000000054 + endloop +endfacet +facet normal -0.03270156461507213 0.05664077140030155 0.9978589232386036 + outer loop + vertex -127.53630304104615 -75.44174286534694 -44.69733833648578 + vertex -132.0433694306396 -76.23527488548514 -44.800000000000054 + vertex -131.26021227731925 -77.59174286534694 -44.69733833648578 + endloop +endfacet +facet normal 0.03270156461507213 -0.05664077140030155 0.9978589232386036 + outer loop + vertex -132.8265265839599 -74.87880690562336 -44.69733833648578 + vertex -128.31946019436646 -74.08527488548513 -44.800000000000054 + vertex -129.1026173476868 -72.72880690562336 -44.69733833648578 + endloop +endfacet +facet normal 0.03270156461507213 -0.05664077140030155 0.9978589232386036 + outer loop + vertex -128.31946019436646 -74.08527488548513 -44.800000000000054 + vertex -132.8265265839599 -74.87880690562336 -44.69733833648578 + vertex -132.0433694306396 -76.23527488548514 -44.800000000000054 + endloop +endfacet +facet normal 0.09754516100806387 -0.16895317489845335 0.9807852804032307 + outer loop + vertex -133.5962837012547 -73.54554846898098 -44.391109915468874 + vertex -129.1026173476868 -72.72880690562336 -44.69733833648578 + vertex -129.87237446498162 -71.39554846898098 -44.391109915468874 + endloop +endfacet +facet normal 0.09754516100806387 -0.16895317489845335 0.9807852804032307 + outer loop + vertex -129.1026173476868 -72.72880690562336 -44.69733833648578 + vertex -133.5962837012547 -73.54554846898098 -44.391109915468874 + vertex -132.8265265839599 -74.87880690562336 -44.69733833648578 + endloop +endfacet +facet normal 0.1607197326515819 -0.27837474273142676 0.9469301294951049 + outer loop + vertex -134.33947002483012 -72.25831199705806 -43.8865543901355 + vertex -129.87237446498162 -71.39554846898098 -44.391109915468874 + vertex -130.615560788557 -70.10831199705805 -43.8865543901355 + endloop +endfacet +facet normal 0.1607197326515819 -0.27837474273142676 0.9469301294951049 + outer loop + vertex -129.87237446498162 -71.39554846898098 -44.391109915468874 + vertex -134.33947002483012 -72.25831199705806 -43.8865543901355 + vertex -133.5962837012547 -73.54554846898098 -44.391109915468874 + endloop +endfacet +facet normal 0.22114434510949837 -0.3830332415361975 0.8968727415326905 + outer loop + vertex -135.04336943063956 -71.03912246277851 -43.19230484541332 + vertex -130.615560788557 -70.10831199705805 -43.8865543901355 + vertex -131.31946019436648 -68.8891224627785 -43.19230484541332 + endloop +endfacet +facet normal 0.22114434510949837 -0.3830332415361975 0.8968727415326905 + outer loop + vertex -130.615560788557 -70.10831199705805 -43.8865543901355 + vertex -135.04336943063956 -71.03912246277851 -43.19230484541332 + vertex -134.33947002483012 -72.25831199705806 -43.8865543901355 + endloop +endfacet +facet normal 0.2777851165098016 -0.4811379353814169 0.8314696123025443 + outer loop + vertex -135.6959380046919 -69.9088405370971 -42.32024008349487 + vertex -131.31946019436648 -68.8891224627785 -43.19230484541332 + vertex -131.9720287684188 -67.7588405370971 -42.32024008349487 + endloop +endfacet +facet normal 0.2777851165098016 -0.4811379353814169 0.8314696123025443 + outer loop + vertex -131.31946019436648 -68.8891224627785 -43.19230484541332 + vertex -135.6959380046919 -69.9088405370971 -42.32024008349487 + vertex -135.04336943063956 -71.03912246277851 -43.19230484541332 + endloop +endfacet +facet normal 0.3296729075500355 -0.5710102257556193 0.7518398074789752 + outer loop + vertex -136.28601011775885 -68.88680565713561 -41.28528137423862 + vertex -131.9720287684188 -67.7588405370971 -42.32024008349487 + vertex -132.56210088148578 -66.7368056571356 -41.28528137423862 + endloop +endfacet +facet normal 0.3296729075500355 -0.5710102257556193 0.7518398074789752 + outer loop + vertex -131.9720287684188 -67.7588405370971 -42.32024008349487 + vertex -136.28601011775885 -68.88680565713561 -41.28528137423862 + vertex -135.6959380046919 -69.9088405370971 -42.32024008349487 + endloop +endfacet +facet normal 0.3759199037394872 -0.651112372853194 0.6593458151000718 + outer loop + vertex -133.07958023611388 -65.84050512305173 -40.105137148104696 + vertex -136.28601011775885 -68.88680565713561 -41.28528137423862 + vertex -132.56210088148578 -66.7368056571356 -41.28528137423862 + endloop +endfacet +facet normal 0.3759199037394872 -0.651112372853194 0.6593458151000718 + outer loop + vertex -136.28601011775885 -68.88680565713561 -41.28528137423862 + vertex -133.07958023611388 -65.84050512305173 -40.105137148104696 + vertex -136.80348947238699 -67.99050512305173 -40.105137148104696 + endloop +endfacet +facet normal 0.4157348061512726 -0.7200738067288031 0.5555702330196013 + outer loop + vertex -133.51561261707312 -65.08527488548513 -38.800000000000054 + vertex -136.80348947238699 -67.99050512305173 -40.105137148104696 + vertex -133.07958023611388 -65.84050512305173 -40.105137148104696 + endloop +endfacet +facet normal 0.4157348061512726 -0.7200738067288031 0.5555702330196013 + outer loop + vertex -136.80348947238699 -67.99050512305173 -40.105137148104696 + vertex -133.51561261707312 -65.08527488548513 -38.800000000000054 + vertex -137.2395218533462 -67.23527488548514 -38.800000000000054 + endloop +endfacet +facet normal 0.4484363707663455 -0.7767145781291059 0.4422886902189947 + outer loop + vertex -133.8627373894342 -64.48403714318997 -37.39220118838113 + vertex -137.2395218533462 -67.23527488548514 -38.800000000000054 + vertex -133.51561261707312 -65.08527488548513 -38.800000000000054 + endloop +endfacet +facet normal 0.4484363707663455 -0.7767145781291059 0.4422886902189947 + outer loop + vertex -137.2395218533462 -67.23527488548514 -38.800000000000054 + vertex -133.8627373894342 -64.48403714318997 -37.39220118838113 + vertex -137.5866466257073 -66.63403714318997 -37.39220118838113 + endloop +endfacet +facet normal 0.473465064747552 -0.820065547751649 0.3214394653031649 + outer loop + vertex -134.11501515210088 -64.04707924063145 -35.9058285412303 + vertex -137.5866466257073 -66.63403714318997 -37.39220118838113 + vertex -133.8627373894342 -64.48403714318997 -37.39220118838113 + endloop +endfacet +facet normal 0.473465064747552 -0.820065547751649 0.3214394653031649 + outer loop + vertex -137.5866466257073 -66.63403714318997 -37.39220118838113 + vertex -134.11501515210088 -64.04707924063145 -35.9058285412303 + vertex -137.83892438837398 -66.19707924063145 -35.9058285412303 + endloop +endfacet +facet normal 0.49039264020161505 -0.8493849684870419 0.1950903220161271 + outer loop + vertex -134.26812936260933 -63.781877648670005 -34.36631430664067 + vertex -137.83892438837398 -66.19707924063145 -35.9058285412303 + vertex -134.11501515210088 -64.04707924063145 -35.9058285412303 + endloop +endfacet +facet normal 0.49039264020161505 -0.8493849684870419 0.1950903220161271 + outer loop + vertex -137.83892438837398 -66.19707924063145 -35.9058285412303 + vertex -134.26812936260933 -63.781877648670005 -34.36631430664067 + vertex -137.99203859888243 -65.93187764867001 -34.36631430664067 + endloop +endfacet +facet normal 0.49892946161930135 -0.8641711769176168 0.06540312923014473 + outer loop + vertex -134.31946019436648 -63.69297004007188 -32.800000000000054 + vertex -137.99203859888243 -65.93187764867001 -34.36631430664067 + vertex -134.26812936260933 -63.781877648670005 -34.36631430664067 + endloop +endfacet +facet normal 0.49892946161930135 -0.8641711769176168 0.06540312923014473 + outer loop + vertex -137.99203859888243 -65.93187764867001 -34.36631430664067 + vertex -134.31946019436648 -63.69297004007188 -32.800000000000054 + vertex -138.04336943063956 -65.84297004007189 -32.800000000000054 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -99.77635347630536 66.66842796235208 -3.0000000000000058 + vertex -107.62472898392257 53.074642826279955 -3.0000000000000058 + vertex -103.92304845413261 59.9999999999998 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -107.62472898392257 53.074642826279955 -3.0000000000000058 + vertex -99.77635347630536 66.66842796235208 -3.0000000000000058 + vertex -95.2024008349482 73.05137148104633 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -107.62472898392257 53.074642826279955 -3.0000000000000058 + vertex -95.2024008349482 73.05137148104633 -3.0000000000000058 + vertex -110.8655439013544 45.922011883810605 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -110.8655439013544 45.922011883810605 -3.0000000000000058 + vertex -95.2024008349482 73.05137148104633 -3.0000000000000058 + vertex -90.22077689747728 79.12149781200809 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -110.8655439013544 45.922011883810605 -3.0000000000000058 + vertex -90.22077689747728 79.12149781200809 -3.0000000000000058 + vertex -113.63161553941268 38.57273583637922 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -113.63161553941268 38.57273583637922 -3.0000000000000058 + vertex -90.22077689747728 79.12149781200809 -3.0000000000000058 + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -113.63161553941268 38.57273583637922 -3.0000000000000058 + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + vertex -115.9110991546882 31.05828541230235 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -115.9110991546882 31.05828541230235 -3.0000000000000058 + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + vertex -79.12149781200824 90.2207768974771 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + vertex -79.12149781200824 90.2207768974771 -3.0000000000000058 + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + vertex -118.97338336485723 15.663143066406052 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -118.97338336485723 15.663143066406052 -3.0000000000000058 + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + vertex -66.66842796235221 99.77635347630525 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + vertex -66.66842796235221 99.77635347630525 -3.0000000000000058 + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + vertex -120.0 -1.8047785488306544e-13 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -120.0 -1.8047785488306544e-13 -3.0000000000000058 + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + vertex -119.74307078863242 -7.8483755076173445 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -119.74307078863242 -7.8483755076173445 -3.0000000000000058 + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + vertex -53.07464282628009 107.62472898392238 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -119.74307078863242 -7.8483755076173445 -3.0000000000000058 + vertex -53.07464282628009 107.62472898392238 -3.0000000000000058 + vertex -118.97338336485727 -15.663143066406345 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -118.97338336485727 -15.663143066406345 -3.0000000000000058 + vertex -53.07464282628009 107.62472898392238 -3.0000000000000058 + vertex -45.922011883810725 110.86554390135421 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -118.97338336485727 -15.663143066406345 -3.0000000000000058 + vertex -45.922011883810725 110.86554390135421 -3.0000000000000058 + vertex -117.69423364838765 -23.410838641935552 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -117.69423364838765 -23.410838641935552 -3.0000000000000058 + vertex -45.922011883810725 110.86554390135421 -3.0000000000000058 + vertex -38.572735836379344 113.63161553941245 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -117.69423364838765 -23.410838641935552 -3.0000000000000058 + vertex -38.572735836379344 113.63161553941245 -3.0000000000000058 + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + vertex -38.572735836379344 113.63161553941245 -3.0000000000000058 + vertex -31.058285412302418 115.91109915468799 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + vertex -31.058285412302418 115.91109915468799 -3.0000000000000058 + vertex -113.6316155394127 -38.572735836379586 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -113.6316155394127 -38.572735836379586 -3.0000000000000058 + vertex -31.058285412302418 115.91109915468799 -3.0000000000000058 + vertex -23.41083864193531 117.69423364838741 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -113.6316155394127 -38.572735836379586 -3.0000000000000058 + vertex -23.41083864193531 117.69423364838741 -3.0000000000000058 + vertex -110.86554390135444 -45.92201188381096 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -110.86554390135444 -45.92201188381096 -3.0000000000000058 + vertex -23.41083864193531 117.69423364838741 -3.0000000000000058 + vertex -15.663143066406086 118.97338336485703 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -110.86554390135444 -45.92201188381096 -3.0000000000000058 + vertex -15.663143066406086 118.97338336485703 -3.0000000000000058 + vertex -107.62472898392265 -53.0746428262803 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -107.62472898392265 -53.0746428262803 -3.0000000000000058 + vertex -15.663143066406086 118.97338336485703 -3.0000000000000058 + vertex -7.8483755076170905 119.74307078863217 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -107.62472898392265 -53.0746428262803 -3.0000000000000058 + vertex -7.8483755076170905 119.74307078863217 -3.0000000000000058 + vertex -103.9230484541327 -60.000000000000185 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -103.9230484541327 -60.000000000000185 -3.0000000000000058 + vertex -7.8483755076170905 119.74307078863217 -3.0000000000000058 + vertex 4.511946372076636e-14 119.99999999999976 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -103.9230484541327 -60.000000000000185 -3.0000000000000058 + vertex 4.511946372076636e-14 119.99999999999976 -3.0000000000000058 + vertex -99.77635347630545 -66.66842796235247 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -99.77635347630545 -66.66842796235247 -3.0000000000000058 + vertex 4.511946372076636e-14 119.99999999999976 -3.0000000000000058 + vertex 7.848375507617226 119.74307078863215 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -99.77635347630545 -66.66842796235247 -3.0000000000000058 + vertex 7.848375507617226 119.74307078863215 -3.0000000000000058 + vertex -95.20240083494828 -73.05137148104666 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -95.20240083494828 -73.05137148104666 -3.0000000000000058 + vertex 7.848375507617226 119.74307078863215 -3.0000000000000058 + vertex 15.663143066406267 118.97338336485703 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -95.20240083494828 -73.05137148104666 -3.0000000000000058 + vertex 15.663143066406267 118.97338336485703 -3.0000000000000058 + vertex -90.22077689747731 -79.12149781200849 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -90.22077689747731 -79.12149781200849 -3.0000000000000058 + vertex 15.663143066406267 118.97338336485703 -3.0000000000000058 + vertex 23.410838641935424 117.69423364838737 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -90.22077689747731 -79.12149781200849 -3.0000000000000058 + vertex 23.410838641935424 117.69423364838737 -3.0000000000000058 + vertex -84.85281374238579 -84.85281374238586 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -84.85281374238579 -84.85281374238586 -3.0000000000000058 + vertex 23.410838641935424 117.69423364838737 -3.0000000000000058 + vertex 31.058285412302553 115.9110991546879 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -84.85281374238579 -84.85281374238586 -3.0000000000000058 + vertex 31.058285412302553 115.9110991546879 -3.0000000000000058 + vertex -79.12149781200831 -90.22077689747748 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -79.12149781200831 -90.22077689747748 -3.0000000000000058 + vertex 31.058285412302553 115.9110991546879 -3.0000000000000058 + vertex 38.57273583637948 113.63161553941242 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -79.12149781200831 -90.22077689747748 -3.0000000000000058 + vertex 38.57273583637948 113.63161553941242 -3.0000000000000058 + vertex -73.05137148104657 -95.20240083494838 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -73.05137148104657 -95.20240083494838 -3.0000000000000058 + vertex 38.57273583637948 113.63161553941242 -3.0000000000000058 + vertex 45.92201188381082 110.86554390135414 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -73.05137148104657 -95.20240083494838 -3.0000000000000058 + vertex 45.92201188381082 110.86554390135414 -3.0000000000000058 + vertex -66.66842796235233 -99.77635347630563 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -66.66842796235233 -99.77635347630563 -3.0000000000000058 + vertex 45.92201188381082 110.86554390135414 -3.0000000000000058 + vertex 53.074642826280225 107.62472898392231 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -66.66842796235233 -99.77635347630563 -3.0000000000000058 + vertex 53.074642826280225 107.62472898392231 -3.0000000000000058 + vertex -60.00000000000003 -103.92304845413288 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -60.00000000000003 -103.92304845413288 -3.0000000000000058 + vertex 53.074642826280225 107.62472898392231 -3.0000000000000058 + vertex 60.00000000000007 103.92304845413234 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -60.00000000000003 -103.92304845413288 -3.0000000000000058 + vertex 60.00000000000007 103.92304845413234 -3.0000000000000058 + vertex -53.074642826280225 -107.62472898392284 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -53.074642826280225 -107.62472898392284 -3.0000000000000058 + vertex 60.00000000000007 103.92304845413234 -3.0000000000000058 + vertex 66.66842796235235 99.77635347630513 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -53.074642826280225 -107.62472898392284 -3.0000000000000058 + vertex 66.66842796235235 99.77635347630513 -3.0000000000000058 + vertex -45.9220118838108 -110.86554390135464 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -45.9220118838108 -110.86554390135464 -3.0000000000000058 + vertex 66.66842796235235 99.77635347630513 -3.0000000000000058 + vertex 73.0513714810465 95.20240083494792 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -45.9220118838108 -110.86554390135464 -3.0000000000000058 + vertex 73.0513714810465 95.20240083494792 -3.0000000000000058 + vertex -38.57273583637951 -113.63161553941288 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -38.57273583637951 -113.63161553941288 -3.0000000000000058 + vertex 73.0513714810465 95.20240083494792 -3.0000000000000058 + vertex 79.12149781200833 90.22077689747698 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -38.57273583637951 -113.63161553941288 -3.0000000000000058 + vertex 79.12149781200833 90.22077689747698 -3.0000000000000058 + vertex -31.058285412302553 -115.91109915468842 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -31.058285412302553 -115.91109915468842 -3.0000000000000058 + vertex 79.12149781200833 90.22077689747698 -3.0000000000000058 + vertex 84.85281374238573 84.8528137423854 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -31.058285412302553 -115.91109915468842 -3.0000000000000058 + vertex 84.85281374238573 84.8528137423854 -3.0000000000000058 + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + vertex 84.85281374238573 84.8528137423854 -3.0000000000000058 + vertex 90.22077689747732 79.12149781200795 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + vertex 90.22077689747732 79.12149781200795 -3.0000000000000058 + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + vertex -15.663143066406267 -118.9733833648575 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -15.663143066406267 -118.9733833648575 -3.0000000000000058 + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + vertex -7.848375507617181 -119.74307078863266 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -7.848375507617181 -119.74307078863266 -3.0000000000000058 + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + vertex 99.77635347630545 66.66842796235197 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -7.848375507617181 -119.74307078863266 -3.0000000000000058 + vertex 99.77635347630545 66.66842796235197 -3.0000000000000058 + vertex -9.023892744153272e-14 -120.00000000000027 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -9.023892744153272e-14 -120.00000000000027 -3.0000000000000058 + vertex 99.77635347630545 66.66842796235197 -3.0000000000000058 + vertex 103.92304845413274 59.99999999999973 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex -9.023892744153272e-14 -120.00000000000027 -3.0000000000000058 + vertex 103.92304845413274 59.99999999999973 -3.0000000000000058 + vertex 7.8483755076171136 -119.74307078863269 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 7.8483755076171136 -119.74307078863269 -3.0000000000000058 + vertex 103.92304845413274 59.99999999999973 -3.0000000000000058 + vertex 107.62472898392265 53.07464282627982 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 7.8483755076171136 -119.74307078863269 -3.0000000000000058 + vertex 107.62472898392265 53.07464282627982 -3.0000000000000058 + vertex 15.663143066406086 -118.97338336485755 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 15.663143066406086 -118.97338336485755 -3.0000000000000058 + vertex 107.62472898392265 53.07464282627982 -3.0000000000000058 + vertex 110.86554390135444 45.92201188381046 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 15.663143066406086 -118.97338336485755 -3.0000000000000058 + vertex 110.86554390135444 45.92201188381046 -3.0000000000000058 + vertex 23.41083864193531 -117.69423364838794 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 23.41083864193531 -117.69423364838794 -3.0000000000000058 + vertex 110.86554390135444 45.92201188381046 -3.0000000000000058 + vertex 113.63161553941275 38.572735836379074 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 23.41083864193531 -117.69423364838794 -3.0000000000000058 + vertex 113.63161553941275 38.572735836379074 -3.0000000000000058 + vertex 31.058285412302485 -115.91109915468847 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 31.058285412302485 -115.91109915468847 -3.0000000000000058 + vertex 113.63161553941275 38.572735836379074 -3.0000000000000058 + vertex 115.91109915468824 31.058285412302236 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 31.058285412302485 -115.91109915468847 -3.0000000000000058 + vertex 115.91109915468824 31.058285412302236 -3.0000000000000058 + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 31.058285412302485 -115.91109915468847 -3.0000000000000058 + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + vertex 38.5727358363793 -113.63161553941298 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 38.5727358363793 -113.63161553941298 -3.0000000000000058 + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + vertex 118.97338336485727 15.663143066405883 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + vertex 118.97338336485727 15.663143066405883 -3.0000000000000058 + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + vertex 53.07464282628005 -107.62472898392292 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 53.07464282628005 -107.62472898392292 -3.0000000000000058 + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + vertex 59.99999999999998 -103.92304845413295 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 59.99999999999998 -103.92304845413295 -3.0000000000000058 + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + vertex 120.00000000000006 -3.158362460453645e-13 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 59.99999999999998 -103.92304845413295 -3.0000000000000058 + vertex 120.00000000000006 -3.158362460453645e-13 -3.0000000000000058 + vertex 66.66842796235217 -99.77635347630576 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 66.66842796235217 -99.77635347630576 -3.0000000000000058 + vertex 120.00000000000006 -3.158362460453645e-13 -3.0000000000000058 + vertex 119.74307078863244 -7.848375507617474 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 66.66842796235217 -99.77635347630576 -3.0000000000000058 + vertex 119.74307078863244 -7.848375507617474 -3.0000000000000058 + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + vertex 119.74307078863244 -7.848375507617474 -3.0000000000000058 + vertex 118.97338336485727 -15.66314306640647 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + vertex 118.97338336485727 -15.66314306640647 -3.0000000000000058 + vertex 117.69423364838772 -23.410838641935694 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + vertex 117.69423364838772 -23.410838641935694 -3.0000000000000058 + vertex 79.12149781200829 -90.2207768974776 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 79.12149781200829 -90.2207768974776 -3.0000000000000058 + vertex 117.69423364838772 -23.410838641935694 -3.0000000000000058 + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 79.12149781200829 -90.2207768974776 -3.0000000000000058 + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + vertex 84.85281374238565 -84.85281374238605 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 84.85281374238565 -84.85281374238605 -3.0000000000000058 + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + vertex 90.22077689747728 -79.1214978120086 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 90.22077689747728 -79.1214978120086 -3.0000000000000058 + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + vertex 113.63161553941275 -38.57273583637973 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 90.22077689747728 -79.1214978120086 -3.0000000000000058 + vertex 113.63161553941275 -38.57273583637973 -3.0000000000000058 + vertex 95.20240083494818 -73.05137148104687 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 95.20240083494818 -73.05137148104687 -3.0000000000000058 + vertex 113.63161553941275 -38.57273583637973 -3.0000000000000058 + vertex 110.86554390135449 -45.92201188381109 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 95.20240083494818 -73.05137148104687 -3.0000000000000058 + vertex 110.86554390135449 -45.92201188381109 -3.0000000000000058 + vertex 99.7763534763054 -66.66842796235262 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 99.7763534763054 -66.66842796235262 -3.0000000000000058 + vertex 110.86554390135449 -45.92201188381109 -3.0000000000000058 + vertex 107.62472898392261 -53.07464282628045 -3.0000000000000058 + endloop +endfacet +facet normal -2.648712187159291e-31 3.369258291131702e-32 -1.0 + outer loop + vertex 99.7763534763054 -66.66842796235262 -3.0000000000000058 + vertex 107.62472898392261 -53.07464282628045 -3.0000000000000058 + vertex 103.9230484541327 -60.00000000000032 -3.0000000000000058 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -107.62472898392257 53.074642826279955 -1.127986593019159e-14 + vertex -99.77635347630536 66.66842796235208 -1.127986593019159e-14 + vertex -103.92304845413261 59.9999999999998 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -99.77635347630536 66.66842796235208 -1.127986593019159e-14 + vertex -107.62472898392257 53.074642826279955 -1.127986593019159e-14 + vertex -110.8655439013544 45.922011883810605 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -99.77635347630536 66.66842796235208 -1.127986593019159e-14 + vertex -110.8655439013544 45.922011883810605 -1.127986593019159e-14 + vertex -95.2024008349482 73.05137148104633 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -95.2024008349482 73.05137148104633 -1.127986593019159e-14 + vertex -110.8655439013544 45.922011883810605 -1.127986593019159e-14 + vertex -113.63161553941268 38.57273583637922 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -95.2024008349482 73.05137148104633 -1.127986593019159e-14 + vertex -113.63161553941268 38.57273583637922 -1.127986593019159e-14 + vertex -90.22077689747728 79.12149781200809 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -90.22077689747728 79.12149781200809 -1.127986593019159e-14 + vertex -113.63161553941268 38.57273583637922 -1.127986593019159e-14 + vertex -115.9110991546882 31.05828541230235 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -90.22077689747728 79.12149781200809 -1.127986593019159e-14 + vertex -115.9110991546882 31.05828541230235 -1.127986593019159e-14 + vertex -84.85281374238566 84.85281374238551 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -84.85281374238566 84.85281374238551 -1.127986593019159e-14 + vertex -115.9110991546882 31.05828541230235 -1.127986593019159e-14 + vertex -117.69423364838764 23.410838641935243 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -84.85281374238566 84.85281374238551 -1.127986593019159e-14 + vertex -117.69423364838764 23.410838641935243 -1.127986593019159e-14 + vertex -79.12149781200824 90.2207768974771 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -79.12149781200824 90.2207768974771 -1.127986593019159e-14 + vertex -117.69423364838764 23.410838641935243 -1.127986593019159e-14 + vertex -118.97338336485723 15.663143066406052 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -79.12149781200824 90.2207768974771 -1.127986593019159e-14 + vertex -118.97338336485723 15.663143066406052 -1.127986593019159e-14 + vertex -73.05137148104644 95.202400834948 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -73.05137148104644 95.202400834948 -1.127986593019159e-14 + vertex -118.97338336485723 15.663143066406052 -1.127986593019159e-14 + vertex -119.74307078863242 7.848375507616978 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -73.05137148104644 95.202400834948 -1.127986593019159e-14 + vertex -119.74307078863242 7.848375507616978 -1.127986593019159e-14 + vertex -66.66842796235221 99.77635347630525 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -66.66842796235221 99.77635347630525 -1.127986593019159e-14 + vertex -119.74307078863242 7.848375507616978 -1.127986593019159e-14 + vertex -120.0 -1.8047785488306544e-13 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -66.66842796235221 99.77635347630525 -1.127986593019159e-14 + vertex -120.0 -1.8047785488306544e-13 -1.127986593019159e-14 + vertex -59.999999999999915 103.92304845413243 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -59.999999999999915 103.92304845413243 -1.127986593019159e-14 + vertex -120.0 -1.8047785488306544e-13 -1.127986593019159e-14 + vertex -119.74307078863242 -7.8483755076173445 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -59.999999999999915 103.92304845413243 -1.127986593019159e-14 + vertex -119.74307078863242 -7.8483755076173445 -1.127986593019159e-14 + vertex -53.07464282628009 107.62472898392238 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -53.07464282628009 107.62472898392238 -1.127986593019159e-14 + vertex -119.74307078863242 -7.8483755076173445 -1.127986593019159e-14 + vertex -118.97338336485727 -15.663143066406345 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -53.07464282628009 107.62472898392238 -1.127986593019159e-14 + vertex -118.97338336485727 -15.663143066406345 -1.127986593019159e-14 + vertex -45.922011883810725 110.86554390135421 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -45.922011883810725 110.86554390135421 -1.127986593019159e-14 + vertex -118.97338336485727 -15.663143066406345 -1.127986593019159e-14 + vertex -117.69423364838765 -23.410838641935552 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -45.922011883810725 110.86554390135421 -1.127986593019159e-14 + vertex -117.69423364838765 -23.410838641935552 -1.127986593019159e-14 + vertex -38.572735836379344 113.63161553941245 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -38.572735836379344 113.63161553941245 -1.127986593019159e-14 + vertex -117.69423364838765 -23.410838641935552 -1.127986593019159e-14 + vertex -115.91109915468822 -31.058285412302638 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -38.572735836379344 113.63161553941245 -1.127986593019159e-14 + vertex -115.91109915468822 -31.058285412302638 -1.127986593019159e-14 + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + vertex -115.91109915468822 -31.058285412302638 -1.127986593019159e-14 + vertex -113.6316155394127 -38.572735836379586 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + vertex -113.6316155394127 -38.572735836379586 -1.127986593019159e-14 + vertex -23.41083864193531 117.69423364838741 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -23.41083864193531 117.69423364838741 -1.127986593019159e-14 + vertex -113.6316155394127 -38.572735836379586 -1.127986593019159e-14 + vertex -110.86554390135444 -45.92201188381096 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -23.41083864193531 117.69423364838741 -1.127986593019159e-14 + vertex -110.86554390135444 -45.92201188381096 -1.127986593019159e-14 + vertex -15.663143066406086 118.97338336485703 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -15.663143066406086 118.97338336485703 -1.127986593019159e-14 + vertex -110.86554390135444 -45.92201188381096 -1.127986593019159e-14 + vertex -107.62472898392265 -53.0746428262803 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -15.663143066406086 118.97338336485703 -1.127986593019159e-14 + vertex -107.62472898392265 -53.0746428262803 -1.127986593019159e-14 + vertex -7.8483755076170905 119.74307078863217 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -7.8483755076170905 119.74307078863217 -1.127986593019159e-14 + vertex -107.62472898392265 -53.0746428262803 -1.127986593019159e-14 + vertex -103.9230484541327 -60.000000000000185 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex -7.8483755076170905 119.74307078863217 -1.127986593019159e-14 + vertex -103.9230484541327 -60.000000000000185 -1.127986593019159e-14 + vertex 4.511946372076636e-14 119.99999999999976 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 4.511946372076636e-14 119.99999999999976 -1.127986593019159e-14 + vertex -103.9230484541327 -60.000000000000185 -1.127986593019159e-14 + vertex -99.77635347630545 -66.66842796235247 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 4.511946372076636e-14 119.99999999999976 -1.127986593019159e-14 + vertex -99.77635347630545 -66.66842796235247 -1.127986593019159e-14 + vertex 7.848375507617226 119.74307078863215 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 7.848375507617226 119.74307078863215 -1.127986593019159e-14 + vertex -99.77635347630545 -66.66842796235247 -1.127986593019159e-14 + vertex -95.20240083494828 -73.05137148104666 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 7.848375507617226 119.74307078863215 -1.127986593019159e-14 + vertex -95.20240083494828 -73.05137148104666 -1.127986593019159e-14 + vertex 15.663143066406267 118.97338336485703 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 15.663143066406267 118.97338336485703 -1.127986593019159e-14 + vertex -95.20240083494828 -73.05137148104666 -1.127986593019159e-14 + vertex -90.22077689747731 -79.12149781200849 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 15.663143066406267 118.97338336485703 -1.127986593019159e-14 + vertex -90.22077689747731 -79.12149781200849 -1.127986593019159e-14 + vertex 23.410838641935424 117.69423364838737 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 23.410838641935424 117.69423364838737 -1.127986593019159e-14 + vertex -90.22077689747731 -79.12149781200849 -1.127986593019159e-14 + vertex -84.85281374238579 -84.85281374238586 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 23.410838641935424 117.69423364838737 -1.127986593019159e-14 + vertex -84.85281374238579 -84.85281374238586 -1.127986593019159e-14 + vertex 31.058285412302553 115.9110991546879 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 31.058285412302553 115.9110991546879 -1.127986593019159e-14 + vertex -84.85281374238579 -84.85281374238586 -1.127986593019159e-14 + vertex -79.12149781200831 -90.22077689747748 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 31.058285412302553 115.9110991546879 -1.127986593019159e-14 + vertex -79.12149781200831 -90.22077689747748 -1.127986593019159e-14 + vertex 38.57273583637948 113.63161553941242 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 38.57273583637948 113.63161553941242 -1.127986593019159e-14 + vertex -79.12149781200831 -90.22077689747748 -1.127986593019159e-14 + vertex -73.05137148104657 -95.20240083494838 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 38.57273583637948 113.63161553941242 -1.127986593019159e-14 + vertex -73.05137148104657 -95.20240083494838 -1.127986593019159e-14 + vertex 45.92201188381082 110.86554390135414 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 45.92201188381082 110.86554390135414 -1.127986593019159e-14 + vertex -73.05137148104657 -95.20240083494838 -1.127986593019159e-14 + vertex -66.66842796235233 -99.77635347630563 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 45.92201188381082 110.86554390135414 -1.127986593019159e-14 + vertex -66.66842796235233 -99.77635347630563 -1.127986593019159e-14 + vertex 53.074642826280225 107.62472898392231 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 53.074642826280225 107.62472898392231 -1.127986593019159e-14 + vertex -66.66842796235233 -99.77635347630563 -1.127986593019159e-14 + vertex -60.00000000000003 -103.92304845413288 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 53.074642826280225 107.62472898392231 -1.127986593019159e-14 + vertex -60.00000000000003 -103.92304845413288 -1.127986593019159e-14 + vertex 60.00000000000007 103.92304845413234 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 60.00000000000007 103.92304845413234 -1.127986593019159e-14 + vertex -60.00000000000003 -103.92304845413288 -1.127986593019159e-14 + vertex -53.074642826280225 -107.62472898392284 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 60.00000000000007 103.92304845413234 -1.127986593019159e-14 + vertex -53.074642826280225 -107.62472898392284 -1.127986593019159e-14 + vertex 66.66842796235235 99.77635347630513 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 66.66842796235235 99.77635347630513 -1.127986593019159e-14 + vertex -53.074642826280225 -107.62472898392284 -1.127986593019159e-14 + vertex -45.9220118838108 -110.86554390135464 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 66.66842796235235 99.77635347630513 -1.127986593019159e-14 + vertex -45.9220118838108 -110.86554390135464 -1.127986593019159e-14 + vertex 73.0513714810465 95.20240083494792 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 73.0513714810465 95.20240083494792 -1.127986593019159e-14 + vertex -45.9220118838108 -110.86554390135464 -1.127986593019159e-14 + vertex -38.57273583637951 -113.63161553941288 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 73.0513714810465 95.20240083494792 -1.127986593019159e-14 + vertex -38.57273583637951 -113.63161553941288 -1.127986593019159e-14 + vertex 79.12149781200833 90.22077689747698 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 79.12149781200833 90.22077689747698 -1.127986593019159e-14 + vertex -38.57273583637951 -113.63161553941288 -1.127986593019159e-14 + vertex -31.058285412302553 -115.91109915468842 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 79.12149781200833 90.22077689747698 -1.127986593019159e-14 + vertex -31.058285412302553 -115.91109915468842 -1.127986593019159e-14 + vertex 84.85281374238573 84.8528137423854 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 84.85281374238573 84.8528137423854 -1.127986593019159e-14 + vertex -31.058285412302553 -115.91109915468842 -1.127986593019159e-14 + vertex -23.410838641935378 -117.69423364838791 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 84.85281374238573 84.8528137423854 -1.127986593019159e-14 + vertex -23.410838641935378 -117.69423364838791 -1.127986593019159e-14 + vertex 90.22077689747732 79.12149781200795 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 90.22077689747732 79.12149781200795 -1.127986593019159e-14 + vertex -23.410838641935378 -117.69423364838791 -1.127986593019159e-14 + vertex -15.663143066406267 -118.9733833648575 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 90.22077689747732 79.12149781200795 -1.127986593019159e-14 + vertex -15.663143066406267 -118.9733833648575 -1.127986593019159e-14 + vertex 95.20240083494826 73.05137148104622 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 95.20240083494826 73.05137148104622 -1.127986593019159e-14 + vertex -15.663143066406267 -118.9733833648575 -1.127986593019159e-14 + vertex -7.848375507617181 -119.74307078863266 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 95.20240083494826 73.05137148104622 -1.127986593019159e-14 + vertex -7.848375507617181 -119.74307078863266 -1.127986593019159e-14 + vertex 99.77635347630545 66.66842796235197 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 99.77635347630545 66.66842796235197 -1.127986593019159e-14 + vertex -7.848375507617181 -119.74307078863266 -1.127986593019159e-14 + vertex -9.023892744153272e-14 -120.00000000000027 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 99.77635347630545 66.66842796235197 -1.127986593019159e-14 + vertex -9.023892744153272e-14 -120.00000000000027 -1.127986593019159e-14 + vertex 103.92304845413274 59.99999999999973 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 103.92304845413274 59.99999999999973 -1.127986593019159e-14 + vertex -9.023892744153272e-14 -120.00000000000027 -1.127986593019159e-14 + vertex 7.8483755076171136 -119.74307078863269 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 103.92304845413274 59.99999999999973 -1.127986593019159e-14 + vertex 7.8483755076171136 -119.74307078863269 -1.127986593019159e-14 + vertex 107.62472898392265 53.07464282627982 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 107.62472898392265 53.07464282627982 -1.127986593019159e-14 + vertex 7.8483755076171136 -119.74307078863269 -1.127986593019159e-14 + vertex 15.663143066406086 -118.97338336485755 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 107.62472898392265 53.07464282627982 -1.127986593019159e-14 + vertex 15.663143066406086 -118.97338336485755 -1.127986593019159e-14 + vertex 110.86554390135444 45.92201188381046 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 110.86554390135444 45.92201188381046 -1.127986593019159e-14 + vertex 15.663143066406086 -118.97338336485755 -1.127986593019159e-14 + vertex 23.41083864193531 -117.69423364838794 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 110.86554390135444 45.92201188381046 -1.127986593019159e-14 + vertex 23.41083864193531 -117.69423364838794 -1.127986593019159e-14 + vertex 113.63161553941275 38.572735836379074 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 113.63161553941275 38.572735836379074 -1.127986593019159e-14 + vertex 23.41083864193531 -117.69423364838794 -1.127986593019159e-14 + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 113.63161553941275 38.572735836379074 -1.127986593019159e-14 + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + vertex 115.91109915468824 31.058285412302236 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 115.91109915468824 31.058285412302236 -1.127986593019159e-14 + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + vertex 38.5727358363793 -113.63161553941298 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 115.91109915468824 31.058285412302236 -1.127986593019159e-14 + vertex 38.5727358363793 -113.63161553941298 -1.127986593019159e-14 + vertex 117.69423364838768 23.410838641935086 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 117.69423364838768 23.410838641935086 -1.127986593019159e-14 + vertex 38.5727358363793 -113.63161553941298 -1.127986593019159e-14 + vertex 45.92201188381077 -110.86554390135471 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 117.69423364838768 23.410838641935086 -1.127986593019159e-14 + vertex 45.92201188381077 -110.86554390135471 -1.127986593019159e-14 + vertex 118.97338336485727 15.663143066405883 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 118.97338336485727 15.663143066405883 -1.127986593019159e-14 + vertex 45.92201188381077 -110.86554390135471 -1.127986593019159e-14 + vertex 53.07464282628005 -107.62472898392292 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 118.97338336485727 15.663143066405883 -1.127986593019159e-14 + vertex 53.07464282628005 -107.62472898392292 -1.127986593019159e-14 + vertex 119.74307078863244 7.848375507616888 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 119.74307078863244 7.848375507616888 -1.127986593019159e-14 + vertex 53.07464282628005 -107.62472898392292 -1.127986593019159e-14 + vertex 59.99999999999998 -103.92304845413295 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 119.74307078863244 7.848375507616888 -1.127986593019159e-14 + vertex 59.99999999999998 -103.92304845413295 -1.127986593019159e-14 + vertex 120.00000000000006 -3.158362460453645e-13 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 120.00000000000006 -3.158362460453645e-13 -1.127986593019159e-14 + vertex 59.99999999999998 -103.92304845413295 -1.127986593019159e-14 + vertex 66.66842796235217 -99.77635347630576 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 120.00000000000006 -3.158362460453645e-13 -1.127986593019159e-14 + vertex 66.66842796235217 -99.77635347630576 -1.127986593019159e-14 + vertex 119.74307078863244 -7.848375507617474 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 119.74307078863244 -7.848375507617474 -1.127986593019159e-14 + vertex 66.66842796235217 -99.77635347630576 -1.127986593019159e-14 + vertex 73.05137148104646 -95.20240083494856 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 119.74307078863244 -7.848375507617474 -1.127986593019159e-14 + vertex 73.05137148104646 -95.20240083494856 -1.127986593019159e-14 + vertex 118.97338336485727 -15.66314306640647 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 118.97338336485727 -15.66314306640647 -1.127986593019159e-14 + vertex 73.05137148104646 -95.20240083494856 -1.127986593019159e-14 + vertex 79.12149781200829 -90.2207768974776 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 118.97338336485727 -15.66314306640647 -1.127986593019159e-14 + vertex 79.12149781200829 -90.2207768974776 -1.127986593019159e-14 + vertex 117.69423364838772 -23.410838641935694 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 117.69423364838772 -23.410838641935694 -1.127986593019159e-14 + vertex 79.12149781200829 -90.2207768974776 -1.127986593019159e-14 + vertex 84.85281374238565 -84.85281374238605 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 117.69423364838772 -23.410838641935694 -1.127986593019159e-14 + vertex 84.85281374238565 -84.85281374238605 -1.127986593019159e-14 + vertex 115.91109915468824 -31.058285412302777 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 115.91109915468824 -31.058285412302777 -1.127986593019159e-14 + vertex 84.85281374238565 -84.85281374238605 -1.127986593019159e-14 + vertex 90.22077689747728 -79.1214978120086 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 115.91109915468824 -31.058285412302777 -1.127986593019159e-14 + vertex 90.22077689747728 -79.1214978120086 -1.127986593019159e-14 + vertex 113.63161553941275 -38.57273583637973 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 113.63161553941275 -38.57273583637973 -1.127986593019159e-14 + vertex 90.22077689747728 -79.1214978120086 -1.127986593019159e-14 + vertex 95.20240083494818 -73.05137148104687 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 113.63161553941275 -38.57273583637973 -1.127986593019159e-14 + vertex 95.20240083494818 -73.05137148104687 -1.127986593019159e-14 + vertex 110.86554390135449 -45.92201188381109 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 110.86554390135449 -45.92201188381109 -1.127986593019159e-14 + vertex 95.20240083494818 -73.05137148104687 -1.127986593019159e-14 + vertex 99.7763534763054 -66.66842796235262 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 110.86554390135449 -45.92201188381109 -1.127986593019159e-14 + vertex 99.7763534763054 -66.66842796235262 -1.127986593019159e-14 + vertex 107.62472898392261 -53.07464282628045 -1.127986593019159e-14 + endloop +endfacet +facet normal 2.945263319516136e-31 -3.9761054813468024e-32 1.0 + outer loop + vertex 107.62472898392261 -53.07464282628045 -1.127986593019159e-14 + vertex 99.7763534763054 -66.66842796235262 -1.127986593019159e-14 + vertex 103.9230484541327 -60.00000000000032 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.4713967368259995 -0.8819212643483543 1.037726320584038e-31 + outer loop + vertex -53.074642826280225 -107.62472898392284 -1.127986593019159e-14 + vertex -60.00000000000003 -103.92304845413288 -3.0000000000000058 + vertex -53.074642826280225 -107.62472898392284 -3.0000000000000058 + endloop +endfacet +facet normal -0.4713967368259995 -0.8819212643483543 1.037726320584038e-31 + outer loop + vertex -60.00000000000003 -103.92304845413288 -3.0000000000000058 + vertex -53.074642826280225 -107.62472898392284 -1.127986593019159e-14 + vertex -60.00000000000003 -103.92304845413288 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.41270702980439355 -0.9108638249211765 8.533618118863724e-32 + outer loop + vertex -45.9220118838108 -110.86554390135464 -1.127986593019159e-14 + vertex -53.074642826280225 -107.62472898392284 -3.0000000000000058 + vertex -45.9220118838108 -110.86554390135464 -3.0000000000000058 + endloop +endfacet +facet normal -0.41270702980439355 -0.9108638249211765 8.533618118863724e-32 + outer loop + vertex -53.074642826280225 -107.62472898392284 -3.0000000000000058 + vertex -45.9220118838108 -110.86554390135464 -1.127986593019159e-14 + vertex -53.074642826280225 -107.62472898392284 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.7730104533627369 -0.6343932841636455 2.02447787244254e-31 + outer loop + vertex -90.22077689747731 -79.12149781200849 -1.127986593019159e-14 + vertex -95.20240083494828 -73.05137148104666 -3.0000000000000058 + vertex -90.22077689747731 -79.12149781200849 -3.0000000000000058 + endloop +endfacet +facet normal -0.7730104533627369 -0.6343932841636455 2.02447787244254e-31 + outer loop + vertex -95.20240083494828 -73.05137148104666 -3.0000000000000058 + vertex -90.22077689747731 -79.12149781200849 -1.127986593019159e-14 + vertex -95.20240083494828 -73.05137148104666 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.35225004792123515 -0.9359059267573251 6.653430768997389e-32 + outer loop + vertex -38.57273583637951 -113.63161553941288 -1.127986593019159e-14 + vertex -45.9220118838108 -110.86554390135464 -3.0000000000000058 + vertex -38.57273583637951 -113.63161553941288 -3.0000000000000058 + endloop +endfacet +facet normal -0.35225004792123515 -0.9359059267573251 6.653430768997389e-32 + outer loop + vertex -45.9220118838108 -110.86554390135464 -3.0000000000000058 + vertex -38.57273583637951 -113.63161553941288 -1.127986593019159e-14 + vertex -45.9220118838108 -110.86554390135464 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.29028467725446355 -0.9569403357322085 4.74475240712483e-32 + outer loop + vertex -31.058285412302553 -115.91109915468842 -1.127986593019159e-14 + vertex -38.57273583637951 -113.63161553941288 -3.0000000000000058 + vertex -31.058285412302553 -115.91109915468842 -3.0000000000000058 + endloop +endfacet +facet normal -0.29028467725446355 -0.9569403357322085 4.74475240712483e-32 + outer loop + vertex -38.57273583637951 -113.63161553941288 -3.0000000000000058 + vertex -31.058285412302553 -115.91109915468842 -1.127986593019159e-14 + vertex -38.57273583637951 -113.63161553941288 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.22707626303437195 -0.9738769792773341 2.815756287017262e-32 + outer loop + vertex -23.410838641935378 -117.69423364838791 -1.127986593019159e-14 + vertex -31.058285412302553 -115.91109915468842 -3.0000000000000058 + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + endloop +endfacet +facet normal -0.22707626303437195 -0.9738769792773341 2.815756287017262e-32 + outer loop + vertex -31.058285412302553 -115.91109915468842 -3.0000000000000058 + vertex -23.410838641935378 -117.69423364838791 -1.127986593019159e-14 + vertex -31.058285412302553 -115.91109915468842 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.6343932841636468 -0.7730104533627359 1.56109815991917e-31 + outer loop + vertex -73.05137148104657 -95.20240083494838 -1.127986593019159e-14 + vertex -79.12149781200831 -90.22077689747748 -3.0000000000000058 + vertex -73.05137148104657 -95.20240083494838 -3.0000000000000058 + endloop +endfacet +facet normal -0.6343932841636468 -0.7730104533627359 1.56109815991917e-31 + outer loop + vertex -79.12149781200831 -90.22077689747748 -3.0000000000000058 + vertex -73.05137148104657 -95.20240083494838 -1.127986593019159e-14 + vertex -79.12149781200831 -90.22077689747748 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.5280678506503689 -0.8492021815265783 1.2176471258623075e-31 + outer loop + vertex -60.00000000000003 -103.92304845413288 -1.127986593019159e-14 + vertex -66.66842796235233 -99.77635347630563 -3.0000000000000058 + vertex -60.00000000000003 -103.92304845413288 -3.0000000000000058 + endloop +endfacet +facet normal -0.5280678506503689 -0.8492021815265783 1.2176471258623075e-31 + outer loop + vertex -66.66842796235233 -99.77635347630563 -3.0000000000000058 + vertex -60.00000000000003 -103.92304845413288 -1.127986593019159e-14 + vertex -66.66842796235233 -99.77635347630563 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.7298640726978364 -0.6835923020228706 1.8778383716416334e-31 + outer loop + vertex -84.85281374238579 -84.85281374238586 -1.127986593019159e-14 + vertex -90.22077689747731 -79.12149781200849 -3.0000000000000058 + vertex -84.85281374238579 -84.85281374238586 -3.0000000000000058 + endloop +endfacet +facet normal -0.7298640726978364 -0.6835923020228706 1.8778383716416334e-31 + outer loop + vertex -90.22077689747731 -79.12149781200849 -3.0000000000000058 + vertex -84.85281374238579 -84.85281374238586 -1.127986593019159e-14 + vertex -90.22077689747731 -79.12149781200849 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.8128466845916165 -0.5824776968678006 2.1624482481901564e-31 + outer loop + vertex -95.20240083494828 -73.05137148104666 -1.127986593019159e-14 + vertex -99.77635347630545 -66.66842796235247 -3.0000000000000058 + vertex -95.20240083494828 -73.05137148104666 -3.0000000000000058 + endloop +endfacet +facet normal -0.8128466845916165 -0.5824776968678006 2.1624482481901564e-31 + outer loop + vertex -99.77635347630545 -66.66842796235247 -3.0000000000000058 + vertex -95.20240083494828 -73.05137148104666 -1.127986593019159e-14 + vertex -99.77635347630545 -66.66842796235247 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.8492021815265774 -0.5280678506503704 1.2534323679698897e-31 + outer loop + vertex -99.77635347630545 -66.66842796235247 -1.127986593019159e-14 + vertex -103.9230484541327 -60.000000000000185 -3.0000000000000058 + vertex -99.77635347630545 -66.66842796235247 -3.0000000000000058 + endloop +endfacet +facet normal -0.8492021815265774 -0.5280678506503704 1.2534323679698897e-31 + outer loop + vertex -103.9230484541327 -60.000000000000185 -3.0000000000000058 + vertex -99.77635347630545 -66.66842796235247 -1.127986593019159e-14 + vertex -103.9230484541327 -60.000000000000185 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.6835923020228708 -0.7298640726978363 1.7231576786423605e-31 + outer loop + vertex -79.12149781200831 -90.22077689747748 -1.127986593019159e-14 + vertex -84.85281374238579 -84.85281374238586 -3.0000000000000058 + vertex -79.12149781200831 -90.22077689747748 -3.0000000000000058 + endloop +endfacet +facet normal -0.6835923020228708 -0.7298640726978363 1.7231576786423605e-31 + outer loop + vertex -84.85281374238579 -84.85281374238586 -3.0000000000000058 + vertex -79.12149781200831 -90.22077689747748 -1.127986593019159e-14 + vertex -84.85281374238579 -84.85281374238586 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.5824776968678035 -0.8128466845916144 1.3923537792110507e-31 + outer loop + vertex -66.66842796235233 -99.77635347630563 -1.127986593019159e-14 + vertex -73.05137148104657 -95.20240083494838 -3.0000000000000058 + vertex -66.66842796235233 -99.77635347630563 -3.0000000000000058 + endloop +endfacet +facet normal -0.5824776968678035 -0.8128466845916144 1.3923537792110507e-31 + outer loop + vertex -73.05137148104657 -95.20240083494838 -3.0000000000000058 + vertex -66.66842796235233 -99.77635347630563 -1.127986593019159e-14 + vertex -73.05137148104657 -95.20240083494838 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.995184726672197 0.09801714032955847 -2.8921084227172825e-31 + outer loop + vertex 118.97338336485727 15.663143066405883 -3.0000000000000058 + vertex 119.74307078863244 7.848375507616888 -1.127986593019159e-14 + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + endloop +endfacet +facet normal 0.995184726672197 0.09801714032955847 -2.8921084227172825e-31 + outer loop + vertex 119.74307078863244 7.848375507616888 -1.127986593019159e-14 + vertex 118.97338336485727 15.663143066405883 -3.0000000000000058 + vertex 118.97338336485727 15.663143066405883 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.3522500479212335 -0.9359059267573258 -1.4095952139806853e-31 + outer loop + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + vertex 38.5727358363793 -113.63161553941298 -1.127986593019159e-14 + vertex 38.5727358363793 -113.63161553941298 -3.0000000000000058 + endloop +endfacet +facet normal 0.3522500479212335 -0.9359059267573258 -1.4095952139806853e-31 + outer loop + vertex 38.5727358363793 -113.63161553941298 -1.127986593019159e-14 + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + vertex 45.92201188381077 -110.86554390135471 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.7298640726978363 -0.6835923020228707 -2.421445391457556e-31 + outer loop + vertex 90.22077689747728 -79.1214978120086 -3.0000000000000058 + vertex 84.85281374238565 -84.85281374238605 -1.127986593019159e-14 + vertex 84.85281374238565 -84.85281374238605 -3.0000000000000058 + endloop +endfacet +facet normal 0.7298640726978363 -0.6835923020228707 -2.421445391457556e-31 + outer loop + vertex 84.85281374238565 -84.85281374238605 -1.127986593019159e-14 + vertex 90.22077689747728 -79.1214978120086 -3.0000000000000058 + vertex 90.22077689747728 -79.1214978120086 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9866433320848789 -0.16289547339459018 -2.970693373899851e-31 + outer loop + vertex 118.97338336485727 -15.66314306640647 -3.0000000000000058 + vertex 117.69423364838772 -23.410838641935694 -1.127986593019159e-14 + vertex 117.69423364838772 -23.410838641935694 -3.0000000000000058 + endloop +endfacet +facet normal 0.9866433320848789 -0.16289547339459018 -2.970693373899851e-31 + outer loop + vertex 117.69423364838772 -23.410838641935694 -1.127986593019159e-14 + vertex 118.97338336485727 -15.66314306640647 -3.0000000000000058 + vertex 118.97338336485727 -15.66314306640647 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.5280678506503682 -0.8492021815265789 -1.892950615610203e-31 + outer loop + vertex 66.66842796235217 -99.77635347630576 -3.0000000000000058 + vertex 59.99999999999998 -103.92304845413295 -1.127986593019159e-14 + vertex 59.99999999999998 -103.92304845413295 -3.0000000000000058 + endloop +endfacet +facet normal 0.5280678506503682 -0.8492021815265789 -1.892950615610203e-31 + outer loop + vertex 59.99999999999998 -103.92304845413295 -1.127986593019159e-14 + vertex 66.66842796235217 -99.77635347630576 -3.0000000000000058 + vertex 66.66842796235217 -99.77635347630576 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9569403357322082 0.29028467725446544 -2.7030210201592815e-31 + outer loop + vertex 113.63161553941275 38.572735836379074 -1.127986593019159e-14 + vertex 115.91109915468824 31.058285412302236 -3.0000000000000058 + vertex 113.63161553941275 38.572735836379074 -3.0000000000000058 + endloop +endfacet +facet normal 0.9569403357322082 0.29028467725446544 -2.7030210201592815e-31 + outer loop + vertex 115.91109915468824 31.058285412302236 -3.0000000000000058 + vertex 113.63161553941275 38.572735836379074 -1.127986593019159e-14 + vertex 115.91109915468824 31.058285412302236 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.6835923020228709 -0.7298640726978359 -2.3035609866607536e-31 + outer loop + vertex 84.85281374238565 -84.85281374238605 -3.0000000000000058 + vertex 79.12149781200829 -90.2207768974776 -1.127986593019159e-14 + vertex 79.12149781200829 -90.2207768974776 -3.0000000000000058 + endloop +endfacet +facet normal 0.6835923020228709 -0.7298640726978359 -2.3035609866607536e-31 + outer loop + vertex 79.12149781200829 -90.2207768974776 -1.127986593019159e-14 + vertex 84.85281374238565 -84.85281374238605 -3.0000000000000058 + vertex 84.85281374238565 -84.85281374238605 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9866433320848786 0.1628954733945909 -2.841155456969688e-31 + outer loop + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + vertex 118.97338336485727 15.663143066405883 -1.127986593019159e-14 + vertex 118.97338336485727 15.663143066405883 -3.0000000000000058 + endloop +endfacet +facet normal 0.9866433320848786 0.1628954733945909 -2.841155456969688e-31 + outer loop + vertex 118.97338336485727 15.663143066405883 -1.127986593019159e-14 + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + vertex 117.69423364838768 23.410838641935086 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.6343932841636456 -0.7730104533627369 -2.175812380069957e-31 + outer loop + vertex 79.12149781200829 -90.2207768974776 -3.0000000000000058 + vertex 73.05137148104646 -95.20240083494856 -1.127986593019159e-14 + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + endloop +endfacet +facet normal 0.6343932841636456 -0.7730104533627369 -2.175812380069957e-31 + outer loop + vertex 73.05137148104646 -95.20240083494856 -1.127986593019159e-14 + vertex 79.12149781200829 -90.2207768974776 -3.0000000000000058 + vertex 79.12149781200829 -90.2207768974776 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.0980171403295601 -0.9951847266721969 -6.843822327639126e-32 + outer loop + vertex 15.663143066406086 -118.97338336485755 -1.127986593019159e-14 + vertex 7.8483755076171136 -119.74307078863269 -3.0000000000000058 + vertex 15.663143066406086 -118.97338336485755 -3.0000000000000058 + endloop +endfacet +facet normal 0.0980171403295601 -0.9951847266721969 -6.843822327639126e-32 + outer loop + vertex 7.8483755076171136 -119.74307078863269 -3.0000000000000058 + vertex 15.663143066406086 -118.97338336485755 -1.127986593019159e-14 + vertex 7.8483755076171136 -119.74307078863269 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.4127070298043942 -0.910863824921176 -1.5776999412922945e-31 + outer loop + vertex 53.07464282628005 -107.62472898392292 -3.0000000000000058 + vertex 45.92201188381077 -110.86554390135471 -1.127986593019159e-14 + vertex 45.92201188381077 -110.86554390135471 -3.0000000000000058 + endloop +endfacet +facet normal 0.4127070298043942 -0.910863824921176 -1.5776999412922945e-31 + outer loop + vertex 45.92201188381077 -110.86554390135471 -1.127986593019159e-14 + vertex 53.07464282628005 -107.62472898392292 -3.0000000000000058 + vertex 53.07464282628005 -107.62472898392292 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9994645874763656 -0.03271908282177698 -2.9566958411046957e-31 + outer loop + vertex 120.00000000000006 -3.158362460453645e-13 -3.0000000000000058 + vertex 119.74307078863244 -7.848375507617474 -1.127986593019159e-14 + vertex 119.74307078863244 -7.848375507617474 -3.0000000000000058 + endloop +endfacet +facet normal 0.9994645874763656 -0.03271908282177698 -2.9566958411046957e-31 + outer loop + vertex 119.74307078863244 -7.848375507617474 -1.127986593019159e-14 + vertex 120.00000000000006 -3.158362460453645e-13 -3.0000000000000058 + vertex 120.00000000000006 -3.158362460453645e-13 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.8128466845916142 -0.5824776968678037 -2.625646800845816e-31 + outer loop + vertex 99.7763534763054 -66.66842796235262 -3.0000000000000058 + vertex 95.20240083494818 -73.05137148104687 -1.127986593019159e-14 + vertex 95.20240083494818 -73.05137148104687 -3.0000000000000058 + endloop +endfacet +facet normal 0.8128466845916142 -0.5824776968678037 -2.625646800845816e-31 + outer loop + vertex 95.20240083494818 -73.05137148104687 -1.127986593019159e-14 + vertex 99.7763534763054 -66.66842796235262 -3.0000000000000058 + vertex 99.7763534763054 -66.66842796235262 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.8492021815265786 -0.5280678506503688 -2.7110893836527095e-31 + outer loop + vertex 103.9230484541327 -60.00000000000032 -3.0000000000000058 + vertex 99.7763534763054 -66.66842796235262 -1.127986593019159e-14 + vertex 99.7763534763054 -66.66842796235262 -3.0000000000000058 + endloop +endfacet +facet normal 0.8492021815265786 -0.5280678506503688 -2.7110893836527095e-31 + outer loop + vertex 99.7763534763054 -66.66842796235262 -1.127986593019159e-14 + vertex 103.9230484541327 -60.00000000000032 -3.0000000000000058 + vertex 103.9230484541327 -60.00000000000032 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9569403357322088 -0.2902846772544624 -2.933861519435775e-31 + outer loop + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + vertex 113.63161553941275 -38.57273583637973 -1.127986593019159e-14 + vertex 113.63161553941275 -38.57273583637973 -3.0000000000000058 + endloop +endfacet +facet normal 0.9569403357322088 -0.2902846772544624 -2.933861519435775e-31 + outer loop + vertex 113.63161553941275 -38.57273583637973 -1.127986593019159e-14 + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + vertex 115.91109915468824 -31.058285412302777 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9738769792773351 0.22707626303436773 -2.77803622737324e-31 + outer loop + vertex 115.91109915468824 31.058285412302236 -3.0000000000000058 + vertex 117.69423364838768 23.410838641935086 -1.127986593019159e-14 + vertex 117.69423364838768 23.410838641935086 -3.0000000000000058 + endloop +endfacet +facet normal 0.9738769792773351 0.22707626303436773 -2.77803622737324e-31 + outer loop + vertex 117.69423364838768 23.410838641935086 -1.127986593019159e-14 + vertex 115.91109915468824 31.058285412302236 -3.0000000000000058 + vertex 115.91109915468824 31.058285412302236 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.16289547339459012 -0.9866433320848789 8.747026662060707e-33 + outer loop + vertex -15.663143066406267 -118.9733833648575 -1.127986593019159e-14 + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + vertex -15.663143066406267 -118.9733833648575 -3.0000000000000058 + endloop +endfacet +facet normal -0.16289547339459012 -0.9866433320848789 8.747026662060707e-33 + outer loop + vertex -23.410838641935378 -117.69423364838791 -3.0000000000000058 + vertex -15.663143066406267 -118.9733833648575 -1.127986593019159e-14 + vertex -23.410838641935378 -117.69423364838791 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9108638249211753 -0.4127070298043959 -2.8468304809540664e-31 + outer loop + vertex 110.86554390135449 -45.92201188381109 -3.0000000000000058 + vertex 107.62472898392261 -53.07464282628045 -1.127986593019159e-14 + vertex 107.62472898392261 -53.07464282628045 -3.0000000000000058 + endloop +endfacet +facet normal 0.9108638249211753 -0.4127070298043959 -2.8468304809540664e-31 + outer loop + vertex 107.62472898392261 -53.07464282628045 -1.127986593019159e-14 + vertex 110.86554390135449 -45.92201188381109 -3.0000000000000058 + vertex 110.86554390135449 -45.92201188381109 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9359059267573258 -0.35225004792123343 -2.8965477312305345e-31 + outer loop + vertex 113.63161553941275 -38.57273583637973 -3.0000000000000058 + vertex 110.86554390135449 -45.92201188381109 -1.127986593019159e-14 + vertex 110.86554390135449 -45.92201188381109 -3.0000000000000058 + endloop +endfacet +facet normal 0.9359059267573258 -0.35225004792123343 -2.8965477312305345e-31 + outer loop + vertex 110.86554390135449 -45.92201188381109 -1.127986593019159e-14 + vertex 113.63161553941275 -38.57273583637973 -3.0000000000000058 + vertex 113.63161553941275 -38.57273583637973 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.032719082821776824 -0.9994645874763657 -4.93763976950869e-32 + outer loop + vertex 7.8483755076171136 -119.74307078863269 -1.127986593019159e-14 + vertex -9.023892744153272e-14 -120.00000000000027 -3.0000000000000058 + vertex 7.8483755076171136 -119.74307078863269 -3.0000000000000058 + endloop +endfacet +facet normal 0.032719082821776824 -0.9994645874763657 -4.93763976950869e-32 + outer loop + vertex -9.023892744153272e-14 -120.00000000000027 -3.0000000000000058 + vertex 7.8483755076171136 -119.74307078863269 -1.127986593019159e-14 + vertex -9.023892744153272e-14 -120.00000000000027 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.22707626303437195 -0.9738769792773341 -1.0560231477941403e-31 + outer loop + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + vertex 23.41083864193531 -117.69423364838794 -3.0000000000000058 + vertex 31.058285412302485 -115.91109915468847 -3.0000000000000058 + endloop +endfacet +facet normal 0.22707626303437195 -0.9738769792773341 -1.0560231477941403e-31 + outer loop + vertex 23.41083864193531 -117.69423364838794 -3.0000000000000058 + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + vertex 23.41083864193531 -117.69423364838794 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.4713967368259969 -0.8819212643483556 -1.739048715242389e-31 + outer loop + vertex 59.99999999999998 -103.92304845413295 -3.0000000000000058 + vertex 53.07464282628005 -107.62472898392292 -1.127986593019159e-14 + vertex 53.07464282628005 -107.62472898392292 -3.0000000000000058 + endloop +endfacet +facet normal 0.4713967368259969 -0.8819212643483556 -1.739048715242389e-31 + outer loop + vertex 53.07464282628005 -107.62472898392292 -1.127986593019159e-14 + vertex 59.99999999999998 -103.92304845413295 -3.0000000000000058 + vertex 59.99999999999998 -103.92304845413295 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.7730104533627359 -0.6343932841636467 -2.5289607953410717e-31 + outer loop + vertex 95.20240083494818 -73.05137148104687 -3.0000000000000058 + vertex 90.22077689747728 -79.1214978120086 -1.127986593019159e-14 + vertex 90.22077689747728 -79.1214978120086 -3.0000000000000058 + endloop +endfacet +facet normal 0.7730104533627359 -0.6343932841636467 -2.5289607953410717e-31 + outer loop + vertex 90.22077689747728 -79.1214978120086 -1.127986593019159e-14 + vertex 95.20240083494818 -73.05137148104687 -3.0000000000000058 + vertex 95.20240083494818 -73.05137148104687 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.29028467725446083 -0.9569403357322094 -1.2354543835578116e-31 + outer loop + vertex 38.5727358363793 -113.63161553941298 -3.0000000000000058 + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + vertex 31.058285412302485 -115.91109915468847 -3.0000000000000058 + endloop +endfacet +facet normal 0.29028467725446083 -0.9569403357322094 -1.2354543835578116e-31 + outer loop + vertex 31.058285412302485 -115.91109915468847 -1.127986593019159e-14 + vertex 38.5727358363793 -113.63161553941298 -3.0000000000000058 + vertex 38.5727358363793 -113.63161553941298 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.8819212643483554 -0.47139673682599703 -2.7849226655047886e-31 + outer loop + vertex 107.62472898392261 -53.07464282628045 -3.0000000000000058 + vertex 103.9230484541327 -60.00000000000032 -1.127986593019159e-14 + vertex 103.9230484541327 -60.00000000000032 -3.0000000000000058 + endloop +endfacet +facet normal 0.8819212643483554 -0.47139673682599703 -2.7849226655047886e-31 + outer loop + vertex 103.9230484541327 -60.00000000000032 -1.127986593019159e-14 + vertex 107.62472898392261 -53.07464282628045 -3.0000000000000058 + vertex 107.62472898392261 -53.07464282628045 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9738769792773336 -0.2270762630343735 -2.9586120622001774e-31 + outer loop + vertex 117.69423364838772 -23.410838641935694 -3.0000000000000058 + vertex 115.91109915468824 -31.058285412302777 -1.127986593019159e-14 + vertex 115.91109915468824 -31.058285412302777 -3.0000000000000058 + endloop +endfacet +facet normal 0.9738769792773336 -0.2270762630343735 -2.9586120622001774e-31 + outer loop + vertex 115.91109915468824 -31.058285412302777 -1.127986593019159e-14 + vertex 117.69423364838772 -23.410838641935694 -3.0000000000000058 + vertex 117.69423364838772 -23.410838641935694 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.09801714032956083 -0.9951847266721969 -1.0700965657087255e-32 + outer loop + vertex -7.848375507617181 -119.74307078863266 -1.127986593019159e-14 + vertex -15.663143066406267 -118.9733833648575 -3.0000000000000058 + vertex -7.848375507617181 -119.74307078863266 -3.0000000000000058 + endloop +endfacet +facet normal -0.09801714032956083 -0.9951847266721969 -1.0700965657087255e-32 + outer loop + vertex -15.663143066406267 -118.9733833648575 -3.0000000000000058 + vertex -7.848375507617181 -119.74307078863266 -1.127986593019159e-14 + vertex -15.663143066406267 -118.9733833648575 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.16289547339458849 -0.9866433320848792 -8.720698587879935e-32 + outer loop + vertex 23.41083864193531 -117.69423364838794 -1.127986593019159e-14 + vertex 15.663143066406086 -118.97338336485755 -3.0000000000000058 + vertex 23.41083864193531 -117.69423364838794 -3.0000000000000058 + endloop +endfacet +facet normal 0.16289547339458849 -0.9866433320848792 -8.720698587879935e-32 + outer loop + vertex 15.663143066406086 -118.97338336485755 -3.0000000000000058 + vertex 23.41083864193531 -117.69423364838794 -1.127986593019159e-14 + vertex 15.663143066406086 -118.97338336485755 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.5824776968677995 -0.8128466845916171 -2.038746610830898e-31 + outer loop + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + vertex 66.66842796235217 -99.77635347630576 -1.127986593019159e-14 + vertex 66.66842796235217 -99.77635347630576 -3.0000000000000058 + endloop +endfacet +facet normal 0.5824776968677995 -0.8128466845916171 -2.038746610830898e-31 + outer loop + vertex 66.66842796235217 -99.77635347630576 -1.127986593019159e-14 + vertex 73.05137148104646 -95.20240083494856 -3.0000000000000058 + vertex 73.05137148104646 -95.20240083494856 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.032719082821779155 -0.9994645874763656 -3.010313479844827e-32 + outer loop + vertex -9.023892744153272e-14 -120.00000000000027 -1.127986593019159e-14 + vertex -7.848375507617181 -119.74307078863266 -3.0000000000000058 + vertex -9.023892744153272e-14 -120.00000000000027 -3.0000000000000058 + endloop +endfacet +facet normal -0.032719082821779155 -0.9994645874763656 -3.010313479844827e-32 + outer loop + vertex -7.848375507617181 -119.74307078863266 -3.0000000000000058 + vertex -9.023892744153272e-14 -120.00000000000027 -1.127986593019159e-14 + vertex -7.848375507617181 -119.74307078863266 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9951847266721968 -0.09801714032956063 -2.9700537205033417e-31 + outer loop + vertex 119.74307078863244 -7.848375507617474 -3.0000000000000058 + vertex 118.97338336485727 -15.66314306640647 -1.127986593019159e-14 + vertex 118.97338336485727 -15.66314306640647 -3.0000000000000058 + endloop +endfacet +facet normal 0.9951847266721968 -0.09801714032956063 -2.9700537205033417e-31 + outer loop + vertex 118.97338336485727 -15.66314306640647 -1.127986593019159e-14 + vertex 119.74307078863244 -7.848375507617474 -3.0000000000000058 + vertex 119.74307078863244 -7.848375507617474 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9994645874763657 0.03271908282177687 -2.9306769361942347e-31 + outer loop + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + vertex 120.00000000000006 -3.158362460453645e-13 -1.127986593019159e-14 + vertex 120.00000000000006 -3.158362460453645e-13 -3.0000000000000058 + endloop +endfacet +facet normal 0.9994645874763657 0.03271908282177687 -2.9306769361942347e-31 + outer loop + vertex 120.00000000000006 -3.158362460453645e-13 -1.127986593019159e-14 + vertex 119.74307078863244 7.848375507616888 -3.0000000000000058 + vertex 119.74307078863244 7.848375507616888 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.5280678506503641 0.8492021815265814 1.8929506156101917e-31 + outer loop + vertex -59.999999999999915 103.92304845413243 -1.127986593019159e-14 + vertex -66.66842796235221 99.77635347630525 -3.0000000000000058 + vertex -66.66842796235221 99.77635347630525 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.5280678506503641 0.8492021815265814 1.8929506156101917e-31 + outer loop + vertex -66.66842796235221 99.77635347630525 -3.0000000000000058 + vertex -59.999999999999915 103.92304845413243 -1.127986593019159e-14 + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + endloop +endfacet +facet normal -0.634393284163642 0.7730104533627398 2.175812380069947e-31 + outer loop + vertex -73.05137148104644 95.202400834948 -1.127986593019159e-14 + vertex -79.12149781200824 90.2207768974771 -3.0000000000000058 + vertex -79.12149781200824 90.2207768974771 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.634393284163642 0.7730104533627398 2.175812380069947e-31 + outer loop + vertex -79.12149781200824 90.2207768974771 -3.0000000000000058 + vertex -73.05137148104644 95.202400834948 -1.127986593019159e-14 + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + endloop +endfacet +facet normal 0.8819212643483569 0.4713967368259942 -2.4100580356682253e-31 + outer loop + vertex 103.92304845413274 59.99999999999973 -1.127986593019159e-14 + vertex 107.62472898392265 53.07464282627982 -3.0000000000000058 + vertex 103.92304845413274 59.99999999999973 -3.0000000000000058 + endloop +endfacet +facet normal 0.8819212643483569 0.4713967368259942 -2.4100580356682253e-31 + outer loop + vertex 107.62472898392265 53.07464282627982 -3.0000000000000058 + vertex 103.92304845413274 59.99999999999973 -1.127986593019159e-14 + vertex 107.62472898392265 53.07464282627982 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.09801714032955872 0.9951847266721972 6.843822327639085e-32 + outer loop + vertex -15.663143066406086 118.97338336485703 -1.127986593019159e-14 + vertex -7.8483755076170905 119.74307078863217 -3.0000000000000058 + vertex -15.663143066406086 118.97338336485703 -3.0000000000000058 + endloop +endfacet +facet normal -0.09801714032955872 0.9951847266721972 6.843822327639085e-32 + outer loop + vertex -7.8483755076170905 119.74307078863217 -3.0000000000000058 + vertex -15.663143066406086 118.97338336485703 -1.127986593019159e-14 + vertex -7.8483755076170905 119.74307078863217 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.6835923020228726 0.7298640726978346 2.3035609866607575e-31 + outer loop + vertex -79.12149781200824 90.2207768974771 -1.127986593019159e-14 + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + vertex -84.85281374238566 84.85281374238551 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.6835923020228726 0.7298640726978346 2.3035609866607575e-31 + outer loop + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + vertex -79.12149781200824 90.2207768974771 -1.127986593019159e-14 + vertex -79.12149781200824 90.2207768974771 -3.0000000000000058 + endloop +endfacet +facet normal 0.6343932841636458 0.7730104533627369 -1.561098159919167e-31 + outer loop + vertex 73.0513714810465 95.20240083494792 -1.127986593019159e-14 + vertex 79.12149781200833 90.22077689747698 -3.0000000000000058 + vertex 73.0513714810465 95.20240083494792 -3.0000000000000058 + endloop +endfacet +facet normal 0.6343932841636458 0.7730104533627369 -1.561098159919167e-31 + outer loop + vertex 79.12149781200833 90.22077689747698 -3.0000000000000058 + vertex 73.0513714810465 95.20240083494792 -1.127986593019159e-14 + vertex 79.12149781200833 90.22077689747698 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.7298640726978385 0.6835923020228685 -1.877838371641641e-31 + outer loop + vertex 84.85281374238573 84.8528137423854 -1.127986593019159e-14 + vertex 90.22077689747732 79.12149781200795 -3.0000000000000058 + vertex 84.85281374238573 84.8528137423854 -3.0000000000000058 + endloop +endfacet +facet normal 0.7298640726978385 0.6835923020228685 -1.877838371641641e-31 + outer loop + vertex 90.22077689747732 79.12149781200795 -3.0000000000000058 + vertex 84.85281374238573 84.8528137423854 -1.127986593019159e-14 + vertex 90.22077689747732 79.12149781200795 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.7730104533627331 0.6343932841636502 -2.0244778724425268e-31 + outer loop + vertex 90.22077689747732 79.12149781200795 -1.127986593019159e-14 + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + vertex 90.22077689747732 79.12149781200795 -3.0000000000000058 + endloop +endfacet +facet normal 0.7730104533627331 0.6343932841636502 -2.0244778724425268e-31 + outer loop + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + vertex 90.22077689747732 79.12149781200795 -1.127986593019159e-14 + vertex 95.20240083494826 73.05137148104622 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.9108638249211756 0.4127070298043953 -2.5186371442749437e-31 + outer loop + vertex 107.62472898392265 53.07464282627982 -1.127986593019159e-14 + vertex 110.86554390135444 45.92201188381046 -3.0000000000000058 + vertex 107.62472898392265 53.07464282627982 -3.0000000000000058 + endloop +endfacet +facet normal 0.9108638249211756 0.4127070298043953 -2.5186371442749437e-31 + outer loop + vertex 110.86554390135444 45.92201188381046 -3.0000000000000058 + vertex 107.62472898392265 53.07464282627982 -1.127986593019159e-14 + vertex 110.86554390135444 45.92201188381046 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.35225004792123865 0.935905926757324 -6.653430768997498e-32 + outer loop + vertex 38.57273583637948 113.63161553941242 -1.127986593019159e-14 + vertex 45.92201188381082 110.86554390135414 -3.0000000000000058 + vertex 38.57273583637948 113.63161553941242 -3.0000000000000058 + endloop +endfacet +facet normal 0.35225004792123865 0.935905926757324 -6.653430768997498e-32 + outer loop + vertex 45.92201188381082 110.86554390135414 -3.0000000000000058 + vertex 38.57273583637948 113.63161553941242 -1.127986593019159e-14 + vertex 45.92201188381082 110.86554390135414 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.5824776968678067 0.8128466845916119 -1.392353779211061e-31 + outer loop + vertex 66.66842796235235 99.77635347630513 -1.127986593019159e-14 + vertex 73.0513714810465 95.20240083494792 -3.0000000000000058 + vertex 66.66842796235235 99.77635347630513 -3.0000000000000058 + endloop +endfacet +facet normal 0.5824776968678067 0.8128466845916119 -1.392353779211061e-31 + outer loop + vertex 73.0513714810465 95.20240083494792 -3.0000000000000058 + vertex 66.66842796235235 99.77635347630513 -1.127986593019159e-14 + vertex 73.0513714810465 95.20240083494792 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.4713967368259996 0.881921264348354 -1.0377263205840382e-31 + outer loop + vertex 53.074642826280225 107.62472898392231 -1.127986593019159e-14 + vertex 60.00000000000007 103.92304845413234 -3.0000000000000058 + vertex 53.074642826280225 107.62472898392231 -3.0000000000000058 + endloop +endfacet +facet normal 0.4713967368259996 0.881921264348354 -1.0377263205840382e-31 + outer loop + vertex 60.00000000000007 103.92304845413234 -3.0000000000000058 + vertex 53.074642826280225 107.62472898392231 -1.127986593019159e-14 + vertex 60.00000000000007 103.92304845413234 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.03271908282177683 0.9994645874763658 3.010313479844895e-32 + outer loop + vertex 4.511946372076636e-14 119.99999999999976 -1.127986593019159e-14 + vertex 7.848375507617226 119.74307078863215 -3.0000000000000058 + vertex 4.511946372076636e-14 119.99999999999976 -3.0000000000000058 + endloop +endfacet +facet normal 0.03271908282177683 0.9994645874763658 3.010313479844895e-32 + outer loop + vertex 7.848375507617226 119.74307078863215 -3.0000000000000058 + vertex 4.511946372076636e-14 119.99999999999976 -1.127986593019159e-14 + vertex 7.848375507617226 119.74307078863215 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.16289547339459015 0.9866433320848789 8.720698587879981e-32 + outer loop + vertex -23.41083864193531 117.69423364838741 -1.127986593019159e-14 + vertex -15.663143066406086 118.97338336485703 -3.0000000000000058 + vertex -23.41083864193531 117.69423364838741 -3.0000000000000058 + endloop +endfacet +facet normal -0.16289547339459015 0.9866433320848789 8.720698587879981e-32 + outer loop + vertex -15.663143066406086 118.97338336485703 -3.0000000000000058 + vertex -23.41083864193531 117.69423364838741 -1.127986593019159e-14 + vertex -15.663143066406086 118.97338336485703 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.7298640726978336 0.6835923020228738 2.421445391457549e-31 + outer loop + vertex -84.85281374238566 84.85281374238551 -1.127986593019159e-14 + vertex -90.22077689747728 79.12149781200809 -3.0000000000000058 + vertex -90.22077689747728 79.12149781200809 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.7298640726978336 0.6835923020228738 2.421445391457549e-31 + outer loop + vertex -90.22077689747728 79.12149781200809 -3.0000000000000058 + vertex -84.85281374238566 84.85281374238551 -1.127986593019159e-14 + vertex -84.85281374238566 84.85281374238551 -3.0000000000000058 + endloop +endfacet +facet normal -0.35225004792123193 0.9359059267573264 1.4095952139806818e-31 + outer loop + vertex -38.572735836379344 113.63161553941245 -1.127986593019159e-14 + vertex -45.922011883810725 110.86554390135421 -3.0000000000000058 + vertex -45.922011883810725 110.86554390135421 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.35225004792123193 0.9359059267573264 1.4095952139806818e-31 + outer loop + vertex -45.922011883810725 110.86554390135421 -3.0000000000000058 + vertex -38.572735836379344 113.63161553941245 -1.127986593019159e-14 + vertex -38.572735836379344 113.63161553941245 -3.0000000000000058 + endloop +endfacet +facet normal -0.5824776968678059 0.8128466845916127 2.0387466108309157e-31 + outer loop + vertex -66.66842796235221 99.77635347630525 -1.127986593019159e-14 + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + vertex -73.05137148104644 95.202400834948 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.5824776968678059 0.8128466845916127 2.0387466108309157e-31 + outer loop + vertex -73.05137148104644 95.202400834948 -3.0000000000000058 + vertex -66.66842796235221 99.77635347630525 -1.127986593019159e-14 + vertex -66.66842796235221 99.77635347630525 -3.0000000000000058 + endloop +endfacet +facet normal -0.2270762630343709 0.9738769792773343 1.056023147794137e-31 + outer loop + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + vertex -23.41083864193531 117.69423364838741 -3.0000000000000058 + vertex -31.058285412302418 115.91109915468799 -3.0000000000000058 + endloop +endfacet +facet normal -0.2270762630343709 0.9738769792773343 1.056023147794137e-31 + outer loop + vertex -23.41083864193531 117.69423364838741 -3.0000000000000058 + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + vertex -23.41083864193531 117.69423364838741 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.47139673682599736 0.8819212643483552 1.73904871524239e-31 + outer loop + vertex -53.07464282628009 107.62472898392238 -1.127986593019159e-14 + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + vertex -59.999999999999915 103.92304845413243 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.47139673682599736 0.8819212643483552 1.73904871524239e-31 + outer loop + vertex -59.999999999999915 103.92304845413243 -3.0000000000000058 + vertex -53.07464282628009 107.62472898392238 -1.127986593019159e-14 + vertex -53.07464282628009 107.62472898392238 -3.0000000000000058 + endloop +endfacet +facet normal 0.8492021815265764 0.5280678506503718 -2.291158688553911e-31 + outer loop + vertex 99.77635347630545 66.66842796235197 -1.127986593019159e-14 + vertex 103.92304845413274 59.99999999999973 -3.0000000000000058 + vertex 99.77635347630545 66.66842796235197 -3.0000000000000058 + endloop +endfacet +facet normal 0.8492021815265764 0.5280678506503718 -2.291158688553911e-31 + outer loop + vertex 103.92304845413274 59.99999999999973 -3.0000000000000058 + vertex 99.77635347630545 66.66842796235197 -1.127986593019159e-14 + vertex 103.92304845413274 59.99999999999973 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.09801714032955905 0.9951847266721972 1.0700965657087824e-32 + outer loop + vertex 7.848375507617226 119.74307078863215 -1.127986593019159e-14 + vertex 15.663143066406267 118.97338336485703 -3.0000000000000058 + vertex 7.848375507617226 119.74307078863215 -3.0000000000000058 + endloop +endfacet +facet normal 0.09801714032955905 0.9951847266721972 1.0700965657087824e-32 + outer loop + vertex 15.663143066406267 118.97338336485703 -3.0000000000000058 + vertex 7.848375507617226 119.74307078863215 -1.127986593019159e-14 + vertex 15.663143066406267 118.97338336485703 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.2902846772544625 0.9569403357322088 1.235454383557816e-31 + outer loop + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + vertex -38.572735836379344 113.63161553941245 -3.0000000000000058 + vertex -38.572735836379344 113.63161553941245 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.2902846772544625 0.9569403357322088 1.235454383557816e-31 + outer loop + vertex -38.572735836379344 113.63161553941245 -3.0000000000000058 + vertex -31.058285412302418 115.91109915468799 -1.127986593019159e-14 + vertex -31.058285412302418 115.91109915468799 -3.0000000000000058 + endloop +endfacet +facet normal 0.6835923020228695 0.7298640726978374 -1.7231576786423557e-31 + outer loop + vertex 79.12149781200833 90.22077689747698 -1.127986593019159e-14 + vertex 84.85281374238573 84.8528137423854 -3.0000000000000058 + vertex 79.12149781200833 90.22077689747698 -3.0000000000000058 + endloop +endfacet +facet normal 0.6835923020228695 0.7298640726978374 -1.7231576786423557e-31 + outer loop + vertex 84.85281374238573 84.8528137423854 -3.0000000000000058 + vertex 79.12149781200833 90.22077689747698 -1.127986593019159e-14 + vertex 84.85281374238573 84.8528137423854 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.8128466845916191 0.5824776968677967 -2.162448248190166e-31 + outer loop + vertex 95.20240083494826 73.05137148104622 -1.127986593019159e-14 + vertex 99.77635347630545 66.66842796235197 -3.0000000000000058 + vertex 95.20240083494826 73.05137148104622 -3.0000000000000058 + endloop +endfacet +facet normal 0.8128466845916191 0.5824776968677967 -2.162448248190166e-31 + outer loop + vertex 99.77635347630545 66.66842796235197 -3.0000000000000058 + vertex 95.20240083494826 73.05137148104622 -1.127986593019159e-14 + vertex 99.77635347630545 66.66842796235197 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.29028467725446033 0.9569403357322096 -4.7447524071247334e-32 + outer loop + vertex 31.058285412302553 115.9110991546879 -1.127986593019159e-14 + vertex 38.57273583637948 113.63161553941242 -3.0000000000000058 + vertex 31.058285412302553 115.9110991546879 -3.0000000000000058 + endloop +endfacet +facet normal 0.29028467725446033 0.9569403357322096 -4.7447524071247334e-32 + outer loop + vertex 38.57273583637948 113.63161553941242 -3.0000000000000058 + vertex 31.058285412302553 115.9110991546879 -1.127986593019159e-14 + vertex 38.57273583637948 113.63161553941242 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.16289547339459526 0.986643332084878 -8.747026662062238e-33 + outer loop + vertex 15.663143066406267 118.97338336485703 -1.127986593019159e-14 + vertex 23.410838641935424 117.69423364838737 -3.0000000000000058 + vertex 15.663143066406267 118.97338336485703 -3.0000000000000058 + endloop +endfacet +facet normal 0.16289547339459526 0.986643332084878 -8.747026662062238e-33 + outer loop + vertex 23.410838641935424 117.69423364838737 -3.0000000000000058 + vertex 15.663143066406267 118.97338336485703 -1.127986593019159e-14 + vertex 23.410838641935424 117.69423364838737 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.4127070298043962 0.9108638249211751 1.5776999412923e-31 + outer loop + vertex -45.922011883810725 110.86554390135421 -1.127986593019159e-14 + vertex -53.07464282628009 107.62472898392238 -3.0000000000000058 + vertex -53.07464282628009 107.62472898392238 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.4127070298043962 0.9108638249211751 1.5776999412923e-31 + outer loop + vertex -53.07464282628009 107.62472898392238 -3.0000000000000058 + vertex -45.922011883810725 110.86554390135421 -1.127986593019159e-14 + vertex -45.922011883810725 110.86554390135421 -3.0000000000000058 + endloop +endfacet +facet normal 0.9359059267573262 0.3522500479212327 -2.6164310619616785e-31 + outer loop + vertex 110.86554390135444 45.92201188381046 -1.127986593019159e-14 + vertex 113.63161553941275 38.572735836379074 -3.0000000000000058 + vertex 110.86554390135444 45.92201188381046 -3.0000000000000058 + endloop +endfacet +facet normal 0.9359059267573262 0.3522500479212327 -2.6164310619616785e-31 + outer loop + vertex 113.63161553941275 38.572735836379074 -3.0000000000000058 + vertex 110.86554390135444 45.92201188381046 -1.127986593019159e-14 + vertex 113.63161553941275 38.572735836379074 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.4127070298043904 0.9108638249211778 -8.533618118863625e-32 + outer loop + vertex 45.92201188381082 110.86554390135414 -1.127986593019159e-14 + vertex 53.074642826280225 107.62472898392231 -3.0000000000000058 + vertex 45.92201188381082 110.86554390135414 -3.0000000000000058 + endloop +endfacet +facet normal 0.4127070298043904 0.9108638249211778 -8.533618118863625e-32 + outer loop + vertex 53.074642826280225 107.62472898392231 -3.0000000000000058 + vertex 45.92201188381082 110.86554390135414 -1.127986593019159e-14 + vertex 53.074642826280225 107.62472898392231 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.2270762630343699 0.9738769792773345 -2.8157562870171983e-32 + outer loop + vertex 23.410838641935424 117.69423364838737 -1.127986593019159e-14 + vertex 31.058285412302553 115.9110991546879 -3.0000000000000058 + vertex 23.410838641935424 117.69423364838737 -3.0000000000000058 + endloop +endfacet +facet normal 0.2270762630343699 0.9738769792773345 -2.8157562870171983e-32 + outer loop + vertex 31.058285412302553 115.9110991546879 -3.0000000000000058 + vertex 23.410838641935424 117.69423364838737 -1.127986593019159e-14 + vertex 31.058285412302553 115.9110991546879 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.03271908282177621 0.9994645874763657 4.937639769508677e-32 + outer loop + vertex -7.8483755076170905 119.74307078863217 -1.127986593019159e-14 + vertex 4.511946372076636e-14 119.99999999999976 -3.0000000000000058 + vertex -7.8483755076170905 119.74307078863217 -3.0000000000000058 + endloop +endfacet +facet normal -0.03271908282177621 0.9994645874763657 4.937639769508677e-32 + outer loop + vertex 4.511946372076636e-14 119.99999999999976 -3.0000000000000058 + vertex -7.8483755076170905 119.74307078863217 -1.127986593019159e-14 + vertex 4.511946372076636e-14 119.99999999999976 -1.127986593019159e-14 + endloop +endfacet +facet normal 0.5280678506503665 0.84920218152658 -1.2176471258622998e-31 + outer loop + vertex 60.00000000000007 103.92304845413234 -1.127986593019159e-14 + vertex 66.66842796235235 99.77635347630513 -3.0000000000000058 + vertex 60.00000000000007 103.92304845413234 -3.0000000000000058 + endloop +endfacet +facet normal 0.5280678506503665 0.84920218152658 -1.2176471258622998e-31 + outer loop + vertex 66.66842796235235 99.77635347630513 -3.0000000000000058 + vertex 60.00000000000007 103.92304845413234 -1.127986593019159e-14 + vertex 66.66842796235235 99.77635347630513 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9994645874763657 0.03271908282177632 2.9566958411046957e-31 + outer loop + vertex -119.74307078863242 7.848375507616978 -1.127986593019159e-14 + vertex -120.0 -1.8047785488306544e-13 -3.0000000000000058 + vertex -120.0 -1.8047785488306544e-13 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9994645874763657 0.03271908282177632 2.9566958411046957e-31 + outer loop + vertex -120.0 -1.8047785488306544e-13 -3.0000000000000058 + vertex -119.74307078863242 7.848375507616978 -1.127986593019159e-14 + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + endloop +endfacet +facet normal -0.910863824921173 0.4127070298044008 2.846830480954061e-31 + outer loop + vertex -107.62472898392257 53.074642826279955 -1.127986593019159e-14 + vertex -110.8655439013544 45.922011883810605 -3.0000000000000058 + vertex -110.8655439013544 45.922011883810605 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.910863824921173 0.4127070298044008 2.846830480954061e-31 + outer loop + vertex -110.8655439013544 45.922011883810605 -3.0000000000000058 + vertex -107.62472898392257 53.074642826279955 -1.127986593019159e-14 + vertex -107.62472898392257 53.074642826279955 -3.0000000000000058 + endloop +endfacet +facet normal -0.8819212643483569 -0.4713967368259942 1.1924109098059097e-31 + outer loop + vertex -103.9230484541327 -60.000000000000185 -1.127986593019159e-14 + vertex -107.62472898392265 -53.0746428262803 -3.0000000000000058 + vertex -103.9230484541327 -60.000000000000185 -3.0000000000000058 + endloop +endfacet +facet normal -0.8819212643483569 -0.4713967368259942 1.1924109098059097e-31 + outer loop + vertex -107.62472898392265 -53.0746428262803 -3.0000000000000058 + vertex -103.9230484541327 -60.000000000000185 -1.127986593019159e-14 + vertex -107.62472898392265 -53.0746428262803 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9359059267573255 0.3522500479212338 2.896547731230534e-31 + outer loop + vertex -110.8655439013544 45.922011883810605 -1.127986593019159e-14 + vertex -113.63161553941268 38.57273583637922 -3.0000000000000058 + vertex -113.63161553941268 38.57273583637922 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9359059267573255 0.3522500479212338 2.896547731230534e-31 + outer loop + vertex -113.63161553941268 38.57273583637922 -3.0000000000000058 + vertex -110.8655439013544 45.922011883810605 -1.127986593019159e-14 + vertex -110.8655439013544 45.922011883810605 -3.0000000000000058 + endloop +endfacet +facet normal -0.9108638249211767 -0.412707029804393 2.5186371442749477e-31 + outer loop + vertex -107.62472898392265 -53.0746428262803 -1.127986593019159e-14 + vertex -110.86554390135444 -45.92201188381096 -3.0000000000000058 + vertex -107.62472898392265 -53.0746428262803 -3.0000000000000058 + endloop +endfacet +facet normal -0.9108638249211767 -0.412707029804393 2.5186371442749477e-31 + outer loop + vertex -110.86554390135444 -45.92201188381096 -3.0000000000000058 + vertex -107.62472898392265 -53.0746428262803 -1.127986593019159e-14 + vertex -110.86554390135444 -45.92201188381096 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9951847266721968 0.09801714032956152 2.9700537205033425e-31 + outer loop + vertex -118.97338336485723 15.663143066406052 -1.127986593019159e-14 + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + vertex -119.74307078863242 7.848375507616978 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9951847266721968 0.09801714032956152 2.9700537205033425e-31 + outer loop + vertex -119.74307078863242 7.848375507616978 -3.0000000000000058 + vertex -118.97338336485723 15.663143066406052 -1.127986593019159e-14 + vertex -118.97338336485723 15.663143066406052 -3.0000000000000058 + endloop +endfacet +facet normal -0.8819212643483567 0.4713967368259945 2.7849226655047917e-31 + outer loop + vertex -103.92304845413261 59.9999999999998 -1.127986593019159e-14 + vertex -107.62472898392257 53.074642826279955 -3.0000000000000058 + vertex -107.62472898392257 53.074642826279955 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.8819212643483567 0.4713967368259945 2.7849226655047917e-31 + outer loop + vertex -107.62472898392257 53.074642826279955 -3.0000000000000058 + vertex -103.92304845413261 59.9999999999998 -1.127986593019159e-14 + vertex -103.92304845413261 59.9999999999998 -3.0000000000000058 + endloop +endfacet +facet normal -0.7730104533627364 0.634393284163646 2.5289607953410734e-31 + outer loop + vertex -90.22077689747728 79.12149781200809 -1.127986593019159e-14 + vertex -95.2024008349482 73.05137148104633 -3.0000000000000058 + vertex -95.2024008349482 73.05137148104633 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.7730104533627364 0.634393284163646 2.5289607953410734e-31 + outer loop + vertex -95.2024008349482 73.05137148104633 -3.0000000000000058 + vertex -90.22077689747728 79.12149781200809 -1.127986593019159e-14 + vertex -90.22077689747728 79.12149781200809 -3.0000000000000058 + endloop +endfacet +facet normal -0.995184726672197 -0.09801714032955847 2.8921084227172825e-31 + outer loop + vertex -119.74307078863242 -7.8483755076173445 -1.127986593019159e-14 + vertex -118.97338336485727 -15.663143066406345 -3.0000000000000058 + vertex -118.97338336485727 -15.663143066406345 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.995184726672197 -0.09801714032955847 2.8921084227172825e-31 + outer loop + vertex -118.97338336485727 -15.663143066406345 -3.0000000000000058 + vertex -119.74307078863242 -7.8483755076173445 -1.127986593019159e-14 + vertex -119.74307078863242 -7.8483755076173445 -3.0000000000000058 + endloop +endfacet +facet normal -0.9738769792773341 -0.2270762630343715 2.7780362273732366e-31 + outer loop + vertex -117.69423364838765 -23.410838641935552 -1.127986593019159e-14 + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + vertex -115.91109915468822 -31.058285412302638 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9738769792773341 -0.2270762630343715 2.7780362273732366e-31 + outer loop + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + vertex -117.69423364838765 -23.410838641935552 -1.127986593019159e-14 + vertex -117.69423364838765 -23.410838641935552 -3.0000000000000058 + endloop +endfacet +facet normal -0.8492021815265768 0.5280678506503713 2.7110893836527047e-31 + outer loop + vertex -99.77635347630536 66.66842796235208 -1.127986593019159e-14 + vertex -103.92304845413261 59.9999999999998 -3.0000000000000058 + vertex -103.92304845413261 59.9999999999998 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.8492021815265768 0.5280678506503713 2.7110893836527047e-31 + outer loop + vertex -103.92304845413261 59.9999999999998 -3.0000000000000058 + vertex -99.77635347630536 66.66842796235208 -1.127986593019159e-14 + vertex -99.77635347630536 66.66842796235208 -3.0000000000000058 + endloop +endfacet +facet normal -0.9994645874763657 -0.03271908282177521 2.930676936194235e-31 + outer loop + vertex -120.0 -1.8047785488306544e-13 -1.127986593019159e-14 + vertex -119.74307078863242 -7.8483755076173445 -3.0000000000000058 + vertex -119.74307078863242 -7.8483755076173445 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9994645874763657 -0.03271908282177521 2.930676936194235e-31 + outer loop + vertex -119.74307078863242 -7.8483755076173445 -3.0000000000000058 + vertex -120.0 -1.8047785488306544e-13 -1.127986593019159e-14 + vertex -120.0 -1.8047785488306544e-13 -3.0000000000000058 + endloop +endfacet +facet normal -0.9866433320848789 0.16289547339459018 2.970693373899851e-31 + outer loop + vertex -117.69423364838764 23.410838641935243 -1.127986593019159e-14 + vertex -118.97338336485723 15.663143066406052 -3.0000000000000058 + vertex -118.97338336485723 15.663143066406052 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9866433320848789 0.16289547339459018 2.970693373899851e-31 + outer loop + vertex -118.97338336485723 15.663143066406052 -3.0000000000000058 + vertex -117.69423364838764 23.410838641935243 -1.127986593019159e-14 + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + endloop +endfacet +facet normal -0.9866433320848788 -0.1628954733945899 2.84115545696969e-31 + outer loop + vertex -118.97338336485727 -15.663143066406345 -1.127986593019159e-14 + vertex -117.69423364838765 -23.410838641935552 -3.0000000000000058 + vertex -117.69423364838765 -23.410838641935552 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9866433320848788 -0.1628954733945899 2.84115545696969e-31 + outer loop + vertex -117.69423364838765 -23.410838641935552 -3.0000000000000058 + vertex -118.97338336485727 -15.663143066406345 -1.127986593019159e-14 + vertex -118.97338336485727 -15.663143066406345 -3.0000000000000058 + endloop +endfacet +facet normal -0.8128466845916188 0.5824776968677972 2.6256468008458264e-31 + outer loop + vertex -95.2024008349482 73.05137148104633 -1.127986593019159e-14 + vertex -99.77635347630536 66.66842796235208 -3.0000000000000058 + vertex -99.77635347630536 66.66842796235208 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.8128466845916188 0.5824776968677972 2.6256468008458264e-31 + outer loop + vertex -99.77635347630536 66.66842796235208 -3.0000000000000058 + vertex -95.2024008349482 73.05137148104633 -1.127986593019159e-14 + vertex -95.2024008349482 73.05137148104633 -3.0000000000000058 + endloop +endfacet +facet normal -0.9569403357322083 0.29028467725446455 2.933861519435775e-31 + outer loop + vertex -113.63161553941268 38.57273583637922 -1.127986593019159e-14 + vertex -115.9110991546882 31.05828541230235 -3.0000000000000058 + vertex -115.9110991546882 31.05828541230235 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9569403357322083 0.29028467725446455 2.933861519435775e-31 + outer loop + vertex -115.9110991546882 31.05828541230235 -3.0000000000000058 + vertex -113.63161553941268 38.57273583637922 -1.127986593019159e-14 + vertex -113.63161553941268 38.57273583637922 -3.0000000000000058 + endloop +endfacet +facet normal -0.9359059267573256 -0.3522500479212339 2.6164310619616768e-31 + outer loop + vertex -110.86554390135444 -45.92201188381096 -1.127986593019159e-14 + vertex -113.6316155394127 -38.572735836379586 -3.0000000000000058 + vertex -110.86554390135444 -45.92201188381096 -3.0000000000000058 + endloop +endfacet +facet normal -0.9359059267573256 -0.3522500479212339 2.6164310619616768e-31 + outer loop + vertex -113.6316155394127 -38.572735836379586 -3.0000000000000058 + vertex -110.86554390135444 -45.92201188381096 -1.127986593019159e-14 + vertex -113.6316155394127 -38.572735836379586 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9569403357322093 -0.2902846772544612 2.7030210201592863e-31 + outer loop + vertex -113.6316155394127 -38.572735836379586 -1.127986593019159e-14 + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + vertex -113.6316155394127 -38.572735836379586 -3.0000000000000058 + endloop +endfacet +facet normal -0.9569403357322093 -0.2902846772544612 2.7030210201592863e-31 + outer loop + vertex -115.91109915468822 -31.058285412302638 -3.0000000000000058 + vertex -113.6316155394127 -38.572735836379586 -1.127986593019159e-14 + vertex -115.91109915468822 -31.058285412302638 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9738769792773345 0.22707626303437 2.9586120622001782e-31 + outer loop + vertex -115.9110991546882 31.05828541230235 -1.127986593019159e-14 + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + vertex -117.69423364838764 23.410838641935243 -1.127986593019159e-14 + endloop +endfacet +facet normal -0.9738769792773345 0.22707626303437 2.9586120622001782e-31 + outer loop + vertex -117.69423364838764 23.410838641935243 -3.0000000000000058 + vertex -115.9110991546882 31.05828541230235 -1.127986593019159e-14 + vertex -115.9110991546882 31.05828541230235 -3.0000000000000058 + endloop +endfacet +facet normal 0.9301944916753149 0.3670670342824357 -3.1509663175953206e-16 + outer loop + vertex 183.8959747167953 -70.80363748245902 617.4 + vertex 184.48750387842549 -72.30264751720468 597.4 + vertex 183.8959747167953 -70.80363748245902 597.4 + endloop +endfacet +facet normal 0.9301944916753149 0.3670670342824357 -3.1509663175953206e-16 + outer loop + vertex 184.48750387842549 -72.30264751720468 597.4 + vertex 183.8959747167953 -70.80363748245902 617.4 + vertex 184.48750387842549 -72.30264751720468 617.4 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844389 1.4922322636808774e-17 + outer loop + vertex 179.92468545251552 -69.38910354298147 617.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 165.4703225694756 -77.73433384446909 617.4 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844389 1.4922322636808774e-17 + outer loop + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 179.92468545251552 -69.38910354298147 617.4 + vertex 179.92468545251552 -69.38910354298147 597.4 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844389 1.4922322636808774e-17 + outer loop + vertex 179.92468545251552 -69.38910354298147 597.4 + vertex 179.92468545251552 -69.38910354298147 617.4 + vertex 182.52753457015436 -67.8863479042527 617.4 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844389 1.4922322636808774e-17 + outer loop + vertex 179.92468545251552 -69.38910354298147 597.4 + vertex 182.52753457015436 -67.8863479042527 617.4 + vertex 182.52753457015436 -67.8863479042527 597.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 109.72753457015432 -104.48202726980838 604.4 + vertex 134.52753457015422 -104.48202726980857 604.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.72753457015432 -104.48202726980838 604.4 + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 136.2595853777231 -104.48202726980857 605.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + vertex 136.2595853777231 -104.48202726980857 605.4 + vertex 107.99548376258548 -104.48202726980834 605.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258548 -104.48202726980834 605.4 + vertex 136.2595853777231 -104.48202726980857 605.4 + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258548 -104.48202726980834 605.4 + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + vertex 136.52753457015424 -104.48202726980857 608.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + vertex 136.52753457015424 -104.48202726980857 608.4 + vertex 107.72753457015438 -104.48202726980831 608.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 136.52753457015424 -104.48202726980857 608.4 + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + vertex 136.2595853777231 -104.48202726980857 609.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + vertex 136.2595853777231 -104.48202726980857 609.4 + vertex 107.99548376258548 -104.48202726980834 609.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258548 -104.48202726980834 609.4 + vertex 136.2595853777231 -104.48202726980857 609.4 + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258548 -104.48202726980834 609.4 + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + endloop +endfacet +facet normal 0.38268343236516245 1.837419105754634e-14 -0.9238795325112568 + outer loop + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + vertex 135.04517266035938 -106.48202726980834 604.4681483474218 + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + endloop +endfacet +facet normal 0.38268343236516245 1.837419105754634e-14 -0.9238795325112568 + outer loop + vertex 135.04517266035938 -106.48202726980834 604.4681483474218 + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + vertex 135.52753457015433 -106.48202726980831 604.6679491924311 + endloop +endfacet +facet normal 0.9914448613738114 4.768407890765046e-14 -0.13052619222004416 + outer loop + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + vertex 136.52753457015433 -106.48202726980836 606.3999999999999 + vertex 136.45938622273246 -106.48202726980834 605.8823619097949 + endloop +endfacet +facet normal 0.9914448613738114 4.768407890765046e-14 -0.13052619222004416 + outer loop + vertex 136.52753457015433 -106.48202726980836 606.3999999999999 + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + endloop +endfacet +facet normal 0.608761429008705 2.930988785010413e-14 -0.7933533402912473 + outer loop + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 135.52753457015433 -106.48202726980831 604.6679491924311 + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + endloop +endfacet +facet normal 0.608761429008705 2.930988785010413e-14 -0.7933533402912473 + outer loop + vertex 135.52753457015433 -106.48202726980831 604.6679491924311 + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 135.94174813252744 -106.48202726980834 604.9857864376269 + endloop +endfacet +facet normal 0.9914448613738145 4.76285677564192e-14 0.13052619222002182 + outer loop + vertex 136.52753457015433 -106.48202726980836 608.4 + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + vertex 136.45938622273246 -106.48202726980834 608.9176380902051 + endloop +endfacet +facet normal 0.9914448613738145 4.76285677564192e-14 0.13052619222002182 + outer loop + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + vertex 136.52753457015433 -106.48202726980836 608.4 + vertex 136.52753457015424 -104.48202726980857 608.4 + endloop +endfacet +facet normal 0.923879532511261 4.4297898682543733e-14 0.38268343236515184 + outer loop + vertex 136.45938622273246 -106.48202726980834 608.9176380902051 + vertex 136.2595853777231 -104.48202726980857 609.4 + vertex 136.25958537772323 -106.48202726980836 609.4 + endloop +endfacet +facet normal 0.923879532511261 4.4297898682543733e-14 0.38268343236515184 + outer loop + vertex 136.2595853777231 -104.48202726980857 609.4 + vertex 136.45938622273246 -106.48202726980834 608.9176380902051 + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + endloop +endfacet +facet normal 0.9965567391136535 0.08291360399332269 -3.151450949117091e-16 + outer loop + vertex 186.6808595929021 -81.69427565173788 597.4 + vertex 186.8144750093717 -83.30022856319225 617.4 + vertex 186.8144750093717 -83.30022856319225 597.4 + endloop +endfacet +facet normal 0.9965567391136535 0.08291360399332269 -3.151450949117091e-16 + outer loop + vertex 186.8144750093717 -83.30022856319225 617.4 + vertex 186.6808595929021 -81.69427565173788 597.4 + vertex 186.6808595929021 -81.69427565173788 617.4 + endloop +endfacet +facet normal 0.3826834323651491 1.8346435481930712e-14 0.9238795325112623 + outer loop + vertex 135.04517266035938 -106.48202726980834 610.331851652578 + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + endloop +endfacet +facet normal 0.3826834323651491 1.8346435481930712e-14 0.9238795325112623 + outer loop + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + vertex 135.04517266035938 -106.48202726980834 610.331851652578 + vertex 135.52753457015436 -106.48202726980834 610.1320508075687 + endloop +endfacet +facet normal 0.9238795325112865 4.440892098500626e-14 -0.3826834323650907 + outer loop + vertex 136.2595853777231 -104.48202726980857 605.4 + vertex 136.45938622273246 -106.48202726980834 605.8823619097949 + vertex 136.25958537772323 -106.48202726980836 605.4 + endloop +endfacet +facet normal 0.9238795325112865 4.440892098500626e-14 -0.3826834323650907 + outer loop + vertex 136.45938622273246 -106.48202726980834 605.8823619097949 + vertex 136.2595853777231 -104.48202726980857 605.4 + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + endloop +endfacet +facet normal 0.130526192219984 6.265821195228227e-15 0.9914448613738195 + outer loop + vertex 134.52753457015433 -106.48202726980834 610.3999999999999 + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + endloop +endfacet +facet normal 0.130526192219984 6.265821195228227e-15 0.9914448613738195 + outer loop + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + vertex 134.52753457015433 -106.48202726980834 610.3999999999999 + vertex 135.04517266035938 -106.48202726980834 610.331851652578 + endloop +endfacet +facet normal 0.929708324630511 -0.3682966618267512 -2.617941281554304e-16 + outer loop + vertex 184.4697700303989 -99.12640731420498 597.4 + vertex 183.87625932185094 -100.62463388991574 617.4 + vertex 183.87625932185094 -100.62463388991574 597.4 + endloop +endfacet +facet normal 0.929708324630511 -0.3682966618267512 -2.617941281554304e-16 + outer loop + vertex 183.87625932185094 -100.62463388991574 617.4 + vertex 184.4697700303989 -99.12640731420498 597.4 + vertex 184.4697700303989 -99.12640731420498 617.4 + endloop +endfacet +facet normal 0.793353340291199 3.813616089587412e-14 -0.6087614290087678 + outer loop + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 136.25958537772323 -106.48202726980836 605.4 + vertex 135.94174813252744 -106.48202726980834 604.9857864376269 + endloop +endfacet +facet normal 0.793353340291199 3.813616089587412e-14 -0.6087614290087678 + outer loop + vertex 136.25958537772323 -106.48202726980836 605.4 + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 136.2595853777231 -104.48202726980857 605.4 + endloop +endfacet +facet normal 1.0 4.8128168117500536e-14 -5.933957380480867e-32 + outer loop + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + vertex 136.52753457015433 -106.48202726980836 608.4 + vertex 136.52753457015433 -106.48202726980836 606.3999999999999 + endloop +endfacet +facet normal 1.0 4.8128168117500536e-14 -5.933957380480867e-32 + outer loop + vertex 136.52753457015433 -106.48202726980836 608.4 + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + vertex 136.52753457015424 -104.48202726980857 608.4 + endloop +endfacet +facet normal 0.793353340291217 3.813616089587412e-14 0.6087614290087443 + outer loop + vertex 136.25958537772323 -106.48202726980836 609.4 + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 135.94174813252744 -106.48202726980836 609.814213562373 + endloop +endfacet +facet normal 0.793353340291217 3.813616089587412e-14 0.6087614290087443 + outer loop + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 136.25958537772323 -106.48202726980836 609.4 + vertex 136.2595853777231 -104.48202726980857 609.4 + endloop +endfacet +facet normal 0.6087614290087044 2.9254376698872875e-14 0.7933533402912477 + outer loop + vertex 135.52753457015436 -106.48202726980834 610.1320508075687 + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + endloop +endfacet +facet normal 0.6087614290087044 2.9254376698872875e-14 0.7933533402912477 + outer loop + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 135.52753457015436 -106.48202726980834 610.1320508075687 + vertex 135.94174813252744 -106.48202726980836 609.814213562373 + endloop +endfacet +facet normal -0.382683432365156 4.274358644806853e-15 -0.9238795325112594 + outer loop + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + vertex 108.72753457015433 -106.48202726980836 604.6679491924311 + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + endloop +endfacet +facet normal -0.382683432365156 4.274358644806853e-15 -0.9238795325112594 + outer loop + vertex 108.72753457015433 -106.48202726980836 604.6679491924311 + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + vertex 109.20989647994928 -106.48202726980834 604.4681483474218 + endloop +endfacet +facet normal -0.13052619221999057 1.0963452368173417e-15 -0.9914448613738184 + outer loop + vertex 109.72753457015432 -104.48202726980838 604.4 + vertex 109.20989647994928 -106.48202726980834 604.4681483474218 + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + endloop +endfacet +facet normal -0.13052619221999057 1.0963452368173417e-15 -0.9914448613738184 + outer loop + vertex 109.20989647994928 -106.48202726980834 604.4681483474218 + vertex 109.72753457015432 -104.48202726980838 604.4 + vertex 109.72753457015432 -106.48202726980836 604.4 + endloop +endfacet +facet normal 0.13052619221998402 6.2727600891321345e-15 -0.9914448613738195 + outer loop + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 134.52753457015433 -106.48202726980834 604.4 + vertex 134.52753457015422 -104.48202726980857 604.4 + endloop +endfacet +facet normal 0.13052619221998402 6.2727600891321345e-15 -0.9914448613738195 + outer loop + vertex 134.52753457015433 -106.48202726980834 604.4 + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 135.04517266035938 -106.48202726980834 604.4681483474218 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 134.52753457015422 -104.48202726980857 604.4 + vertex 109.72753457015432 -106.48202726980836 604.4 + vertex 109.72753457015432 -104.48202726980838 604.4 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 109.72753457015432 -106.48202726980836 604.4 + vertex 134.52753457015422 -104.48202726980857 604.4 + vertex 134.52753457015433 -106.48202726980834 604.4 + endloop +endfacet +facet normal -1.0 2.2537527399890668e-14 5.933957380479863e-32 + outer loop + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 107.72753457015433 -106.48202726980836 606.3999999999999 + vertex 107.72753457015433 -106.48202726980836 608.4 + endloop +endfacet +facet normal -1.0 2.2537527399890668e-14 5.933957380479863e-32 + outer loop + vertex 107.72753457015433 -106.48202726980836 606.3999999999999 + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + endloop +endfacet +facet normal -0.9238795325113045 1.8096635301390052e-14 -0.3826834323650471 + outer loop + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + vertex 107.99548376258544 -106.48202726980834 605.4 + vertex 107.7956829175762 -106.48202726980834 605.8823619097949 + endloop +endfacet +facet normal -0.9238795325113045 1.8096635301390052e-14 -0.3826834323650471 + outer loop + vertex 107.99548376258544 -106.48202726980834 605.4 + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + vertex 107.99548376258548 -104.48202726980834 605.4 + endloop +endfacet +facet normal -0.7933533402912079 1.321165399303936e-14 -0.6087614290087563 + outer loop + vertex 107.99548376258548 -104.48202726980834 605.4 + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + vertex 107.99548376258544 -106.48202726980834 605.4 + endloop +endfacet +facet normal -0.7933533402912079 1.321165399303936e-14 -0.6087614290087563 + outer loop + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + vertex 107.99548376258548 -104.48202726980834 605.4 + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + endloop +endfacet +facet normal -0.9914448613738116 2.2259971643734382e-14 0.13052619222004302 + outer loop + vertex 107.79568291757619 -106.48202726980834 608.9176380902051 + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 107.72753457015433 -106.48202726980836 608.4 + endloop +endfacet +facet normal -0.9914448613738116 2.2259971643734382e-14 0.13052619222004302 + outer loop + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 107.79568291757619 -106.48202726980834 608.9176380902051 + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + endloop +endfacet +facet normal -0.6087614290086992 8.493206138382446e-15 -0.7933533402912516 + outer loop + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + endloop +endfacet +facet normal -0.6087614290086992 8.493206138382446e-15 -0.7933533402912516 + outer loop + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + vertex 108.72753457015433 -106.48202726980836 604.6679491924311 + endloop +endfacet +facet normal -0.9914448613738074 2.2315482794965637e-14 -0.13052619222007458 + outer loop + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + vertex 107.7956829175762 -106.48202726980834 605.8823619097949 + vertex 107.72753457015433 -106.48202726980836 606.3999999999999 + endloop +endfacet +facet normal -0.9914448613738074 2.2315482794965637e-14 -0.13052619222007458 + outer loop + vertex 107.7956829175762 -106.48202726980834 605.8823619097949 + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + endloop +endfacet +facet normal -0.9238795325112759 1.8152146452621306e-14 0.3826834323651162 + outer loop + vertex 107.99548376258544 -106.48202726980834 609.4 + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + vertex 107.79568291757619 -106.48202726980834 608.9176380902051 + endloop +endfacet +facet normal -0.9238795325112759 1.8152146452621306e-14 0.3826834323651162 + outer loop + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + vertex 107.99548376258544 -106.48202726980834 609.4 + vertex 107.99548376258548 -104.48202726980834 609.4 + endloop +endfacet +facet normal -0.13052619221999065 1.0894063429134349e-15 0.9914448613738184 + outer loop + vertex 109.20989647994928 -106.48202726980834 610.331851652578 + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + endloop +endfacet +facet normal -0.13052619221999065 1.0894063429134349e-15 0.9914448613738184 + outer loop + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + vertex 109.20989647994928 -106.48202726980834 610.331851652578 + vertex 109.72753457015432 -106.48202726980836 610.3999999999999 + endloop +endfacet +facet normal -0.382683432365156 4.274358644806853e-15 0.9238795325112594 + outer loop + vertex 108.72753457015433 -106.48202726980836 610.1320508075687 + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + endloop +endfacet +facet normal -0.382683432365156 4.274358644806853e-15 0.9238795325112594 + outer loop + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + vertex 108.72753457015433 -106.48202726980836 610.1320508075687 + vertex 109.20989647994928 -106.48202726980834 610.331851652578 + endloop +endfacet +facet normal -0.6087614290086992 8.493206138382446e-15 0.7933533402912516 + outer loop + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + endloop +endfacet +facet normal -0.6087614290086992 8.493206138382446e-15 0.7933533402912516 + outer loop + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + vertex 108.72753457015433 -106.48202726980836 610.1320508075687 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 109.72753457015432 -106.48202726980836 610.3999999999999 + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + vertex 109.72753457015432 -106.48202726980836 610.3999999999999 + vertex 134.52753457015433 -106.48202726980834 610.3999999999999 + endloop +endfacet +facet normal -0.793353340291208 1.326716514427062e-14 0.6087614290087562 + outer loop + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + vertex 107.99548376258548 -104.48202726980834 609.4 + vertex 107.99548376258544 -106.48202726980834 609.4 + endloop +endfacet +facet normal -0.793353340291208 1.326716514427062e-14 0.6087614290087562 + outer loop + vertex 107.99548376258548 -104.48202726980834 609.4 + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + endloop +endfacet +facet normal 0.996446235550411 -0.08423122732938658 -3.030296777091401e-16 + outer loop + vertex 186.81128066401763 -88.13191271645415 597.4 + vertex 186.67554189525939 -89.73768755122492 617.4 + vertex 186.67554189525939 -89.73768755122492 597.4 + endloop +endfacet +facet normal 0.996446235550411 -0.08423122732938658 -3.030296777091401e-16 + outer loop + vertex 186.67554189525939 -89.73768755122492 617.4 + vertex 186.81128066401763 -88.13191271645415 597.4 + vertex 186.81128066401763 -88.13191271645415 617.4 + endloop +endfacet +facet normal 0.9920516018175789 -0.12583171035623705 -2.9865951294905024e-16 + outer loop + vertex 186.67554189525939 -89.73768755122492 597.4 + vertex 186.4727638760373 -91.33638042612223 617.4 + vertex 186.4727638760373 -91.33638042612223 597.4 + endloop +endfacet +facet normal 0.9920516018175789 -0.12583171035623705 -2.9865951294905024e-16 + outer loop + vertex 186.4727638760373 -91.33638042612223 617.4 + vertex 186.67554189525939 -89.73768755122492 597.4 + vertex 186.67554189525939 -89.73768755122492 617.4 + endloop +endfacet +facet normal 0.9572353791850622 -0.2893102639666116 -2.7604267320249543e-16 + outer loop + vertex 185.4663253888957 -96.06208286410167 597.4 + vertex 185.0001013973305 -97.60466933591321 617.4 + vertex 185.0001013973305 -97.60466933591321 597.4 + endloop +endfacet +facet normal 0.9572353791850622 -0.2893102639666116 -2.7604267320249543e-16 + outer loop + vertex 185.0001013973305 -97.60466933591321 617.4 + vertex 185.4663253888957 -96.06208286410167 597.4 + vertex 185.4663253888957 -96.06208286410167 617.4 + endloop +endfacet +facet normal 0.9990971750681176 -0.04248334698334532 -3.0686956689872714e-16 + outer loop + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 186.81128066401763 -88.13191271645415 617.4 + vertex 186.81128066401763 -88.13191271645415 597.4 + endloop +endfacet +facet normal 0.9990971750681176 -0.04248334698334532 -3.0686956689872714e-16 + outer loop + vertex 186.81128066401763 -88.13191271645415 617.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 186.87974265127679 -86.52186588805827 617.4 + endloop +endfacet +facet normal 0.978339619447619 0.2070062535748331 -3.1846312298286436e-16 + outer loop + vertex 185.87924330029887 -76.92955181082564 597.4 + vertex 186.21283423653944 -78.50614780237997 617.4 + vertex 186.21283423653944 -78.50614780237997 597.4 + endloop +endfacet +facet normal 0.978339619447619 0.2070062535748331 -3.1846312298286436e-16 + outer loop + vertex 186.21283423653944 -78.50614780237997 617.4 + vertex 185.87924330029887 -76.92955181082564 597.4 + vertex 185.87924330029887 -76.92955181082564 617.4 + endloop +endfacet +facet normal 0.258819045102526 -0.9659258262890669 -1.047433653618763e-17 + outer loop + vertex 145.33456399870488 -56.22115326457819 597.4 + vertex 144.64839188070863 -56.40501252946406 617.4 + vertex 144.64839188070863 -56.40501252946406 597.4 + endloop +endfacet +facet normal 0.258819045102526 -0.9659258262890669 -1.047433653618763e-17 + outer loop + vertex 144.64839188070863 -56.40501252946406 617.4 + vertex 145.33456399870488 -56.22115326457819 597.4 + vertex 145.3345639987049 -56.2211532645782 617.4 + endloop +endfacet +facet normal 0.9684976081015065 -0.2490228565848135 -2.8244839711310887e-16 + outer loop + vertex 185.86762615367383 -94.50134729088126 597.4 + vertex 185.4663253888957 -96.06208286410167 617.4 + vertex 185.4663253888957 -96.06208286410167 597.4 + endloop +endfacet +facet normal 0.9684976081015065 -0.2490228565848135 -2.8244839711310887e-16 + outer loop + vertex 185.4663253888957 -96.06208286410167 617.4 + vertex 185.86762615367383 -94.50134729088126 597.4 + vertex 185.86762615367383 -94.50134729088126 617.4 + endloop +endfacet +facet normal 0.9861411980746715 0.16590821998879904 -3.1791278782751904e-16 + outer loop + vertex 186.21283423653944 -78.50614780237997 597.4 + vertex 186.48019562046042 -80.0953160514068 617.4 + vertex 186.48019562046042 -80.0953160514068 597.4 + endloop +endfacet +facet normal 0.9861411980746715 0.16590821998879904 -3.1791278782751904e-16 + outer loop + vertex 186.48019562046042 -80.0953160514068 617.4 + vertex 186.21283423653944 -78.50614780237997 597.4 + vertex 186.21283423653944 -78.50614780237997 617.4 + endloop +endfacet +facet normal 0.8191520442889912 -0.5735764363510468 -2.1265981455630456e-16 + outer loop + vertex 142.9203509284472 -57.614999830572586 597.4 + vertex 142.51289504782767 -58.19690713431473 617.4 + vertex 142.51289504782767 -58.19690713431473 597.4 + endloop +endfacet +facet normal 0.8191520442889912 -0.5735764363510468 -2.1265981455630456e-16 + outer loop + vertex 142.51289504782767 -58.19690713431473 617.4 + vertex 142.9203509284472 -57.614999830572586 597.4 + vertex 142.9203509284472 -57.6149998305726 617.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 94.73693564691287 -104.48202726980836 597.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.52753457015424 -104.48202726980854 604.6679491924311 + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 135.04517266035927 -104.48202726980854 604.4681483474218 + vertex 134.52753457015422 -104.48202726980857 604.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.94174813252732 -104.48202726980857 604.9857864376269 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 136.2595853777231 -104.48202726980857 605.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 136.2595853777231 -104.48202726980857 605.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 136.45938622273238 -104.48202726980857 605.8823619097949 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 136.52753457015424 -104.48202726980857 606.3999999999999 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 136.52753457015424 -104.48202726980857 608.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 136.52753457015424 -104.48202726980857 608.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 136.45938622273238 -104.48202726980857 608.9176380902051 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 136.2595853777231 -104.48202726980857 609.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 136.2595853777231 -104.48202726980857 609.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.94174813252735 -104.48202726980857 609.814213562373 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.52753457015424 -104.48202726980854 610.1320508075687 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 135.04517266035927 -104.48202726980854 610.331851652578 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 134.52753457015422 -104.48202726980857 610.3999999999999 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + vertex 94.73693564691287 -104.48202726980836 617.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 108.72753457015435 -104.48202726980836 604.6679491924311 + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 109.20989647994931 -104.48202726980836 604.4681483474218 + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 109.72753457015432 -104.48202726980838 604.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 109.72753457015432 -104.48202726980838 604.4 + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 134.52753457015422 -104.48202726980857 604.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 108.31332100778125 -104.48202726980834 604.9857864376269 + vertex 107.99548376258548 -104.48202726980834 605.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 107.99548376258548 -104.48202726980834 605.4 + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 107.79568291757623 -104.48202726980831 605.8823619097949 + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 107.72753457015438 -104.48202726980831 606.3999999999999 + vertex 107.72753457015438 -104.48202726980831 608.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 107.72753457015438 -104.48202726980831 608.4 + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 107.79568291757623 -104.48202726980831 608.9176380902051 + vertex 107.99548376258548 -104.48202726980834 609.4 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 107.99548376258548 -104.48202726980834 609.4 + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 108.31332100778125 -104.48202726980834 609.814213562373 + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 108.72753457015435 -104.48202726980836 610.1320508075687 + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 109.20989647994931 -104.48202726980836 610.331851652578 + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 7.227945163972792e-17 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 109.72753457015432 -104.48202726980838 610.3999999999999 + vertex 150.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal -0.9951296050077003 0.09857519585178845 3.0158445798888856e-16 + outer loop + vertex 93.36206755126861 -102.99966536001341 617.4 + vertex 93.31428591610249 -103.48202726980837 597.4 + vertex 93.31428591610249 -103.48202726980837 617.4 + endloop +endfacet +facet normal -0.9951296050077003 0.09857519585178845 3.0158445798888856e-16 + outer loop + vertex 93.31428591610249 -103.48202726980837 597.4 + vertex 93.36206755126861 -102.99966536001341 617.4 + vertex 93.36206755126861 -102.99966536001341 597.4 + endloop +endfacet +facet normal 0.7291677277632 -0.684335023792186 -1.7673928161385297e-16 + outer loop + vertex 177.000639301392 -111.46014411930012 597.4 + vertex 175.89783222505156 -112.6351991757552 617.4 + vertex 175.89783222505156 -112.6351991757552 597.4 + endloop +endfacet +facet normal 0.7291677277632 -0.684335023792186 -1.7673928161385297e-16 + outer loop + vertex 175.89783222505156 -112.6351991757552 617.4 + vertex 177.000639301392 -111.46014411930012 597.4 + vertex 177.000639301392 -111.46014411930012 617.4 + endloop +endfacet +facet normal 0.3882711944089259 -0.92154515873736 -5.3840833328123284e-17 + outer loop + vertex 164.0622132844704 -120.8709202563717 597.4 + vertex 162.5771416647378 -121.49661995877848 617.4 + vertex 162.5771416647378 -121.49661995877848 597.4 + endloop +endfacet +facet normal 0.3882711944089259 -0.92154515873736 -5.3840833328123284e-17 + outer loop + vertex 162.5771416647378 -121.49661995877848 617.4 + vertex 164.0622132844704 -120.8709202563717 597.4 + vertex 164.0622132844704 -120.8709202563717 617.4 + endloop +endfacet +facet normal 0.06403093220852701 -0.9979479143324601 5.2267432081861846e-17 + outer loop + vertex 151.63572936288375 -124.07481319206396 617.4 + vertex 150.02753457015433 -124.17799915024119 597.4 + vertex 151.63572936288375 -124.07481319206396 597.4 + endloop +endfacet +facet normal 0.06403093220852701 -0.9979479143324601 5.2267432081861846e-17 + outer loop + vertex 150.02753457015433 -124.17799915024119 597.4 + vertex 151.63572936288375 -124.07481319206396 617.4 + vertex 150.02753457015433 -124.17799915024119 617.4 + endloop +endfacet +facet normal 0.3493898658303748 -0.9369774392454884 -4.066361857341846e-17 + outer loop + vertex 162.5771416647378 -121.49661995877848 597.4 + vertex 161.06720089823253 -122.05966233282531 617.4 + vertex 161.06720089823253 -122.05966233282531 597.4 + endloop +endfacet +facet normal 0.3493898658303748 -0.9369774392454884 -4.066361857341846e-17 + outer loop + vertex 161.06720089823253 -122.05966233282531 617.4 + vertex 162.5771416647378 -121.49661995877848 597.4 + vertex 162.5771416647378 -121.49661995877848 617.4 + endloop +endfacet +facet normal -0.8660254037844379 0.5000000000000013 2.325189473563778e-16 + outer loop + vertex 135.51562203109634 -29.851270586485427 617.4 + vertex 134.3609214927171 -31.851270586485423 597.4 + vertex 134.3609214927171 -31.851270586485423 617.4 + endloop +endfacet +facet normal -0.8660254037844379 0.5000000000000013 2.325189473563778e-16 + outer loop + vertex 134.3609214927171 -31.851270586485423 597.4 + vertex 135.51562203109634 -29.851270586485427 617.4 + vertex 135.51562203109634 -29.851270586485427 597.4 + endloop +endfacet +facet normal 0.6694253404686521 -0.7428793398247319 -1.539744283755051e-16 + outer loop + vertex 174.7468459524417 -113.76310361922131 597.4 + vertex 173.5496946093963 -114.84188371505724 617.4 + vertex 173.5496946093963 -114.84188371505724 597.4 + endloop +endfacet +facet normal 0.6694253404686521 -0.7428793398247319 -1.539744283755051e-16 + outer loop + vertex 173.5496946093963 -114.84188371505724 617.4 + vertex 174.7468459524417 -113.76310361922131 597.4 + vertex 174.7468459524417 -113.76310361922131 617.4 + endloop +endfacet +facet normal 0.582933426294531 0.8125199200687444 -2.3956628513972294e-16 + outer loop + vertex 137.09297230028596 -29.11921977891657 617.4 + vertex 137.4868191504033 -29.401780843702266 597.4 + vertex 137.09297230028596 -29.11921977891656 597.4 + endloop +endfacet +facet normal 0.582933426294531 0.8125199200687444 -2.3956628513972294e-16 + outer loop + vertex 137.4868191504033 -29.401780843702266 597.4 + vertex 137.09297230028596 -29.11921977891657 617.4 + vertex 137.4868191504033 -29.401780843702266 617.4 + endloop +endfacet +facet normal 0.7571505514688199 -0.6532404170062215 -1.8766762311344204e-16 + outer loop + vertex 178.05333736503042 -110.23999469396776 597.4 + vertex 177.000639301392 -111.46014411930012 617.4 + vertex 177.000639301392 -111.46014411930012 597.4 + endloop +endfacet +facet normal 0.7571505514688199 -0.6532404170062215 -1.8766762311344204e-16 + outer loop + vertex 177.000639301392 -111.46014411930012 617.4 + vertex 178.05333736503042 -110.23999469396776 597.4 + vertex 178.05333736503042 -110.23999469396776 617.4 + endloop +endfacet +facet normal 0.809094707151618 -0.5876782749593841 -2.0852055110422162e-16 + outer loop + vertex 180.00112884410115 -107.67302853289175 597.4 + vertex 179.05408428594694 -108.97688605509174 617.4 + vertex 179.05408428594694 -108.97688605509174 597.4 + endloop +endfacet +facet normal 0.809094707151618 -0.5876782749593841 -2.0852055110422162e-16 + outer loop + vertex 179.05408428594694 -108.97688605509174 617.4 + vertex 180.00112884410115 -107.67302853289175 597.4 + vertex 180.00112884410115 -107.67302853289175 617.4 + endloop +endfacet +facet normal 0.22935485323248694 -0.9733428744788264 -7.978454901591367e-19 + outer loop + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 156.4147761514999 -123.36355110749699 597.4 + vertex 157.98331987988098 -122.9939453641928 597.4 + endloop +endfacet +facet normal 0.22935485323248694 -0.9733428744788264 -7.978454901591367e-19 + outer loop + vertex 156.4147761514999 -123.36355110749699 597.4 + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 156.4147761514999 -123.36355110749699 617.4 + endloop +endfacet +facet normal -1.0 6.661338147750937e-16 2.866236810576698e-31 + outer loop + vertex 150.02753457015436 -121.17248787278366 617.4 + vertex 150.02753457015433 -124.17799915024119 597.4 + vertex 150.02753457015433 -124.17799915024119 617.4 + endloop +endfacet +facet normal -1.0 6.661338147750937e-16 2.866236810576698e-31 + outer loop + vertex 150.02753457015433 -124.17799915024119 597.4 + vertex 150.02753457015436 -121.17248787278366 617.4 + vertex 150.02753457015436 -121.17248787278366 597.4 + endloop +endfacet +facet normal -1.0 6.661338147750937e-16 2.866236810576698e-31 + outer loop + vertex 150.02753457015436 -121.17248787278366 597.4 + vertex 150.02753457015436 -121.17248787278366 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal -1.0 6.661338147750937e-16 2.866236810576698e-31 + outer loop + vertex 150.02753457015436 -121.17248787278366 597.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 150.02753457015436 -104.48202726980841 597.4 + endloop +endfacet +facet normal 0.7838084275862282 -0.6210026963265172 -1.9826756260084607e-16 + outer loop + vertex 179.05408428594694 -108.97688605509174 597.4 + vertex 178.05333736503042 -110.23999469396776 617.4 + vertex 178.05333736503042 -110.23999469396776 597.4 + endloop +endfacet +facet normal 0.7838084275862282 -0.6210026963265172 -1.9826756260084607e-16 + outer loop + vertex 178.05333736503042 -110.23999469396776 617.4 + vertex 179.05408428594694 -108.97688605509174 597.4 + vertex 179.05408428594694 -108.97688605509174 617.4 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 3.047983989961057e-16 + outer loop + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 134.3609214927171 -31.851270586485423 597.4 + vertex 143.55963228918765 -47.783905050104764 597.4 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 3.047983989961057e-16 + outer loop + vertex 134.3609214927171 -31.851270586485423 597.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 134.3609214927171 -31.851270586485423 617.4 + endloop +endfacet +facet normal 0.46392867916166225 -0.8858725532780185 -7.988971840785966e-17 + outer loop + vertex 166.94740216554413 -119.43603627549433 597.4 + vertex 165.51981701130626 -120.18365814564446 617.4 + vertex 165.51981701130626 -120.18365814564446 597.4 + endloop +endfacet +facet normal 0.46392867916166225 -0.8858725532780185 -7.988971840785966e-17 + outer loop + vertex 165.51981701130626 -120.18365814564446 617.4 + vertex 166.94740216554413 -119.43603627549433 597.4 + vertex 166.94740216554413 -119.43603627549433 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 94.73693564691287 -100.48202726980837 617.4 + vertex 93.58223510853361 -102.48202726980837 597.4 + vertex 93.58223510853362 -102.48202726980837 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 93.58223510853361 -102.48202726980837 597.4 + vertex 94.73693564691287 -100.48202726980837 617.4 + vertex 94.73693564691285 -100.48202726980837 597.4 + endloop +endfacet +facet normal 0.42647308217927365 -0.9045002543816728 -6.692383130898715e-17 + outer loop + vertex 165.51981701130626 -120.18365814564446 597.4 + vertex 164.0622132844704 -120.8709202563717 617.4 + vertex 164.0622132844704 -120.8709202563717 597.4 + endloop +endfacet +facet normal 0.42647308217927365 -0.9045002543816728 -6.692383130898715e-17 + outer loop + vertex 164.0622132844704 -120.8709202563717 617.4 + vertex 165.51981701130626 -120.18365814564446 597.4 + vertex 165.51981701130626 -120.18365814564446 617.4 + endloop +endfacet +facet normal 0.5363402452594244 -0.844001860966586 -1.0537964790030855e-16 + outer loop + vertex 169.70258105841677 -117.76504968478841 597.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + vertex 168.34247059737297 -118.62936291914635 597.4 + endloop +endfacet +facet normal 0.5363402452594244 -0.844001860966586 -1.0537964790030855e-16 + outer loop + vertex 168.34247059737297 -118.62936291914635 617.4 + vertex 169.70258105841677 -117.76504968478841 597.4 + vertex 169.70258105841677 -117.76504968478841 617.4 + endloop +endfacet +facet normal 0.7990717941595427 0.6012356175233216 -2.913452840785481e-16 + outer loop + vertex 137.4868191504033 -29.401780843702266 617.4 + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 137.4868191504033 -29.401780843702266 597.4 + endloop +endfacet +facet normal 0.7990717941595427 0.6012356175233216 -2.913452840785481e-16 + outer loop + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 137.4868191504033 -29.401780843702266 617.4 + vertex 137.82502310785486 -29.851270586485448 617.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 145.06150352437302 -42.385222335872164 604.4681483474218 + vertex 165.4703225694756 -77.73433384446909 597.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 145.06150352437302 -42.385222335872164 604.4681483474218 + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 144.8203225694756 -41.96748466817175 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.8203225694756 -41.96748466817175 604.6679491924311 + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 144.613215788289 -41.6087652005646 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.613215788289 -41.6087652005646 604.9857864376269 + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 137.82502310785486 -29.851270586485448 617.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 145.06150352437302 -42.385222335872164 604.4681483474218 + vertex 145.32032256947556 -42.833510071956184 604.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.613215788289 -41.6087652005646 604.9857864376269 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.45429716569112 -41.333510071956184 605.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.45429716569112 -41.333510071956184 605.4 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.3543967431865 -41.160477464480586 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.3543967431865 -41.160477464480586 605.8823619097949 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.32032256947556 -41.101459264387316 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.32032256947556 -41.101459264387316 606.3999999999999 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.32032256947556 -41.101459264387316 608.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.32032256947556 -41.101459264387316 608.4 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.3543967431865 -41.160477464480586 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.3543967431865 -41.160477464480586 608.9176380902051 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.45429716569112 -41.3335100719562 609.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.45429716569112 -41.3335100719562 609.4 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.613215788289 -41.6087652005646 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.613215788289 -41.6087652005646 609.814213562373 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 144.8203225694756 -41.96748466817175 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 144.8203225694756 -41.96748466817175 610.1320508075687 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 145.06150352437305 -42.38522233587218 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 145.06150352437305 -42.38522233587218 610.331851652578 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 145.32032256947556 -42.833510071956184 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 145.32032256947556 -42.833510071956184 610.3999999999999 + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 157.72032256947554 -64.31094008581026 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 165.4703225694756 -77.73433384446909 617.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 158.22032256947554 -65.17696548959472 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 158.22032256947554 -65.17696548959472 604.6679491924311 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 157.97914161457808 -64.7592278218943 604.4681483474218 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 157.97914161457808 -64.7592278218943 604.4681483474218 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 157.72032256947554 -64.31094008581026 604.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 157.72032256947554 -64.31094008581026 604.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 145.32032256947556 -42.833510071956184 604.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 158.58634797326002 -65.81094008581026 605.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.58634797326002 -65.81094008581026 605.4 + vertex 158.68624839576464 -65.98397269328589 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.68624839576464 -65.98397269328589 605.8823619097949 + vertex 158.72032256947557 -66.04299089337914 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.72032256947557 -66.04299089337914 606.3999999999999 + vertex 158.72032256947557 -66.04299089337914 608.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.72032256947557 -66.04299089337914 608.4 + vertex 158.68624839576464 -65.98397269328589 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.68624839576464 -65.98397269328589 608.9176380902051 + vertex 158.58634797326002 -65.81094008581026 609.4 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.58634797326002 -65.81094008581026 609.4 + vertex 158.42742935066212 -65.53568495720187 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.42742935066212 -65.53568495720187 609.814213562373 + vertex 158.22032256947557 -65.17696548959472 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 158.22032256947557 -65.17696548959472 610.1320508075687 + vertex 157.97914161457808 -64.7592278218943 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 157.97914161457808 -64.7592278218943 610.331851652578 + vertex 157.72032256947554 -64.31094008581026 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 0.5000000000000003 -3.0479839899610575e-16 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 157.72032256947554 -64.31094008581026 610.3999999999999 + vertex 137.82502310785486 -29.851270586485448 617.4 + endloop +endfacet +facet normal 0.14720786925724988 -0.9891055773923938 2.5825137241488983e-17 + outer loop + vertex 154.83214687982968 -123.66723255536577 617.4 + vertex 153.23820152839707 -123.90445829168756 597.4 + vertex 154.83214687982968 -123.66723255536577 597.4 + endloop +endfacet +facet normal 0.14720786925724988 -0.9891055773923938 2.5825137241488983e-17 + outer loop + vertex 153.23820152839707 -123.90445829168756 597.4 + vertex 154.83214687982968 -123.66723255536577 617.4 + vertex 153.23820152839707 -123.90445829168756 617.4 + endloop +endfacet +facet normal 0.6999089239761678 -0.7142321038279666 -1.6550166174886706e-16 + outer loop + vertex 175.89783222505156 -112.6351991757552 597.4 + vertex 174.7468459524417 -113.76310361922131 617.4 + vertex 174.7468459524417 -113.76310361922131 597.4 + endloop +endfacet +facet normal 0.6999089239761678 -0.7142321038279666 -1.6550166174886706e-16 + outer loop + vertex 174.7468459524417 -113.76310361922131 617.4 + vertex 175.89783222505156 -112.6351991757552 597.4 + vertex 175.89783222505156 -112.6351991757552 617.4 + endloop +endfacet +facet normal 0.2698621119172097 -0.9628989773343741 -1.4118899179752732e-17 + outer loop + vertex 159.5350332499214 -122.55906210334592 597.4 + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 157.98331987988098 -122.9939453641928 597.4 + endloop +endfacet +facet normal 0.2698621119172097 -0.9628989773343741 -1.4118899179752732e-17 + outer loop + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 159.5350332499214 -122.55906210334592 597.4 + vertex 159.5350332499214 -122.55906210334592 617.4 + endloop +endfacet +facet normal 0.3098971353857553 -0.9507700907578567 -2.7415246024207406e-17 + outer loop + vertex 161.06720089823253 -122.05966233282531 597.4 + vertex 159.5350332499214 -122.55906210334592 617.4 + vertex 159.5350332499214 -122.55906210334592 597.4 + endloop +endfacet +facet normal 0.3098971353857553 -0.9507700907578567 -2.7415246024207406e-17 + outer loop + vertex 159.5350332499214 -122.55906210334592 617.4 + vertex 161.06720089823253 -122.05966233282531 597.4 + vertex 161.06720089823253 -122.05966233282531 617.4 + endloop +endfacet +facet normal 0.571169500434386 -0.8208321398273426 -1.1785908513505626e-16 + outer loop + vertex 171.0253534737069 -116.84460904537998 597.4 + vertex 169.70258105841677 -117.76504968478841 617.4 + vertex 169.70258105841677 -117.76504968478841 597.4 + endloop +endfacet +facet normal 0.571169500434386 -0.8208321398273426 -1.1785908513505626e-16 + outer loop + vertex 169.70258105841677 -117.76504968478841 617.4 + vertex 171.0253534737069 -116.84460904537998 597.4 + vertex 171.0253534737069 -116.84460904537998 617.4 + endloop +endfacet +facet normal 0.8329651413758264 -0.5533254677427648 -2.1840864678576697e-16 + outer loop + vertex 180.8928137939151 -106.33070376458777 597.4 + vertex 180.00112884410115 -107.67302853289175 617.4 + vertex 180.00112884410115 -107.67302853289175 597.4 + endloop +endfacet +facet normal 0.8329651413758264 -0.5533254677427648 -2.1840864678576697e-16 + outer loop + vertex 180.00112884410115 -107.67302853289175 617.4 + vertex 180.8928137939151 -106.33070376458777 597.4 + vertex 180.8928137939151 -106.33070376458777 617.4 + endloop +endfacet +facet normal 0.6049992586789495 -0.7962260338609393 -1.3013227922530806e-16 + outer loop + vertex 172.30847310660613 -115.8696516919559 597.4 + vertex 171.0253534737069 -116.84460904537998 617.4 + vertex 171.0253534737069 -116.84460904537998 597.4 + endloop +endfacet +facet normal 0.6049992586789495 -0.7962260338609393 -1.3013227922530806e-16 + outer loop + vertex 171.0253534737069 -116.84460904537998 617.4 + vertex 172.30847310660613 -115.8696516919559 597.4 + vertex 172.30847310660613 -115.8696516919559 617.4 + endloop +endfacet +facet normal 0.6377703208595341 -0.7702266016119718 -1.4217775314923108e-16 + outer loop + vertex 173.5496946093963 -114.84188371505724 597.4 + vertex 172.30847310660613 -115.8696516919559 617.4 + vertex 172.30847310660613 -115.8696516919559 597.4 + endloop +endfacet +facet normal 0.6377703208595341 -0.7702266016119718 -1.4217775314923108e-16 + outer loop + vertex 172.30847310660613 -115.8696516919559 617.4 + vertex 173.5496946093963 -114.84188371505724 597.4 + vertex 173.5496946093963 -114.84188371505724 617.4 + endloop +endfacet +facet normal 0.5005724413202272 -0.8656946522826092 -9.271580545042547e-17 + outer loop + vertex 168.34247059737297 -118.62936291914635 597.4 + vertex 166.94740216554413 -119.43603627549433 617.4 + vertex 166.94740216554413 -119.43603627549433 597.4 + endloop +endfacet +facet normal 0.5005724413202272 -0.8656946522826092 -9.271580545042547e-17 + outer loop + vertex 166.94740216554413 -119.43603627549433 617.4 + vertex 168.34247059737297 -118.62936291914635 597.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + endloop +endfacet +facet normal 0.10571189404139092 -0.9943967998028664 3.908047838012932e-17 + outer loop + vertex 153.23820152839707 -123.90445829168756 617.4 + vertex 151.63572936288375 -124.07481319206396 597.4 + vertex 153.23820152839707 -123.90445829168756 597.4 + endloop +endfacet +facet normal 0.10571189404139092 -0.9943967998028664 3.908047838012932e-17 + outer loop + vertex 151.63572936288375 -124.07481319206396 597.4 + vertex 153.23820152839707 -123.90445829168756 617.4 + vertex 151.63572936288375 -124.07481319206396 617.4 + endloop +endfacet +facet normal 0.18844624350994654 -0.9820835062798836 1.2524604359616437e-17 + outer loop + vertex 156.4147761514999 -123.36355110749699 617.4 + vertex 154.83214687982968 -123.66723255536577 597.4 + vertex 156.4147761514999 -123.36355110749699 597.4 + endloop +endfacet +facet normal 0.18844624350994654 -0.9820835062798836 1.2524604359616437e-17 + outer loop + vertex 154.83214687982968 -123.66723255536577 597.4 + vertex 156.4147761514999 -123.36355110749699 617.4 + vertex 154.83214687982968 -123.66723255536577 617.4 + endloop +endfacet +facet normal 0.8553779590758183 -0.518004389100409 -2.279145463383572e-16 + outer loop + vertex 181.72757876430893 -104.95226070173368 597.4 + vertex 180.8928137939151 -106.33070376458777 617.4 + vertex 180.8928137939151 -106.33070376458777 597.4 + endloop +endfacet +facet normal 0.8553779590758183 -0.518004389100409 -2.279145463383572e-16 + outer loop + vertex 180.8928137939151 -106.33070376458777 617.4 + vertex 181.72757876430893 -104.95226070173368 597.4 + vertex 181.72757876430893 -104.95226070173368 617.4 + endloop +endfacet +facet normal -0.9783396194476177 -0.20700625357483948 3.184631229828644e-16 + outer loop + vertex 182.95785573205208 -77.61182351337034 617.4 + vertex 183.26546823547173 -79.06564190936429 597.4 + vertex 183.26546823547173 -79.06564190936429 617.4 + endloop +endfacet +facet normal -0.9783396194476177 -0.20700625357483948 3.184631229828644e-16 + outer loop + vertex 183.26546823547173 -79.06564190936429 597.4 + vertex 182.95785573205208 -77.61182351337034 617.4 + vertex 182.95785573205208 -77.61182351337034 597.4 + endloop +endfacet +facet normal 0.9999473364568807 -0.010262763409046471 -3.0946219034443566e-16 + outer loop + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 152.85873887103978 -120.92855370792294 597.4 + endloop +endfacet +facet normal 0.9999473364568807 -0.010262763409046471 -3.0946219034443566e-16 + outer loop + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 153.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal -0.6377703208595134 0.7702266016119889 1.4217775314922344e-16 + outer loop + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 170.44391083996473 -113.51945860333166 597.4 + vertex 170.44391083996473 -113.51945860333166 617.4 + endloop +endfacet +facet normal -0.6377703208595134 0.7702266016119889 1.4217775314922344e-16 + outer loop + vertex 170.44391083996473 -113.51945860333166 597.4 + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 170.69963869919482 -113.30770840086846 597.4 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -2.3251894735637803e-16 + outer loop + vertex 166.70536792090212 -105.80546266909828 597.4 + vertex 165.70536792090212 -107.53751347666717 617.4 + vertex 165.70536792090212 -107.53751347666717 597.4 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -2.3251894735637803e-16 + outer loop + vertex 165.70536792090212 -107.53751347666717 617.4 + vertex 166.70536792090212 -105.80546266909828 597.4 + vertex 166.70536792090212 -105.80546266909828 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 162.15253457015436 -103.17688310846856 617.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 161.15253457015436 -104.90893391603744 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 162.15253457015436 -103.17688310846856 617.4 + vertex 162.15253457015436 -103.17688310846856 597.4 + endloop +endfacet +facet normal -0.30989713538576374 0.9507700907578538 2.7415246024210228e-17 + outer loop + vertex 160.0780540076148 -119.22742144815797 617.4 + vertex 158.66520409248508 -119.68793040367183 597.4 + vertex 158.66520409248508 -119.68793040367183 617.4 + endloop +endfacet +facet normal -0.30989713538576374 0.9507700907578538 2.7415246024210228e-17 + outer loop + vertex 158.66520409248508 -119.68793040367183 597.4 + vertex 160.0780540076148 -119.22742144815797 617.4 + vertex 160.0780540076148 -119.22742144815797 597.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004404e-16 + outer loop + vertex 182.58046225985305 -93.60899269908619 617.4 + vertex 175.9553679209021 -89.7839926990862 597.4 + vertex 182.58046225985305 -93.60899269908619 597.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004404e-16 + outer loop + vertex 175.9553679209021 -89.7839926990862 597.4 + vertex 182.58046225985305 -93.60899269908619 617.4 + vertex 175.9553679209021 -89.7839926990862 617.4 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -2.3251894735637803e-16 + outer loop + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 154.57694148227208 -101.11251347666716 597.4 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -2.3251894735637803e-16 + outer loop + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 164.82694148227208 -83.35899269908619 617.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004406e-16 + outer loop + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 155.41311056879687 -104.48202726980841 597.4 + vertex 170.69963869919482 -113.30770840086846 597.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004406e-16 + outer loop + vertex 155.41311056879687 -104.48202726980841 597.4 + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 155.41311056879687 -104.48202726980841 617.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004404e-16 + outer loop + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 171.40253457015436 -87.15541313845647 597.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004404e-16 + outer loop + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 164.82694148227208 -83.35899269908619 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 182.58046225985305 -93.60899269908619 617.4 + vertex 172.33046225985308 -111.36251347666716 597.4 + vertex 172.33046225985308 -111.36251347666716 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 172.33046225985308 -111.36251347666716 597.4 + vertex 182.58046225985305 -93.60899269908619 617.4 + vertex 182.58046225985305 -93.60899269908619 597.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004404e-16 + outer loop + vertex 165.70536792090212 -107.53751347666717 617.4 + vertex 172.33046225985308 -111.36251347666716 597.4 + vertex 165.70536792090212 -107.53751347666717 597.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004404e-16 + outer loop + vertex 172.33046225985308 -111.36251347666716 597.4 + vertex 165.70536792090212 -107.53751347666717 617.4 + vertex 172.33046225985308 -111.36251347666716 617.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004404e-16 + outer loop + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 154.57694148227208 -101.11251347666716 597.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004404e-16 + outer loop + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 161.15253457015436 -104.90893391603744 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 170.40253457015436 -88.88746394602533 597.4 + vertex 170.40253457015436 -88.88746394602533 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 170.40253457015436 -88.88746394602533 597.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 171.40253457015436 -87.15541313845647 597.4 + endloop +endfacet +facet normal -1.5543122344752188e-15 -1.0 7.22794516397282e-17 + outer loop + vertex 155.41311056879687 -104.48202726980841 617.4 + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 155.41311056879687 -104.48202726980841 597.4 + endloop +endfacet +facet normal -1.5543122344752188e-15 -1.0 7.22794516397282e-17 + outer loop + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 155.41311056879687 -104.48202726980841 617.4 + vertex 153.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -2.3251894735637803e-16 + outer loop + vertex 175.9553679209021 -89.7839926990862 597.4 + vertex 174.9553679209021 -91.51604350665507 617.4 + vertex 174.9553679209021 -91.51604350665507 597.4 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -2.3251894735637803e-16 + outer loop + vertex 174.9553679209021 -91.51604350665507 617.4 + vertex 175.9553679209021 -89.7839926990862 597.4 + vertex 175.9553679209021 -89.7839926990862 617.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004409e-16 + outer loop + vertex 162.15253457015436 -103.17688310846856 617.4 + vertex 166.70536792090212 -105.80546266909828 597.4 + vertex 162.15253457015436 -103.17688310846856 597.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004409e-16 + outer loop + vertex 166.70536792090212 -105.80546266909828 597.4 + vertex 162.15253457015436 -103.17688310846856 617.4 + vertex 166.70536792090212 -105.80546266909828 617.4 + endloop +endfacet +facet normal -0.6049992586789347 0.7962260338609506 1.301322792253026e-16 + outer loop + vertex 170.44391083996473 -113.51945860333166 617.4 + vertex 169.26071429718348 -114.41849103986607 597.4 + vertex 169.26071429718348 -114.41849103986607 617.4 + endloop +endfacet +facet normal -0.6049992586789347 0.7962260338609506 1.301322792253026e-16 + outer loop + vertex 169.26071429718348 -114.41849103986607 597.4 + vertex 170.44391083996473 -113.51945860333166 617.4 + vertex 170.44391083996473 -113.51945860333166 597.4 + endloop +endfacet +facet normal -0.46392867916165254 0.8858725532780236 7.98897184078563e-17 + outer loop + vertex 165.5003339197542 -116.80811057410426 617.4 + vertex 164.18392212485125 -117.4975113044715 597.4 + vertex 164.18392212485125 -117.4975113044715 617.4 + endloop +endfacet +facet normal -0.46392867916165254 0.8858725532780236 7.98897184078563e-17 + outer loop + vertex 164.18392212485125 -117.4975113044715 597.4 + vertex 165.5003339197542 -116.80811057410426 617.4 + vertex 165.5003339197542 -116.80811057410426 597.4 + endloop +endfacet +facet normal -0.18844624350994066 0.9820835062798847 -1.2524604359618403e-17 + outer loop + vertex 154.3285555435008 -120.70980195331025 617.4 + vertex 155.7879373772224 -120.42976973338911 597.4 + vertex 154.3285555435008 -120.70980195331025 597.4 + endloop +endfacet +facet normal -0.18844624350994066 0.9820835062798847 -1.2524604359618403e-17 + outer loop + vertex 155.7879373772224 -120.42976973338911 597.4 + vertex 154.3285555435008 -120.70980195331025 617.4 + vertex 155.7879373772224 -120.42976973338911 617.4 + endloop +endfacet +facet normal -0.96882603160823 -0.24774204422796148 3.184561753812836e-16 + outer loop + vertex 182.58970960549215 -76.17214236454276 617.4 + vertex 182.95785573205208 -77.61182351337034 597.4 + vertex 182.95785573205208 -77.61182351337034 617.4 + endloop +endfacet +facet normal -0.96882603160823 -0.24774204422796148 3.184561753812836e-16 + outer loop + vertex 182.95785573205208 -77.61182351337034 597.4 + vertex 182.58970960549215 -76.17214236454276 617.4 + vertex 182.58970960549215 -76.17214236454276 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 166.70536792090212 -105.80546266909828 597.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 162.15253457015436 -103.17688310846856 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 154.57694148227208 -101.11251347666716 597.4 + vertex 155.41311056879687 -104.48202726980841 597.4 + vertex 153.02753457015436 -104.48202726980841 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 155.41311056879687 -104.48202726980841 597.4 + vertex 154.57694148227208 -101.11251347666716 597.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 155.41311056879687 -104.48202726980841 597.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 170.69963869919482 -113.30770840086846 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 170.69963869919482 -113.30770840086846 597.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 165.70536792090212 -107.53751347666717 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 165.70536792090212 -107.53751347666717 597.4 + vertex 161.15253457015436 -104.90893391603744 597.4 + vertex 166.70536792090212 -105.80546266909828 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 170.69963869919482 -113.30770840086846 597.4 + vertex 165.70536792090212 -107.53751347666717 597.4 + vertex 172.33046225985308 -111.36251347666716 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 93.58223510853361 -102.48202726980837 597.4 + vertex 94.73693564691285 -100.48202726980837 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 93.58223510853361 -102.48202726980837 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 93.36206755126861 -102.99966536001341 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 93.36206755126861 -102.99966536001341 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 93.31428591610249 -103.48202726980837 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 93.31428591610249 -103.48202726980837 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 93.44214644250893 -103.89624083218146 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 93.44214644250893 -103.89624083218146 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 93.73693564691287 -104.21407807737724 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 93.73693564691287 -104.21407807737724 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 94.17856413219633 -104.41387892238649 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 94.17856413219633 -104.41387892238649 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 94.73693564691287 -104.48202726980836 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 94.73693564691287 -104.48202726980836 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 150.02753457015436 -104.48202726980841 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 124.4505819046373 -100.42011377814158 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 124.4505819046373 -100.42011377814158 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 123.76440978664102 -100.23625451325573 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 123.76440978664102 -100.23625451325573 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 123.12058899123211 -99.93603594587711 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 123.12058899123211 -99.93603594587711 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 122.53868168748998 -99.52858006525759 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 122.53868168748998 -99.52858006525759 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 122.0363688343796 -99.02626721214719 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 122.0363688343796 -99.02626721214719 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.62891295376006 -98.44435990840508 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.62891295376006 -98.44435990840508 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.32869438638144 -97.80053911299616 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.32869438638144 -97.80053911299616 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.14483512149562 -97.11436699499988 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.14483512149562 -97.11436699499988 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.07305832758567 -96.49857203241156 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.07305832758567 -96.49857203241156 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.13921260616524 -95.74242516819555 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.13921260616524 -95.74242516819555 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.14483512149562 -95.69901809900362 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.14483512149562 -95.69901809900362 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.335665377625 -95.00925344381999 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.335665377625 -95.00925344381999 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 121.62891295376008 -94.36902518559845 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.62891295376008 -94.36902518559845 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 142.51289504782767 -58.19690713431473 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.07305832758567 -96.49857203241156 597.4 + vertex 121.13921260616524 -95.74242516819555 597.4 + vertex 121.08292162982879 -96.40669254700175 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 124.4505819046373 -100.42011377814158 597.4 + vertex 125.15825635263542 -100.4820272698084 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 125.15825635263542 -100.4820272698084 597.4 + vertex 150.55309081768115 -100.48202726980841 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 150.55309081768115 -100.48202726980841 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 164.82694148227208 -83.35899269908619 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 166.9703225694756 -80.3324100558224 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 166.9703225694756 -80.3324100558224 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 179.92468545251552 -69.38910354298147 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 166.9703225694756 -80.3324100558224 597.4 + vertex 179.92468545251552 -69.38910354298147 597.4 + vertex 181.12903441933793 -71.96296547328228 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 179.92468545251552 -69.38910354298147 597.4 + vertex 182.52753457015436 -67.8863479042527 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 182.52753457015436 -67.8863479042527 597.4 + vertex 183.24227030542377 -69.33067842807887 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 183.24227030542377 -69.33067842807887 597.4 + vertex 181.6744981789514 -73.3452399278458 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 181.6744981789514 -73.3452399278458 597.4 + vertex 183.24227030542377 -69.33067842807887 597.4 + vertex 183.8959747167953 -70.80363748245902 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 181.6744981789514 -73.3452399278458 597.4 + vertex 183.8959747167953 -70.80363748245902 597.4 + vertex 182.16167407948237 -74.74911777963077 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.16167407948237 -74.74911777963077 597.4 + vertex 183.8959747167953 -70.80363748245902 597.4 + vertex 184.48750387842549 -72.30264751720468 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.16167407948237 -74.74911777963077 597.4 + vertex 184.48750387842549 -72.30264751720468 597.4 + vertex 182.58970960549215 -76.17214236454276 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.58970960549215 -76.17214236454276 597.4 + vertex 184.48750387842549 -72.30264751720468 597.4 + vertex 185.01582266574817 -73.82508539517835 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.58970960549215 -76.17214236454276 597.4 + vertex 185.01582266574817 -73.82508539517835 597.4 + vertex 182.95785573205208 -77.61182351337034 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.95785573205208 -77.61182351337034 597.4 + vertex 185.01582266574817 -73.82508539517835 597.4 + vertex 185.48000656685264 -75.3682869825552 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.95785573205208 -77.61182351337034 597.4 + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 183.26546823547173 -79.06564190936429 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.26546823547173 -79.06564190936429 597.4 + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 183.51200882063426 -80.53105349682296 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.51200882063426 -80.53105349682296 597.4 + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 185.87924330029887 -76.92955181082564 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.51200882063426 -80.53105349682296 597.4 + vertex 185.87924330029887 -76.92955181082564 597.4 + vertex 183.6970460629663 -82.00549393296838 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.6970460629663 -82.00549393296838 597.4 + vertex 185.87924330029887 -76.92955181082564 597.4 + vertex 186.21283423653944 -78.50614780237997 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.6970460629663 -82.00549393296838 597.4 + vertex 186.21283423653944 -78.50614780237997 597.4 + vertex 183.8202561633931 -83.48638307532285 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.8202561633931 -83.48638307532285 597.4 + vertex 186.21283423653944 -78.50614780237997 597.4 + vertex 186.48019562046042 -80.0953160514068 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.8202561633931 -83.48638307532285 597.4 + vertex 186.48019562046042 -80.0953160514068 597.4 + vertex 183.881423514959 -84.97112949673391 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.881423514959 -84.97112949673391 597.4 + vertex 186.48019562046042 -80.0953160514068 597.4 + vertex 186.6808595929021 -81.69427565173788 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.881423514959 -84.97112949673391 597.4 + vertex 186.6808595929021 -81.69427565173788 597.4 + vertex 183.8804410801207 -86.45713502014634 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.8804410801207 -86.45713502014634 597.4 + vertex 186.6808595929021 -81.69427565173788 597.4 + vertex 183.81731057805365 -87.94179926518606 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.81731057805365 -87.94179926518606 597.4 + vertex 186.6808595929021 -81.69427565173788 597.4 + vertex 186.8144750093717 -83.30022856319225 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.81731057805365 -87.94179926518606 597.4 + vertex 186.8144750093717 -83.30022856319225 597.4 + vertex 183.6921424816438 -89.42252419859929 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.6921424816438 -89.42252419859929 597.4 + vertex 186.8144750093717 -83.30022856319225 597.4 + vertex 186.8808080545158 -84.91036450790281 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.6921424816438 -89.42252419859929 597.4 + vertex 186.8808080545158 -84.91036450790281 597.4 + vertex 183.5051558241694 -90.896718680585 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.5051558241694 -90.896718680585 597.4 + vertex 186.8808080545158 -84.91036450790281 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.5051558241694 -90.896718680585 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 183.4496386991948 -91.22406060436529 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 182.58046225985305 -93.60899269908619 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 182.58046225985305 -93.60899269908619 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 172.33046225985308 -111.36251347666716 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 172.33046225985308 -111.36251347666716 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 168.34247059737297 -118.62936291914635 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 168.34247059737297 -118.62936291914635 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 169.70258105841677 -117.76504968478841 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 169.70258105841677 -117.76504968478841 597.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + vertex 186.81128066401763 -88.13191271645415 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 169.70258105841677 -117.76504968478841 597.4 + vertex 186.81128066401763 -88.13191271645415 597.4 + vertex 171.0253534737069 -116.84460904537998 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 171.0253534737069 -116.84460904537998 597.4 + vertex 186.81128066401763 -88.13191271645415 597.4 + vertex 186.67554189525939 -89.73768755122492 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 171.0253534737069 -116.84460904537998 597.4 + vertex 186.67554189525939 -89.73768755122492 597.4 + vertex 186.4727638760373 -91.33638042612223 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 171.0253534737069 -116.84460904537998 597.4 + vertex 186.4727638760373 -91.33638042612223 597.4 + vertex 172.30847310660613 -115.8696516919559 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 172.30847310660613 -115.8696516919559 597.4 + vertex 186.4727638760373 -91.33638042612223 597.4 + vertex 173.5496946093963 -114.84188371505724 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 173.5496946093963 -114.84188371505724 597.4 + vertex 186.4727638760373 -91.33638042612223 597.4 + vertex 186.20330145024204 -92.92519376771138 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 173.5496946093963 -114.84188371505724 597.4 + vertex 186.20330145024204 -92.92519376771138 597.4 + vertex 174.7468459524417 -113.76310361922131 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 174.7468459524417 -113.76310361922131 597.4 + vertex 186.20330145024204 -92.92519376771138 597.4 + vertex 185.86762615367383 -94.50134729088126 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 174.7468459524417 -113.76310361922131 597.4 + vertex 185.86762615367383 -94.50134729088126 597.4 + vertex 185.4663253888957 -96.06208286410167 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 174.7468459524417 -113.76310361922131 597.4 + vertex 185.4663253888957 -96.06208286410167 597.4 + vertex 175.89783222505156 -112.6351991757552 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 175.89783222505156 -112.6351991757552 597.4 + vertex 185.4663253888957 -96.06208286410167 597.4 + vertex 185.0001013973305 -97.60466933591321 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 175.89783222505156 -112.6351991757552 597.4 + vertex 185.0001013973305 -97.60466933591321 597.4 + vertex 177.000639301392 -111.46014411930012 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 177.000639301392 -111.46014411930012 597.4 + vertex 185.0001013973305 -97.60466933591321 597.4 + vertex 184.4697700303989 -99.12640731420498 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 177.000639301392 -111.46014411930012 597.4 + vertex 184.4697700303989 -99.12640731420498 597.4 + vertex 178.05333736503042 -110.23999469396776 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 178.05333736503042 -110.23999469396776 597.4 + vertex 184.4697700303989 -99.12640731420498 597.4 + vertex 183.87625932185094 -100.62463388991574 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 178.05333736503042 -110.23999469396776 597.4 + vertex 183.87625932185094 -100.62463388991574 597.4 + vertex 179.05408428594694 -108.97688605509174 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 179.05408428594694 -108.97688605509174 597.4 + vertex 183.87625932185094 -100.62463388991574 597.4 + vertex 183.2206078637874 -102.0967272968931 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 179.05408428594694 -108.97688605509174 597.4 + vertex 183.2206078637874 -102.0967272968931 597.4 + vertex 180.00112884410115 -107.67302853289175 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 180.00112884410115 -107.67302853289175 597.4 + vertex 183.2206078637874 -102.0967272968931 597.4 + vertex 182.5039629892141 -103.54011149975624 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 180.00112884410115 -107.67302853289175 597.4 + vertex 182.5039629892141 -103.54011149975624 597.4 + vertex 180.8928137939151 -106.33070376458777 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 180.8928137939151 -106.33070376458777 597.4 + vertex 182.5039629892141 -103.54011149975624 597.4 + vertex 181.72757876430893 -104.95226070173368 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 150.02753457015436 -121.17248787278366 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 154.57694148227208 -101.11251347666716 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 154.57694148227208 -101.11251347666716 597.4 + vertex 150.02753457015436 -104.48202726980841 597.4 + vertex 164.82694148227208 -83.35899269908619 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -121.17248787278366 597.4 + vertex 153.02753457015436 -104.48202726980841 597.4 + vertex 152.85873887103978 -120.92855370792294 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015436 -121.17248787278366 597.4 + vertex 152.85873887103978 -120.92855370792294 597.4 + vertex 150.02753457015433 -124.17799915024119 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 150.02753457015433 -124.17799915024119 597.4 + vertex 152.85873887103978 -120.92855370792294 597.4 + vertex 151.63572936288375 -124.07481319206396 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 151.63572936288375 -124.07481319206396 597.4 + vertex 152.85873887103978 -120.92855370792294 597.4 + vertex 154.3285555435008 -120.70980195331025 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 151.63572936288375 -124.07481319206396 597.4 + vertex 154.3285555435008 -120.70980195331025 597.4 + vertex 153.23820152839707 -123.90445829168756 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 153.23820152839707 -123.90445829168756 597.4 + vertex 154.3285555435008 -120.70980195331025 597.4 + vertex 155.7879373772224 -120.42976973338911 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 153.23820152839707 -123.90445829168756 597.4 + vertex 155.7879373772224 -120.42976973338911 597.4 + vertex 154.83214687982968 -123.66723255536577 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 154.83214687982968 -123.66723255536577 597.4 + vertex 155.7879373772224 -120.42976973338911 597.4 + vertex 157.23433058097086 -120.08894708017985 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 154.83214687982968 -123.66723255536577 597.4 + vertex 157.23433058097086 -120.08894708017985 597.4 + vertex 156.4147761514999 -123.36355110749699 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 156.4147761514999 -123.36355110749699 597.4 + vertex 157.23433058097086 -120.08894708017985 597.4 + vertex 158.66520409248508 -119.68793040367183 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 156.4147761514999 -123.36355110749699 597.4 + vertex 158.66520409248508 -119.68793040367183 597.4 + vertex 157.98331987988098 -122.9939453641928 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 157.98331987988098 -122.9939453641928 597.4 + vertex 158.66520409248508 -119.68793040367183 597.4 + vertex 160.0780540076148 -119.22742144815797 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 157.98331987988098 -122.9939453641928 597.4 + vertex 160.0780540076148 -119.22742144815797 597.4 + vertex 161.4704079619354 -118.70822606424326 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 157.98331987988098 -122.9939453641928 597.4 + vertex 161.4704079619354 -118.70822606424326 597.4 + vertex 159.5350332499214 -122.55906210334592 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 159.5350332499214 -122.55906210334592 597.4 + vertex 161.4704079619354 -118.70822606424326 597.4 + vertex 162.83982945717034 -118.1312527986763 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 159.5350332499214 -122.55906210334592 597.4 + vertex 162.83982945717034 -118.1312527986763 597.4 + vertex 161.06720089823253 -122.05966233282531 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 161.06720089823253 -122.05966233282531 597.4 + vertex 162.83982945717034 -118.1312527986763 597.4 + vertex 164.18392212485125 -117.4975113044715 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 161.06720089823253 -122.05966233282531 597.4 + vertex 164.18392212485125 -117.4975113044715 597.4 + vertex 162.5771416647378 -121.49661995877848 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 162.5771416647378 -121.49661995877848 597.4 + vertex 164.18392212485125 -117.4975113044715 597.4 + vertex 165.5003339197542 -116.80811057410426 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 162.5771416647378 -121.49661995877848 597.4 + vertex 165.5003339197542 -116.80811057410426 597.4 + vertex 164.0622132844704 -120.8709202563717 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 164.0622132844704 -120.8709202563717 597.4 + vertex 165.5003339197542 -116.80811057410426 597.4 + vertex 166.7867612357742 -116.06425699887052 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 164.0622132844704 -120.8709202563717 597.4 + vertex 166.7867612357742 -116.06425699887052 597.4 + vertex 168.04095293703554 -115.26725225780697 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 164.0622132844704 -120.8709202563717 597.4 + vertex 168.04095293703554 -115.26725225780697 597.4 + vertex 165.51981701130626 -120.18365814564446 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 165.51981701130626 -120.18365814564446 597.4 + vertex 168.04095293703554 -115.26725225780697 597.4 + vertex 169.26071429718348 -114.41849103986607 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 165.51981701130626 -120.18365814564446 597.4 + vertex 169.26071429718348 -114.41849103986607 597.4 + vertex 166.94740216554413 -119.43603627549433 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 166.94740216554413 -119.43603627549433 597.4 + vertex 169.26071429718348 -114.41849103986607 597.4 + vertex 170.44391083996473 -113.51945860333166 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 166.94740216554413 -119.43603627549433 597.4 + vertex 170.44391083996473 -113.51945860333166 597.4 + vertex 168.34247059737297 -118.62936291914635 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 168.34247059737297 -118.62936291914635 597.4 + vertex 170.44391083996473 -113.51945860333166 597.4 + vertex 170.69963869919482 -113.30770840086846 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 168.34247059737297 -118.62936291914635 597.4 + vertex 170.69963869919482 -113.30770840086846 597.4 + vertex 172.33046225985308 -111.36251347666716 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 168.16311056879687 -82.39837947330525 597.4 + vertex 171.40253457015436 -87.15541313845647 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 168.16311056879687 -82.39837947330525 597.4 + vertex 164.82694148227208 -83.35899269908619 597.4 + vertex 166.9703225694756 -80.3324100558224 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 171.40253457015436 -87.15541313845647 597.4 + vertex 168.16311056879687 -82.39837947330525 597.4 + vertex 183.4496386991948 -91.22406060436529 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 171.40253457015436 -87.15541313845647 597.4 + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 175.9553679209021 -89.7839926990862 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 171.40253457015436 -87.15541313845647 597.4 + vertex 175.9553679209021 -89.7839926990862 597.4 + vertex 170.40253457015436 -88.88746394602533 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 175.9553679209021 -89.7839926990862 597.4 + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 182.58046225985305 -93.60899269908619 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 174.9553679209021 -91.51604350665507 597.4 + vertex 170.40253457015436 -88.88746394602533 597.4 + vertex 175.9553679209021 -89.7839926990862 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 121.65644752391407 -94.32133391112718 597.4 + vertex 121.62891295376008 -94.36902518559845 597.4 + vertex 142.51289504782767 -58.19690713431473 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 135.51562203109634 -29.851270586485427 597.4 + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 134.3609214927171 -31.851270586485423 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 135.51562203109634 -29.851270586485427 597.4 + vertex 135.85382598854787 -29.401780843702255 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 135.85382598854787 -29.401780843702255 597.4 + vertex 136.2476728386652 -29.11921977891656 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 136.2476728386652 -29.11921977891656 597.4 + vertex 136.6703225694756 -29.02284346173925 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 136.6703225694756 -29.02284346173925 597.4 + vertex 137.09297230028596 -29.11921977891656 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 137.09297230028596 -29.11921977891656 597.4 + vertex 137.4868191504033 -29.401780843702266 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 137.4868191504033 -29.401780843702266 597.4 + vertex 137.82502310785486 -29.851270586485438 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 137.82502310785486 -29.851270586485438 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 149.16412596495886 -57.61499983057261 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 149.16412596495886 -57.61499983057261 597.4 + vertex 148.66181311184846 -57.1126869774622 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 148.66181311184846 -57.1126869774622 597.4 + vertex 148.07990580810633 -56.70523109684268 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 148.07990580810633 -56.70523109684268 597.4 + vertex 147.43608501269742 -56.40501252946406 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 147.43608501269742 -56.40501252946406 597.4 + vertex 146.74991289470117 -56.22115326457821 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 146.74991289470117 -56.22115326457821 597.4 + vertex 146.04223844670304 -56.15923977291139 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 146.04223844670304 -56.15923977291139 597.4 + vertex 145.33456399870488 -56.22115326457819 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 145.33456399870488 -56.22115326457819 597.4 + vertex 144.64839188070863 -56.40501252946406 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 144.64839188070863 -56.40501252946406 597.4 + vertex 144.00457108529972 -56.70523109684268 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 144.00457108529972 -56.70523109684268 597.4 + vertex 143.4226637815576 -57.1126869774622 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 143.4226637815576 -57.1126869774622 597.4 + vertex 142.9203509284472 -57.614999830572586 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 142.9203509284472 -57.614999830572586 597.4 + vertex 142.51289504782767 -58.19690713431473 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 143.55963228918765 -47.783905050104764 597.4 + vertex 142.51289504782767 -58.19690713431473 597.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 149.16412596495886 -57.61499983057261 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 149.57158184557838 -58.19690713431471 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 149.57158184557838 -58.19690713431471 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 162.26899907810125 -80.18947890594492 597.4 + endloop +endfacet +facet normal -3.10220314556862e-16 -7.227945163972765e-17 -1.0 + outer loop + vertex 162.26899907810125 -80.18947890594492 597.4 + vertex 165.4703225694756 -77.73433384446909 597.4 + vertex 150.55309081768115 -100.48202726980841 597.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004409e-16 + outer loop + vertex 174.9553679209021 -91.51604350665507 617.4 + vertex 170.40253457015436 -88.88746394602533 597.4 + vertex 174.9553679209021 -91.51604350665507 597.4 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 2.1770599857004409e-16 + outer loop + vertex 170.40253457015436 -88.88746394602533 597.4 + vertex 174.9553679209021 -91.51604350665507 617.4 + vertex 170.40253457015436 -88.88746394602533 617.4 + endloop +endfacet +facet normal -0.5711695004344003 0.8208321398273325 1.1785908513506147e-16 + outer loop + vertex 169.26071429718348 -114.41849103986607 617.4 + vertex 168.04095293703554 -115.26725225780697 597.4 + vertex 168.04095293703554 -115.26725225780697 617.4 + endloop +endfacet +facet normal -0.5711695004344003 0.8208321398273325 1.1785908513506147e-16 + outer loop + vertex 168.04095293703554 -115.26725225780697 597.4 + vertex 169.26071429718348 -114.41849103986607 617.4 + vertex 169.26071429718348 -114.41849103986607 597.4 + endloop +endfacet +facet normal -0.9999997814571896 0.0006611244763946589 3.1017246104582315e-16 + outer loop + vertex 183.881423514959 -84.97112949673391 617.4 + vertex 183.8804410801207 -86.45713502014634 597.4 + vertex 183.8804410801207 -86.45713502014634 617.4 + endloop +endfacet +facet normal -0.9999997814571896 0.0006611244763946589 3.1017246104582315e-16 + outer loop + vertex 183.8804410801207 -86.45713502014634 597.4 + vertex 183.881423514959 -84.97112949673391 617.4 + vertex 183.881423514959 -84.97112949673391 597.4 + endloop +endfacet +facet normal -0.9965567391136532 -0.08291360399332831 3.151450949117094e-16 + outer loop + vertex 183.6970460629663 -82.00549393296838 617.4 + vertex 183.8202561633931 -83.48638307532285 597.4 + vertex 183.8202561633931 -83.48638307532285 617.4 + endloop +endfacet +facet normal -0.9965567391136532 -0.08291360399332831 3.151450949117094e-16 + outer loop + vertex 183.8202561633931 -83.48638307532285 597.4 + vertex 183.6970460629663 -82.00549393296838 617.4 + vertex 183.6970460629663 -82.00549393296838 597.4 + endloop +endfacet +facet normal 0.5088614820537074 -0.8608484141137188 -9.563751771150325e-17 + outer loop + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 166.9703225694756 -80.3324100558224 597.4 + endloop +endfacet +facet normal 0.5088614820537074 -0.8608484141137188 -9.563751771150325e-17 + outer loop + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 181.12903441933793 -71.96296547328228 617.4 + endloop +endfacet +facet normal -0.3882711944089143 0.9215451587373649 5.3840833328119297e-17 + outer loop + vertex 162.83982945717034 -118.1312527986763 617.4 + vertex 161.4704079619354 -118.70822606424326 597.4 + vertex 161.4704079619354 -118.70822606424326 617.4 + endloop +endfacet +facet normal -0.3882711944089143 0.9215451587373649 5.3840833328119297e-17 + outer loop + vertex 161.4704079619354 -118.70822606424326 597.4 + vertex 162.83982945717034 -118.1312527986763 617.4 + vertex 162.83982945717034 -118.1312527986763 597.4 + endloop +endfacet +facet normal -0.9576170825074757 -0.2880443078588266 3.178919571804744e-16 + outer loop + vertex 182.58970960549215 -76.17214236454276 617.4 + vertex 182.16167407948237 -74.74911777963077 597.4 + vertex 182.58970960549215 -76.17214236454276 597.4 + endloop +endfacet +facet normal -0.9576170825074757 -0.2880443078588266 3.178919571804744e-16 + outer loop + vertex 182.16167407948237 -74.74911777963077 597.4 + vertex 182.58970960549215 -76.17214236454276 617.4 + vertex 182.16167407948237 -74.74911777963077 617.4 + endloop +endfacet +facet normal -0.9447323868310448 -0.3278425190125848 3.167714557131983e-16 + outer loop + vertex 182.16167407948237 -74.74911777963077 617.4 + vertex 181.6744981789514 -73.3452399278458 597.4 + vertex 182.16167407948237 -74.74911777963077 597.4 + endloop +endfacet +facet normal -0.9447323868310448 -0.3278425190125848 3.167714557131983e-16 + outer loop + vertex 181.6744981789514 -73.3452399278458 597.4 + vertex 182.16167407948237 -74.74911777963077 617.4 + vertex 181.6744981789514 -73.3452399278458 617.4 + endloop +endfacet +facet normal -0.9922171154055783 -0.1245198614528357 3.1680613295388653e-16 + outer loop + vertex 183.51200882063426 -80.53105349682296 617.4 + vertex 183.6970460629663 -82.00549393296838 597.4 + vertex 183.6970460629663 -82.00549393296838 617.4 + endloop +endfacet +facet normal -0.9922171154055783 -0.1245198614528357 3.1680613295388653e-16 + outer loop + vertex 183.6970460629663 -82.00549393296838 597.4 + vertex 183.51200882063426 -80.53105349682296 617.4 + vertex 183.51200882063426 -80.53105349682296 597.4 + endloop +endfacet +facet normal -0.999097175068117 0.04248334698335731 3.0686956689872605e-16 + outer loop + vertex 183.8804410801207 -86.45713502014634 617.4 + vertex 183.81731057805365 -87.94179926518606 597.4 + vertex 183.81731057805365 -87.94179926518606 617.4 + endloop +endfacet +facet normal -0.999097175068117 0.04248334698335731 3.0686956689872605e-16 + outer loop + vertex 183.81731057805365 -87.94179926518606 597.4 + vertex 183.8804410801207 -86.45713502014634 617.4 + vertex 183.8804410801207 -86.45713502014634 597.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004406e-16 + outer loop + vertex 168.16311056879687 -82.39837947330525 617.4 + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 168.16311056879687 -82.39837947330525 597.4 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -2.1770599857004406e-16 + outer loop + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 168.16311056879687 -82.39837947330525 617.4 + vertex 183.4496386991948 -91.22406060436529 617.4 + endloop +endfacet +facet normal -0.9861411980746715 -0.16590821998879884 3.1791278782751894e-16 + outer loop + vertex 183.26546823547173 -79.06564190936429 617.4 + vertex 183.51200882063426 -80.53105349682296 597.4 + vertex 183.51200882063426 -80.53105349682296 617.4 + endloop +endfacet +facet normal -0.9861411980746715 -0.16590821998879884 3.1791278782751894e-16 + outer loop + vertex 183.51200882063426 -80.53105349682296 597.4 + vertex 183.26546823547173 -79.06564190936429 617.4 + vertex 183.26546823547173 -79.06564190936429 597.4 + endloop +endfacet +facet normal -0.9859209640962927 0.16721199883811244 2.9376672002655497e-16 + outer loop + vertex 183.5051558241694 -90.896718680585 617.4 + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 183.4496386991948 -91.22406060436529 617.4 + endloop +endfacet +facet normal -0.9859209640962927 0.16721199883811244 2.9376672002655497e-16 + outer loop + vertex 183.4496386991948 -91.22406060436529 597.4 + vertex 183.5051558241694 -90.896718680585 617.4 + vertex 183.5051558241694 -90.896718680585 597.4 + endloop +endfacet +facet normal -0.4264730821792922 0.904500254381664 6.692383130899358e-17 + outer loop + vertex 164.18392212485125 -117.4975113044715 617.4 + vertex 162.83982945717034 -118.1312527986763 597.4 + vertex 162.83982945717034 -118.1312527986763 617.4 + endloop +endfacet +facet normal -0.4264730821792922 0.904500254381664 6.692383130899358e-17 + outer loop + vertex 162.83982945717034 -118.1312527986763 597.4 + vertex 164.18392212485125 -117.4975113044715 617.4 + vertex 164.18392212485125 -117.4975113044715 597.4 + endloop +endfacet +facet normal 0.866025403784438 0.5000000000000009 -3.0479839899610566e-16 + outer loop + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 168.16311056879687 -82.39837947330525 597.4 + vertex 166.9703225694756 -80.3324100558224 597.4 + endloop +endfacet +facet normal 0.866025403784438 0.5000000000000009 -3.0479839899610566e-16 + outer loop + vertex 168.16311056879687 -82.39837947330525 597.4 + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 168.16311056879687 -82.39837947330525 617.4 + endloop +endfacet +facet normal -0.22935485323248733 0.9733428744788264 7.978454901592457e-19 + outer loop + vertex 155.7879373772224 -120.42976973338911 617.4 + vertex 157.23433058097086 -120.08894708017985 597.4 + vertex 155.7879373772224 -120.42976973338911 597.4 + endloop +endfacet +facet normal -0.22935485323248733 0.9733428744788264 7.978454901592457e-19 + outer loop + vertex 157.23433058097086 -120.08894708017985 597.4 + vertex 155.7879373772224 -120.42976973338911 617.4 + vertex 157.23433058097086 -120.08894708017985 617.4 + endloop +endfacet +facet normal -0.9920516018175776 0.12583171035624832 2.98659512949049e-16 + outer loop + vertex 183.6921424816438 -89.42252419859929 617.4 + vertex 183.5051558241694 -90.896718680585 597.4 + vertex 183.5051558241694 -90.896718680585 617.4 + endloop +endfacet +facet normal -0.9920516018175776 0.12583171035624832 2.98659512949049e-16 + outer loop + vertex 183.5051558241694 -90.896718680585 597.4 + vertex 183.6921424816438 -89.42252419859929 617.4 + vertex 183.6921424816438 -89.42252419859929 597.4 + endloop +endfacet +facet normal -0.9301944916753204 -0.36706703428242143 3.150966317595327e-16 + outer loop + vertex 181.6744981789514 -73.3452399278458 617.4 + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 181.6744981789514 -73.3452399278458 597.4 + endloop +endfacet +facet normal -0.9301944916753204 -0.36706703428242143 3.150966317595327e-16 + outer loop + vertex 181.12903441933793 -71.96296547328228 597.4 + vertex 181.6744981789514 -73.3452399278458 617.4 + vertex 181.12903441933793 -71.96296547328228 617.4 + endloop +endfacet +facet normal -0.5005724413202224 0.8656946522826121 9.271580545042372e-17 + outer loop + vertex 166.7867612357742 -116.06425699887052 617.4 + vertex 165.5003339197542 -116.80811057410426 597.4 + vertex 165.5003339197542 -116.80811057410426 617.4 + endloop +endfacet +facet normal -0.5005724413202224 0.8656946522826121 9.271580545042372e-17 + outer loop + vertex 165.5003339197542 -116.80811057410426 597.4 + vertex 166.7867612357742 -116.06425699887052 617.4 + vertex 166.7867612357742 -116.06425699887052 597.4 + endloop +endfacet +facet normal -0.9964462355504118 0.0842312273293781 3.0302967770914105e-16 + outer loop + vertex 183.81731057805365 -87.94179926518606 617.4 + vertex 183.6921424816438 -89.42252419859929 597.4 + vertex 183.6921424816438 -89.42252419859929 617.4 + endloop +endfacet +facet normal -0.9964462355504118 0.0842312273293781 3.0302967770914105e-16 + outer loop + vertex 183.6921424816438 -89.42252419859929 597.4 + vertex 183.81731057805365 -87.94179926518606 617.4 + vertex 183.81731057805365 -87.94179926518606 597.4 + endloop +endfacet +facet normal -0.34938986583038373 0.9369774392454849 4.0663618573421485e-17 + outer loop + vertex 161.4704079619354 -118.70822606424326 617.4 + vertex 160.0780540076148 -119.22742144815797 597.4 + vertex 160.0780540076148 -119.22742144815797 617.4 + endloop +endfacet +facet normal -0.34938986583038373 0.9369774392454849 4.0663618573421485e-17 + outer loop + vertex 160.0780540076148 -119.22742144815797 597.4 + vertex 161.4704079619354 -118.70822606424326 617.4 + vertex 161.4704079619354 -118.70822606424326 597.4 + endloop +endfacet +facet normal -0.26986211191720677 0.962898977334375 1.4118899179751733e-17 + outer loop + vertex 158.66520409248508 -119.68793040367183 617.4 + vertex 157.23433058097086 -120.08894708017985 597.4 + vertex 157.23433058097086 -120.08894708017985 617.4 + endloop +endfacet +facet normal -0.26986211191720677 0.962898977334375 1.4118899179751733e-17 + outer loop + vertex 157.23433058097086 -120.08894708017985 597.4 + vertex 158.66520409248508 -119.68793040367183 617.4 + vertex 158.66520409248508 -119.68793040367183 597.4 + endloop +endfacet +facet normal -0.14720786925726453 0.9891055773923916 -2.5825137241484287e-17 + outer loop + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 154.3285555435008 -120.70980195331025 597.4 + vertex 152.85873887103978 -120.92855370792294 597.4 + endloop +endfacet +facet normal -0.14720786925726453 0.9891055773923916 -2.5825137241484287e-17 + outer loop + vertex 154.3285555435008 -120.70980195331025 597.4 + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 154.3285555435008 -120.70980195331025 617.4 + endloop +endfacet +facet normal -0.9991524752349787 -0.04116225494084529 3.1293258037304125e-16 + outer loop + vertex 183.8202561633931 -83.48638307532285 617.4 + vertex 183.881423514959 -84.97112949673391 597.4 + vertex 183.881423514959 -84.97112949673391 617.4 + endloop +endfacet +facet normal -0.9991524752349787 -0.04116225494084529 3.1293258037304125e-16 + outer loop + vertex 183.881423514959 -84.97112949673391 597.4 + vertex 183.8202561633931 -83.48638307532285 617.4 + vertex 183.8202561633931 -83.48638307532285 597.4 + endloop +endfacet +facet normal -0.5363402452594229 0.8440018609665869 1.0537964790030805e-16 + outer loop + vertex 168.04095293703554 -115.26725225780697 617.4 + vertex 166.7867612357742 -116.06425699887052 597.4 + vertex 166.7867612357742 -116.06425699887052 617.4 + endloop +endfacet +facet normal -0.5363402452594229 0.8440018609665869 1.0537964790030805e-16 + outer loop + vertex 166.7867612357742 -116.06425699887052 597.4 + vertex 168.04095293703554 -115.26725225780697 617.4 + vertex 168.04095293703554 -115.26725225780697 597.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 146.7935543319419 -41.3852223358722 604.4681483474218 + vertex 159.45237337704444 -63.31094008581029 604.4 + vertex 147.05237337704443 -41.83351007195622 604.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.45237337704444 -63.31094008581029 604.4 + vertex 146.7935543319419 -41.3852223358722 604.4681483474218 + vertex 159.71119242214695 -63.759227821894335 604.4681483474218 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.71119242214695 -63.759227821894335 604.4681483474218 + vertex 146.7935543319419 -41.3852223358722 604.4681483474218 + vertex 146.55237337704443 -40.967484668171785 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.71119242214695 -63.759227821894335 604.4681483474218 + vertex 146.55237337704443 -40.967484668171785 604.6679491924311 + vertex 159.9523733770444 -64.17696548959475 604.6679491924311 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.9523733770444 -64.17696548959475 604.6679491924311 + vertex 146.55237337704443 -40.967484668171785 604.6679491924311 + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.9523733770444 -64.17696548959475 604.6679491924311 + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + vertex 160.159480158231 -64.53568495720188 604.9857864376269 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.159480158231 -64.53568495720188 604.9857864376269 + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + vertex 146.18634797325998 -40.33351007195622 605.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.159480158231 -64.53568495720188 604.9857864376269 + vertex 146.18634797325998 -40.33351007195622 605.4 + vertex 160.3183987808289 -64.8109400858103 605.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.3183987808289 -64.8109400858103 605.4 + vertex 146.18634797325998 -40.33351007195622 605.4 + vertex 146.08644755075537 -40.16047746448061 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.3183987808289 -64.8109400858103 605.4 + vertex 146.08644755075537 -40.16047746448061 605.8823619097949 + vertex 160.4182992033335 -64.98397269328593 605.8823619097949 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.4182992033335 -64.98397269328593 605.8823619097949 + vertex 146.08644755075537 -40.16047746448061 605.8823619097949 + vertex 146.05237337704443 -40.10145926438734 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.4182992033335 -64.98397269328593 605.8823619097949 + vertex 146.05237337704443 -40.10145926438734 606.3999999999999 + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + vertex 146.05237337704443 -40.10145926438734 606.3999999999999 + vertex 146.05237337704443 -40.10145926438734 608.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + vertex 146.05237337704443 -40.10145926438734 608.4 + vertex 160.45237337704444 -65.04299089337918 608.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.45237337704444 -65.04299089337918 608.4 + vertex 146.05237337704443 -40.10145926438734 608.4 + vertex 146.08644755075537 -40.16047746448061 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.45237337704444 -65.04299089337918 608.4 + vertex 146.08644755075537 -40.16047746448061 608.9176380902051 + vertex 160.4182992033335 -64.98397269328593 608.9176380902051 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.4182992033335 -64.98397269328593 608.9176380902051 + vertex 146.08644755075537 -40.16047746448061 608.9176380902051 + vertex 146.18634797325998 -40.33351007195622 609.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.4182992033335 -64.98397269328593 608.9176380902051 + vertex 146.18634797325998 -40.33351007195622 609.4 + vertex 160.3183987808289 -64.8109400858103 609.4 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.3183987808289 -64.8109400858103 609.4 + vertex 146.18634797325998 -40.33351007195622 609.4 + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.3183987808289 -64.8109400858103 609.4 + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + vertex 160.159480158231 -64.5356849572019 609.814213562373 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.159480158231 -64.5356849572019 609.814213562373 + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + vertex 146.55237337704446 -40.9674846681718 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 160.159480158231 -64.5356849572019 609.814213562373 + vertex 146.55237337704446 -40.9674846681718 610.1320508075687 + vertex 159.95237337704444 -64.17696548959475 610.1320508075687 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.95237337704444 -64.17696548959475 610.1320508075687 + vertex 146.55237337704446 -40.9674846681718 610.1320508075687 + vertex 146.7935543319419 -41.3852223358722 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.95237337704444 -64.17696548959475 610.1320508075687 + vertex 146.7935543319419 -41.3852223358722 610.331851652578 + vertex 159.71119242214695 -63.759227821894335 610.331851652578 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.71119242214695 -63.759227821894335 610.331851652578 + vertex 146.7935543319419 -41.3852223358722 610.331851652578 + vertex 147.05237337704443 -41.833510071956226 610.3999999999999 + endloop +endfacet +facet normal 0.8660254037844394 0.49999999999999906 -8.360210501876744e-16 + outer loop + vertex 159.71119242214695 -63.759227821894335 610.331851652578 + vertex 147.05237337704443 -41.833510071956226 610.3999999999999 + vertex 159.45237337704444 -63.31094008581029 610.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 135.04517266035938 -106.48202726980834 604.4681483474218 + vertex 109.72753457015432 -106.48202726980836 604.4 + vertex 134.52753457015433 -106.48202726980834 604.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.72753457015432 -106.48202726980836 604.4 + vertex 135.04517266035938 -106.48202726980834 604.4681483474218 + vertex 109.20989647994928 -106.48202726980834 604.4681483474218 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 604.4681483474218 + vertex 135.04517266035938 -106.48202726980834 604.4681483474218 + vertex 135.52753457015433 -106.48202726980831 604.6679491924311 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 604.4681483474218 + vertex 135.52753457015433 -106.48202726980831 604.6679491924311 + vertex 108.72753457015433 -106.48202726980836 604.6679491924311 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015433 -106.48202726980836 604.6679491924311 + vertex 135.52753457015433 -106.48202726980831 604.6679491924311 + vertex 135.94174813252744 -106.48202726980834 604.9857864376269 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015433 -106.48202726980836 604.6679491924311 + vertex 135.94174813252744 -106.48202726980834 604.9857864376269 + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + vertex 135.94174813252744 -106.48202726980834 604.9857864376269 + vertex 136.25958537772323 -106.48202726980836 605.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 604.9857864376269 + vertex 136.25958537772323 -106.48202726980836 605.4 + vertex 107.99548376258544 -106.48202726980834 605.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 605.4 + vertex 136.25958537772323 -106.48202726980836 605.4 + vertex 136.45938622273246 -106.48202726980834 605.8823619097949 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 605.4 + vertex 136.45938622273246 -106.48202726980834 605.8823619097949 + vertex 107.7956829175762 -106.48202726980834 605.8823619097949 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.7956829175762 -106.48202726980834 605.8823619097949 + vertex 136.45938622273246 -106.48202726980834 605.8823619097949 + vertex 136.52753457015433 -106.48202726980836 606.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.7956829175762 -106.48202726980834 605.8823619097949 + vertex 136.52753457015433 -106.48202726980836 606.3999999999999 + vertex 107.72753457015433 -106.48202726980836 606.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 606.3999999999999 + vertex 136.52753457015433 -106.48202726980836 606.3999999999999 + vertex 136.52753457015433 -106.48202726980836 608.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 606.3999999999999 + vertex 136.52753457015433 -106.48202726980836 608.4 + vertex 107.72753457015433 -106.48202726980836 608.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 608.4 + vertex 136.52753457015433 -106.48202726980836 608.4 + vertex 136.45938622273246 -106.48202726980834 608.9176380902051 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 608.4 + vertex 136.45938622273246 -106.48202726980834 608.9176380902051 + vertex 107.79568291757619 -106.48202726980834 608.9176380902051 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.79568291757619 -106.48202726980834 608.9176380902051 + vertex 136.45938622273246 -106.48202726980834 608.9176380902051 + vertex 136.25958537772323 -106.48202726980836 609.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.79568291757619 -106.48202726980834 608.9176380902051 + vertex 136.25958537772323 -106.48202726980836 609.4 + vertex 107.99548376258544 -106.48202726980834 609.4 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 609.4 + vertex 136.25958537772323 -106.48202726980836 609.4 + vertex 135.94174813252744 -106.48202726980836 609.814213562373 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 609.4 + vertex 135.94174813252744 -106.48202726980836 609.814213562373 + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + vertex 135.94174813252744 -106.48202726980836 609.814213562373 + vertex 135.52753457015436 -106.48202726980834 610.1320508075687 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 609.814213562373 + vertex 135.52753457015436 -106.48202726980834 610.1320508075687 + vertex 108.72753457015433 -106.48202726980836 610.1320508075687 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015433 -106.48202726980836 610.1320508075687 + vertex 135.52753457015436 -106.48202726980834 610.1320508075687 + vertex 135.04517266035938 -106.48202726980834 610.331851652578 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 108.72753457015433 -106.48202726980836 610.1320508075687 + vertex 135.04517266035938 -106.48202726980834 610.331851652578 + vertex 109.20989647994928 -106.48202726980834 610.331851652578 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 610.331851652578 + vertex 135.04517266035938 -106.48202726980834 610.331851652578 + vertex 134.52753457015433 -106.48202726980834 610.3999999999999 + endloop +endfacet +facet normal 6.661338147750937e-16 -1.0 -4.5316418029497855e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 610.331851652578 + vertex 134.52753457015433 -106.48202726980834 610.3999999999999 + vertex 109.72753457015432 -106.48202726980836 610.3999999999999 + endloop +endfacet +facet normal 7.240154675610714e-16 4.1801052509383675e-16 1.0 + outer loop + vertex 157.72032256947554 -64.31094008581026 610.3999999999999 + vertex 147.05237337704443 -41.833510071956226 610.3999999999999 + vertex 145.32032256947556 -42.833510071956184 610.3999999999999 + endloop +endfacet +facet normal 7.240154675610714e-16 4.1801052509383675e-16 1.0 + outer loop + vertex 147.05237337704443 -41.833510071956226 610.3999999999999 + vertex 157.72032256947554 -64.31094008581026 610.3999999999999 + vertex 159.45237337704444 -63.31094008581029 610.3999999999999 + endloop +endfacet +facet normal -0.4957224306869029 0.858616436401259 -0.1305261922200746 + outer loop + vertex 144.32032256947556 -41.101459264387316 606.3999999999999 + vertex 146.08644755075537 -40.16047746448061 605.8823619097949 + vertex 144.3543967431865 -41.160477464480586 605.8823619097949 + endloop +endfacet +facet normal -0.4957224306869029 0.858616436401259 -0.1305261922200746 + outer loop + vertex 146.08644755075537 -40.16047746448061 605.8823619097949 + vertex 144.32032256947556 -41.101459264387316 606.3999999999999 + vertex 146.05237337704443 -40.10145926438734 606.3999999999999 + endloop +endfacet +facet normal 0.3043807145043524 -0.5272028623656552 0.7933533402912474 + outer loop + vertex 158.42742935066212 -65.53568495720187 609.814213562373 + vertex 159.95237337704444 -64.17696548959475 610.1320508075687 + vertex 158.22032256947557 -65.17696548959472 610.1320508075687 + endloop +endfacet +facet normal 0.3043807145043524 -0.5272028623656552 0.7933533402912474 + outer loop + vertex 159.95237337704444 -64.17696548959475 610.1320508075687 + vertex 158.42742935066212 -65.53568495720187 609.814213562373 + vertex 160.159480158231 -64.5356849572019 609.814213562373 + endloop +endfacet +facet normal -0.06526309610999381 0.11303899832176192 0.9914448613738187 + outer loop + vertex 145.32032256947556 -42.833510071956184 610.3999999999999 + vertex 146.7935543319419 -41.3852223358722 610.331851652578 + vertex 145.06150352437305 -42.38522233587218 610.331851652578 + endloop +endfacet +facet normal -0.06526309610999381 0.11303899832176192 0.9914448613738187 + outer loop + vertex 146.7935543319419 -41.3852223358722 610.331851652578 + vertex 145.32032256947556 -42.833510071956184 610.3999999999999 + vertex 147.05237337704443 -41.833510071956226 610.3999999999999 + endloop +endfacet +facet normal 0.19134171618257495 -0.3314135740356431 0.9238795325112623 + outer loop + vertex 158.22032256947557 -65.17696548959472 610.1320508075687 + vertex 159.71119242214695 -63.759227821894335 610.331851652578 + vertex 157.97914161457808 -64.7592278218943 610.331851652578 + endloop +endfacet +facet normal 0.19134171618257495 -0.3314135740356431 0.9238795325112623 + outer loop + vertex 159.71119242214695 -63.759227821894335 610.331851652578 + vertex 158.22032256947557 -65.17696548959472 610.1320508075687 + vertex 159.95237337704444 -64.17696548959475 610.1320508075687 + endloop +endfacet +facet normal 0.4957224306869048 -0.8586164364012623 -0.1305261922200442 + outer loop + vertex 158.68624839576464 -65.98397269328589 605.8823619097949 + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + vertex 158.72032256947557 -66.04299089337914 606.3999999999999 + endloop +endfacet +facet normal 0.4957224306869048 -0.8586164364012623 -0.1305261922200442 + outer loop + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + vertex 158.68624839576464 -65.98397269328589 605.8823619097949 + vertex 160.4182992033335 -64.98397269328593 605.8823619097949 + endloop +endfacet +facet normal -0.1913417161825769 0.3314135740356495 0.9238795325112594 + outer loop + vertex 145.06150352437305 -42.38522233587218 610.331851652578 + vertex 146.55237337704446 -40.9674846681718 610.1320508075687 + vertex 144.8203225694756 -41.96748466817175 610.1320508075687 + endloop +endfacet +facet normal -0.1913417161825769 0.3314135740356495 0.9238795325112594 + outer loop + vertex 146.55237337704446 -40.9674846681718 610.1320508075687 + vertex 145.06150352437305 -42.38522233587218 610.331851652578 + vertex 146.7935543319419 -41.3852223358722 610.331851652578 + endloop +endfacet +facet normal 0.3043807145043512 -0.5272028623656559 -0.7933533402912476 + outer loop + vertex 159.9523733770444 -64.17696548959475 604.6679491924311 + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 158.22032256947554 -65.17696548959472 604.6679491924311 + endloop +endfacet +facet normal 0.3043807145043512 -0.5272028623656559 -0.7933533402912476 + outer loop + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 159.9523733770444 -64.17696548959475 604.6679491924311 + vertex 160.159480158231 -64.53568495720188 604.9857864376269 + endloop +endfacet +facet normal 0.46193976625563005 -0.8001031451912437 0.38268343236515173 + outer loop + vertex 160.4182992033335 -64.98397269328593 608.9176380902051 + vertex 158.58634797326002 -65.81094008581026 609.4 + vertex 158.68624839576464 -65.98397269328589 608.9176380902051 + endloop +endfacet +facet normal 0.46193976625563005 -0.8001031451912437 0.38268343236515173 + outer loop + vertex 158.58634797326002 -65.81094008581026 609.4 + vertex 160.4182992033335 -64.98397269328593 608.9176380902051 + vertex 160.3183987808289 -64.8109400858103 609.4 + endloop +endfacet +facet normal 0.49572243068690647 -0.858616436401265 0.13052619222002185 + outer loop + vertex 160.45237337704444 -65.04299089337918 608.4 + vertex 158.68624839576464 -65.98397269328589 608.9176380902051 + vertex 158.72032256947557 -66.04299089337914 608.4 + endloop +endfacet +facet normal 0.49572243068690647 -0.858616436401265 0.13052619222002185 + outer loop + vertex 158.68624839576464 -65.98397269328589 608.9176380902051 + vertex 160.45237337704444 -65.04299089337918 608.4 + vertex 160.4182992033335 -64.98397269328593 608.9176380902051 + endloop +endfacet +facet normal -0.30438071450434606 0.527202862365647 0.7933533402912555 + outer loop + vertex 144.8203225694756 -41.96748466817175 610.1320508075687 + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + vertex 144.613215788289 -41.6087652005646 609.814213562373 + endloop +endfacet +facet normal -0.30438071450434606 0.527202862365647 0.7933533402912555 + outer loop + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + vertex 144.8203225694756 -41.96748466817175 610.1320508075687 + vertex 146.55237337704446 -40.9674846681718 610.1320508075687 + endloop +endfacet +facet normal -0.3043807145043472 0.5272028623656462 -0.7933533402912555 + outer loop + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + vertex 144.8203225694756 -41.96748466817175 604.6679491924311 + vertex 144.613215788289 -41.6087652005646 604.9857864376269 + endloop +endfacet +facet normal -0.3043807145043472 0.5272028623656462 -0.7933533402912555 + outer loop + vertex 144.8203225694756 -41.96748466817175 604.6679491924311 + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + vertex 146.55237337704443 -40.967484668171785 604.6679491924311 + endloop +endfacet +facet normal 0.06526309610999262 -0.11303899832175657 0.9914448613738194 + outer loop + vertex 157.97914161457808 -64.7592278218943 610.331851652578 + vertex 159.45237337704444 -63.31094008581029 610.3999999999999 + vertex 157.72032256947554 -64.31094008581026 610.3999999999999 + endloop +endfacet +facet normal 0.06526309610999262 -0.11303899832175657 0.9914448613738194 + outer loop + vertex 159.45237337704444 -63.31094008581029 610.3999999999999 + vertex 157.97914161457808 -64.7592278218943 610.331851652578 + vertex 159.71119242214695 -63.759227821894335 610.331851652578 + endloop +endfacet +facet normal 0.46193976625564215 -0.8001031451912659 -0.38268343236509067 + outer loop + vertex 158.58634797326002 -65.81094008581026 605.4 + vertex 160.4182992033335 -64.98397269328593 605.8823619097949 + vertex 158.68624839576464 -65.98397269328589 605.8823619097949 + endloop +endfacet +facet normal 0.46193976625564215 -0.8001031451912659 -0.38268343236509067 + outer loop + vertex 160.4182992033335 -64.98397269328593 605.8823619097949 + vertex 158.58634797326002 -65.81094008581026 605.4 + vertex 160.3183987808289 -64.8109400858103 605.4 + endloop +endfacet +facet normal 0.19134171618258017 -0.33141357403565525 -0.9238795325112567 + outer loop + vertex 159.71119242214695 -63.759227821894335 604.4681483474218 + vertex 158.22032256947554 -65.17696548959472 604.6679491924311 + vertex 157.97914161457808 -64.7592278218943 604.4681483474218 + endloop +endfacet +facet normal 0.19134171618258017 -0.33141357403565525 -0.9238795325112567 + outer loop + vertex 158.22032256947554 -65.17696548959472 604.6679491924311 + vertex 159.71119242214695 -63.759227821894335 604.4681483474218 + vertex 159.9523733770444 -64.17696548959475 604.6679491924311 + endloop +endfacet +facet normal -0.06526309610999523 0.11303899832176112 -0.9914448613738187 + outer loop + vertex 146.7935543319419 -41.3852223358722 604.4681483474218 + vertex 145.32032256947556 -42.833510071956184 604.4 + vertex 145.06150352437302 -42.385222335872164 604.4681483474218 + endloop +endfacet +facet normal -0.06526309610999523 0.11303899832176112 -0.9914448613738187 + outer loop + vertex 145.32032256947556 -42.833510071956184 604.4 + vertex 146.7935543319419 -41.3852223358722 604.4681483474218 + vertex 147.05237337704443 -41.83351007195622 604.4 + endloop +endfacet +facet normal 0.49999999999999917 -0.8660254037844392 9.32505634347441e-32 + outer loop + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + vertex 158.72032256947557 -66.04299089337914 608.4 + vertex 158.72032256947557 -66.04299089337914 606.3999999999999 + endloop +endfacet +facet normal 0.49999999999999917 -0.8660254037844392 9.32505634347441e-32 + outer loop + vertex 158.72032256947557 -66.04299089337914 608.4 + vertex 160.45237337704444 -65.04299089337918 606.3999999999999 + vertex 160.45237337704444 -65.04299089337918 608.4 + endloop +endfacet +facet normal -0.4957224306869049 0.8586164364012626 0.13052619222004305 + outer loop + vertex 146.08644755075537 -40.16047746448061 608.9176380902051 + vertex 144.32032256947556 -41.101459264387316 608.4 + vertex 144.3543967431865 -41.160477464480586 608.9176380902051 + endloop +endfacet +facet normal -0.4957224306869049 0.8586164364012626 0.13052619222004305 + outer loop + vertex 144.32032256947556 -41.101459264387316 608.4 + vertex 146.08644755075537 -40.16047746448061 608.9176380902051 + vertex 146.05237337704443 -40.10145926438734 608.4 + endloop +endfacet +facet normal 0.39667667014560826 -0.6870641468694345 0.6087614290087443 + outer loop + vertex 160.3183987808289 -64.8109400858103 609.4 + vertex 158.42742935066212 -65.53568495720187 609.814213562373 + vertex 158.58634797326002 -65.81094008581026 609.4 + endloop +endfacet +facet normal 0.39667667014560826 -0.6870641468694345 0.6087614290087443 + outer loop + vertex 158.42742935066212 -65.53568495720187 609.814213562373 + vertex 160.3183987808289 -64.8109400858103 609.4 + vertex 160.159480158231 -64.5356849572019 609.814213562373 + endloop +endfacet +facet normal -0.3966766701456038 0.6870641468694267 -0.6087614290087562 + outer loop + vertex 144.45429716569112 -41.333510071956184 605.4 + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + vertex 144.613215788289 -41.6087652005646 604.9857864376269 + endloop +endfacet +facet normal -0.3966766701456038 0.6870641468694267 -0.6087614290087562 + outer loop + vertex 146.34526659585788 -40.608765200564626 604.9857864376269 + vertex 144.45429716569112 -41.333510071956184 605.4 + vertex 146.18634797325998 -40.33351007195622 605.4 + endloop +endfacet +facet normal -0.4619397662556498 0.8001031451912779 -0.38268343236505625 + outer loop + vertex 144.3543967431865 -41.160477464480586 605.8823619097949 + vertex 146.18634797325998 -40.33351007195622 605.4 + vertex 144.45429716569112 -41.333510071956184 605.4 + endloop +endfacet +facet normal -0.4619397662556498 0.8001031451912779 -0.38268343236505625 + outer loop + vertex 146.18634797325998 -40.33351007195622 605.4 + vertex 144.3543967431865 -41.160477464480586 605.8823619097949 + vertex 146.08644755075537 -40.16047746448061 605.8823619097949 + endloop +endfacet +facet normal -7.240154675610713e-16 -4.180105250938367e-16 -1.0 + outer loop + vertex 147.05237337704443 -41.83351007195622 604.4 + vertex 157.72032256947554 -64.31094008581026 604.4 + vertex 145.32032256947556 -42.833510071956184 604.4 + endloop +endfacet +facet normal -7.240154675610713e-16 -4.180105250938367e-16 -1.0 + outer loop + vertex 157.72032256947554 -64.31094008581026 604.4 + vertex 147.05237337704443 -41.83351007195622 604.4 + vertex 159.45237337704444 -63.31094008581029 604.4 + endloop +endfacet +facet normal 0.3966766701455985 -0.6870641468694194 -0.608761429008768 + outer loop + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 160.3183987808289 -64.8109400858103 605.4 + vertex 158.58634797326002 -65.81094008581026 605.4 + endloop +endfacet +facet normal 0.3966766701455985 -0.6870641468694194 -0.608761429008768 + outer loop + vertex 160.3183987808289 -64.8109400858103 605.4 + vertex 158.42742935066212 -65.53568495720187 604.9857864376269 + vertex 160.159480158231 -64.53568495720188 604.9857864376269 + endloop +endfacet +facet normal 0.06526309610999118 -0.1130389983217574 -0.9914448613738194 + outer loop + vertex 159.45237337704444 -63.31094008581029 604.4 + vertex 157.97914161457808 -64.7592278218943 604.4681483474218 + vertex 157.72032256947554 -64.31094008581026 604.4 + endloop +endfacet +facet normal 0.06526309610999118 -0.1130389983217574 -0.9914448613738194 + outer loop + vertex 157.97914161457808 -64.7592278218943 604.4681483474218 + vertex 159.45237337704444 -63.31094008581029 604.4 + vertex 159.71119242214695 -63.759227821894335 604.4681483474218 + endloop +endfacet +facet normal -0.49999999999999917 0.8660254037844392 2.442162611707019e-15 + outer loop + vertex 146.05237337704443 -40.10145926438734 608.4 + vertex 144.32032256947556 -41.101459264387316 606.3999999999999 + vertex 144.32032256947556 -41.101459264387316 608.4 + endloop +endfacet +facet normal -0.49999999999999917 0.8660254037844392 2.442162611707019e-15 + outer loop + vertex 144.32032256947556 -41.101459264387316 606.3999999999999 + vertex 146.05237337704443 -40.10145926438734 608.4 + vertex 146.05237337704443 -40.10145926438734 606.3999999999999 + endloop +endfacet +facet normal -0.19134171618257817 0.3314135740356487 -0.9238795325112594 + outer loop + vertex 146.55237337704443 -40.967484668171785 604.6679491924311 + vertex 145.06150352437302 -42.385222335872164 604.4681483474218 + vertex 144.8203225694756 -41.96748466817175 604.6679491924311 + endloop +endfacet +facet normal -0.19134171618257817 0.3314135740356487 -0.9238795325112594 + outer loop + vertex 145.06150352437302 -42.385222335872164 604.4681483474218 + vertex 146.55237337704443 -40.967484668171785 604.6679491924311 + vertex 146.7935543319419 -41.3852223358722 604.4681483474218 + endloop +endfacet +facet normal -0.461939766255635 0.8001031451912535 0.3826834323651253 + outer loop + vertex 146.18634797325998 -40.33351007195622 609.4 + vertex 144.3543967431865 -41.160477464480586 608.9176380902051 + vertex 144.45429716569112 -41.3335100719562 609.4 + endloop +endfacet +facet normal -0.461939766255635 0.8001031451912535 0.3826834323651253 + outer loop + vertex 144.3543967431865 -41.160477464480586 608.9176380902051 + vertex 146.18634797325998 -40.33351007195622 609.4 + vertex 146.08644755075537 -40.16047746448061 608.9176380902051 + endloop +endfacet +facet normal -0.39667667014560287 0.6870641468694272 0.6087614290087562 + outer loop + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + vertex 144.45429716569112 -41.3335100719562 609.4 + vertex 144.613215788289 -41.6087652005646 609.814213562373 + endloop +endfacet +facet normal -0.39667667014560287 0.6870641468694272 0.6087614290087562 + outer loop + vertex 144.45429716569112 -41.3335100719562 609.4 + vertex 146.34526659585788 -40.608765200564626 609.814213562373 + vertex 146.18634797325998 -40.33351007195622 609.4 + endloop +endfacet +facet normal 0.9140288370919221 0.40564921417942973 -3.128704161156744e-16 + outer loop + vertex 183.24227030542377 -69.33067842807887 617.4 + vertex 183.8959747167953 -70.80363748245902 597.4 + vertex 183.24227030542377 -69.33067842807887 597.4 + endloop +endfacet +facet normal 0.9140288370919221 0.40564921417942973 -3.128704161156744e-16 + outer loop + vertex 183.8959747167953 -70.80363748245902 597.4 + vertex 183.24227030542377 -69.33067842807887 617.4 + vertex 183.8959747167953 -70.80363748245902 617.4 + endloop +endfacet +facet normal 0.9859209640962899 -0.1672119988381284 -2.9376672002655295e-16 + outer loop + vertex 186.4727638760373 -91.33638042612223 597.4 + vertex 186.20330145024204 -92.92519376771138 617.4 + vertex 186.20330145024204 -92.92519376771138 597.4 + endloop +endfacet +facet normal 0.9859209640962899 -0.1672119988381284 -2.9376672002655295e-16 + outer loop + vertex 186.20330145024204 -92.92519376771138 617.4 + vertex 186.4727638760373 -91.33638042612223 597.4 + vertex 186.4727638760373 -91.33638042612223 617.4 + endloop +endfacet +facet normal 0.9447323868310453 0.32784251901258343 -3.167714557131984e-16 + outer loop + vertex 184.48750387842549 -72.30264751720468 617.4 + vertex 185.01582266574817 -73.82508539517835 597.4 + vertex 184.48750387842549 -72.30264751720468 597.4 + endloop +endfacet +facet normal 0.9447323868310453 0.32784251901258343 -3.167714557131984e-16 + outer loop + vertex 185.01582266574817 -73.82508539517835 597.4 + vertex 184.48750387842549 -72.30264751720468 617.4 + vertex 185.01582266574817 -73.82508539517835 617.4 + endloop +endfacet +facet normal 0.9134916689428489 -0.40685743298114696 -2.5397624073309877e-16 + outer loop + vertex 183.87625932185094 -100.62463388991574 597.4 + vertex 183.2206078637874 -102.0967272968931 617.4 + vertex 183.2206078637874 -102.0967272968931 597.4 + endloop +endfacet +facet normal 0.9134916689428489 -0.40685743298114696 -2.5397624073309877e-16 + outer loop + vertex 183.2206078637874 -102.0967272968931 617.4 + vertex 183.87625932185094 -100.62463388991574 597.4 + vertex 183.87625932185094 -100.62463388991574 617.4 + endloop +endfacet +facet normal 0.8962637115698759 0.44352154324563553 -3.100967044653078e-16 + outer loop + vertex 182.52753457015436 -67.8863479042527 617.4 + vertex 183.24227030542377 -69.33067842807887 597.4 + vertex 182.52753457015436 -67.8863479042527 597.4 + endloop +endfacet +facet normal 0.8962637115698759 0.44352154324563553 -3.100967044653078e-16 + outer loop + vertex 183.24227030542377 -69.33067842807887 597.4 + vertex 182.52753457015436 -67.8863479042527 617.4 + vertex 183.24227030542377 -69.33067842807887 617.4 + endloop +endfacet +facet normal 0.8956764823140574 -0.444706239026974 -2.4571391698701513e-16 + outer loop + vertex 183.2206078637874 -102.0967272968931 597.4 + vertex 182.5039629892141 -103.54011149975624 617.4 + vertex 182.5039629892141 -103.54011149975624 597.4 + endloop +endfacet +facet normal 0.8956764823140574 -0.444706239026974 -2.4571391698701513e-16 + outer loop + vertex 182.5039629892141 -103.54011149975624 617.4 + vertex 183.2206078637874 -102.0967272968931 597.4 + vertex 183.2206078637874 -102.0967272968931 617.4 + endloop +endfacet +facet normal 0.57357643635105 -0.819152044288989 -1.1872720193645655e-16 + outer loop + vertex 144.00457108529972 -56.70523109684268 597.4 + vertex 143.4226637815576 -57.1126869774622 617.4 + vertex 143.4226637815576 -57.1126869774622 597.4 + endloop +endfacet +facet normal 0.57357643635105 -0.819152044288989 -1.1872720193645655e-16 + outer loop + vertex 143.4226637815576 -57.1126869774622 617.4 + vertex 144.00457108529972 -56.70523109684268 597.4 + vertex 144.00457108529972 -56.70523109684268 617.4 + endloop +endfacet +facet normal 0.4226182617406982 -0.9063077870366505 -6.559734023084941e-17 + outer loop + vertex 144.64839188070863 -56.40501252946406 597.4 + vertex 144.00457108529972 -56.70523109684268 617.4 + vertex 144.00457108529972 -56.70523109684268 597.4 + endloop +endfacet +facet normal 0.4226182617406982 -0.9063077870366505 -6.559734023084941e-17 + outer loop + vertex 144.00457108529972 -56.70523109684268 617.4 + vertex 144.64839188070863 -56.40501252946406 597.4 + vertex 144.64839188070863 -56.40501252946406 617.4 + endloop +endfacet +facet normal 0.9991524752349786 0.04116225494084896 -3.1293258037304154e-16 + outer loop + vertex 186.8144750093717 -83.30022856319225 597.4 + vertex 186.8808080545158 -84.91036450790281 617.4 + vertex 186.8808080545158 -84.91036450790281 597.4 + endloop +endfacet +facet normal 0.9991524752349786 0.04116225494084896 -3.1293258037304154e-16 + outer loop + vertex 186.8808080545158 -84.91036450790281 617.4 + vertex 186.8144750093717 -83.30022856319225 597.4 + vertex 186.8144750093717 -83.30022856319225 617.4 + endloop +endfacet +facet normal 0.9442980716405378 -0.329091403558285 -2.691538986312246e-16 + outer loop + vertex 185.0001013973305 -97.60466933591321 597.4 + vertex 184.4697700303989 -99.12640731420498 617.4 + vertex 184.4697700303989 -99.12640731420498 597.4 + endloop +endfacet +facet normal 0.9442980716405378 -0.329091403558285 -2.691538986312246e-16 + outer loop + vertex 184.4697700303989 -99.12640731420498 617.4 + vertex 185.0001013973305 -97.60466933591321 597.4 + vertex 185.0001013973305 -97.60466933591321 617.4 + endloop +endfacet +facet normal 0.9576170825074782 0.28804430785881835 -3.178919571804746e-16 + outer loop + vertex 185.01582266574817 -73.82508539517835 617.4 + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 185.01582266574817 -73.82508539517835 597.4 + endloop +endfacet +facet normal 0.9576170825074782 0.28804430785881835 -3.178919571804746e-16 + outer loop + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 185.01582266574817 -73.82508539517835 617.4 + vertex 185.48000656685264 -75.3682869825552 617.4 + endloop +endfacet +facet normal 0.9688260316082282 0.24774204422796836 -3.1845617538128354e-16 + outer loop + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 185.87924330029887 -76.92955181082564 617.4 + vertex 185.87924330029887 -76.92955181082564 597.4 + endloop +endfacet +facet normal 0.9688260316082282 0.24774204422796836 -3.1845617538128354e-16 + outer loop + vertex 185.87924330029887 -76.92955181082564 617.4 + vertex 185.48000656685264 -75.3682869825552 597.4 + vertex 185.48000656685264 -75.3682869825552 617.4 + endloop +endfacet +facet normal 0.7071067811865454 -0.7071067811865499 -1.6824959769008353e-16 + outer loop + vertex 143.4226637815576 -57.1126869774622 597.4 + vertex 142.9203509284472 -57.6149998305726 617.4 + vertex 142.9203509284472 -57.614999830572586 597.4 + endloop +endfacet +facet normal 0.7071067811865454 -0.7071067811865499 -1.6824959769008353e-16 + outer loop + vertex 142.9203509284472 -57.6149998305726 617.4 + vertex 143.4226637815576 -57.1126869774622 597.4 + vertex 143.4226637815576 -57.1126869774622 617.4 + endloop +endfacet +facet normal 0.9922171154055788 0.12451986145283153 -3.1680613295388643e-16 + outer loop + vertex 186.48019562046042 -80.0953160514068 597.4 + vertex 186.6808595929021 -81.69427565173788 617.4 + vertex 186.6808595929021 -81.69427565173788 597.4 + endloop +endfacet +facet normal 0.9922171154055788 0.12451986145283153 -3.1680613295388643e-16 + outer loop + vertex 186.6808595929021 -81.69427565173788 617.4 + vertex 186.48019562046042 -80.0953160514068 597.4 + vertex 186.48019562046042 -80.0953160514068 617.4 + endloop +endfacet +facet normal 0.9999997814571896 -0.0006611244764010427 -3.1017246104582265e-16 + outer loop + vertex 186.8808080545158 -84.91036450790281 597.4 + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 186.87974265127679 -86.52186588805827 597.4 + endloop +endfacet +facet normal 0.9999997814571896 -0.0006611244764010427 -3.1017246104582265e-16 + outer loop + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 186.8808080545158 -84.91036450790281 597.4 + vertex 186.8808080545158 -84.91036450790281 617.4 + endloop +endfacet +facet normal 0.8762939397707019 -0.4817768478467404 -2.370216152648601e-16 + outer loop + vertex 182.5039629892141 -103.54011149975624 597.4 + vertex 181.72757876430893 -104.95226070173368 617.4 + vertex 181.72757876430893 -104.95226070173368 597.4 + endloop +endfacet +facet normal 0.8762939397707019 -0.4817768478467404 -2.370216152648601e-16 + outer loop + vertex 181.72757876430893 -104.95226070173368 617.4 + vertex 182.5039629892141 -103.54011149975624 597.4 + vertex 182.5039629892141 -103.54011149975624 617.4 + endloop +endfacet +facet normal -0.707106781186551 -0.7071067811865441 2.704681784798783e-16 + outer loop + vertex 149.16412596495888 -57.61499983057261 617.4 + vertex 148.66181311184846 -57.1126869774622 597.4 + vertex 149.16412596495886 -57.61499983057261 597.4 + endloop +endfacet +facet normal -0.707106781186551 -0.7071067811865441 2.704681784798783e-16 + outer loop + vertex 148.66181311184846 -57.1126869774622 597.4 + vertex 149.16412596495888 -57.61499983057261 617.4 + vertex 148.66181311184846 -57.1126869774622 617.4 + endloop +endfacet +facet normal 0.978065050469156 -0.20829968087053663 -2.88359860903562e-16 + outer loop + vertex 186.20330145024204 -92.92519376771138 597.4 + vertex 185.86762615367383 -94.50134729088126 617.4 + vertex 185.86762615367383 -94.50134729088126 597.4 + endloop +endfacet +facet normal 0.978065050469156 -0.20829968087053663 -2.88359860903562e-16 + outer loop + vertex 185.86762615367383 -94.50134729088126 617.4 + vertex 186.20330145024204 -92.92519376771138 597.4 + vertex 186.20330145024204 -92.92519376771138 617.4 + endloop +endfacet +facet normal 0.8660254037844387 -0.4999999999999999 -2.3251894735637813e-16 + outer loop + vertex 142.51289504782767 -58.19690713431473 597.4 + vertex 121.6564475239141 -94.32133391112718 617.4 + vertex 121.65644752391407 -94.32133391112718 597.4 + endloop +endfacet +facet normal 0.8660254037844387 -0.4999999999999999 -2.3251894735637813e-16 + outer loop + vertex 121.6564475239141 -94.32133391112718 617.4 + vertex 142.51289504782767 -58.19690713431473 597.4 + vertex 142.51289504782767 -58.19690713431473 617.4 + endloop +endfacet +facet normal 0.7071067811865523 0.7071067811865427 -2.7046817847987866e-16 + outer loop + vertex 122.0363688343796 -99.02626721214719 617.4 + vertex 122.53868168748998 -99.52858006525759 597.4 + vertex 122.0363688343796 -99.02626721214719 597.4 + endloop +endfacet +facet normal 0.7071067811865523 0.7071067811865427 -2.7046817847987866e-16 + outer loop + vertex 122.53868168748998 -99.52858006525759 597.4 + vertex 122.0363688343796 -99.02626721214719 617.4 + vertex 122.53868168749001 -99.5285800652576 617.4 + endloop +endfacet +facet normal 0.9917151050050453 -0.12845680404257295 -2.9836538446986737e-16 + outer loop + vertex 121.14483512149562 -95.69901809900362 597.4 + vertex 121.13921260616524 -95.74242516819555 617.4 + vertex 121.13921260616524 -95.74242516819555 597.4 + endloop +endfacet +facet normal 0.9917151050050453 -0.12845680404257295 -2.9836538446986737e-16 + outer loop + vertex 121.13921260616524 -95.74242516819555 617.4 + vertex 121.14483512149562 -95.69901809900362 597.4 + vertex 121.14483512149562 -95.69901809900362 617.4 + endloop +endfacet +facet normal 0.9091671933849138 -0.41643128421457354 -2.519427078479903e-16 + outer loop + vertex 121.62891295376008 -94.36902518559845 597.4 + vertex 121.335665377625 -95.00925344381999 617.4 + vertex 121.335665377625 -95.00925344381999 597.4 + endloop +endfacet +facet normal 0.9091671933849138 -0.41643128421457354 -2.519427078479903e-16 + outer loop + vertex 121.335665377625 -95.00925344381999 617.4 + vertex 121.62891295376008 -94.36902518559845 597.4 + vertex 121.62891295376008 -94.36902518559845 617.4 + endloop +endfacet +facet normal 0.9964286670416539 -0.08443880326954645 -3.0300922412569886e-16 + outer loop + vertex 121.13921260616524 -95.74242516819555 597.4 + vertex 121.08292162982879 -96.40669254700175 617.4 + vertex 121.08292162982879 -96.40669254700175 597.4 + endloop +endfacet +facet normal 0.9964286670416539 -0.08443880326954645 -3.0300922412569886e-16 + outer loop + vertex 121.08292162982879 -96.40669254700175 617.4 + vertex 121.13921260616524 -95.74242516819555 597.4 + vertex 121.13921260616524 -95.74242516819555 617.4 + endloop +endfacet +facet normal 0.9932753778753307 0.11577574748892414 -3.1650240770775005e-16 + outer loop + vertex 121.07305832758567 -96.49857203241156 597.4 + vertex 121.14483512149562 -97.1143669949999 617.4 + vertex 121.14483512149562 -97.11436699499988 597.4 + endloop +endfacet +facet normal 0.9932753778753307 0.11577574748892414 -3.1650240770775005e-16 + outer loop + vertex 121.14483512149562 -97.1143669949999 617.4 + vertex 121.07305832758567 -96.49857203241156 597.4 + vertex 121.07305832758567 -96.49857203241156 617.4 + endloop +endfacet +facet normal -0.0871557427476704 -0.9961946980917445 9.904188843509464e-17 + outer loop + vertex 146.74991289470117 -56.22115326457821 617.4 + vertex 146.04223844670304 -56.15923977291139 597.4 + vertex 146.74991289470117 -56.22115326457821 597.4 + endloop +endfacet +facet normal -0.0871557427476704 -0.9961946980917445 9.904188843509464e-17 + outer loop + vertex 146.04223844670304 -56.15923977291139 597.4 + vertex 146.74991289470117 -56.22115326457821 617.4 + vertex 146.04223844670304 -56.15923977291139 617.4 + endloop +endfacet +facet normal 0.0871557427476704 0.9961946980917445 -9.904188843509464e-17 + outer loop + vertex 124.4505819046373 -100.42011377814158 617.4 + vertex 125.15825635263542 -100.4820272698084 597.4 + vertex 124.4505819046373 -100.42011377814158 597.4 + endloop +endfacet +facet normal 0.0871557427476704 0.9961946980917445 -9.904188843509464e-17 + outer loop + vertex 125.15825635263542 -100.4820272698084 597.4 + vertex 124.4505819046373 -100.42011377814158 617.4 + vertex 125.15825635263542 -100.4820272698084 617.4 + endloop +endfacet +facet normal 0.9942872710787393 -0.10673716583643095 -3.0073320617769446e-16 + outer loop + vertex 121.08292162982879 -96.40669254700175 597.4 + vertex 121.07305832758567 -96.49857203241156 617.4 + vertex 121.07305832758567 -96.49857203241156 597.4 + endloop +endfacet +facet normal 0.9942872710787393 -0.10673716583643095 -3.0073320617769446e-16 + outer loop + vertex 121.07305832758567 -96.49857203241156 617.4 + vertex 121.08292162982879 -96.40669254700175 597.4 + vertex 121.08292162982879 -96.40669254700175 617.4 + endloop +endfacet +facet normal 0.9637952185786789 -0.2666435385395205 -2.7971600712696416e-16 + outer loop + vertex 121.335665377625 -95.00925344381999 597.4 + vertex 121.14483512149562 -95.69901809900362 617.4 + vertex 121.14483512149562 -95.69901809900362 597.4 + endloop +endfacet +facet normal 0.9637952185786789 -0.2666435385395205 -2.7971600712696416e-16 + outer loop + vertex 121.14483512149562 -95.69901809900362 617.4 + vertex 121.335665377625 -95.00925344381999 597.4 + vertex 121.335665377625 -95.00925344381999 617.4 + endloop +endfacet +facet normal 0.2588190451025147 0.9659258262890701 -1.5010751463383359e-16 + outer loop + vertex 123.76440978664105 -100.23625451325573 617.4 + vertex 124.4505819046373 -100.42011377814158 597.4 + vertex 123.76440978664102 -100.23625451325573 597.4 + endloop +endfacet +facet normal 0.2588190451025147 0.9659258262890701 -1.5010751463383359e-16 + outer loop + vertex 124.4505819046373 -100.42011377814158 597.4 + vertex 123.76440978664105 -100.23625451325573 617.4 + vertex 124.4505819046373 -100.42011377814158 617.4 + endloop +endfacet +facet normal 0.8660254037843361 -0.5000000000001776 -2.325189473563334e-16 + outer loop + vertex 121.65644752391407 -94.32133391112718 597.4 + vertex 121.62891295376008 -94.36902518559845 617.4 + vertex 121.62891295376008 -94.36902518559845 597.4 + endloop +endfacet +facet normal 0.8660254037843361 -0.5000000000001776 -2.325189473563334e-16 + outer loop + vertex 121.62891295376008 -94.36902518559845 617.4 + vertex 121.65644752391407 -94.32133391112718 597.4 + vertex 121.6564475239141 -94.32133391112718 617.4 + endloop +endfacet +facet normal -0.5735764363510415 -0.8191520442889951 2.3714292307799455e-16 + outer loop + vertex 148.66181311184846 -57.1126869774622 617.4 + vertex 148.07990580810633 -56.70523109684268 597.4 + vertex 148.66181311184846 -57.1126869774622 597.4 + endloop +endfacet +facet normal -0.5735764363510415 -0.8191520442889951 2.3714292307799455e-16 + outer loop + vertex 148.07990580810633 -56.70523109684268 597.4 + vertex 148.66181311184846 -57.1126869774622 617.4 + vertex 148.07990580810633 -56.70523109684268 617.4 + endloop +endfacet +facet normal 0.08715574274765725 -0.9961946980917458 4.496692457386032e-17 + outer loop + vertex 146.04223844670304 -56.15923977291139 617.4 + vertex 145.33456399870488 -56.22115326457819 597.4 + vertex 146.04223844670304 -56.15923977291139 597.4 + endloop +endfacet +facet normal 0.08715574274765725 -0.9961946980917458 4.496692457386032e-17 + outer loop + vertex 145.33456399870488 -56.22115326457819 597.4 + vertex 146.04223844670304 -56.15923977291139 617.4 + vertex 145.3345639987049 -56.2211532645782 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 174.9553679209021 -91.51604350665507 617.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 170.40253457015436 -88.88746394602533 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.82694148227208 -83.35899269908619 617.4 + vertex 168.16311056879687 -82.39837947330525 617.4 + vertex 166.9703225694756 -80.3324100558224 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.16311056879687 -82.39837947330525 617.4 + vertex 164.82694148227208 -83.35899269908619 617.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.16311056879687 -82.39837947330525 617.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 183.4496386991948 -91.22406060436529 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.4496386991948 -91.22406060436529 617.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 175.9553679209021 -89.7839926990862 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 175.9553679209021 -89.7839926990862 617.4 + vertex 171.40253457015436 -87.15541313845647 617.4 + vertex 174.9553679209021 -91.51604350665507 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.4496386991948 -91.22406060436529 617.4 + vertex 175.9553679209021 -89.7839926990862 617.4 + vertex 182.58046225985305 -93.60899269908619 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 135.51562203109634 -29.851270586485427 617.4 + vertex 134.3609214927171 -31.851270586485423 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 135.51562203109634 -29.851270586485427 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 135.85382598854787 -29.401780843702255 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 135.85382598854787 -29.401780843702255 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 136.2476728386652 -29.11921977891656 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 136.2476728386652 -29.11921977891656 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 136.6703225694756 -29.02284346173925 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 136.6703225694756 -29.02284346173925 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 137.09297230028596 -29.11921977891657 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 137.09297230028596 -29.11921977891657 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 137.4868191504033 -29.401780843702266 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 137.4868191504033 -29.401780843702266 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 137.82502310785486 -29.851270586485448 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 137.82502310785486 -29.851270586485448 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 165.4703225694756 -77.73433384446909 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 149.16412596495888 -57.61499983057261 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 149.16412596495888 -57.61499983057261 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 148.66181311184846 -57.1126869774622 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 148.66181311184846 -57.1126869774622 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 148.07990580810633 -56.70523109684268 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 148.07990580810633 -56.70523109684268 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 147.43608501269742 -56.40501252946406 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 147.43608501269742 -56.40501252946406 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 146.74991289470117 -56.22115326457821 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 146.74991289470117 -56.22115326457821 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 146.04223844670304 -56.15923977291139 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 146.04223844670304 -56.15923977291139 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 145.3345639987049 -56.2211532645782 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 145.3345639987049 -56.2211532645782 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 144.64839188070863 -56.40501252946406 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 144.64839188070863 -56.40501252946406 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 144.00457108529972 -56.70523109684268 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 144.00457108529972 -56.70523109684268 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 143.4226637815576 -57.1126869774622 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 143.4226637815576 -57.1126869774622 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 142.9203509284472 -57.6149998305726 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 142.9203509284472 -57.6149998305726 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 142.51289504782767 -58.19690713431473 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 149.16412596495888 -57.61499983057261 617.4 + vertex 149.57158184557838 -58.19690713431471 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 149.57158184557838 -58.19690713431471 617.4 + vertex 162.26899907810125 -80.18947890594492 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 162.26899907810125 -80.18947890594492 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 154.57694148227208 -101.11251347666716 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 153.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 153.02753457015436 -104.48202726980841 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 150.02753457015436 -121.17248787278366 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 153.02753457015436 -104.48202726980841 617.4 + vertex 150.02753457015436 -121.17248787278366 617.4 + vertex 152.85873887103978 -120.92855370792294 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 150.02753457015436 -121.17248787278366 617.4 + vertex 150.02753457015433 -124.17799915024119 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 150.02753457015433 -124.17799915024119 617.4 + vertex 151.63572936288375 -124.07481319206396 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 152.85873887103978 -120.92855370792294 617.4 + vertex 151.63572936288375 -124.07481319206396 617.4 + vertex 154.3285555435008 -120.70980195331025 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.3285555435008 -120.70980195331025 617.4 + vertex 151.63572936288375 -124.07481319206396 617.4 + vertex 153.23820152839707 -123.90445829168756 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.3285555435008 -120.70980195331025 617.4 + vertex 153.23820152839707 -123.90445829168756 617.4 + vertex 155.7879373772224 -120.42976973338911 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 155.7879373772224 -120.42976973338911 617.4 + vertex 153.23820152839707 -123.90445829168756 617.4 + vertex 154.83214687982968 -123.66723255536577 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 155.7879373772224 -120.42976973338911 617.4 + vertex 154.83214687982968 -123.66723255536577 617.4 + vertex 157.23433058097086 -120.08894708017985 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 157.23433058097086 -120.08894708017985 617.4 + vertex 154.83214687982968 -123.66723255536577 617.4 + vertex 156.4147761514999 -123.36355110749699 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 157.23433058097086 -120.08894708017985 617.4 + vertex 156.4147761514999 -123.36355110749699 617.4 + vertex 158.66520409248508 -119.68793040367183 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 158.66520409248508 -119.68793040367183 617.4 + vertex 156.4147761514999 -123.36355110749699 617.4 + vertex 157.98331987988098 -122.9939453641928 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 158.66520409248508 -119.68793040367183 617.4 + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 160.0780540076148 -119.22742144815797 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 160.0780540076148 -119.22742144815797 617.4 + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 161.4704079619354 -118.70822606424326 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.4704079619354 -118.70822606424326 617.4 + vertex 157.98331987988098 -122.9939453641928 617.4 + vertex 159.5350332499214 -122.55906210334592 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.4704079619354 -118.70822606424326 617.4 + vertex 159.5350332499214 -122.55906210334592 617.4 + vertex 162.83982945717034 -118.1312527986763 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 162.83982945717034 -118.1312527986763 617.4 + vertex 159.5350332499214 -122.55906210334592 617.4 + vertex 161.06720089823253 -122.05966233282531 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 162.83982945717034 -118.1312527986763 617.4 + vertex 161.06720089823253 -122.05966233282531 617.4 + vertex 164.18392212485125 -117.4975113044715 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.18392212485125 -117.4975113044715 617.4 + vertex 161.06720089823253 -122.05966233282531 617.4 + vertex 162.5771416647378 -121.49661995877848 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.18392212485125 -117.4975113044715 617.4 + vertex 162.5771416647378 -121.49661995877848 617.4 + vertex 165.5003339197542 -116.80811057410426 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.5003339197542 -116.80811057410426 617.4 + vertex 162.5771416647378 -121.49661995877848 617.4 + vertex 164.0622132844704 -120.8709202563717 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.5003339197542 -116.80811057410426 617.4 + vertex 164.0622132844704 -120.8709202563717 617.4 + vertex 166.7867612357742 -116.06425699887052 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 166.7867612357742 -116.06425699887052 617.4 + vertex 164.0622132844704 -120.8709202563717 617.4 + vertex 168.04095293703554 -115.26725225780697 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.04095293703554 -115.26725225780697 617.4 + vertex 164.0622132844704 -120.8709202563717 617.4 + vertex 165.51981701130626 -120.18365814564446 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.04095293703554 -115.26725225780697 617.4 + vertex 165.51981701130626 -120.18365814564446 617.4 + vertex 169.26071429718348 -114.41849103986607 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 169.26071429718348 -114.41849103986607 617.4 + vertex 165.51981701130626 -120.18365814564446 617.4 + vertex 166.94740216554413 -119.43603627549433 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 169.26071429718348 -114.41849103986607 617.4 + vertex 166.94740216554413 -119.43603627549433 617.4 + vertex 170.44391083996473 -113.51945860333166 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 170.44391083996473 -113.51945860333166 617.4 + vertex 166.94740216554413 -119.43603627549433 617.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 170.44391083996473 -113.51945860333166 617.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 168.34247059737297 -118.62936291914635 617.4 + vertex 172.33046225985308 -111.36251347666716 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 172.33046225985308 -111.36251347666716 617.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + vertex 182.58046225985305 -93.60899269908619 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 179.92468545251552 -69.38910354298147 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 164.82694148227208 -83.35899269908619 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.82694148227208 -83.35899269908619 617.4 + vertex 165.4703225694756 -77.73433384446909 617.4 + vertex 154.57694148227208 -101.11251347666716 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 179.92468545251552 -69.38910354298147 617.4 + vertex 166.9703225694756 -80.3324100558224 617.4 + vertex 181.12903441933793 -71.96296547328228 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 179.92468545251552 -69.38910354298147 617.4 + vertex 181.12903441933793 -71.96296547328228 617.4 + vertex 182.52753457015436 -67.8863479042527 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 182.52753457015436 -67.8863479042527 617.4 + vertex 181.12903441933793 -71.96296547328228 617.4 + vertex 183.24227030542377 -69.33067842807887 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.24227030542377 -69.33067842807887 617.4 + vertex 181.12903441933793 -71.96296547328228 617.4 + vertex 181.6744981789514 -73.3452399278458 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.24227030542377 -69.33067842807887 617.4 + vertex 181.6744981789514 -73.3452399278458 617.4 + vertex 183.8959747167953 -70.80363748245902 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.8959747167953 -70.80363748245902 617.4 + vertex 181.6744981789514 -73.3452399278458 617.4 + vertex 182.16167407948237 -74.74911777963077 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.8959747167953 -70.80363748245902 617.4 + vertex 182.16167407948237 -74.74911777963077 617.4 + vertex 184.48750387842549 -72.30264751720468 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.48750387842549 -72.30264751720468 617.4 + vertex 182.16167407948237 -74.74911777963077 617.4 + vertex 182.58970960549215 -76.17214236454276 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.48750387842549 -72.30264751720468 617.4 + vertex 182.58970960549215 -76.17214236454276 617.4 + vertex 185.01582266574817 -73.82508539517835 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.01582266574817 -73.82508539517835 617.4 + vertex 182.58970960549215 -76.17214236454276 617.4 + vertex 182.95785573205208 -77.61182351337034 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.01582266574817 -73.82508539517835 617.4 + vertex 182.95785573205208 -77.61182351337034 617.4 + vertex 185.48000656685264 -75.3682869825552 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.48000656685264 -75.3682869825552 617.4 + vertex 182.95785573205208 -77.61182351337034 617.4 + vertex 183.26546823547173 -79.06564190936429 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.48000656685264 -75.3682869825552 617.4 + vertex 183.26546823547173 -79.06564190936429 617.4 + vertex 183.51200882063426 -80.53105349682296 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.48000656685264 -75.3682869825552 617.4 + vertex 183.51200882063426 -80.53105349682296 617.4 + vertex 185.87924330029887 -76.92955181082564 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.87924330029887 -76.92955181082564 617.4 + vertex 183.51200882063426 -80.53105349682296 617.4 + vertex 183.6970460629663 -82.00549393296838 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.87924330029887 -76.92955181082564 617.4 + vertex 183.6970460629663 -82.00549393296838 617.4 + vertex 186.21283423653944 -78.50614780237997 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.21283423653944 -78.50614780237997 617.4 + vertex 183.6970460629663 -82.00549393296838 617.4 + vertex 183.8202561633931 -83.48638307532285 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.21283423653944 -78.50614780237997 617.4 + vertex 183.8202561633931 -83.48638307532285 617.4 + vertex 186.48019562046042 -80.0953160514068 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.48019562046042 -80.0953160514068 617.4 + vertex 183.8202561633931 -83.48638307532285 617.4 + vertex 183.881423514959 -84.97112949673391 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.48019562046042 -80.0953160514068 617.4 + vertex 183.881423514959 -84.97112949673391 617.4 + vertex 186.6808595929021 -81.69427565173788 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.6808595929021 -81.69427565173788 617.4 + vertex 183.881423514959 -84.97112949673391 617.4 + vertex 183.8804410801207 -86.45713502014634 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.6808595929021 -81.69427565173788 617.4 + vertex 183.8804410801207 -86.45713502014634 617.4 + vertex 183.81731057805365 -87.94179926518606 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.6808595929021 -81.69427565173788 617.4 + vertex 183.81731057805365 -87.94179926518606 617.4 + vertex 186.8144750093717 -83.30022856319225 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8144750093717 -83.30022856319225 617.4 + vertex 183.81731057805365 -87.94179926518606 617.4 + vertex 183.6921424816438 -89.42252419859929 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8144750093717 -83.30022856319225 617.4 + vertex 183.6921424816438 -89.42252419859929 617.4 + vertex 186.8808080545158 -84.91036450790281 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8808080545158 -84.91036450790281 617.4 + vertex 183.6921424816438 -89.42252419859929 617.4 + vertex 183.5051558241694 -90.896718680585 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8808080545158 -84.91036450790281 617.4 + vertex 183.5051558241694 -90.896718680585 617.4 + vertex 186.87974265127679 -86.52186588805827 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 183.5051558241694 -90.896718680585 617.4 + vertex 183.4496386991948 -91.22406060436529 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 183.4496386991948 -91.22406060436529 617.4 + vertex 182.58046225985305 -93.60899269908619 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 182.58046225985305 -93.60899269908619 617.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 168.34247059737297 -118.62936291914635 617.4 + vertex 169.70258105841677 -117.76504968478841 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805827 617.4 + vertex 169.70258105841677 -117.76504968478841 617.4 + vertex 186.81128066401763 -88.13191271645415 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.81128066401763 -88.13191271645415 617.4 + vertex 169.70258105841677 -117.76504968478841 617.4 + vertex 171.0253534737069 -116.84460904537998 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.81128066401763 -88.13191271645415 617.4 + vertex 171.0253534737069 -116.84460904537998 617.4 + vertex 186.67554189525939 -89.73768755122492 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.67554189525939 -89.73768755122492 617.4 + vertex 171.0253534737069 -116.84460904537998 617.4 + vertex 172.30847310660613 -115.8696516919559 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.67554189525939 -89.73768755122492 617.4 + vertex 172.30847310660613 -115.8696516919559 617.4 + vertex 186.4727638760373 -91.33638042612223 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.4727638760373 -91.33638042612223 617.4 + vertex 172.30847310660613 -115.8696516919559 617.4 + vertex 173.5496946093963 -114.84188371505724 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.4727638760373 -91.33638042612223 617.4 + vertex 173.5496946093963 -114.84188371505724 617.4 + vertex 186.20330145024204 -92.92519376771138 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.20330145024204 -92.92519376771138 617.4 + vertex 173.5496946093963 -114.84188371505724 617.4 + vertex 174.7468459524417 -113.76310361922131 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.20330145024204 -92.92519376771138 617.4 + vertex 174.7468459524417 -113.76310361922131 617.4 + vertex 185.86762615367383 -94.50134729088126 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.86762615367383 -94.50134729088126 617.4 + vertex 174.7468459524417 -113.76310361922131 617.4 + vertex 175.89783222505156 -112.6351991757552 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.86762615367383 -94.50134729088126 617.4 + vertex 175.89783222505156 -112.6351991757552 617.4 + vertex 185.4663253888957 -96.06208286410167 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4663253888957 -96.06208286410167 617.4 + vertex 175.89783222505156 -112.6351991757552 617.4 + vertex 177.000639301392 -111.46014411930012 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4663253888957 -96.06208286410167 617.4 + vertex 177.000639301392 -111.46014411930012 617.4 + vertex 185.0001013973305 -97.60466933591321 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.0001013973305 -97.60466933591321 617.4 + vertex 177.000639301392 -111.46014411930012 617.4 + vertex 178.05333736503042 -110.23999469396776 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.0001013973305 -97.60466933591321 617.4 + vertex 178.05333736503042 -110.23999469396776 617.4 + vertex 184.4697700303989 -99.12640731420498 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.4697700303989 -99.12640731420498 617.4 + vertex 178.05333736503042 -110.23999469396776 617.4 + vertex 179.05408428594694 -108.97688605509174 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.4697700303989 -99.12640731420498 617.4 + vertex 179.05408428594694 -108.97688605509174 617.4 + vertex 183.87625932185094 -100.62463388991574 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.87625932185094 -100.62463388991574 617.4 + vertex 179.05408428594694 -108.97688605509174 617.4 + vertex 180.00112884410115 -107.67302853289175 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.87625932185094 -100.62463388991574 617.4 + vertex 180.00112884410115 -107.67302853289175 617.4 + vertex 183.2206078637874 -102.0967272968931 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.2206078637874 -102.0967272968931 617.4 + vertex 180.00112884410115 -107.67302853289175 617.4 + vertex 182.5039629892141 -103.54011149975624 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 182.5039629892141 -103.54011149975624 617.4 + vertex 180.00112884410115 -107.67302853289175 617.4 + vertex 180.8928137939151 -106.33070376458777 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 182.5039629892141 -103.54011149975624 617.4 + vertex 180.8928137939151 -106.33070376458777 617.4 + vertex 181.72757876430893 -104.95226070173368 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 155.41311056879687 -104.48202726980841 617.4 + vertex 161.15253457015436 -104.90893391603744 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 155.41311056879687 -104.48202726980841 617.4 + vertex 154.57694148227208 -101.11251347666716 617.4 + vertex 153.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.15253457015436 -104.90893391603744 617.4 + vertex 155.41311056879687 -104.48202726980841 617.4 + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.15253457015436 -104.90893391603744 617.4 + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 165.70536792090212 -107.53751347666717 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.15253457015436 -104.90893391603744 617.4 + vertex 165.70536792090212 -107.53751347666717 617.4 + vertex 162.15253457015436 -103.17688310846856 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.70536792090212 -107.53751347666717 617.4 + vertex 170.69963869919482 -113.30770840086846 617.3999999999999 + vertex 172.33046225985308 -111.36251347666716 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 166.70536792090212 -105.80546266909828 617.4 + vertex 162.15253457015436 -103.17688310846856 617.4 + vertex 165.70536792090212 -107.53751347666717 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 93.36206755126861 -102.99966536001341 617.4 + vertex 94.73693564691287 -100.48202726980837 617.4 + vertex 93.58223510853362 -102.48202726980837 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 94.73693564691287 -100.48202726980837 617.4 + vertex 93.36206755126861 -102.99966536001341 617.4 + vertex 113.13435723985394 -100.4820272698084 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 93.36206755126861 -102.99966536001341 617.4 + vertex 93.31428591610249 -103.48202726980837 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 93.31428591610249 -103.48202726980837 617.4 + vertex 93.44214644250894 -103.89624083218146 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 93.44214644250894 -103.89624083218146 617.4 + vertex 93.73693564691287 -104.21407807737724 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 93.73693564691287 -104.21407807737724 617.4 + vertex 94.17856413219634 -104.41387892238649 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 94.17856413219634 -104.41387892238649 617.4 + vertex 94.73693564691287 -104.48202726980836 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 124.4505819046373 -100.42011377814158 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 124.4505819046373 -100.42011377814158 617.4 + vertex 123.76440978664105 -100.23625451325573 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 123.76440978664105 -100.23625451325573 617.4 + vertex 123.12058899123213 -99.93603594587711 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 123.12058899123213 -99.93603594587711 617.4 + vertex 122.53868168749001 -99.5285800652576 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 122.53868168749001 -99.5285800652576 617.4 + vertex 122.0363688343796 -99.02626721214719 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 122.0363688343796 -99.02626721214719 617.4 + vertex 121.62891295376008 -98.44435990840508 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.62891295376008 -98.44435990840508 617.4 + vertex 121.32869438638144 -97.80053911299616 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.32869438638144 -97.80053911299616 617.4 + vertex 121.14483512149562 -97.1143669949999 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.14483512149562 -97.1143669949999 617.4 + vertex 121.07305832758567 -96.49857203241156 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.07305832758567 -96.49857203241156 617.4 + vertex 121.13921260616524 -95.74242516819555 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.13921260616524 -95.74242516819555 617.4 + vertex 121.14483512149562 -95.69901809900362 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.14483512149562 -95.69901809900362 617.4 + vertex 121.335665377625 -95.00925344381999 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.335665377625 -95.00925344381999 617.4 + vertex 121.62891295376008 -94.36902518559845 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985394 -100.4820272698084 617.4 + vertex 121.62891295376008 -94.36902518559845 617.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 121.62891295376008 -94.36902518559845 617.4 + vertex 142.51289504782767 -58.19690713431473 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 121.13921260616524 -95.74242516819555 617.4 + vertex 121.07305832758567 -96.49857203241156 617.4 + vertex 121.08292162982879 -96.40669254700175 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 124.4505819046373 -100.42011377814158 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 125.15825635263542 -100.4820272698084 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 125.15825635263542 -100.4820272698084 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 150.55309081768115 -100.48202726980841 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 150.55309081768115 -100.48202726980841 617.4 + vertex 150.02753457015436 -104.48202726980841 617.4 + vertex 162.26899907810125 -80.18947890594492 617.4 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 121.6564475239141 -94.32133391112718 617.4 + vertex 142.51289504782767 -58.19690713431473 617.4 + vertex 121.62891295376008 -94.36902518559845 617.4 + endloop +endfacet +facet normal -0.2588190451025147 -0.9659258262890701 1.5010751463383359e-16 + outer loop + vertex 147.43608501269742 -56.40501252946406 617.4 + vertex 146.74991289470117 -56.22115326457821 597.4 + vertex 147.43608501269742 -56.40501252946406 597.4 + endloop +endfacet +facet normal -0.2588190451025147 -0.9659258262890701 1.5010751463383359e-16 + outer loop + vertex 146.74991289470117 -56.22115326457821 597.4 + vertex 147.43608501269742 -56.40501252946406 617.4 + vertex 146.74991289470117 -56.22115326457821 617.4 + endloop +endfacet +facet normal -0.819152044288985 -0.5735764363510556 2.9557539514214894e-16 + outer loop + vertex 149.57158184557838 -58.19690713431471 617.4 + vertex 149.16412596495886 -57.61499983057261 597.4 + vertex 149.57158184557838 -58.19690713431471 597.4 + endloop +endfacet +facet normal -0.819152044288985 -0.5735764363510556 2.9557539514214894e-16 + outer loop + vertex 149.16412596495886 -57.61499983057261 597.4 + vertex 149.57158184557838 -58.19690713431471 617.4 + vertex 149.16412596495888 -57.61499983057261 617.4 + endloop +endfacet +facet normal 0.5735764363510415 0.8191520442889951 -2.3714292307799455e-16 + outer loop + vertex 122.53868168749001 -99.5285800652576 617.4 + vertex 123.12058899123211 -99.93603594587711 597.4 + vertex 122.53868168748998 -99.52858006525759 597.4 + endloop +endfacet +facet normal 0.5735764363510415 0.8191520442889951 -2.3714292307799455e-16 + outer loop + vertex 123.12058899123211 -99.93603594587711 597.4 + vertex 122.53868168749001 -99.5285800652576 617.4 + vertex 123.12058899123213 -99.93603594587711 617.4 + endloop +endfacet +facet normal 7.771561172376096e-16 1.0 -7.227945163972795e-17 + outer loop + vertex 125.15825635263542 -100.4820272698084 617.4 + vertex 150.55309081768115 -100.48202726980841 597.4 + vertex 125.15825635263542 -100.4820272698084 597.4 + endloop +endfacet +facet normal 7.771561172376096e-16 1.0 -7.227945163972795e-17 + outer loop + vertex 150.55309081768115 -100.48202726980841 597.4 + vertex 125.15825635263542 -100.4820272698084 617.4 + vertex 150.55309081768115 -100.48202726980841 617.4 + endloop +endfacet +facet normal 0.9063077870366479 0.42261826174070405 -3.1170170299139537e-16 + outer loop + vertex 121.32869438638144 -97.80053911299616 617.4 + vertex 121.62891295376006 -98.44435990840508 597.4 + vertex 121.32869438638144 -97.80053911299616 597.4 + endloop +endfacet +facet normal 0.9063077870366479 0.42261826174070405 -3.1170170299139537e-16 + outer loop + vertex 121.62891295376006 -98.44435990840508 597.4 + vertex 121.32869438638144 -97.80053911299616 617.4 + vertex 121.62891295376008 -98.44435990840508 617.4 + endloop +endfacet +facet normal 0.9659258262890714 0.2588190451025095 -3.183571123239198e-16 + outer loop + vertex 121.14483512149562 -97.11436699499988 597.4 + vertex 121.32869438638144 -97.80053911299616 617.4 + vertex 121.32869438638144 -97.80053911299616 597.4 + endloop +endfacet +facet normal 0.9659258262890714 0.2588190451025095 -3.183571123239198e-16 + outer loop + vertex 121.32869438638144 -97.80053911299616 617.4 + vertex 121.14483512149562 -97.11436699499988 597.4 + vertex 121.14483512149562 -97.1143669949999 617.4 + endloop +endfacet +facet normal -0.4226182617407051 -0.9063077870366475 1.9661219995849976e-16 + outer loop + vertex 148.07990580810633 -56.70523109684268 617.4 + vertex 147.43608501269742 -56.40501252946406 597.4 + vertex 148.07990580810633 -56.70523109684268 597.4 + endloop +endfacet +facet normal -0.4226182617407051 -0.9063077870366475 1.9661219995849976e-16 + outer loop + vertex 147.43608501269742 -56.40501252946406 597.4 + vertex 148.07990580810633 -56.70523109684268 617.4 + vertex 147.43608501269742 -56.40501252946406 617.4 + endloop +endfacet +facet normal -0.8660254037844387 -0.5000000000000003 3.0479839899610575e-16 + outer loop + vertex 162.26899907810125 -80.18947890594492 617.4 + vertex 149.57158184557838 -58.19690713431471 597.4 + vertex 162.26899907810125 -80.18947890594492 597.4 + endloop +endfacet +facet normal -0.8660254037844387 -0.5000000000000003 3.0479839899610575e-16 + outer loop + vertex 149.57158184557838 -58.19690713431471 597.4 + vertex 162.26899907810125 -80.18947890594492 617.4 + vertex 149.57158184557838 -58.19690713431471 617.4 + endloop +endfacet +facet normal 0.819152044288985 0.5735764363510556 -2.9557539514214894e-16 + outer loop + vertex 121.62891295376008 -98.44435990840508 617.4 + vertex 122.0363688343796 -99.02626721214719 597.4 + vertex 121.62891295376006 -98.44435990840508 597.4 + endloop +endfacet +facet normal 0.819152044288985 0.5735764363510556 -2.9557539514214894e-16 + outer loop + vertex 122.0363688343796 -99.02626721214719 597.4 + vertex 121.62891295376008 -98.44435990840508 617.4 + vertex 122.0363688343796 -99.02626721214719 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 162.26899907810125 -80.18947890594492 617.4 + vertex 150.55309081768115 -100.48202726980841 597.4 + vertex 150.55309081768115 -100.48202726980841 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 150.55309081768115 -100.48202726980841 597.4 + vertex 162.26899907810125 -80.18947890594492 617.4 + vertex 162.26899907810125 -80.18947890594492 597.4 + endloop +endfacet +facet normal 0.4226182617407051 0.9063077870366475 -1.9661219995849976e-16 + outer loop + vertex 123.12058899123213 -99.93603594587711 617.4 + vertex 123.76440978664102 -100.23625451325573 597.4 + vertex 123.12058899123211 -99.93603594587711 597.4 + endloop +endfacet +facet normal 0.4226182617407051 0.9063077870366475 -1.9661219995849976e-16 + outer loop + vertex 123.76440978664102 -100.23625451325573 597.4 + vertex 123.12058899123213 -99.93603594587711 617.4 + vertex 123.76440978664105 -100.23625451325573 617.4 + endloop +endfacet +facet normal 0.2223220049061556 0.9749732950878743 -1.3943933742722982e-16 + outer loop + vertex 136.6703225694756 -29.02284346173925 617.4 + vertex 137.09297230028596 -29.11921977891656 597.4 + vertex 136.6703225694756 -29.02284346173925 597.4 + endloop +endfacet +facet normal 0.2223220049061556 0.9749732950878743 -1.3943933742722982e-16 + outer loop + vertex 137.09297230028596 -29.11921977891656 597.4 + vertex 136.6703225694756 -29.02284346173925 617.4 + vertex 137.09297230028596 -29.11921977891657 617.4 + endloop +endfacet +facet normal -0.7331906391044605 -0.680023151612938 2.76602331194035e-16 + outer loop + vertex 93.73693564691287 -104.21407807737724 617.4 + vertex 93.44214644250893 -103.89624083218146 597.4 + vertex 93.73693564691287 -104.21407807737724 597.4 + endloop +endfacet +facet normal -0.7331906391044605 -0.680023151612938 2.76602331194035e-16 + outer loop + vertex 93.44214644250893 -103.89624083218146 597.4 + vertex 93.73693564691287 -104.21407807737724 617.4 + vertex 93.44214644250894 -103.89624083218146 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 113.13435723985394 -100.4820272698084 617.4 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 2.3251894735637803e-16 + outer loop + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 143.55963228918768 -47.78390505010477 617.4 + vertex 143.55963228918765 -47.783905050104764 597.4 + endloop +endfacet +facet normal -0.582933426294525 0.8125199200687485 1.221092966018723e-16 + outer loop + vertex 136.2476728386652 -29.11921977891656 617.4 + vertex 135.85382598854787 -29.401780843702255 597.4 + vertex 135.85382598854787 -29.401780843702255 617.4 + endloop +endfacet +facet normal -0.582933426294525 0.8125199200687485 1.221092966018723e-16 + outer loop + vertex 135.85382598854787 -29.401780843702255 597.4 + vertex 136.2476728386652 -29.11921977891656 617.4 + vertex 136.2476728386652 -29.11921977891656 597.4 + endloop +endfacet +facet normal -0.9555126440105887 -0.2949501434749512 3.1773826761945216e-16 + outer loop + vertex 93.44214644250894 -103.89624083218146 617.4 + vertex 93.31428591610249 -103.48202726980837 597.4 + vertex 93.44214644250893 -103.89624083218146 597.4 + endloop +endfacet +facet normal -0.9555126440105887 -0.2949501434749512 3.1773826761945216e-16 + outer loop + vertex 93.31428591610249 -103.48202726980837 597.4 + vertex 93.44214644250894 -103.89624083218146 617.4 + vertex 93.31428591610249 -103.48202726980837 617.4 + endloop +endfacet +facet normal -0.41219617871316916 -0.9110951159205395 1.9372508358990654e-16 + outer loop + vertex 94.17856413219634 -104.41387892238649 617.4 + vertex 93.73693564691287 -104.21407807737724 597.4 + vertex 94.17856413219633 -104.41387892238649 597.4 + endloop +endfacet +facet normal -0.41219617871316916 -0.9110951159205395 1.9372508358990654e-16 + outer loop + vertex 93.73693564691287 -104.21407807737724 597.4 + vertex 94.17856413219634 -104.41387892238649 617.4 + vertex 93.73693564691287 -104.21407807737724 617.4 + endloop +endfacet +facet normal -0.1211494213554683 -0.9926342819514321 1.0933007317951958e-16 + outer loop + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 94.17856413219633 -104.41387892238649 597.4 + vertex 94.73693564691287 -104.48202726980836 597.4 + endloop +endfacet +facet normal -0.1211494213554683 -0.9926342819514321 1.0933007317951958e-16 + outer loop + vertex 94.17856413219633 -104.41387892238649 597.4 + vertex 94.73693564691287 -104.48202726980836 617.4 + vertex 94.17856413219634 -104.41387892238649 617.4 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 -7.227945163972799e-17 + outer loop + vertex 94.73693564691287 -100.48202726980837 617.4 + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 94.73693564691285 -100.48202726980837 597.4 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 -7.227945163972799e-17 + outer loop + vertex 113.13435723985393 -100.4820272698084 597.4 + vertex 94.73693564691287 -100.48202726980837 617.4 + vertex 113.13435723985394 -100.4820272698084 617.4 + endloop +endfacet +facet normal -0.22232200490613963 0.9749732950878782 -1.5017328374354188e-18 + outer loop + vertex 136.2476728386652 -29.11921977891656 617.4 + vertex 136.6703225694756 -29.02284346173925 597.4 + vertex 136.2476728386652 -29.11921977891656 597.4 + endloop +endfacet +facet normal -0.22232200490613963 0.9749732950878782 -1.5017328374354188e-18 + outer loop + vertex 136.6703225694756 -29.02284346173925 597.4 + vertex 136.2476728386652 -29.11921977891656 617.4 + vertex 136.6703225694756 -29.02284346173925 617.4 + endloop +endfacet +facet normal -0.9202212155149952 0.39139866442810534 2.571812341015744e-16 + outer loop + vertex 93.58223510853362 -102.48202726980837 617.4 + vertex 93.36206755126861 -102.99966536001341 597.4 + vertex 93.36206755126861 -102.99966536001341 617.4 + endloop +endfacet +facet normal -0.9202212155149952 0.39139866442810534 2.571812341015744e-16 + outer loop + vertex 93.36206755126861 -102.99966536001341 597.4 + vertex 93.58223510853362 -102.48202726980837 617.4 + vertex 93.58223510853361 -102.48202726980837 597.4 + endloop +endfacet +facet normal -0.7990717941595372 0.6012356175233284 2.044313225968284e-16 + outer loop + vertex 135.85382598854787 -29.401780843702255 617.4 + vertex 135.51562203109634 -29.851270586485427 597.4 + vertex 135.51562203109634 -29.851270586485427 617.4 + endloop +endfacet +facet normal -0.7990717941595372 0.6012356175233284 2.044313225968284e-16 + outer loop + vertex 135.51562203109634 -29.851270586485427 597.4 + vertex 135.85382598854787 -29.401780843702255 617.4 + vertex 135.85382598854787 -29.401780843702255 597.4 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.02753457015473 -117.8820272698084 597.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.0275345701548 -121.86791679764445 598.0545186779377 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.0275345701548 -121.86791679764445 598.0545186779377 + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + vertex 150.0275345701549 -124.34805267359287 597.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701548 -121.86791679764445 598.0545186779377 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.0275345701548 -121.48202726980844 598.214359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701548 -121.48202726980844 598.214359353945 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.02753457015476 -121.15065641990998 598.4686291501016 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -121.15065641990998 598.4686291501016 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.02753457015476 -120.89638662375333 598.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -120.89638662375333 598.8000000000002 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.02753457015476 -120.73654594774594 599.1858895278361 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -120.73654594774594 599.1858895278361 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.02753457015476 -120.08202726980845 599.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -120.73654594774594 599.1858895278361 + vertex 150.02753457015476 -120.08202726980845 599.2000000000002 + vertex 150.02753457015476 -120.68202726980844 599.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -120.68202726980844 599.6000000000001 + vertex 150.02753457015476 -120.08202726980845 599.2000000000002 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -120.68202726980844 599.6000000000001 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015473 -120.73654594774594 600.0141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -120.73654594774594 600.0141104721642 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015473 -120.89638662375336 600.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -120.89638662375336 600.4000000000002 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.0275345701547 -121.15065641990995 600.7313708498986 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -121.15065641990995 600.7313708498986 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015467 -121.48202726980844 600.9856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -121.48202726980844 600.9856406460553 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.0275345701547 -121.86791679764438 601.1454813220627 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -121.86791679764438 601.1454813220627 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015436 -105.22320822470594 597.434074173711 + vertex 150.02753457015456 -110.68202726980844 597.4000000000001 + vertex 150.0275345701544 -105.48202726980847 597.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015456 -110.68202726980844 597.4000000000001 + vertex 150.02753457015436 -105.22320822470594 597.434074173711 + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex 150.02753457015436 -105.22320822470594 597.434074173711 + vertex 150.02753457015436 -104.98202726980846 597.5339745962157 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex 150.02753457015436 -104.98202726980846 597.5339745962157 + vertex 150.02753457015433 -104.77492048862187 597.6928932188135 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex 150.02753457015433 -104.77492048862187 597.6928932188135 + vertex 150.02753457015433 -104.61600186602396 597.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex 150.02753457015433 -104.61600186602396 597.9000000000001 + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + vertex 150.02753457015433 -104.61600186602396 597.9000000000001 + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + vertex 150.02753457015436 -107.09613774197248 598.0545186779376 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + vertex 150.02753457015436 -107.09613774197248 598.0545186779376 + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + vertex 150.02753457015436 -107.09613774197248 598.0545186779376 + vertex 150.02753457015444 -107.48202726980843 598.214359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + vertex 150.02753457015444 -107.48202726980843 598.214359353945 + vertex 150.0275345701544 -107.81339811970692 598.4686291501016 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + vertex 150.0275345701544 -107.81339811970692 598.4686291501016 + vertex 150.0275345701544 -108.06766791586355 598.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + vertex 150.0275345701544 -108.06766791586355 598.8000000000002 + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + vertex 150.0275345701544 -108.88202726980845 599.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -108.88202726980845 599.2000000000002 + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + vertex 150.0275345701544 -108.28202726980844 599.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -108.88202726980845 599.2000000000002 + vertex 150.0275345701544 -108.28202726980844 599.6000000000001 + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.0275345701544 -108.28202726980844 599.6000000000001 + vertex 150.02753457015436 -108.22750859187094 600.0141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.02753457015436 -108.22750859187094 600.0141104721642 + vertex 150.02753457015433 -108.06766791586354 600.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.02753457015433 -108.06766791586354 600.4000000000002 + vertex 150.02753457015433 -107.81339811970689 600.7313708498987 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.02753457015433 -107.81339811970689 600.7313708498987 + vertex 150.0275345701543 -107.48202726980843 600.9856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.0275345701543 -107.48202726980843 600.9856406460553 + vertex 150.02753457015427 -107.09613774197246 601.1454813220627 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.02753457015427 -107.09613774197246 601.1454813220627 + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + vertex 150.02753457015385 -104.48202726980846 611.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex 150.0275345701539 -111.08202726980842 615.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -111.08202726980842 615.6000000000001 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + vertex 150.0275345701538 -110.68202726980844 617.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -110.68202726980844 617.4000000000002 + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + vertex 150.02753457015365 -104.98202726980846 617.2660254037846 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -110.68202726980844 617.4000000000002 + vertex 150.02753457015365 -104.98202726980846 617.2660254037846 + vertex 150.02753457015365 -105.22320822470594 617.3659258262892 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -110.68202726980844 617.4000000000002 + vertex 150.02753457015365 -105.22320822470594 617.3659258262892 + vertex 150.02753457015362 -105.48202726980846 617.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015447 -117.61634184485919 603.7000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex 150.02753457015447 -117.61634184485919 603.7000000000002 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.02753457015447 -117.61634184485919 603.7000000000002 + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.0275345701544 -114.48202726980843 604.7000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -114.48202726980843 604.7000000000002 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.02753457015433 -113.78321584803162 604.7920002690196 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -113.78321584803162 604.7920002690196 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.0275345701543 -113.13202726980845 605.0617314097822 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -113.13202726980845 605.0617314097822 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.02753457015427 -112.57283896060474 605.4908116907965 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -112.57283896060474 605.4908116907965 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.02753457015427 -112.14375867959046 606.0500000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -112.14375867959046 606.0500000000002 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015422 -111.78202726980847 607.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -111.78202726980847 607.4000000000001 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015416 -111.87402753882795 608.098811421777 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -111.87402753882795 608.098811421777 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015416 -112.14375867959048 608.7500000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -112.14375867959048 608.7500000000001 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015416 -112.57283896060477 609.3091883092038 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -112.57283896060477 609.3091883092038 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015413 -113.13202726980845 609.7382685902181 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -113.13202726980845 609.7382685902181 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015416 -113.78321584803162 610.0079997309806 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -113.78321584803162 610.0079997309806 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.0275345701542 -114.48202726980846 610.1000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.0275345701549 -123.48202726980844 597.4000000000001 + vertex 150.02753457015476 -118.28202726980841 597.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701549 -123.48202726980844 597.4000000000001 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.0275345701549 -123.74084631491097 597.434074173711 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701549 -123.74084631491097 597.434074173711 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.02753457015493 -123.98202726980844 597.5339745962157 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015493 -123.98202726980844 597.5339745962157 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.0275345701549 -124.18913405099497 597.6928932188135 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701549 -124.18913405099497 597.6928932188135 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.0275345701549 -124.34805267359287 597.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + vertex 150.02753457015433 -104.61600186602396 597.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex 150.02753457015436 -106.26791679764442 598.0545186779376 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015436 -106.26791679764442 598.0545186779376 + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex 150.0275345701544 -105.88202726980843 598.214359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -105.88202726980843 598.214359353945 + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -105.88202726980843 598.214359353945 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + vertex 150.02753457015433 -105.55065641990996 598.4686291501016 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -105.55065641990996 598.4686291501016 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + vertex 150.0275345701543 -105.29638662375332 598.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -105.29638662375332 598.8000000000001 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + vertex 150.02753457015433 -105.13654594774593 599.1858895278361 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -105.13654594774593 599.1858895278361 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -105.13654594774593 599.1858895278361 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015427 -105.0820272698084 599.6 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -105.0820272698084 599.6 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.0275345701543 -105.1365459477459 600.0141104721641 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -105.1365459477459 600.0141104721641 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015427 -105.29638662375332 600.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -105.29638662375332 600.4000000000002 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015422 -105.55065641990996 600.7313708498986 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -105.55065641990996 600.7313708498986 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015424 -105.88202726980843 600.9856406460552 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -105.88202726980843 600.9856406460552 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015424 -106.26791679764439 601.1454813220627 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -106.26791679764439 601.1454813220627 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015413 -104.88202726980845 603.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + vertex 150.02753457015413 -104.88202726980845 603.6000000000001 + vertex 150.02753457015413 -106.28202726980845 604.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -106.28202726980845 604.0000000000001 + vertex 150.02753457015413 -104.88202726980845 603.6000000000001 + vertex 150.0275345701541 -104.88202726980843 604.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.02753457015442 -116.82029586002643 606.0500000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015442 -116.82029586002643 606.0500000000002 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.0275345701544 -116.39121557901213 605.4908116907965 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -116.39121557901213 605.4908116907965 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.0275345701544 -115.83202726980844 605.0617314097822 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -115.83202726980844 605.0617314097822 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.0275345701544 -115.18083869158524 604.7920002690196 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -115.18083869158524 604.7920002690196 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + vertex 150.0275345701544 -114.48202726980843 604.7000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex 150.02753457015436 -117.18202726980846 607.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015436 -117.18202726980846 607.4000000000001 + vertex 150.0275345701543 -117.09002700078892 608.098811421777 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.0275345701543 -117.09002700078892 608.098811421777 + vertex 150.0275345701543 -116.82029586002643 608.7500000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.0275345701543 -116.82029586002643 608.7500000000001 + vertex 150.02753457015424 -116.39121557901214 609.3091883092038 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015424 -116.39121557901214 609.3091883092038 + vertex 150.02753457015422 -115.83202726980844 609.7382685902181 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015422 -115.83202726980844 609.7382685902181 + vertex 150.02753457015422 -115.18083869158525 610.0079997309806 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015422 -115.18083869158525 610.0079997309806 + vertex 150.0275345701542 -114.48202726980846 610.1000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.0275345701542 -114.48202726980846 610.1000000000001 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701539 -104.88202726980843 610.8000000000002 + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.0275345701539 -106.28202726980842 610.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.0275345701539 -104.88202726980843 610.8000000000002 + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015422 -117.61634184485916 611.1000000000001 + vertex 150.02753457015422 -120.64771269475773 613.0000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -117.61634184485916 611.1000000000001 + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -120.64771269475773 613.0000000000002 + vertex 150.02753457015422 -117.61634184485916 611.1000000000001 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -120.64771269475773 613.0000000000002 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + vertex 150.0275345701541 -117.88202726980845 615.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015416 -120.73654594774594 615.6141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -120.73654594774594 615.6141104721642 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015413 -120.89638662375332 616.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -120.89638662375332 616.0000000000001 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015413 -121.15065641990995 616.3313708498987 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -121.15065641990995 616.3313708498987 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015413 -121.48202726980843 616.5856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -121.48202726980843 616.5856406460553 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.0275345701541 -121.86791679764438 616.7454813220626 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -121.86791679764438 616.7454813220626 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.0275345701542 -122.28202726980844 616.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -122.28202726980844 616.8000000000002 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.02753457015402 -118.28202726980847 617.0000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + vertex 150.02753457015402 -118.28202726980847 617.0000000000002 + vertex 150.02753457015422 -124.189134050995 617.1071067811868 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.189134050995 617.1071067811868 + vertex 150.02753457015402 -118.28202726980847 617.0000000000002 + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.189134050995 617.1071067811868 + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex 150.02753457015422 -123.98202726980844 617.2660254037846 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -123.98202726980844 617.2660254037846 + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex 150.02753457015422 -123.74084631491097 617.3659258262892 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -123.74084631491097 617.3659258262892 + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex 150.0275345701542 -123.48202726980846 617.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015442 -122.68202726980844 610.8000000000002 + vertex 150.02753457015444 -124.08202726980846 611.2000000000002 + vertex 150.02753457015444 -124.08202726980846 610.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -124.08202726980846 611.2000000000002 + vertex 150.02753457015442 -122.68202726980844 610.8000000000002 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -124.08202726980846 611.2000000000002 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.02753457015444 -124.48202726980846 611.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -124.48202726980846 611.2000000000002 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.0275345701543 -123.66766791586357 614.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -124.48202726980846 611.2000000000002 + vertex 150.0275345701543 -123.66766791586357 614.4000000000001 + vertex 150.02753457015427 -123.82750859187097 614.7858895278362 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -124.48202726980846 611.2000000000002 + vertex 150.02753457015427 -123.82750859187097 614.7858895278362 + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -123.66766791586357 614.4000000000001 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.0275345701543 -123.41339811970694 614.0686291501017 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -123.41339811970694 614.0686291501017 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.0275345701543 -123.08202726980846 613.814359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -123.08202726980846 613.814359353945 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.0275345701543 -122.69613774197249 613.6545186779376 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -122.69613774197249 613.6545186779376 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.02753457015427 -122.28202726980847 613.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -122.28202726980847 613.6000000000001 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.02753457015427 -123.82750859187097 614.7858895278362 + vertex 150.02753457015427 -123.88202726980846 615.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.02753457015427 -123.88202726980846 615.2000000000002 + vertex 150.02753457015427 -123.82750859187097 615.6141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.02753457015427 -123.82750859187097 615.6141104721642 + vertex 150.02753457015424 -123.66766791586355 616.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.02753457015424 -123.66766791586355 616.0000000000001 + vertex 150.0275345701542 -123.41339811970691 616.3313708498987 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.0275345701542 -123.41339811970691 616.3313708498987 + vertex 150.0275345701542 -123.08202726980844 616.5856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.0275345701542 -123.08202726980844 616.5856406460553 + vertex 150.02753457015424 -124.44795309609752 616.6588190451026 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.44795309609752 616.6588190451026 + vertex 150.0275345701542 -123.08202726980844 616.5856406460553 + vertex 150.02753457015416 -122.69613774197248 616.7454813220627 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -124.44795309609752 616.6588190451026 + vertex 150.02753457015416 -122.69613774197248 616.7454813220627 + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + vertex 150.02753457015416 -122.69613774197248 616.7454813220627 + vertex 150.0275345701542 -122.28202726980844 616.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex 150.02753457015424 -121.86791679764441 613.6545186779376 + vertex 150.02753457015427 -122.28202726980847 613.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -121.86791679764441 613.6545186779376 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex 150.02753457015424 -121.48202726980847 613.814359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -121.48202726980847 613.814359353945 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex 150.02753457015422 -121.15065641990998 614.0686291501016 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -121.15065641990998 614.0686291501016 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex 150.02753457015422 -120.89638662375336 614.4000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -120.89638662375336 614.4000000000001 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -120.89638662375336 614.4000000000001 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + vertex 150.0275345701542 -120.73654594774592 614.785889527836 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -120.73654594774592 614.785889527836 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + vertex 150.0275345701542 -120.68202726980842 615.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -120.68202726980842 615.2000000000002 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + vertex 150.02753457015416 -120.73654594774594 615.6141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.0275345701543 -108.31634184485917 601.8000000000001 + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -108.31634184485917 601.8000000000001 + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + vertex 150.0275345701543 -108.31634184485917 601.8000000000001 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015464 -122.68202726980844 604.0000000000001 + vertex 150.02753457015467 -124.08202726980844 603.6 + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.08202726980844 603.6 + vertex 150.02753457015464 -122.68202726980844 604.0000000000001 + vertex 150.02753457015467 -124.08202726980842 604.0000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex 150.0275345701549 -124.34805267359287 597.9000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + vertex 150.02753457015484 -122.69613774197249 598.0545186779377 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex 150.02753457015484 -122.69613774197249 598.0545186779377 + vertex 150.02753457015487 -123.08202726980849 598.214359353945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex 150.02753457015487 -123.08202726980849 598.214359353945 + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + vertex 150.02753457015487 -123.08202726980849 598.214359353945 + vertex 150.02753457015487 -123.41339811970694 598.4686291501016 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + vertex 150.02753457015487 -123.41339811970694 598.4686291501016 + vertex 150.02753457015484 -123.66766791586357 598.8000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + vertex 150.02753457015484 -123.66766791586357 598.8000000000002 + vertex 150.02753457015487 -123.82750859187097 599.1858895278361 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + vertex 150.02753457015487 -123.82750859187097 599.1858895278361 + vertex 150.0275345701547 -124.48202726980841 603.6 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.02753457015487 -123.82750859187097 599.1858895278361 + vertex 150.0275345701548 -123.88202726980843 599.6000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.0275345701548 -123.88202726980843 599.6000000000001 + vertex 150.0275345701548 -123.82750859187097 600.0141104721642 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.0275345701548 -123.82750859187097 600.0141104721642 + vertex 150.0275345701548 -123.66766791586355 600.4000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.0275345701548 -123.66766791586355 600.4000000000002 + vertex 150.02753457015476 -123.41339811970691 600.7313708498987 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.02753457015476 -123.41339811970691 600.7313708498987 + vertex 150.02753457015476 -123.08202726980844 600.9856406460553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.02753457015476 -123.08202726980844 600.9856406460553 + vertex 150.0275345701547 -122.69613774197248 601.1454813220627 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.0275345701547 -122.69613774197248 601.1454813220627 + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -124.48202726980841 603.6 + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + vertex 150.02753457015467 -124.08202726980844 603.6 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984396 -123.48202726980844 597.4 + vertex 150.02753457015476 -118.28202726980841 597.4000000000001 + vertex 150.0275345701549 -123.48202726980844 597.4000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015476 -118.28202726980841 597.4000000000001 + vertex -149.97246542984396 -123.48202726980844 597.4 + vertex -149.97246542984414 -118.28202726980835 597.4 + endloop +endfacet +facet normal 4.164649241083378e-14 -0.1305261922200722 -0.9914448613738078 + outer loop + vertex -149.97246542984396 -123.74084631491093 597.434074173711 + vertex 150.0275345701549 -123.48202726980844 597.4000000000001 + vertex 150.0275345701549 -123.74084631491097 597.434074173711 + endloop +endfacet +facet normal 4.164649241083378e-14 -0.1305261922200722 -0.9914448613738078 + outer loop + vertex 150.0275345701549 -123.48202726980844 597.4000000000001 + vertex -149.97246542984396 -123.74084631491093 597.434074173711 + vertex -149.97246542984396 -123.48202726980844 597.4 + endloop +endfacet +facet normal 3.5926213864307125e-14 4.538832183921785e-15 -1.0 + outer loop + vertex -149.97246542984422 -117.61634184485915 603.7 + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + vertex 150.02753457015447 -117.61634184485919 603.7000000000002 + endloop +endfacet +facet normal 3.5926213864307125e-14 4.538832183921785e-15 -1.0 + outer loop + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + vertex -149.97246542984422 -117.61634184485915 603.7 + vertex -149.97246542984445 -111.34771269475767 603.7 + endloop +endfacet +facet normal 5.513731934900517e-14 -0.38268343236508134 -0.9238795325112904 + outer loop + vertex -149.97246542984396 -123.98202726980841 597.5339745962156 + vertex 150.0275345701549 -123.74084631491097 597.434074173711 + vertex 150.02753457015493 -123.98202726980844 597.5339745962157 + endloop +endfacet +facet normal 5.513731934900517e-14 -0.38268343236508134 -0.9238795325112904 + outer loop + vertex 150.0275345701549 -123.74084631491097 597.434074173711 + vertex -149.97246542984396 -123.98202726980841 597.5339745962156 + vertex -149.97246542984396 -123.74084631491093 597.434074173711 + endloop +endfacet +facet normal 5.200343766171889e-14 -0.6087614290087036 -0.7933533402912483 + outer loop + vertex -149.97246542984396 -124.18913405099494 597.6928932188135 + vertex 150.02753457015493 -123.98202726980844 597.5339745962157 + vertex 150.0275345701549 -124.18913405099497 597.6928932188135 + endloop +endfacet +facet normal 5.200343766171889e-14 -0.6087614290087036 -0.7933533402912483 + outer loop + vertex 150.02753457015493 -123.98202726980844 597.5339745962157 + vertex -149.97246542984396 -124.18913405099494 597.6928932188135 + vertex -149.97246542984396 -123.98202726980841 597.5339745962156 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 7.797766215937039e-16 + outer loop + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex 150.02753457015464 -122.68202726980844 604.0000000000001 + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 7.797766215937039e-16 + outer loop + vertex 150.02753457015464 -122.68202726980844 604.0000000000001 + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex -149.9724654298442 -122.68202726980842 604.0000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 6.227439144697608e-15 + outer loop + vertex -149.97246542984414 -118.28202726980835 597.4 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex 150.02753457015476 -118.28202726980841 597.4000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 6.227439144697608e-15 + outer loop + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + vertex -149.97246542984414 -118.28202726980835 597.4 + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.9724654298441 -120.0820272698084 599.2 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex 150.02753457015476 -120.08202726980845 599.2000000000002 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + vertex -149.9724654298441 -120.0820272698084 599.2 + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex -149.9724654298445 -108.88202726980838 599.2 + vertex 150.0275345701544 -108.88202726980845 599.2000000000002 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.9724654298445 -108.88202726980838 599.2 + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex 150.0275345701547 -122.68202726980844 601.8000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex -149.9724654298442 -120.64771269475763 601.8000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex -149.9724654298441 -120.0820272698084 599.2 + vertex 150.02753457015476 -120.08202726980845 599.2000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.9724654298441 -120.0820272698084 599.2 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex -149.9724654298442 -117.8820272698084 599.2 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex -149.97246542984436 -110.68202726980842 597.4 + vertex 150.02753457015456 -110.68202726980844 597.4000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984436 -110.68202726980842 597.4 + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + endloop +endfacet +facet normal 4.6599210313486674e-14 -0.9238795325112916 -0.38268343236507846 + outer loop + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex -149.97246542984396 -124.34805267359283 597.9 + vertex 150.0275345701549 -124.34805267359287 597.9000000000001 + endloop +endfacet +facet normal 4.6599210313486674e-14 -0.9238795325112916 -0.38268343236507846 + outer loop + vertex -149.97246542984396 -124.34805267359283 597.9 + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex -149.972465429844 -124.44795309609748 598.1411809548975 + endloop +endfacet +facet normal 1.2048156260518037e-15 -0.7071067811865512 0.7071067811865439 + outer loop + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + endloop +endfacet +facet normal 1.2048156260518037e-15 -0.7071067811865512 0.7071067811865439 + outer loop + vertex 150.02753457015467 -120.64771269475769 601.8000000000001 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.9724654298442 -120.64771269475763 601.8000000000001 + endloop +endfacet +facet normal -1.2048156260517146e-15 0.7071067811865481 -0.707106781186547 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex 150.02753457015447 -117.61634184485919 603.7000000000002 + vertex 150.02753457015461 -120.08202726980845 601.2343145750508 + endloop +endfacet +facet normal -1.2048156260517146e-15 0.7071067811865481 -0.707106781186547 + outer loop + vertex 150.02753457015447 -117.61634184485919 603.7000000000002 + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.97246542984422 -117.61634184485915 603.7 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015467 -124.08202726980844 603.6 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex 150.0275345701547 -124.48202726980841 603.6 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex 150.02753457015467 -124.08202726980844 603.6 + vertex -149.9724654298442 -124.08202726980839 603.6 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.9724654298443 -111.08202726980838 597.8000000000001 + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701545 -110.68202726980842 597.8000000000001 + vertex -149.9724654298443 -111.08202726980838 597.8000000000001 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + endloop +endfacet +facet normal -3.592621386430645e-14 -1.7054096175908568e-14 1.0 + outer loop + vertex 150.02753457015464 -122.68202726980844 604.0000000000001 + vertex -149.9724654298442 -124.08202726980836 604.0 + vertex 150.02753457015467 -124.08202726980842 604.0000000000001 + endloop +endfacet +facet normal -3.592621386430645e-14 -1.7054096175908568e-14 1.0 + outer loop + vertex -149.9724654298442 -124.08202726980836 604.0 + vertex 150.02753457015464 -122.68202726980844 604.0000000000001 + vertex -149.9724654298442 -122.68202726980842 604.0000000000001 + endloop +endfacet +facet normal 4.512572649034336e-14 -0.7071067811865448 -0.7071067811865503 + outer loop + vertex -149.97246542984445 -111.34771269475767 603.7 + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex 150.0275345701543 -111.3477126947577 603.7000000000002 + endloop +endfacet +facet normal 4.512572649034336e-14 -0.7071067811865448 -0.7071067811865503 + outer loop + vertex 150.02753457015433 -108.88202726980842 601.2343145750509 + vertex -149.97246542984445 -111.34771269475767 603.7 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + endloop +endfacet +facet normal 3.1555025696319064e-14 0.13052619222007428 -0.9914448613738074 + outer loop + vertex -149.97246542984445 -105.48202726980838 597.4 + vertex 150.02753457015436 -105.22320822470594 597.434074173711 + vertex 150.0275345701544 -105.48202726980847 597.4000000000001 + endloop +endfacet +facet normal 3.1555025696319064e-14 0.13052619222007428 -0.9914448613738074 + outer loop + vertex 150.02753457015436 -105.22320822470594 597.434074173711 + vertex -149.97246542984445 -105.48202726980838 597.4 + vertex -149.9724654298445 -105.22320822470584 597.434074173711 + endloop +endfacet +facet normal 2.0504249361719442e-14 0.3826834323650829 -0.9238795325112896 + outer loop + vertex -149.9724654298445 -105.22320822470584 597.434074173711 + vertex 150.02753457015436 -104.98202726980846 597.5339745962157 + vertex 150.02753457015436 -105.22320822470594 597.434074173711 + endloop +endfacet +facet normal 2.0504249361719442e-14 0.3826834323650829 -0.9238795325112896 + outer loop + vertex 150.02753457015436 -104.98202726980846 597.5339745962157 + vertex -149.9724654298445 -105.22320822470584 597.434074173711 + vertex -149.9724654298445 -104.98202726980841 597.5339745962156 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 2.4387889803801356e-15 + outer loop + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + vertex 150.0275345701547 -124.48202726980841 603.6 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 2.4387889803801356e-15 + outer loop + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + vertex 150.02753457015473 -117.8820272698084 597.8000000000001 + vertex 150.02753457015473 -118.28202726980841 597.8000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015473 -117.8820272698084 597.8000000000001 + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + endloop +endfacet +facet normal 3.881934011071542e-14 -0.9914448613738096 -0.1305261922200573 + outer loop + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex 150.02753457015487 -124.48202726980846 598.4000000000002 + endloop +endfacet +facet normal 3.881934011071542e-14 -0.9914448613738096 -0.1305261922200573 + outer loop + vertex 150.02753457015487 -124.4479530960975 598.1411809548977 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + vertex -149.972465429844 -124.44795309609748 598.1411809548975 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015453 -111.08202726980842 597.8000000000001 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.9724654298443 -111.08202726980838 597.8000000000001 + endloop +endfacet +facet normal 1.14378780311469e-14 0.6087614290087051 -0.7933533402912472 + outer loop + vertex -149.9724654298445 -104.98202726980841 597.5339745962156 + vertex 150.02753457015433 -104.77492048862187 597.6928932188135 + vertex 150.02753457015436 -104.98202726980846 597.5339745962157 + endloop +endfacet +facet normal 1.14378780311469e-14 0.6087614290087051 -0.7933533402912472 + outer loop + vertex 150.02753457015433 -104.77492048862187 597.6928932188135 + vertex -149.9724654298445 -104.98202726980841 597.5339745962156 + vertex -149.9724654298445 -104.77492048862183 597.6928932188135 + endloop +endfacet +facet normal 1.1474086062760138e-15 0.7933533402912367 -0.6087614290087189 + outer loop + vertex 150.02753457015433 -104.77492048862187 597.6928932188135 + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + vertex 150.02753457015433 -104.61600186602396 597.9000000000001 + endloop +endfacet +facet normal 1.1474086062760138e-15 0.7933533402912367 -0.6087614290087189 + outer loop + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + vertex 150.02753457015433 -104.77492048862187 597.6928932188135 + vertex -149.9724654298445 -104.77492048862183 597.6928932188135 + endloop +endfacet +facet normal 3.7893401050872254e-14 -0.7933533402912385 -0.6087614290087162 + outer loop + vertex -149.97246542984396 -124.34805267359283 597.9 + vertex 150.0275345701549 -124.18913405099497 597.6928932188135 + vertex 150.0275345701549 -124.34805267359287 597.9000000000001 + endloop +endfacet +facet normal 3.7893401050872254e-14 -0.7933533402912385 -0.6087614290087162 + outer loop + vertex 150.0275345701549 -124.18913405099497 597.6928932188135 + vertex -149.97246542984396 -124.34805267359283 597.9 + vertex -149.97246542984396 -124.18913405099494 597.6928932188135 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.122523745489034e-14 + outer loop + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex 150.02753457015473 -117.8820272698084 597.8000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.122523745489034e-14 + outer loop + vertex 150.02753457015467 -117.88202726980845 599.2000000000002 + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + vertex -149.9724654298442 -117.8820272698084 599.2 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -6.007129263248553e-15 + outer loop + vertex -149.9724654298442 -124.08202726980836 604.0 + vertex 150.02753457015467 -124.08202726980844 603.6 + vertex 150.02753457015467 -124.08202726980842 604.0000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -6.007129263248553e-15 + outer loop + vertex 150.02753457015467 -124.08202726980844 603.6 + vertex -149.9724654298442 -124.08202726980836 604.0 + vertex -149.9724654298442 -124.08202726980839 603.6 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.0275345701544 -108.88202726980845 599.2000000000002 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex 150.0275345701545 -111.08202726980839 599.2000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex 150.0275345701544 -108.88202726980845 599.2000000000002 + vertex -149.9724654298445 -108.88202726980838 599.2 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984436 -110.68202726980842 597.4 + vertex 150.0275345701544 -105.48202726980847 597.4000000000001 + vertex 150.02753457015456 -110.68202726980844 597.4000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701544 -105.48202726980847 597.4000000000001 + vertex -149.97246542984436 -110.68202726980842 597.4 + vertex -149.97246542984445 -105.48202726980838 597.4 + endloop +endfacet +facet normal -4.164649241083345e-14 0.13052619222006093 0.9914448613738092 + outer loop + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + vertex -149.97246542984445 -107.09613774197238 598.0545186779375 + vertex 150.02753457015436 -107.09613774197248 598.0545186779376 + endloop +endfacet +facet normal -4.164649241083345e-14 0.13052619222006093 0.9914448613738092 + outer loop + vertex -149.97246542984445 -107.09613774197238 598.0545186779375 + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + endloop +endfacet +facet normal -3.881934011071544e-14 0.9914448613738105 -0.13052619222005132 + outer loop + vertex -149.9724654298445 -117.18202726980843 607.4 + vertex 150.0275345701543 -117.09002700078892 608.098811421777 + vertex 150.02753457015436 -117.18202726980846 607.4000000000001 + endloop +endfacet +facet normal -3.881934011071544e-14 0.9914448613738105 -0.13052619222005132 + outer loop + vertex 150.0275345701543 -117.09002700078892 608.098811421777 + vertex -149.9724654298445 -117.18202726980843 607.4 + vertex -149.97246542984442 -117.09002700078888 608.0988114217769 + endloop +endfacet +facet normal -5.200343766171888e-14 0.6087614290087029 0.7933533402912488 + outer loop + vertex 150.0275345701544 -115.83202726980844 605.0617314097822 + vertex -149.97246542984445 -116.39121557901207 605.4908116907964 + vertex 150.0275345701544 -116.39121557901213 605.4908116907965 + endloop +endfacet +facet normal -5.200343766171888e-14 0.6087614290087029 0.7933533402912488 + outer loop + vertex -149.97246542984445 -116.39121557901207 605.4908116907964 + vertex 150.0275345701544 -115.83202726980844 605.0617314097822 + vertex -149.97246542984445 -115.83202726980839 605.061731409782 + endloop +endfacet +facet normal -7.558400656338414e-15 0.9238795325112905 -0.38268343236508096 + outer loop + vertex 150.0275345701543 -117.09002700078892 608.098811421777 + vertex -149.97246542984453 -116.82029586002639 608.7500000000001 + vertex 150.0275345701543 -116.82029586002643 608.7500000000001 + endloop +endfacet +facet normal -7.558400656338414e-15 0.9238795325112905 -0.38268343236508096 + outer loop + vertex -149.97246542984453 -116.82029586002639 608.7500000000001 + vertex 150.0275345701543 -117.09002700078892 608.098811421777 + vertex -149.97246542984442 -117.09002700078888 608.0988114217769 + endloop +endfacet +facet normal -1.7318603070625494e-14 0.9238795325112914 -0.38268343236507907 + outer loop + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex 150.02753457015433 -104.61600186602396 597.9000000000001 + endloop +endfacet +facet normal -1.7318603070625494e-14 0.9238795325112914 -0.38268343236507907 + outer loop + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + vertex -149.97246542984453 -104.5161014435193 598.1411809548975 + endloop +endfacet +facet normal 3.3995076299891674e-14 0.1305261922200452 -0.9914448613738114 + outer loop + vertex -149.97246542984468 -115.18083869158521 610.0079997309805 + vertex 150.0275345701542 -114.48202726980846 610.1000000000001 + vertex 150.02753457015422 -115.18083869158525 610.0079997309806 + endloop +endfacet +facet normal 3.3995076299891674e-14 0.1305261922200452 -0.9914448613738114 + outer loop + vertex 150.0275345701542 -114.48202726980846 610.1000000000001 + vertex -149.97246542984468 -115.18083869158521 610.0079997309805 + vertex -149.97246542984468 -114.48202726980837 610.1 + endloop +endfacet +facet normal 5.200343766171888e-14 -0.6087614290087029 -0.7933533402912488 + outer loop + vertex -149.97246542984473 -113.1320272698084 609.7382685902181 + vertex 150.02753457015416 -112.57283896060477 609.3091883092038 + vertex 150.02753457015413 -113.13202726980845 609.7382685902181 + endloop +endfacet +facet normal 5.200343766171888e-14 -0.6087614290087029 -0.7933533402912488 + outer loop + vertex 150.02753457015416 -112.57283896060477 609.3091883092038 + vertex -149.97246542984473 -113.1320272698084 609.7382685902181 + vertex -149.97246542984473 -112.57283896060473 609.3091883092037 + endloop +endfacet +facet normal -5.63594127277737e-14 0.9238795325112905 0.382683432365081 + outer loop + vertex -149.97246542984445 -116.8202958600264 606.0500000000001 + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex 150.02753457015442 -116.82029586002643 606.0500000000002 + endloop +endfacet +facet normal -5.63594127277737e-14 0.9238795325112905 0.382683432365081 + outer loop + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex -149.97246542984445 -116.8202958600264 606.0500000000001 + vertex -149.97246542984445 -117.0900270007889 606.7011885782233 + endloop +endfacet +facet normal 2.0504249361718883e-14 0.38268343236510205 -0.9238795325112817 + outer loop + vertex -149.9724654298445 -115.83202726980838 609.738268590218 + vertex 150.02753457015422 -115.18083869158525 610.0079997309806 + vertex 150.02753457015422 -115.83202726980844 609.7382685902181 + endloop +endfacet +facet normal 2.0504249361718883e-14 0.38268343236510205 -0.9238795325112817 + outer loop + vertex 150.02753457015422 -115.18083869158525 610.0079997309806 + vertex -149.9724654298445 -115.83202726980838 609.738268590218 + vertex -149.97246542984468 -115.18083869158521 610.0079997309805 + endloop +endfacet +facet normal -3.277505099810579e-14 -0.13052619222004544 0.9914448613738113 + outer loop + vertex 150.02753457015433 -113.78321584803162 604.7920002690196 + vertex -149.97246542984445 -114.48202726980838 604.7 + vertex 150.0275345701544 -114.48202726980843 604.7000000000002 + endloop +endfacet +facet normal -3.277505099810579e-14 -0.13052619222004544 0.9914448613738113 + outer loop + vertex -149.97246542984445 -114.48202726980838 604.7 + vertex 150.02753457015433 -113.78321584803162 604.7920002690196 + vertex -149.9724654298445 -113.78321584803159 604.7920002690196 + endloop +endfacet +facet normal 7.558400656338414e-15 -0.9238795325112905 0.38268343236508096 + outer loop + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + vertex -149.9724654298446 -112.14375867959043 606.0500000000001 + vertex 150.02753457015427 -112.14375867959046 606.0500000000002 + endloop +endfacet +facet normal 7.558400656338414e-15 -0.9238795325112905 0.38268343236508096 + outer loop + vertex -149.9724654298446 -112.14375867959043 606.0500000000001 + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + vertex -149.97246542984465 -111.8740275388279 606.7011885782233 + endloop +endfacet +facet normal 5.02572181418622e-14 -0.3826834323651004 -0.9238795325112824 + outer loop + vertex -149.97246542984473 -113.78321584803159 610.0079997309805 + vertex 150.02753457015413 -113.13202726980845 609.7382685902181 + vertex 150.02753457015416 -113.78321584803162 610.0079997309806 + endloop +endfacet +facet normal 5.02572181418622e-14 -0.3826834323651004 -0.9238795325112824 + outer loop + vertex 150.02753457015413 -113.13202726980845 609.7382685902181 + vertex -149.97246542984473 -113.78321584803159 610.0079997309805 + vertex -149.97246542984473 -113.1320272698084 609.7382685902181 + endloop +endfacet +facet normal -3.732692600867523e-15 0.7933533402912372 -0.6087614290087182 + outer loop + vertex -149.97246542984453 -116.82029586002639 608.7500000000001 + vertex 150.02753457015424 -116.39121557901214 609.3091883092038 + vertex 150.0275345701543 -116.82029586002643 608.7500000000001 + endloop +endfacet +facet normal -3.732692600867523e-15 0.7933533402912372 -0.6087614290087182 + outer loop + vertex 150.02753457015424 -116.39121557901214 609.3091883092038 + vertex -149.97246542984453 -116.82029586002639 608.7500000000001 + vertex -149.97246542984465 -116.3912155790121 609.3091883092037 + endloop +endfacet +facet normal -2.905913769642837e-14 0.9914448613738099 0.1305261922200552 + outer loop + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex -149.9724654298445 -117.18202726980843 607.4 + vertex 150.02753457015436 -117.18202726980846 607.4000000000001 + endloop +endfacet +facet normal -2.905913769642837e-14 0.9914448613738099 0.1305261922200552 + outer loop + vertex -149.9724654298445 -117.18202726980843 607.4 + vertex 150.02753457015436 -117.09002700078892 606.7011885782233 + vertex -149.97246542984445 -117.0900270007889 606.7011885782233 + endloop +endfacet +facet normal 4.6599210313486503e-14 -0.9238795325112859 -0.3826834323650923 + outer loop + vertex -149.97246542984468 -112.14375867959043 608.7500000000001 + vertex 150.02753457015416 -111.87402753882795 608.098811421777 + vertex 150.02753457015416 -112.14375867959048 608.7500000000001 + endloop +endfacet +facet normal 4.6599210313486503e-14 -0.9238795325112859 -0.3826834323650923 + outer loop + vertex 150.02753457015416 -111.87402753882795 608.098811421777 + vertex -149.97246542984468 -112.14375867959043 608.7500000000001 + vertex -149.97246542984473 -111.87402753882795 608.0988114217769 + endloop +endfacet +facet normal -3.155502569632095e-14 -0.1305261922200097 0.9914448613738159 + outer loop + vertex 150.02753457015436 -106.26791679764442 598.0545186779376 + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + vertex 150.0275345701544 -106.68202726980843 598.0000000000001 + endloop +endfacet +facet normal -3.155502569632095e-14 -0.1305261922200097 0.9914448613738159 + outer loop + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + vertex 150.02753457015436 -106.26791679764442 598.0545186779376 + vertex -149.97246542984445 -106.26791679764439 598.0545186779375 + endloop +endfacet +facet normal -1.1474086062760311e-15 -0.7933533402912362 0.6087614290087194 + outer loop + vertex -149.9724654298446 -112.14375867959043 606.0500000000001 + vertex 150.02753457015427 -112.57283896060474 605.4908116907965 + vertex 150.02753457015427 -112.14375867959046 606.0500000000002 + endloop +endfacet +facet normal -1.1474086062760311e-15 -0.7933533402912362 0.6087614290087194 + outer loop + vertex 150.02753457015427 -112.57283896060474 605.4908116907965 + vertex -149.9724654298446 -112.14375867959043 606.0500000000001 + vertex -149.97246542984445 -112.5728389606047 605.4908116907964 + endloop +endfacet +facet normal 6.5577768240034135e-15 0.6087614290087043 -0.7933533402912477 + outer loop + vertex -149.97246542984465 -116.3912155790121 609.3091883092037 + vertex 150.02753457015422 -115.83202726980844 609.7382685902181 + vertex 150.02753457015424 -116.39121557901214 609.3091883092038 + endloop +endfacet +facet normal 6.5577768240034135e-15 0.6087614290087043 -0.7933533402912477 + outer loop + vertex 150.02753457015422 -115.83202726980844 609.7382685902181 + vertex -149.97246542984465 -116.3912155790121 609.3091883092037 + vertex -149.9724654298445 -115.83202726980838 609.738268590218 + endloop +endfacet +facet normal -4.0426467109047067e-14 0.13052619222004386 0.9914448613738115 + outer loop + vertex 150.0275345701544 -114.48202726980843 604.7000000000002 + vertex -149.97246542984445 -115.18083869158521 604.7920002690196 + vertex 150.0275345701544 -115.18083869158524 604.7920002690196 + endloop +endfacet +facet normal -4.0426467109047067e-14 0.13052619222004386 0.9914448613738115 + outer loop + vertex -149.97246542984445 -115.18083869158521 604.7920002690196 + vertex 150.0275345701544 -114.48202726980843 604.7000000000002 + vertex -149.97246542984445 -114.48202726980838 604.7 + endloop +endfacet +facet normal 3.789340105087213e-14 -0.793353340291234 -0.6087614290087222 + outer loop + vertex -149.97246542984473 -112.57283896060473 609.3091883092037 + vertex 150.02753457015416 -112.14375867959048 608.7500000000001 + vertex 150.02753457015416 -112.57283896060477 609.3091883092038 + endloop +endfacet +facet normal 3.789340105087213e-14 -0.793353340291234 -0.6087614290087222 + outer loop + vertex 150.02753457015416 -112.14375867959048 608.7500000000001 + vertex -149.97246542984473 -112.57283896060473 609.3091883092037 + vertex -149.97246542984468 -112.14375867959043 608.7500000000001 + endloop +endfacet +facet normal 3.8819340110715446e-14 -0.9914448613738105 -0.13052619222005105 + outer loop + vertex 150.02753457015416 -111.87402753882795 608.098811421777 + vertex -149.97246542984465 -111.7820272698084 607.4000000000001 + vertex 150.02753457015422 -111.78202726980847 607.4000000000001 + endloop +endfacet +facet normal 3.8819340110715446e-14 -0.9914448613738105 -0.13052619222005105 + outer loop + vertex -149.97246542984465 -111.7820272698084 607.4000000000001 + vertex 150.02753457015416 -111.87402753882795 608.098811421777 + vertex -149.97246542984473 -111.87402753882795 608.0988114217769 + endloop +endfacet +facet normal 4.0426467109047067e-14 -0.13052619222004386 -0.9914448613738115 + outer loop + vertex -149.97246542984468 -114.48202726980837 610.1 + vertex 150.02753457015416 -113.78321584803162 610.0079997309806 + vertex 150.0275345701542 -114.48202726980846 610.1000000000001 + endloop +endfacet +facet normal 4.0426467109047067e-14 -0.13052619222004386 -0.9914448613738115 + outer loop + vertex 150.02753457015416 -113.78321584803162 610.0079997309806 + vertex -149.97246542984468 -114.48202726980837 610.1 + vertex -149.97246542984473 -113.78321584803159 610.0079997309805 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex 150.0275345701544 -105.88202726980843 598.214359353945 + vertex -149.97246542984445 -106.26791679764439 598.0545186779375 + vertex 150.02753457015436 -106.26791679764442 598.0545186779376 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex -149.97246542984445 -106.26791679764439 598.0545186779375 + vertex 150.0275345701544 -105.88202726980843 598.214359353945 + vertex -149.97246542984442 -105.88202726980838 598.2143593539449 + endloop +endfacet +facet normal -4.277350225801568e-14 0.793353340291235 0.6087614290087209 + outer loop + vertex 150.0275345701544 -116.39121557901213 605.4908116907965 + vertex -149.97246542984445 -116.8202958600264 606.0500000000001 + vertex 150.02753457015442 -116.82029586002643 606.0500000000002 + endloop +endfacet +facet normal -4.277350225801568e-14 0.793353340291235 0.6087614290087209 + outer loop + vertex -149.97246542984445 -116.8202958600264 606.0500000000001 + vertex 150.0275345701544 -116.39121557901213 605.4908116907965 + vertex -149.97246542984445 -116.39121557901207 605.4908116907964 + endloop +endfacet +facet normal -1.631797923829057e-14 -0.6087614290087004 0.7933533402912507 + outer loop + vertex 150.02753457015433 -105.55065641990996 598.4686291501016 + vertex -149.97246542984442 -105.88202726980838 598.2143593539449 + vertex 150.0275345701544 -105.88202726980843 598.214359353945 + endloop +endfacet +facet normal -1.631797923829057e-14 -0.6087614290087004 0.7933533402912507 + outer loop + vertex -149.97246542984442 -105.88202726980838 598.2143593539449 + vertex 150.02753457015433 -105.55065641990996 598.4686291501016 + vertex -149.97246542984442 -105.55065641990991 598.4686291501016 + endloop +endfacet +facet normal -4.781716753828934e-14 0.3826834323650628 0.923879532511298 + outer loop + vertex 150.02753457015436 -107.09613774197248 598.0545186779376 + vertex -149.97246542984445 -107.48202726980838 598.2143593539449 + vertex 150.02753457015444 -107.48202726980843 598.214359353945 + endloop +endfacet +facet normal -4.781716753828934e-14 0.3826834323650628 0.923879532511298 + outer loop + vertex -149.97246542984445 -107.48202726980838 598.2143593539449 + vertex 150.02753457015436 -107.09613774197248 598.0545186779376 + vertex -149.97246542984445 -107.09613774197238 598.0545186779375 + endloop +endfacet +facet normal -6.5577768240034135e-15 -0.6087614290087043 0.7933533402912477 + outer loop + vertex 150.02753457015427 -112.57283896060474 605.4908116907965 + vertex -149.9724654298445 -113.1320272698084 605.061731409782 + vertex 150.0275345701543 -113.13202726980845 605.0617314097822 + endloop +endfacet +facet normal -6.5577768240034135e-15 -0.6087614290087043 0.7933533402912477 + outer loop + vertex -149.9724654298445 -113.1320272698084 605.061731409782 + vertex 150.02753457015427 -112.57283896060474 605.4908116907965 + vertex -149.97246542984445 -112.5728389606047 605.4908116907964 + endloop +endfacet +facet normal -2.0504249361718883e-14 -0.38268343236510205 0.9238795325112817 + outer loop + vertex 150.0275345701543 -113.13202726980845 605.0617314097822 + vertex -149.9724654298445 -113.78321584803159 604.7920002690196 + vertex 150.02753457015433 -113.78321584803162 604.7920002690196 + endloop +endfacet +facet normal -2.0504249361718883e-14 -0.38268343236510205 0.9238795325112817 + outer loop + vertex -149.9724654298445 -113.78321584803159 604.7920002690196 + vertex 150.0275345701543 -113.13202726980845 605.0617314097822 + vertex -149.9724654298445 -113.1320272698084 605.061731409782 + endloop +endfacet +facet normal 3.881934011071544e-14 -0.9914448613738105 0.13052619222005132 + outer loop + vertex -149.97246542984465 -111.7820272698084 607.4000000000001 + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + vertex 150.02753457015422 -111.78202726980847 607.4000000000001 + endloop +endfacet +facet normal 3.881934011071544e-14 -0.9914448613738105 0.13052619222005132 + outer loop + vertex 150.02753457015422 -111.87402753882797 606.7011885782233 + vertex -149.97246542984465 -111.7820272698084 607.4000000000001 + vertex -149.97246542984465 -111.8740275388279 606.7011885782233 + endloop +endfacet +facet normal -3.8819340110715427e-14 0.9914448613738099 -0.1305261922200554 + outer loop + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + endloop +endfacet +facet normal -3.8819340110715427e-14 0.9914448613738099 -0.1305261922200554 + outer loop + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex 150.02753457015433 -104.51610144351935 598.1411809548977 + vertex -149.97246542984453 -104.5161014435193 598.1411809548975 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex -149.97246542984453 -105.29638662375329 598.8 + vertex 150.02753457015433 -105.55065641990996 598.4686291501016 + vertex 150.0275345701543 -105.29638662375332 598.8000000000001 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex 150.02753457015433 -105.55065641990996 598.4686291501016 + vertex -149.97246542984453 -105.29638662375329 598.8 + vertex -149.97246542984442 -105.55065641990991 598.4686291501016 + endloop +endfacet +facet normal -4.293706633114689e-14 0.3826834323650997 0.9238795325112827 + outer loop + vertex 150.0275345701544 -115.18083869158524 604.7920002690196 + vertex -149.97246542984445 -115.83202726980839 605.061731409782 + vertex 150.0275345701544 -115.83202726980844 605.0617314097822 + endloop +endfacet +facet normal -4.293706633114689e-14 0.3826834323650997 0.9238795325112827 + outer loop + vertex -149.97246542984445 -115.83202726980839 605.061731409782 + vertex 150.0275345701544 -115.18083869158524 604.7920002690196 + vertex -149.97246542984445 -115.18083869158521 604.7920002690196 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex -149.97246542984453 -107.48202726980838 600.9856406460551 + vertex 150.02753457015427 -107.09613774197246 601.1454813220627 + vertex 150.0275345701543 -107.48202726980843 600.9856406460553 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex 150.02753457015427 -107.09613774197246 601.1454813220627 + vertex -149.97246542984453 -107.48202726980838 600.9856406460551 + vertex -149.97246542984445 -107.09613774197238 601.1454813220626 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.9724654298445 -106.68202726980836 601.2 + vertex 150.02753457015424 -106.26791679764439 601.1454813220627 + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.02753457015424 -106.26791679764439 601.1454813220627 + vertex -149.9724654298445 -106.68202726980836 601.2 + vertex -149.9724654298446 -106.26791679764433 601.1454813220626 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738115 -0.13052619222004383 + outer loop + vertex -149.97246542984465 -105.13654594774587 600.014110472164 + vertex 150.02753457015427 -105.0820272698084 599.6 + vertex 150.0275345701543 -105.1365459477459 600.0141104721641 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738115 -0.13052619222004383 + outer loop + vertex 150.02753457015427 -105.0820272698084 599.6 + vertex -149.97246542984465 -105.13654594774587 600.014110472164 + vertex -149.9724654298446 -105.08202726980838 599.6 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.9724654298445 -108.2820272698084 599.6 + vertex 150.02753457015436 -108.22750859187094 600.0141104721642 + vertex 150.0275345701544 -108.28202726980844 599.6000000000001 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015436 -108.22750859187094 600.0141104721642 + vertex -149.9724654298445 -108.2820272698084 599.6 + vertex -149.97246542984453 -108.2275085918709 600.0141104721641 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex -149.97246542984445 -107.81339811970685 598.4686291501016 + vertex 150.0275345701544 -108.06766791586355 598.8000000000002 + vertex 150.0275345701544 -107.81339811970692 598.4686291501016 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex 150.0275345701544 -108.06766791586355 598.8000000000002 + vertex -149.97246542984445 -107.81339811970685 598.4686291501016 + vertex -149.97246542984436 -108.06766791586351 598.8000000000001 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex -149.97246542984513 -105.13654594774586 615.6141104721642 + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex -149.97246542984513 -105.13654594774586 615.6141104721642 + vertex -149.97246542984504 -105.0820272698084 615.2 + endloop +endfacet +facet normal 6.176364007600701e-14 -0.6087614290087395 -0.7933533402912207 + outer loop + vertex -149.9724654298446 -105.88202726980838 600.9856406460551 + vertex 150.02753457015422 -105.55065641990996 600.7313708498986 + vertex 150.02753457015424 -105.88202726980843 600.9856406460552 + endloop +endfacet +facet normal 6.176364007600701e-14 -0.6087614290087395 -0.7933533402912207 + outer loop + vertex 150.02753457015422 -105.55065641990996 600.7313708498986 + vertex -149.9724654298446 -105.88202726980838 600.9856406460551 + vertex -149.97246542984465 -105.55065641990988 600.7313708498986 + endloop +endfacet +facet normal 3.277505099810686e-14 0.13052619222000883 -0.991444861373816 + outer loop + vertex -149.97246542984445 -107.09613774197238 601.1454813220626 + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + vertex 150.02753457015427 -107.09613774197246 601.1454813220627 + endloop +endfacet +facet normal 3.277505099810686e-14 0.13052619222000883 -0.991444861373816 + outer loop + vertex 150.02753457015424 -106.68202726980843 601.2000000000002 + vertex -149.97246542984445 -107.09613774197238 601.1454813220626 + vertex -149.9724654298445 -106.68202726980836 601.2 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015427 -105.0820272698084 599.6 + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + vertex 150.02753457015433 -105.13654594774593 599.1858895278361 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + vertex 150.02753457015427 -105.0820272698084 599.6 + vertex -149.9724654298446 -105.08202726980838 599.6 + endloop +endfacet +facet normal 2.050424936172055e-14 0.3826834323650453 -0.9238795325113052 + outer loop + vertex -149.97246542984507 -107.4820272698084 616.5856406460551 + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + endloop +endfacet +facet normal 2.050424936172055e-14 0.3826834323650453 -0.9238795325113052 + outer loop + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + vertex -149.97246542984507 -107.4820272698084 616.5856406460551 + vertex -149.97246542984513 -107.09613774197238 616.7454813220626 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex 150.02753457015422 -105.55065641990996 600.7313708498986 + vertex -149.9724654298446 -105.29638662375328 600.4000000000001 + vertex 150.02753457015427 -105.29638662375332 600.4000000000002 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex -149.9724654298446 -105.29638662375328 600.4000000000001 + vertex 150.02753457015422 -105.55065641990996 600.7313708498986 + vertex -149.97246542984465 -105.55065641990988 600.7313708498986 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex -149.97246542984504 -105.29638662375332 616.0 + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex -149.97246542984504 -105.29638662375332 616.0 + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex -149.97246542984513 -105.55065641990988 616.3313708498985 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.97246542984496 -108.28202726980842 615.2 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex -149.97246542984496 -108.28202726980842 615.2 + vertex -149.97246542984504 -108.22750859187089 615.6141104721642 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex -149.9724654298452 -106.26791679764435 616.7454813220626 + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + vertex -149.9724654298452 -106.26791679764435 616.7454813220626 + vertex -149.97246542984513 -105.88202726980838 616.5856406460551 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + vertex -149.97246542984513 -105.13654594774586 615.6141104721642 + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex -149.97246542984513 -105.13654594774586 615.6141104721642 + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + vertex -149.97246542984504 -105.29638662375332 616.0 + endloop +endfacet +facet normal 4.7817167538289264e-14 -0.38268343236506036 -0.923879532511299 + outer loop + vertex -149.9724654298446 -106.26791679764433 601.1454813220626 + vertex 150.02753457015424 -105.88202726980843 600.9856406460552 + vertex 150.02753457015424 -106.26791679764439 601.1454813220627 + endloop +endfacet +facet normal 4.7817167538289264e-14 -0.38268343236506036 -0.923879532511299 + outer loop + vertex 150.02753457015424 -105.88202726980843 600.9856406460552 + vertex -149.9724654298446 -106.26791679764433 601.1454813220626 + vertex -149.9724654298446 -105.88202726980838 600.9856406460551 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex -149.9724654298445 -107.81339811970687 600.7313708498986 + vertex 150.0275345701543 -107.48202726980843 600.9856406460553 + vertex 150.02753457015433 -107.81339811970689 600.7313708498987 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex 150.0275345701543 -107.48202726980843 600.9856406460553 + vertex -149.9724654298445 -107.81339811970687 600.7313708498986 + vertex -149.97246542984453 -107.48202726980838 600.9856406460551 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex -149.97246542984504 -105.0820272698084 615.2 + endloop +endfacet +facet normal 6.557776824003234e-15 0.6087614290087102 -0.7933533402912432 + outer loop + vertex -149.97246542984513 -107.81339811970687 616.3313708498986 + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + endloop +endfacet +facet normal 6.557776824003234e-15 0.6087614290087102 -0.7933533402912432 + outer loop + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + vertex -149.97246542984513 -107.81339811970687 616.3313708498986 + vertex -149.97246542984507 -107.4820272698084 616.5856406460551 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex -149.97246542984504 -108.22750859187089 615.6141104721642 + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + vertex -149.97246542984504 -108.22750859187089 615.6141104721642 + vertex -149.97246542984496 -108.06766791586354 616.0 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.13052619222004347 + outer loop + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + vertex -149.9724654298445 -108.2820272698084 599.6 + vertex 150.0275345701544 -108.28202726980844 599.6000000000001 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.13052619222004347 + outer loop + vertex -149.9724654298445 -108.2820272698084 599.6 + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + vertex -149.9724654298445 -108.22750859187093 599.185889527836 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex -149.97246542984453 -108.2275085918709 600.0141104721641 + vertex 150.02753457015433 -108.06766791586354 600.4000000000002 + vertex 150.02753457015436 -108.22750859187094 600.0141104721642 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex 150.02753457015433 -108.06766791586354 600.4000000000002 + vertex -149.97246542984453 -108.2275085918709 600.0141104721641 + vertex -149.97246542984453 -108.06766791586351 600.4000000000001 + endloop +endfacet +facet normal 5.6359412727773843e-14 -0.9238795325112955 -0.3826834323650685 + outer loop + vertex 150.02753457015427 -105.29638662375332 600.4000000000002 + vertex -149.97246542984465 -105.13654594774587 600.014110472164 + vertex 150.0275345701543 -105.1365459477459 600.0141104721641 + endloop +endfacet +facet normal 5.6359412727773843e-14 -0.9238795325112955 -0.3826834323650685 + outer loop + vertex -149.97246542984465 -105.13654594774587 600.014110472164 + vertex 150.02753457015427 -105.29638662375332 600.4000000000002 + vertex -149.9724654298446 -105.29638662375328 600.4000000000001 + endloop +endfacet +facet normal 3.1555025696319373e-14 0.1305261922200637 -0.9914448613738089 + outer loop + vertex -149.97246542984513 -107.09613774197238 616.7454813220626 + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + endloop +endfacet +facet normal 3.1555025696319373e-14 0.1305261922200637 -0.9914448613738089 + outer loop + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + vertex -149.97246542984513 -107.09613774197238 616.7454813220626 + vertex -149.97246542984513 -106.68202726980836 616.8000000000001 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.97246542984513 -106.68202726980836 616.8000000000001 + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + vertex -149.97246542984513 -106.68202726980836 616.8000000000001 + vertex -149.9724654298452 -106.26791679764435 616.7454813220626 + endloop +endfacet +facet normal -4.6599210313486623e-14 0.9238795325112901 0.3826834323650818 + outer loop + vertex -149.97246542984436 -108.06766791586351 598.8000000000001 + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + vertex 150.0275345701544 -108.06766791586355 598.8000000000002 + endloop +endfacet +facet normal -4.6599210313486623e-14 0.9238795325112901 0.3826834323650818 + outer loop + vertex 150.0275345701544 -108.22750859187094 599.1858895278361 + vertex -149.97246542984436 -108.06766791586351 598.8000000000001 + vertex -149.9724654298445 -108.22750859187093 599.185889527836 + endloop +endfacet +facet normal -5.200343766171987e-14 0.6087614290087363 0.7933533402912233 + outer loop + vertex 150.02753457015444 -107.48202726980843 598.214359353945 + vertex -149.97246542984445 -107.81339811970685 598.4686291501016 + vertex 150.0275345701544 -107.81339811970692 598.4686291501016 + endloop +endfacet +facet normal -5.200343766171987e-14 0.6087614290087363 0.7933533402912233 + outer loop + vertex -149.97246542984445 -107.81339811970685 598.4686291501016 + vertex 150.02753457015444 -107.48202726980843 598.214359353945 + vertex -149.97246542984445 -107.48202726980838 598.2143593539449 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex -149.97246542984513 -105.88202726980838 616.5856406460551 + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex -149.97246542984513 -105.88202726980838 616.5856406460551 + vertex -149.97246542984513 -105.55065641990988 616.3313708498985 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + vertex 150.0275345701543 -105.29638662375332 598.8000000000001 + vertex 150.02753457015433 -105.13654594774593 599.1858895278361 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex 150.0275345701543 -105.29638662375332 598.8000000000001 + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + vertex -149.97246542984453 -105.29638662375329 598.8 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + vertex -149.972465429845 -105.29638662375329 614.4000000000001 + endloop +endfacet +facet normal -3.732692600867556e-15 0.7933533402912383 -0.6087614290087168 + outer loop + vertex -149.97246542984496 -108.06766791586354 616.0 + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + endloop +endfacet +facet normal -3.732692600867556e-15 0.7933533402912383 -0.6087614290087168 + outer loop + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + vertex -149.97246542984496 -108.06766791586354 616.0 + vertex -149.97246542984513 -107.81339811970687 616.3313708498986 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex -149.97246542984453 -108.06766791586351 600.4000000000001 + vertex 150.02753457015433 -107.81339811970689 600.7313708498987 + vertex 150.02753457015433 -108.06766791586354 600.4000000000002 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex 150.02753457015433 -107.81339811970689 600.7313708498987 + vertex -149.97246542984453 -108.06766791586351 600.4000000000001 + vertex -149.9724654298445 -107.81339811970687 600.7313708498986 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015427 -123.88202726980846 615.2000000000002 + vertex -149.9724654298446 -123.82750859187092 615.6141104721642 + vertex 150.02753457015427 -123.82750859187097 615.6141104721642 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.9724654298446 -123.82750859187092 615.6141104721642 + vertex 150.02753457015427 -123.88202726980846 615.2000000000002 + vertex -149.9724654298445 -123.88202726980839 615.2 + endloop +endfacet +facet normal 5.200343766171987e-14 -0.6087614290087363 -0.7933533402912233 + outer loop + vertex -149.97246542984468 -121.48202726980837 616.5856406460551 + vertex 150.02753457015413 -121.15065641990995 616.3313708498987 + vertex 150.02753457015413 -121.48202726980843 616.5856406460553 + endloop +endfacet +facet normal 5.200343766171987e-14 -0.6087614290087363 -0.7933533402912233 + outer loop + vertex 150.02753457015413 -121.15065641990995 616.3313708498987 + vertex -149.97246542984468 -121.48202726980837 616.5856406460551 + vertex -149.97246542984468 -121.15065641990992 616.3313708498986 + endloop +endfacet +facet normal -4.5377116934718926e-14 0.3826834323651088 0.9238795325112789 + outer loop + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + vertex -149.97246542984504 -107.48202726980843 613.814359353945 + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + endloop +endfacet +facet normal -4.5377116934718926e-14 0.3826834323651088 0.9238795325112789 + outer loop + vertex -149.97246542984504 -107.48202726980843 613.814359353945 + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + vertex -149.9724654298449 -107.09613774197244 613.6545186779375 + endloop +endfacet +facet normal -1.6776756168600079e-15 -0.6087614290087001 0.793353340291251 + outer loop + vertex 150.02753457015422 -121.15065641990998 614.0686291501016 + vertex -149.9724654298446 -121.4820272698084 613.814359353945 + vertex 150.02753457015424 -121.48202726980847 613.814359353945 + endloop +endfacet +facet normal -1.6776756168600079e-15 -0.6087614290087001 0.793353340291251 + outer loop + vertex -149.9724654298446 -121.4820272698084 613.814359353945 + vertex 150.02753457015422 -121.15065641990998 614.0686291501016 + vertex -149.9724654298446 -121.15065641990992 614.0686291501015 + endloop +endfacet +facet normal -6.557776824002234e-15 -0.6087614290087442 0.7933533402912171 + outer loop + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex -149.97246542984504 -105.88202726980838 613.814359353945 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + endloop +endfacet +facet normal -6.557776824002234e-15 -0.6087614290087442 0.7933533402912171 + outer loop + vertex -149.97246542984504 -105.88202726980838 613.814359353945 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex -149.97246542984507 -105.55065641990991 614.0686291501015 + endloop +endfacet +facet normal -3.789340105087239e-14 0.7933533402912432 0.6087614290087103 + outer loop + vertex -149.9724654298449 -107.81339811970689 614.0686291501016 + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + endloop +endfacet +facet normal -3.789340105087239e-14 0.7933533402912432 0.6087614290087103 + outer loop + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex -149.9724654298449 -107.81339811970689 614.0686291501016 + vertex -149.972465429845 -108.06766791586351 614.4000000000001 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex -149.97246542984453 -123.08202726980839 616.5856406460551 + vertex 150.02753457015416 -122.69613774197248 616.7454813220627 + vertex 150.0275345701542 -123.08202726980844 616.5856406460553 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex 150.02753457015416 -122.69613774197248 616.7454813220627 + vertex -149.97246542984453 -123.08202726980839 616.5856406460551 + vertex -149.97246542984468 -122.69613774197245 616.7454813220626 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex -149.9724654298445 -123.6676679158635 616.0 + vertex 150.0275345701542 -123.41339811970691 616.3313708498987 + vertex 150.02753457015424 -123.66766791586355 616.0000000000001 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex 150.0275345701542 -123.41339811970691 616.3313708498987 + vertex -149.9724654298445 -123.6676679158635 616.0 + vertex -149.97246542984468 -123.41339811970687 616.3313708498986 + endloop +endfacet +facet normal 4.781716753828934e-14 -0.3826834323650628 -0.923879532511298 + outer loop + vertex -149.9724654298446 -121.86791679764437 616.7454813220626 + vertex 150.02753457015413 -121.48202726980843 616.5856406460553 + vertex 150.0275345701541 -121.86791679764438 616.7454813220626 + endloop +endfacet +facet normal 4.781716753828934e-14 -0.3826834323650628 -0.923879532511298 + outer loop + vertex 150.02753457015413 -121.48202726980843 616.5856406460553 + vertex -149.9724654298446 -121.86791679764437 616.7454813220626 + vertex -149.97246542984468 -121.48202726980837 616.5856406460551 + endloop +endfacet +facet normal -3.277505099810546e-14 -0.13052619222005668 0.9914448613738097 + outer loop + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + vertex -149.97246542984504 -106.68202726980844 613.6 + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + endloop +endfacet +facet normal -3.277505099810546e-14 -0.13052619222005668 0.9914448613738097 + outer loop + vertex -149.97246542984504 -106.68202726980844 613.6 + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + vertex -149.97246542984504 -106.26791679764438 613.6545186779375 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex 150.02753457015413 -121.15065641990995 616.3313708498987 + vertex -149.9724654298446 -120.89638662375332 616.0 + vertex 150.02753457015413 -120.89638662375332 616.0000000000001 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex -149.9724654298446 -120.89638662375332 616.0 + vertex 150.02753457015413 -121.15065641990995 616.3313708498987 + vertex -149.97246542984468 -121.15065641990992 616.3313708498986 + endloop +endfacet +facet normal 4.6599210313486623e-14 -0.9238795325112901 -0.3826834323650818 + outer loop + vertex 150.02753457015413 -120.89638662375332 616.0000000000001 + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex 150.02753457015416 -120.73654594774594 615.6141104721642 + endloop +endfacet +facet normal 4.6599210313486623e-14 -0.9238795325112901 -0.3826834323650818 + outer loop + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex 150.02753457015413 -120.89638662375332 616.0000000000001 + vertex -149.9724654298446 -120.89638662375332 616.0 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738116 -0.13052619222004347 + outer loop + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex 150.0275345701542 -120.68202726980842 615.2000000000002 + vertex 150.02753457015416 -120.73654594774594 615.6141104721642 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738116 -0.13052619222004347 + outer loop + vertex 150.0275345701542 -120.68202726980842 615.2000000000002 + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex -149.9724654298446 -120.6820272698084 615.2 + endloop +endfacet +facet normal 3.7326926008669706e-15 -0.7933533402912183 0.6087614290087429 + outer loop + vertex -149.972465429845 -105.29638662375329 614.4000000000001 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + endloop +endfacet +facet normal 3.7326926008669706e-15 -0.7933533402912183 0.6087614290087429 + outer loop + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex -149.972465429845 -105.29638662375329 614.4000000000001 + vertex -149.97246542984507 -105.55065641990991 614.0686291501015 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738159 0.13052619222001066 + outer loop + vertex -149.97246542984504 -108.22750859187093 614.785889527836 + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738159 0.13052619222001066 + outer loop + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + vertex -149.97246542984504 -108.22750859187093 614.785889527836 + vertex -149.97246542984496 -108.28202726980842 615.2 + endloop +endfacet +facet normal -4.7817167538289264e-14 0.38268343236506036 0.923879532511299 + outer loop + vertex 150.0275345701543 -122.69613774197249 613.6545186779376 + vertex -149.97246542984453 -123.08202726980846 613.814359353945 + vertex 150.0275345701543 -123.08202726980846 613.814359353945 + endloop +endfacet +facet normal -4.7817167538289264e-14 0.38268343236506036 0.923879532511299 + outer loop + vertex -149.97246542984453 -123.08202726980846 613.814359353945 + vertex 150.0275345701543 -122.69613774197249 613.6545186779376 + vertex -149.97246542984453 -122.69613774197245 613.6545186779375 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex -149.97246542984445 -123.41339811970688 614.0686291501016 + vertex 150.0275345701543 -123.66766791586357 614.4000000000001 + vertex 150.0275345701543 -123.41339811970694 614.0686291501017 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex 150.0275345701543 -123.66766791586357 614.4000000000001 + vertex -149.97246542984445 -123.41339811970688 614.0686291501016 + vertex -149.97246542984453 -123.6676679158635 614.4000000000001 + endloop +endfacet +facet normal 4.164649241083345e-14 -0.13052619222006093 -0.9914448613738092 + outer loop + vertex -149.97246542984468 -122.28202726980842 616.8000000000001 + vertex 150.0275345701541 -121.86791679764438 616.7454813220626 + vertex 150.0275345701542 -122.28202726980844 616.8000000000002 + endloop +endfacet +facet normal 4.164649241083345e-14 -0.13052619222006093 -0.9914448613738092 + outer loop + vertex 150.0275345701541 -121.86791679764438 616.7454813220626 + vertex -149.97246542984468 -122.28202726980842 616.8000000000001 + vertex -149.9724654298446 -121.86791679764437 616.7454813220626 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex -149.97246542984465 -120.89638662375329 614.4000000000001 + vertex 150.02753457015422 -121.15065641990998 614.0686291501016 + vertex 150.02753457015422 -120.89638662375336 614.4000000000001 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex 150.02753457015422 -121.15065641990998 614.0686291501016 + vertex -149.97246542984465 -120.89638662375329 614.4000000000001 + vertex -149.9724654298446 -121.15065641990992 614.0686291501015 + endloop +endfacet +facet normal -6.176364007600701e-14 0.6087614290087395 0.7933533402912207 + outer loop + vertex 150.0275345701543 -123.08202726980846 613.814359353945 + vertex -149.97246542984445 -123.41339811970688 614.0686291501016 + vertex 150.0275345701543 -123.41339811970694 614.0686291501017 + endloop +endfacet +facet normal -6.176364007600701e-14 0.6087614290087395 0.7933533402912207 + outer loop + vertex -149.97246542984445 -123.41339811970688 614.0686291501016 + vertex 150.0275345701543 -123.08202726980846 613.814359353945 + vertex -149.97246542984453 -123.08202726980846 613.814359353945 + endloop +endfacet +facet normal -2.294429996529175e-14 -0.38268343236506447 0.9238795325112973 + outer loop + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + vertex -149.97246542984504 -106.26791679764438 613.6545186779375 + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + endloop +endfacet +facet normal -2.294429996529175e-14 -0.38268343236506447 0.9238795325112973 + outer loop + vertex -149.97246542984504 -106.26791679764438 613.6545186779375 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + vertex -149.97246542984504 -105.88202726980838 613.814359353945 + endloop +endfacet +facet normal -5.200343766172004e-14 0.6087614290087426 0.7933533402912182 + outer loop + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + vertex -149.9724654298449 -107.81339811970689 614.0686291501016 + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + endloop +endfacet +facet normal -5.200343766172004e-14 0.6087614290087426 0.7933533402912182 + outer loop + vertex -149.9724654298449 -107.81339811970689 614.0686291501016 + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + vertex -149.97246542984504 -107.48202726980843 613.814359353945 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex -149.9724654298446 -123.82750859187092 615.6141104721642 + vertex 150.02753457015424 -123.66766791586355 616.0000000000001 + vertex 150.02753457015427 -123.82750859187097 615.6141104721642 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex 150.02753457015424 -123.66766791586355 616.0000000000001 + vertex -149.9724654298446 -123.82750859187092 615.6141104721642 + vertex -149.9724654298445 -123.6676679158635 616.0 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.9724654298446 -120.6820272698084 615.2 + vertex 150.0275345701542 -120.73654594774592 614.785889527836 + vertex 150.0275345701542 -120.68202726980842 615.2000000000002 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.0275345701542 -120.73654594774592 614.785889527836 + vertex -149.9724654298446 -120.6820272698084 615.2 + vertex -149.97246542984465 -120.7365459477459 614.785889527836 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex -149.97246542984468 -123.41339811970687 616.3313708498986 + vertex 150.0275345701542 -123.08202726980844 616.5856406460553 + vertex 150.0275345701542 -123.41339811970691 616.3313708498987 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex 150.0275345701542 -123.08202726980844 616.5856406460553 + vertex -149.97246542984468 -123.41339811970687 616.3313708498986 + vertex -149.97246542984453 -123.08202726980839 616.5856406460551 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015427 -122.28202726980847 613.6000000000001 + vertex -149.97246542984453 -122.69613774197245 613.6545186779375 + vertex 150.0275345701543 -122.69613774197249 613.6545186779376 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.97246542984453 -122.69613774197245 613.6545186779375 + vertex 150.02753457015427 -122.28202726980847 613.6000000000001 + vertex -149.97246542984453 -122.28202726980842 613.6 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.130526192220043 + outer loop + vertex -149.97246542984453 -123.8275085918709 614.785889527836 + vertex 150.02753457015427 -123.88202726980846 615.2000000000002 + vertex 150.02753457015427 -123.82750859187097 614.7858895278362 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.130526192220043 + outer loop + vertex 150.02753457015427 -123.88202726980846 615.2000000000002 + vertex -149.97246542984453 -123.8275085918709 614.785889527836 + vertex -149.9724654298445 -123.88202726980839 615.2 + endloop +endfacet +facet normal -4.659921031348627e-14 0.9238795325112781 0.38268343236511065 + outer loop + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex -149.97246542984504 -108.22750859187093 614.785889527836 + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + endloop +endfacet +facet normal -4.659921031348627e-14 0.9238795325112781 0.38268343236511065 + outer loop + vertex -149.97246542984504 -108.22750859187093 614.785889527836 + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex -149.972465429845 -108.06766791586351 614.4000000000001 + endloop +endfacet +facet normal 3.155502569632095e-14 0.1305261922200097 -0.9914448613738159 + outer loop + vertex -149.97246542984468 -122.69613774197245 616.7454813220626 + vertex 150.0275345701542 -122.28202726980844 616.8000000000002 + vertex 150.02753457015416 -122.69613774197248 616.7454813220627 + endloop +endfacet +facet normal 3.155502569632095e-14 0.1305261922200097 -0.9914448613738159 + outer loop + vertex 150.0275345701542 -122.28202726980844 616.8000000000002 + vertex -149.97246542984468 -122.69613774197245 616.7454813220626 + vertex -149.97246542984468 -122.28202726980842 616.8000000000001 + endloop +endfacet +facet normal -5.6359412727773843e-14 0.9238795325112955 0.3826834323650685 + outer loop + vertex -149.97246542984453 -123.6676679158635 614.4000000000001 + vertex 150.02753457015427 -123.82750859187097 614.7858895278362 + vertex 150.0275345701543 -123.66766791586357 614.4000000000001 + endloop +endfacet +facet normal -5.6359412727773843e-14 0.9238795325112955 0.3826834323650685 + outer loop + vertex 150.02753457015427 -123.82750859187097 614.7858895278362 + vertex -149.97246542984453 -123.6676679158635 614.4000000000001 + vertex -149.97246542984453 -123.8275085918709 614.785889527836 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex -149.97246542984465 -120.7365459477459 614.785889527836 + vertex 150.02753457015422 -120.89638662375336 614.4000000000001 + vertex 150.0275345701542 -120.73654594774592 614.785889527836 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex 150.02753457015422 -120.89638662375336 614.4000000000001 + vertex -149.97246542984465 -120.7365459477459 614.785889527836 + vertex -149.97246542984465 -120.89638662375329 614.4000000000001 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + vertex -149.9724654298449 -107.09613774197244 613.6545186779375 + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.9724654298449 -107.09613774197244 613.6545186779375 + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + vertex -149.97246542984504 -106.68202726980844 613.6 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex -149.97246542984414 -120.89638662375329 600.4000000000001 + vertex 150.02753457015473 -120.73654594774594 600.0141104721642 + vertex 150.02753457015473 -120.89638662375336 600.4000000000002 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex 150.02753457015473 -120.73654594774594 600.0141104721642 + vertex -149.97246542984414 -120.89638662375329 600.4000000000001 + vertex -149.97246542984414 -120.73654594774587 600.0141104721641 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex -149.97246542984414 -120.73654594774587 600.0141104721641 + vertex 150.02753457015476 -120.68202726980844 599.6000000000001 + vertex 150.02753457015473 -120.73654594774594 600.0141104721642 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex 150.02753457015476 -120.68202726980844 599.6000000000001 + vertex -149.97246542984414 -120.73654594774587 600.0141104721641 + vertex -149.9724654298441 -120.68202726980837 599.6 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex -149.9724654298441 -120.7365459477459 599.185889527836 + vertex 150.02753457015476 -120.89638662375333 598.8000000000002 + vertex 150.02753457015476 -120.73654594774594 599.1858895278361 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex 150.02753457015476 -120.89638662375333 598.8000000000002 + vertex -149.9724654298441 -120.7365459477459 599.185889527836 + vertex -149.97246542984405 -120.89638662375333 598.8000000000001 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.9724654298441 -120.68202726980837 599.6 + vertex 150.02753457015476 -120.73654594774594 599.1858895278361 + vertex 150.02753457015476 -120.68202726980844 599.6000000000001 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015476 -120.73654594774594 599.1858895278361 + vertex -149.9724654298441 -120.68202726980837 599.6 + vertex -149.9724654298441 -120.7365459477459 599.185889527836 + endloop +endfacet +facet normal -3.277505099810686e-14 -0.13052619222000883 0.991444861373816 + outer loop + vertex 150.02753457015424 -121.86791679764441 613.6545186779376 + vertex -149.97246542984453 -122.28202726980842 613.6 + vertex 150.02753457015427 -122.28202726980847 613.6000000000001 + endloop +endfacet +facet normal -3.277505099810686e-14 -0.13052619222000883 0.991444861373816 + outer loop + vertex -149.97246542984453 -122.28202726980842 613.6 + vertex 150.02753457015424 -121.86791679764441 613.6545186779376 + vertex -149.97246542984465 -121.86791679764438 613.6545186779375 + endloop +endfacet +facet normal -3.1555025696319373e-14 -0.1305261922200637 0.9914448613738089 + outer loop + vertex 150.0275345701548 -121.86791679764445 598.0545186779377 + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + endloop +endfacet +facet normal -3.1555025696319373e-14 -0.1305261922200637 0.9914448613738089 + outer loop + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + vertex 150.0275345701548 -121.86791679764445 598.0545186779377 + vertex -149.972465429844 -121.86791679764438 598.0545186779376 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738158 0.1305261922200104 + outer loop + vertex -149.972465429844 -123.82750859187092 599.185889527836 + vertex 150.0275345701548 -123.88202726980843 599.6000000000001 + vertex 150.02753457015487 -123.82750859187097 599.1858895278361 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738158 0.1305261922200104 + outer loop + vertex 150.0275345701548 -123.88202726980843 599.6000000000001 + vertex -149.972465429844 -123.82750859187092 599.185889527836 + vertex -149.9724654298439 -123.88202726980842 599.6 + endloop +endfacet +facet normal 1.1474086062765636e-15 0.793353340291218 -0.6087614290087431 + outer loop + vertex -149.97246542984396 -123.66766791586353 600.4000000000001 + vertex 150.02753457015476 -123.41339811970691 600.7313708498987 + vertex 150.0275345701548 -123.66766791586355 600.4000000000002 + endloop +endfacet +facet normal 1.1474086062765636e-15 0.793353340291218 -0.6087614290087431 + outer loop + vertex 150.02753457015476 -123.41339811970691 600.7313708498987 + vertex -149.97246542984396 -123.66766791586353 600.4000000000001 + vertex -149.97246542984405 -123.41339811970687 600.7313708498986 + endloop +endfacet +facet normal -2.050424936172055e-14 -0.3826834323650453 0.9238795325113052 + outer loop + vertex 150.0275345701548 -121.48202726980844 598.214359353945 + vertex -149.972465429844 -121.86791679764438 598.0545186779376 + vertex 150.0275345701548 -121.86791679764445 598.0545186779377 + endloop +endfacet +facet normal -2.050424936172055e-14 -0.3826834323650453 0.9238795325113052 + outer loop + vertex -149.972465429844 -121.86791679764438 598.0545186779376 + vertex 150.0275345701548 -121.48202726980844 598.214359353945 + vertex -149.97246542984405 -121.4820272698084 598.2143593539449 + endloop +endfacet +facet normal 6.557776824002234e-15 0.6087614290087442 -0.7933533402912171 + outer loop + vertex -149.97246542984405 -123.41339811970687 600.7313708498986 + vertex 150.02753457015476 -123.08202726980844 600.9856406460553 + vertex 150.02753457015476 -123.41339811970691 600.7313708498987 + endloop +endfacet +facet normal 6.557776824002234e-15 0.6087614290087442 -0.7933533402912171 + outer loop + vertex 150.02753457015476 -123.08202726980844 600.9856406460553 + vertex -149.97246542984405 -123.41339811970687 600.7313708498986 + vertex -149.97246542984414 -123.08202726980842 600.9856406460552 + endloop +endfacet +facet normal -5.2003437661719044e-14 0.6087614290087087 0.7933533402912443 + outer loop + vertex 150.02753457015487 -123.08202726980849 598.214359353945 + vertex -149.9724654298439 -123.41339811970688 598.4686291501016 + vertex 150.02753457015487 -123.41339811970694 598.4686291501016 + endloop +endfacet +facet normal -5.2003437661719044e-14 0.6087614290087087 0.7933533402912443 + outer loop + vertex -149.9724654298439 -123.41339811970688 598.4686291501016 + vertex 150.02753457015487 -123.08202726980849 598.214359353945 + vertex -149.97246542984405 -123.08202726980842 598.2143593539449 + endloop +endfacet +facet normal 3.277505099810546e-14 0.13052619222005668 -0.9914448613738097 + outer loop + vertex -149.972465429844 -122.69613774197245 601.1454813220626 + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + vertex 150.0275345701547 -122.69613774197248 601.1454813220627 + endloop +endfacet +facet normal 3.277505099810546e-14 0.13052619222005668 -0.9914448613738097 + outer loop + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + vertex -149.972465429844 -122.69613774197245 601.1454813220626 + vertex -149.972465429844 -122.28202726980837 601.2 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex -149.9724654298442 -121.4820272698084 600.9856406460552 + vertex 150.0275345701547 -121.15065641990995 600.7313708498986 + vertex 150.02753457015467 -121.48202726980844 600.9856406460553 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex 150.0275345701547 -121.15065641990995 600.7313708498986 + vertex -149.9724654298442 -121.4820272698084 600.9856406460552 + vertex -149.97246542984414 -121.15065641990992 600.7313708498986 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex 150.0275345701547 -121.15065641990995 600.7313708498986 + vertex -149.97246542984414 -120.89638662375329 600.4000000000001 + vertex 150.02753457015473 -120.89638662375336 600.4000000000002 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex -149.97246542984414 -120.89638662375329 600.4000000000001 + vertex 150.0275345701547 -121.15065641990995 600.7313708498986 + vertex -149.97246542984414 -121.15065641990992 600.7313708498986 + endloop +endfacet +facet normal -5.253370467230355e-14 0.7933533402912631 0.6087614290086841 + outer loop + vertex -149.9724654298439 -123.41339811970688 598.4686291501016 + vertex 150.02753457015484 -123.66766791586357 598.8000000000002 + vertex 150.02753457015487 -123.41339811970694 598.4686291501016 + endloop +endfacet +facet normal -5.253370467230355e-14 0.7933533402912631 0.6087614290086841 + outer loop + vertex 150.02753457015484 -123.66766791586357 598.8000000000002 + vertex -149.9724654298439 -123.41339811970688 598.4686291501016 + vertex -149.9724654298439 -123.66766791586353 598.8000000000001 + endloop +endfacet +facet normal -4.537711693471893e-14 0.38268343236510904 0.9238795325112787 + outer loop + vertex 150.02753457015484 -122.69613774197249 598.0545186779377 + vertex -149.97246542984405 -123.08202726980842 598.2143593539449 + vertex 150.02753457015487 -123.08202726980849 598.214359353945 + endloop +endfacet +facet normal -4.537711693471893e-14 0.38268343236510904 0.9238795325112787 + outer loop + vertex -149.97246542984405 -123.08202726980842 598.2143593539449 + vertex 150.02753457015484 -122.69613774197249 598.0545186779377 + vertex -149.972465429844 -122.69613774197245 598.0545186779376 + endloop +endfacet +facet normal -1.677675616859735e-15 -0.6087614290087094 0.7933533402912438 + outer loop + vertex 150.02753457015476 -121.15065641990998 598.4686291501016 + vertex -149.97246542984405 -121.4820272698084 598.2143593539449 + vertex 150.0275345701548 -121.48202726980844 598.214359353945 + endloop +endfacet +facet normal -1.677675616859735e-15 -0.6087614290087094 0.7933533402912438 + outer loop + vertex -149.97246542984405 -121.4820272698084 598.2143593539449 + vertex 150.02753457015476 -121.15065641990998 598.4686291501016 + vertex -149.97246542984405 -121.15065641990992 598.4686291501016 + endloop +endfacet +facet normal -4.659921031348628e-14 0.9238795325112782 0.38268343236511054 + outer loop + vertex 150.02753457015484 -123.66766791586357 598.8000000000002 + vertex -149.972465429844 -123.82750859187092 599.185889527836 + vertex 150.02753457015487 -123.82750859187097 599.1858895278361 + endloop +endfacet +facet normal -4.659921031348628e-14 0.9238795325112782 0.38268343236511054 + outer loop + vertex -149.972465429844 -123.82750859187092 599.185889527836 + vertex 150.02753457015484 -123.66766791586357 598.8000000000002 + vertex -149.9724654298439 -123.66766791586353 598.8000000000001 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex 150.0275345701548 -123.82750859187097 600.0141104721642 + vertex -149.97246542984396 -123.66766791586353 600.4000000000001 + vertex 150.0275345701548 -123.66766791586355 600.4000000000002 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex -149.97246542984396 -123.66766791586353 600.4000000000001 + vertex 150.0275345701548 -123.82750859187097 600.0141104721642 + vertex -149.9724654298441 -123.82750859187092 600.0141104721641 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex 150.02753457015424 -121.48202726980847 613.814359353945 + vertex -149.97246542984465 -121.86791679764438 613.6545186779375 + vertex 150.02753457015424 -121.86791679764441 613.6545186779376 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex -149.97246542984465 -121.86791679764438 613.6545186779375 + vertex 150.02753457015424 -121.48202726980847 613.814359353945 + vertex -149.9724654298446 -121.4820272698084 613.814359353945 + endloop +endfacet +facet normal 3.732692600867556e-15 -0.7933533402912383 0.6087614290087168 + outer loop + vertex -149.97246542984405 -120.89638662375333 598.8000000000001 + vertex 150.02753457015476 -121.15065641990998 598.4686291501016 + vertex 150.02753457015476 -120.89638662375333 598.8000000000002 + endloop +endfacet +facet normal 3.732692600867556e-15 -0.7933533402912383 0.6087614290087168 + outer loop + vertex 150.02753457015476 -121.15065641990998 598.4686291501016 + vertex -149.97246542984405 -120.89638662375333 598.8000000000001 + vertex -149.97246542984405 -121.15065641990992 598.4686291501016 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + vertex -149.972465429844 -122.69613774197245 598.0545186779376 + vertex 150.02753457015484 -122.69613774197249 598.0545186779377 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.972465429844 -122.69613774197245 598.0545186779376 + vertex 150.02753457015484 -122.28202726980847 598.0000000000001 + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + endloop +endfacet +facet normal 2.294429996529175e-14 0.38268343236506447 -0.9238795325112973 + outer loop + vertex -149.97246542984414 -123.08202726980842 600.9856406460552 + vertex 150.0275345701547 -122.69613774197248 601.1454813220627 + vertex 150.02753457015476 -123.08202726980844 600.9856406460553 + endloop +endfacet +facet normal 2.294429996529175e-14 0.38268343236506447 -0.9238795325112973 + outer loop + vertex 150.0275345701547 -122.69613774197248 601.1454813220627 + vertex -149.97246542984414 -123.08202726980842 600.9856406460552 + vertex -149.972465429844 -122.69613774197245 601.1454813220626 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex -149.9724654298442 -121.86791679764437 601.1454813220626 + vertex 150.02753457015467 -121.48202726980844 600.9856406460553 + vertex 150.0275345701547 -121.86791679764438 601.1454813220627 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex 150.02753457015467 -121.48202726980844 600.9856406460553 + vertex -149.9724654298442 -121.86791679764437 601.1454813220626 + vertex -149.9724654298442 -121.4820272698084 600.9856406460552 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006204 + outer loop + vertex 150.0275345701548 -123.88202726980843 599.6000000000001 + vertex -149.9724654298441 -123.82750859187092 600.0141104721641 + vertex 150.0275345701548 -123.82750859187097 600.0141104721642 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006204 + outer loop + vertex -149.9724654298441 -123.82750859187092 600.0141104721641 + vertex 150.0275345701548 -123.88202726980843 599.6000000000001 + vertex -149.9724654298439 -123.88202726980842 599.6 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.972465429844 -122.28202726980837 601.2 + vertex 150.0275345701547 -121.86791679764438 601.1454813220627 + vertex 150.02753457015467 -122.28202726980842 601.2000000000002 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.0275345701547 -121.86791679764438 601.1454813220627 + vertex -149.972465429844 -122.28202726980837 601.2 + vertex -149.9724654298442 -121.86791679764437 601.1454813220626 + endloop +endfacet +facet normal 3.8819340110715427e-14 -0.9914448613738099 0.1305261922200554 + outer loop + vertex -149.9724654298446 -124.44795309609745 616.6588190451026 + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex 150.02753457015424 -124.44795309609752 616.6588190451026 + endloop +endfacet +facet normal 3.8819340110715427e-14 -0.9914448613738099 0.1305261922200554 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex -149.9724654298446 -124.44795309609745 616.6588190451026 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 1.5003536199769242e-15 + outer loop + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex -149.97246542984445 -124.48202726980841 611.2 + vertex 150.02753457015444 -124.48202726980846 611.2000000000002 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 1.5003536199769242e-15 + outer loop + vertex -149.97246542984445 -124.48202726980841 611.2 + vertex 150.02753457015424 -124.48202726980848 616.4000000000001 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -4.4649600931051686e-15 + outer loop + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex 150.02753457015444 -124.08202726980846 610.8000000000002 + vertex 150.02753457015444 -124.08202726980846 611.2000000000002 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -4.4649600931051686e-15 + outer loop + vertex 150.02753457015444 -124.08202726980846 610.8000000000002 + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.9724654298443 -124.08202726980844 610.8000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex 150.02753457015422 -120.64771269475773 613.0000000000002 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015422 -120.64771269475773 613.0000000000002 + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + endloop +endfacet +facet normal 2.7078805484912562e-14 -0.9238795325112917 0.3826834323650779 + outer loop + vertex -149.97246542984465 -124.34805267359285 616.9 + vertex 150.02753457015424 -124.44795309609752 616.6588190451026 + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + endloop +endfacet +facet normal 2.7078805484912562e-14 -0.9238795325112917 0.3826834323650779 + outer loop + vertex 150.02753457015424 -124.44795309609752 616.6588190451026 + vertex -149.97246542984465 -124.34805267359285 616.9 + vertex -149.9724654298446 -124.44795309609745 616.6588190451026 + endloop +endfacet +facet normal 4.024562528319985e-14 -0.7071067811865452 -0.7071067811865499 + outer loop + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex 150.02753457015422 -120.64771269475773 613.0000000000002 + endloop +endfacet +facet normal 4.024562528319985e-14 -0.7071067811865452 -0.7071067811865499 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + endloop +endfacet +facet normal 3.592621386430645e-14 1.705409617590812e-14 -1.0 + outer loop + vertex -149.9724654298443 -124.08202726980844 610.8000000000001 + vertex 150.02753457015442 -122.68202726980844 610.8000000000002 + vertex 150.02753457015444 -124.08202726980846 610.8000000000002 + endloop +endfacet +facet normal 3.592621386430645e-14 1.705409617590812e-14 -1.0 + outer loop + vertex 150.02753457015442 -122.68202726980844 610.8000000000002 + vertex -149.9724654298443 -124.08202726980844 610.8000000000001 + vertex -149.97246542984445 -122.6820272698084 610.8000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984445 -124.48202726980841 611.2 + vertex 150.02753457015444 -124.08202726980846 611.2000000000002 + vertex 150.02753457015444 -124.48202726980846 611.2000000000002 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015444 -124.08202726980846 611.2000000000002 + vertex -149.97246542984445 -124.48202726980841 611.2 + vertex -149.97246542984442 -124.08202726980842 611.2 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015442 -122.68202726980844 610.8000000000002 + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex 150.02753457015433 -122.68202726980844 613.0000000000002 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex 150.02753457015442 -122.68202726980844 610.8000000000002 + vertex -149.97246542984445 -122.6820272698084 610.8000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -1.052465433482836e-15 + outer loop + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex 150.02753457015453 -118.18202726980843 604.2656854249494 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -1.052465433482836e-15 + outer loop + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex 150.02753457015427 -118.18202726980844 610.5343145750509 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex 150.02753457015433 -104.48202726980843 598.4000000000002 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex -149.97246542984473 -104.48202726980838 603.6 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex -149.97246542984476 -104.8820272698084 603.6 + vertex 150.02753457015413 -104.88202726980845 603.6000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984476 -104.8820272698084 603.6 + vertex 150.02753457015413 -104.48202726980843 603.6000000000001 + vertex -149.97246542984473 -104.48202726980838 603.6 + endloop +endfacet +facet normal -3.907009026439115e-14 1.0 2.739417086921043e-15 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + endloop +endfacet +facet normal -3.907009026439115e-14 1.0 2.739417086921043e-15 + outer loop + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.0275345701541 -104.88202726980843 604.0000000000001 + vertex -149.97246542984468 -106.28202726980838 604.0000000000001 + vertex 150.02753457015413 -106.28202726980845 604.0000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984468 -106.28202726980838 604.0000000000001 + vertex 150.0275345701541 -104.88202726980843 604.0000000000001 + vertex -149.97246542984473 -104.8820272698084 604.0000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984496 -108.31634184485917 613.0 + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + vertex -149.97246542984496 -108.31634184485917 613.0 + vertex -149.972465429845 -106.28202726980841 613.0 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.972465429845 -106.28202726980841 613.0 + vertex 150.0275345701539 -106.28202726980842 610.8000000000002 + vertex 150.02753457015382 -106.28202726980847 613.0000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.0275345701539 -106.28202726980842 610.8000000000002 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.9724654298449 -106.28202726980838 610.8000000000001 + endloop +endfacet +facet normal 3.592621386430645e-14 1.7054096175908306e-14 -1.0 + outer loop + vertex -149.9724654298449 -106.28202726980838 610.8000000000001 + vertex 150.0275345701539 -104.88202726980843 610.8000000000002 + vertex 150.0275345701539 -106.28202726980842 610.8000000000002 + endloop +endfacet +facet normal 3.592621386430645e-14 1.7054096175908306e-14 -1.0 + outer loop + vertex 150.0275345701539 -104.88202726980843 610.8000000000002 + vertex -149.9724654298449 -106.28202726980838 610.8000000000001 + vertex -149.97246542984496 -104.88202726980839 610.8000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + vertex -149.9724654298446 -108.31634184485914 601.8000000000001 + vertex 150.0275345701543 -108.31634184485917 601.8000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.9724654298446 -108.31634184485914 601.8000000000001 + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + endloop +endfacet +facet normal -4.024562528319985e-14 0.7071067811865452 0.7071067811865499 + outer loop + vertex 150.0275345701543 -108.31634184485917 601.8000000000001 + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex 150.0275345701543 -110.78202726980844 604.2656854249494 + endloop +endfacet +facet normal -4.024562528319985e-14 0.7071067811865452 0.7071067811865499 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex 150.0275345701543 -108.31634184485917 601.8000000000001 + vertex -149.9724654298446 -108.31634184485914 601.8000000000001 + endloop +endfacet +facet normal -1.2048156260518093e-15 0.7071067811865513 -0.7071067811865437 + outer loop + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex -149.97246542984496 -108.31634184485917 613.0 + vertex 150.0275345701539 -108.31634184485921 613.0000000000001 + endloop +endfacet +facet normal -1.2048156260518093e-15 0.7071067811865513 -0.7071067811865437 + outer loop + vertex -149.97246542984496 -108.31634184485917 613.0 + vertex 150.02753457015405 -110.78202726980844 610.5343145750509 + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.0275345701539 -104.88202726980843 610.8000000000002 + vertex -149.972465429845 -104.88202726980839 611.2 + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.972465429845 -104.88202726980839 611.2 + vertex 150.0275345701539 -104.88202726980843 610.8000000000002 + vertex -149.97246542984496 -104.88202726980839 610.8000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.972465429845 -104.88202726980839 611.2 + vertex 150.02753457015385 -104.48202726980846 611.2000000000002 + vertex 150.0275345701539 -104.88202726980843 611.2000000000002 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015385 -104.48202726980846 611.2000000000002 + vertex -149.972465429845 -104.88202726980839 611.2 + vertex -149.97246542984504 -104.48202726980843 611.2 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984476 -104.8820272698084 603.6 + vertex 150.0275345701541 -104.88202726980843 604.0000000000001 + vertex 150.02753457015413 -104.88202726980845 603.6000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.0275345701541 -104.88202726980843 604.0000000000001 + vertex -149.97246542984476 -104.8820272698084 603.6 + vertex -149.97246542984473 -104.8820272698084 604.0000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015413 -106.28202726980845 604.0000000000001 + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + vertex 150.02753457015424 -106.28202726980842 601.8000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + vertex 150.02753457015413 -106.28202726980845 604.0000000000001 + vertex -149.97246542984468 -106.28202726980838 604.0000000000001 + endloop +endfacet +facet normal -3.789340105087216e-14 0.7933533402912354 0.6087614290087203 + outer loop + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + endloop +endfacet +facet normal -3.789340105087216e-14 0.7933533402912354 0.6087614290087203 + outer loop + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex -149.97246542984507 -104.77492048862186 617.1071067811866 + endloop +endfacet +facet normal -4.7817167538289876e-14 0.3826834323650812 0.9238795325112903 + outer loop + vertex 150.02753457015365 -104.98202726980846 617.2660254037846 + vertex -149.9724654298452 -105.2232082247059 617.3659258262891 + vertex 150.02753457015365 -105.22320822470594 617.3659258262892 + endloop +endfacet +facet normal -4.7817167538289876e-14 0.3826834323650812 0.9238795325112903 + outer loop + vertex -149.9724654298452 -105.2232082247059 617.3659258262891 + vertex 150.02753457015365 -104.98202726980846 617.2660254037846 + vertex -149.97246542984522 -104.98202726980843 617.2660254037845 + endloop +endfacet +facet normal -4.1646492410833785e-14 0.13052619222007247 0.9914448613738078 + outer loop + vertex 150.02753457015365 -105.22320822470594 617.3659258262892 + vertex -149.9724654298452 -105.48202726980843 617.4000000000001 + vertex 150.02753457015362 -105.48202726980846 617.4000000000002 + endloop +endfacet +facet normal -4.1646492410833785e-14 0.13052619222007247 0.9914448613738078 + outer loop + vertex -149.9724654298452 -105.48202726980843 617.4000000000001 + vertex 150.02753457015365 -105.22320822470594 617.3659258262892 + vertex -149.9724654298452 -105.2232082247059 617.3659258262891 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015362 -105.48202726980846 617.4000000000002 + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex 150.0275345701538 -110.68202726980844 617.4000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex 150.02753457015362 -105.48202726980846 617.4000000000002 + vertex -149.9724654298452 -105.48202726980843 617.4000000000001 + endloop +endfacet +facet normal -5.200343766171889e-14 0.6087614290087036 0.7933533402912483 + outer loop + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + vertex -149.97246542984522 -104.98202726980843 617.2660254037845 + vertex 150.02753457015365 -104.98202726980846 617.2660254037846 + endloop +endfacet +facet normal -5.200343766171889e-14 0.6087614290087036 0.7933533402912483 + outer loop + vertex -149.97246542984522 -104.98202726980843 617.2660254037845 + vertex 150.0275345701536 -104.7749204886219 617.1071067811868 + vertex -149.97246542984507 -104.77492048862186 617.1071067811866 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015385 -104.48202726980846 611.2000000000002 + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex 150.02753457015385 -104.48202726980846 611.2000000000002 + vertex -149.97246542984504 -104.48202726980843 611.2 + endloop +endfacet +facet normal -3.6839007899199586e-14 0.9238795325112905 0.3826834323650808 + outer loop + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex 150.02753457015365 -104.61600186602402 616.9000000000001 + endloop +endfacet +facet normal -3.6839007899199586e-14 0.9238795325112905 0.3826834323650808 + outer loop + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + vertex -149.97246542984507 -104.5161014435193 616.6588190451026 + endloop +endfacet +facet normal -3.881934011071542e-14 0.9914448613738096 0.1305261922200573 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + vertex 150.02753457015368 -104.48202726980846 616.4000000000001 + endloop +endfacet +facet normal -3.881934011071542e-14 0.9914448613738096 0.1305261922200573 + outer loop + vertex 150.02753457015362 -104.51610144351939 616.6588190451026 + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984507 -104.5161014435193 616.6588190451026 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + vertex -149.97246542984504 -110.6820272698084 617.0000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex -149.97246542984504 -108.88202726980838 615.6 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + vertex 150.0275345701538 -110.68202726980844 617.4000000000002 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015382 -110.68202726980846 617.0000000000002 + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex -149.97246542984504 -110.6820272698084 617.0000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984496 -111.08202726980839 615.6 + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex 150.0275345701539 -111.08202726980842 615.6000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701538 -108.88202726980845 615.6000000000001 + vertex -149.97246542984496 -111.08202726980839 615.6 + vertex -149.97246542984504 -108.88202726980838 615.6 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + vertex -149.9724654298446 -117.61634184485911 611.1 + vertex 150.02753457015422 -117.61634184485916 611.1000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.9724654298446 -117.61634184485911 611.1 + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + vertex -149.97246542984482 -111.34771269475765 611.1 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -8.997049082914168e-15 + outer loop + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex -149.97246542984496 -111.08202726980839 615.6 + vertex 150.0275345701539 -111.08202726980842 615.6000000000001 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -8.997049082914168e-15 + outer loop + vertex -149.97246542984496 -111.08202726980839 615.6 + vertex 150.0275345701538 -111.08202726980844 617.0000000000002 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + endloop +endfacet +facet normal 1.2048156260517146e-15 -0.7071067811865481 0.707106781186547 + outer loop + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex -149.97246542984482 -111.34771269475765 611.1 + vertex 150.02753457015402 -111.34771269475767 611.1000000000001 + endloop +endfacet +facet normal 1.2048156260517146e-15 -0.7071067811865481 0.707106781186547 + outer loop + vertex -149.97246542984482 -111.34771269475765 611.1 + vertex 150.0275345701539 -108.88202726980845 613.5656854249494 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + endloop +endfacet +facet normal -5.0005827697486894e-14 0.707106781186545 0.70710678118655 + outer loop + vertex 150.02753457015422 -117.61634184485916 611.1000000000001 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + endloop +endfacet +facet normal -5.0005827697486894e-14 0.707106781186545 0.70710678118655 + outer loop + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex 150.02753457015422 -117.61634184485916 611.1000000000001 + vertex -149.9724654298446 -117.61634184485911 611.1 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex 150.0275345701541 -117.88202726980845 615.6000000000001 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701541 -117.88202726980845 615.6000000000001 + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex -149.97246542984482 -117.8820272698084 615.6 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 2.611827415552657e-14 + outer loop + vertex -149.97246542984482 -117.8820272698084 615.6 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex 150.0275345701541 -117.88202726980845 615.6000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 2.611827415552657e-14 + outer loop + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex -149.97246542984482 -117.8820272698084 615.6 + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex 150.02753457015416 -120.08202726980845 615.6000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex 150.02753457015422 -120.08202726980842 613.5656854249494 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + vertex 150.02753457015402 -118.28202726980847 617.0000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + vertex 150.02753457015402 -117.88202726980849 617.0000000000002 + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.4649600931051686e-15 + outer loop + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex 150.02753457015402 -118.28202726980847 617.0000000000002 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.4649600931051686e-15 + outer loop + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + vertex -149.97246542984482 -118.28202726980842 617.4000000000001 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex -149.97246542984473 -123.48202726980844 617.4 + vertex 150.0275345701542 -123.48202726980846 617.4000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984473 -123.48202726980844 617.4 + vertex 150.027534570154 -118.2820272698085 617.4000000000002 + vertex -149.97246542984482 -118.28202726980842 617.4000000000001 + endloop +endfacet +facet normal -3.3995076299890834e-14 -0.13052619222007386 0.9914448613738075 + outer loop + vertex 150.0275345701542 -123.48202726980846 617.4000000000002 + vertex -149.97246542984468 -123.74084631491095 617.3659258262891 + vertex 150.02753457015422 -123.74084631491097 617.3659258262892 + endloop +endfacet +facet normal -3.3995076299890834e-14 -0.13052619222007386 0.9914448613738075 + outer loop + vertex -149.97246542984468 -123.74084631491095 617.3659258262891 + vertex 150.0275345701542 -123.48202726980846 617.4000000000002 + vertex -149.97246542984473 -123.48202726980844 617.4 + endloop +endfacet +facet normal -2.2944299965291228e-14 -0.3826834323650826 0.9238795325112898 + outer loop + vertex 150.02753457015422 -123.74084631491097 617.3659258262892 + vertex -149.97246542984453 -123.98202726980841 617.2660254037845 + vertex 150.02753457015422 -123.98202726980844 617.2660254037846 + endloop +endfacet +facet normal -2.2944299965291228e-14 -0.3826834323650826 0.9238795325112898 + outer loop + vertex -149.97246542984453 -123.98202726980841 617.2660254037845 + vertex 150.02753457015422 -123.74084631491097 617.3659258262892 + vertex -149.97246542984468 -123.74084631491095 617.3659258262891 + endloop +endfacet +facet normal -1.1437878031146923e-14 -0.6087614290087044 0.7933533402912476 + outer loop + vertex 150.02753457015422 -123.98202726980844 617.2660254037846 + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex 150.02753457015422 -124.189134050995 617.1071067811868 + endloop +endfacet +facet normal -1.1437878031146923e-14 -0.6087614290087044 0.7933533402912476 + outer loop + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex 150.02753457015422 -123.98202726980844 617.2660254037846 + vertex -149.97246542984453 -123.98202726980841 617.2660254037845 + endloop +endfacet +facet normal -1.1474086062759331e-15 -0.7933533402912396 0.6087614290087152 + outer loop + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + vertex 150.02753457015422 -124.189134050995 617.1071067811868 + endloop +endfacet +facet normal -1.1474086062759331e-15 -0.7933533402912396 0.6087614290087152 + outer loop + vertex 150.02753457015422 -124.34805267359289 616.9000000000001 + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex -149.97246542984465 -124.34805267359285 616.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.97246542984445 -124.48202726980841 611.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.97246542984453 -123.8275085918709 614.785889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.97246542984453 -123.8275085918709 614.785889527836 + vertex -149.97246542984453 -123.6676679158635 614.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.97246542984453 -123.6676679158635 614.4000000000001 + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex -149.97246542984453 -123.6676679158635 614.4000000000001 + vertex -149.97246542984445 -123.41339811970688 614.0686291501016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex -149.97246542984445 -123.41339811970688 614.0686291501016 + vertex -149.97246542984453 -123.08202726980846 613.814359353945 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex -149.97246542984453 -123.08202726980846 613.814359353945 + vertex -149.97246542984453 -122.69613774197245 613.6545186779375 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + vertex -149.97246542984453 -122.69613774197245 613.6545186779375 + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + vertex -149.97246542984453 -122.69613774197245 613.6545186779375 + vertex -149.97246542984453 -122.28202726980842 613.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + vertex -149.97246542984453 -122.28202726980842 613.6 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -123.8275085918709 614.785889527836 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.9724654298445 -123.88202726980839 615.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -123.88202726980839 615.2 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.9724654298446 -123.82750859187092 615.6141104721642 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -123.82750859187092 615.6141104721642 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.9724654298445 -123.6676679158635 616.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -123.6676679158635 616.0 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.97246542984468 -123.41339811970687 616.3313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -123.41339811970687 616.3313708498986 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.97246542984453 -123.08202726980839 616.5856406460551 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -123.08202726980839 616.5856406460551 + vertex -149.9724654298446 -124.4820272698084 616.4000000000001 + vertex -149.9724654298446 -124.44795309609745 616.6588190451026 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -123.08202726980839 616.5856406460551 + vertex -149.9724654298446 -124.44795309609745 616.6588190451026 + vertex -149.97246542984468 -122.69613774197245 616.7454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -122.69613774197245 616.7454813220626 + vertex -149.9724654298446 -124.44795309609745 616.6588190451026 + vertex -149.97246542984465 -124.34805267359285 616.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -122.69613774197245 616.7454813220626 + vertex -149.97246542984465 -124.34805267359285 616.9 + vertex -149.97246542984468 -122.28202726980842 616.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + vertex -149.97246542984465 -124.34805267359285 616.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex -149.97246542984482 -118.28202726980842 617.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -118.28202726980842 617.4000000000001 + vertex -149.97246542984468 -124.18913405099497 617.1071067811866 + vertex -149.97246542984453 -123.98202726980841 617.2660254037845 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -118.28202726980842 617.4000000000001 + vertex -149.97246542984453 -123.98202726980841 617.2660254037845 + vertex -149.97246542984468 -123.74084631491095 617.3659258262891 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -118.28202726980842 617.4000000000001 + vertex -149.97246542984468 -123.74084631491095 617.3659258262891 + vertex -149.97246542984473 -123.48202726980844 617.4 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex -149.97246542984465 -120.89638662375329 614.4000000000001 + vertex -149.97246542984468 -120.0820272698084 615.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -120.89638662375329 614.4000000000001 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex -149.9724654298446 -121.15065641990992 614.0686291501015 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -121.15065641990992 614.0686291501015 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex -149.9724654298446 -121.4820272698084 613.814359353945 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -121.4820272698084 613.814359353945 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex -149.97246542984465 -121.86791679764438 613.6545186779375 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -121.86791679764438 613.6545186779375 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + vertex -149.97246542984453 -122.28202726980842 613.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex -149.97246542984465 -120.89638662375329 614.4000000000001 + vertex -149.97246542984465 -120.7365459477459 614.785889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex -149.97246542984465 -120.7365459477459 614.785889527836 + vertex -149.9724654298446 -120.6820272698084 615.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex -149.9724654298446 -120.6820272698084 615.2 + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.0820272698084 615.6 + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex -149.97246542984482 -117.8820272698084 615.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.8820272698084 615.6 + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.97246542984468 -120.73654594774587 615.6141104721642 + vertex -149.9724654298446 -120.89638662375332 616.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.9724654298446 -120.89638662375332 616.0 + vertex -149.97246542984468 -121.15065641990992 616.3313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.97246542984468 -121.15065641990992 616.3313708498986 + vertex -149.97246542984468 -121.48202726980837 616.5856406460551 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.97246542984468 -121.48202726980837 616.5856406460551 + vertex -149.9724654298446 -121.86791679764437 616.7454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.9724654298446 -121.86791679764437 616.7454813220626 + vertex -149.97246542984468 -122.28202726980842 616.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.97246542984468 -122.28202726980842 616.8000000000001 + vertex -149.97246542984465 -124.34805267359285 616.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -117.88202726980843 617.0000000000001 + vertex -149.97246542984465 -124.34805267359285 616.9 + vertex -149.97246542984482 -118.28202726980845 617.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.9724654298443 -111.08202726980838 597.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.97246542984445 -107.09613774197238 598.0545186779375 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.97246542984445 -107.09613774197238 598.0545186779375 + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -107.09613774197238 598.0545186779375 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.97246542984445 -107.48202726980838 598.2143593539449 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -107.48202726980838 598.2143593539449 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.97246542984445 -107.81339811970685 598.4686291501016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -107.81339811970685 598.4686291501016 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.97246542984436 -108.06766791586351 598.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984436 -108.06766791586351 598.8000000000001 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.9724654298445 -108.22750859187093 599.185889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -108.22750859187093 599.185889527836 + vertex -149.97246542984442 -111.08202726980839 599.2 + vertex -149.9724654298445 -108.88202726980838 599.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -108.22750859187093 599.185889527836 + vertex -149.9724654298445 -108.88202726980838 599.2 + vertex -149.9724654298445 -108.2820272698084 599.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -108.2820272698084 599.6 + vertex -149.9724654298445 -108.88202726980838 599.2 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -108.2820272698084 599.6 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.97246542984453 -108.2275085918709 600.0141104721641 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -108.2275085918709 600.0141104721641 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.97246542984453 -108.06766791586351 600.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -108.06766791586351 600.4000000000001 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.9724654298445 -107.81339811970687 600.7313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -107.81339811970687 600.7313708498986 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.97246542984453 -107.48202726980838 600.9856406460551 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -107.48202726980838 600.9856406460551 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.97246542984445 -107.09613774197238 601.1454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -107.09613774197238 601.1454813220626 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.9724654298445 -106.68202726980836 601.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -106.28202726980838 604.0000000000001 + vertex -149.97246542984476 -104.8820272698084 603.6 + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.8820272698084 603.6 + vertex -149.97246542984468 -106.28202726980838 604.0000000000001 + vertex -149.97246542984473 -104.8820272698084 604.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + vertex -149.97246542984453 -104.5161014435193 598.1411809548975 + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -104.5161014435193 598.1411809548975 + vertex -149.97246542984445 -106.6820272698084 598.0000000000001 + vertex -149.97246542984445 -106.26791679764439 598.0545186779375 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -104.5161014435193 598.1411809548975 + vertex -149.97246542984445 -106.26791679764439 598.0545186779375 + vertex -149.97246542984442 -105.88202726980838 598.2143593539449 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -104.5161014435193 598.1411809548975 + vertex -149.97246542984442 -105.88202726980838 598.2143593539449 + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex -149.97246542984442 -105.88202726980838 598.2143593539449 + vertex -149.97246542984442 -105.55065641990991 598.4686291501016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex -149.97246542984442 -105.55065641990991 598.4686291501016 + vertex -149.97246542984453 -105.29638662375329 598.8 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex -149.97246542984453 -105.29638662375329 598.8 + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.48202726980838 598.4000000000001 + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + vertex -149.97246542984473 -104.48202726980838 603.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298446 -105.13654594774586 599.185889527836 + vertex -149.9724654298446 -105.08202726980838 599.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298446 -105.08202726980838 599.6 + vertex -149.97246542984465 -105.13654594774587 600.014110472164 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.97246542984465 -105.13654594774587 600.014110472164 + vertex -149.9724654298446 -105.29638662375328 600.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298446 -105.29638662375328 600.4000000000001 + vertex -149.97246542984465 -105.55065641990988 600.7313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.97246542984465 -105.55065641990988 600.7313708498986 + vertex -149.9724654298446 -105.88202726980838 600.9856406460551 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298446 -105.88202726980838 600.9856406460551 + vertex -149.9724654298446 -106.26791679764433 601.1454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298446 -106.26791679764433 601.1454813220626 + vertex -149.9724654298445 -106.68202726980836 601.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298445 -106.68202726980836 601.2 + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + vertex -149.9724654298445 -106.68202726980836 601.2 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + vertex -149.9724654298446 -108.31634184485914 601.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -104.48202726980838 603.6 + vertex -149.9724654298446 -106.28202726980841 601.8000000000001 + vertex -149.97246542984476 -104.8820272698084 603.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -120.68202726980837 599.6 + vertex -149.9724654298441 -120.0820272698084 599.2 + vertex -149.9724654298441 -120.7365459477459 599.185889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -120.0820272698084 599.2 + vertex -149.9724654298441 -120.68202726980837 599.6 + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.9724654298441 -120.68202726980837 599.6 + vertex -149.97246542984414 -120.73654594774587 600.0141104721641 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.97246542984414 -120.73654594774587 600.0141104721641 + vertex -149.97246542984414 -120.89638662375329 600.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.97246542984414 -120.89638662375329 600.4000000000001 + vertex -149.97246542984414 -121.15065641990992 600.7313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.97246542984414 -121.15065641990992 600.7313708498986 + vertex -149.9724654298442 -121.4820272698084 600.9856406460552 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.9724654298442 -121.4820272698084 600.9856406460552 + vertex -149.9724654298442 -121.86791679764437 601.1454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.9724654298442 -121.86791679764437 601.1454813220626 + vertex -149.972465429844 -122.28202726980837 601.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984396 -123.74084631491093 597.434074173711 + vertex -149.97246542984414 -118.28202726980835 597.4 + vertex -149.97246542984396 -123.48202726980844 597.4 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -118.28202726980835 597.4 + vertex -149.97246542984396 -123.74084631491093 597.434074173711 + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + vertex -149.97246542984396 -123.74084631491093 597.434074173711 + vertex -149.97246542984396 -123.98202726980841 597.5339745962156 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + vertex -149.97246542984396 -123.98202726980841 597.5339745962156 + vertex -149.97246542984396 -124.18913405099494 597.6928932188135 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + vertex -149.97246542984396 -124.18913405099494 597.6928932188135 + vertex -149.97246542984396 -124.34805267359283 597.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -118.28202726980834 597.8000000000001 + vertex -149.97246542984396 -124.34805267359283 597.9 + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + vertex -149.97246542984396 -124.34805267359283 597.9 + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + vertex -149.972465429844 -121.86791679764438 598.0545186779376 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -117.88202726980836 597.8000000000001 + vertex -149.972465429844 -121.86791679764438 598.0545186779376 + vertex -149.9724654298442 -117.8820272698084 599.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.8820272698084 599.2 + vertex -149.972465429844 -121.86791679764438 598.0545186779376 + vertex -149.97246542984405 -121.4820272698084 598.2143593539449 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.8820272698084 599.2 + vertex -149.97246542984405 -121.4820272698084 598.2143593539449 + vertex -149.97246542984405 -121.15065641990992 598.4686291501016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.8820272698084 599.2 + vertex -149.97246542984405 -121.15065641990992 598.4686291501016 + vertex -149.97246542984405 -120.89638662375333 598.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.8820272698084 599.2 + vertex -149.97246542984405 -120.89638662375333 598.8000000000001 + vertex -149.9724654298441 -120.7365459477459 599.185889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.8820272698084 599.2 + vertex -149.9724654298441 -120.7365459477459 599.185889527836 + vertex -149.9724654298441 -120.0820272698084 599.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984436 -110.68202726980842 597.4 + vertex -149.9724654298445 -105.22320822470584 597.434074173711 + vertex -149.97246542984445 -105.48202726980838 597.4 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -105.22320822470584 597.434074173711 + vertex -149.97246542984436 -110.68202726980842 597.4 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -105.22320822470584 597.434074173711 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.9724654298445 -104.98202726980841 597.5339745962156 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -104.98202726980841 597.5339745962156 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.9724654298445 -104.77492048862183 597.6928932188135 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -104.77492048862183 597.6928932188135 + vertex -149.9724654298443 -110.68202726980837 597.8000000000001 + vertex -149.9724654298445 -104.61600186602395 597.9000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -124.44795309609748 598.1411809548975 + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + vertex -149.97246542984396 -124.34805267359283 597.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -122.28202726980844 598.0000000000001 + vertex -149.972465429844 -124.44795309609748 598.1411809548975 + vertex -149.972465429844 -122.69613774197245 598.0545186779376 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -122.69613774197245 598.0545186779376 + vertex -149.972465429844 -124.44795309609748 598.1411809548975 + vertex -149.97246542984405 -123.08202726980842 598.2143593539449 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -123.08202726980842 598.2143593539449 + vertex -149.972465429844 -124.44795309609748 598.1411809548975 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -123.08202726980842 598.2143593539449 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + vertex -149.9724654298439 -123.41339811970688 598.4686291501016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298439 -123.41339811970688 598.4686291501016 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + vertex -149.9724654298439 -123.66766791586353 598.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298439 -123.66766791586353 598.8000000000001 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + vertex -149.972465429844 -123.82750859187092 599.185889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -123.82750859187092 599.185889527836 + vertex -149.97246542984396 -124.48202726980837 598.4000000000001 + vertex -149.9724654298442 -124.4820272698084 603.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -123.82750859187092 599.185889527836 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.9724654298439 -123.88202726980842 599.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298439 -123.88202726980842 599.6 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.9724654298441 -123.82750859187092 600.0141104721641 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -123.82750859187092 600.0141104721641 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.97246542984396 -123.66766791586353 600.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984396 -123.66766791586353 600.4000000000001 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.97246542984405 -123.41339811970687 600.7313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -123.41339811970687 600.7313708498986 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.97246542984414 -123.08202726980842 600.9856406460552 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -123.08202726980842 600.9856406460552 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.972465429844 -122.69613774197245 601.1454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -122.69613774197245 601.1454813220626 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.972465429844 -122.28202726980837 601.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -122.28202726980837 601.2 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -122.28202726980837 601.2 + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex -149.9724654298442 -124.4820272698084 603.6 + vertex -149.9724654298442 -124.08202726980839 603.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + vertex -149.9724654298442 -124.08202726980839 603.6 + vertex -149.9724654298442 -122.68202726980842 604.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -122.68202726980842 604.0000000000001 + vertex -149.9724654298442 -124.08202726980839 603.6 + vertex -149.9724654298442 -124.08202726980836 604.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.9724654298446 -117.61634184485911 611.1 + vertex -149.97246542984482 -111.34771269475765 611.1 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -117.61634184485911 611.1 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -117.61634184485911 611.1 + vertex -149.97246542984465 -120.64771269475769 613.0000000000001 + vertex -149.97246542984465 -120.0820272698084 613.5656854249493 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.97246542984445 -122.6820272698084 610.8000000000001 + vertex -149.9724654298443 -124.08202726980844 610.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -122.6820272698084 610.8000000000001 + vertex -149.97246542984442 -124.08202726980842 611.2 + vertex -149.97246542984445 -122.68202726980842 613.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -115.18083869158521 604.7920002690196 + vertex -149.97246542984445 -114.48202726980838 604.7 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -115.18083869158521 604.7920002690196 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -115.83202726980839 605.061731409782 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -115.83202726980839 605.061731409782 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -116.39121557901207 605.4908116907964 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -116.39121557901207 605.4908116907964 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -116.8202958600264 606.0500000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -116.8202958600264 606.0500000000001 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -117.0900270007889 606.7011885782233 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -117.0900270007889 606.7011885782233 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -117.0900270007889 606.7011885782233 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.9724654298445 -117.18202726980843 607.4 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -117.18202726980843 607.4 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984442 -117.09002700078888 608.0988114217769 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -117.09002700078888 608.0988114217769 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984453 -116.82029586002639 608.7500000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -116.82029586002639 608.7500000000001 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984465 -116.3912155790121 609.3091883092037 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -116.3912155790121 609.3091883092037 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.9724654298445 -115.83202726980838 609.738268590218 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -115.83202726980838 609.738268590218 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984468 -115.18083869158521 610.0079997309805 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -115.18083869158521 610.0079997309805 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984468 -114.48202726980837 610.1 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -114.48202726980837 610.1 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.9724654298446 -118.18202726980839 610.5343145750509 + vertex -149.97246542984482 -111.34771269475765 611.1 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984482 -111.34771269475765 611.1 + vertex -149.97246542984496 -108.31634184485917 613.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -108.31634184485917 613.0 + vertex -149.97246542984482 -111.34771269475765 611.1 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -108.31634184485917 613.0 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex -149.972465429845 -106.28202726980841 613.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984504 -108.88202726980838 615.6 + vertex -149.97246542984496 -111.08202726980839 615.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -108.88202726980838 615.6 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984504 -108.22750859187089 615.6141104721642 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -108.22750859187089 615.6141104721642 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984496 -108.06766791586354 616.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -108.06766791586354 616.0 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984513 -107.81339811970687 616.3313708498986 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -107.81339811970687 616.3313708498986 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984507 -107.4820272698084 616.5856406460551 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -107.4820272698084 616.5856406460551 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984513 -107.09613774197238 616.7454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -107.09613774197238 616.7454813220626 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984513 -106.68202726980836 616.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -106.68202726980836 616.8000000000001 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.9724654298452 -104.61600186602396 616.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex -149.972465429845 -111.08202726980839 617.0000000000001 + vertex -149.97246542984504 -110.6820272698084 617.0000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex -149.97246542984504 -110.6820272698084 617.0000000000001 + vertex -149.97246542984507 -104.77492048862186 617.1071067811866 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.77492048862186 617.1071067811866 + vertex -149.97246542984504 -110.6820272698084 617.0000000000001 + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.77492048862186 617.1071067811866 + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex -149.97246542984522 -104.98202726980843 617.2660254037845 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.98202726980843 617.2660254037845 + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex -149.9724654298452 -105.2232082247059 617.3659258262891 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -105.2232082247059 617.3659258262891 + vertex -149.97246542984504 -110.68202726980842 617.4000000000001 + vertex -149.9724654298452 -105.48202726980843 617.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984496 -104.88202726980839 610.8000000000001 + vertex -149.9724654298449 -106.28202726980838 610.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -104.88202726980839 610.8000000000001 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.972465429845 -104.88202726980839 611.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -104.88202726980839 611.2 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984504 -104.48202726980843 611.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -104.48202726980843 611.2 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.972465429845 -105.29638662375329 614.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -104.48202726980843 611.2 + vertex -149.972465429845 -105.29638662375329 614.4000000000001 + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -104.48202726980843 611.2 + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -105.29638662375329 614.4000000000001 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984507 -105.55065641990991 614.0686291501015 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -105.55065641990991 614.0686291501015 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984504 -105.88202726980838 613.814359353945 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -105.88202726980838 613.814359353945 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984504 -106.26791679764438 613.6545186779375 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -106.26791679764438 613.6545186779375 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984504 -106.68202726980844 613.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -106.68202726980844 613.6 + vertex -149.972465429845 -106.28202726980841 613.0 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984507 -105.1365459477459 614.785889527836 + vertex -149.97246542984504 -105.0820272698084 615.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984504 -105.0820272698084 615.2 + vertex -149.97246542984513 -105.13654594774586 615.6141104721642 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984513 -105.13654594774586 615.6141104721642 + vertex -149.97246542984504 -105.29638662375332 616.0 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984504 -105.29638662375332 616.0 + vertex -149.97246542984513 -105.55065641990988 616.3313708498985 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984513 -105.55065641990988 616.3313708498985 + vertex -149.97246542984513 -105.88202726980838 616.5856406460551 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.48202726980841 616.4000000000001 + vertex -149.97246542984513 -105.88202726980838 616.5856406460551 + vertex -149.97246542984507 -104.5161014435193 616.6588190451026 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.5161014435193 616.6588190451026 + vertex -149.97246542984513 -105.88202726980838 616.5856406460551 + vertex -149.9724654298452 -106.26791679764435 616.7454813220626 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.5161014435193 616.6588190451026 + vertex -149.9724654298452 -106.26791679764435 616.7454813220626 + vertex -149.9724654298452 -104.61600186602396 616.9 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -104.61600186602396 616.9 + vertex -149.9724654298452 -106.26791679764435 616.7454813220626 + vertex -149.97246542984513 -106.68202726980836 616.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex -149.9724654298449 -107.09613774197244 613.6545186779375 + vertex -149.97246542984504 -106.68202726980844 613.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298449 -107.09613774197244 613.6545186779375 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex -149.97246542984504 -107.48202726980843 613.814359353945 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -107.48202726980843 613.814359353945 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex -149.9724654298449 -107.81339811970689 614.0686291501016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298449 -107.81339811970689 614.0686291501016 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex -149.972465429845 -108.06766791586351 614.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.06766791586351 614.4000000000001 + vertex -149.97246542984496 -108.88202726980842 613.5656854249493 + vertex -149.97246542984504 -108.88202726980838 615.6 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.06766791586351 614.4000000000001 + vertex -149.97246542984504 -108.88202726980838 615.6 + vertex -149.97246542984504 -108.22750859187093 614.785889527836 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -108.22750859187093 614.785889527836 + vertex -149.97246542984504 -108.88202726980838 615.6 + vertex -149.97246542984496 -108.28202726980842 615.2 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -108.28202726980842 615.2 + vertex -149.97246542984504 -108.88202726980838 615.6 + vertex -149.97246542984504 -108.22750859187089 615.6141104721642 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.9724654298442 -120.64771269475763 601.8000000000001 + vertex -149.97246542984422 -117.61634184485915 603.7 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -120.64771269475763 601.8000000000001 + vertex -149.9724654298442 -120.08202726980842 601.2343145750508 + vertex -149.9724654298442 -122.68202726980842 601.8000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.61634184485915 603.7 + vertex -149.9724654298442 -120.64771269475763 601.8000000000001 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.61634184485915 603.7 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -111.34771269475767 603.7 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -111.34771269475767 603.7 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.97246542984436 -118.1820272698084 604.2656854249493 + vertex -149.97246542984445 -114.48202726980838 604.7 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.97246542984445 -114.48202726980838 604.7 + vertex -149.9724654298445 -113.78321584803159 604.7920002690196 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.9724654298445 -113.78321584803159 604.7920002690196 + vertex -149.9724654298445 -113.1320272698084 605.061731409782 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.9724654298445 -113.1320272698084 605.061731409782 + vertex -149.97246542984445 -112.5728389606047 605.4908116907964 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.97246542984445 -112.5728389606047 605.4908116907964 + vertex -149.9724654298446 -112.14375867959043 606.0500000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.9724654298446 -112.14375867959043 606.0500000000001 + vertex -149.97246542984465 -111.8740275388279 606.7011885782233 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + vertex -149.97246542984465 -111.8740275388279 606.7011885782233 + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984465 -111.8740275388279 606.7011885782233 + vertex -149.97246542984465 -111.7820272698084 607.4000000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984465 -111.7820272698084 607.4000000000001 + vertex -149.97246542984473 -111.87402753882795 608.0988114217769 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984473 -111.87402753882795 608.0988114217769 + vertex -149.97246542984468 -112.14375867959043 608.7500000000001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984468 -112.14375867959043 608.7500000000001 + vertex -149.97246542984473 -112.57283896060473 609.3091883092037 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984473 -112.57283896060473 609.3091883092037 + vertex -149.97246542984473 -113.1320272698084 609.7382685902181 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984473 -113.1320272698084 609.7382685902181 + vertex -149.97246542984473 -113.78321584803159 610.0079997309805 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -110.7820272698084 610.5343145750508 + vertex -149.97246542984473 -113.78321584803159 610.0079997309805 + vertex -149.97246542984468 -114.48202726980837 610.1 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -111.34771269475767 603.7 + vertex -149.9724654298446 -108.31634184485914 601.8000000000001 + vertex -149.9724654298445 -108.88202726980838 601.2343145750508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -108.31634184485914 601.8000000000001 + vertex -149.97246542984445 -111.34771269475767 603.7 + vertex -149.97246542984453 -110.7820272698084 604.2656854249493 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + vertex 150.02753457015382 -106.68202726980847 613.6000000000001 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + vertex 150.0275345701538 -106.26791679764442 613.6545186779376 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -107.0961377419725 613.6545186779376 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + vertex 150.0275345701538 -105.88202726980848 613.814359353945 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015388 -107.48202726980847 613.814359353945 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + vertex 150.02753457015376 -105.55065641990998 614.0686291501016 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -107.81339811970695 614.0686291501017 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex 150.02753457015376 -105.29638662375334 614.4000000000001 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -108.06766791586355 614.4000000000001 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + vertex 150.02753457015376 -105.13654594774594 614.785889527836 + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015385 -108.22750859187097 614.785889527836 + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + vertex 150.0275345701537 -105.08202726980845 615.2000000000002 + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -108.28202726980842 615.2000000000002 + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex 150.02753457015373 -105.13654594774594 615.6141104721642 + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.22750859187097 615.6141104721642 + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + vertex 150.0275345701537 -105.29638662375334 616.0000000000001 + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.06766791586355 616.0000000000001 + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + vertex 150.02753457015368 -105.55065641990996 616.3313708498986 + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015376 -107.81339811970692 616.3313708498987 + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + vertex 150.0275345701537 -105.88202726980843 616.5856406460553 + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015373 -107.48202726980844 616.5856406460553 + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701537 -107.09613774197244 616.7454813220626 + vertex 150.02753457015368 -106.26791679764439 616.7454813220626 + vertex 150.0275345701537 -106.68202726980843 616.8000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015473 -117.88202726980822 -43.00000000000016 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015478 -121.8679167976443 -43.254518677937675 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + vertex 150.02753457015478 -121.8679167976443 -43.254518677937675 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701549 -124.34805267359272 -43.10000000000016 + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701548 -121.48202726980828 -43.41435935394508 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex 150.02753457015478 -121.8679167976443 -43.254518677937675 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -121.15065641990981 -43.6686291501017 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex 150.0275345701548 -121.48202726980828 -43.41435935394508 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -120.89638662375317 -44.0000000000002 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex 150.02753457015476 -121.15065641990981 -43.6686291501017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -120.73654594774578 -44.38588952783616 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex 150.02753457015476 -120.89638662375317 -44.0000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -120.0820272698083 -44.40000000000017 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex 150.02753457015476 -120.73654594774578 -44.38588952783616 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -120.68202726980829 -44.800000000000196 + vertex 150.02753457015476 -120.0820272698083 -44.40000000000017 + vertex 150.02753457015476 -120.73654594774578 -44.38588952783616 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015476 -120.0820272698083 -44.40000000000017 + vertex 150.02753457015476 -120.68202726980829 -44.800000000000196 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015473 -120.73654594774578 -45.21411047216423 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015476 -120.68202726980829 -44.800000000000196 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015473 -120.8963866237532 -45.60000000000019 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015473 -120.73654594774578 -45.21411047216423 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -121.1506564199098 -45.931370849898656 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015473 -120.8963866237532 -45.60000000000019 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015467 -121.48202726980828 -46.1856406460553 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.0275345701547 -121.1506564199098 -45.931370849898656 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -121.86791679764423 -46.3454813220627 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015467 -121.48202726980828 -46.1856406460553 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.0275345701547 -121.86791679764423 -46.3454813220627 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -105.48202726980834 -42.60000000000018 + vertex 150.02753457015456 -110.68202726980829 -42.60000000000017 + vertex 150.02753457015436 -105.22320822470579 -42.63407417371111 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + vertex 150.02753457015436 -105.22320822470579 -42.63407417371111 + vertex 150.02753457015456 -110.68202726980829 -42.60000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -104.98202726980827 -42.73397459621574 + vertex 150.02753457015436 -105.22320822470579 -42.63407417371111 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -104.77492048862172 -42.892893218813626 + vertex 150.02753457015433 -104.98202726980827 -42.73397459621574 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -104.61600186602381 -43.10000000000017 + vertex 150.02753457015433 -104.77492048862172 -42.892893218813626 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + vertex 150.02753457015433 -104.61600186602381 -43.10000000000017 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + vertex 150.02753457015433 -104.61600186602381 -43.10000000000017 + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -107.09613774197233 -43.25451867793767 + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + vertex 150.02753457015436 -107.09613774197233 -43.25451867793767 + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015442 -107.48202726980827 -43.41435935394507 + vertex 150.02753457015436 -107.09613774197233 -43.25451867793767 + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701544 -107.81339811970676 -43.668629150101715 + vertex 150.02753457015442 -107.48202726980827 -43.41435935394507 + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701544 -108.06766791586337 -44.000000000000185 + vertex 150.0275345701544 -107.81339811970676 -43.668629150101715 + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + vertex 150.0275345701544 -108.06766791586337 -44.000000000000185 + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701544 -108.88202726980829 -44.40000000000018 + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -108.28202726980828 -44.8000000000002 + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + vertex 150.0275345701544 -108.88202726980829 -44.40000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + vertex 150.02753457015436 -108.28202726980828 -44.8000000000002 + vertex 150.0275345701544 -108.88202726980829 -44.40000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -108.22750859187079 -45.214110472164236 + vertex 150.02753457015436 -108.28202726980828 -44.8000000000002 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -108.06766791586337 -45.60000000000021 + vertex 150.02753457015433 -108.22750859187079 -45.214110472164236 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -107.81339811970673 -45.93137084989868 + vertex 150.02753457015433 -108.06766791586337 -45.60000000000021 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -107.48202726980827 -46.18564064605529 + vertex 150.0275345701543 -107.81339811970673 -45.93137084989868 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -107.0961377419723 -46.345481322062696 + vertex 150.02753457015427 -107.48202726980827 -46.18564064605529 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + vertex 150.02753457015424 -107.0961377419723 -46.345481322062696 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015385 -104.4820272698083 -56.400000000000205 + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701539 -111.08202726980826 -60.80000000000016 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex 150.0275345701539 -111.08202726980826 -60.80000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701538 -110.68202726980829 -62.6000000000002 + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015362 -104.9820272698083 -62.46602540378463 + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + vertex 150.0275345701538 -110.68202726980829 -62.6000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015362 -105.22320822470579 -62.56592582628924 + vertex 150.02753457015362 -104.9820272698083 -62.46602540378463 + vertex 150.0275345701538 -110.68202726980829 -62.6000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015362 -105.4820272698083 -62.60000000000018 + vertex 150.02753457015362 -105.22320822470579 -62.56592582628924 + vertex 150.0275345701538 -110.68202726980829 -62.6000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015447 -117.61634184485904 -48.900000000000155 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.02753457015447 -117.61634184485904 -48.900000000000155 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + vertex 150.02753457015447 -117.61634184485904 -48.900000000000155 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -114.48202726980827 -49.90000000000019 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -113.78321584803146 -49.9920002690197 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015436 -114.48202726980827 -49.90000000000019 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -113.13202726980829 -50.2617314097822 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015433 -113.78321584803146 -49.9920002690197 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -112.57283896060459 -50.69081169079649 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.0275345701543 -113.13202726980829 -50.2617314097822 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -112.1437586795903 -51.25000000000016 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015424 -112.57283896060459 -50.69081169079649 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015427 -112.1437586795903 -51.25000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -111.7820272698083 -52.60000000000017 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -111.87402753882779 -53.298811421776996 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.0275345701542 -111.7820272698083 -52.60000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -112.14375867959032 -53.95000000000018 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015413 -111.87402753882779 -53.298811421776996 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -112.57283896060463 -54.509188309203864 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015413 -112.14375867959032 -53.95000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -113.13202726980829 -54.93826859021815 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015413 -112.57283896060463 -54.509188309203864 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015416 -113.78321584803147 -55.20799973098066 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015413 -113.13202726980829 -54.93826859021815 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -114.4820272698083 -55.30000000000017 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015416 -113.78321584803147 -55.20799973098066 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -118.28202726980824 -42.600000000000165 + vertex 150.0275345701549 -123.4820272698083 -42.60000000000016 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701549 -123.7408463149108 -42.6340741737111 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex 150.0275345701549 -123.4820272698083 -42.60000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015493 -123.98202726980828 -42.733974596215724 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex 150.0275345701549 -123.7408463149108 -42.6340741737111 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701549 -124.18913405099481 -42.892893218813605 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex 150.02753457015493 -123.98202726980828 -42.733974596215724 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701549 -124.34805267359272 -43.10000000000016 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex 150.0275345701549 -124.18913405099481 -42.892893218813605 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -104.61600186602381 -43.10000000000017 + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -106.26791679764423 -43.25451867793765 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -105.88202726980826 -43.414359353945066 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + vertex 150.02753457015433 -106.26791679764423 -43.25451867793765 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + vertex 150.02753457015436 -105.88202726980826 -43.414359353945066 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -105.5506564199098 -43.66862915010168 + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex 150.02753457015436 -105.88202726980826 -43.414359353945066 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -105.29638662375316 -44.00000000000015 + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex 150.0275345701543 -105.5506564199098 -43.66862915010168 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -105.13654594774576 -44.38588952783612 + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex 150.0275345701543 -105.29638662375316 -44.00000000000015 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex 150.0275345701543 -105.13654594774576 -44.38588952783612 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -105.08202726980825 -44.800000000000146 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.0275345701543 -105.13654594774576 -44.38588952783612 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -105.13654594774574 -45.21411047216418 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015424 -105.08202726980825 -44.800000000000146 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -105.29638662375316 -45.60000000000017 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015427 -105.13654594774574 -45.21411047216418 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -105.5506564199098 -45.93137084989864 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015424 -105.29638662375316 -45.60000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -105.88202726980826 -46.185640646055276 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015422 -105.5506564199098 -45.93137084989864 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -106.26791679764423 -46.345481322062675 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015422 -105.88202726980826 -46.185640646055276 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015422 -106.26791679764423 -46.345481322062675 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701541 -104.88202726980829 -48.80000000000017 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -106.2820272698083 -49.200000000000166 + vertex 150.0275345701541 -104.88202726980829 -48.80000000000017 + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701541 -104.88202726980828 -49.200000000000166 + vertex 150.0275345701541 -104.88202726980829 -48.80000000000017 + vertex 150.02753457015413 -106.2820272698083 -49.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701544 -116.82029586002628 -51.25000000000016 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -116.39121557901197 -50.69081169079648 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.0275345701544 -116.82029586002628 -51.25000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -115.83202726980828 -50.2617314097822 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.02753457015436 -116.39121557901197 -50.69081169079648 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701544 -115.18083869158507 -49.99200026901969 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.02753457015436 -115.83202726980828 -50.2617314097822 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -114.48202726980827 -49.90000000000019 + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.0275345701544 -115.18083869158507 -49.99200026901969 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015436 -117.18202726980829 -52.60000000000017 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -117.09002700078877 -53.29881142177697 + vertex 150.02753457015436 -117.18202726980829 -52.60000000000017 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -116.82029586002625 -53.95000000000018 + vertex 150.02753457015427 -117.09002700078877 -53.29881142177697 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -116.39121557901197 -54.509188309203864 + vertex 150.02753457015427 -116.82029586002625 -53.95000000000018 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -115.83202726980828 -54.93826859021815 + vertex 150.02753457015424 -116.39121557901197 -54.509188309203864 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -115.1808386915851 -55.20799973098066 + vertex 150.02753457015422 -115.83202726980828 -54.93826859021815 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -114.4820272698083 -55.30000000000017 + vertex 150.02753457015422 -115.1808386915851 -55.20799973098066 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.0275345701542 -114.4820272698083 -55.30000000000017 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701539 -106.2820272698083 -56.00000000000017 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + vertex 150.02753457015388 -104.88202726980828 -56.0000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + vertex 150.02753457015388 -104.88202726980828 -56.0000000000002 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -120.64771269475757 -58.20000000000017 + vertex 150.02753457015422 -117.61634184485901 -56.30000000000017 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + vertex 150.02753457015422 -117.61634184485901 -56.30000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015422 -117.61634184485901 -56.30000000000017 + vertex 150.02753457015422 -120.64771269475757 -58.20000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015422 -120.64771269475757 -58.20000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701541 -117.88202726980829 -60.80000000000018 + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015416 -120.73654594774578 -60.8141104721642 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -120.89638662375316 -61.20000000000017 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.02753457015416 -120.73654594774578 -60.8141104721642 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701541 -121.1506564199098 -61.53137084989864 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.02753457015413 -120.89638662375316 -61.20000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015413 -121.48202726980826 -61.78564064605528 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.0275345701541 -121.1506564199098 -61.53137084989864 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701541 -121.86791679764423 -61.945481322062676 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.02753457015413 -121.48202726980826 -61.78564064605528 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -122.28202726980828 -62.00000000000017 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.0275345701541 -121.86791679764423 -61.945481322062676 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.0275345701542 -122.28202726980828 -62.00000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015402 -118.28202726980831 -62.20000000000018 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -124.18913405099482 -62.30710678118673 + vertex 150.02753457015402 -118.28202726980831 -62.20000000000018 + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + vertex 150.02753457015402 -118.28202726980831 -62.20000000000018 + vertex 150.02753457015422 -124.18913405099482 -62.30710678118673 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -123.98202726980828 -62.46602540378461 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + vertex 150.02753457015422 -124.18913405099482 -62.30710678118673 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -123.74084631491081 -62.56592582628924 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + vertex 150.02753457015422 -123.98202726980828 -62.46602540378461 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -123.4820272698083 -62.60000000000018 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + vertex 150.02753457015422 -123.74084631491081 -62.56592582628924 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015444 -124.08202726980831 -56.00000000000017 + vertex 150.02753457015444 -124.08202726980831 -56.40000000000017 + vertex 150.02753457015442 -122.68202726980829 -56.0000000000002 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.02753457015442 -122.68202726980829 -56.0000000000002 + vertex 150.02753457015444 -124.08202726980831 -56.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015444 -124.4820272698083 -56.40000000000017 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.02753457015444 -124.08202726980831 -56.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -123.66766791586342 -59.600000000000186 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.02753457015444 -124.4820272698083 -56.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -123.82750859187081 -59.98588952783617 + vertex 150.0275345701543 -123.66766791586342 -59.600000000000186 + vertex 150.02753457015444 -124.4820272698083 -56.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + vertex 150.02753457015427 -123.82750859187081 -59.98588952783617 + vertex 150.02753457015444 -124.4820272698083 -56.40000000000017 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -123.41339811970677 -59.26862915010171 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.0275345701543 -123.66766791586342 -59.600000000000186 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -123.08202726980831 -59.014359353945075 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.0275345701543 -123.41339811970677 -59.26862915010171 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701543 -122.69613774197234 -58.85451867793769 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.0275345701543 -123.08202726980831 -59.014359353945075 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -122.28202726980831 -58.800000000000175 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.0275345701543 -122.69613774197234 -58.85451867793769 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.02753457015427 -122.28202726980831 -58.800000000000175 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -123.8820272698083 -60.400000000000205 + vertex 150.02753457015427 -123.82750859187081 -59.98588952783617 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -123.82750859187081 -60.81411047216424 + vertex 150.02753457015427 -123.8820272698083 -60.400000000000205 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -123.66766791586339 -61.2000000000002 + vertex 150.02753457015424 -123.82750859187081 -60.81411047216424 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -123.41339811970676 -61.53137084989868 + vertex 150.02753457015424 -123.66766791586339 -61.2000000000002 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -123.08202726980828 -61.78564064605529 + vertex 150.0275345701542 -123.41339811970676 -61.53137084989868 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -124.44795309609736 -61.85881904510269 + vertex 150.0275345701542 -123.08202726980828 -61.78564064605529 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015416 -122.69613774197232 -61.94548132206272 + vertex 150.0275345701542 -123.08202726980828 -61.78564064605529 + vertex 150.02753457015424 -124.44795309609736 -61.85881904510269 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + vertex 150.02753457015416 -122.69613774197232 -61.94548132206272 + vertex 150.02753457015424 -124.44795309609736 -61.85881904510269 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -122.28202726980828 -62.00000000000017 + vertex 150.02753457015416 -122.69613774197232 -61.94548132206272 + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -122.28202726980831 -58.800000000000175 + vertex 150.02753457015424 -121.86791679764426 -58.85451867793765 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015424 -121.48202726980831 -59.01435935394506 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015424 -121.86791679764426 -58.85451867793765 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -121.15065641990981 -59.26862915010168 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015424 -121.48202726980831 -59.01435935394506 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -120.8963866237532 -59.60000000000015 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015422 -121.15065641990981 -59.26862915010168 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex 150.02753457015422 -120.8963866237532 -59.60000000000015 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -120.73654594774575 -59.985889527836115 + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex 150.02753457015422 -120.8963866237532 -59.60000000000015 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701542 -120.68202726980826 -60.40000000000015 + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex 150.0275345701542 -120.73654594774575 -59.985889527836115 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015416 -120.73654594774578 -60.8141104721642 + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex 150.0275345701542 -120.68202726980826 -60.40000000000015 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + vertex 150.02753457015427 -108.31634184485901 -47.00000000000018 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + vertex 150.02753457015427 -108.31634184485901 -47.00000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015427 -108.31634184485901 -47.00000000000018 + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + vertex 150.02753457015464 -122.68202726980829 -49.200000000000145 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015467 -124.08202726980826 -49.200000000000124 + vertex 150.02753457015464 -122.68202726980829 -49.200000000000145 + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701549 -124.34805267359272 -43.10000000000016 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015484 -122.69613774197234 -43.254518677937675 + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015487 -123.08202726980832 -43.414359353945095 + vertex 150.02753457015484 -122.69613774197234 -43.254518677937675 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + vertex 150.02753457015487 -123.08202726980832 -43.414359353945095 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015487 -123.41339811970677 -43.66862915010171 + vertex 150.02753457015487 -123.08202726980832 -43.414359353945095 + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015484 -123.66766791586342 -44.0000000000002 + vertex 150.02753457015487 -123.41339811970677 -43.66862915010171 + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015487 -123.82750859187081 -44.38588952783617 + vertex 150.02753457015484 -123.66766791586342 -44.0000000000002 + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + vertex 150.02753457015487 -123.82750859187081 -44.38588952783617 + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701548 -123.88202726980828 -44.8000000000002 + vertex 150.02753457015487 -123.82750859187081 -44.38588952783617 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701548 -123.82750859187081 -45.21411047216423 + vertex 150.0275345701548 -123.88202726980828 -44.8000000000002 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701548 -123.66766791586339 -45.6000000000002 + vertex 150.0275345701548 -123.82750859187081 -45.21411047216423 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -123.41339811970676 -45.93137084989867 + vertex 150.0275345701548 -123.66766791586339 -45.6000000000002 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015476 -123.08202726980828 -46.185640646055305 + vertex 150.02753457015476 -123.41339811970676 -45.93137084989867 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -122.69613774197232 -46.3454813220627 + vertex 150.02753457015476 -123.08202726980828 -46.185640646055305 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + vertex 150.0275345701547 -122.69613774197232 -46.3454813220627 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + endloop +endfacet +facet normal 1.0 6.470535773850401e-16 -2.97504977010331e-16 + outer loop + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.0275345701549 -123.4820272698083 -42.60000000000016 + vertex 150.02753457015476 -118.28202726980824 -42.600000000000165 + vertex -149.97246542984396 -123.48202726980846 -42.600000000000065 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984414 -118.28202726980841 -42.60000000000007 + vertex -149.97246542984396 -123.48202726980846 -42.600000000000065 + vertex 150.02753457015476 -118.28202726980824 -42.600000000000165 + endloop +endfacet +facet normal 4.174793163957734e-14 -0.1305261922200722 0.9914448613738078 + outer loop + vertex 150.0275345701549 -123.7408463149108 -42.6340741737111 + vertex 150.0275345701549 -123.4820272698083 -42.60000000000016 + vertex -149.97246542984396 -123.74084631491097 -42.63407417371101 + endloop +endfacet +facet normal 4.174793163957734e-14 -0.1305261922200722 0.9914448613738078 + outer loop + vertex -149.97246542984396 -123.48202726980846 -42.600000000000065 + vertex -149.97246542984396 -123.74084631491097 -42.63407417371101 + vertex 150.0275345701549 -123.4820272698083 -42.60000000000016 + endloop +endfacet +facet normal 3.5926213864307125e-14 4.53883218392181e-15 1.0 + outer loop + vertex 150.02753457015447 -117.61634184485904 -48.900000000000155 + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + vertex -149.97246542984428 -117.61634184485919 -48.90000000000006 + endloop +endfacet +facet normal 3.5926213864307125e-14 4.53883218392181e-15 1.0 + outer loop + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + vertex -149.97246542984428 -117.61634184485919 -48.90000000000006 + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + endloop +endfacet +facet normal 5.543472411943318e-14 -0.38268343236508134 0.9238795325112904 + outer loop + vertex 150.02753457015493 -123.98202726980828 -42.733974596215724 + vertex 150.0275345701549 -123.7408463149108 -42.6340741737111 + vertex -149.97246542984396 -123.98202726980844 -42.73397459621563 + endloop +endfacet +facet normal 5.543472411943318e-14 -0.38268343236508134 0.9238795325112904 + outer loop + vertex -149.97246542984396 -123.74084631491097 -42.63407417371101 + vertex -149.97246542984396 -123.98202726980844 -42.73397459621563 + vertex 150.0275345701549 -123.7408463149108 -42.6340741737111 + endloop +endfacet +facet normal 5.247654033021131e-14 -0.6087614290087036 0.7933533402912483 + outer loop + vertex 150.0275345701549 -124.18913405099481 -42.892893218813605 + vertex 150.02753457015493 -123.98202726980828 -42.733974596215724 + vertex -149.97246542984396 -124.189134050995 -42.89289321881352 + endloop +endfacet +facet normal 5.247654033021131e-14 -0.6087614290087036 0.7933533402912483 + outer loop + vertex -149.97246542984396 -123.98202726980844 -42.73397459621563 + vertex -149.97246542984396 -124.189134050995 -42.89289321881352 + vertex 150.02753457015493 -123.98202726980828 -42.733974596215724 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -7.797766215937043e-16 + outer loop + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + vertex 150.02753457015464 -122.68202726980829 -49.200000000000145 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -7.797766215937043e-16 + outer loop + vertex -149.9724654298442 -122.68202726980844 -49.20000000000007 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + vertex 150.02753457015464 -122.68202726980829 -49.200000000000145 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -6.227439144697608e-15 + outer loop + vertex 150.02753457015476 -118.28202726980824 -42.600000000000165 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex -149.97246542984414 -118.28202726980841 -42.60000000000007 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -6.227439144697608e-15 + outer loop + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + vertex -149.97246542984414 -118.28202726980841 -42.60000000000007 + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.02753457015476 -120.0820272698083 -44.40000000000017 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.0275345701544 -108.88202726980829 -44.40000000000018 + vertex -149.9724654298445 -108.88202726980842 -44.40000000000009 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + vertex -149.9724654298445 -108.88202726980842 -44.40000000000009 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.0275345701547 -122.68202726980829 -47.00000000000015 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.9724654298442 -120.64771269475769 -47.00000000000008 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.02753457015476 -120.0820272698083 -44.40000000000017 + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.02753457015456 -110.68202726980829 -42.60000000000017 + vertex -149.97246542984436 -110.68202726980844 -42.600000000000094 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + vertex -149.97246542984436 -110.68202726980844 -42.600000000000094 + endloop +endfacet +facet normal 4.7317208943768447e-14 -0.9238795325112916 0.38268343236507846 + outer loop + vertex 150.0275345701549 -124.34805267359272 -43.10000000000016 + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + endloop +endfacet +facet normal 4.7317208943768447e-14 -0.9238795325112916 0.38268343236507846 + outer loop + vertex -149.972465429844 -124.44795309609752 -43.34118095489755 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + endloop +endfacet +facet normal 1.7543479865911295e-15 -0.7071067811865512 -0.7071067811865439 + outer loop + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + endloop +endfacet +facet normal 1.7543479865911295e-15 -0.7071067811865512 -0.7071067811865439 + outer loop + vertex -149.9724654298442 -120.64771269475769 -47.00000000000008 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex 150.02753457015467 -120.64771269475752 -47.00000000000017 + endloop +endfacet +facet normal -1.7543479865910372e-15 0.7071067811865481 0.707106781186547 + outer loop + vertex 150.02753457015461 -120.0820272698083 -46.43431457505091 + vertex 150.02753457015447 -117.61634184485904 -48.900000000000155 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.7543479865910372e-15 0.7071067811865481 0.707106781186547 + outer loop + vertex -149.97246542984428 -117.61634184485919 -48.90000000000006 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + vertex 150.02753457015447 -117.61634184485904 -48.900000000000155 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.9724654298442 -124.08202726980844 -48.80000000000003 + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + vertex -149.9724654298443 -111.08202726980842 -43.00000000000008 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex -149.9724654298443 -111.08202726980842 -43.00000000000008 + vertex 150.0275345701545 -110.68202726980826 -43.00000000000017 + endloop +endfacet +facet normal -3.592621386430644e-14 -1.7054096175908593e-14 -1.0 + outer loop + vertex 150.02753457015467 -124.08202726980826 -49.200000000000124 + vertex -149.9724654298442 -124.08202726980842 -49.20000000000003 + vertex 150.02753457015464 -122.68202726980829 -49.200000000000145 + endloop +endfacet +facet normal -3.592621386430644e-14 -1.7054096175908593e-14 -1.0 + outer loop + vertex -149.9724654298442 -122.68202726980844 -49.20000000000007 + vertex 150.02753457015464 -122.68202726980829 -49.200000000000145 + vertex -149.9724654298442 -124.08202726980842 -49.20000000000003 + endloop +endfacet +facet normal 4.5675258850882686e-14 -0.7071067811865448 0.7071067811865503 + outer loop + vertex 150.02753457015427 -111.34771269475753 -48.90000000000018 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + endloop +endfacet +facet normal 4.5675258850882686e-14 -0.7071067811865448 0.7071067811865503 + outer loop + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + vertex 150.0275345701543 -108.88202726980826 -46.43431457505094 + endloop +endfacet +facet normal 3.14535864675755e-14 0.13052619222007428 0.9914448613738074 + outer loop + vertex 150.02753457015436 -105.48202726980834 -42.60000000000018 + vertex 150.02753457015436 -105.22320822470579 -42.63407417371111 + vertex -149.9724654298445 -105.48202726980843 -42.60000000000009 + endloop +endfacet +facet normal 3.14535864675755e-14 0.13052619222007428 0.9914448613738074 + outer loop + vertex -149.9724654298445 -105.2232082247059 -42.63407417371102 + vertex -149.9724654298445 -105.48202726980843 -42.60000000000009 + vertex 150.02753457015436 -105.22320822470579 -42.63407417371111 + endloop +endfacet +facet normal 2.0206844591291433e-14 0.3826834323650829 0.9238795325112896 + outer loop + vertex 150.02753457015436 -105.22320822470579 -42.63407417371111 + vertex 150.02753457015433 -104.98202726980827 -42.73397459621574 + vertex -149.9724654298445 -105.2232082247059 -42.63407417371102 + endloop +endfacet +facet normal 2.0206844591291433e-14 0.3826834323650829 0.9238795325112896 + outer loop + vertex -149.9724654298445 -104.98202726980846 -42.73397459621565 + vertex -149.9724654298445 -105.2232082247059 -42.63407417371102 + vertex 150.02753457015433 -104.98202726980827 -42.73397459621574 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 -2.4387889803801352e-15 + outer loop + vertex 150.0275345701547 -124.48202726980826 -48.800000000000125 + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 -2.4387889803801352e-15 + outer loop + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015473 -118.28202726980824 -43.00000000000016 + vertex 150.02753457015473 -117.88202726980822 -43.00000000000016 + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + vertex 150.02753457015473 -117.88202726980822 -43.00000000000016 + endloop +endfacet +facet normal 3.958984754963587e-14 -0.9914448613738096 0.1305261922200573 + outer loop + vertex 150.02753457015487 -124.4820272698083 -43.60000000000016 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + endloop +endfacet +facet normal 3.958984754963587e-14 -0.9914448613738096 0.1305261922200573 + outer loop + vertex -149.972465429844 -124.44795309609752 -43.34118095489755 + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex 150.02753457015487 -124.44795309609734 -43.341180954897645 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.9724654298443 -111.08202726980842 -43.00000000000008 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex 150.02753457015453 -111.08202726980826 -43.00000000000017 + endloop +endfacet +facet normal 1.0964775362654477e-14 0.6087614290087051 0.7933533402912472 + outer loop + vertex 150.02753457015433 -104.98202726980827 -42.73397459621574 + vertex 150.02753457015433 -104.77492048862172 -42.892893218813626 + vertex -149.9724654298445 -104.98202726980846 -42.73397459621565 + endloop +endfacet +facet normal 1.0964775362654477e-14 0.6087614290087051 0.7933533402912472 + outer loop + vertex -149.9724654298445 -104.77492048862187 -42.89289321881353 + vertex -149.9724654298445 -104.98202726980846 -42.73397459621565 + vertex 150.02753457015433 -104.77492048862172 -42.892893218813626 + endloop +endfacet +facet normal 5.308492047377894e-16 0.7933533402912367 0.6087614290087189 + outer loop + vertex 150.02753457015433 -104.61600186602381 -43.10000000000017 + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + vertex 150.02753457015433 -104.77492048862172 -42.892893218813626 + endloop +endfacet +facet normal 5.308492047377894e-16 0.7933533402912367 0.6087614290087189 + outer loop + vertex -149.9724654298445 -104.77492048862187 -42.89289321881353 + vertex 150.02753457015433 -104.77492048862172 -42.892893218813626 + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + endloop +endfacet +facet normal 3.850996045241048e-14 -0.7933533402912385 0.6087614290087162 + outer loop + vertex 150.0275345701549 -124.34805267359272 -43.10000000000016 + vertex 150.0275345701549 -124.18913405099481 -42.892893218813605 + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + endloop +endfacet +facet normal 3.850996045241048e-14 -0.7933533402912385 0.6087614290087162 + outer loop + vertex -149.97246542984396 -124.189134050995 -42.89289321881352 + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + vertex 150.0275345701549 -124.18913405099481 -42.892893218813605 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -4.122523745489034e-14 + outer loop + vertex 150.02753457015473 -117.88202726980822 -43.00000000000016 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -4.122523745489034e-14 + outer loop + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + vertex 150.02753457015467 -117.88202726980829 -44.40000000000016 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 6.007129263248553e-15 + outer loop + vertex 150.02753457015467 -124.08202726980826 -49.200000000000124 + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + vertex -149.9724654298442 -124.08202726980842 -49.20000000000003 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 6.007129263248553e-15 + outer loop + vertex -149.9724654298442 -124.08202726980844 -48.80000000000003 + vertex -149.9724654298442 -124.08202726980842 -49.20000000000003 + vertex 150.02753457015467 -124.08202726980828 -48.800000000000125 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.02753457015447 -111.08202726980824 -44.40000000000017 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex 150.0275345701544 -108.88202726980829 -44.40000000000018 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.9724654298445 -108.88202726980842 -44.40000000000009 + vertex 150.0275345701544 -108.88202726980829 -44.40000000000018 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015456 -110.68202726980829 -42.60000000000017 + vertex 150.02753457015436 -105.48202726980834 -42.60000000000018 + vertex -149.97246542984436 -110.68202726980844 -42.600000000000094 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.9724654298445 -105.48202726980843 -42.60000000000009 + vertex -149.97246542984436 -110.68202726980844 -42.600000000000094 + vertex 150.02753457015436 -105.48202726980834 -42.60000000000018 + endloop +endfacet +facet normal -4.1747931639577e-14 0.13052619222006093 -0.9914448613738092 + outer loop + vertex 150.02753457015436 -107.09613774197233 -43.25451867793767 + vertex -149.97246542984445 -107.09613774197244 -43.25451867793758 + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + endloop +endfacet +facet normal -4.1747931639577e-14 0.13052619222006093 -0.9914448613738092 + outer loop + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + vertex -149.97246542984445 -107.09613774197244 -43.25451867793758 + endloop +endfacet +facet normal -3.958984754963589e-14 0.9914448613738105 0.13052619222005132 + outer loop + vertex 150.02753457015436 -117.18202726980829 -52.60000000000017 + vertex 150.02753457015427 -117.09002700078877 -53.29881142177697 + vertex -149.9724654298445 -117.18202726980847 -52.60000000000009 + endloop +endfacet +facet normal -3.958984754963589e-14 0.9914448613738105 0.13052619222005132 + outer loop + vertex -149.97246542984442 -117.09002700078892 -53.29881142177688 + vertex -149.9724654298445 -117.18202726980847 -52.60000000000009 + vertex 150.02753457015427 -117.09002700078877 -53.29881142177697 + endloop +endfacet +facet normal -5.2476540330211305e-14 0.6087614290087029 -0.7933533402912488 + outer loop + vertex 150.02753457015436 -116.39121557901197 -50.69081169079648 + vertex -149.97246542984445 -116.39121557901213 -50.690811690796394 + vertex 150.02753457015436 -115.83202726980828 -50.2617314097822 + endloop +endfacet +facet normal -5.2476540330211305e-14 0.6087614290087029 -0.7933533402912488 + outer loop + vertex -149.97246542984445 -115.83202726980844 -50.26173140978212 + vertex 150.02753457015436 -115.83202726980828 -50.2617314097822 + vertex -149.97246542984445 -116.39121557901213 -50.690811690796394 + endloop +endfacet +facet normal -8.276399286620187e-15 0.9238795325112905 0.38268343236508096 + outer loop + vertex 150.02753457015427 -116.82029586002625 -53.95000000000018 + vertex -149.97246542984453 -116.82029586002643 -53.950000000000095 + vertex 150.02753457015427 -117.09002700078877 -53.29881142177697 + endloop +endfacet +facet normal -8.276399286620187e-15 0.9238795325112905 0.38268343236508096 + outer loop + vertex -149.97246542984442 -117.09002700078892 -53.29881142177688 + vertex 150.02753457015427 -117.09002700078877 -53.29881142177697 + vertex -149.97246542984453 -116.82029586002643 -53.950000000000095 + endloop +endfacet +facet normal -1.8036601700907267e-14 0.9238795325112914 0.38268343236507907 + outer loop + vertex 150.02753457015433 -104.61600186602381 -43.10000000000017 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + endloop +endfacet +facet normal -1.8036601700907267e-14 0.9238795325112914 0.38268343236507907 + outer loop + vertex -149.97246542984453 -104.51610144351935 -43.34118095489759 + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + endloop +endfacet +facet normal 3.389363707114814e-14 0.1305261922200452 0.9914448613738114 + outer loop + vertex 150.02753457015422 -115.1808386915851 -55.20799973098066 + vertex 150.0275345701542 -114.4820272698083 -55.30000000000017 + vertex -149.97246542984468 -115.18083869158525 -55.20799973098057 + endloop +endfacet +facet normal 3.389363707114814e-14 0.1305261922200452 0.9914448613738114 + outer loop + vertex -149.97246542984468 -114.48202726980841 -55.30000000000008 + vertex -149.97246542984468 -115.18083869158525 -55.20799973098057 + vertex 150.0275345701542 -114.4820272698083 -55.30000000000017 + endloop +endfacet +facet normal 5.2476540330211305e-14 -0.6087614290087029 0.7933533402912488 + outer loop + vertex 150.02753457015413 -113.13202726980829 -54.93826859021815 + vertex 150.02753457015413 -112.57283896060463 -54.509188309203864 + vertex -149.97246542984473 -113.13202726980845 -54.93826859021808 + endloop +endfacet +facet normal 5.2476540330211305e-14 -0.6087614290087029 0.7933533402912488 + outer loop + vertex -149.97246542984473 -112.57283896060477 -54.50918830920379 + vertex -149.97246542984473 -113.13202726980845 -54.93826859021808 + vertex 150.02753457015413 -112.57283896060463 -54.509188309203864 + endloop +endfacet +facet normal -5.707741135805547e-14 0.9238795325112905 -0.382683432365081 + outer loop + vertex 150.0275345701544 -116.82029586002628 -51.25000000000016 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + vertex -149.97246542984445 -116.82029586002645 -51.25000000000008 + endloop +endfacet +facet normal -5.707741135805547e-14 0.9238795325112905 -0.382683432365081 + outer loop + vertex -149.97246542984445 -117.09002700078894 -51.901188578223284 + vertex -149.97246542984445 -116.82029586002645 -51.25000000000008 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + endloop +endfacet +facet normal 2.0206844591290862e-14 0.38268343236510205 0.9238795325112817 + outer loop + vertex 150.02753457015422 -115.83202726980828 -54.93826859021815 + vertex 150.02753457015422 -115.1808386915851 -55.20799973098066 + vertex -149.97246542984453 -115.83202726980842 -54.93826859021806 + endloop +endfacet +facet normal 2.0206844591290862e-14 0.38268343236510205 0.9238795325112817 + outer loop + vertex -149.97246542984468 -115.18083869158525 -55.20799973098057 + vertex -149.97246542984453 -115.83202726980842 -54.93826859021806 + vertex 150.02753457015422 -115.1808386915851 -55.20799973098066 + endloop +endfacet +facet normal -3.267361176936225e-14 -0.13052619222004544 -0.9914448613738113 + outer loop + vertex 150.02753457015436 -114.48202726980827 -49.90000000000019 + vertex -149.97246542984445 -114.48202726980843 -49.90000000000009 + vertex 150.02753457015433 -113.78321584803146 -49.9920002690197 + endloop +endfacet +facet normal -3.267361176936225e-14 -0.13052619222004544 -0.9914448613738113 + outer loop + vertex -149.9724654298445 -113.78321584803162 -49.9920002690196 + vertex 150.02753457015433 -113.78321584803146 -49.9920002690197 + vertex -149.97246542984445 -114.48202726980843 -49.90000000000009 + endloop +endfacet +facet normal 8.276399286620187e-15 -0.9238795325112905 -0.38268343236508096 + outer loop + vertex 150.02753457015427 -112.1437586795903 -51.25000000000016 + vertex -149.9724654298446 -112.14375867959048 -51.25000000000008 + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + endloop +endfacet +facet normal 8.276399286620187e-15 -0.9238795325112905 -0.38268343236508096 + outer loop + vertex -149.97246542984465 -111.87402753882795 -51.90118857822331 + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + vertex -149.9724654298446 -112.14375867959048 -51.25000000000008 + endloop +endfacet +facet normal 5.0554622912290226e-14 -0.3826834323651004 0.9238795325112824 + outer loop + vertex 150.02753457015416 -113.78321584803147 -55.20799973098066 + vertex 150.02753457015413 -113.13202726980829 -54.93826859021815 + vertex -149.97246542984473 -113.78321584803163 -55.20799973098057 + endloop +endfacet +facet normal 5.0554622912290226e-14 -0.3826834323651004 0.9238795325112824 + outer loop + vertex -149.97246542984473 -113.13202726980845 -54.93826859021808 + vertex -149.97246542984473 -113.78321584803163 -55.20799973098057 + vertex 150.02753457015413 -113.13202726980829 -54.93826859021815 + endloop +endfacet +facet normal -4.349252002405747e-15 0.7933533402912372 0.6087614290087182 + outer loop + vertex 150.02753457015427 -116.82029586002625 -53.95000000000018 + vertex 150.02753457015424 -116.39121557901197 -54.509188309203864 + vertex -149.97246542984453 -116.82029586002643 -53.950000000000095 + endloop +endfacet +facet normal -4.349252002405747e-15 0.7933533402912372 0.6087614290087182 + outer loop + vertex -149.97246542984465 -116.39121557901213 -54.50918830920377 + vertex -149.97246542984453 -116.82029586002643 -53.950000000000095 + vertex 150.02753457015424 -116.39121557901197 -54.509188309203864 + endloop +endfacet +facet normal -2.982964513534882e-14 0.9914448613738099 -0.1305261922200552 + outer loop + vertex 150.02753457015436 -117.18202726980829 -52.60000000000017 + vertex -149.9724654298445 -117.18202726980847 -52.60000000000009 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + endloop +endfacet +facet normal -2.982964513534882e-14 0.9914448613738099 -0.1305261922200552 + outer loop + vertex -149.97246542984445 -117.09002700078894 -51.901188578223284 + vertex 150.02753457015433 -117.09002700078877 -51.901188578223376 + vertex -149.9724654298445 -117.18202726980847 -52.60000000000009 + endloop +endfacet +facet normal 4.7317208943768276e-14 -0.9238795325112859 0.3826834323650923 + outer loop + vertex 150.02753457015413 -112.14375867959032 -53.95000000000018 + vertex 150.02753457015413 -111.87402753882779 -53.298811421776996 + vertex -149.97246542984468 -112.14375867959046 -53.95000000000012 + endloop +endfacet +facet normal 4.7317208943768276e-14 -0.9238795325112859 0.3826834323650923 + outer loop + vertex -149.97246542984473 -111.87402753882799 -53.298811421776925 + vertex -149.97246542984468 -112.14375867959046 -53.95000000000012 + vertex 150.02753457015413 -111.87402753882779 -53.298811421776996 + endloop +endfacet +facet normal -3.145358646757744e-14 -0.1305261922200097 -0.9914448613738159 + outer loop + vertex 150.02753457015436 -106.68202726980829 -43.20000000000017 + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + vertex 150.02753457015433 -106.26791679764423 -43.25451867793765 + endloop +endfacet +facet normal -3.145358646757744e-14 -0.1305261922200097 -0.9914448613738159 + outer loop + vertex -149.9724654298445 -106.26791679764443 -43.254518677937554 + vertex 150.02753457015433 -106.26791679764423 -43.25451867793765 + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + endloop +endfacet +facet normal -5.308492047378068e-16 -0.7933533402912362 -0.6087614290087194 + outer loop + vertex 150.02753457015427 -112.1437586795903 -51.25000000000016 + vertex 150.02753457015424 -112.57283896060459 -50.69081169079649 + vertex -149.9724654298446 -112.14375867959048 -51.25000000000008 + endloop +endfacet +facet normal -5.308492047378068e-16 -0.7933533402912362 -0.6087614290087194 + outer loop + vertex -149.97246542984445 -112.57283896060474 -50.690811690796394 + vertex -149.9724654298446 -112.14375867959048 -51.25000000000008 + vertex 150.02753457015424 -112.57283896060459 -50.69081169079649 + endloop +endfacet +facet normal 6.084674155510988e-15 0.6087614290087043 0.7933533402912477 + outer loop + vertex 150.02753457015424 -116.39121557901197 -54.509188309203864 + vertex 150.02753457015422 -115.83202726980828 -54.93826859021815 + vertex -149.97246542984465 -116.39121557901213 -54.50918830920377 + endloop +endfacet +facet normal 6.084674155510988e-15 0.6087614290087043 0.7933533402912477 + outer loop + vertex -149.97246542984453 -115.83202726980842 -54.93826859021806 + vertex -149.97246542984465 -116.39121557901213 -54.50918830920377 + vertex 150.02753457015422 -115.83202726980828 -54.93826859021815 + endloop +endfacet +facet normal -4.052790633779061e-14 0.13052619222004386 -0.9914448613738115 + outer loop + vertex 150.0275345701544 -115.18083869158507 -49.99200026901969 + vertex -149.97246542984445 -115.18083869158525 -49.99200026901961 + vertex 150.02753457015436 -114.48202726980827 -49.90000000000019 + endloop +endfacet +facet normal -4.052790633779061e-14 0.13052619222004386 -0.9914448613738115 + outer loop + vertex -149.97246542984445 -114.48202726980843 -49.90000000000009 + vertex 150.02753457015436 -114.48202726980827 -49.90000000000019 + vertex -149.97246542984445 -115.18083869158525 -49.99200026901961 + endloop +endfacet +facet normal 3.850996045241035e-14 -0.793353340291234 0.6087614290087222 + outer loop + vertex 150.02753457015413 -112.57283896060463 -54.509188309203864 + vertex 150.02753457015413 -112.14375867959032 -53.95000000000018 + vertex -149.97246542984473 -112.57283896060477 -54.50918830920379 + endloop +endfacet +facet normal 3.850996045241035e-14 -0.793353340291234 0.6087614290087222 + outer loop + vertex -149.97246542984468 -112.14375867959046 -53.95000000000012 + vertex -149.97246542984473 -112.57283896060477 -54.50918830920379 + vertex 150.02753457015413 -112.14375867959032 -53.95000000000018 + endloop +endfacet +facet normal 3.9589847549635896e-14 -0.9914448613738105 0.13052619222005105 + outer loop + vertex 150.0275345701542 -111.7820272698083 -52.60000000000017 + vertex -149.97246542984465 -111.78202726980844 -52.60000000000011 + vertex 150.02753457015413 -111.87402753882779 -53.298811421776996 + endloop +endfacet +facet normal 3.9589847549635896e-14 -0.9914448613738105 0.13052619222005105 + outer loop + vertex -149.97246542984473 -111.87402753882799 -53.298811421776925 + vertex 150.02753457015413 -111.87402753882779 -53.298811421776996 + vertex -149.97246542984465 -111.78202726980844 -52.60000000000011 + endloop +endfacet +facet normal 4.052790633779061e-14 -0.13052619222004386 0.9914448613738115 + outer loop + vertex 150.0275345701542 -114.4820272698083 -55.30000000000017 + vertex 150.02753457015416 -113.78321584803147 -55.20799973098066 + vertex -149.97246542984468 -114.48202726980841 -55.30000000000008 + endloop +endfacet +facet normal 4.052790633779061e-14 -0.13052619222004386 0.9914448613738115 + outer loop + vertex -149.97246542984473 -113.78321584803163 -55.20799973098057 + vertex -149.97246542984468 -114.48202726980841 -55.30000000000008 + vertex 150.02753457015416 -113.78321584803147 -55.20799973098066 + endloop +endfacet +facet normal -1.7766793987718918e-14 -0.38268343236510816 -0.9238795325112792 + outer loop + vertex 150.02753457015433 -106.26791679764423 -43.25451867793765 + vertex -149.9724654298445 -106.26791679764443 -43.254518677937554 + vertex 150.02753457015436 -105.88202726980826 -43.414359353945066 + endloop +endfacet +facet normal -1.7766793987718918e-14 -0.38268343236510816 -0.9238795325112792 + outer loop + vertex -149.97246542984442 -105.88202726980843 -43.414359353944974 + vertex 150.02753457015436 -105.88202726980826 -43.414359353945066 + vertex -149.9724654298445 -106.26791679764443 -43.254518677937554 + endloop +endfacet +facet normal -4.3390061659553906e-14 0.793353340291235 -0.6087614290087209 + outer loop + vertex 150.0275345701544 -116.82029586002628 -51.25000000000016 + vertex -149.97246542984445 -116.82029586002645 -51.25000000000008 + vertex 150.02753457015436 -116.39121557901197 -50.69081169079648 + endloop +endfacet +facet normal -4.3390061659553906e-14 0.793353340291235 -0.6087614290087209 + outer loop + vertex -149.97246542984445 -116.39121557901213 -50.690811690796394 + vertex 150.02753457015436 -116.39121557901197 -50.69081169079648 + vertex -149.97246542984445 -116.82029586002645 -51.25000000000008 + endloop +endfacet +facet normal -1.584487656979815e-14 -0.6087614290087004 -0.7933533402912507 + outer loop + vertex 150.02753457015436 -105.88202726980826 -43.414359353945066 + vertex -149.97246542984442 -105.88202726980843 -43.414359353944974 + vertex 150.0275345701543 -105.5506564199098 -43.66862915010168 + endloop +endfacet +facet normal -1.584487656979815e-14 -0.6087614290087004 -0.7933533402912507 + outer loop + vertex -149.97246542984442 -105.55065641990996 -43.66862915010159 + vertex 150.0275345701543 -105.5506564199098 -43.66862915010168 + vertex -149.97246542984442 -105.88202726980843 -43.414359353944974 + endloop +endfacet +facet normal -4.811457230871733e-14 0.3826834323650628 -0.923879532511298 + outer loop + vertex 150.02753457015442 -107.48202726980827 -43.41435935394507 + vertex -149.97246542984445 -107.48202726980843 -43.414359353944974 + vertex 150.02753457015436 -107.09613774197233 -43.25451867793767 + endloop +endfacet +facet normal -4.811457230871733e-14 0.3826834323650628 -0.923879532511298 + outer loop + vertex -149.97246542984445 -107.09613774197244 -43.25451867793758 + vertex 150.02753457015436 -107.09613774197233 -43.25451867793767 + vertex -149.97246542984445 -107.48202726980843 -43.414359353944974 + endloop +endfacet +facet normal -6.084674155510988e-15 -0.6087614290087043 -0.7933533402912477 + outer loop + vertex 150.0275345701543 -113.13202726980829 -50.2617314097822 + vertex -149.97246542984453 -113.13202726980845 -50.26173140978211 + vertex 150.02753457015424 -112.57283896060459 -50.69081169079649 + endloop +endfacet +facet normal -6.084674155510988e-15 -0.6087614290087043 -0.7933533402912477 + outer loop + vertex -149.97246542984445 -112.57283896060474 -50.690811690796394 + vertex 150.02753457015424 -112.57283896060459 -50.69081169079649 + vertex -149.97246542984453 -113.13202726980845 -50.26173140978211 + endloop +endfacet +facet normal -2.0206844591290862e-14 -0.38268343236510205 -0.9238795325112817 + outer loop + vertex 150.02753457015433 -113.78321584803146 -49.9920002690197 + vertex -149.9724654298445 -113.78321584803162 -49.9920002690196 + vertex 150.0275345701543 -113.13202726980829 -50.2617314097822 + endloop +endfacet +facet normal -2.0206844591290862e-14 -0.38268343236510205 -0.9238795325112817 + outer loop + vertex -149.97246542984453 -113.13202726980845 -50.26173140978211 + vertex 150.0275345701543 -113.13202726980829 -50.2617314097822 + vertex -149.9724654298445 -113.78321584803162 -49.9920002690196 + endloop +endfacet +facet normal 3.958984754963589e-14 -0.9914448613738105 -0.13052619222005132 + outer loop + vertex 150.0275345701542 -111.7820272698083 -52.60000000000017 + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + vertex -149.97246542984465 -111.78202726980844 -52.60000000000011 + endloop +endfacet +facet normal 3.958984754963589e-14 -0.9914448613738105 -0.13052619222005132 + outer loop + vertex -149.97246542984465 -111.87402753882795 -51.90118857822331 + vertex -149.97246542984465 -111.78202726980844 -52.60000000000011 + vertex 150.0275345701542 -111.87402753882782 -51.901188578223376 + endloop +endfacet +facet normal -3.9589847549635877e-14 0.9914448613738099 0.1305261922200554 + outer loop + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + endloop +endfacet +facet normal -3.9589847549635877e-14 0.9914448613738099 0.1305261922200554 + outer loop + vertex -149.97246542984453 -104.51610144351935 -43.34118095489759 + vertex 150.0275345701543 -104.51610144351919 -43.34118095489766 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + endloop +endfacet +facet normal 4.349252002405375e-15 -0.7933533402912247 -0.6087614290087344 + outer loop + vertex 150.0275345701543 -105.29638662375316 -44.00000000000015 + vertex 150.0275345701543 -105.5506564199098 -43.66862915010168 + vertex -149.97246542984453 -105.29638662375332 -44.00000000000006 + endloop +endfacet +facet normal 4.349252002405375e-15 -0.7933533402912247 -0.6087614290087344 + outer loop + vertex -149.97246542984442 -105.55065641990996 -43.66862915010159 + vertex -149.97246542984453 -105.29638662375332 -44.00000000000006 + vertex 150.0275345701543 -105.5506564199098 -43.66862915010168 + endloop +endfacet +facet normal -4.3234471101574915e-14 0.3826834323650997 -0.9238795325112827 + outer loop + vertex 150.02753457015436 -115.83202726980828 -50.2617314097822 + vertex -149.97246542984445 -115.83202726980844 -50.26173140978212 + vertex 150.0275345701544 -115.18083869158507 -49.99200026901969 + endloop +endfacet +facet normal -4.3234471101574915e-14 0.3826834323650997 -0.9238795325112827 + outer loop + vertex -149.97246542984445 -115.18083869158525 -49.99200026901961 + vertex 150.0275345701544 -115.18083869158507 -49.99200026901969 + vertex -149.97246542984445 -115.83202726980844 -50.26173140978212 + endloop +endfacet +facet normal 1.7766793987718918e-14 0.38268343236510816 0.9238795325112792 + outer loop + vertex 150.02753457015427 -107.48202726980827 -46.18564064605529 + vertex 150.02753457015424 -107.0961377419723 -46.345481322062696 + vertex -149.97246542984453 -107.4820272698084 -46.18564064605519 + endloop +endfacet +facet normal 1.7766793987718918e-14 0.38268343236510816 0.9238795325112792 + outer loop + vertex -149.9724654298445 -107.09613774197244 -46.345481322062604 + vertex -149.97246542984453 -107.4820272698084 -46.18564064605519 + vertex 150.02753457015424 -107.0961377419723 -46.345481322062696 + endloop +endfacet +facet normal 4.052790633779115e-14 -0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + vertex 150.02753457015422 -106.26791679764423 -46.345481322062675 + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + endloop +endfacet +facet normal 4.052790633779115e-14 -0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.9724654298446 -106.26791679764438 -46.34548132206258 + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + vertex 150.02753457015422 -106.26791679764423 -46.345481322062675 + endloop +endfacet +facet normal 2.982964513534887e-14 -0.9914448613738115 0.13052619222004383 + outer loop + vertex 150.02753457015427 -105.13654594774574 -45.21411047216418 + vertex 150.02753457015424 -105.08202726980825 -44.800000000000146 + vertex -149.97246542984465 -105.13654594774593 -45.214110472164094 + endloop +endfacet +facet normal 2.982964513534887e-14 -0.9914448613738115 0.13052619222004383 + outer loop + vertex -149.97246542984465 -105.08202726980842 -44.80000000000006 + vertex -149.97246542984465 -105.13654594774593 -45.214110472164094 + vertex 150.02753457015424 -105.08202726980825 -44.800000000000146 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015436 -108.28202726980828 -44.8000000000002 + vertex 150.02753457015433 -108.22750859187079 -45.214110472164236 + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984453 -108.22750859187094 -45.21411047216414 + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + vertex 150.02753457015433 -108.22750859187079 -45.214110472164236 + endloop +endfacet +facet normal -4.3390061659553855e-14 0.7933533402912334 -0.6087614290087231 + outer loop + vertex 150.0275345701544 -107.81339811970676 -43.668629150101715 + vertex 150.0275345701544 -108.06766791586337 -44.000000000000185 + vertex -149.97246542984445 -107.81339811970689 -43.66862915010161 + endloop +endfacet +facet normal -4.3390061659553855e-14 0.7933533402912334 -0.6087614290087231 + outer loop + vertex -149.97246542984436 -108.06766791586355 -44.000000000000085 + vertex -149.97246542984445 -107.81339811970689 -43.66862915010161 + vertex 150.0275345701544 -108.06766791586337 -44.000000000000185 + endloop +endfacet +facet normal 2.9829645135349004e-14 -0.9914448613738159 0.13052619222001066 + outer loop + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + vertex -149.97246542984513 -105.1365459477459 -60.8141104721641 + endloop +endfacet +facet normal 2.9829645135349004e-14 -0.9914448613738159 0.13052619222001066 + outer loop + vertex -149.97246542984504 -105.08202726980842 -60.40000000000007 + vertex -149.97246542984513 -105.1365459477459 -60.8141104721641 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + endloop +endfacet +facet normal 6.223674274449946e-14 -0.6087614290087395 0.7933533402912207 + outer loop + vertex 150.02753457015422 -105.88202726980826 -46.185640646055276 + vertex 150.02753457015422 -105.5506564199098 -45.93137084989864 + vertex -149.9724654298446 -105.88202726980843 -46.18564064605519 + endloop +endfacet +facet normal 6.223674274449946e-14 -0.6087614290087395 0.7933533402912207 + outer loop + vertex -149.97246542984465 -105.55065641990993 -45.93137084989855 + vertex -149.9724654298446 -105.88202726980843 -46.18564064605519 + vertex 150.02753457015422 -105.5506564199098 -45.93137084989864 + endloop +endfacet +facet normal 3.267361176936335e-14 0.13052619222000883 0.991444861373816 + outer loop + vertex 150.02753457015424 -107.0961377419723 -46.345481322062696 + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + vertex -149.9724654298445 -107.09613774197244 -46.345481322062604 + endloop +endfacet +facet normal 3.267361176936335e-14 0.13052619222000883 0.991444861373816 + outer loop + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + vertex -149.9724654298445 -107.09613774197244 -46.345481322062604 + vertex 150.02753457015422 -106.68202726980827 -46.40000000000017 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.0275345701543 -105.13654594774576 -44.38588952783612 + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + vertex 150.02753457015424 -105.08202726980825 -44.800000000000146 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.97246542984465 -105.08202726980842 -44.80000000000006 + vertex 150.02753457015424 -105.08202726980825 -44.800000000000146 + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + endloop +endfacet +facet normal 2.0206844591292572e-14 0.3826834323650453 0.9238795325113052 + outer loop + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + vertex -149.97246542984513 -107.48202726980843 -61.7856406460552 + endloop +endfacet +facet normal 2.0206844591292572e-14 0.3826834323650453 0.9238795325113052 + outer loop + vertex -149.97246542984513 -107.09613774197244 -61.94548132206259 + vertex -149.97246542984513 -107.48202726980843 -61.7856406460552 + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + endloop +endfacet +facet normal 4.3390061659553855e-14 -0.7933533402912334 0.6087614290087231 + outer loop + vertex 150.02753457015424 -105.29638662375316 -45.60000000000017 + vertex -149.9724654298446 -105.29638662375329 -45.60000000000008 + vertex 150.02753457015422 -105.5506564199098 -45.93137084989864 + endloop +endfacet +facet normal 4.3390061659553855e-14 -0.7933533402912334 0.6087614290087231 + outer loop + vertex -149.97246542984465 -105.55065641990993 -45.93137084989855 + vertex 150.02753457015422 -105.5506564199098 -45.93137084989864 + vertex -149.9724654298446 -105.29638662375329 -45.60000000000008 + endloop +endfacet +facet normal 3.8509960452410624e-14 -0.7933533402912432 0.6087614290087103 + outer loop + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + vertex -149.97246542984507 -105.29638662375336 -61.20000000000007 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + endloop +endfacet +facet normal 3.8509960452410624e-14 -0.7933533402912432 0.6087614290087103 + outer loop + vertex -149.9724654298452 -105.55065641990993 -61.531370849898536 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + vertex -149.97246542984507 -105.29638662375336 -61.20000000000007 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006184 + outer loop + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex -149.97246542984496 -108.28202726980844 -60.40000000000009 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984504 -108.22750859187093 -60.814110472164124 + vertex -149.97246542984496 -108.28202726980844 -60.40000000000009 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + endloop +endfacet +facet normal 4.567452170514696e-14 -0.3826834323651088 0.9238795325112789 + outer loop + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + vertex -149.97246542984522 -106.26791679764439 -61.94548132206259 + endloop +endfacet +facet normal 4.567452170514696e-14 -0.3826834323651088 0.9238795325112789 + outer loop + vertex -149.9724654298452 -105.88202726980843 -61.78564064605518 + vertex -149.97246542984522 -106.26791679764439 -61.94548132206259 + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + endloop +endfacet +facet normal 4.7317208943768036e-14 -0.9238795325112781 0.38268343236511065 + outer loop + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + vertex -149.97246542984513 -105.1365459477459 -60.8141104721641 + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + endloop +endfacet +facet normal 4.7317208943768036e-14 -0.9238795325112781 0.38268343236511065 + outer loop + vertex -149.97246542984507 -105.29638662375336 -61.20000000000007 + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + vertex -149.97246542984513 -105.1365459477459 -60.8141104721641 + endloop +endfacet +facet normal 4.811457230871726e-14 -0.38268343236506036 0.923879532511299 + outer loop + vertex 150.02753457015422 -106.26791679764423 -46.345481322062675 + vertex 150.02753457015422 -105.88202726980826 -46.185640646055276 + vertex -149.9724654298446 -106.26791679764438 -46.34548132206258 + endloop +endfacet +facet normal 4.811457230871726e-14 -0.38268343236506036 0.923879532511299 + outer loop + vertex -149.9724654298446 -105.88202726980843 -46.18564064605519 + vertex -149.9724654298446 -106.26791679764438 -46.34548132206258 + vertex 150.02753457015422 -105.88202726980826 -46.185640646055276 + endloop +endfacet +facet normal 1.584487656979815e-14 0.6087614290087004 0.7933533402912507 + outer loop + vertex 150.0275345701543 -107.81339811970673 -45.93137084989868 + vertex 150.02753457015427 -107.48202726980827 -46.18564064605529 + vertex -149.97246542984453 -107.81339811970692 -45.93137084989857 + endloop +endfacet +facet normal 1.584487656979815e-14 0.6087614290087004 0.7933533402912507 + outer loop + vertex -149.97246542984453 -107.4820272698084 -46.18564064605519 + vertex -149.97246542984453 -107.81339811970692 -45.93137084989857 + vertex 150.02753457015427 -107.48202726980827 -46.18564064605529 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.97246542984504 -105.08202726980842 -60.40000000000007 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + endloop +endfacet +facet normal 6.084674155510805e-15 0.6087614290087102 0.7933533402912432 + outer loop + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + vertex -149.97246542984513 -107.81339811970692 -61.531370849898586 + endloop +endfacet +facet normal 6.084674155510805e-15 0.6087614290087102 0.7933533402912432 + outer loop + vertex -149.97246542984513 -107.48202726980843 -61.7856406460552 + vertex -149.97246542984513 -107.81339811970692 -61.531370849898586 + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + endloop +endfacet +facet normal -2.7796804115194528e-14 0.9238795325112981 0.38268343236506286 + outer loop + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + vertex -149.97246542984504 -108.22750859187093 -60.814110472164124 + endloop +endfacet +facet normal -2.7796804115194528e-14 0.9238795325112981 0.38268343236506286 + outer loop + vertex -149.972465429845 -108.06766791586358 -61.20000000000009 + vertex -149.97246542984504 -108.22750859187093 -60.814110472164124 + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + endloop +endfacet +facet normal -2.982964513534887e-14 0.9914448613738116 -0.13052619222004347 + outer loop + vertex 150.02753457015436 -108.28202726980828 -44.8000000000002 + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + endloop +endfacet +facet normal -2.982964513534887e-14 0.9914448613738116 -0.13052619222004347 + outer loop + vertex -149.9724654298445 -108.22750859187097 -44.38588952783605 + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + endloop +endfacet +facet normal -2.779680411519409e-14 0.9238795325112836 0.3826834323650974 + outer loop + vertex 150.02753457015433 -108.22750859187079 -45.214110472164236 + vertex 150.02753457015433 -108.06766791586337 -45.60000000000021 + vertex -149.97246542984453 -108.22750859187094 -45.21411047216414 + endloop +endfacet +facet normal -2.779680411519409e-14 0.9238795325112836 0.3826834323650974 + outer loop + vertex -149.97246542984453 -108.06766791586354 -45.6000000000001 + vertex -149.97246542984453 -108.22750859187094 -45.21411047216414 + vertex 150.02753457015433 -108.06766791586337 -45.60000000000021 + endloop +endfacet +facet normal 5.707741135805561e-14 -0.9238795325112955 0.3826834323650685 + outer loop + vertex 150.02753457015427 -105.13654594774574 -45.21411047216418 + vertex -149.97246542984465 -105.13654594774593 -45.214110472164094 + vertex 150.02753457015424 -105.29638662375316 -45.60000000000017 + endloop +endfacet +facet normal 5.707741135805561e-14 -0.9238795325112955 0.3826834323650685 + outer loop + vertex -149.9724654298446 -105.29638662375329 -45.60000000000008 + vertex 150.02753457015424 -105.29638662375316 -45.60000000000017 + vertex -149.97246542984465 -105.13654594774593 -45.214110472164094 + endloop +endfacet +facet normal 3.145358646757582e-14 0.1305261922200637 0.9914448613738089 + outer loop + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + vertex -149.97246542984513 -107.09613774197244 -61.94548132206259 + endloop +endfacet +facet normal 3.145358646757582e-14 0.1305261922200637 0.9914448613738089 + outer loop + vertex -149.97246542984513 -106.6820272698084 -62.00000000000009 + vertex -149.97246542984513 -107.09613774197244 -61.94548132206259 + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + endloop +endfacet +facet normal 4.052790633779115e-14 -0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + vertex -149.97246542984513 -106.6820272698084 -62.00000000000009 + endloop +endfacet +facet normal 4.052790633779115e-14 -0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.97246542984522 -106.26791679764439 -61.94548132206259 + vertex -149.97246542984513 -106.6820272698084 -62.00000000000009 + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + endloop +endfacet +facet normal -4.7317208943768396e-14 0.9238795325112901 -0.3826834323650818 + outer loop + vertex 150.0275345701544 -108.06766791586337 -44.000000000000185 + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + vertex -149.97246542984436 -108.06766791586355 -44.000000000000085 + endloop +endfacet +facet normal -4.7317208943768396e-14 0.9238795325112901 -0.3826834323650818 + outer loop + vertex -149.9724654298445 -108.22750859187097 -44.38588952783605 + vertex -149.97246542984436 -108.06766791586355 -44.000000000000085 + vertex 150.02753457015436 -108.22750859187079 -44.38588952783615 + endloop +endfacet +facet normal -5.247654033021232e-14 0.6087614290087363 -0.7933533402912233 + outer loop + vertex 150.0275345701544 -107.81339811970676 -43.668629150101715 + vertex -149.97246542984445 -107.81339811970689 -43.66862915010161 + vertex 150.02753457015442 -107.48202726980827 -43.41435935394507 + endloop +endfacet +facet normal -5.247654033021232e-14 0.6087614290087363 -0.7933533402912233 + outer loop + vertex -149.97246542984445 -107.48202726980843 -43.414359353944974 + vertex 150.02753457015442 -107.48202726980827 -43.41435935394507 + vertex -149.97246542984445 -107.81339811970689 -43.66862915010161 + endloop +endfacet +facet normal 5.247654033021249e-14 -0.6087614290087426 0.7933533402912182 + outer loop + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + vertex -149.9724654298452 -105.88202726980843 -61.78564064605518 + endloop +endfacet +facet normal 5.247654033021249e-14 -0.6087614290087426 0.7933533402912182 + outer loop + vertex -149.9724654298452 -105.55065641990993 -61.531370849898536 + vertex -149.9724654298452 -105.88202726980843 -61.78564064605518 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + endloop +endfacet +facet normal 2.779680411519409e-14 -0.9238795325112836 -0.3826834323650974 + outer loop + vertex 150.0275345701543 -105.13654594774576 -44.38588952783612 + vertex 150.0275345701543 -105.29638662375316 -44.00000000000015 + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + endloop +endfacet +facet normal 2.779680411519409e-14 -0.9238795325112836 -0.3826834323650974 + outer loop + vertex -149.97246542984453 -105.29638662375332 -44.00000000000006 + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + vertex 150.0275345701543 -105.29638662375316 -44.00000000000015 + endloop +endfacet +facet normal 2.7796804115194528e-14 -0.9238795325112981 -0.38268343236506286 + outer loop + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + endloop +endfacet +facet normal 2.7796804115194528e-14 -0.9238795325112981 -0.38268343236506286 + outer loop + vertex -149.972465429845 -105.29638662375334 -59.60000000000007 + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + endloop +endfacet +facet normal -4.3492520024057834e-15 0.7933533402912383 0.6087614290087168 + outer loop + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + vertex -149.972465429845 -108.06766791586358 -61.20000000000009 + endloop +endfacet +facet normal -4.3492520024057834e-15 0.7933533402912383 0.6087614290087168 + outer loop + vertex -149.97246542984513 -107.81339811970692 -61.531370849898586 + vertex -149.972465429845 -108.06766791586358 -61.20000000000009 + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + endloop +endfacet +facet normal -4.349252002405375e-15 0.7933533402912247 0.6087614290087344 + outer loop + vertex 150.02753457015433 -108.06766791586337 -45.60000000000021 + vertex 150.0275345701543 -107.81339811970673 -45.93137084989868 + vertex -149.97246542984453 -108.06766791586354 -45.6000000000001 + endloop +endfacet +facet normal -4.349252002405375e-15 0.7933533402912247 0.6087614290087344 + outer loop + vertex -149.97246542984453 -107.81339811970692 -45.93137084989857 + vertex -149.97246542984453 -108.06766791586354 -45.6000000000001 + vertex 150.0275345701543 -107.81339811970673 -45.93137084989868 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015424 -123.82750859187081 -60.81411047216424 + vertex -149.9724654298446 -123.82750859187097 -60.814110472164145 + vertex 150.02753457015427 -123.8820272698083 -60.400000000000205 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006184 + outer loop + vertex -149.9724654298445 -123.88202726980843 -60.40000000000011 + vertex 150.02753457015427 -123.8820272698083 -60.400000000000205 + vertex -149.9724654298446 -123.82750859187097 -60.814110472164145 + endloop +endfacet +facet normal 5.247654033021232e-14 -0.6087614290087363 0.7933533402912233 + outer loop + vertex 150.02753457015413 -121.48202726980826 -61.78564064605528 + vertex 150.0275345701541 -121.1506564199098 -61.53137084989864 + vertex -149.97246542984468 -121.48202726980843 -61.785640646055185 + endloop +endfacet +facet normal 5.247654033021232e-14 -0.6087614290087363 0.7933533402912233 + outer loop + vertex -149.97246542984468 -121.15065641990998 -61.53137084989855 + vertex -149.97246542984468 -121.48202726980843 -61.785640646055185 + vertex 150.0275345701541 -121.1506564199098 -61.53137084989864 + endloop +endfacet +facet normal -4.567452170514696e-14 0.3826834323651088 -0.9238795325112789 + outer loop + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + vertex -149.97246542984504 -107.48202726980844 -59.01435935394498 + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + endloop +endfacet +facet normal -4.567452170514696e-14 0.3826834323651088 -0.9238795325112789 + outer loop + vertex -149.97246542984496 -107.09613774197248 -58.85451867793757 + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + vertex -149.97246542984504 -107.48202726980844 -59.01435935394498 + endloop +endfacet +facet normal -1.2045729483675889e-15 -0.6087614290087001 -0.793353340291251 + outer loop + vertex 150.02753457015424 -121.48202726980831 -59.01435935394506 + vertex -149.9724654298446 -121.48202726980844 -59.014359353944975 + vertex 150.02753457015422 -121.15065641990981 -59.26862915010168 + endloop +endfacet +facet normal -1.2045729483675889e-15 -0.6087614290087001 -0.793353340291251 + outer loop + vertex -149.9724654298446 -121.15065641990998 -59.26862915010159 + vertex 150.02753457015422 -121.15065641990981 -59.26862915010168 + vertex -149.9724654298446 -121.48202726980844 -59.014359353944975 + endloop +endfacet +facet normal -6.0846741555097804e-15 -0.6087614290087442 -0.7933533402912171 + outer loop + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex -149.97246542984504 -105.8820272698084 -59.01435935394496 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + endloop +endfacet +facet normal -6.0846741555097804e-15 -0.6087614290087442 -0.7933533402912171 + outer loop + vertex -149.97246542984507 -105.55065641990993 -59.2686291501016 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex -149.97246542984504 -105.8820272698084 -59.01435935394496 + endloop +endfacet +facet normal -3.8509960452410624e-14 0.7933533402912432 -0.6087614290087103 + outer loop + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + vertex -149.9724654298449 -107.81339811970695 -59.268629150101624 + endloop +endfacet +facet normal -3.8509960452410624e-14 0.7933533402912432 -0.6087614290087103 + outer loop + vertex -149.972465429845 -108.06766791586355 -59.600000000000094 + vertex -149.9724654298449 -107.81339811970695 -59.268629150101624 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + endloop +endfacet +facet normal 1.7766793987718918e-14 0.38268343236510816 0.9238795325112792 + outer loop + vertex 150.0275345701542 -123.08202726980828 -61.78564064605529 + vertex 150.02753457015416 -122.69613774197232 -61.94548132206272 + vertex -149.97246542984453 -123.08202726980842 -61.785640646055185 + endloop +endfacet +facet normal 1.7766793987718918e-14 0.38268343236510816 0.9238795325112792 + outer loop + vertex -149.97246542984468 -122.69613774197248 -61.945481322062605 + vertex -149.97246542984453 -123.08202726980842 -61.785640646055185 + vertex 150.02753457015416 -122.69613774197232 -61.94548132206272 + endloop +endfacet +facet normal -4.349252002405375e-15 0.7933533402912247 0.6087614290087344 + outer loop + vertex 150.02753457015424 -123.66766791586339 -61.2000000000002 + vertex 150.0275345701542 -123.41339811970676 -61.53137084989868 + vertex -149.9724654298445 -123.66766791586355 -61.20000000000012 + endloop +endfacet +facet normal -4.349252002405375e-15 0.7933533402912247 0.6087614290087344 + outer loop + vertex -149.97246542984468 -123.41339811970691 -61.53137084989857 + vertex -149.9724654298445 -123.66766791586355 -61.20000000000012 + vertex 150.0275345701542 -123.41339811970676 -61.53137084989868 + endloop +endfacet +facet normal 4.811457230871733e-14 -0.3826834323650628 0.923879532511298 + outer loop + vertex 150.0275345701541 -121.86791679764423 -61.945481322062676 + vertex 150.02753457015413 -121.48202726980826 -61.78564064605528 + vertex -149.9724654298446 -121.86791679764441 -61.945481322062584 + endloop +endfacet +facet normal 4.811457230871733e-14 -0.3826834323650628 0.923879532511298 + outer loop + vertex -149.97246542984468 -121.48202726980843 -61.785640646055185 + vertex -149.9724654298446 -121.86791679764441 -61.945481322062584 + vertex 150.02753457015413 -121.48202726980826 -61.78564064605528 + endloop +endfacet +facet normal -3.267361176936191e-14 -0.13052619222005668 -0.9914448613738097 + outer loop + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + vertex -149.97246542984507 -106.68202726980849 -58.800000000000075 + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + endloop +endfacet +facet normal -3.267361176936191e-14 -0.13052619222005668 -0.9914448613738097 + outer loop + vertex -149.97246542984504 -106.26791679764439 -58.85451867793757 + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + vertex -149.97246542984507 -106.68202726980849 -58.800000000000075 + endloop +endfacet +facet normal 4.3390061659553855e-14 -0.7933533402912334 0.6087614290087231 + outer loop + vertex 150.02753457015413 -120.89638662375316 -61.20000000000017 + vertex -149.9724654298446 -120.89638662375336 -61.20000000000008 + vertex 150.0275345701541 -121.1506564199098 -61.53137084989864 + endloop +endfacet +facet normal 4.3390061659553855e-14 -0.7933533402912334 0.6087614290087231 + outer loop + vertex -149.97246542984468 -121.15065641990998 -61.53137084989855 + vertex 150.0275345701541 -121.1506564199098 -61.53137084989864 + vertex -149.9724654298446 -120.89638662375336 -61.20000000000008 + endloop +endfacet +facet normal 4.7317208943768396e-14 -0.9238795325112901 0.3826834323650818 + outer loop + vertex 150.02753457015416 -120.73654594774578 -60.8141104721642 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + vertex 150.02753457015413 -120.89638662375316 -61.20000000000017 + endloop +endfacet +facet normal 4.7317208943768396e-14 -0.9238795325112901 0.3826834323650818 + outer loop + vertex -149.9724654298446 -120.89638662375336 -61.20000000000008 + vertex 150.02753457015413 -120.89638662375316 -61.20000000000017 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + endloop +endfacet +facet normal 2.982964513534887e-14 -0.9914448613738116 0.13052619222004347 + outer loop + vertex 150.02753457015416 -120.73654594774578 -60.8141104721642 + vertex 150.0275345701542 -120.68202726980826 -60.40000000000015 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + endloop +endfacet +facet normal 2.982964513534887e-14 -0.9914448613738116 0.13052619222004347 + outer loop + vertex -149.9724654298446 -120.68202726980842 -60.400000000000055 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + vertex 150.0275345701542 -120.68202726980826 -60.40000000000015 + endloop +endfacet +facet normal 4.349252002405179e-15 -0.7933533402912183 -0.6087614290087429 + outer loop + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex -149.972465429845 -105.29638662375334 -59.60000000000007 + endloop +endfacet +facet normal 4.349252002405179e-15 -0.7933533402912183 -0.6087614290087429 + outer loop + vertex -149.97246542984507 -105.55065641990993 -59.2686291501016 + vertex -149.972465429845 -105.29638662375334 -59.60000000000007 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + endloop +endfacet +facet normal -2.9829645135349004e-14 0.9914448613738159 -0.13052619222001066 + outer loop + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + vertex -149.97246542984507 -108.22750859187097 -59.98588952783606 + endloop +endfacet +facet normal -2.9829645135349004e-14 0.9914448613738159 -0.13052619222001066 + outer loop + vertex -149.97246542984496 -108.28202726980844 -60.40000000000009 + vertex -149.97246542984507 -108.22750859187097 -59.98588952783606 + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + endloop +endfacet +facet normal -4.811457230871726e-14 0.38268343236506036 -0.923879532511299 + outer loop + vertex 150.0275345701543 -123.08202726980831 -59.014359353945075 + vertex -149.97246542984453 -123.08202726980849 -59.014359353944975 + vertex 150.0275345701543 -122.69613774197234 -58.85451867793769 + endloop +endfacet +facet normal -4.811457230871726e-14 0.38268343236506036 -0.923879532511299 + outer loop + vertex -149.97246542984453 -122.69613774197249 -58.85451867793758 + vertex 150.0275345701543 -122.69613774197234 -58.85451867793769 + vertex -149.97246542984453 -123.08202726980849 -59.014359353944975 + endloop +endfacet +facet normal -4.3390061659553855e-14 0.7933533402912334 -0.6087614290087231 + outer loop + vertex 150.0275345701543 -123.41339811970677 -59.26862915010171 + vertex 150.0275345701543 -123.66766791586342 -59.600000000000186 + vertex -149.97246542984445 -123.41339811970691 -59.26862915010161 + endloop +endfacet +facet normal -4.3390061659553855e-14 0.7933533402912334 -0.6087614290087231 + outer loop + vertex -149.97246542984453 -123.66766791586355 -59.600000000000094 + vertex -149.97246542984445 -123.41339811970691 -59.26862915010161 + vertex 150.0275345701543 -123.66766791586342 -59.600000000000186 + endloop +endfacet +facet normal 4.1747931639577e-14 -0.13052619222006093 0.9914448613738092 + outer loop + vertex 150.0275345701542 -122.28202726980828 -62.00000000000017 + vertex 150.0275345701541 -121.86791679764423 -61.945481322062676 + vertex -149.97246542984468 -122.28202726980847 -62.00000000000008 + endloop +endfacet +facet normal 4.1747931639577e-14 -0.13052619222006093 0.9914448613738092 + outer loop + vertex -149.9724654298446 -121.86791679764441 -61.945481322062584 + vertex -149.97246542984468 -122.28202726980847 -62.00000000000008 + vertex 150.0275345701541 -121.86791679764423 -61.945481322062676 + endloop +endfacet +facet normal 4.349252002405375e-15 -0.7933533402912247 -0.6087614290087344 + outer loop + vertex 150.02753457015422 -120.8963866237532 -59.60000000000015 + vertex 150.02753457015422 -121.15065641990981 -59.26862915010168 + vertex -149.97246542984465 -120.89638662375333 -59.60000000000006 + endloop +endfacet +facet normal 4.349252002405375e-15 -0.7933533402912247 -0.6087614290087344 + outer loop + vertex -149.9724654298446 -121.15065641990998 -59.26862915010159 + vertex -149.97246542984465 -120.89638662375333 -59.60000000000006 + vertex 150.02753457015422 -121.15065641990981 -59.26862915010168 + endloop +endfacet +facet normal -6.223674274449946e-14 0.6087614290087395 -0.7933533402912207 + outer loop + vertex 150.0275345701543 -123.41339811970677 -59.26862915010171 + vertex -149.97246542984445 -123.41339811970691 -59.26862915010161 + vertex 150.0275345701543 -123.08202726980831 -59.014359353945075 + endloop +endfacet +facet normal -6.223674274449946e-14 0.6087614290087395 -0.7933533402912207 + outer loop + vertex -149.97246542984453 -123.08202726980849 -59.014359353944975 + vertex 150.0275345701543 -123.08202726980831 -59.014359353945075 + vertex -149.97246542984445 -123.41339811970691 -59.26862915010161 + endloop +endfacet +facet normal -2.2646895194863756e-14 -0.38268343236506447 -0.9238795325112973 + outer loop + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + vertex -149.97246542984504 -106.26791679764439 -58.85451867793757 + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + endloop +endfacet +facet normal -2.2646895194863756e-14 -0.38268343236506447 -0.9238795325112973 + outer loop + vertex -149.97246542984504 -105.8820272698084 -59.01435935394496 + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex -149.97246542984504 -106.26791679764439 -58.85451867793757 + endloop +endfacet +facet normal -5.247654033021249e-14 0.6087614290087426 -0.7933533402912182 + outer loop + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + vertex -149.9724654298449 -107.81339811970695 -59.268629150101624 + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + endloop +endfacet +facet normal -5.247654033021249e-14 0.6087614290087426 -0.7933533402912182 + outer loop + vertex -149.97246542984504 -107.48202726980844 -59.01435935394498 + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + vertex -149.9724654298449 -107.81339811970695 -59.268629150101624 + endloop +endfacet +facet normal -2.779680411519409e-14 0.9238795325112836 0.3826834323650974 + outer loop + vertex 150.02753457015424 -123.82750859187081 -60.81411047216424 + vertex 150.02753457015424 -123.66766791586339 -61.2000000000002 + vertex -149.9724654298446 -123.82750859187097 -60.814110472164145 + endloop +endfacet +facet normal -2.779680411519409e-14 0.9238795325112836 0.3826834323650974 + outer loop + vertex -149.9724654298445 -123.66766791586355 -61.20000000000012 + vertex -149.9724654298446 -123.82750859187097 -60.814110472164145 + vertex 150.02753457015424 -123.66766791586339 -61.2000000000002 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.0275345701542 -120.68202726980826 -60.40000000000015 + vertex 150.0275345701542 -120.73654594774575 -59.985889527836115 + vertex -149.9724654298446 -120.68202726980842 -60.400000000000055 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.97246542984465 -120.73654594774592 -59.98588952783603 + vertex -149.9724654298446 -120.68202726980842 -60.400000000000055 + vertex 150.0275345701542 -120.73654594774575 -59.985889527836115 + endloop +endfacet +facet normal 1.584487656979815e-14 0.6087614290087004 0.7933533402912507 + outer loop + vertex 150.0275345701542 -123.41339811970676 -61.53137084989868 + vertex 150.0275345701542 -123.08202726980828 -61.78564064605529 + vertex -149.97246542984468 -123.41339811970691 -61.53137084989857 + endloop +endfacet +facet normal 1.584487656979815e-14 0.6087614290087004 0.7933533402912507 + outer loop + vertex -149.97246542984453 -123.08202726980842 -61.785640646055185 + vertex -149.97246542984468 -123.41339811970691 -61.53137084989857 + vertex 150.0275345701542 -123.08202726980828 -61.78564064605529 + endloop +endfacet +facet normal -4.052790633779115e-14 0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.0275345701543 -122.69613774197234 -58.85451867793769 + vertex -149.97246542984453 -122.69613774197249 -58.85451867793758 + vertex 150.02753457015427 -122.28202726980831 -58.800000000000175 + endloop +endfacet +facet normal -4.052790633779115e-14 0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.97246542984453 -122.28202726980847 -58.80000000000008 + vertex 150.02753457015427 -122.28202726980831 -58.800000000000175 + vertex -149.97246542984453 -122.69613774197249 -58.85451867793758 + endloop +endfacet +facet normal -2.982964513534887e-14 0.9914448613738116 -0.130526192220043 + outer loop + vertex 150.02753457015427 -123.82750859187081 -59.98588952783617 + vertex 150.02753457015427 -123.8820272698083 -60.400000000000205 + vertex -149.97246542984453 -123.82750859187094 -59.985889527836086 + endloop +endfacet +facet normal -2.982964513534887e-14 0.9914448613738116 -0.130526192220043 + outer loop + vertex -149.9724654298445 -123.88202726980843 -60.40000000000011 + vertex -149.97246542984453 -123.82750859187094 -59.985889527836086 + vertex 150.02753457015427 -123.8820272698083 -60.400000000000205 + endloop +endfacet +facet normal -4.7317208943768036e-14 0.9238795325112781 -0.38268343236511065 + outer loop + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + vertex -149.97246542984507 -108.22750859187097 -59.98588952783606 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + endloop +endfacet +facet normal -4.7317208943768036e-14 0.9238795325112781 -0.38268343236511065 + outer loop + vertex -149.972465429845 -108.06766791586355 -59.600000000000094 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + vertex -149.97246542984507 -108.22750859187097 -59.98588952783606 + endloop +endfacet +facet normal 3.145358646757744e-14 0.1305261922200097 0.9914448613738159 + outer loop + vertex 150.02753457015416 -122.69613774197232 -61.94548132206272 + vertex 150.0275345701542 -122.28202726980828 -62.00000000000017 + vertex -149.97246542984468 -122.69613774197248 -61.945481322062605 + endloop +endfacet +facet normal 3.145358646757744e-14 0.1305261922200097 0.9914448613738159 + outer loop + vertex -149.97246542984468 -122.28202726980847 -62.00000000000008 + vertex -149.97246542984468 -122.69613774197248 -61.945481322062605 + vertex 150.0275345701542 -122.28202726980828 -62.00000000000017 + endloop +endfacet +facet normal -5.707741135805561e-14 0.9238795325112955 -0.3826834323650685 + outer loop + vertex 150.0275345701543 -123.66766791586342 -59.600000000000186 + vertex 150.02753457015427 -123.82750859187081 -59.98588952783617 + vertex -149.97246542984453 -123.66766791586355 -59.600000000000094 + endloop +endfacet +facet normal -5.707741135805561e-14 0.9238795325112955 -0.3826834323650685 + outer loop + vertex -149.97246542984453 -123.82750859187094 -59.985889527836086 + vertex -149.97246542984453 -123.66766791586355 -59.600000000000094 + vertex 150.02753457015427 -123.82750859187081 -59.98588952783617 + endloop +endfacet +facet normal 2.779680411519409e-14 -0.9238795325112836 -0.3826834323650974 + outer loop + vertex 150.0275345701542 -120.73654594774575 -59.985889527836115 + vertex 150.02753457015422 -120.8963866237532 -59.60000000000015 + vertex -149.97246542984465 -120.73654594774592 -59.98588952783603 + endloop +endfacet +facet normal 2.779680411519409e-14 -0.9238795325112836 -0.3826834323650974 + outer loop + vertex -149.97246542984465 -120.89638662375333 -59.60000000000006 + vertex -149.97246542984465 -120.73654594774592 -59.98588952783603 + vertex 150.02753457015422 -120.8963866237532 -59.60000000000015 + endloop +endfacet +facet normal -4.052790633779115e-14 0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + vertex -149.97246542984496 -107.09613774197248 -58.85451867793757 + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + endloop +endfacet +facet normal -4.052790633779115e-14 0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.97246542984507 -106.68202726980849 -58.800000000000075 + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + vertex -149.97246542984496 -107.09613774197248 -58.85451867793757 + endloop +endfacet +facet normal 4.7317208943768036e-14 -0.9238795325112781 0.38268343236511065 + outer loop + vertex 150.02753457015473 -120.8963866237532 -45.60000000000019 + vertex 150.02753457015473 -120.73654594774578 -45.21411047216423 + vertex -149.97246542984414 -120.89638662375333 -45.6000000000001 + endloop +endfacet +facet normal 4.7317208943768036e-14 -0.9238795325112781 0.38268343236511065 + outer loop + vertex -149.97246542984414 -120.73654594774592 -45.21411047216414 + vertex -149.97246542984414 -120.89638662375333 -45.6000000000001 + vertex 150.02753457015473 -120.73654594774578 -45.21411047216423 + endloop +endfacet +facet normal 2.9829645135349004e-14 -0.9914448613738159 0.13052619222001066 + outer loop + vertex 150.02753457015473 -120.73654594774578 -45.21411047216423 + vertex 150.02753457015476 -120.68202726980829 -44.800000000000196 + vertex -149.97246542984414 -120.73654594774592 -45.21411047216414 + endloop +endfacet +facet normal 2.9829645135349004e-14 -0.9914448613738159 0.13052619222001066 + outer loop + vertex -149.9724654298441 -120.68202726980842 -44.800000000000104 + vertex -149.97246542984414 -120.73654594774592 -45.21411047216414 + vertex 150.02753457015476 -120.68202726980829 -44.800000000000196 + endloop +endfacet +facet normal 2.7796804115194528e-14 -0.9238795325112981 -0.38268343236506286 + outer loop + vertex 150.02753457015476 -120.73654594774578 -44.38588952783616 + vertex 150.02753457015476 -120.89638662375317 -44.0000000000002 + vertex -149.9724654298441 -120.73654594774594 -44.38588952783607 + endloop +endfacet +facet normal 2.7796804115194528e-14 -0.9238795325112981 -0.38268343236506286 + outer loop + vertex -149.9724654298441 -120.89638662375336 -44.00000000000011 + vertex -149.9724654298441 -120.73654594774594 -44.38588952783607 + vertex 150.02753457015476 -120.89638662375317 -44.0000000000002 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015476 -120.68202726980829 -44.800000000000196 + vertex 150.02753457015476 -120.73654594774578 -44.38588952783616 + vertex -149.9724654298441 -120.68202726980842 -44.800000000000104 + endloop +endfacet +facet normal 3.958984754963585e-14 -0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.9724654298441 -120.73654594774594 -44.38588952783607 + vertex -149.9724654298441 -120.68202726980842 -44.800000000000104 + vertex 150.02753457015476 -120.73654594774578 -44.38588952783616 + endloop +endfacet +facet normal -3.267361176936335e-14 -0.13052619222000883 -0.991444861373816 + outer loop + vertex 150.02753457015427 -122.28202726980831 -58.800000000000175 + vertex -149.97246542984453 -122.28202726980847 -58.80000000000008 + vertex 150.02753457015424 -121.86791679764426 -58.85451867793765 + endloop +endfacet +facet normal -3.267361176936335e-14 -0.13052619222000883 -0.991444861373816 + outer loop + vertex -149.97246542984465 -121.86791679764443 -58.854518677937556 + vertex 150.02753457015424 -121.86791679764426 -58.85451867793765 + vertex -149.97246542984453 -122.28202726980847 -58.80000000000008 + endloop +endfacet +facet normal -3.145358646757582e-14 -0.1305261922200637 -0.9914448613738089 + outer loop + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + vertex 150.02753457015478 -121.8679167976443 -43.254518677937675 + endloop +endfacet +facet normal -3.145358646757582e-14 -0.1305261922200637 -0.9914448613738089 + outer loop + vertex -149.972465429844 -121.86791679764443 -43.254518677937604 + vertex 150.02753457015478 -121.8679167976443 -43.254518677937675 + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + endloop +endfacet +facet normal -2.982964513534901e-14 0.9914448613738158 -0.1305261922200104 + outer loop + vertex 150.02753457015487 -123.82750859187081 -44.38588952783617 + vertex 150.0275345701548 -123.88202726980828 -44.8000000000002 + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + endloop +endfacet +facet normal -2.982964513534901e-14 0.9914448613738158 -0.1305261922200104 + outer loop + vertex -149.9724654298439 -123.88202726980846 -44.80000000000011 + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + vertex 150.0275345701548 -123.88202726980828 -44.8000000000002 + endloop +endfacet +facet normal 5.30849204738355e-16 0.793353340291218 0.6087614290087431 + outer loop + vertex 150.0275345701548 -123.66766791586339 -45.6000000000002 + vertex 150.02753457015476 -123.41339811970676 -45.93137084989867 + vertex -149.97246542984396 -123.66766791586357 -45.60000000000011 + endloop +endfacet +facet normal 5.30849204738355e-16 0.793353340291218 0.6087614290087431 + outer loop + vertex -149.97246542984405 -123.41339811970691 -45.93137084989858 + vertex -149.97246542984396 -123.66766791586357 -45.60000000000011 + vertex 150.02753457015476 -123.41339811970676 -45.93137084989867 + endloop +endfacet +facet normal -2.0206844591292572e-14 -0.3826834323650453 -0.9238795325113052 + outer loop + vertex 150.02753457015478 -121.8679167976443 -43.254518677937675 + vertex -149.972465429844 -121.86791679764443 -43.254518677937604 + vertex 150.0275345701548 -121.48202726980828 -43.41435935394508 + endloop +endfacet +facet normal -2.0206844591292572e-14 -0.3826834323650453 -0.9238795325113052 + outer loop + vertex -149.97246542984405 -121.48202726980844 -43.414359353944995 + vertex 150.0275345701548 -121.48202726980828 -43.41435935394508 + vertex -149.972465429844 -121.86791679764443 -43.254518677937604 + endloop +endfacet +facet normal 6.0846741555097804e-15 0.6087614290087442 0.7933533402912171 + outer loop + vertex 150.02753457015476 -123.41339811970676 -45.93137084989867 + vertex 150.02753457015476 -123.08202726980828 -46.185640646055305 + vertex -149.97246542984405 -123.41339811970691 -45.93137084989858 + endloop +endfacet +facet normal 6.0846741555097804e-15 0.6087614290087442 0.7933533402912171 + outer loop + vertex -149.97246542984414 -123.08202726980846 -46.18564064605523 + vertex -149.97246542984405 -123.41339811970691 -45.93137084989858 + vertex 150.02753457015476 -123.08202726980828 -46.185640646055305 + endloop +endfacet +facet normal -5.247654033021147e-14 0.6087614290087087 -0.7933533402912443 + outer loop + vertex 150.02753457015487 -123.41339811970677 -43.66862915010171 + vertex -149.9724654298439 -123.41339811970694 -43.668629150101616 + vertex 150.02753457015487 -123.08202726980832 -43.414359353945095 + endloop +endfacet +facet normal -5.247654033021147e-14 0.6087614290087087 -0.7933533402912443 + outer loop + vertex -149.97246542984405 -123.08202726980846 -43.414359353945 + vertex 150.02753457015487 -123.08202726980832 -43.414359353945095 + vertex -149.9724654298439 -123.41339811970694 -43.668629150101616 + endloop +endfacet +facet normal 3.267361176936191e-14 0.13052619222005668 0.9914448613738097 + outer loop + vertex 150.0275345701547 -122.69613774197232 -46.3454813220627 + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + vertex -149.972465429844 -122.69613774197249 -46.345481322062625 + endloop +endfacet +facet normal 3.267361176936191e-14 0.13052619222005668 0.9914448613738097 + outer loop + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + vertex -149.972465429844 -122.69613774197249 -46.345481322062625 + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + endloop +endfacet +facet normal 5.247654033021249e-14 -0.6087614290087426 0.7933533402912182 + outer loop + vertex 150.02753457015467 -121.48202726980828 -46.1856406460553 + vertex 150.0275345701547 -121.1506564199098 -45.931370849898656 + vertex -149.9724654298442 -121.48202726980843 -46.18564064605521 + endloop +endfacet +facet normal 5.247654033021249e-14 -0.6087614290087426 0.7933533402912182 + outer loop + vertex -149.97246542984414 -121.15065641990998 -45.93137084989857 + vertex -149.9724654298442 -121.48202726980843 -46.18564064605521 + vertex 150.0275345701547 -121.1506564199098 -45.931370849898656 + endloop +endfacet +facet normal 3.8509960452410624e-14 -0.7933533402912432 0.6087614290087103 + outer loop + vertex 150.02753457015473 -120.8963866237532 -45.60000000000019 + vertex -149.97246542984414 -120.89638662375333 -45.6000000000001 + vertex 150.0275345701547 -121.1506564199098 -45.931370849898656 + endloop +endfacet +facet normal 3.8509960452410624e-14 -0.7933533402912432 0.6087614290087103 + outer loop + vertex -149.97246542984414 -121.15065641990998 -45.93137084989857 + vertex 150.0275345701547 -121.1506564199098 -45.931370849898656 + vertex -149.97246542984414 -120.89638662375333 -45.6000000000001 + endloop +endfacet +facet normal -5.31502640738418e-14 0.7933533402912631 -0.6087614290086841 + outer loop + vertex 150.02753457015487 -123.41339811970677 -43.66862915010171 + vertex 150.02753457015484 -123.66766791586342 -44.0000000000002 + vertex -149.9724654298439 -123.41339811970694 -43.668629150101616 + endloop +endfacet +facet normal -5.31502640738418e-14 0.7933533402912631 -0.6087614290086841 + outer loop + vertex -149.9724654298439 -123.66766791586357 -44.000000000000114 + vertex -149.9724654298439 -123.41339811970694 -43.668629150101616 + vertex 150.02753457015484 -123.66766791586342 -44.0000000000002 + endloop +endfacet +facet normal -4.5674521705146963e-14 0.38268343236510904 -0.9238795325112787 + outer loop + vertex 150.02753457015487 -123.08202726980832 -43.414359353945095 + vertex -149.97246542984405 -123.08202726980846 -43.414359353945 + vertex 150.02753457015484 -122.69613774197234 -43.254518677937675 + endloop +endfacet +facet normal -4.5674521705146963e-14 0.38268343236510904 -0.9238795325112787 + outer loop + vertex -149.972465429844 -122.69613774197249 -43.2545186779376 + vertex 150.02753457015484 -122.69613774197234 -43.254518677937675 + vertex -149.97246542984405 -123.08202726980846 -43.414359353945 + endloop +endfacet +facet normal -1.2045729483673096e-15 -0.6087614290087094 -0.7933533402912438 + outer loop + vertex 150.0275345701548 -121.48202726980828 -43.41435935394508 + vertex -149.97246542984405 -121.48202726980844 -43.414359353944995 + vertex 150.02753457015476 -121.15065641990981 -43.6686291501017 + endloop +endfacet +facet normal -1.2045729483673096e-15 -0.6087614290087094 -0.7933533402912438 + outer loop + vertex -149.97246542984405 -121.15065641990998 -43.66862915010161 + vertex 150.02753457015476 -121.15065641990981 -43.6686291501017 + vertex -149.97246542984405 -121.48202726980844 -43.414359353944995 + endloop +endfacet +facet normal -4.731720894376804e-14 0.9238795325112782 -0.38268343236511054 + outer loop + vertex 150.02753457015487 -123.82750859187081 -44.38588952783617 + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + vertex 150.02753457015484 -123.66766791586342 -44.0000000000002 + endloop +endfacet +facet normal -4.731720894376804e-14 0.9238795325112782 -0.38268343236511054 + outer loop + vertex -149.9724654298439 -123.66766791586357 -44.000000000000114 + vertex 150.02753457015484 -123.66766791586342 -44.0000000000002 + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + endloop +endfacet +facet normal -2.7796804115194528e-14 0.9238795325112981 0.38268343236506286 + outer loop + vertex 150.0275345701548 -123.66766791586339 -45.6000000000002 + vertex -149.97246542984396 -123.66766791586357 -45.60000000000011 + vertex 150.0275345701548 -123.82750859187081 -45.21411047216423 + endloop +endfacet +facet normal -2.7796804115194528e-14 0.9238795325112981 0.38268343236506286 + outer loop + vertex -149.9724654298441 -123.82750859187097 -45.214110472164144 + vertex 150.0275345701548 -123.82750859187081 -45.21411047216423 + vertex -149.97246542984396 -123.66766791586357 -45.60000000000011 + endloop +endfacet +facet normal -1.7766793987718918e-14 -0.38268343236510816 -0.9238795325112792 + outer loop + vertex 150.02753457015424 -121.86791679764426 -58.85451867793765 + vertex -149.97246542984465 -121.86791679764443 -58.854518677937556 + vertex 150.02753457015424 -121.48202726980831 -59.01435935394506 + endloop +endfacet +facet normal -1.7766793987718918e-14 -0.38268343236510816 -0.9238795325112792 + outer loop + vertex -149.9724654298446 -121.48202726980844 -59.014359353944975 + vertex 150.02753457015424 -121.48202726980831 -59.01435935394506 + vertex -149.97246542984465 -121.86791679764443 -58.854518677937556 + endloop +endfacet +facet normal 4.3492520024057834e-15 -0.7933533402912383 -0.6087614290087168 + outer loop + vertex 150.02753457015476 -120.89638662375317 -44.0000000000002 + vertex 150.02753457015476 -121.15065641990981 -43.6686291501017 + vertex -149.9724654298441 -120.89638662375336 -44.00000000000011 + endloop +endfacet +facet normal 4.3492520024057834e-15 -0.7933533402912383 -0.6087614290087168 + outer loop + vertex -149.97246542984405 -121.15065641990998 -43.66862915010161 + vertex -149.9724654298441 -120.89638662375336 -44.00000000000011 + vertex 150.02753457015476 -121.15065641990981 -43.6686291501017 + endloop +endfacet +facet normal -4.052790633779115e-14 0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.02753457015484 -122.69613774197234 -43.254518677937675 + vertex -149.972465429844 -122.69613774197249 -43.2545186779376 + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + endloop +endfacet +facet normal -4.052790633779115e-14 0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + vertex 150.02753457015484 -122.28202726980831 -43.20000000000018 + vertex -149.972465429844 -122.69613774197249 -43.2545186779376 + endloop +endfacet +facet normal 2.2646895194863756e-14 0.38268343236506447 0.9238795325112973 + outer loop + vertex 150.02753457015476 -123.08202726980828 -46.185640646055305 + vertex 150.0275345701547 -122.69613774197232 -46.3454813220627 + vertex -149.97246542984414 -123.08202726980846 -46.18564064605523 + endloop +endfacet +facet normal 2.2646895194863756e-14 0.38268343236506447 0.9238795325112973 + outer loop + vertex -149.972465429844 -122.69613774197249 -46.345481322062625 + vertex -149.97246542984414 -123.08202726980846 -46.18564064605523 + vertex 150.0275345701547 -122.69613774197232 -46.3454813220627 + endloop +endfacet +facet normal 4.567452170514696e-14 -0.3826834323651088 0.9238795325112789 + outer loop + vertex 150.0275345701547 -121.86791679764423 -46.3454813220627 + vertex 150.02753457015467 -121.48202726980828 -46.1856406460553 + vertex -149.9724654298442 -121.86791679764438 -46.345481322062625 + endloop +endfacet +facet normal 4.567452170514696e-14 -0.3826834323651088 0.9238795325112789 + outer loop + vertex -149.9724654298442 -121.48202726980843 -46.18564064605521 + vertex -149.9724654298442 -121.86791679764438 -46.345481322062625 + vertex 150.02753457015467 -121.48202726980828 -46.1856406460553 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006204 + outer loop + vertex 150.0275345701548 -123.82750859187081 -45.21411047216423 + vertex -149.9724654298441 -123.82750859187097 -45.214110472164144 + vertex 150.0275345701548 -123.88202726980828 -44.8000000000002 + endloop +endfacet +facet normal -3.958984754963585e-14 0.991444861373809 0.13052619222006204 + outer loop + vertex -149.9724654298439 -123.88202726980846 -44.80000000000011 + vertex 150.0275345701548 -123.88202726980828 -44.8000000000002 + vertex -149.9724654298441 -123.82750859187097 -45.214110472164144 + endloop +endfacet +facet normal 4.052790633779115e-14 -0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015467 -122.28202726980827 -46.4000000000002 + vertex 150.0275345701547 -121.86791679764423 -46.3454813220627 + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + endloop +endfacet +facet normal 4.052790633779115e-14 -0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.9724654298442 -121.86791679764438 -46.345481322062625 + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + vertex 150.0275345701547 -121.86791679764423 -46.3454813220627 + endloop +endfacet +facet normal 3.9589847549635877e-14 -0.9914448613738099 -0.1305261922200554 + outer loop + vertex 150.02753457015424 -124.44795309609736 -61.85881904510269 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + vertex -149.9724654298446 -124.4479530960975 -61.8588190451026 + endloop +endfacet +facet normal 3.9589847549635877e-14 -0.9914448613738099 -0.1305261922200554 + outer loop + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.9724654298446 -124.4479530960975 -61.8588190451026 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 -1.5003536199769238e-15 + outer loop + vertex 150.02753457015444 -124.4820272698083 -56.40000000000017 + vertex -149.97246542984445 -124.48202726980846 -56.40000000000008 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 -1.5003536199769238e-15 + outer loop + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex 150.02753457015424 -124.48202726980833 -61.60000000000018 + vertex -149.97246542984445 -124.48202726980846 -56.40000000000008 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 4.4649600931051686e-15 + outer loop + vertex 150.02753457015444 -124.08202726980831 -56.40000000000017 + vertex 150.02753457015444 -124.08202726980831 -56.00000000000017 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 4.4649600931051686e-15 + outer loop + vertex -149.9724654298443 -124.08202726980846 -56.00000000000008 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + vertex 150.02753457015444 -124.08202726980831 -56.00000000000017 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex 150.02753457015422 -120.64771269475757 -58.20000000000017 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + vertex 150.02753457015422 -120.64771269475757 -58.20000000000017 + endloop +endfacet +facet normal 2.7796804115194335e-14 -0.9238795325112917 -0.3826834323650779 + outer loop + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + vertex 150.02753457015424 -124.44795309609736 -61.85881904510269 + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + endloop +endfacet +facet normal 2.7796804115194335e-14 -0.9238795325112917 -0.3826834323650779 + outer loop + vertex -149.9724654298446 -124.4479530960975 -61.8588190451026 + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex 150.02753457015424 -124.44795309609736 -61.85881904510269 + endloop +endfacet +facet normal 4.079515764373917e-14 -0.7071067811865452 0.7071067811865499 + outer loop + vertex 150.02753457015422 -120.64771269475757 -58.20000000000017 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + endloop +endfacet +facet normal 4.079515764373917e-14 -0.7071067811865452 0.7071067811865499 + outer loop + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 3.592621386430644e-14 1.7054096175908145e-14 1.0 + outer loop + vertex 150.02753457015444 -124.08202726980831 -56.00000000000017 + vertex 150.02753457015442 -122.68202726980829 -56.0000000000002 + vertex -149.9724654298443 -124.08202726980846 -56.00000000000008 + endloop +endfacet +facet normal 3.592621386430644e-14 1.7054096175908145e-14 1.0 + outer loop + vertex -149.97246542984445 -122.68202726980844 -56.00000000000009 + vertex -149.9724654298443 -124.08202726980846 -56.00000000000008 + vertex 150.02753457015442 -122.68202726980829 -56.0000000000002 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015444 -124.4820272698083 -56.40000000000017 + vertex 150.02753457015444 -124.08202726980831 -56.40000000000017 + vertex -149.97246542984445 -124.48202726980846 -56.40000000000008 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + vertex -149.97246542984445 -124.48202726980846 -56.40000000000008 + vertex 150.02753457015444 -124.08202726980831 -56.40000000000017 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.02753457015433 -122.68202726980829 -58.200000000000195 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + vertex 150.02753457015442 -122.68202726980829 -56.0000000000002 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.97246542984445 -122.68202726980844 -56.00000000000009 + vertex 150.02753457015442 -122.68202726980829 -56.0000000000002 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 1.0524654334828364e-15 + outer loop + vertex 150.02753457015453 -118.18202726980827 -49.465685424949434 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 1.0524654334828364e-15 + outer loop + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex 150.02753457015427 -118.18202726980829 -55.73431457505093 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.02753457015433 -104.48202726980827 -43.60000000000017 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.0275345701541 -104.88202726980829 -48.80000000000017 + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + vertex 150.0275345701541 -104.48202726980827 -48.80000000000017 + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + endloop +endfacet +facet normal -3.984724638162876e-14 1.0 -2.7394170869210435e-15 + outer loop + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -3.984724638162876e-14 1.0 -2.7394170869210435e-15 + outer loop + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.02753457015413 -106.2820272698083 -49.200000000000166 + vertex -149.97246542984468 -106.28202726980842 -49.200000000000074 + vertex 150.0275345701541 -104.88202726980828 -49.200000000000166 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984473 -104.88202726980845 -49.20000000000008 + vertex 150.0275345701541 -104.88202726980828 -49.200000000000166 + vertex -149.97246542984468 -106.28202726980842 -49.200000000000074 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.02753457015382 -106.28202726980831 -58.200000000000166 + vertex 150.0275345701539 -106.2820272698083 -56.00000000000017 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.97246542984496 -106.28202726980842 -56.00000000000008 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex 150.0275345701539 -106.2820272698083 -56.00000000000017 + endloop +endfacet +facet normal 3.592621386430644e-14 1.705409617590833e-14 1.0 + outer loop + vertex 150.0275345701539 -106.2820272698083 -56.00000000000017 + vertex 150.02753457015388 -104.88202726980828 -56.0000000000002 + vertex -149.97246542984496 -106.28202726980842 -56.00000000000008 + endloop +endfacet +facet normal 3.592621386430644e-14 1.705409617590833e-14 1.0 + outer loop + vertex -149.972465429845 -104.8820272698084 -56.000000000000114 + vertex -149.97246542984496 -106.28202726980842 -56.00000000000008 + vertex 150.02753457015388 -104.88202726980828 -56.0000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.02753457015427 -108.31634184485901 -47.00000000000018 + vertex -149.9724654298446 -108.31634184485917 -47.00000000000008 + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + vertex -149.9724654298446 -108.31634184485917 -47.00000000000008 + endloop +endfacet +facet normal -4.079515764373917e-14 0.7071067811865452 -0.7071067811865499 + outer loop + vertex 150.02753457015427 -110.78202726980828 -49.46568542494941 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + vertex 150.02753457015427 -108.31634184485901 -47.00000000000018 + endloop +endfacet +facet normal -4.079515764373917e-14 0.7071067811865452 -0.7071067811865499 + outer loop + vertex -149.9724654298446 -108.31634184485917 -47.00000000000008 + vertex 150.02753457015427 -108.31634184485901 -47.00000000000018 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.754347986591135e-15 0.7071067811865513 0.7071067811865437 + outer loop + vertex 150.0275345701539 -108.31634184485905 -58.200000000000166 + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + endloop +endfacet +facet normal -1.754347986591135e-15 0.7071067811865513 0.7071067811865437 + outer loop + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + vertex 150.02753457015402 -110.78202726980828 -55.73431457505091 + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + vertex -149.972465429845 -104.88202726980843 -56.40000000000011 + vertex 150.02753457015388 -104.88202726980828 -56.0000000000002 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.972465429845 -104.8820272698084 -56.000000000000114 + vertex 150.02753457015388 -104.88202726980828 -56.0000000000002 + vertex -149.972465429845 -104.88202726980843 -56.40000000000011 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015388 -104.88202726980828 -56.400000000000205 + vertex 150.02753457015385 -104.4820272698083 -56.400000000000205 + vertex -149.972465429845 -104.88202726980843 -56.40000000000011 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984504 -104.48202726980846 -56.40000000000011 + vertex -149.972465429845 -104.88202726980843 -56.40000000000011 + vertex 150.02753457015385 -104.4820272698083 -56.400000000000205 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.0275345701541 -104.88202726980829 -48.80000000000017 + vertex 150.0275345701541 -104.88202726980828 -49.200000000000166 + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.97246542984473 -104.88202726980845 -49.20000000000008 + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + vertex 150.0275345701541 -104.88202726980828 -49.200000000000166 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.02753457015422 -106.28202726980827 -47.00000000000017 + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + vertex 150.02753457015413 -106.2820272698083 -49.200000000000166 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.97246542984468 -106.28202726980842 -49.200000000000074 + vertex 150.02753457015413 -106.2820272698083 -49.200000000000166 + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + endloop +endfacet +facet normal -3.8509960452410384e-14 0.7933533402912354 -0.6087614290087203 + outer loop + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + endloop +endfacet +facet normal -3.8509960452410384e-14 0.7933533402912354 -0.6087614290087203 + outer loop + vertex -149.97246542984513 -104.77492048862187 -62.307106781186654 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + endloop +endfacet +facet normal -4.811457230871788e-14 0.3826834323650812 -0.9238795325112903 + outer loop + vertex 150.02753457015362 -105.22320822470579 -62.56592582628924 + vertex -149.97246542984522 -105.22320822470594 -62.56592582628915 + vertex 150.02753457015362 -104.9820272698083 -62.46602540378463 + endloop +endfacet +facet normal -4.811457230871788e-14 0.3826834323650812 -0.9238795325112903 + outer loop + vertex -149.97246542984527 -104.98202726980846 -62.466025403784535 + vertex 150.02753457015362 -104.9820272698083 -62.46602540378463 + vertex -149.97246542984522 -105.22320822470594 -62.56592582628915 + endloop +endfacet +facet normal -4.1747931639577346e-14 0.13052619222007247 -0.9914448613738078 + outer loop + vertex 150.02753457015362 -105.4820272698083 -62.60000000000018 + vertex -149.97246542984522 -105.48202726980847 -62.60000000000009 + vertex 150.02753457015362 -105.22320822470579 -62.56592582628924 + endloop +endfacet +facet normal -4.1747931639577346e-14 0.13052619222007247 -0.9914448613738078 + outer loop + vertex -149.97246542984522 -105.22320822470594 -62.56592582628915 + vertex 150.02753457015362 -105.22320822470579 -62.56592582628924 + vertex -149.97246542984522 -105.48202726980847 -62.60000000000009 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.0275345701538 -110.68202726980829 -62.6000000000002 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + vertex 150.02753457015362 -105.4820272698083 -62.60000000000018 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984522 -105.48202726980847 -62.60000000000009 + vertex 150.02753457015362 -105.4820272698083 -62.60000000000018 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + endloop +endfacet +facet normal -5.247654033021131e-14 0.6087614290087036 -0.7933533402912483 + outer loop + vertex 150.02753457015362 -104.9820272698083 -62.46602540378463 + vertex -149.97246542984527 -104.98202726980846 -62.466025403784535 + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + endloop +endfacet +facet normal -5.247654033021131e-14 0.6087614290087036 -0.7933533402912483 + outer loop + vertex -149.97246542984513 -104.77492048862187 -62.307106781186654 + vertex 150.02753457015356 -104.77492048862175 -62.30710678118674 + vertex -149.97246542984527 -104.98202726980846 -62.466025403784535 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + vertex 150.02753457015385 -104.4820272698083 -56.400000000000205 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.97246542984504 -104.48202726980846 -56.40000000000011 + vertex 150.02753457015385 -104.4820272698083 -56.400000000000205 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -3.755700652948135e-14 0.9238795325112905 -0.3826834323650808 + outer loop + vertex 150.02753457015362 -104.61600186602386 -62.10000000000019 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + endloop +endfacet +facet normal -3.755700652948135e-14 0.9238795325112905 -0.3826834323650808 + outer loop + vertex -149.97246542984513 -104.51610144351935 -61.858819045102614 + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + endloop +endfacet +facet normal -3.958984754963587e-14 0.9914448613738096 -0.1305261922200573 + outer loop + vertex 150.02753457015368 -104.4820272698083 -61.60000000000019 + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -3.958984754963587e-14 0.9914448613738096 -0.1305261922200573 + outer loop + vertex -149.97246542984513 -104.51610144351935 -61.858819045102614 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + vertex 150.02753457015362 -104.51610144351923 -61.858819045102706 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984504 -110.68202726980842 -62.20000000000009 + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex 150.0275345701538 -110.68202726980829 -62.6000000000002 + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 9.400019899202897e-16 + outer loop + vertex -149.97246542984504 -110.68202726980842 -62.20000000000009 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + vertex 150.0275345701538 -110.6820272698083 -62.2000000000002 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.0275345701539 -111.08202726980826 -60.80000000000016 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + vertex -149.97246542984496 -111.08202726980844 -60.80000000000006 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex -149.97246542984496 -111.08202726980844 -60.80000000000006 + vertex 150.0275345701538 -108.88202726980829 -60.80000000000016 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.02753457015422 -117.61634184485901 -56.30000000000017 + vertex -149.9724654298446 -117.61634184485915 -56.300000000000075 + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + vertex -149.9724654298446 -117.61634184485915 -56.300000000000075 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 8.99704908291417e-15 + outer loop + vertex 150.0275345701539 -111.08202726980826 -60.80000000000016 + vertex -149.97246542984496 -111.08202726980844 -60.80000000000006 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + endloop +endfacet +facet normal 3.9847246381628766e-14 -1.0 8.99704908291417e-15 + outer loop + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex 150.0275345701538 -111.08202726980828 -62.20000000000018 + vertex -149.97246542984496 -111.08202726980844 -60.80000000000006 + endloop +endfacet +facet normal 1.7543479865910372e-15 -0.7071067811865481 -0.707106781186547 + outer loop + vertex 150.02753457015402 -111.34771269475752 -56.30000000000017 + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + endloop +endfacet +facet normal 1.7543479865910372e-15 -0.7071067811865481 -0.707106781186547 + outer loop + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex 150.0275345701539 -108.88202726980829 -58.765685424949424 + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + endloop +endfacet +facet normal -5.055536005802621e-14 0.707106781186545 -0.70710678118655 + outer loop + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex 150.02753457015422 -117.61634184485901 -56.30000000000017 + endloop +endfacet +facet normal -5.055536005802621e-14 0.707106781186545 -0.70710678118655 + outer loop + vertex -149.9724654298446 -117.61634184485915 -56.300000000000075 + vertex 150.02753457015422 -117.61634184485901 -56.30000000000017 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex 150.0275345701541 -117.88202726980829 -60.80000000000018 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899203173e-16 1.0 + outer loop + vertex -149.97246542984482 -117.88202726980845 -60.80000000000009 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + vertex 150.0275345701541 -117.88202726980829 -60.80000000000018 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -2.611827415552657e-14 + outer loop + vertex 150.0275345701541 -117.88202726980829 -60.80000000000018 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex -149.97246542984482 -117.88202726980845 -60.80000000000009 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -2.611827415552657e-14 + outer loop + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + vertex -149.97246542984482 -117.88202726980845 -60.80000000000009 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex 150.02753457015416 -120.0820272698083 -60.80000000000017 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -9.400019899202897e-16 + outer loop + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex 150.0275345701542 -120.08202726980826 -58.76568542494941 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.02753457015402 -118.28202726980831 -62.20000000000018 + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + vertex 150.02753457015402 -117.88202726980833 -62.20000000000018 + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -4.4649600931051686e-15 + outer loop + vertex 150.02753457015402 -118.28202726980831 -62.20000000000018 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + endloop +endfacet +facet normal -3.9847246381628766e-14 1.0 -4.4649600931051686e-15 + outer loop + vertex -149.97246542984482 -118.28202726980847 -62.60000000000009 + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex 150.0275345701542 -123.4820272698083 -62.60000000000018 + vertex -149.97246542984473 -123.48202726980846 -62.60000000000008 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899203173e-16 -1.0 + outer loop + vertex -149.97246542984482 -118.28202726980847 -62.60000000000009 + vertex 150.027534570154 -118.28202726980834 -62.60000000000018 + vertex -149.97246542984473 -123.48202726980846 -62.60000000000008 + endloop +endfacet +facet normal -3.389363707114727e-14 -0.13052619222007386 -0.9914448613738075 + outer loop + vertex 150.02753457015422 -123.74084631491081 -62.56592582628924 + vertex -149.97246542984468 -123.740846314911 -62.56592582628915 + vertex 150.0275345701542 -123.4820272698083 -62.60000000000018 + endloop +endfacet +facet normal -3.389363707114727e-14 -0.13052619222007386 -0.9914448613738075 + outer loop + vertex -149.97246542984473 -123.48202726980846 -62.60000000000008 + vertex 150.0275345701542 -123.4820272698083 -62.60000000000018 + vertex -149.97246542984468 -123.740846314911 -62.56592582628915 + endloop +endfacet +facet normal -2.264689519486322e-14 -0.3826834323650826 -0.9238795325112898 + outer loop + vertex 150.02753457015422 -123.98202726980828 -62.46602540378461 + vertex -149.97246542984453 -123.98202726980844 -62.46602540378452 + vertex 150.02753457015422 -123.74084631491081 -62.56592582628924 + endloop +endfacet +facet normal -2.264689519486322e-14 -0.3826834323650826 -0.9238795325112898 + outer loop + vertex -149.97246542984468 -123.740846314911 -62.56592582628915 + vertex 150.02753457015422 -123.74084631491081 -62.56592582628924 + vertex -149.97246542984453 -123.98202726980844 -62.46602540378452 + endloop +endfacet +facet normal -1.0964775362654501e-14 -0.6087614290087044 -0.7933533402912476 + outer loop + vertex 150.02753457015422 -124.18913405099482 -62.30710678118673 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + vertex 150.02753457015422 -123.98202726980828 -62.46602540378461 + endloop +endfacet +facet normal -1.0964775362654501e-14 -0.6087614290087044 -0.7933533402912476 + outer loop + vertex -149.97246542984453 -123.98202726980844 -62.46602540378452 + vertex 150.02753457015422 -123.98202726980828 -62.46602540378461 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + endloop +endfacet +facet normal -5.308492047377087e-16 -0.7933533402912396 -0.6087614290087152 + outer loop + vertex 150.02753457015422 -124.18913405099482 -62.30710678118673 + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + endloop +endfacet +facet normal -5.308492047377087e-16 -0.7933533402912396 -0.6087614290087152 + outer loop + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + vertex 150.02753457015422 -124.34805267359273 -62.10000000000018 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -124.48202726980846 -56.40000000000008 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -123.82750859187094 -59.985889527836086 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -123.66766791586355 -59.600000000000094 + vertex -149.97246542984453 -123.82750859187094 -59.985889527836086 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + vertex -149.97246542984453 -123.66766791586355 -59.600000000000094 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -123.41339811970691 -59.26862915010161 + vertex -149.97246542984453 -123.66766791586355 -59.600000000000094 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -123.08202726980849 -59.014359353944975 + vertex -149.97246542984445 -123.41339811970691 -59.26862915010161 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -122.69613774197249 -58.85451867793758 + vertex -149.97246542984453 -123.08202726980849 -59.014359353944975 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + vertex -149.97246542984453 -122.69613774197249 -58.85451867793758 + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -122.28202726980847 -58.80000000000008 + vertex -149.97246542984453 -122.69613774197249 -58.85451867793758 + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex -149.97246542984453 -122.28202726980847 -58.80000000000008 + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -123.88202726980843 -60.40000000000011 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.97246542984453 -123.82750859187094 -59.985889527836086 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -123.82750859187097 -60.814110472164145 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.9724654298445 -123.88202726980843 -60.40000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -123.66766791586355 -61.20000000000012 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.9724654298446 -123.82750859187097 -60.814110472164145 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -123.41339811970691 -61.53137084989857 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.9724654298445 -123.66766791586355 -61.20000000000012 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -123.08202726980842 -61.785640646055185 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.97246542984468 -123.41339811970691 -61.53137084989857 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -124.4479530960975 -61.8588190451026 + vertex -149.9724654298446 -124.48202726980844 -61.60000000000009 + vertex -149.97246542984453 -123.08202726980842 -61.785640646055185 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -122.69613774197248 -61.945481322062605 + vertex -149.9724654298446 -124.4479530960975 -61.8588190451026 + vertex -149.97246542984453 -123.08202726980842 -61.785640646055185 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex -149.9724654298446 -124.4479530960975 -61.8588190451026 + vertex -149.97246542984468 -122.69613774197248 -61.945481322062605 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -122.28202726980847 -62.00000000000008 + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex -149.97246542984468 -122.69613774197248 -61.945481322062605 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984482 -118.28202726980847 -62.60000000000009 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -123.98202726980844 -62.46602540378452 + vertex -149.97246542984468 -124.18913405099501 -62.30710678118664 + vertex -149.97246542984482 -118.28202726980847 -62.60000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -123.740846314911 -62.56592582628915 + vertex -149.97246542984453 -123.98202726980844 -62.46602540378452 + vertex -149.97246542984482 -118.28202726980847 -62.60000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -123.48202726980846 -62.60000000000008 + vertex -149.97246542984468 -123.740846314911 -62.56592582628915 + vertex -149.97246542984482 -118.28202726980847 -62.60000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + vertex -149.97246542984465 -120.89638662375333 -59.60000000000006 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -121.15065641990998 -59.26862915010159 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex -149.97246542984465 -120.89638662375333 -59.60000000000006 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -121.48202726980844 -59.014359353944975 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex -149.9724654298446 -121.15065641990998 -59.26862915010159 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -121.86791679764443 -58.854518677937556 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex -149.9724654298446 -121.48202726980844 -59.014359353944975 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -122.28202726980847 -58.80000000000008 + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex -149.97246542984465 -121.86791679764443 -58.854518677937556 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -120.73654594774592 -59.98588952783603 + vertex -149.97246542984465 -120.89638662375333 -59.60000000000006 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -120.68202726980842 -60.400000000000055 + vertex -149.97246542984465 -120.73654594774592 -59.98588952783603 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + vertex -149.9724654298446 -120.68202726980842 -60.400000000000055 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984482 -117.88202726980845 -60.80000000000009 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + vertex -149.97246542984468 -120.08202726980845 -60.80000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + vertex -149.97246542984482 -117.88202726980845 -60.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -120.89638662375336 -61.20000000000008 + vertex -149.97246542984468 -120.7365459477459 -60.81411047216411 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -121.15065641990998 -61.53137084989855 + vertex -149.9724654298446 -120.89638662375336 -61.20000000000008 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -121.48202726980843 -61.785640646055185 + vertex -149.97246542984468 -121.15065641990998 -61.53137084989855 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -121.86791679764441 -61.945481322062584 + vertex -149.97246542984468 -121.48202726980843 -61.785640646055185 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -122.28202726980847 -62.00000000000008 + vertex -149.9724654298446 -121.86791679764441 -61.945481322062584 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex -149.97246542984468 -122.28202726980847 -62.00000000000008 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984482 -118.2820272698085 -62.20000000000009 + vertex -149.97246542984465 -124.34805267359289 -62.10000000000009 + vertex -149.97246542984482 -117.88202726980848 -62.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298443 -111.08202726980842 -43.00000000000008 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -107.09613774197244 -43.25451867793758 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + vertex -149.97246542984445 -107.09613774197244 -43.25451867793758 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -107.48202726980843 -43.414359353944974 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex -149.97246542984445 -107.09613774197244 -43.25451867793758 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -107.81339811970689 -43.66862915010161 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex -149.97246542984445 -107.48202726980843 -43.414359353944974 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984436 -108.06766791586355 -44.000000000000085 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex -149.97246542984445 -107.81339811970689 -43.66862915010161 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -108.22750859187097 -44.38588952783605 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex -149.97246542984436 -108.06766791586355 -44.000000000000085 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -108.88202726980842 -44.40000000000009 + vertex -149.97246542984442 -111.08202726980842 -44.40000000000008 + vertex -149.9724654298445 -108.22750859187097 -44.38588952783605 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + vertex -149.9724654298445 -108.88202726980842 -44.40000000000009 + vertex -149.9724654298445 -108.22750859187097 -44.38588952783605 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.9724654298445 -108.88202726980842 -44.40000000000009 + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -108.22750859187094 -45.21411047216414 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984453 -108.28202726980844 -44.800000000000104 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -108.06766791586354 -45.6000000000001 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984453 -108.22750859187094 -45.21411047216414 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -107.81339811970692 -45.93137084989857 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984453 -108.06766791586354 -45.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -107.4820272698084 -46.18564064605519 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984453 -107.81339811970692 -45.93137084989857 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -107.09613774197244 -46.345481322062604 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984453 -107.4820272698084 -46.18564064605519 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.9724654298445 -107.09613774197244 -46.345481322062604 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + vertex -149.97246542984468 -106.28202726980842 -49.200000000000074 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -104.88202726980845 -49.20000000000008 + vertex -149.97246542984468 -106.28202726980842 -49.200000000000074 + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + vertex -149.97246542984453 -104.51610144351935 -43.34118095489759 + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -106.26791679764443 -43.254518677937554 + vertex -149.97246542984445 -106.68202726980844 -43.20000000000008 + vertex -149.97246542984453 -104.51610144351935 -43.34118095489759 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984442 -105.88202726980843 -43.414359353944974 + vertex -149.9724654298445 -106.26791679764443 -43.254518677937554 + vertex -149.97246542984453 -104.51610144351935 -43.34118095489759 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + vertex -149.97246542984442 -105.88202726980843 -43.414359353944974 + vertex -149.97246542984453 -104.51610144351935 -43.34118095489759 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984442 -105.55065641990996 -43.66862915010159 + vertex -149.97246542984442 -105.88202726980843 -43.414359353944974 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -105.29638662375332 -44.00000000000006 + vertex -149.97246542984442 -105.55065641990996 -43.66862915010159 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + vertex -149.97246542984453 -105.29638662375332 -44.00000000000006 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + vertex -149.9724654298446 -104.48202726980843 -43.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -105.08202726980842 -44.80000000000006 + vertex -149.9724654298446 -105.1365459477459 -44.38588952783603 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -105.13654594774593 -45.214110472164094 + vertex -149.97246542984465 -105.08202726980842 -44.80000000000006 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -105.29638662375329 -45.60000000000008 + vertex -149.97246542984465 -105.13654594774593 -45.214110472164094 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -105.55065641990993 -45.93137084989855 + vertex -149.9724654298446 -105.29638662375329 -45.60000000000008 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -105.88202726980843 -46.18564064605519 + vertex -149.97246542984465 -105.55065641990993 -45.93137084989855 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -106.26791679764438 -46.34548132206258 + vertex -149.9724654298446 -105.88202726980843 -46.18564064605519 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + vertex -149.9724654298446 -106.26791679764438 -46.34548132206258 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.9724654298445 -106.6820272698084 -46.40000000000008 + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -108.31634184485917 -47.00000000000008 + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984476 -104.88202726980845 -48.80000000000008 + vertex -149.97246542984465 -106.28202726980845 -47.00000000000008 + vertex -149.97246542984473 -104.48202726980843 -48.80000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298441 -120.73654594774594 -44.38588952783607 + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + vertex -149.9724654298441 -120.68202726980842 -44.800000000000104 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + vertex -149.9724654298441 -120.68202726980842 -44.800000000000104 + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984414 -120.73654594774592 -45.21411047216414 + vertex -149.9724654298441 -120.68202726980842 -44.800000000000104 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984414 -120.89638662375333 -45.6000000000001 + vertex -149.97246542984414 -120.73654594774592 -45.21411047216414 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984414 -121.15065641990998 -45.93137084989857 + vertex -149.97246542984414 -120.89638662375333 -45.6000000000001 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -121.48202726980843 -46.18564064605521 + vertex -149.97246542984414 -121.15065641990998 -45.93137084989857 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -121.86791679764438 -46.345481322062625 + vertex -149.9724654298442 -121.48202726980843 -46.18564064605521 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + vertex -149.9724654298442 -121.86791679764438 -46.345481322062625 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -123.48202726980846 -42.600000000000065 + vertex -149.97246542984414 -118.28202726980841 -42.60000000000007 + vertex -149.97246542984396 -123.74084631491097 -42.63407417371101 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + vertex -149.97246542984396 -123.74084631491097 -42.63407417371101 + vertex -149.97246542984414 -118.28202726980841 -42.60000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -123.98202726980844 -42.73397459621563 + vertex -149.97246542984396 -123.74084631491097 -42.63407417371101 + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -124.189134050995 -42.89289321881352 + vertex -149.97246542984396 -123.98202726980844 -42.73397459621563 + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + vertex -149.97246542984396 -124.189134050995 -42.89289321881352 + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + vertex -149.972465429844 -118.28202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -121.86791679764443 -43.254518677937604 + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + vertex -149.972465429844 -121.86791679764443 -43.254518677937604 + vertex -149.97246542984414 -117.88202726980838 -43.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984405 -121.48202726980844 -43.414359353944995 + vertex -149.972465429844 -121.86791679764443 -43.254518677937604 + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984405 -121.15065641990998 -43.66862915010161 + vertex -149.97246542984405 -121.48202726980844 -43.414359353944995 + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298441 -120.89638662375336 -44.00000000000011 + vertex -149.97246542984405 -121.15065641990998 -43.66862915010161 + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298441 -120.73654594774594 -44.38588952783607 + vertex -149.9724654298441 -120.89638662375336 -44.00000000000011 + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298441 -120.08202726980845 -44.40000000000007 + vertex -149.9724654298441 -120.73654594774594 -44.38588952783607 + vertex -149.9724654298442 -117.88202726980845 -44.40000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -105.48202726980843 -42.60000000000009 + vertex -149.9724654298445 -105.2232082247059 -42.63407417371102 + vertex -149.97246542984436 -110.68202726980844 -42.600000000000094 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex -149.97246542984436 -110.68202726980844 -42.600000000000094 + vertex -149.9724654298445 -105.2232082247059 -42.63407417371102 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -104.98202726980846 -42.73397459621565 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex -149.9724654298445 -105.2232082247059 -42.63407417371102 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -104.77492048862187 -42.89289321881353 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex -149.9724654298445 -104.98202726980846 -42.73397459621565 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -104.61600186602399 -43.1000000000001 + vertex -149.97246542984436 -110.68202726980842 -43.00000000000009 + vertex -149.9724654298445 -104.77492048862187 -42.89289321881353 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -124.34805267359287 -43.100000000000065 + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + vertex -149.972465429844 -124.44795309609752 -43.34118095489755 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -122.69613774197249 -43.2545186779376 + vertex -149.972465429844 -124.44795309609752 -43.34118095489755 + vertex -149.97246542984405 -122.28202726980848 -43.20000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984405 -123.08202726980846 -43.414359353945 + vertex -149.972465429844 -124.44795309609752 -43.34118095489755 + vertex -149.972465429844 -122.69613774197249 -43.2545186779376 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex -149.972465429844 -124.44795309609752 -43.34118095489755 + vertex -149.97246542984405 -123.08202726980846 -43.414359353945 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298439 -123.41339811970694 -43.668629150101616 + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex -149.97246542984405 -123.08202726980846 -43.414359353945 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298439 -123.66766791586357 -44.000000000000114 + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex -149.9724654298439 -123.41339811970694 -43.668629150101616 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex -149.9724654298439 -123.66766791586357 -44.000000000000114 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.97246542984396 -124.48202726980841 -43.600000000000065 + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298439 -123.88202726980846 -44.80000000000011 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.972465429844 -123.82750859187097 -44.38588952783608 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298441 -123.82750859187097 -45.214110472164144 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.9724654298439 -123.88202726980846 -44.80000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984396 -123.66766791586357 -45.60000000000011 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.9724654298441 -123.82750859187097 -45.214110472164144 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984405 -123.41339811970691 -45.93137084989858 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.97246542984396 -123.66766791586357 -45.60000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984414 -123.08202726980846 -46.18564064605523 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.97246542984405 -123.41339811970691 -45.93137084989858 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -122.69613774197249 -46.345481322062625 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.97246542984414 -123.08202726980846 -46.18564064605523 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.972465429844 -122.69613774197249 -46.345481322062625 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + vertex -149.972465429844 -122.2820272698084 -46.40000000000013 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -124.08202726980844 -48.80000000000003 + vertex -149.9724654298442 -124.48202726980841 -48.80000000000003 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -122.68202726980844 -49.20000000000007 + vertex -149.9724654298442 -124.08202726980844 -48.80000000000003 + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -124.08202726980842 -49.20000000000003 + vertex -149.9724654298442 -124.08202726980844 -48.80000000000003 + vertex -149.9724654298442 -122.68202726980844 -49.20000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + vertex -149.9724654298446 -117.61634184485915 -56.300000000000075 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.9724654298446 -117.61634184485915 -56.300000000000075 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -120.08202726980842 -58.76568542494932 + vertex -149.97246542984465 -120.6477126947577 -58.20000000000009 + vertex -149.9724654298446 -117.61634184485915 -56.300000000000075 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298443 -124.08202726980846 -56.00000000000008 + vertex -149.97246542984445 -122.68202726980844 -56.00000000000009 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -122.68202726980844 -58.20000000000009 + vertex -149.97246542984442 -124.08202726980844 -56.40000000000008 + vertex -149.97246542984445 -122.68202726980844 -56.00000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -114.48202726980843 -49.90000000000009 + vertex -149.97246542984445 -115.18083869158525 -49.99200026901961 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -115.83202726980844 -50.26173140978212 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984445 -115.18083869158525 -49.99200026901961 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -116.39121557901213 -50.690811690796394 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984445 -115.83202726980844 -50.26173140978212 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -116.82029586002645 -51.25000000000008 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984445 -116.39121557901213 -50.690811690796394 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -117.09002700078894 -51.901188578223284 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984445 -116.82029586002645 -51.25000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984445 -117.09002700078894 -51.901188578223284 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -117.18202726980847 -52.60000000000009 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984445 -117.09002700078894 -51.901188578223284 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984442 -117.09002700078892 -53.29881142177688 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.9724654298445 -117.18202726980847 -52.60000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -116.82029586002643 -53.950000000000095 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984442 -117.09002700078892 -53.29881142177688 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -116.39121557901213 -54.50918830920377 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984453 -116.82029586002643 -53.950000000000095 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -115.83202726980842 -54.93826859021806 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984465 -116.39121557901213 -54.50918830920377 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -115.18083869158525 -55.20799973098057 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984453 -115.83202726980842 -54.93826859021806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -114.48202726980841 -55.30000000000008 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984468 -115.18083869158525 -55.20799973098057 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984468 -114.48202726980841 -55.30000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + vertex -149.9724654298446 -118.18202726980843 -55.734314575050846 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.97246542984487 -111.34771269475767 -56.30000000000007 + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.97246542984496 -108.31634184485918 -58.200000000000074 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984496 -111.08202726980844 -60.80000000000006 + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -108.22750859187093 -60.814110472164124 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429845 -108.06766791586358 -61.20000000000009 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984504 -108.22750859187093 -60.814110472164124 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -107.81339811970692 -61.531370849898586 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.972465429845 -108.06766791586358 -61.20000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -107.48202726980843 -61.7856406460552 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984513 -107.81339811970692 -61.531370849898586 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -107.09613774197244 -61.94548132206259 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984513 -107.48202726980843 -61.7856406460552 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -106.6820272698084 -62.00000000000009 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984513 -107.09613774197244 -61.94548132206259 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984513 -106.6820272698084 -62.00000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -110.68202726980842 -62.20000000000009 + vertex -149.97246542984504 -111.08202726980844 -62.20000000000008 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -104.77492048862187 -62.307106781186654 + vertex -149.97246542984504 -110.68202726980842 -62.20000000000009 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + vertex -149.97246542984504 -110.68202726980842 -62.20000000000009 + vertex -149.97246542984513 -104.77492048862187 -62.307106781186654 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984527 -104.98202726980846 -62.466025403784535 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + vertex -149.97246542984513 -104.77492048862187 -62.307106781186654 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984522 -105.22320822470594 -62.56592582628915 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + vertex -149.97246542984527 -104.98202726980846 -62.466025403784535 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984522 -105.48202726980847 -62.60000000000009 + vertex -149.97246542984504 -110.68202726980846 -62.60000000000009 + vertex -149.97246542984522 -105.22320822470594 -62.56592582628915 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984496 -106.28202726980842 -56.00000000000008 + vertex -149.972465429845 -104.8820272698084 -56.000000000000114 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429845 -104.88202726980843 -56.40000000000011 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.972465429845 -104.8820272698084 -56.000000000000114 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -104.48202726980846 -56.40000000000011 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.972465429845 -104.88202726980843 -56.40000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429845 -105.29638662375334 -59.60000000000007 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984504 -104.48202726980846 -56.40000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + vertex -149.972465429845 -105.29638662375334 -59.60000000000007 + vertex -149.97246542984504 -104.48202726980846 -56.40000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + vertex -149.97246542984504 -104.48202726980846 -56.40000000000011 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984507 -105.55065641990993 -59.2686291501016 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.972465429845 -105.29638662375334 -59.60000000000007 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -105.8820272698084 -59.01435935394496 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984507 -105.55065641990993 -59.2686291501016 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -106.26791679764439 -58.85451867793757 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984504 -105.8820272698084 -59.01435935394496 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984507 -106.68202726980849 -58.800000000000075 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984504 -106.26791679764439 -58.85451867793757 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.97246542984504 -106.28202726980845 -58.200000000000074 + vertex -149.97246542984507 -106.68202726980849 -58.800000000000075 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -105.08202726980842 -60.40000000000007 + vertex -149.97246542984513 -105.13654594774594 -59.98588952783604 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -105.1365459477459 -60.8141104721641 + vertex -149.97246542984504 -105.08202726980842 -60.40000000000007 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984507 -105.29638662375336 -61.20000000000007 + vertex -149.97246542984513 -105.1365459477459 -60.8141104721641 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298452 -105.55065641990993 -61.531370849898536 + vertex -149.97246542984507 -105.29638662375336 -61.20000000000007 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298452 -105.88202726980843 -61.78564064605518 + vertex -149.9724654298452 -105.55065641990993 -61.531370849898536 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -104.51610144351935 -61.858819045102614 + vertex -149.9724654298452 -105.88202726980843 -61.78564064605518 + vertex -149.97246542984522 -104.48202726980846 -61.6000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984522 -106.26791679764439 -61.94548132206259 + vertex -149.9724654298452 -105.88202726980843 -61.78564064605518 + vertex -149.97246542984513 -104.51610144351935 -61.858819045102614 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + vertex -149.97246542984522 -106.26791679764439 -61.94548132206259 + vertex -149.97246542984513 -104.51610144351935 -61.858819045102614 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984513 -106.6820272698084 -62.00000000000009 + vertex -149.97246542984522 -106.26791679764439 -61.94548132206259 + vertex -149.97246542984522 -104.61600186602399 -62.1000000000001 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984507 -106.68202726980849 -58.800000000000075 + vertex -149.97246542984496 -107.09613774197248 -58.85451867793757 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -107.48202726980844 -59.01435935394498 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.97246542984496 -107.09613774197248 -58.85451867793757 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298449 -107.81339811970695 -59.268629150101624 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.97246542984504 -107.48202726980844 -59.01435935394498 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.972465429845 -108.06766791586355 -59.600000000000094 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.9724654298449 -107.81339811970695 -59.268629150101624 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex -149.97246542984496 -108.88202726980845 -58.76568542494933 + vertex -149.972465429845 -108.06766791586355 -59.600000000000094 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984507 -108.22750859187097 -59.98588952783606 + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex -149.972465429845 -108.06766791586355 -59.600000000000094 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984496 -108.28202726980844 -60.40000000000009 + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex -149.97246542984507 -108.22750859187097 -59.98588952783606 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984504 -108.22750859187093 -60.814110472164124 + vertex -149.97246542984504 -108.8820272698084 -60.80000000000007 + vertex -149.97246542984496 -108.28202726980844 -60.40000000000009 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984428 -117.61634184485919 -48.90000000000006 + vertex -149.9724654298442 -120.64771269475769 -47.00000000000008 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298442 -122.68202726980844 -47.00000000000007 + vertex -149.9724654298442 -120.08202726980846 -46.434314575050806 + vertex -149.9724654298442 -120.64771269475769 -47.00000000000008 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.9724654298442 -120.64771269475769 -47.00000000000008 + vertex -149.97246542984428 -117.61634184485919 -48.90000000000006 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984428 -117.61634184485919 -48.90000000000006 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -114.48202726980843 -49.90000000000009 + vertex -149.97246542984436 -118.18202726980843 -49.46568542494934 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -113.78321584803162 -49.9920002690196 + vertex -149.97246542984445 -114.48202726980843 -49.90000000000009 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984453 -113.13202726980845 -50.26173140978211 + vertex -149.9724654298445 -113.78321584803162 -49.9920002690196 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984445 -112.57283896060474 -50.690811690796394 + vertex -149.97246542984453 -113.13202726980845 -50.26173140978211 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -112.14375867959048 -51.25000000000008 + vertex -149.97246542984445 -112.57283896060474 -50.690811690796394 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -111.87402753882795 -51.90118857822331 + vertex -149.9724654298446 -112.14375867959048 -51.25000000000008 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + vertex -149.97246542984465 -111.87402753882795 -51.90118857822331 + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984465 -111.78202726980844 -52.60000000000011 + vertex -149.97246542984465 -111.87402753882795 -51.90118857822331 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -111.87402753882799 -53.298811421776925 + vertex -149.97246542984465 -111.78202726980844 -52.60000000000011 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -112.14375867959046 -53.95000000000012 + vertex -149.97246542984473 -111.87402753882799 -53.298811421776925 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -112.57283896060477 -54.50918830920379 + vertex -149.97246542984468 -112.14375867959046 -53.95000000000012 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -113.13202726980845 -54.93826859021808 + vertex -149.97246542984473 -112.57283896060477 -54.50918830920379 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984473 -113.78321584803163 -55.20799973098057 + vertex -149.97246542984473 -113.13202726980845 -54.93826859021808 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.97246542984468 -114.48202726980841 -55.30000000000008 + vertex -149.97246542984473 -113.78321584803163 -55.20799973098057 + vertex -149.97246542984473 -110.78202726980844 -55.734314575050796 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298445 -108.88202726980842 -46.434314575050855 + vertex -149.9724654298446 -108.31634184485917 -47.00000000000008 + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + endloop +endfacet +facet normal -1.0 -6.470535773850401e-16 2.97504977010331e-16 + outer loop + vertex -149.9724654298446 -110.78202726980844 -49.465685424949335 + vertex -149.97246542984445 -111.3477126947577 -48.900000000000105 + vertex -149.9724654298446 -108.31634184485917 -47.00000000000008 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701538 -106.68202726980832 -58.80000000000016 + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex 150.0275345701538 -106.26791679764426 -58.854518677937655 + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex 150.0275345701538 -107.09613774197234 -58.854518677937655 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex 150.0275345701538 -105.88202726980832 -59.01435935394505 + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex 150.02753457015385 -107.48202726980831 -59.014359353945075 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015373 -105.55065641990981 -59.26862915010169 + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015382 -107.81339811970678 -59.26862915010171 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex 150.02753457015373 -105.29638662375318 -59.600000000000165 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex 150.02753457015382 -108.0676679158634 -59.600000000000186 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + vertex 150.02753457015373 -105.13654594774579 -59.98588952783613 + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + vertex 150.02753457015382 -108.22750859187082 -59.98588952783615 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + vertex 150.02753457015368 -105.0820272698083 -60.40000000000016 + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + vertex 150.0275345701538 -108.28202726980827 -60.40000000000018 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + vertex 150.0275345701537 -105.13654594774579 -60.814110472164195 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + vertex 150.0275345701538 -108.22750859187082 -60.81411047216422 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + vertex 150.02753457015368 -105.29638662375318 -61.20000000000016 + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + vertex 150.0275345701538 -108.0676679158634 -61.20000000000018 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + vertex 150.02753457015368 -105.5506564199098 -61.53137084989863 + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + vertex 150.02753457015373 -107.81339811970676 -61.53137084989868 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + vertex 150.02753457015368 -105.88202726980826 -61.78564064605527 + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + vertex 150.0275345701537 -107.48202726980828 -61.78564064605529 + endloop +endfacet +facet normal 1.0 6.456745138550019e-16 -2.970018574227154e-16 + outer loop + vertex 150.0275345701537 -106.68202726980827 -62.00000000000018 + vertex 150.02753457015365 -106.26791679764423 -61.94548132206268 + vertex 150.0275345701537 -107.09613774197227 -61.94548132206268 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015467 -117.88202726980836 -22.599999999999966 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015476 -121.86791679764441 -22.34548132206245 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015476 -121.86791679764441 -22.34548132206245 + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + vertex 150.02753457015487 -124.34805267359283 -22.49999999999997 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -121.86791679764441 -22.34548132206245 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015476 -121.4820272698084 -22.18564064605505 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015476 -121.4820272698084 -22.18564064605505 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015473 -121.15065641990992 -21.93137084989843 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -121.15065641990992 -21.93137084989843 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015473 -120.89638662375329 -21.599999999999934 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -120.89638662375329 -21.599999999999934 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015473 -120.7365459477459 -21.21411047216397 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -120.7365459477459 -21.21411047216397 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.0275345701547 -120.0820272698084 -21.199999999999957 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015473 -120.7365459477459 -21.21411047216397 + vertex 150.0275345701547 -120.0820272698084 -21.199999999999957 + vertex 150.0275345701547 -120.6820272698084 -20.799999999999937 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -120.6820272698084 -20.799999999999937 + vertex 150.0275345701547 -120.0820272698084 -21.199999999999957 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701547 -120.6820272698084 -20.799999999999937 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015467 -120.7365459477459 -20.385889527835904 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -120.7365459477459 -20.385889527835904 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015467 -120.89638662375332 -19.99999999999994 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -120.89638662375332 -19.99999999999994 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015467 -121.15065641990991 -19.668629150101474 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -121.15065641990991 -19.668629150101474 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015464 -121.4820272698084 -19.414359353944835 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015464 -121.4820272698084 -19.414359353944835 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015467 -121.86791679764434 -19.254518677937423 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -121.86791679764434 -19.254518677937423 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -105.2232082247059 -22.965925826289016 + vertex 150.0275345701545 -110.6820272698084 -22.999999999999954 + vertex 150.02753457015433 -105.48202726980843 -22.999999999999954 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701545 -110.6820272698084 -22.999999999999954 + vertex 150.02753457015433 -105.2232082247059 -22.965925826289016 + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex 150.02753457015433 -105.2232082247059 -22.965925826289016 + vertex 150.02753457015433 -104.98202726980841 -22.866025403784388 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex 150.02753457015433 -104.98202726980841 -22.866025403784388 + vertex 150.0275345701543 -104.77492048862183 -22.7071067811865 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex 150.0275345701543 -104.77492048862183 -22.7071067811865 + vertex 150.0275345701543 -104.61600186602392 -22.49999999999995 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex 150.0275345701543 -104.61600186602392 -22.49999999999995 + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + vertex 150.0275345701543 -104.61600186602392 -22.49999999999995 + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + vertex 150.02753457015433 -107.09613774197244 -22.345481322062458 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + vertex 150.02753457015433 -107.09613774197244 -22.345481322062458 + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + vertex 150.02753457015433 -107.09613774197244 -22.345481322062458 + vertex 150.0275345701544 -107.48202726980838 -22.185640646055052 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + vertex 150.0275345701544 -107.48202726980838 -22.185640646055052 + vertex 150.02753457015433 -107.81339811970687 -21.931370849898414 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + vertex 150.02753457015433 -107.81339811970687 -21.931370849898414 + vertex 150.02753457015433 -108.06766791586351 -21.599999999999945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + vertex 150.02753457015433 -108.06766791586351 -21.599999999999945 + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + vertex 150.02753457015433 -108.8820272698084 -21.199999999999946 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.8820272698084 -21.199999999999946 + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + vertex 150.02753457015433 -108.2820272698084 -20.799999999999926 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -108.8820272698084 -21.199999999999946 + vertex 150.02753457015433 -108.2820272698084 -20.799999999999926 + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015433 -108.2820272698084 -20.799999999999926 + vertex 150.02753457015433 -108.2275085918709 -20.385889527835893 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015433 -108.2275085918709 -20.385889527835893 + vertex 150.0275345701543 -108.06766791586348 -19.999999999999925 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.0275345701543 -108.06766791586348 -19.999999999999925 + vertex 150.02753457015427 -107.81339811970685 -19.668629150101452 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015427 -107.81339811970685 -19.668629150101452 + vertex 150.02753457015424 -107.48202726980838 -19.41435935394484 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015424 -107.48202726980838 -19.41435935394484 + vertex 150.02753457015422 -107.09613774197241 -19.254518677937433 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015422 -107.09613774197241 -19.254518677937433 + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + vertex 150.0275345701538 -104.48202726980841 -9.19999999999993 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex 150.02753457015388 -111.08202726980838 -4.799999999999969 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015388 -111.08202726980838 -4.799999999999969 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + vertex 150.02753457015376 -110.6820272698084 -2.999999999999924 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -110.6820272698084 -2.999999999999924 + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + vertex 150.0275345701536 -104.98202726980841 -3.1339745962155057 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -110.6820272698084 -2.999999999999924 + vertex 150.0275345701536 -104.98202726980841 -3.1339745962155057 + vertex 150.0275345701536 -105.2232082247059 -3.034074173710881 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015376 -110.6820272698084 -2.999999999999924 + vertex 150.0275345701536 -105.2232082247059 -3.034074173710881 + vertex 150.02753457015356 -105.4820272698084 -2.9999999999999436 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.02753457015444 -117.61634184485915 -16.699999999999974 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex 150.02753457015444 -117.61634184485915 -16.699999999999974 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015444 -117.61634184485915 -16.699999999999974 + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.02753457015433 -114.48202726980838 -15.699999999999937 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -114.48202726980838 -15.699999999999937 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.0275345701543 -113.78321584803157 -15.607999730980426 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701543 -113.78321584803157 -15.607999730980426 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.02753457015424 -113.1320272698084 -15.338268590217929 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -113.1320272698084 -15.338268590217929 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.02753457015422 -112.5728389606047 -14.90918830920364 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -112.5728389606047 -14.90918830920364 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.02753457015422 -112.14375867959042 -14.349999999999962 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -112.14375867959042 -14.349999999999962 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.02753457015416 -111.78202726980841 -12.999999999999954 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -111.78202726980841 -12.999999999999954 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.0275345701541 -111.8740275388279 -12.301188578223135 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -111.8740275388279 -12.301188578223135 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.0275345701541 -112.14375867959043 -11.649999999999945 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -112.14375867959043 -11.649999999999945 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.0275345701541 -112.57283896060473 -11.090811690796267 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -112.57283896060473 -11.090811690796267 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.0275345701541 -113.1320272698084 -10.661731409781979 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -113.1320272698084 -10.661731409781979 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.0275345701541 -113.78321584803157 -10.392000269019471 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -113.78321584803157 -10.392000269019471 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.02753457015413 -114.48202726980841 -10.299999999999962 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015487 -123.4820272698084 -22.999999999999968 + vertex 150.02753457015473 -118.28202726980835 -22.999999999999964 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -123.4820272698084 -22.999999999999968 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015487 -123.74084631491093 -22.96592582628903 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -123.74084631491093 -22.96592582628903 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015487 -123.9820272698084 -22.866025403784406 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -123.9820272698084 -22.866025403784406 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015487 -124.18913405099492 -22.70710678118652 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015487 -124.18913405099492 -22.70710678118652 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015487 -124.34805267359283 -22.49999999999997 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + vertex 150.0275345701543 -104.61600186602392 -22.49999999999995 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex 150.02753457015433 -106.26791679764438 -22.34548132206248 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -106.26791679764438 -22.34548132206248 + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex 150.02753457015433 -105.88202726980838 -22.185640646055063 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -105.88202726980838 -22.185640646055063 + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -105.88202726980838 -22.185640646055063 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + vertex 150.02753457015427 -105.55065641990991 -21.93137084989845 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -105.55065641990991 -21.93137084989845 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + vertex 150.02753457015424 -105.29638662375328 -21.599999999999977 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -105.29638662375328 -21.599999999999977 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + vertex 150.02753457015427 -105.13654594774587 -21.21411047216401 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -105.13654594774587 -21.21411047216401 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -105.13654594774587 -21.21411047216401 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015422 -105.08202726980836 -20.79999999999998 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -105.08202726980836 -20.79999999999998 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015424 -105.13654594774586 -20.385889527835946 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -105.13654594774586 -20.385889527835946 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015422 -105.29638662375328 -19.999999999999957 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -105.29638662375328 -19.999999999999957 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.0275345701542 -105.55065641990991 -19.668629150101488 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -105.55065641990991 -19.668629150101488 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015422 -105.88202726980838 -19.41435935394485 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -105.88202726980838 -19.41435935394485 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015422 -106.26791679764435 -19.254518677937455 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -106.26791679764435 -19.254518677937455 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.0275345701541 -104.8820272698084 -16.799999999999965 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + vertex 150.0275345701541 -104.8820272698084 -16.799999999999965 + vertex 150.0275345701541 -106.28202726980841 -16.399999999999963 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -106.28202726980841 -16.399999999999963 + vertex 150.0275345701541 -104.8820272698084 -16.799999999999965 + vertex 150.02753457015407 -104.88202726980839 -16.399999999999963 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015436 -116.82029586002639 -14.349999999999968 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015436 -116.82029586002639 -14.349999999999968 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015433 -116.39121557901207 -14.909188309203646 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -116.39121557901207 -14.909188309203646 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015433 -115.83202726980839 -15.33826859021793 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -115.83202726980839 -15.33826859021793 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015433 -115.18083869158518 -15.60799973098044 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015433 -115.18083869158518 -15.60799973098044 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + vertex 150.02753457015433 -114.48202726980838 -15.699999999999937 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex 150.02753457015433 -117.1820272698084 -12.99999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015433 -117.1820272698084 -12.99999999999996 + vertex 150.02753457015424 -117.09002700078888 -12.301188578223162 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015424 -117.09002700078888 -12.301188578223162 + vertex 150.02753457015424 -116.82029586002639 -11.649999999999949 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015424 -116.82029586002639 -11.649999999999949 + vertex 150.02753457015422 -116.3912155790121 -11.09081169079627 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015422 -116.3912155790121 -11.09081169079627 + vertex 150.02753457015416 -115.83202726980839 -10.661731409781982 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015416 -115.83202726980839 -10.661731409781982 + vertex 150.02753457015416 -115.18083869158521 -10.392000269019473 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015416 -115.18083869158521 -10.392000269019473 + vertex 150.02753457015413 -114.48202726980841 -10.299999999999962 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015413 -114.48202726980841 -10.299999999999962 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015385 -104.88202726980839 -9.599999999999929 + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.02753457015388 -106.28202726980838 -9.599999999999953 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.02753457015385 -104.88202726980839 -9.599999999999929 + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.02753457015416 -117.61634184485912 -9.299999999999965 + vertex 150.0275345701542 -120.64771269475769 -7.39999999999995 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -117.61634184485912 -9.299999999999965 + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -120.64771269475769 -7.39999999999995 + vertex 150.02753457015416 -117.61634184485912 -9.299999999999965 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -120.64771269475769 -7.39999999999995 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + vertex 150.02753457015405 -117.8820272698084 -4.799999999999952 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.0275345701541 -120.7365459477459 -4.785889527835922 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -120.7365459477459 -4.785889527835922 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.0275345701541 -120.89638662375327 -4.399999999999955 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -120.89638662375327 -4.399999999999955 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.0275345701541 -121.15065641990991 -4.068629150101484 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -121.15065641990991 -4.068629150101484 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.0275345701541 -121.48202726980837 -3.814359353944847 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701541 -121.48202726980837 -3.814359353944847 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.02753457015407 -121.86791679764434 -3.654518677937452 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015407 -121.86791679764434 -3.654518677937452 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.02753457015413 -122.2820272698084 -3.5999999999999566 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -122.2820272698084 -3.5999999999999566 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.027534570154 -118.28202726980842 -3.399999999999954 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + vertex 150.027534570154 -118.28202726980842 -3.399999999999954 + vertex 150.0275345701542 -124.18913405099494 -3.2928932188133984 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -124.18913405099494 -3.2928932188133984 + vertex 150.027534570154 -118.28202726980842 -3.399999999999954 + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -124.18913405099494 -3.2928932188133984 + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex 150.02753457015416 -123.9820272698084 -3.133974596215514 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -123.9820272698084 -3.133974596215514 + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex 150.02753457015416 -123.74084631491093 -3.034074173710887 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -123.74084631491093 -3.034074173710887 + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex 150.02753457015413 -123.48202726980841 -2.9999999999999494 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015436 -122.6820272698084 -9.599999999999923 + vertex 150.0275345701544 -124.08202726980842 -9.19999999999996 + vertex 150.0275345701544 -124.08202726980842 -9.59999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -124.08202726980842 -9.19999999999996 + vertex 150.02753457015436 -122.6820272698084 -9.599999999999923 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701544 -124.08202726980842 -9.19999999999996 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015442 -124.48202726980841 -9.19999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015442 -124.48202726980841 -9.19999999999996 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015424 -123.66766791586353 -5.999999999999944 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015442 -124.48202726980841 -9.19999999999996 + vertex 150.02753457015424 -123.66766791586353 -5.999999999999944 + vertex 150.02753457015422 -123.82750859187092 -5.614110472163954 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015442 -124.48202726980841 -9.19999999999996 + vertex 150.02753457015422 -123.82750859187092 -5.614110472163954 + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -123.66766791586353 -5.999999999999944 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015424 -123.41339811970688 -6.331370849898415 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -123.41339811970688 -6.331370849898415 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015424 -123.08202726980842 -6.585640646055053 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -123.08202726980842 -6.585640646055053 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015424 -122.69613774197245 -6.7454813220624334 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -122.69613774197245 -6.7454813220624334 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015422 -122.28202726980842 -6.799999999999951 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -122.28202726980842 -6.799999999999951 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015422 -123.82750859187092 -5.614110472163954 + vertex 150.02753457015422 -123.88202726980842 -5.199999999999923 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015422 -123.88202726980842 -5.199999999999923 + vertex 150.02753457015422 -123.82750859187092 -4.785889527835891 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015422 -123.82750859187092 -4.785889527835891 + vertex 150.02753457015422 -123.6676679158635 -4.399999999999924 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015422 -123.6676679158635 -4.399999999999924 + vertex 150.02753457015413 -123.41339811970687 -4.068629150101453 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015413 -123.41339811970687 -4.068629150101453 + vertex 150.02753457015413 -123.08202726980839 -3.8143593539448384 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015413 -123.08202726980839 -3.8143593539448384 + vertex 150.02753457015422 -124.44795309609748 -3.741180954897436 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.44795309609748 -3.741180954897436 + vertex 150.02753457015413 -123.08202726980839 -3.8143593539448384 + vertex 150.0275345701541 -122.69613774197242 -3.654518677937407 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -124.44795309609748 -3.741180954897436 + vertex 150.0275345701541 -122.69613774197242 -3.654518677937407 + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + vertex 150.0275345701541 -122.69613774197242 -3.654518677937407 + vertex 150.02753457015413 -122.2820272698084 -3.5999999999999566 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex 150.02753457015422 -121.86791679764437 -6.745481322062478 + vertex 150.02753457015422 -122.28202726980842 -6.799999999999951 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -121.86791679764437 -6.745481322062478 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex 150.02753457015422 -121.48202726980843 -6.585640646055061 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015422 -121.48202726980843 -6.585640646055061 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex 150.0275345701542 -121.15065641990992 -6.3313708498984465 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701542 -121.15065641990992 -6.3313708498984465 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex 150.02753457015416 -120.89638662375332 -5.999999999999975 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -120.89638662375332 -5.999999999999975 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015416 -120.89638662375332 -5.999999999999975 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + vertex 150.02753457015413 -120.73654594774587 -5.6141104721640085 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -120.73654594774587 -5.6141104721640085 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + vertex 150.02753457015413 -120.68202726980837 -5.199999999999976 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015413 -120.68202726980837 -5.199999999999976 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + vertex 150.0275345701541 -120.7365459477459 -4.785889527835922 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015424 -108.31634184485912 -18.599999999999948 + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -108.31634184485912 -18.599999999999948 + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + vertex 150.02753457015424 -108.31634184485912 -18.599999999999948 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.0275345701546 -122.6820272698084 -16.39999999999998 + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + vertex 150.0275345701546 -122.6820272698084 -16.39999999999998 + vertex 150.02753457015464 -124.08202726980836 -16.400000000000002 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex 150.02753457015487 -124.34805267359283 -22.49999999999997 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + vertex 150.02753457015478 -122.69613774197245 -22.34548132206245 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex 150.02753457015478 -122.69613774197245 -22.34548132206245 + vertex 150.02753457015484 -123.08202726980844 -22.185640646055035 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex 150.02753457015484 -123.08202726980844 -22.185640646055035 + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + vertex 150.02753457015484 -123.08202726980844 -22.185640646055035 + vertex 150.0275345701548 -123.41339811970688 -21.93137084989842 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + vertex 150.0275345701548 -123.41339811970688 -21.93137084989842 + vertex 150.02753457015478 -123.66766791586353 -21.599999999999927 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + vertex 150.02753457015478 -123.66766791586353 -21.599999999999927 + vertex 150.0275345701548 -123.82750859187092 -21.21411047216396 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + vertex 150.0275345701548 -123.82750859187092 -21.21411047216396 + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.0275345701548 -123.82750859187092 -21.21411047216396 + vertex 150.02753457015476 -123.88202726980839 -20.79999999999993 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015476 -123.88202726980839 -20.79999999999993 + vertex 150.02753457015476 -123.82750859187092 -20.385889527835896 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015476 -123.82750859187092 -20.385889527835896 + vertex 150.02753457015476 -123.6676679158635 -19.99999999999993 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015476 -123.6676679158635 -19.99999999999993 + vertex 150.0275345701547 -123.41339811970687 -19.66862915010146 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.0275345701547 -123.41339811970687 -19.66862915010146 + vertex 150.02753457015473 -123.08202726980839 -19.41435935394482 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015473 -123.08202726980839 -19.41435935394482 + vertex 150.02753457015467 -122.69613774197242 -19.254518677937426 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015467 -122.69613774197242 -19.254518677937426 + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + endloop +endfacet +facet normal 1.0 4.59687843346329e-19 2.9750497701033086e-16 + outer loop + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.972465429844 -123.4820272698084 -23.000000000000057 + vertex 150.02753457015473 -118.28202726980835 -22.999999999999964 + vertex 150.02753457015487 -123.4820272698084 -22.999999999999968 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015473 -118.28202726980835 -22.999999999999964 + vertex -149.972465429844 -123.4820272698084 -23.000000000000057 + vertex -149.9724654298442 -118.28202726980831 -23.000000000000053 + endloop +endfacet +facet normal 4.164649241083378e-14 -0.1305261922200722 -0.9914448613738078 + outer loop + vertex -149.972465429844 -123.74084631491088 -22.96592582628912 + vertex 150.02753457015487 -123.4820272698084 -22.999999999999968 + vertex 150.02753457015487 -123.74084631491093 -22.96592582628903 + endloop +endfacet +facet normal 4.164649241083378e-14 -0.1305261922200722 -0.9914448613738078 + outer loop + vertex 150.02753457015487 -123.4820272698084 -22.999999999999968 + vertex -149.972465429844 -123.74084631491088 -22.96592582628912 + vertex -149.972465429844 -123.4820272698084 -23.000000000000057 + endloop +endfacet +facet normal 3.5926213864307125e-14 4.538832183921785e-15 -1.0 + outer loop + vertex -149.97246542984428 -117.61634184485911 -16.700000000000063 + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + vertex 150.02753457015444 -117.61634184485915 -16.699999999999974 + endloop +endfacet +facet normal 3.5926213864307125e-14 4.538832183921785e-15 -1.0 + outer loop + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + vertex -149.97246542984428 -117.61634184485911 -16.700000000000063 + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + endloop +endfacet +facet normal 5.513731934900517e-14 -0.38268343236508134 -0.9238795325112904 + outer loop + vertex -149.972465429844 -123.98202726980837 -22.86602540378449 + vertex 150.02753457015487 -123.74084631491093 -22.96592582628903 + vertex 150.02753457015487 -123.9820272698084 -22.866025403784406 + endloop +endfacet +facet normal 5.513731934900517e-14 -0.38268343236508134 -0.9238795325112904 + outer loop + vertex 150.02753457015487 -123.74084631491093 -22.96592582628903 + vertex -149.972465429844 -123.98202726980837 -22.86602540378449 + vertex -149.972465429844 -123.74084631491088 -22.96592582628912 + endloop +endfacet +facet normal 5.200343766171889e-14 -0.6087614290087036 -0.7933533402912483 + outer loop + vertex -149.972465429844 -124.1891340509949 -22.70710678118661 + vertex 150.02753457015487 -123.9820272698084 -22.866025403784406 + vertex 150.02753457015487 -124.18913405099492 -22.70710678118652 + endloop +endfacet +facet normal 5.200343766171889e-14 -0.6087614290087036 -0.7933533402912483 + outer loop + vertex 150.02753457015487 -123.9820272698084 -22.866025403784406 + vertex -149.972465429844 -124.1891340509949 -22.70710678118661 + vertex -149.972465429844 -123.98202726980837 -22.86602540378449 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 7.797766215937039e-16 + outer loop + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex 150.0275345701546 -122.6820272698084 -16.39999999999998 + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 7.797766215937039e-16 + outer loop + vertex 150.0275345701546 -122.6820272698084 -16.39999999999998 + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex -149.97246542984422 -122.68202726980837 -16.400000000000063 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 6.227439144697608e-15 + outer loop + vertex -149.9724654298442 -118.28202726980831 -23.000000000000053 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex 150.02753457015473 -118.28202726980835 -22.999999999999964 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 6.227439144697608e-15 + outer loop + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + vertex -149.9724654298442 -118.28202726980831 -23.000000000000053 + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex 150.0275345701547 -120.0820272698084 -21.199999999999957 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex -149.97246542984453 -108.88202726980833 -21.200000000000035 + vertex 150.02753457015433 -108.8820272698084 -21.199999999999946 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984453 -108.88202726980833 -21.200000000000035 + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex 150.02753457015467 -122.6820272698084 -18.599999999999977 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex -149.97246542984422 -120.64771269475759 -18.60000000000005 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + vertex 150.0275345701547 -120.0820272698084 -21.199999999999957 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex -149.97246542984442 -110.68202726980837 -23.000000000000036 + vertex 150.0275345701545 -110.6820272698084 -22.999999999999954 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984442 -110.68202726980837 -23.000000000000036 + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + endloop +endfacet +facet normal 4.6599210313486674e-14 -0.9238795325112916 -0.38268343236507846 + outer loop + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + vertex 150.02753457015487 -124.34805267359283 -22.49999999999997 + endloop +endfacet +facet normal 4.6599210313486674e-14 -0.9238795325112916 -0.38268343236507846 + outer loop + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex -149.97246542984405 -124.44795309609744 -22.258819045102573 + endloop +endfacet +facet normal 1.2048156260518037e-15 -0.7071067811865512 0.7071067811865439 + outer loop + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + endloop +endfacet +facet normal 1.2048156260518037e-15 -0.7071067811865512 0.7071067811865439 + outer loop + vertex 150.02753457015461 -120.64771269475763 -18.599999999999962 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.97246542984422 -120.64771269475759 -18.60000000000005 + endloop +endfacet +facet normal -1.2048156260517146e-15 0.7071067811865481 -0.707106781186547 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex 150.02753457015444 -117.61634184485915 -16.699999999999974 + vertex 150.02753457015456 -120.0820272698084 -19.165685424949217 + endloop +endfacet +facet normal -1.2048156260517146e-15 0.7071067811865481 -0.707106781186547 + outer loop + vertex 150.02753457015444 -117.61634184485915 -16.699999999999974 + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.97246542984428 -117.61634184485911 -16.700000000000063 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + vertex -149.97246542984422 -124.08202726980835 -16.80000000000009 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984436 -111.08202726980832 -22.600000000000048 + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015444 -110.68202726980837 -22.599999999999955 + vertex -149.97246542984436 -111.08202726980832 -22.600000000000048 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + endloop +endfacet +facet normal -3.592621386430645e-14 -1.7054096175908568e-14 1.0 + outer loop + vertex 150.0275345701546 -122.6820272698084 -16.39999999999998 + vertex -149.97246542984422 -124.08202726980832 -16.400000000000095 + vertex 150.02753457015464 -124.08202726980836 -16.400000000000002 + endloop +endfacet +facet normal -3.592621386430645e-14 -1.7054096175908568e-14 1.0 + outer loop + vertex -149.97246542984422 -124.08202726980832 -16.400000000000095 + vertex 150.0275345701546 -122.6820272698084 -16.39999999999998 + vertex -149.97246542984422 -122.68202726980837 -16.400000000000063 + endloop +endfacet +facet normal 4.512572649034336e-14 -0.7071067811865448 -0.7071067811865503 + outer loop + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex 150.02753457015424 -111.34771269475765 -16.699999999999946 + endloop +endfacet +facet normal 4.512572649034336e-14 -0.7071067811865448 -0.7071067811865503 + outer loop + vertex 150.02753457015427 -108.88202726980838 -19.165685424949185 + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + endloop +endfacet +facet normal 3.1555025696319064e-14 0.13052619222007428 -0.9914448613738074 + outer loop + vertex -149.9724654298445 -105.48202726980834 -23.00000000000004 + vertex 150.02753457015433 -105.2232082247059 -22.965925826289016 + vertex 150.02753457015433 -105.48202726980843 -22.999999999999954 + endloop +endfacet +facet normal 3.1555025696319064e-14 0.13052619222007428 -0.9914448613738074 + outer loop + vertex 150.02753457015433 -105.2232082247059 -22.965925826289016 + vertex -149.9724654298445 -105.48202726980834 -23.00000000000004 + vertex -149.97246542984453 -105.2232082247058 -22.9659258262891 + endloop +endfacet +facet normal 2.0504249361719442e-14 0.3826834323650829 -0.9238795325112896 + outer loop + vertex -149.97246542984453 -105.2232082247058 -22.9659258262891 + vertex 150.02753457015433 -104.98202726980841 -22.866025403784388 + vertex 150.02753457015433 -105.2232082247059 -22.965925826289016 + endloop +endfacet +facet normal 2.0504249361719442e-14 0.3826834323650829 -0.9238795325112896 + outer loop + vertex 150.02753457015433 -104.98202726980841 -22.866025403784388 + vertex -149.97246542984453 -105.2232082247058 -22.9659258262891 + vertex -149.97246542984453 -104.98202726980836 -22.866025403784477 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 2.4387889803801356e-15 + outer loop + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + vertex 150.02753457015467 -124.48202726980837 -16.800000000000004 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 2.4387889803801356e-15 + outer loop + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + vertex 150.02753457015467 -117.88202726980836 -22.599999999999966 + vertex 150.02753457015467 -118.28202726980835 -22.599999999999966 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015467 -117.88202726980836 -22.599999999999966 + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + endloop +endfacet +facet normal 3.881934011071542e-14 -0.9914448613738096 -0.1305261922200573 + outer loop + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex 150.02753457015484 -124.48202726980841 -21.99999999999997 + endloop +endfacet +facet normal 3.881934011071542e-14 -0.9914448613738096 -0.1305261922200573 + outer loop + vertex 150.02753457015484 -124.44795309609745 -22.25881904510248 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + vertex -149.97246542984405 -124.44795309609744 -22.258819045102573 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015447 -111.08202726980838 -22.59999999999996 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.97246542984436 -111.08202726980832 -22.600000000000048 + endloop +endfacet +facet normal 1.14378780311469e-14 0.6087614290087051 -0.7933533402912472 + outer loop + vertex -149.97246542984453 -104.98202726980836 -22.866025403784477 + vertex 150.0275345701543 -104.77492048862183 -22.7071067811865 + vertex 150.02753457015433 -104.98202726980841 -22.866025403784388 + endloop +endfacet +facet normal 1.14378780311469e-14 0.6087614290087051 -0.7933533402912472 + outer loop + vertex 150.0275345701543 -104.77492048862183 -22.7071067811865 + vertex -149.97246542984453 -104.98202726980836 -22.866025403784477 + vertex -149.97246542984453 -104.77492048862179 -22.707106781186592 + endloop +endfacet +facet normal 1.1474086062760138e-15 0.7933533402912367 -0.6087614290087189 + outer loop + vertex 150.0275345701543 -104.77492048862183 -22.7071067811865 + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + vertex 150.0275345701543 -104.61600186602392 -22.49999999999995 + endloop +endfacet +facet normal 1.1474086062760138e-15 0.7933533402912367 -0.6087614290087189 + outer loop + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + vertex 150.0275345701543 -104.77492048862183 -22.7071067811865 + vertex -149.97246542984453 -104.77492048862179 -22.707106781186592 + endloop +endfacet +facet normal 3.7893401050872254e-14 -0.7933533402912385 -0.6087614290087162 + outer loop + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + vertex 150.02753457015487 -124.18913405099492 -22.70710678118652 + vertex 150.02753457015487 -124.34805267359283 -22.49999999999997 + endloop +endfacet +facet normal 3.7893401050872254e-14 -0.7933533402912385 -0.6087614290087162 + outer loop + vertex 150.02753457015487 -124.18913405099492 -22.70710678118652 + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + vertex -149.972465429844 -124.1891340509949 -22.70710678118661 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.122523745489034e-14 + outer loop + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex 150.02753457015467 -117.88202726980836 -22.599999999999966 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.122523745489034e-14 + outer loop + vertex 150.02753457015464 -117.8820272698084 -21.199999999999967 + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -6.007129263248553e-15 + outer loop + vertex -149.97246542984422 -124.08202726980832 -16.400000000000095 + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + vertex 150.02753457015464 -124.08202726980836 -16.400000000000002 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -6.007129263248553e-15 + outer loop + vertex 150.02753457015464 -124.08202726980839 -16.800000000000004 + vertex -149.97246542984422 -124.08202726980832 -16.400000000000095 + vertex -149.97246542984422 -124.08202726980835 -16.80000000000009 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015433 -108.8820272698084 -21.199999999999946 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex 150.02753457015444 -111.08202726980835 -21.19999999999996 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex 150.02753457015433 -108.8820272698084 -21.199999999999946 + vertex -149.97246542984453 -108.88202726980833 -21.200000000000035 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984442 -110.68202726980837 -23.000000000000036 + vertex 150.02753457015433 -105.48202726980843 -22.999999999999954 + vertex 150.0275345701545 -110.6820272698084 -22.999999999999954 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015433 -105.48202726980843 -22.999999999999954 + vertex -149.97246542984442 -110.68202726980837 -23.000000000000036 + vertex -149.9724654298445 -105.48202726980834 -23.00000000000004 + endloop +endfacet +facet normal -4.164649241083345e-14 0.13052619222006093 0.9914448613738092 + outer loop + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + vertex -149.9724654298445 -107.09613774197234 -22.345481322062547 + vertex 150.02753457015433 -107.09613774197244 -22.345481322062458 + endloop +endfacet +facet normal -4.164649241083345e-14 0.13052619222006093 0.9914448613738092 + outer loop + vertex -149.9724654298445 -107.09613774197234 -22.345481322062547 + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + endloop +endfacet +facet normal -3.881934011071544e-14 0.9914448613738105 -0.13052619222005132 + outer loop + vertex -149.97246542984453 -117.18202726980839 -13.000000000000046 + vertex 150.02753457015424 -117.09002700078888 -12.301188578223162 + vertex 150.02753457015433 -117.1820272698084 -12.99999999999996 + endloop +endfacet +facet normal -3.881934011071544e-14 0.9914448613738105 -0.13052619222005132 + outer loop + vertex 150.02753457015424 -117.09002700078888 -12.301188578223162 + vertex -149.97246542984453 -117.18202726980839 -13.000000000000046 + vertex -149.97246542984445 -117.09002700078882 -12.30118857822325 + endloop +endfacet +facet normal -5.200343766171888e-14 0.6087614290087029 0.7933533402912488 + outer loop + vertex 150.02753457015433 -115.83202726980839 -15.33826859021793 + vertex -149.9724654298445 -116.39121557901203 -14.909188309203735 + vertex 150.02753457015433 -116.39121557901207 -14.909188309203646 + endloop +endfacet +facet normal -5.200343766171888e-14 0.6087614290087029 0.7933533402912488 + outer loop + vertex -149.9724654298445 -116.39121557901203 -14.909188309203735 + vertex 150.02753457015433 -115.83202726980839 -15.33826859021793 + vertex -149.9724654298445 -115.83202726980835 -15.338268590218007 + endloop +endfacet +facet normal -7.558400656338414e-15 0.9238795325112905 -0.38268343236508096 + outer loop + vertex 150.02753457015424 -117.09002700078888 -12.301188578223162 + vertex -149.9724654298446 -116.82029586002633 -11.650000000000038 + vertex 150.02753457015424 -116.82029586002639 -11.649999999999949 + endloop +endfacet +facet normal -7.558400656338414e-15 0.9238795325112905 -0.38268343236508096 + outer loop + vertex -149.9724654298446 -116.82029586002633 -11.650000000000038 + vertex 150.02753457015424 -117.09002700078888 -12.301188578223162 + vertex -149.97246542984445 -117.09002700078882 -12.30118857822325 + endloop +endfacet +facet normal -1.7318603070625494e-14 0.9238795325112914 -0.38268343236507907 + outer loop + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex 150.0275345701543 -104.61600186602392 -22.49999999999995 + endloop +endfacet +facet normal -1.7318603070625494e-14 0.9238795325112914 -0.38268343236507907 + outer loop + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + vertex -149.9724654298446 -104.51610144351925 -22.25881904510254 + endloop +endfacet +facet normal 3.3995076299891674e-14 0.1305261922200452 -0.9914448613738114 + outer loop + vertex -149.97246542984473 -115.18083869158517 -10.392000269019562 + vertex 150.02753457015413 -114.48202726980841 -10.299999999999962 + vertex 150.02753457015416 -115.18083869158521 -10.392000269019473 + endloop +endfacet +facet normal 3.3995076299891674e-14 0.1305261922200452 -0.9914448613738114 + outer loop + vertex 150.02753457015413 -114.48202726980841 -10.299999999999962 + vertex -149.97246542984473 -115.18083869158517 -10.392000269019562 + vertex -149.97246542984473 -114.48202726980833 -10.30000000000005 + endloop +endfacet +facet normal 5.200343766171888e-14 -0.6087614290087029 -0.7933533402912488 + outer loop + vertex -149.97246542984476 -113.13202726980836 -10.661731409782044 + vertex 150.0275345701541 -112.57283896060473 -11.090811690796267 + vertex 150.0275345701541 -113.1320272698084 -10.661731409781979 + endloop +endfacet +facet normal 5.200343766171888e-14 -0.6087614290087029 -0.7933533402912488 + outer loop + vertex 150.0275345701541 -112.57283896060473 -11.090811690796267 + vertex -149.97246542984476 -113.13202726980836 -10.661731409782044 + vertex -149.97246542984476 -112.57283896060468 -11.090811690796333 + endloop +endfacet +facet normal -5.63594127277737e-14 0.9238795325112905 0.382683432365081 + outer loop + vertex -149.9724654298445 -116.82029586002636 -14.350000000000055 + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex 150.02753457015436 -116.82029586002639 -14.349999999999968 + endloop +endfacet +facet normal -5.63594127277737e-14 0.9238795325112905 0.382683432365081 + outer loop + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex -149.9724654298445 -116.82029586002636 -14.350000000000055 + vertex -149.9724654298445 -117.09002700078885 -13.698811421776844 + endloop +endfacet +facet normal 2.0504249361718883e-14 0.38268343236510205 -0.9238795325112817 + outer loop + vertex -149.97246542984453 -115.83202726980834 -10.661731409782071 + vertex 150.02753457015416 -115.18083869158521 -10.392000269019473 + vertex 150.02753457015416 -115.83202726980839 -10.661731409781982 + endloop +endfacet +facet normal 2.0504249361718883e-14 0.38268343236510205 -0.9238795325112817 + outer loop + vertex 150.02753457015416 -115.18083869158521 -10.392000269019473 + vertex -149.97246542984453 -115.83202726980834 -10.661731409782071 + vertex -149.97246542984473 -115.18083869158517 -10.392000269019562 + endloop +endfacet +facet normal -3.277505099810579e-14 -0.13052619222004544 0.9914448613738113 + outer loop + vertex 150.0275345701543 -113.78321584803157 -15.607999730980426 + vertex -149.9724654298445 -114.48202726980834 -15.700000000000038 + vertex 150.02753457015433 -114.48202726980838 -15.699999999999937 + endloop +endfacet +facet normal -3.277505099810579e-14 -0.13052619222004544 0.9914448613738113 + outer loop + vertex -149.9724654298445 -114.48202726980834 -15.700000000000038 + vertex 150.0275345701543 -113.78321584803157 -15.607999730980426 + vertex -149.97246542984453 -113.78321584803155 -15.607999730980529 + endloop +endfacet +facet normal 7.558400656338414e-15 -0.9238795325112905 0.38268343236508096 + outer loop + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + vertex -149.97246542984465 -112.14375867959039 -14.350000000000053 + vertex 150.02753457015422 -112.14375867959042 -14.349999999999962 + endloop +endfacet +facet normal 7.558400656338414e-15 -0.9238795325112905 0.38268343236508096 + outer loop + vertex -149.97246542984465 -112.14375867959039 -14.350000000000053 + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + vertex -149.97246542984468 -111.87402753882786 -13.698811421776819 + endloop +endfacet +facet normal 5.02572181418622e-14 -0.3826834323651004 -0.9238795325112824 + outer loop + vertex -149.97246542984476 -113.78321584803155 -10.39200026901956 + vertex 150.0275345701541 -113.1320272698084 -10.661731409781979 + vertex 150.0275345701541 -113.78321584803157 -10.392000269019471 + endloop +endfacet +facet normal 5.02572181418622e-14 -0.3826834323651004 -0.9238795325112824 + outer loop + vertex 150.0275345701541 -113.1320272698084 -10.661731409781979 + vertex -149.97246542984476 -113.78321584803155 -10.39200026901956 + vertex -149.97246542984476 -113.13202726980836 -10.661731409782044 + endloop +endfacet +facet normal -3.732692600867523e-15 0.7933533402912372 -0.6087614290087182 + outer loop + vertex -149.9724654298446 -116.82029586002633 -11.650000000000038 + vertex 150.02753457015422 -116.3912155790121 -11.09081169079627 + vertex 150.02753457015424 -116.82029586002639 -11.649999999999949 + endloop +endfacet +facet normal -3.732692600867523e-15 0.7933533402912372 -0.6087614290087182 + outer loop + vertex 150.02753457015422 -116.3912155790121 -11.09081169079627 + vertex -149.9724654298446 -116.82029586002633 -11.650000000000038 + vertex -149.97246542984468 -116.39121557901206 -11.09081169079636 + endloop +endfacet +facet normal -2.905913769642837e-14 0.9914448613738099 0.1305261922200552 + outer loop + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex -149.97246542984453 -117.18202726980839 -13.000000000000046 + vertex 150.02753457015433 -117.1820272698084 -12.99999999999996 + endloop +endfacet +facet normal -2.905913769642837e-14 0.9914448613738099 0.1305261922200552 + outer loop + vertex -149.97246542984453 -117.18202726980839 -13.000000000000046 + vertex 150.02753457015433 -117.09002700078888 -13.698811421776757 + vertex -149.9724654298445 -117.09002700078885 -13.698811421776844 + endloop +endfacet +facet normal 4.6599210313486503e-14 -0.9238795325112859 -0.3826834323650923 + outer loop + vertex -149.97246542984473 -112.14375867959039 -11.650000000000011 + vertex 150.0275345701541 -111.8740275388279 -12.301188578223135 + vertex 150.0275345701541 -112.14375867959043 -11.649999999999945 + endloop +endfacet +facet normal 4.6599210313486503e-14 -0.9238795325112859 -0.3826834323650923 + outer loop + vertex 150.0275345701541 -111.8740275388279 -12.301188578223135 + vertex -149.97246542984473 -112.14375867959039 -11.650000000000011 + vertex -149.97246542984476 -111.8740275388279 -12.3011885782232 + endloop +endfacet +facet normal -3.155502569632095e-14 -0.1305261922200097 0.9914448613738159 + outer loop + vertex 150.02753457015433 -106.26791679764438 -22.34548132206248 + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + vertex 150.02753457015433 -106.68202726980839 -22.399999999999952 + endloop +endfacet +facet normal -3.155502569632095e-14 -0.1305261922200097 0.9914448613738159 + outer loop + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + vertex 150.02753457015433 -106.26791679764438 -22.34548132206248 + vertex -149.9724654298445 -106.26791679764435 -22.34548132206257 + endloop +endfacet +facet normal -1.1474086062760311e-15 -0.7933533402912362 0.6087614290087194 + outer loop + vertex -149.97246542984465 -112.14375867959039 -14.350000000000053 + vertex 150.02753457015422 -112.5728389606047 -14.90918830920364 + vertex 150.02753457015422 -112.14375867959042 -14.349999999999962 + endloop +endfacet +facet normal -1.1474086062760311e-15 -0.7933533402912362 0.6087614290087194 + outer loop + vertex 150.02753457015422 -112.5728389606047 -14.90918830920364 + vertex -149.97246542984465 -112.14375867959039 -14.350000000000053 + vertex -149.9724654298445 -112.57283896060466 -14.909188309203731 + endloop +endfacet +facet normal 6.5577768240034135e-15 0.6087614290087043 -0.7933533402912477 + outer loop + vertex -149.97246542984468 -116.39121557901206 -11.09081169079636 + vertex 150.02753457015416 -115.83202726980839 -10.661731409781982 + vertex 150.02753457015422 -116.3912155790121 -11.09081169079627 + endloop +endfacet +facet normal 6.5577768240034135e-15 0.6087614290087043 -0.7933533402912477 + outer loop + vertex 150.02753457015416 -115.83202726980839 -10.661731409781982 + vertex -149.97246542984468 -116.39121557901206 -11.09081169079636 + vertex -149.97246542984453 -115.83202726980834 -10.661731409782071 + endloop +endfacet +facet normal -4.0426467109047067e-14 0.13052619222004386 0.9914448613738115 + outer loop + vertex 150.02753457015433 -114.48202726980838 -15.699999999999937 + vertex -149.9724654298445 -115.18083869158517 -15.607999730980517 + vertex 150.02753457015433 -115.18083869158518 -15.60799973098044 + endloop +endfacet +facet normal -4.0426467109047067e-14 0.13052619222004386 0.9914448613738115 + outer loop + vertex -149.9724654298445 -115.18083869158517 -15.607999730980517 + vertex 150.02753457015433 -114.48202726980838 -15.699999999999937 + vertex -149.9724654298445 -114.48202726980834 -15.700000000000038 + endloop +endfacet +facet normal 3.789340105087213e-14 -0.793353340291234 -0.6087614290087222 + outer loop + vertex -149.97246542984476 -112.57283896060468 -11.090811690796333 + vertex 150.0275345701541 -112.14375867959043 -11.649999999999945 + vertex 150.0275345701541 -112.57283896060473 -11.090811690796267 + endloop +endfacet +facet normal 3.789340105087213e-14 -0.793353340291234 -0.6087614290087222 + outer loop + vertex 150.0275345701541 -112.14375867959043 -11.649999999999945 + vertex -149.97246542984476 -112.57283896060468 -11.090811690796333 + vertex -149.97246542984473 -112.14375867959039 -11.650000000000011 + endloop +endfacet +facet normal 3.8819340110715446e-14 -0.9914448613738105 -0.13052619222005105 + outer loop + vertex 150.0275345701541 -111.8740275388279 -12.301188578223135 + vertex -149.97246542984468 -111.78202726980835 -13.000000000000021 + vertex 150.02753457015416 -111.78202726980841 -12.999999999999954 + endloop +endfacet +facet normal 3.8819340110715446e-14 -0.9914448613738105 -0.13052619222005105 + outer loop + vertex -149.97246542984468 -111.78202726980835 -13.000000000000021 + vertex 150.0275345701541 -111.8740275388279 -12.301188578223135 + vertex -149.97246542984476 -111.8740275388279 -12.3011885782232 + endloop +endfacet +facet normal 4.0426467109047067e-14 -0.13052619222004386 -0.9914448613738115 + outer loop + vertex -149.97246542984473 -114.48202726980833 -10.30000000000005 + vertex 150.0275345701541 -113.78321584803157 -10.392000269019471 + vertex 150.02753457015413 -114.48202726980841 -10.299999999999962 + endloop +endfacet +facet normal 4.0426467109047067e-14 -0.13052619222004386 -0.9914448613738115 + outer loop + vertex 150.0275345701541 -113.78321584803157 -10.392000269019471 + vertex -149.97246542984473 -114.48202726980833 -10.30000000000005 + vertex -149.97246542984476 -113.78321584803155 -10.39200026901956 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex 150.02753457015433 -105.88202726980838 -22.185640646055063 + vertex -149.9724654298445 -106.26791679764435 -22.34548132206257 + vertex 150.02753457015433 -106.26791679764438 -22.34548132206248 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex -149.9724654298445 -106.26791679764435 -22.34548132206257 + vertex 150.02753457015433 -105.88202726980838 -22.185640646055063 + vertex -149.97246542984445 -105.88202726980833 -22.185640646055152 + endloop +endfacet +facet normal -4.277350225801568e-14 0.793353340291235 0.6087614290087209 + outer loop + vertex 150.02753457015433 -116.39121557901207 -14.909188309203646 + vertex -149.9724654298445 -116.82029586002636 -14.350000000000055 + vertex 150.02753457015436 -116.82029586002639 -14.349999999999968 + endloop +endfacet +facet normal -4.277350225801568e-14 0.793353340291235 0.6087614290087209 + outer loop + vertex -149.9724654298445 -116.82029586002636 -14.350000000000055 + vertex 150.02753457015433 -116.39121557901207 -14.909188309203646 + vertex -149.9724654298445 -116.39121557901203 -14.909188309203735 + endloop +endfacet +facet normal -1.631797923829057e-14 -0.6087614290087004 0.7933533402912507 + outer loop + vertex 150.02753457015427 -105.55065641990991 -21.93137084989845 + vertex -149.97246542984445 -105.88202726980833 -22.185640646055152 + vertex 150.02753457015433 -105.88202726980838 -22.185640646055063 + endloop +endfacet +facet normal -1.631797923829057e-14 -0.6087614290087004 0.7933533402912507 + outer loop + vertex -149.97246542984445 -105.88202726980833 -22.185640646055152 + vertex 150.02753457015427 -105.55065641990991 -21.93137084989845 + vertex -149.97246542984445 -105.55065641990987 -21.931370849898535 + endloop +endfacet +facet normal -4.781716753828934e-14 0.3826834323650628 0.923879532511298 + outer loop + vertex 150.02753457015433 -107.09613774197244 -22.345481322062458 + vertex -149.9724654298445 -107.48202726980833 -22.185640646055155 + vertex 150.0275345701544 -107.48202726980838 -22.185640646055052 + endloop +endfacet +facet normal -4.781716753828934e-14 0.3826834323650628 0.923879532511298 + outer loop + vertex -149.9724654298445 -107.48202726980833 -22.185640646055155 + vertex 150.02753457015433 -107.09613774197244 -22.345481322062458 + vertex -149.9724654298445 -107.09613774197234 -22.345481322062547 + endloop +endfacet +facet normal -6.5577768240034135e-15 -0.6087614290087043 0.7933533402912477 + outer loop + vertex 150.02753457015422 -112.5728389606047 -14.90918830920364 + vertex -149.97246542984453 -113.13202726980836 -15.33826859021802 + vertex 150.02753457015424 -113.1320272698084 -15.338268590217929 + endloop +endfacet +facet normal -6.5577768240034135e-15 -0.6087614290087043 0.7933533402912477 + outer loop + vertex -149.97246542984453 -113.13202726980836 -15.33826859021802 + vertex 150.02753457015422 -112.5728389606047 -14.90918830920364 + vertex -149.9724654298445 -112.57283896060466 -14.909188309203731 + endloop +endfacet +facet normal -2.0504249361718883e-14 -0.38268343236510205 0.9238795325112817 + outer loop + vertex 150.02753457015424 -113.1320272698084 -15.338268590217929 + vertex -149.97246542984453 -113.78321584803155 -15.607999730980529 + vertex 150.0275345701543 -113.78321584803157 -15.607999730980426 + endloop +endfacet +facet normal -2.0504249361718883e-14 -0.38268343236510205 0.9238795325112817 + outer loop + vertex -149.97246542984453 -113.78321584803155 -15.607999730980529 + vertex 150.02753457015424 -113.1320272698084 -15.338268590217929 + vertex -149.97246542984453 -113.13202726980836 -15.33826859021802 + endloop +endfacet +facet normal 3.881934011071544e-14 -0.9914448613738105 0.13052619222005132 + outer loop + vertex -149.97246542984468 -111.78202726980835 -13.000000000000021 + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + vertex 150.02753457015416 -111.78202726980841 -12.999999999999954 + endloop +endfacet +facet normal 3.881934011071544e-14 -0.9914448613738105 0.13052619222005132 + outer loop + vertex 150.02753457015416 -111.87402753882793 -13.69881142177675 + vertex -149.97246542984468 -111.78202726980835 -13.000000000000021 + vertex -149.97246542984468 -111.87402753882786 -13.698811421776819 + endloop +endfacet +facet normal -3.8819340110715427e-14 0.9914448613738099 -0.1305261922200554 + outer loop + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + endloop +endfacet +facet normal -3.8819340110715427e-14 0.9914448613738099 -0.1305261922200554 + outer loop + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex 150.02753457015427 -104.5161014435193 -22.258819045102463 + vertex -149.9724654298446 -104.51610144351925 -22.25881904510254 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex -149.9724654298446 -105.29638662375325 -21.600000000000065 + vertex 150.02753457015427 -105.55065641990991 -21.93137084989845 + vertex 150.02753457015424 -105.29638662375328 -21.599999999999977 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex 150.02753457015427 -105.55065641990991 -21.93137084989845 + vertex -149.9724654298446 -105.29638662375325 -21.600000000000065 + vertex -149.97246542984445 -105.55065641990987 -21.931370849898535 + endloop +endfacet +facet normal -4.293706633114689e-14 0.3826834323650997 0.9238795325112827 + outer loop + vertex 150.02753457015433 -115.18083869158518 -15.60799973098044 + vertex -149.9724654298445 -115.83202726980835 -15.338268590218007 + vertex 150.02753457015433 -115.83202726980839 -15.33826859021793 + endloop +endfacet +facet normal -4.293706633114689e-14 0.3826834323650997 0.9238795325112827 + outer loop + vertex -149.9724654298445 -115.83202726980835 -15.338268590218007 + vertex 150.02753457015433 -115.18083869158518 -15.60799973098044 + vertex -149.9724654298445 -115.18083869158517 -15.607999730980517 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex -149.9724654298446 -107.48202726980833 -19.41435935394494 + vertex 150.02753457015422 -107.09613774197241 -19.254518677937433 + vertex 150.02753457015424 -107.48202726980838 -19.41435935394484 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex 150.02753457015422 -107.09613774197241 -19.254518677937433 + vertex -149.9724654298446 -107.48202726980833 -19.41435935394494 + vertex -149.9724654298445 -107.09613774197234 -19.254518677937522 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + vertex 150.02753457015422 -106.26791679764435 -19.254518677937455 + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.02753457015422 -106.26791679764435 -19.254518677937455 + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + vertex -149.97246542984465 -106.26791679764428 -19.254518677937543 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738115 -0.13052619222004383 + outer loop + vertex -149.97246542984468 -105.13654594774583 -20.385889527836035 + vertex 150.02753457015422 -105.08202726980836 -20.79999999999998 + vertex 150.02753457015424 -105.13654594774586 -20.385889527835946 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738115 -0.13052619222004383 + outer loop + vertex 150.02753457015422 -105.08202726980836 -20.79999999999998 + vertex -149.97246542984468 -105.13654594774583 -20.385889527836035 + vertex -149.97246542984465 -105.08202726980834 -20.800000000000065 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + vertex 150.02753457015433 -108.2275085918709 -20.385889527835893 + vertex 150.02753457015433 -108.2820272698084 -20.799999999999926 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015433 -108.2275085918709 -20.385889527835893 + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + vertex -149.9724654298446 -108.22750859187086 -20.385889527835992 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex -149.9724654298445 -107.8133981197068 -21.931370849898517 + vertex 150.02753457015433 -108.06766791586351 -21.599999999999945 + vertex 150.02753457015433 -107.81339811970687 -21.931370849898414 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex 150.02753457015433 -108.06766791586351 -21.599999999999945 + vertex -149.9724654298445 -107.8133981197068 -21.931370849898517 + vertex -149.97246542984442 -108.06766791586347 -21.600000000000044 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex -149.9724654298452 -105.13654594774582 -4.78588952783602 + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex -149.9724654298452 -105.13654594774582 -4.78588952783602 + vertex -149.97246542984507 -105.08202726980836 -5.200000000000053 + endloop +endfacet +facet normal 6.176364007600701e-14 -0.6087614290087395 -0.7933533402912207 + outer loop + vertex -149.97246542984465 -105.88202726980833 -19.414359353944935 + vertex 150.0275345701542 -105.55065641990991 -19.668629150101488 + vertex 150.02753457015422 -105.88202726980838 -19.41435935394485 + endloop +endfacet +facet normal 6.176364007600701e-14 -0.6087614290087395 -0.7933533402912207 + outer loop + vertex 150.0275345701542 -105.55065641990991 -19.668629150101488 + vertex -149.97246542984465 -105.88202726980833 -19.414359353944935 + vertex -149.97246542984468 -105.55065641990984 -19.668629150101573 + endloop +endfacet +facet normal 3.277505099810686e-14 0.13052619222000883 -0.991444861373816 + outer loop + vertex -149.9724654298445 -107.09613774197234 -19.254518677937522 + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + vertex 150.02753457015422 -107.09613774197241 -19.254518677937433 + endloop +endfacet +facet normal 3.277505099810686e-14 0.13052619222000883 -0.991444861373816 + outer loop + vertex 150.02753457015422 -106.68202726980839 -19.19999999999996 + vertex -149.9724654298445 -107.09613774197234 -19.254518677937522 + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015422 -105.08202726980836 -20.79999999999998 + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + vertex 150.02753457015427 -105.13654594774587 -21.21411047216401 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + vertex 150.02753457015422 -105.08202726980836 -20.79999999999998 + vertex -149.97246542984465 -105.08202726980834 -20.800000000000065 + endloop +endfacet +facet normal 2.050424936172055e-14 0.3826834323650453 -0.9238795325113052 + outer loop + vertex -149.97246542984513 -107.48202726980836 -3.8143593539449228 + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + endloop +endfacet +facet normal 2.050424936172055e-14 0.3826834323650453 -0.9238795325113052 + outer loop + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + vertex -149.97246542984513 -107.48202726980836 -3.8143593539449228 + vertex -149.9724654298452 -107.09613774197234 -3.6545186779375283 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex 150.0275345701542 -105.55065641990991 -19.668629150101488 + vertex -149.97246542984465 -105.29638662375322 -20.000000000000046 + vertex 150.02753457015422 -105.29638662375328 -19.999999999999957 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex -149.97246542984465 -105.29638662375322 -20.000000000000046 + vertex 150.0275345701542 -105.55065641990991 -19.668629150101488 + vertex -149.97246542984468 -105.55065641990984 -19.668629150101573 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex -149.97246542984507 -105.29638662375328 -4.400000000000054 + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex -149.97246542984507 -105.29638662375328 -4.400000000000054 + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex -149.9724654298452 -105.55065641990984 -4.068629150101582 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.972465429845 -108.28202726980838 -5.200000000000033 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex -149.972465429845 -108.28202726980838 -5.200000000000033 + vertex -149.97246542984507 -108.22750859187083 -4.785889527836001 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex -149.97246542984522 -106.2679167976443 -3.6545186779375283 + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + vertex -149.97246542984522 -106.2679167976443 -3.6545186779375283 + vertex -149.9724654298452 -105.88202726980833 -3.8143593539449454 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + vertex -149.9724654298452 -105.13654594774582 -4.78588952783602 + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex -149.9724654298452 -105.13654594774582 -4.78588952783602 + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + vertex -149.97246542984507 -105.29638662375328 -4.400000000000054 + endloop +endfacet +facet normal 4.7817167538289264e-14 -0.38268343236506036 -0.923879532511299 + outer loop + vertex -149.97246542984465 -106.26791679764428 -19.254518677937543 + vertex 150.02753457015422 -105.88202726980838 -19.41435935394485 + vertex 150.02753457015422 -106.26791679764435 -19.254518677937455 + endloop +endfacet +facet normal 4.7817167538289264e-14 -0.38268343236506036 -0.923879532511299 + outer loop + vertex 150.02753457015422 -105.88202726980838 -19.41435935394485 + vertex -149.97246542984465 -106.26791679764428 -19.254518677937543 + vertex -149.97246542984465 -105.88202726980833 -19.414359353944935 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex -149.97246542984453 -107.81339811970683 -19.668629150101555 + vertex 150.02753457015424 -107.48202726980838 -19.41435935394484 + vertex 150.02753457015427 -107.81339811970685 -19.668629150101452 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex 150.02753457015424 -107.48202726980838 -19.41435935394484 + vertex -149.97246542984453 -107.81339811970683 -19.668629150101555 + vertex -149.9724654298446 -107.48202726980833 -19.41435935394494 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex -149.97246542984507 -105.08202726980836 -5.200000000000053 + endloop +endfacet +facet normal 6.557776824003234e-15 0.6087614290087102 -0.7933533402912432 + outer loop + vertex -149.9724654298452 -107.81339811970683 -4.068629150101538 + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + endloop +endfacet +facet normal 6.557776824003234e-15 0.6087614290087102 -0.7933533402912432 + outer loop + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + vertex -149.9724654298452 -107.81339811970683 -4.068629150101538 + vertex -149.97246542984513 -107.48202726980836 -3.8143593539449228 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex -149.97246542984507 -108.22750859187083 -4.785889527836001 + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + vertex -149.97246542984507 -108.22750859187083 -4.785889527836001 + vertex -149.972465429845 -108.06766791586348 -4.400000000000034 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.13052619222004347 + outer loop + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + vertex 150.02753457015433 -108.2820272698084 -20.799999999999926 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.13052619222004347 + outer loop + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + vertex -149.97246542984453 -108.22750859187089 -21.21411047216408 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex -149.9724654298446 -108.22750859187086 -20.385889527835992 + vertex 150.0275345701543 -108.06766791586348 -19.999999999999925 + vertex 150.02753457015433 -108.2275085918709 -20.385889527835893 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex 150.0275345701543 -108.06766791586348 -19.999999999999925 + vertex -149.9724654298446 -108.22750859187086 -20.385889527835992 + vertex -149.9724654298446 -108.06766791586347 -20.000000000000025 + endloop +endfacet +facet normal 5.6359412727773843e-14 -0.9238795325112955 -0.3826834323650685 + outer loop + vertex 150.02753457015422 -105.29638662375328 -19.999999999999957 + vertex -149.97246542984468 -105.13654594774583 -20.385889527836035 + vertex 150.02753457015424 -105.13654594774586 -20.385889527835946 + endloop +endfacet +facet normal 5.6359412727773843e-14 -0.9238795325112955 -0.3826834323650685 + outer loop + vertex -149.97246542984468 -105.13654594774583 -20.385889527836035 + vertex 150.02753457015422 -105.29638662375328 -19.999999999999957 + vertex -149.97246542984465 -105.29638662375322 -20.000000000000046 + endloop +endfacet +facet normal 3.1555025696319373e-14 0.1305261922200637 -0.9914448613738089 + outer loop + vertex -149.9724654298452 -107.09613774197234 -3.6545186779375283 + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + endloop +endfacet +facet normal 3.1555025696319373e-14 0.1305261922200637 -0.9914448613738089 + outer loop + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + vertex -149.9724654298452 -107.09613774197234 -3.6545186779375283 + vertex -149.9724654298452 -106.68202726980832 -3.600000000000033 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.9724654298452 -106.68202726980832 -3.600000000000033 + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + vertex -149.9724654298452 -106.68202726980832 -3.600000000000033 + vertex -149.97246542984522 -106.2679167976443 -3.6545186779375283 + endloop +endfacet +facet normal -4.6599210313486623e-14 0.9238795325112901 0.3826834323650818 + outer loop + vertex -149.97246542984442 -108.06766791586347 -21.600000000000044 + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + vertex 150.02753457015433 -108.06766791586351 -21.599999999999945 + endloop +endfacet +facet normal -4.6599210313486623e-14 0.9238795325112901 0.3826834323650818 + outer loop + vertex 150.02753457015433 -108.2275085918709 -21.21411047216398 + vertex -149.97246542984442 -108.06766791586347 -21.600000000000044 + vertex -149.97246542984453 -108.22750859187089 -21.21411047216408 + endloop +endfacet +facet normal -5.200343766171987e-14 0.6087614290087363 0.7933533402912233 + outer loop + vertex 150.0275345701544 -107.48202726980838 -22.185640646055052 + vertex -149.9724654298445 -107.8133981197068 -21.931370849898517 + vertex 150.02753457015433 -107.81339811970687 -21.931370849898414 + endloop +endfacet +facet normal -5.200343766171987e-14 0.6087614290087363 0.7933533402912233 + outer loop + vertex -149.9724654298445 -107.8133981197068 -21.931370849898517 + vertex 150.0275345701544 -107.48202726980838 -22.185640646055052 + vertex -149.9724654298445 -107.48202726980833 -22.185640646055155 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex -149.9724654298452 -105.88202726980833 -3.8143593539449454 + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex -149.9724654298452 -105.88202726980833 -3.8143593539449454 + vertex -149.9724654298452 -105.55065641990984 -4.068629150101582 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + vertex 150.02753457015424 -105.29638662375328 -21.599999999999977 + vertex 150.02753457015427 -105.13654594774587 -21.21411047216401 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex 150.02753457015424 -105.29638662375328 -21.599999999999977 + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + vertex -149.9724654298446 -105.29638662375325 -21.600000000000065 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + vertex -149.97246542984504 -105.29638662375325 -6.000000000000051 + endloop +endfacet +facet normal -3.732692600867556e-15 0.7933533402912383 -0.6087614290087168 + outer loop + vertex -149.972465429845 -108.06766791586348 -4.400000000000034 + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + endloop +endfacet +facet normal -3.732692600867556e-15 0.7933533402912383 -0.6087614290087168 + outer loop + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + vertex -149.972465429845 -108.06766791586348 -4.400000000000034 + vertex -149.9724654298452 -107.81339811970683 -4.068629150101538 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex -149.9724654298446 -108.06766791586347 -20.000000000000025 + vertex 150.02753457015427 -107.81339811970685 -19.668629150101452 + vertex 150.0275345701543 -108.06766791586348 -19.999999999999925 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex 150.02753457015427 -107.81339811970685 -19.668629150101452 + vertex -149.9724654298446 -108.06766791586347 -20.000000000000025 + vertex -149.97246542984453 -107.81339811970683 -19.668629150101555 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex 150.02753457015422 -123.88202726980842 -5.199999999999923 + vertex -149.97246542984465 -123.82750859187088 -4.785889527835981 + vertex 150.02753457015422 -123.82750859187092 -4.785889527835891 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006184 + outer loop + vertex -149.97246542984465 -123.82750859187088 -4.785889527835981 + vertex 150.02753457015422 -123.88202726980842 -5.199999999999923 + vertex -149.97246542984453 -123.88202726980835 -5.200000000000013 + endloop +endfacet +facet normal 5.200343766171987e-14 -0.6087614290087363 -0.7933533402912233 + outer loop + vertex -149.97246542984473 -121.48202726980833 -3.814359353944937 + vertex 150.0275345701541 -121.15065641990991 -4.068629150101484 + vertex 150.0275345701541 -121.48202726980837 -3.814359353944847 + endloop +endfacet +facet normal 5.200343766171987e-14 -0.6087614290087363 -0.7933533402912233 + outer loop + vertex 150.0275345701541 -121.15065641990991 -4.068629150101484 + vertex -149.97246542984473 -121.48202726980833 -3.814359353944937 + vertex -149.97246542984473 -121.15065641990988 -4.068629150101574 + endloop +endfacet +facet normal -4.5377116934718926e-14 0.3826834323651088 0.9238795325112789 + outer loop + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + vertex -149.97246542984507 -107.48202726980838 -6.585640646055137 + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + endloop +endfacet +facet normal -4.5377116934718926e-14 0.3826834323651088 0.9238795325112789 + outer loop + vertex -149.97246542984507 -107.48202726980838 -6.585640646055137 + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + vertex -149.97246542984496 -107.09613774197238 -6.745481322062554 + endloop +endfacet +facet normal -1.6776756168600079e-15 -0.6087614290087001 0.793353340291251 + outer loop + vertex 150.0275345701542 -121.15065641990992 -6.3313708498984465 + vertex -149.97246542984465 -121.48202726980836 -6.585640646055151 + vertex 150.02753457015422 -121.48202726980843 -6.585640646055061 + endloop +endfacet +facet normal -1.6776756168600079e-15 -0.6087614290087001 0.793353340291251 + outer loop + vertex -149.97246542984465 -121.48202726980836 -6.585640646055151 + vertex 150.0275345701542 -121.15065641990992 -6.3313708498984465 + vertex -149.97246542984465 -121.15065641990988 -6.331370849898536 + endloop +endfacet +facet normal -6.557776824002234e-15 -0.6087614290087442 0.7933533402912171 + outer loop + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex -149.97246542984507 -105.88202726980833 -6.585640646055159 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + endloop +endfacet +facet normal -6.557776824002234e-15 -0.6087614290087442 0.7933533402912171 + outer loop + vertex -149.97246542984507 -105.88202726980833 -6.585640646055159 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex -149.97246542984513 -105.55065641990987 -6.331370849898522 + endloop +endfacet +facet normal -3.789340105087239e-14 0.7933533402912432 0.6087614290087103 + outer loop + vertex -149.97246542984496 -107.81339811970685 -6.3313708498985 + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + endloop +endfacet +facet normal -3.789340105087239e-14 0.7933533402912432 0.6087614290087103 + outer loop + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex -149.97246542984496 -107.81339811970685 -6.3313708498985 + vertex -149.97246542984504 -108.06766791586347 -6.000000000000031 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex -149.9724654298446 -123.08202726980835 -3.8143593539449396 + vertex 150.0275345701541 -122.69613774197242 -3.654518677937407 + vertex 150.02753457015413 -123.08202726980839 -3.8143593539448384 + endloop +endfacet +facet normal 1.8064198758146943e-14 0.38268343236510816 -0.9238795325112792 + outer loop + vertex 150.0275345701541 -122.69613774197242 -3.654518677937407 + vertex -149.9724654298446 -123.08202726980835 -3.8143593539449396 + vertex -149.97246542984473 -122.69613774197241 -3.65451867793752 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex -149.97246542984453 -123.66766791586346 -4.400000000000015 + vertex 150.02753457015413 -123.41339811970687 -4.068629150101453 + vertex 150.02753457015422 -123.6676679158635 -4.399999999999924 + endloop +endfacet +facet normal -3.732692600867157e-15 0.7933533402912247 -0.6087614290087344 + outer loop + vertex 150.02753457015413 -123.41339811970687 -4.068629150101453 + vertex -149.97246542984453 -123.66766791586346 -4.400000000000015 + vertex -149.97246542984473 -123.41339811970683 -4.068629150101555 + endloop +endfacet +facet normal 4.781716753828934e-14 -0.3826834323650628 -0.923879532511298 + outer loop + vertex -149.97246542984465 -121.86791679764431 -3.6545186779375425 + vertex 150.0275345701541 -121.48202726980837 -3.814359353944847 + vertex 150.02753457015407 -121.86791679764434 -3.654518677937452 + endloop +endfacet +facet normal 4.781716753828934e-14 -0.3826834323650628 -0.923879532511298 + outer loop + vertex 150.0275345701541 -121.48202726980837 -3.814359353944847 + vertex -149.97246542984465 -121.86791679764431 -3.6545186779375425 + vertex -149.97246542984473 -121.48202726980833 -3.814359353944937 + endloop +endfacet +facet normal -3.277505099810546e-14 -0.13052619222005668 0.9914448613738097 + outer loop + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + vertex -149.97246542984507 -106.6820272698084 -6.80000000000005 + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + endloop +endfacet +facet normal -3.277505099810546e-14 -0.13052619222005668 0.9914448613738097 + outer loop + vertex -149.97246542984507 -106.6820272698084 -6.80000000000005 + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + vertex -149.97246542984507 -106.26791679764433 -6.745481322062554 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex 150.0275345701541 -121.15065641990991 -4.068629150101484 + vertex -149.97246542984465 -120.89638662375327 -4.400000000000046 + vertex 150.0275345701541 -120.89638662375327 -4.399999999999955 + endloop +endfacet +facet normal 4.277350225801563e-14 -0.7933533402912334 -0.6087614290087231 + outer loop + vertex -149.97246542984465 -120.89638662375327 -4.400000000000046 + vertex 150.0275345701541 -121.15065641990991 -4.068629150101484 + vertex -149.97246542984473 -121.15065641990988 -4.068629150101574 + endloop +endfacet +facet normal 4.6599210313486623e-14 -0.9238795325112901 -0.3826834323650818 + outer loop + vertex 150.0275345701541 -120.89638662375327 -4.399999999999955 + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex 150.0275345701541 -120.7365459477459 -4.785889527835922 + endloop +endfacet +facet normal 4.6599210313486623e-14 -0.9238795325112901 -0.3826834323650818 + outer loop + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex 150.0275345701541 -120.89638662375327 -4.399999999999955 + vertex -149.97246542984465 -120.89638662375327 -4.400000000000046 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738116 -0.13052619222004347 + outer loop + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex 150.02753457015413 -120.68202726980837 -5.199999999999976 + vertex 150.0275345701541 -120.7365459477459 -4.785889527835922 + endloop +endfacet +facet normal 2.905913769642842e-14 -0.9914448613738116 -0.13052619222004347 + outer loop + vertex 150.02753457015413 -120.68202726980837 -5.199999999999976 + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex -149.97246542984465 -120.68202726980836 -5.200000000000067 + endloop +endfacet +facet normal 3.7326926008669706e-15 -0.7933533402912183 0.6087614290087429 + outer loop + vertex -149.97246542984504 -105.29638662375325 -6.000000000000051 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + endloop +endfacet +facet normal 3.7326926008669706e-15 -0.7933533402912183 0.6087614290087429 + outer loop + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex -149.97246542984504 -105.29638662375325 -6.000000000000051 + vertex -149.97246542984513 -105.55065641990987 -6.331370849898522 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738159 0.13052619222001066 + outer loop + vertex -149.97246542984507 -108.22750859187089 -5.6141104721640644 + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738159 0.13052619222001066 + outer loop + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + vertex -149.97246542984507 -108.22750859187089 -5.6141104721640644 + vertex -149.972465429845 -108.28202726980838 -5.200000000000033 + endloop +endfacet +facet normal -4.7817167538289264e-14 0.38268343236506036 0.923879532511299 + outer loop + vertex 150.02753457015424 -122.69613774197245 -6.7454813220624334 + vertex -149.9724654298446 -123.08202726980842 -6.585640646055154 + vertex 150.02753457015424 -123.08202726980842 -6.585640646055053 + endloop +endfacet +facet normal -4.7817167538289264e-14 0.38268343236506036 0.923879532511299 + outer loop + vertex -149.9724654298446 -123.08202726980842 -6.585640646055154 + vertex 150.02753457015424 -122.69613774197245 -6.7454813220624334 + vertex -149.9724654298446 -122.69613774197241 -6.745481322062546 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex -149.9724654298445 -123.41339811970684 -6.331370849898517 + vertex 150.02753457015424 -123.66766791586353 -5.999999999999944 + vertex 150.02753457015424 -123.41339811970688 -6.331370849898415 + endloop +endfacet +facet normal -4.277350225801563e-14 0.7933533402912334 0.6087614290087231 + outer loop + vertex 150.02753457015424 -123.66766791586353 -5.999999999999944 + vertex -149.9724654298445 -123.41339811970684 -6.331370849898517 + vertex -149.9724654298446 -123.66766791586346 -6.000000000000034 + endloop +endfacet +facet normal 4.164649241083345e-14 -0.13052619222006093 -0.9914448613738092 + outer loop + vertex -149.97246542984473 -122.28202726980837 -3.600000000000047 + vertex 150.02753457015407 -121.86791679764434 -3.654518677937452 + vertex 150.02753457015413 -122.2820272698084 -3.5999999999999566 + endloop +endfacet +facet normal 4.164649241083345e-14 -0.13052619222006093 -0.9914448613738092 + outer loop + vertex 150.02753457015407 -121.86791679764434 -3.654518677937452 + vertex -149.97246542984473 -122.28202726980837 -3.600000000000047 + vertex -149.97246542984465 -121.86791679764431 -3.6545186779375425 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex -149.97246542984468 -120.89638662375324 -6.000000000000065 + vertex 150.0275345701542 -121.15065641990992 -6.3313708498984465 + vertex 150.02753457015416 -120.89638662375332 -5.999999999999975 + endloop +endfacet +facet normal 3.732692600867157e-15 -0.7933533402912247 0.6087614290087344 + outer loop + vertex 150.0275345701542 -121.15065641990992 -6.3313708498984465 + vertex -149.97246542984468 -120.89638662375324 -6.000000000000065 + vertex -149.97246542984465 -121.15065641990988 -6.331370849898536 + endloop +endfacet +facet normal -6.176364007600701e-14 0.6087614290087395 0.7933533402912207 + outer loop + vertex 150.02753457015424 -123.08202726980842 -6.585640646055053 + vertex -149.9724654298445 -123.41339811970684 -6.331370849898517 + vertex 150.02753457015424 -123.41339811970688 -6.331370849898415 + endloop +endfacet +facet normal -6.176364007600701e-14 0.6087614290087395 0.7933533402912207 + outer loop + vertex -149.9724654298445 -123.41339811970684 -6.331370849898517 + vertex 150.02753457015424 -123.08202726980842 -6.585640646055053 + vertex -149.9724654298446 -123.08202726980842 -6.585640646055154 + endloop +endfacet +facet normal -2.294429996529175e-14 -0.38268343236506447 0.9238795325112973 + outer loop + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + vertex -149.97246542984507 -106.26791679764433 -6.745481322062554 + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + endloop +endfacet +facet normal -2.294429996529175e-14 -0.38268343236506447 0.9238795325112973 + outer loop + vertex -149.97246542984507 -106.26791679764433 -6.745481322062554 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + vertex -149.97246542984507 -105.88202726980833 -6.585640646055159 + endloop +endfacet +facet normal -5.200343766172004e-14 0.6087614290087426 0.7933533402912182 + outer loop + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + vertex -149.97246542984496 -107.81339811970685 -6.3313708498985 + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + endloop +endfacet +facet normal -5.200343766172004e-14 0.6087614290087426 0.7933533402912182 + outer loop + vertex -149.97246542984496 -107.81339811970685 -6.3313708498985 + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + vertex -149.97246542984507 -107.48202726980838 -6.585640646055137 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex -149.97246542984465 -123.82750859187088 -4.785889527835981 + vertex 150.02753457015422 -123.6676679158635 -4.399999999999924 + vertex 150.02753457015422 -123.82750859187092 -4.785889527835891 + endloop +endfacet +facet normal -2.7078805484912322e-14 0.9238795325112836 -0.3826834323650974 + outer loop + vertex 150.02753457015422 -123.6676679158635 -4.399999999999924 + vertex -149.97246542984465 -123.82750859187088 -4.785889527835981 + vertex -149.97246542984453 -123.66766791586346 -4.400000000000015 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984465 -120.68202726980836 -5.200000000000067 + vertex 150.02753457015413 -120.73654594774587 -5.6141104721640085 + vertex 150.02753457015413 -120.68202726980837 -5.199999999999976 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015413 -120.73654594774587 -5.6141104721640085 + vertex -149.97246542984465 -120.68202726980836 -5.200000000000067 + vertex -149.97246542984468 -120.73654594774585 -5.614110472164098 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex -149.97246542984473 -123.41339811970683 -4.068629150101555 + vertex 150.02753457015413 -123.08202726980839 -3.8143593539448384 + vertex 150.02753457015413 -123.41339811970687 -4.068629150101453 + endloop +endfacet +facet normal 1.631797923829057e-14 0.6087614290087004 -0.7933533402912507 + outer loop + vertex 150.02753457015413 -123.08202726980839 -3.8143593539448384 + vertex -149.97246542984473 -123.41339811970683 -4.068629150101555 + vertex -149.9724654298446 -123.08202726980835 -3.8143593539449396 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015422 -122.28202726980842 -6.799999999999951 + vertex -149.9724654298446 -122.69613774197241 -6.745481322062546 + vertex 150.02753457015424 -122.69613774197245 -6.7454813220624334 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.9724654298446 -122.69613774197241 -6.745481322062546 + vertex 150.02753457015422 -122.28202726980842 -6.799999999999951 + vertex -149.9724654298446 -122.28202726980837 -6.800000000000041 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.130526192220043 + outer loop + vertex -149.9724654298446 -123.82750859187085 -5.614110472164045 + vertex 150.02753457015422 -123.88202726980842 -5.199999999999923 + vertex 150.02753457015422 -123.82750859187092 -5.614110472163954 + endloop +endfacet +facet normal -2.905913769642842e-14 0.9914448613738116 0.130526192220043 + outer loop + vertex 150.02753457015422 -123.88202726980842 -5.199999999999923 + vertex -149.9724654298446 -123.82750859187085 -5.614110472164045 + vertex -149.97246542984453 -123.88202726980835 -5.200000000000013 + endloop +endfacet +facet normal -4.659921031348627e-14 0.9238795325112781 0.38268343236511065 + outer loop + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex -149.97246542984507 -108.22750859187089 -5.6141104721640644 + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + endloop +endfacet +facet normal -4.659921031348627e-14 0.9238795325112781 0.38268343236511065 + outer loop + vertex -149.97246542984507 -108.22750859187089 -5.6141104721640644 + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex -149.97246542984504 -108.06766791586347 -6.000000000000031 + endloop +endfacet +facet normal 3.155502569632095e-14 0.1305261922200097 -0.9914448613738159 + outer loop + vertex -149.97246542984473 -122.69613774197241 -3.65451867793752 + vertex 150.02753457015413 -122.2820272698084 -3.5999999999999566 + vertex 150.0275345701541 -122.69613774197242 -3.654518677937407 + endloop +endfacet +facet normal 3.155502569632095e-14 0.1305261922200097 -0.9914448613738159 + outer loop + vertex 150.02753457015413 -122.2820272698084 -3.5999999999999566 + vertex -149.97246542984473 -122.69613774197241 -3.65451867793752 + vertex -149.97246542984473 -122.28202726980837 -3.600000000000047 + endloop +endfacet +facet normal -5.6359412727773843e-14 0.9238795325112955 0.3826834323650685 + outer loop + vertex -149.9724654298446 -123.66766791586346 -6.000000000000034 + vertex 150.02753457015422 -123.82750859187092 -5.614110472163954 + vertex 150.02753457015424 -123.66766791586353 -5.999999999999944 + endloop +endfacet +facet normal -5.6359412727773843e-14 0.9238795325112955 0.3826834323650685 + outer loop + vertex 150.02753457015422 -123.82750859187092 -5.614110472163954 + vertex -149.9724654298446 -123.66766791586346 -6.000000000000034 + vertex -149.9724654298446 -123.82750859187085 -5.614110472164045 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex -149.97246542984468 -120.73654594774585 -5.614110472164098 + vertex 150.02753457015416 -120.89638662375332 -5.999999999999975 + vertex 150.02753457015413 -120.73654594774587 -5.6141104721640085 + endloop +endfacet +facet normal 2.7078805484912322e-14 -0.9238795325112836 0.3826834323650974 + outer loop + vertex 150.02753457015416 -120.89638662375332 -5.999999999999975 + vertex -149.97246542984468 -120.73654594774585 -5.614110472164098 + vertex -149.97246542984468 -120.89638662375324 -6.000000000000065 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + vertex -149.97246542984496 -107.09613774197238 -6.745481322062554 + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.97246542984496 -107.09613774197238 -6.745481322062554 + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + vertex -149.97246542984507 -106.6820272698084 -6.80000000000005 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex -149.9724654298442 -120.89638662375324 -20.000000000000025 + vertex 150.02753457015467 -120.7365459477459 -20.385889527835904 + vertex 150.02753457015467 -120.89638662375332 -19.99999999999994 + endloop +endfacet +facet normal 4.659921031348627e-14 -0.9238795325112781 -0.38268343236511065 + outer loop + vertex 150.02753457015467 -120.7365459477459 -20.385889527835904 + vertex -149.9724654298442 -120.89638662375324 -20.000000000000025 + vertex -149.9724654298442 -120.73654594774582 -20.385889527835992 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex -149.9724654298442 -120.73654594774582 -20.385889527835992 + vertex 150.0275345701547 -120.6820272698084 -20.799999999999937 + vertex 150.02753457015467 -120.7365459477459 -20.385889527835904 + endloop +endfacet +facet normal 2.905913769642855e-14 -0.9914448613738159 -0.13052619222001066 + outer loop + vertex 150.0275345701547 -120.6820272698084 -20.799999999999937 + vertex -149.9724654298442 -120.73654594774582 -20.385889527835992 + vertex -149.97246542984414 -120.68202726980833 -20.800000000000026 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex -149.97246542984414 -120.73654594774585 -21.214110472164055 + vertex 150.02753457015473 -120.89638662375329 -21.599999999999934 + vertex 150.02753457015473 -120.7365459477459 -21.21411047216397 + endloop +endfacet +facet normal 2.7078805484912748e-14 -0.9238795325112981 0.38268343236506286 + outer loop + vertex 150.02753457015473 -120.89638662375329 -21.599999999999934 + vertex -149.97246542984414 -120.73654594774585 -21.214110472164055 + vertex -149.9724654298441 -120.89638662375329 -21.600000000000023 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex -149.97246542984414 -120.68202726980833 -20.800000000000026 + vertex 150.02753457015473 -120.7365459477459 -21.21411047216397 + vertex 150.0275345701547 -120.6820272698084 -20.799999999999937 + endloop +endfacet +facet normal 3.88193401107154e-14 -0.991444861373809 0.13052619222006184 + outer loop + vertex 150.02753457015473 -120.7365459477459 -21.21411047216397 + vertex -149.97246542984414 -120.68202726980833 -20.800000000000026 + vertex -149.97246542984414 -120.73654594774585 -21.214110472164055 + endloop +endfacet +facet normal -3.277505099810686e-14 -0.13052619222000883 0.991444861373816 + outer loop + vertex 150.02753457015422 -121.86791679764437 -6.745481322062478 + vertex -149.9724654298446 -122.28202726980837 -6.800000000000041 + vertex 150.02753457015422 -122.28202726980842 -6.799999999999951 + endloop +endfacet +facet normal -3.277505099810686e-14 -0.13052619222000883 0.991444861373816 + outer loop + vertex -149.9724654298446 -122.28202726980837 -6.800000000000041 + vertex 150.02753457015422 -121.86791679764437 -6.745481322062478 + vertex -149.97246542984468 -121.86791679764434 -6.7454813220625685 + endloop +endfacet +facet normal -3.1555025696319373e-14 -0.1305261922200637 0.9914448613738089 + outer loop + vertex 150.02753457015476 -121.86791679764441 -22.34548132206245 + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + endloop +endfacet +facet normal -3.1555025696319373e-14 -0.1305261922200637 0.9914448613738089 + outer loop + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + vertex 150.02753457015476 -121.86791679764441 -22.34548132206245 + vertex -149.97246542984405 -121.86791679764434 -22.34548132206253 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738158 0.1305261922200104 + outer loop + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + vertex 150.02753457015476 -123.88202726980839 -20.79999999999993 + vertex 150.0275345701548 -123.82750859187092 -21.21411047216396 + endloop +endfacet +facet normal -2.905913769642855e-14 0.9914448613738158 0.1305261922200104 + outer loop + vertex 150.02753457015476 -123.88202726980839 -20.79999999999993 + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + vertex -149.97246542984396 -123.88202726980838 -20.800000000000015 + endloop +endfacet +facet normal 1.1474086062765636e-15 0.793353340291218 -0.6087614290087431 + outer loop + vertex -149.972465429844 -123.66766791586348 -20.000000000000018 + vertex 150.0275345701547 -123.41339811970687 -19.66862915010146 + vertex 150.02753457015476 -123.6676679158635 -19.99999999999993 + endloop +endfacet +facet normal 1.1474086062765636e-15 0.793353340291218 -0.6087614290087431 + outer loop + vertex 150.0275345701547 -123.41339811970687 -19.66862915010146 + vertex -149.972465429844 -123.66766791586348 -20.000000000000018 + vertex -149.9724654298441 -123.41339811970683 -19.668629150101545 + endloop +endfacet +facet normal -2.050424936172055e-14 -0.3826834323650453 0.9238795325113052 + outer loop + vertex 150.02753457015476 -121.4820272698084 -22.18564064605505 + vertex -149.97246542984405 -121.86791679764434 -22.34548132206253 + vertex 150.02753457015476 -121.86791679764441 -22.34548132206245 + endloop +endfacet +facet normal -2.050424936172055e-14 -0.3826834323650453 0.9238795325113052 + outer loop + vertex -149.97246542984405 -121.86791679764434 -22.34548132206253 + vertex 150.02753457015476 -121.4820272698084 -22.18564064605505 + vertex -149.9724654298441 -121.48202726980836 -22.185640646055134 + endloop +endfacet +facet normal 6.557776824002234e-15 0.6087614290087442 -0.7933533402912171 + outer loop + vertex -149.9724654298441 -123.41339811970683 -19.668629150101545 + vertex 150.02753457015473 -123.08202726980839 -19.41435935394482 + vertex 150.0275345701547 -123.41339811970687 -19.66862915010146 + endloop +endfacet +facet normal 6.557776824002234e-15 0.6087614290087442 -0.7933533402912171 + outer loop + vertex 150.02753457015473 -123.08202726980839 -19.41435935394482 + vertex -149.9724654298441 -123.41339811970683 -19.668629150101545 + vertex -149.9724654298442 -123.08202726980838 -19.414359353944903 + endloop +endfacet +facet normal -5.2003437661719044e-14 0.6087614290087087 0.7933533402912443 + outer loop + vertex 150.02753457015484 -123.08202726980844 -22.185640646055035 + vertex -149.97246542984396 -123.41339811970684 -21.931370849898506 + vertex 150.0275345701548 -123.41339811970688 -21.93137084989842 + endloop +endfacet +facet normal -5.2003437661719044e-14 0.6087614290087087 0.7933533402912443 + outer loop + vertex -149.97246542984396 -123.41339811970684 -21.931370849898506 + vertex 150.02753457015484 -123.08202726980844 -22.185640646055035 + vertex -149.9724654298441 -123.08202726980838 -22.185640646055123 + endloop +endfacet +facet normal 3.277505099810546e-14 0.13052619222005668 -0.9914448613738097 + outer loop + vertex -149.97246542984405 -122.69613774197241 -19.254518677937508 + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + vertex 150.02753457015467 -122.69613774197242 -19.254518677937426 + endloop +endfacet +facet normal 3.277505099810546e-14 0.13052619222005668 -0.9914448613738097 + outer loop + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + vertex -149.97246542984405 -122.69613774197241 -19.254518677937508 + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex -149.97246542984422 -121.48202726980836 -19.414359353944917 + vertex 150.02753457015467 -121.15065641990991 -19.668629150101474 + vertex 150.02753457015464 -121.4820272698084 -19.414359353944835 + endloop +endfacet +facet normal 5.200343766172004e-14 -0.6087614290087426 -0.7933533402912182 + outer loop + vertex 150.02753457015467 -121.15065641990991 -19.668629150101474 + vertex -149.97246542984422 -121.48202726980836 -19.414359353944917 + vertex -149.9724654298442 -121.15065641990988 -19.668629150101555 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex 150.02753457015467 -121.15065641990991 -19.668629150101474 + vertex -149.9724654298442 -120.89638662375324 -20.000000000000025 + vertex 150.02753457015467 -120.89638662375332 -19.99999999999994 + endloop +endfacet +facet normal 3.789340105087239e-14 -0.7933533402912432 -0.6087614290087103 + outer loop + vertex -149.9724654298442 -120.89638662375324 -20.000000000000025 + vertex 150.02753457015467 -121.15065641990991 -19.668629150101474 + vertex -149.9724654298442 -121.15065641990988 -19.668629150101555 + endloop +endfacet +facet normal -5.253370467230355e-14 0.7933533402912631 0.6087614290086841 + outer loop + vertex -149.97246542984396 -123.41339811970684 -21.931370849898506 + vertex 150.02753457015478 -123.66766791586353 -21.599999999999927 + vertex 150.0275345701548 -123.41339811970688 -21.93137084989842 + endloop +endfacet +facet normal -5.253370467230355e-14 0.7933533402912631 0.6087614290086841 + outer loop + vertex 150.02753457015478 -123.66766791586353 -21.599999999999927 + vertex -149.97246542984396 -123.41339811970684 -21.931370849898506 + vertex -149.97246542984396 -123.66766791586348 -21.600000000000016 + endloop +endfacet +facet normal -4.537711693471893e-14 0.38268343236510904 0.9238795325112787 + outer loop + vertex 150.02753457015478 -122.69613774197245 -22.34548132206245 + vertex -149.9724654298441 -123.08202726980838 -22.185640646055123 + vertex 150.02753457015484 -123.08202726980844 -22.185640646055035 + endloop +endfacet +facet normal -4.537711693471893e-14 0.38268343236510904 0.9238795325112787 + outer loop + vertex -149.9724654298441 -123.08202726980838 -22.185640646055123 + vertex 150.02753457015478 -122.69613774197245 -22.34548132206245 + vertex -149.97246542984405 -122.69613774197241 -22.345481322062533 + endloop +endfacet +facet normal -1.677675616859735e-15 -0.6087614290087094 0.7933533402912438 + outer loop + vertex 150.02753457015473 -121.15065641990992 -21.93137084989843 + vertex -149.9724654298441 -121.48202726980836 -22.185640646055134 + vertex 150.02753457015476 -121.4820272698084 -22.18564064605505 + endloop +endfacet +facet normal -1.677675616859735e-15 -0.6087614290087094 0.7933533402912438 + outer loop + vertex -149.9724654298441 -121.48202726980836 -22.185640646055134 + vertex 150.02753457015473 -121.15065641990992 -21.93137084989843 + vertex -149.9724654298441 -121.15065641990988 -21.931370849898517 + endloop +endfacet +facet normal -4.659921031348628e-14 0.9238795325112782 0.38268343236511054 + outer loop + vertex 150.02753457015478 -123.66766791586353 -21.599999999999927 + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + vertex 150.0275345701548 -123.82750859187092 -21.21411047216396 + endloop +endfacet +facet normal -4.659921031348628e-14 0.9238795325112782 0.38268343236511054 + outer loop + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + vertex 150.02753457015478 -123.66766791586353 -21.599999999999927 + vertex -149.97246542984396 -123.66766791586348 -21.600000000000016 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex 150.02753457015476 -123.82750859187092 -20.385889527835896 + vertex -149.972465429844 -123.66766791586348 -20.000000000000018 + vertex 150.02753457015476 -123.6676679158635 -19.99999999999993 + endloop +endfacet +facet normal -2.7078805484912748e-14 0.9238795325112981 -0.38268343236506286 + outer loop + vertex -149.972465429844 -123.66766791586348 -20.000000000000018 + vertex 150.02753457015476 -123.82750859187092 -20.385889527835896 + vertex -149.97246542984414 -123.82750859187088 -20.385889527835985 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex 150.02753457015422 -121.48202726980843 -6.585640646055061 + vertex -149.97246542984468 -121.86791679764434 -6.7454813220625685 + vertex 150.02753457015422 -121.86791679764437 -6.745481322062478 + endloop +endfacet +facet normal -1.8064198758146943e-14 -0.38268343236510816 0.9238795325112792 + outer loop + vertex -149.97246542984468 -121.86791679764434 -6.7454813220625685 + vertex 150.02753457015422 -121.48202726980843 -6.585640646055061 + vertex -149.97246542984465 -121.48202726980836 -6.585640646055151 + endloop +endfacet +facet normal 3.732692600867556e-15 -0.7933533402912383 0.6087614290087168 + outer loop + vertex -149.9724654298441 -120.89638662375329 -21.600000000000023 + vertex 150.02753457015473 -121.15065641990992 -21.93137084989843 + vertex 150.02753457015473 -120.89638662375329 -21.599999999999934 + endloop +endfacet +facet normal 3.732692600867556e-15 -0.7933533402912383 0.6087614290087168 + outer loop + vertex 150.02753457015473 -121.15065641990992 -21.93137084989843 + vertex -149.9724654298441 -120.89638662375329 -21.600000000000023 + vertex -149.9724654298441 -121.15065641990988 -21.931370849898517 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + vertex -149.97246542984405 -122.69613774197241 -22.345481322062533 + vertex 150.02753457015478 -122.69613774197245 -22.34548132206245 + endloop +endfacet +facet normal -4.04264671090476e-14 0.13052619222006184 0.9914448613738092 + outer loop + vertex -149.97246542984405 -122.69613774197241 -22.345481322062533 + vertex 150.02753457015478 -122.28202726980842 -22.399999999999945 + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + endloop +endfacet +facet normal 2.294429996529175e-14 0.38268343236506447 -0.9238795325112973 + outer loop + vertex -149.9724654298442 -123.08202726980838 -19.414359353944903 + vertex 150.02753457015467 -122.69613774197242 -19.254518677937426 + vertex 150.02753457015473 -123.08202726980839 -19.41435935394482 + endloop +endfacet +facet normal 2.294429996529175e-14 0.38268343236506447 -0.9238795325112973 + outer loop + vertex 150.02753457015467 -122.69613774197242 -19.254518677937426 + vertex -149.9724654298442 -123.08202726980838 -19.414359353944903 + vertex -149.97246542984405 -122.69613774197241 -19.254518677937508 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex -149.97246542984422 -121.86791679764431 -19.2545186779375 + vertex 150.02753457015464 -121.4820272698084 -19.414359353944835 + vertex 150.02753457015467 -121.86791679764434 -19.254518677937423 + endloop +endfacet +facet normal 4.5377116934718926e-14 -0.3826834323651088 -0.9238795325112789 + outer loop + vertex 150.02753457015464 -121.4820272698084 -19.414359353944835 + vertex -149.97246542984422 -121.86791679764431 -19.2545186779375 + vertex -149.97246542984422 -121.48202726980836 -19.414359353944917 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006204 + outer loop + vertex 150.02753457015476 -123.88202726980839 -20.79999999999993 + vertex -149.97246542984414 -123.82750859187088 -20.385889527835985 + vertex 150.02753457015476 -123.82750859187092 -20.385889527835896 + endloop +endfacet +facet normal -3.88193401107154e-14 0.991444861373809 -0.13052619222006204 + outer loop + vertex -149.97246542984414 -123.82750859187088 -20.385889527835985 + vertex 150.02753457015476 -123.88202726980839 -20.79999999999993 + vertex -149.97246542984396 -123.88202726980838 -20.800000000000015 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + vertex 150.02753457015467 -121.86791679764434 -19.254518677937423 + vertex 150.02753457015464 -122.28202726980837 -19.19999999999993 + endloop +endfacet +facet normal 4.04264671090476e-14 -0.13052619222006184 -0.9914448613738092 + outer loop + vertex 150.02753457015467 -121.86791679764434 -19.254518677937423 + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + vertex -149.97246542984422 -121.86791679764431 -19.2545186779375 + endloop +endfacet +facet normal 3.8819340110715427e-14 -0.9914448613738099 0.1305261922200554 + outer loop + vertex -149.97246542984465 -124.44795309609741 -3.7411809548975263 + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex 150.02753457015422 -124.44795309609748 -3.741180954897436 + endloop +endfacet +facet normal 3.8819340110715427e-14 -0.9914448613738099 0.1305261922200554 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex -149.97246542984465 -124.44795309609741 -3.7411809548975263 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 1.5003536199769242e-15 + outer loop + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex -149.9724654298445 -124.48202726980837 -9.20000000000005 + vertex 150.02753457015442 -124.48202726980841 -9.19999999999996 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 1.5003536199769242e-15 + outer loop + vertex -149.9724654298445 -124.48202726980837 -9.20000000000005 + vertex 150.02753457015422 -124.48202726980844 -3.9999999999999476 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -4.4649600931051686e-15 + outer loop + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex 150.0275345701544 -124.08202726980842 -9.59999999999996 + vertex 150.0275345701544 -124.08202726980842 -9.19999999999996 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -4.4649600931051686e-15 + outer loop + vertex 150.0275345701544 -124.08202726980842 -9.59999999999996 + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.97246542984436 -124.08202726980839 -9.60000000000005 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex 150.0275345701542 -120.64771269475769 -7.39999999999995 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701542 -120.64771269475769 -7.39999999999995 + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + endloop +endfacet +facet normal 2.7078805484912562e-14 -0.9238795325112917 0.3826834323650779 + outer loop + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + vertex 150.02753457015422 -124.44795309609748 -3.741180954897436 + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + endloop +endfacet +facet normal 2.7078805484912562e-14 -0.9238795325112917 0.3826834323650779 + outer loop + vertex 150.02753457015422 -124.44795309609748 -3.741180954897436 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + vertex -149.97246542984465 -124.44795309609741 -3.7411809548975263 + endloop +endfacet +facet normal 4.024562528319985e-14 -0.7071067811865452 -0.7071067811865499 + outer loop + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex 150.0275345701542 -120.64771269475769 -7.39999999999995 + endloop +endfacet +facet normal 4.024562528319985e-14 -0.7071067811865452 -0.7071067811865499 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + endloop +endfacet +facet normal 3.592621386430645e-14 1.705409617590812e-14 -1.0 + outer loop + vertex -149.97246542984436 -124.08202726980839 -9.60000000000005 + vertex 150.02753457015436 -122.6820272698084 -9.599999999999923 + vertex 150.0275345701544 -124.08202726980842 -9.59999999999996 + endloop +endfacet +facet normal 3.592621386430645e-14 1.705409617590812e-14 -1.0 + outer loop + vertex 150.02753457015436 -122.6820272698084 -9.599999999999923 + vertex -149.97246542984436 -124.08202726980839 -9.60000000000005 + vertex -149.9724654298445 -122.68202726980834 -9.600000000000035 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.9724654298445 -124.48202726980837 -9.20000000000005 + vertex 150.0275345701544 -124.08202726980842 -9.19999999999996 + vertex 150.02753457015442 -124.48202726980841 -9.19999999999996 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701544 -124.08202726980842 -9.19999999999996 + vertex -149.9724654298445 -124.48202726980837 -9.20000000000005 + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015436 -122.6820272698084 -9.599999999999923 + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex 150.0275345701543 -122.6820272698084 -7.3999999999999275 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex 150.02753457015436 -122.6820272698084 -9.599999999999923 + vertex -149.9724654298445 -122.68202726980834 -9.600000000000035 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -1.052465433482836e-15 + outer loop + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex 150.02753457015447 -118.18202726980839 -16.134314575050695 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -1.052465433482836e-15 + outer loop + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex 150.02753457015422 -118.1820272698084 -9.8656854249492 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex 150.02753457015427 -104.48202726980838 -21.99999999999995 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + vertex 150.0275345701541 -104.8820272698084 -16.799999999999965 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + vertex 150.0275345701541 -104.48202726980838 -16.79999999999996 + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + endloop +endfacet +facet normal -3.907009026439115e-14 1.0 2.739417086921043e-15 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + endloop +endfacet +facet normal -3.907009026439115e-14 1.0 2.739417086921043e-15 + outer loop + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015407 -104.88202726980839 -16.399999999999963 + vertex -149.97246542984473 -106.28202726980834 -16.400000000000055 + vertex 150.0275345701541 -106.28202726980841 -16.399999999999963 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984473 -106.28202726980834 -16.400000000000055 + vertex 150.02753457015407 -104.88202726980839 -16.399999999999963 + vertex -149.97246542984476 -104.88202726980836 -16.400000000000052 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex 150.02753457015388 -106.28202726980838 -9.599999999999953 + vertex 150.0275345701538 -106.28202726980842 -7.399999999999959 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015388 -106.28202726980838 -9.599999999999953 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984496 -106.28202726980834 -9.600000000000044 + endloop +endfacet +facet normal 3.592621386430645e-14 1.7054096175908306e-14 -1.0 + outer loop + vertex -149.97246542984496 -106.28202726980834 -9.600000000000044 + vertex 150.02753457015385 -104.88202726980839 -9.599999999999929 + vertex 150.02753457015388 -106.28202726980838 -9.599999999999953 + endloop +endfacet +facet normal 3.592621386430645e-14 1.7054096175908306e-14 -1.0 + outer loop + vertex 150.02753457015385 -104.88202726980839 -9.599999999999929 + vertex -149.97246542984496 -106.28202726980834 -9.600000000000044 + vertex -149.972465429845 -104.88202726980833 -9.60000000000002 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + vertex -149.97246542984465 -108.3163418448591 -18.60000000000005 + vertex 150.02753457015424 -108.31634184485912 -18.599999999999948 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984465 -108.3163418448591 -18.60000000000005 + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + endloop +endfacet +facet normal -4.024562528319985e-14 0.7071067811865452 0.7071067811865499 + outer loop + vertex 150.02753457015424 -108.31634184485912 -18.599999999999948 + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex 150.02753457015424 -110.7820272698084 -16.134314575050713 + endloop +endfacet +facet normal -4.024562528319985e-14 0.7071067811865452 0.7071067811865499 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex 150.02753457015424 -108.31634184485912 -18.599999999999948 + vertex -149.97246542984465 -108.3163418448591 -18.60000000000005 + endloop +endfacet +facet normal -1.2048156260518093e-15 0.7071067811865513 -0.7071067811865437 + outer loop + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + vertex 150.02753457015388 -108.31634184485917 -7.399999999999961 + endloop +endfacet +facet normal -1.2048156260518093e-15 0.7071067811865513 -0.7071067811865437 + outer loop + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + vertex 150.027534570154 -110.7820272698084 -9.865685424949215 + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015385 -104.88202726980839 -9.599999999999929 + vertex -149.97246542984504 -104.88202726980833 -9.20000000000002 + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984504 -104.88202726980833 -9.20000000000002 + vertex 150.02753457015385 -104.88202726980839 -9.599999999999929 + vertex -149.972465429845 -104.88202726980833 -9.60000000000002 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984504 -104.88202726980833 -9.20000000000002 + vertex 150.0275345701538 -104.48202726980841 -9.19999999999993 + vertex 150.02753457015385 -104.88202726980839 -9.19999999999993 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.0275345701538 -104.48202726980841 -9.19999999999993 + vertex -149.97246542984504 -104.88202726980833 -9.20000000000002 + vertex -149.97246542984507 -104.48202726980838 -9.20000000000002 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + vertex 150.02753457015407 -104.88202726980839 -16.399999999999963 + vertex 150.0275345701541 -104.8820272698084 -16.799999999999965 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015407 -104.88202726980839 -16.399999999999963 + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + vertex -149.97246542984476 -104.88202726980836 -16.400000000000052 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.0275345701541 -106.28202726980841 -16.399999999999963 + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + vertex 150.02753457015422 -106.28202726980838 -18.59999999999996 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + vertex 150.0275345701541 -106.28202726980841 -16.399999999999963 + vertex -149.97246542984473 -106.28202726980834 -16.400000000000055 + endloop +endfacet +facet normal -3.789340105087216e-14 0.7933533402912354 0.6087614290087203 + outer loop + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + endloop +endfacet +facet normal -3.789340105087216e-14 0.7933533402912354 0.6087614290087203 + outer loop + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex -149.97246542984513 -104.77492048862182 -3.29289321881348 + endloop +endfacet +facet normal -4.7817167538289876e-14 0.3826834323650812 0.9238795325112903 + outer loop + vertex 150.0275345701536 -104.98202726980841 -3.1339745962155057 + vertex -149.97246542984522 -105.22320822470584 -3.0340741737109713 + vertex 150.0275345701536 -105.2232082247059 -3.034074173710881 + endloop +endfacet +facet normal -4.7817167538289876e-14 0.3826834323650812 0.9238795325112903 + outer loop + vertex -149.97246542984522 -105.22320822470584 -3.0340741737109713 + vertex 150.0275345701536 -104.98202726980841 -3.1339745962155057 + vertex -149.97246542984527 -104.98202726980838 -3.133974596215596 + endloop +endfacet +facet normal -4.1646492410833785e-14 0.13052619222007247 0.9914448613738078 + outer loop + vertex 150.0275345701536 -105.2232082247059 -3.034074173710881 + vertex -149.97246542984522 -105.48202726980838 -3.000000000000034 + vertex 150.02753457015356 -105.4820272698084 -2.9999999999999436 + endloop +endfacet +facet normal -4.1646492410833785e-14 0.13052619222007247 0.9914448613738078 + outer loop + vertex -149.97246542984522 -105.48202726980838 -3.000000000000034 + vertex 150.0275345701536 -105.2232082247059 -3.034074173710881 + vertex -149.97246542984522 -105.22320822470584 -3.0340741737109713 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015356 -105.4820272698084 -2.9999999999999436 + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex 150.02753457015376 -110.6820272698084 -2.999999999999924 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex 150.02753457015356 -105.4820272698084 -2.9999999999999436 + vertex -149.97246542984522 -105.48202726980838 -3.000000000000034 + endloop +endfacet +facet normal -5.200343766171889e-14 0.6087614290087036 0.7933533402912483 + outer loop + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + vertex -149.97246542984527 -104.98202726980838 -3.133974596215596 + vertex 150.0275345701536 -104.98202726980841 -3.1339745962155057 + endloop +endfacet +facet normal -5.200343766171889e-14 0.6087614290087036 0.7933533402912483 + outer loop + vertex -149.97246542984527 -104.98202726980838 -3.133974596215596 + vertex 150.02753457015356 -104.77492048862186 -3.29289321881339 + vertex -149.97246542984513 -104.77492048862182 -3.29289321881348 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.0275345701538 -104.48202726980841 -9.19999999999993 + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex 150.0275345701538 -104.48202726980841 -9.19999999999993 + vertex -149.97246542984507 -104.48202726980838 -9.20000000000002 + endloop +endfacet +facet normal -3.6839007899199586e-14 0.9238795325112905 0.3826834323650808 + outer loop + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex 150.0275345701536 -104.61600186602396 -3.49999999999994 + endloop +endfacet +facet normal -3.6839007899199586e-14 0.9238795325112905 0.3826834323650808 + outer loop + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + vertex -149.97246542984513 -104.51610144351925 -3.741180954897518 + endloop +endfacet +facet normal -3.881934011071542e-14 0.9914448613738096 0.1305261922200573 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + vertex 150.02753457015365 -104.48202726980841 -3.999999999999939 + endloop +endfacet +facet normal -3.881934011071542e-14 0.9914448613738096 0.1305261922200573 + outer loop + vertex 150.02753457015356 -104.51610144351935 -3.7411809548974277 + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.97246542984513 -104.51610144351925 -3.741180954897518 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + vertex -149.97246542984507 -110.68202726980834 -3.400000000000036 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + vertex 150.02753457015376 -110.6820272698084 -2.999999999999924 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -9.400019899202893e-16 + outer loop + vertex 150.0275345701538 -110.68202726980842 -3.399999999999923 + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex -149.97246542984507 -110.68202726980834 -3.400000000000036 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.972465429845 -111.08202726980835 -4.80000000000007 + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex 150.02753457015388 -111.08202726980838 -4.799999999999969 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015376 -108.8820272698084 -4.799999999999966 + vertex -149.972465429845 -111.08202726980835 -4.80000000000007 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + vertex -149.97246542984465 -117.61634184485905 -9.300000000000056 + vertex 150.02753457015416 -117.61634184485912 -9.299999999999965 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984465 -117.61634184485905 -9.300000000000056 + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -8.997049082914168e-15 + outer loop + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex -149.972465429845 -111.08202726980835 -4.80000000000007 + vertex 150.02753457015388 -111.08202726980838 -4.799999999999969 + endloop +endfacet +facet normal 3.907009026439116e-14 -1.0 -8.997049082914168e-15 + outer loop + vertex -149.972465429845 -111.08202726980835 -4.80000000000007 + vertex 150.02753457015376 -111.08202726980839 -3.399999999999949 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + endloop +endfacet +facet normal 1.2048156260517146e-15 -0.7071067811865481 0.707106781186547 + outer loop + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + vertex 150.027534570154 -111.34771269475763 -9.29999999999996 + endloop +endfacet +facet normal 1.2048156260517146e-15 -0.7071067811865481 0.707106781186547 + outer loop + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + vertex 150.02753457015385 -108.8820272698084 -6.834314575050704 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + endloop +endfacet +facet normal -5.0005827697486894e-14 0.707106781186545 0.70710678118655 + outer loop + vertex 150.02753457015416 -117.61634184485912 -9.299999999999965 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + endloop +endfacet +facet normal -5.0005827697486894e-14 0.707106781186545 0.70710678118655 + outer loop + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex 150.02753457015416 -117.61634184485912 -9.299999999999965 + vertex -149.97246542984465 -117.61634184485905 -9.300000000000056 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex 150.02753457015405 -117.8820272698084 -4.799999999999952 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + endloop +endfacet +facet normal 3.592621386430726e-14 9.400019899202916e-16 -1.0 + outer loop + vertex 150.02753457015405 -117.8820272698084 -4.799999999999952 + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex -149.97246542984487 -117.88202726980836 -4.800000000000042 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 2.611827415552657e-14 + outer loop + vertex -149.97246542984487 -117.88202726980836 -4.800000000000042 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex 150.02753457015405 -117.8820272698084 -4.799999999999952 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 2.611827415552657e-14 + outer loop + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex -149.97246542984487 -117.88202726980836 -4.800000000000042 + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex 150.0275345701541 -120.0820272698084 -4.7999999999999545 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 9.400019899202893e-16 + outer loop + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex 150.02753457015416 -120.08202726980838 -6.834314575050715 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + vertex 150.027534570154 -118.28202726980842 -3.399999999999954 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + vertex 150.027534570154 -117.88202726980845 -3.399999999999954 + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.4649600931051686e-15 + outer loop + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex 150.027534570154 -118.28202726980842 -3.399999999999954 + endloop +endfacet +facet normal -3.907009026439116e-14 1.0 4.4649600931051686e-15 + outer loop + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + vertex -149.97246542984487 -118.28202726980838 -3.0000000000000453 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex -149.97246542984476 -123.4820272698084 -3.000000000000051 + vertex 150.02753457015413 -123.48202726980841 -2.9999999999999494 + endloop +endfacet +facet normal -3.592621386430726e-14 -9.400019899202916e-16 1.0 + outer loop + vertex -149.97246542984476 -123.4820272698084 -3.000000000000051 + vertex 150.02753457015396 -118.28202726980845 -2.999999999999955 + vertex -149.97246542984487 -118.28202726980838 -3.0000000000000453 + endloop +endfacet +facet normal -3.3995076299890834e-14 -0.13052619222007386 0.9914448613738075 + outer loop + vertex 150.02753457015413 -123.48202726980841 -2.9999999999999494 + vertex -149.97246542984473 -123.74084631491091 -3.034074173710977 + vertex 150.02753457015416 -123.74084631491093 -3.034074173710887 + endloop +endfacet +facet normal -3.3995076299890834e-14 -0.13052619222007386 0.9914448613738075 + outer loop + vertex -149.97246542984473 -123.74084631491091 -3.034074173710977 + vertex 150.02753457015413 -123.48202726980841 -2.9999999999999494 + vertex -149.97246542984476 -123.4820272698084 -3.000000000000051 + endloop +endfacet +facet normal -2.2944299965291228e-14 -0.3826834323650826 0.9238795325112898 + outer loop + vertex 150.02753457015416 -123.74084631491093 -3.034074173710887 + vertex -149.9724654298446 -123.98202726980837 -3.1339745962156043 + vertex 150.02753457015416 -123.9820272698084 -3.133974596215514 + endloop +endfacet +facet normal -2.2944299965291228e-14 -0.3826834323650826 0.9238795325112898 + outer loop + vertex -149.9724654298446 -123.98202726980837 -3.1339745962156043 + vertex 150.02753457015416 -123.74084631491093 -3.034074173710887 + vertex -149.97246542984473 -123.74084631491091 -3.034074173710977 + endloop +endfacet +facet normal -1.1437878031146923e-14 -0.6087614290087044 0.7933533402912476 + outer loop + vertex 150.02753457015416 -123.9820272698084 -3.133974596215514 + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex 150.0275345701542 -124.18913405099494 -3.2928932188133984 + endloop +endfacet +facet normal -1.1437878031146923e-14 -0.6087614290087044 0.7933533402912476 + outer loop + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex 150.02753457015416 -123.9820272698084 -3.133974596215514 + vertex -149.9724654298446 -123.98202726980837 -3.1339745962156043 + endloop +endfacet +facet normal -1.1474086062759331e-15 -0.7933533402912396 0.6087614290087152 + outer loop + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + vertex 150.0275345701542 -124.18913405099494 -3.2928932188133984 + endloop +endfacet +facet normal -1.1474086062759331e-15 -0.7933533402912396 0.6087614290087152 + outer loop + vertex 150.0275345701542 -124.34805267359285 -3.4999999999999485 + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.9724654298445 -124.48202726980837 -9.20000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.9724654298446 -123.82750859187085 -5.614110472164045 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.9724654298446 -123.82750859187085 -5.614110472164045 + vertex -149.9724654298446 -123.66766791586346 -6.000000000000034 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.9724654298446 -123.66766791586346 -6.000000000000034 + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex -149.9724654298446 -123.66766791586346 -6.000000000000034 + vertex -149.9724654298445 -123.41339811970684 -6.331370849898517 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex -149.9724654298445 -123.41339811970684 -6.331370849898517 + vertex -149.9724654298446 -123.08202726980842 -6.585640646055154 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex -149.9724654298446 -123.08202726980842 -6.585640646055154 + vertex -149.9724654298446 -122.69613774197241 -6.745481322062546 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + vertex -149.9724654298446 -122.69613774197241 -6.745481322062546 + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + vertex -149.9724654298446 -122.69613774197241 -6.745481322062546 + vertex -149.9724654298446 -122.28202726980837 -6.800000000000041 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + vertex -149.9724654298446 -122.28202726980837 -6.800000000000041 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -123.82750859187085 -5.614110472164045 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.97246542984453 -123.88202726980835 -5.200000000000013 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -123.88202726980835 -5.200000000000013 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.97246542984465 -123.82750859187088 -4.785889527835981 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -123.82750859187088 -4.785889527835981 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.97246542984453 -123.66766791586346 -4.400000000000015 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -123.66766791586346 -4.400000000000015 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.97246542984473 -123.41339811970683 -4.068629150101555 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -123.41339811970683 -4.068629150101555 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.9724654298446 -123.08202726980835 -3.8143593539449396 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -123.08202726980835 -3.8143593539449396 + vertex -149.97246542984465 -124.48202726980834 -4.000000000000038 + vertex -149.97246542984465 -124.44795309609741 -3.7411809548975263 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -123.08202726980835 -3.8143593539449396 + vertex -149.97246542984465 -124.44795309609741 -3.7411809548975263 + vertex -149.97246542984473 -122.69613774197241 -3.65451867793752 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -122.69613774197241 -3.65451867793752 + vertex -149.97246542984465 -124.44795309609741 -3.7411809548975263 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -122.69613774197241 -3.65451867793752 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + vertex -149.97246542984473 -122.28202726980837 -3.600000000000047 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex -149.97246542984487 -118.28202726980838 -3.0000000000000453 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -118.28202726980838 -3.0000000000000453 + vertex -149.97246542984473 -124.18913405099492 -3.2928932188134885 + vertex -149.9724654298446 -123.98202726980837 -3.1339745962156043 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -118.28202726980838 -3.0000000000000453 + vertex -149.9724654298446 -123.98202726980837 -3.1339745962156043 + vertex -149.97246542984473 -123.74084631491091 -3.034074173710977 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -118.28202726980838 -3.0000000000000453 + vertex -149.97246542984473 -123.74084631491091 -3.034074173710977 + vertex -149.97246542984476 -123.4820272698084 -3.000000000000051 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex -149.97246542984468 -120.89638662375324 -6.000000000000065 + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -120.89638662375324 -6.000000000000065 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex -149.97246542984465 -121.15065641990988 -6.331370849898536 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -121.15065641990988 -6.331370849898536 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex -149.97246542984465 -121.48202726980836 -6.585640646055151 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -121.48202726980836 -6.585640646055151 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex -149.97246542984468 -121.86791679764434 -6.7454813220625685 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -121.86791679764434 -6.7454813220625685 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + vertex -149.9724654298446 -122.28202726980837 -6.800000000000041 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex -149.97246542984468 -120.89638662375324 -6.000000000000065 + vertex -149.97246542984468 -120.73654594774585 -5.614110472164098 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex -149.97246542984468 -120.73654594774585 -5.614110472164098 + vertex -149.97246542984465 -120.68202726980836 -5.200000000000067 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex -149.97246542984465 -120.68202726980836 -5.200000000000067 + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -120.08202726980835 -4.800000000000045 + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex -149.97246542984487 -117.88202726980836 -4.800000000000042 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980836 -4.800000000000042 + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984473 -120.73654594774582 -4.785889527836012 + vertex -149.97246542984465 -120.89638662375327 -4.400000000000046 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984465 -120.89638662375327 -4.400000000000046 + vertex -149.97246542984473 -121.15065641990988 -4.068629150101574 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984473 -121.15065641990988 -4.068629150101574 + vertex -149.97246542984473 -121.48202726980833 -3.814359353944937 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984473 -121.48202726980833 -3.814359353944937 + vertex -149.97246542984465 -121.86791679764431 -3.6545186779375425 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984465 -121.86791679764431 -3.6545186779375425 + vertex -149.97246542984473 -122.28202726980837 -3.600000000000047 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984473 -122.28202726980837 -3.600000000000047 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984487 -117.88202726980838 -3.4000000000000443 + vertex -149.97246542984468 -124.3480526735928 -3.5000000000000386 + vertex -149.97246542984487 -118.28202726980841 -3.4000000000000443 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.97246542984436 -111.08202726980832 -22.600000000000048 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.9724654298445 -107.09613774197234 -22.345481322062547 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.9724654298445 -107.09613774197234 -22.345481322062547 + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -107.09613774197234 -22.345481322062547 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.9724654298445 -107.48202726980833 -22.185640646055155 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -107.48202726980833 -22.185640646055155 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.9724654298445 -107.8133981197068 -21.931370849898517 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -107.8133981197068 -21.931370849898517 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.97246542984442 -108.06766791586347 -21.600000000000044 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -108.06766791586347 -21.600000000000044 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.97246542984453 -108.22750859187089 -21.21411047216408 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -108.22750859187089 -21.21411047216408 + vertex -149.97246542984445 -111.08202726980835 -21.20000000000005 + vertex -149.97246542984453 -108.88202726980833 -21.200000000000035 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -108.22750859187089 -21.21411047216408 + vertex -149.97246542984453 -108.88202726980833 -21.200000000000035 + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + vertex -149.97246542984453 -108.88202726980833 -21.200000000000035 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -108.28202726980835 -20.800000000000026 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.9724654298446 -108.22750859187086 -20.385889527835992 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -108.22750859187086 -20.385889527835992 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.9724654298446 -108.06766791586347 -20.000000000000025 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -108.06766791586347 -20.000000000000025 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.97246542984453 -107.81339811970683 -19.668629150101555 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -107.81339811970683 -19.668629150101555 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.9724654298446 -107.48202726980833 -19.41435935394494 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -107.48202726980833 -19.41435935394494 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.9724654298445 -107.09613774197234 -19.254518677937522 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -107.09613774197234 -19.254518677937522 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -106.28202726980834 -16.400000000000055 + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + vertex -149.97246542984473 -106.28202726980834 -16.400000000000055 + vertex -149.97246542984476 -104.88202726980836 -16.400000000000052 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + vertex -149.9724654298446 -104.51610144351925 -22.25881904510254 + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.51610144351925 -22.25881904510254 + vertex -149.9724654298445 -106.68202726980836 -22.400000000000045 + vertex -149.9724654298445 -106.26791679764435 -22.34548132206257 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.51610144351925 -22.25881904510254 + vertex -149.9724654298445 -106.26791679764435 -22.34548132206257 + vertex -149.97246542984445 -105.88202726980833 -22.185640646055152 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -104.51610144351925 -22.25881904510254 + vertex -149.97246542984445 -105.88202726980833 -22.185640646055152 + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex -149.97246542984445 -105.88202726980833 -22.185640646055152 + vertex -149.97246542984445 -105.55065641990987 -21.931370849898535 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex -149.97246542984445 -105.55065641990987 -21.931370849898535 + vertex -149.9724654298446 -105.29638662375325 -21.600000000000065 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex -149.9724654298446 -105.29638662375325 -21.600000000000065 + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -104.48202726980834 -22.00000000000003 + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984465 -105.13654594774582 -21.214110472164098 + vertex -149.97246542984465 -105.08202726980834 -20.800000000000065 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984465 -105.08202726980834 -20.800000000000065 + vertex -149.97246542984468 -105.13654594774583 -20.385889527836035 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984468 -105.13654594774583 -20.385889527836035 + vertex -149.97246542984465 -105.29638662375322 -20.000000000000046 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984465 -105.29638662375322 -20.000000000000046 + vertex -149.97246542984468 -105.55065641990984 -19.668629150101573 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984468 -105.55065641990984 -19.668629150101573 + vertex -149.97246542984465 -105.88202726980833 -19.414359353944935 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984465 -105.88202726980833 -19.414359353944935 + vertex -149.97246542984465 -106.26791679764428 -19.254518677937543 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984465 -106.26791679764428 -19.254518677937543 + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + vertex -149.97246542984453 -106.68202726980832 -19.20000000000005 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + vertex -149.97246542984465 -108.3163418448591 -18.60000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984476 -104.48202726980834 -16.80000000000004 + vertex -149.97246542984465 -106.28202726980835 -18.60000000000005 + vertex -149.97246542984482 -104.88202726980836 -16.80000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -120.68202726980833 -20.800000000000026 + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + vertex -149.97246542984414 -120.73654594774585 -21.214110472164055 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + vertex -149.97246542984414 -120.68202726980833 -20.800000000000026 + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.97246542984414 -120.68202726980833 -20.800000000000026 + vertex -149.9724654298442 -120.73654594774582 -20.385889527835992 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.9724654298442 -120.73654594774582 -20.385889527835992 + vertex -149.9724654298442 -120.89638662375324 -20.000000000000025 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.9724654298442 -120.89638662375324 -20.000000000000025 + vertex -149.9724654298442 -121.15065641990988 -19.668629150101555 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.9724654298442 -121.15065641990988 -19.668629150101555 + vertex -149.97246542984422 -121.48202726980836 -19.414359353944917 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.97246542984422 -121.48202726980836 -19.414359353944917 + vertex -149.97246542984422 -121.86791679764431 -19.2545186779375 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.97246542984422 -121.86791679764431 -19.2545186779375 + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -123.74084631491088 -22.96592582628912 + vertex -149.9724654298442 -118.28202726980831 -23.000000000000053 + vertex -149.972465429844 -123.4820272698084 -23.000000000000057 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -118.28202726980831 -23.000000000000053 + vertex -149.972465429844 -123.74084631491088 -22.96592582628912 + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + vertex -149.972465429844 -123.74084631491088 -22.96592582628912 + vertex -149.972465429844 -123.98202726980837 -22.86602540378449 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + vertex -149.972465429844 -123.98202726980837 -22.86602540378449 + vertex -149.972465429844 -124.1891340509949 -22.70710678118661 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + vertex -149.972465429844 -124.1891340509949 -22.70710678118661 + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -118.2820272698083 -22.600000000000055 + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + vertex -149.97246542984405 -121.86791679764434 -22.34548132206253 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -117.88202726980832 -22.60000000000005 + vertex -149.97246542984405 -121.86791679764434 -22.34548132206253 + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + vertex -149.97246542984405 -121.86791679764434 -22.34548132206253 + vertex -149.9724654298441 -121.48202726980836 -22.185640646055134 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + vertex -149.9724654298441 -121.48202726980836 -22.185640646055134 + vertex -149.9724654298441 -121.15065641990988 -21.931370849898517 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + vertex -149.9724654298441 -121.15065641990988 -21.931370849898517 + vertex -149.9724654298441 -120.89638662375329 -21.600000000000023 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + vertex -149.9724654298441 -120.89638662375329 -21.600000000000023 + vertex -149.97246542984414 -120.73654594774585 -21.214110472164055 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -117.88202726980836 -21.200000000000053 + vertex -149.97246542984414 -120.73654594774585 -21.214110472164055 + vertex -149.97246542984414 -120.08202726980835 -21.200000000000056 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -110.68202726980837 -23.000000000000036 + vertex -149.97246542984453 -105.2232082247058 -22.9659258262891 + vertex -149.9724654298445 -105.48202726980834 -23.00000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -105.2232082247058 -22.9659258262891 + vertex -149.97246542984442 -110.68202726980837 -23.000000000000036 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -105.2232082247058 -22.9659258262891 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.97246542984453 -104.98202726980836 -22.866025403784477 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -104.98202726980836 -22.866025403784477 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.97246542984453 -104.77492048862179 -22.707106781186592 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -104.77492048862179 -22.707106781186592 + vertex -149.97246542984436 -110.68202726980833 -22.60000000000004 + vertex -149.97246542984453 -104.61600186602391 -22.50000000000003 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -124.44795309609744 -22.258819045102573 + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + vertex -149.972465429844 -124.34805267359279 -22.50000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -122.2820272698084 -22.400000000000023 + vertex -149.97246542984405 -124.44795309609744 -22.258819045102573 + vertex -149.97246542984405 -122.69613774197241 -22.345481322062533 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -122.69613774197241 -22.345481322062533 + vertex -149.97246542984405 -124.44795309609744 -22.258819045102573 + vertex -149.9724654298441 -123.08202726980838 -22.185640646055123 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -123.08202726980838 -22.185640646055123 + vertex -149.97246542984405 -124.44795309609744 -22.258819045102573 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -123.08202726980838 -22.185640646055123 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + vertex -149.97246542984396 -123.41339811970684 -21.931370849898506 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984396 -123.41339811970684 -21.931370849898506 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + vertex -149.97246542984396 -123.66766791586348 -21.600000000000016 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984396 -123.66766791586348 -21.600000000000016 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + vertex -149.972465429844 -124.48202726980833 -22.00000000000006 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -123.82750859187088 -21.214110472164048 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.97246542984396 -123.88202726980838 -20.800000000000015 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984396 -123.88202726980838 -20.800000000000015 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.97246542984414 -123.82750859187088 -20.385889527835985 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984414 -123.82750859187088 -20.385889527835985 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.972465429844 -123.66766791586348 -20.000000000000018 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429844 -123.66766791586348 -20.000000000000018 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.9724654298441 -123.41339811970683 -19.668629150101545 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298441 -123.41339811970683 -19.668629150101545 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.9724654298442 -123.08202726980838 -19.414359353944903 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298442 -123.08202726980838 -19.414359353944903 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.97246542984405 -122.69613774197241 -19.254518677937508 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -122.69613774197241 -19.254518677937508 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984405 -122.28202726980832 -19.200000000000006 + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex -149.97246542984422 -124.48202726980834 -16.800000000000093 + vertex -149.97246542984422 -124.08202726980835 -16.80000000000009 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + vertex -149.97246542984422 -124.08202726980835 -16.80000000000009 + vertex -149.97246542984422 -122.68202726980837 -16.400000000000063 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -122.68202726980837 -16.400000000000063 + vertex -149.97246542984422 -124.08202726980835 -16.80000000000009 + vertex -149.97246542984422 -124.08202726980832 -16.400000000000095 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984465 -117.61634184485905 -9.300000000000056 + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -117.61634184485905 -9.300000000000056 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -117.61634184485905 -9.300000000000056 + vertex -149.97246542984468 -120.64771269475763 -7.40000000000004 + vertex -149.97246542984468 -120.08202726980835 -6.834314575050805 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.9724654298445 -122.68202726980834 -9.600000000000035 + vertex -149.97246542984436 -124.08202726980839 -9.60000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -122.68202726980834 -9.600000000000035 + vertex -149.97246542984445 -124.08202726980836 -9.20000000000005 + vertex -149.9724654298445 -122.68202726980837 -7.40000000000004 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -115.18083869158517 -15.607999730980517 + vertex -149.9724654298445 -114.48202726980834 -15.700000000000038 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -115.18083869158517 -15.607999730980517 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -115.83202726980835 -15.338268590218007 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -115.83202726980835 -15.338268590218007 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -116.39121557901203 -14.909188309203735 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -116.39121557901203 -14.909188309203735 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -116.82029586002636 -14.350000000000055 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -116.82029586002636 -14.350000000000055 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -117.09002700078885 -13.698811421776844 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -117.09002700078885 -13.698811421776844 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -117.09002700078885 -13.698811421776844 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984453 -117.18202726980839 -13.000000000000046 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -117.18202726980839 -13.000000000000046 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984445 -117.09002700078882 -12.30118857822325 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984445 -117.09002700078882 -12.30118857822325 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.9724654298446 -116.82029586002633 -11.650000000000038 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -116.82029586002633 -11.650000000000038 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984468 -116.39121557901206 -11.09081169079636 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984468 -116.39121557901206 -11.09081169079636 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984453 -115.83202726980834 -10.661731409782071 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984453 -115.83202726980834 -10.661731409782071 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984473 -115.18083869158517 -10.392000269019562 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -115.18083869158517 -10.392000269019562 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984473 -114.48202726980833 -10.30000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -114.48202726980833 -10.30000000000005 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984465 -118.18202726980833 -9.865685424949291 + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + vertex -149.97246542984487 -111.3477126947576 -9.300000000000061 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.31634184485912 -7.400000000000051 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + vertex -149.972465429845 -111.08202726980835 -4.80000000000007 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.97246542984507 -108.22750859187083 -4.785889527836001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -108.22750859187083 -4.785889527836001 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.972465429845 -108.06766791586348 -4.400000000000034 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.06766791586348 -4.400000000000034 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.9724654298452 -107.81339811970683 -4.068629150101538 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -107.81339811970683 -4.068629150101538 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.97246542984513 -107.48202726980836 -3.8143593539449228 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -107.48202726980836 -3.8143593539449228 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.9724654298452 -107.09613774197234 -3.6545186779375283 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -107.09613774197234 -3.6545186779375283 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.9724654298452 -106.68202726980832 -3.600000000000033 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298452 -106.68202726980832 -3.600000000000033 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex -149.97246542984504 -111.08202726980835 -3.40000000000005 + vertex -149.97246542984507 -110.68202726980834 -3.400000000000036 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex -149.97246542984507 -110.68202726980834 -3.400000000000036 + vertex -149.97246542984513 -104.77492048862182 -3.29289321881348 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -104.77492048862182 -3.29289321881348 + vertex -149.97246542984507 -110.68202726980834 -3.400000000000036 + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -104.77492048862182 -3.29289321881348 + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex -149.97246542984527 -104.98202726980838 -3.133974596215596 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.98202726980838 -3.133974596215596 + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex -149.97246542984522 -105.22320822470584 -3.0340741737109713 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -105.22320822470584 -3.0340741737109713 + vertex -149.97246542984507 -110.68202726980837 -3.000000000000037 + vertex -149.97246542984522 -105.48202726980838 -3.000000000000034 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.972465429845 -104.88202726980833 -9.60000000000002 + vertex -149.97246542984496 -106.28202726980834 -9.600000000000044 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -104.88202726980833 -9.60000000000002 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984504 -104.88202726980833 -9.20000000000002 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -104.88202726980833 -9.20000000000002 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984507 -104.48202726980838 -9.20000000000002 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.48202726980838 -9.20000000000002 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984504 -105.29638662375325 -6.000000000000051 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.48202726980838 -9.20000000000002 + vertex -149.97246542984504 -105.29638662375325 -6.000000000000051 + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -104.48202726980838 -9.20000000000002 + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -105.29638662375325 -6.000000000000051 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984513 -105.55065641990987 -6.331370849898522 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -105.55065641990987 -6.331370849898522 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984507 -105.88202726980833 -6.585640646055159 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -105.88202726980833 -6.585640646055159 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984507 -106.26791679764433 -6.745481322062554 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -106.26791679764433 -6.745481322062554 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.97246542984507 -106.6820272698084 -6.80000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -106.6820272698084 -6.80000000000005 + vertex -149.97246542984504 -106.28202726980835 -7.400000000000048 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.97246542984513 -105.13654594774586 -5.614110472164084 + vertex -149.97246542984507 -105.08202726980836 -5.200000000000053 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.97246542984507 -105.08202726980836 -5.200000000000053 + vertex -149.9724654298452 -105.13654594774582 -4.78588952783602 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.9724654298452 -105.13654594774582 -4.78588952783602 + vertex -149.97246542984507 -105.29638662375328 -4.400000000000054 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.97246542984507 -105.29638662375328 -4.400000000000054 + vertex -149.9724654298452 -105.55065641990984 -4.068629150101582 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.9724654298452 -105.55065641990984 -4.068629150101582 + vertex -149.9724654298452 -105.88202726980833 -3.8143593539449454 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984527 -104.48202726980836 -4.000000000000029 + vertex -149.9724654298452 -105.88202726980833 -3.8143593539449454 + vertex -149.97246542984513 -104.51610144351925 -3.741180954897518 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -104.51610144351925 -3.741180954897518 + vertex -149.9724654298452 -105.88202726980833 -3.8143593539449454 + vertex -149.97246542984522 -106.2679167976443 -3.6545186779375283 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984513 -104.51610144351925 -3.741180954897518 + vertex -149.97246542984522 -106.2679167976443 -3.6545186779375283 + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984522 -104.61600186602392 -3.50000000000003 + vertex -149.97246542984522 -106.2679167976443 -3.6545186779375283 + vertex -149.9724654298452 -106.68202726980832 -3.600000000000033 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex -149.97246542984496 -107.09613774197238 -6.745481322062554 + vertex -149.97246542984507 -106.6820272698084 -6.80000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -107.09613774197238 -6.745481322062554 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex -149.97246542984507 -107.48202726980838 -6.585640646055137 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -107.48202726980838 -6.585640646055137 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex -149.97246542984496 -107.81339811970685 -6.3313708498985 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984496 -107.81339811970685 -6.3313708498985 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex -149.97246542984504 -108.06766791586347 -6.000000000000031 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -108.06766791586347 -6.000000000000031 + vertex -149.972465429845 -108.88202726980838 -6.834314575050794 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984504 -108.06766791586347 -6.000000000000031 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + vertex -149.97246542984507 -108.22750859187089 -5.6141104721640644 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984507 -108.22750859187089 -5.6141104721640644 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + vertex -149.972465429845 -108.28202726980838 -5.200000000000033 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.972465429845 -108.28202726980838 -5.200000000000033 + vertex -149.97246542984507 -108.88202726980833 -4.800000000000056 + vertex -149.97246542984507 -108.22750859187083 -4.785889527836001 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.97246542984422 -120.64771269475759 -18.60000000000005 + vertex -149.97246542984428 -117.61634184485911 -16.700000000000063 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984422 -120.64771269475759 -18.60000000000005 + vertex -149.97246542984422 -120.08202726980838 -19.16568542494932 + vertex -149.97246542984422 -122.68202726980837 -18.60000000000006 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984428 -117.61634184485911 -16.700000000000063 + vertex -149.97246542984422 -120.64771269475759 -18.60000000000005 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984428 -117.61634184485911 -16.700000000000063 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.97246542984442 -118.18202726980836 -16.134314575050784 + vertex -149.9724654298445 -114.48202726980834 -15.700000000000038 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.9724654298445 -114.48202726980834 -15.700000000000038 + vertex -149.97246542984453 -113.78321584803155 -15.607999730980529 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.97246542984453 -113.78321584803155 -15.607999730980529 + vertex -149.97246542984453 -113.13202726980836 -15.33826859021802 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.97246542984453 -113.13202726980836 -15.33826859021802 + vertex -149.9724654298445 -112.57283896060466 -14.909188309203731 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.9724654298445 -112.57283896060466 -14.909188309203731 + vertex -149.97246542984465 -112.14375867959039 -14.350000000000053 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.97246542984465 -112.14375867959039 -14.350000000000053 + vertex -149.97246542984468 -111.87402753882786 -13.698811421776819 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + vertex -149.97246542984468 -111.87402753882786 -13.698811421776819 + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984468 -111.87402753882786 -13.698811421776819 + vertex -149.97246542984468 -111.78202726980835 -13.000000000000021 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984468 -111.78202726980835 -13.000000000000021 + vertex -149.97246542984476 -111.8740275388279 -12.3011885782232 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984476 -111.8740275388279 -12.3011885782232 + vertex -149.97246542984473 -112.14375867959039 -11.650000000000011 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984473 -112.14375867959039 -11.650000000000011 + vertex -149.97246542984476 -112.57283896060468 -11.090811690796333 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984476 -112.57283896060468 -11.090811690796333 + vertex -149.97246542984476 -113.13202726980836 -10.661731409782044 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984476 -113.13202726980836 -10.661731409782044 + vertex -149.97246542984476 -113.78321584803155 -10.39200026901956 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984473 -110.78202726980835 -9.865685424949328 + vertex -149.97246542984476 -113.78321584803155 -10.39200026901956 + vertex -149.97246542984473 -114.48202726980833 -10.30000000000005 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + vertex -149.97246542984465 -108.3163418448591 -18.60000000000005 + vertex -149.97246542984453 -108.88202726980833 -19.165685424949274 + endloop +endfacet +facet normal -1.0 -4.59687843346329e-19 -2.9750497701033086e-16 + outer loop + vertex -149.97246542984465 -108.3163418448591 -18.60000000000005 + vertex -149.9724654298445 -111.34771269475763 -16.700000000000028 + vertex -149.9724654298446 -110.78202726980835 -16.134314575050794 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + vertex 150.0275345701538 -106.68202726980843 -6.799999999999959 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + vertex 150.02753457015376 -106.26791679764438 -6.745481322062464 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -107.09613774197246 -6.745481322062464 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + vertex 150.02753457015376 -105.88202726980843 -6.58564064605507 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015382 -107.48202726980843 -6.5856406460550465 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + vertex 150.0275345701537 -105.55065641990993 -6.331370849898432 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -107.81339811970689 -6.331370849898409 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex 150.0275345701537 -105.29638662375329 -5.999999999999961 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.06766791586351 -5.999999999999941 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + vertex 150.0275345701537 -105.1365459477459 -5.614110472163994 + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.22750859187093 -5.614110472163975 + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + vertex 150.02753457015368 -105.0820272698084 -5.199999999999962 + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701538 -108.28202726980838 -5.1999999999999424 + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex 150.02753457015368 -105.1365459477459 -4.785889527835931 + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015376 -108.22750859187093 -4.785889527835911 + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + vertex 150.02753457015368 -105.29638662375329 -4.399999999999964 + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015373 -108.06766791586351 -4.399999999999944 + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + vertex 150.02753457015365 -105.55065641990991 -4.068629150101493 + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.0275345701537 -107.81339811970687 -4.068629150101447 + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + vertex 150.02753457015368 -105.88202726980838 -3.8143593539448553 + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015368 -107.4820272698084 -3.8143593539448326 + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + endloop +endfacet +facet normal 1.0 -9.193756866918206e-19 2.9700185742271525e-16 + outer loop + vertex 150.02753457015368 -107.09613774197238 -3.654518677937438 + vertex 150.02753457015362 -106.26791679764435 -3.654518677937438 + vertex 150.02753457015368 -106.68202726980839 -3.599999999999943 + endloop +endfacet +facet normal -0.46392867916165254 0.8858725532780236 1.0458099413404683e-16 + outer loop + vertex 165.50033391975418 -116.80811057410425 -3.000000000000062 + vertex 164.18392212485122 -117.49751130447146 -62.600000000000065 + vertex 164.18392212485122 -117.49751130447146 -3.000000000000062 + endloop +endfacet +facet normal -0.46392867916165254 0.8858725532780236 1.0458099413404683e-16 + outer loop + vertex 164.18392212485122 -117.49751130447146 -62.600000000000065 + vertex 165.50033391975418 -116.80811057410425 -3.000000000000062 + vertex 165.50033391975418 -116.80811057410422 -62.600000000000065 + endloop +endfacet +facet normal -0.30989713538576374 0.9507700907578538 7.690445521229562e-17 + outer loop + vertex 160.07805400761478 -119.22742144815793 -3.000000000000062 + vertex 158.66520409248508 -119.68793040367179 -62.600000000000065 + vertex 158.66520409248508 -119.68793040367179 -3.000000000000062 + endloop +endfacet +facet normal -0.30989713538576374 0.9507700907578538 7.690445521229562e-17 + outer loop + vertex 158.66520409248508 -119.68793040367179 -62.600000000000065 + vertex 160.07805400761478 -119.22742144815793 -3.000000000000062 + vertex 160.07805400761478 -119.22742144815793 -62.600000000000065 + endloop +endfacet +facet normal -0.9861411980746715 -0.16590821998879884 1.820889389375274e-16 + outer loop + vertex 183.26546823547173 -79.06564190936425 -3.000000000000062 + vertex 183.51200882063426 -80.53105349682295 -62.600000000000065 + vertex 183.51200882063426 -80.53105349682295 -3.000000000000062 + endloop +endfacet +facet normal -0.9861411980746715 -0.16590821998879884 1.820889389375274e-16 + outer loop + vertex 183.51200882063426 -80.53105349682295 -62.600000000000065 + vertex 183.26546823547173 -79.06564190936425 -3.000000000000062 + vertex 183.2654682354717 -79.06564190936425 -62.600000000000065 + endloop +endfacet +facet normal -0.6377703208595134 0.7702266016119889 1.3498487096513938e-16 + outer loop + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 170.4439108399647 -113.51945860333161 -62.600000000000065 + vertex 170.4439108399647 -113.51945860333164 -3.000000000000062 + endloop +endfacet +facet normal -0.6377703208595134 0.7702266016119889 1.3498487096513938e-16 + outer loop + vertex 170.4439108399647 -113.51945860333161 -62.600000000000065 + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + endloop +endfacet +facet normal -1.5543122344752188e-15 -1.0 -1.9625534153898396e-17 + outer loop + vertex 155.41311056879684 -104.48202726980838 -3.0000000000000733 + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 155.41311056879684 -104.48202726980838 -62.60000000000008 + endloop +endfacet +facet normal -1.5543122344752188e-15 -1.0 -1.9625534153898396e-17 + outer loop + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 155.41311056879684 -104.48202726980838 -3.0000000000000733 + vertex 153.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal -0.18844624350994066 0.9820835062798847 5.469233483307139e-17 + outer loop + vertex 154.3285555435008 -120.7098019533102 -3.000000000000062 + vertex 155.78793737722236 -120.42976973338907 -62.600000000000065 + vertex 154.32855554350078 -120.7098019533102 -62.600000000000065 + endloop +endfacet +facet normal -0.18844624350994066 0.9820835062798847 5.469233483307139e-17 + outer loop + vertex 155.78793737722236 -120.42976973338907 -62.600000000000065 + vertex 154.3285555435008 -120.7098019533102 -3.000000000000062 + vertex 155.78793737722236 -120.42976973338907 -3.000000000000062 + endloop +endfacet +facet normal -0.22935485323248733 0.9733428744788264 6.220955760198345e-17 + outer loop + vertex 155.78793737722236 -120.42976973338907 -3.000000000000062 + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + vertex 155.78793737722236 -120.42976973338907 -62.600000000000065 + endloop +endfacet +facet normal -0.22935485323248733 0.9733428744788264 6.220955760198345e-17 + outer loop + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + vertex 155.78793737722236 -120.42976973338907 -3.000000000000062 + vertex 157.23433058097086 -120.0889470801798 -3.000000000000062 + endloop +endfacet +facet normal -0.9920516018175776 0.12583171035624832 1.8892534971894315e-16 + outer loop + vertex 183.6921424816438 -89.42252419859925 -3.000000000000062 + vertex 183.50515582416938 -90.89671868058495 -62.600000000000065 + vertex 183.5051558241694 -90.89671868058495 -3.000000000000062 + endloop +endfacet +facet normal -0.9920516018175776 0.12583171035624832 1.8892534971894315e-16 + outer loop + vertex 183.50515582416938 -90.89671868058495 -62.600000000000065 + vertex 183.6921424816438 -89.42252419859925 -3.000000000000062 + vertex 183.6921424816438 -89.42252419859925 -62.600000000000065 + endloop +endfacet +facet normal -0.999097175068117 0.04248334698335731 1.8861380718886244e-16 + outer loop + vertex 183.88044108012068 -86.45713502014631 -3.000000000000062 + vertex 183.81731057805365 -87.94179926518602 -62.600000000000065 + vertex 183.81731057805365 -87.94179926518602 -3.000000000000062 + endloop +endfacet +facet normal -0.999097175068117 0.04248334698335731 1.8861380718886244e-16 + outer loop + vertex 183.81731057805365 -87.94179926518602 -62.600000000000065 + vertex 183.88044108012068 -86.45713502014631 -3.000000000000062 + vertex 183.88044108012068 -86.4571350201463 -62.600000000000065 + endloop +endfacet +facet normal -0.9922171154055783 -0.1245198614528357 1.8404317463084559e-16 + outer loop + vertex 183.51200882063426 -80.53105349682295 -3.000000000000062 + vertex 183.6970460629663 -82.00549393296835 -62.600000000000065 + vertex 183.6970460629663 -82.00549393296835 -3.000000000000062 + endloop +endfacet +facet normal -0.9922171154055783 -0.1245198614528357 1.8404317463084559e-16 + outer loop + vertex 183.6970460629663 -82.00549393296835 -62.600000000000065 + vertex 183.51200882063426 -80.53105349682295 -3.000000000000062 + vertex 183.51200882063426 -80.53105349682295 -62.600000000000065 + endloop +endfacet +facet normal -0.3882711944089143 0.9215451587373649 9.106128389727603e-17 + outer loop + vertex 162.83982945717034 -118.13125279867626 -3.000000000000062 + vertex 161.47040796193536 -118.70822606424322 -62.600000000000065 + vertex 161.4704079619354 -118.70822606424322 -3.000000000000062 + endloop +endfacet +facet normal -0.3882711944089143 0.9215451587373649 9.106128389727603e-17 + outer loop + vertex 161.47040796193536 -118.70822606424322 -62.600000000000065 + vertex 162.83982945717034 -118.13125279867626 -3.000000000000062 + vertex 162.83982945717034 -118.13125279867626 -62.600000000000065 + endloop +endfacet +facet normal -0.26986211191720677 0.962898977334375 6.961791905771743e-17 + outer loop + vertex 158.66520409248508 -119.68793040367179 -3.000000000000062 + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + vertex 157.23433058097086 -120.0889470801798 -3.000000000000062 + endloop +endfacet +facet normal -0.26986211191720677 0.962898977334375 6.961791905771743e-17 + outer loop + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + vertex 158.66520409248508 -119.68793040367179 -3.000000000000062 + vertex 158.66520409248508 -119.68793040367179 -62.600000000000065 + endloop +endfacet +facet normal -0.9965567391136532 -0.08291360399332831 1.8567535078147348e-16 + outer loop + vertex 183.6970460629663 -82.00549393296835 -3.000000000000062 + vertex 183.82025616339308 -83.48638307532282 -62.600000000000065 + vertex 183.8202561633931 -83.48638307532283 -3.000000000000062 + endloop +endfacet +facet normal -0.9965567391136532 -0.08291360399332831 1.8567535078147348e-16 + outer loop + vertex 183.82025616339308 -83.48638307532282 -62.600000000000065 + vertex 183.6970460629663 -82.00549393296835 -3.000000000000062 + vertex 183.6970460629663 -82.00549393296835 -62.600000000000065 + endloop +endfacet +facet normal -0.5363402452594229 0.8440018609665869 1.1736899405614502e-16 + outer loop + vertex 168.04095293703554 -115.26725225780693 -3.000000000000062 + vertex 166.7867612357742 -116.06425699887048 -62.600000000000065 + vertex 166.7867612357742 -116.06425699887048 -3.000000000000062 + endloop +endfacet +facet normal -0.5363402452594229 0.8440018609665869 1.1736899405614502e-16 + outer loop + vertex 166.7867612357742 -116.06425699887048 -62.600000000000065 + vertex 168.04095293703554 -115.26725225780693 -3.000000000000062 + vertex 168.04095293703554 -115.26725225780693 -62.600000000000065 + endloop +endfacet +facet normal -0.9576170825074757 -0.2880443078588266 1.7433085302539735e-16 + outer loop + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + vertex 182.16167407948234 -74.74911777963072 -62.600000000000065 + vertex 182.58970960549215 -76.17214236454272 -62.600000000000065 + endloop +endfacet +facet normal -0.9576170825074757 -0.2880443078588266 1.7433085302539735e-16 + outer loop + vertex 182.16167407948234 -74.74911777963072 -62.600000000000065 + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + vertex 182.16167407948234 -74.74911777963072 -3.000000000000062 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885077e-17 + outer loop + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + vertex 165.7053679209021 -107.53751347666713 -62.600000000000065 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885077e-17 + outer loop + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + vertex 172.33046225985308 -111.36251347666713 -3.000000000000062 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885077e-17 + outer loop + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 155.41311056879684 -104.48202726980838 -62.60000000000008 + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885077e-17 + outer loop + vertex 155.41311056879684 -104.48202726980838 -62.60000000000008 + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 155.41311056879684 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885077e-17 + outer loop + vertex 168.16311056879687 -82.39837947330521 -3.000000000000062 + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 168.16311056879684 -82.39837947330521 -62.600000000000065 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885077e-17 + outer loop + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 168.16311056879687 -82.39837947330521 -3.000000000000062 + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + endloop +endfacet +facet normal -0.5005724413202224 0.8656946522826121 1.1107217741834888e-16 + outer loop + vertex 166.7867612357742 -116.06425699887048 -3.000000000000062 + vertex 165.50033391975418 -116.80811057410422 -62.600000000000065 + vertex 165.50033391975418 -116.80811057410425 -3.000000000000062 + endloop +endfacet +facet normal -0.5005724413202224 0.8656946522826121 1.1107217741834888e-16 + outer loop + vertex 165.50033391975418 -116.80811057410422 -62.600000000000065 + vertex 166.7867612357742 -116.06425699887048 -3.000000000000062 + vertex 166.7867612357742 -116.06425699887048 -62.600000000000065 + endloop +endfacet +facet normal -0.9999997814571896 0.0006611244763946589 1.879626683638605e-16 + outer loop + vertex 183.88142351495898 -84.9711294967339 -3.000000000000062 + vertex 183.88044108012068 -86.4571350201463 -62.600000000000065 + vertex 183.88044108012068 -86.45713502014631 -3.000000000000062 + endloop +endfacet +facet normal -0.9999997814571896 0.0006611244763946589 1.879626683638605e-16 + outer loop + vertex 183.88044108012068 -86.4571350201463 -62.600000000000065 + vertex 183.88142351495898 -84.9711294967339 -3.000000000000062 + vertex 183.88142351495898 -84.97112949673388 -62.600000000000065 + endloop +endfacet +facet normal -0.5711695004344003 0.8208321398273325 1.2346042516618458e-16 + outer loop + vertex 169.26071429718345 -114.41849103986604 -3.000000000000062 + vertex 168.04095293703554 -115.26725225780693 -62.600000000000065 + vertex 168.04095293703554 -115.26725225780693 -3.000000000000062 + endloop +endfacet +facet normal -0.5711695004344003 0.8208321398273325 1.2346042516618458e-16 + outer loop + vertex 168.04095293703554 -115.26725225780693 -62.600000000000065 + vertex 169.26071429718345 -114.41849103986604 -3.000000000000062 + vertex 169.26071429718345 -114.41849103986603 -62.600000000000065 + endloop +endfacet +facet normal -0.34938986583038373 0.9369774392454849 8.405641526142139e-17 + outer loop + vertex 161.4704079619354 -118.70822606424322 -3.000000000000062 + vertex 160.07805400761478 -119.22742144815793 -62.600000000000065 + vertex 160.07805400761478 -119.22742144815793 -3.000000000000062 + endloop +endfacet +facet normal -0.34938986583038373 0.9369774392454849 8.405641526142139e-17 + outer loop + vertex 160.07805400761478 -119.22742144815793 -62.600000000000065 + vertex 161.4704079619354 -118.70822606424322 -3.000000000000062 + vertex 161.47040796193536 -118.70822606424322 -62.600000000000065 + endloop +endfacet +facet normal -0.9859209640962927 0.16721199883811244 1.8858520825170104e-16 + outer loop + vertex 183.5051558241694 -90.89671868058495 -3.000000000000062 + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + endloop +endfacet +facet normal -0.9859209640962927 0.16721199883811244 1.8858520825170104e-16 + outer loop + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 183.5051558241694 -90.89671868058495 -3.000000000000062 + vertex 183.50515582416938 -90.89671868058495 -62.600000000000065 + endloop +endfacet +facet normal -0.9964462355504118 0.0842312273293781 1.8893488826187043e-16 + outer loop + vertex 183.81731057805365 -87.94179926518602 -3.000000000000062 + vertex 183.6921424816438 -89.42252419859925 -62.600000000000065 + vertex 183.6921424816438 -89.42252419859925 -3.000000000000062 + endloop +endfacet +facet normal -0.9964462355504118 0.0842312273293781 1.8893488826187043e-16 + outer loop + vertex 183.6921424816438 -89.42252419859925 -62.600000000000065 + vertex 183.81731057805365 -87.94179926518602 -3.000000000000062 + vertex 183.81731057805365 -87.94179926518602 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885077e-17 + outer loop + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 171.40253457015433 -87.15541313845642 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885077e-17 + outer loop + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 164.82694148227205 -83.35899269908614 -3.000000000000062 + endloop +endfacet +facet normal -0.9447323868310448 -0.3278425190125848 1.7112811674140564e-16 + outer loop + vertex 182.16167407948234 -74.74911777963072 -3.000000000000062 + vertex 181.67449817895138 -73.34523992784574 -62.600000000000065 + vertex 182.16167407948234 -74.74911777963072 -62.600000000000065 + endloop +endfacet +facet normal -0.9447323868310448 -0.3278425190125848 1.7112811674140564e-16 + outer loop + vertex 181.67449817895138 -73.34523992784574 -62.600000000000065 + vertex 182.16167407948234 -74.74911777963072 -3.000000000000062 + vertex 181.67449817895138 -73.34523992784575 -3.000000000000062 + endloop +endfacet +facet normal -0.14720786925726453 0.9891055773923916 4.707940523677942e-17 + outer loop + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 154.32855554350078 -120.7098019533102 -62.600000000000065 + vertex 152.85873887103978 -120.9285537079229 -62.600000000000065 + endloop +endfacet +facet normal -0.14720786925726453 0.9891055773923916 4.707940523677942e-17 + outer loop + vertex 154.32855554350078 -120.7098019533102 -62.600000000000065 + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 154.3285555435008 -120.7098019533102 -3.000000000000062 + endloop +endfacet +facet normal -0.9783396194476177 -0.20700625357483948 1.7981606344395098e-16 + outer loop + vertex 182.95785573205208 -77.6118235133703 -3.000000000000062 + vertex 183.2654682354717 -79.06564190936425 -62.600000000000065 + vertex 183.26546823547173 -79.06564190936425 -3.000000000000062 + endloop +endfacet +facet normal -0.9783396194476177 -0.20700625357483948 1.7981606344395098e-16 + outer loop + vertex 183.2654682354717 -79.06564190936425 -62.600000000000065 + vertex 182.95785573205208 -77.6118235133703 -3.000000000000062 + vertex 182.95785573205208 -77.6118235133703 -62.600000000000065 + endloop +endfacet +facet normal -0.96882603160823 -0.24774204422796148 1.7722852548447616e-16 + outer loop + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + vertex 182.95785573205208 -77.6118235133703 -62.600000000000065 + vertex 182.95785573205208 -77.6118235133703 -3.000000000000062 + endloop +endfacet +facet normal -0.96882603160823 -0.24774204422796148 1.7722852548447616e-16 + outer loop + vertex 182.95785573205208 -77.6118235133703 -62.600000000000065 + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + vertex 182.58970960549215 -76.17214236454272 -62.600000000000065 + endloop +endfacet +facet normal -0.4264730821792922 0.904500254381664 9.790680320921968e-17 + outer loop + vertex 164.18392212485122 -117.49751130447146 -3.000000000000062 + vertex 162.83982945717034 -118.13125279867626 -62.600000000000065 + vertex 162.83982945717034 -118.13125279867626 -3.000000000000062 + endloop +endfacet +facet normal -0.4264730821792922 0.904500254381664 9.790680320921968e-17 + outer loop + vertex 162.83982945717034 -118.13125279867626 -62.600000000000065 + vertex 164.18392212485122 -117.49751130447146 -3.000000000000062 + vertex 164.18392212485122 -117.49751130447146 -62.600000000000065 + endloop +endfacet +facet normal -0.6049992586789347 0.7962260338609506 1.2933581127401296e-16 + outer loop + vertex 170.4439108399647 -113.51945860333164 -3.000000000000062 + vertex 169.26071429718345 -114.41849103986603 -62.600000000000065 + vertex 169.26071429718345 -114.41849103986604 -3.000000000000062 + endloop +endfacet +facet normal -0.6049992586789347 0.7962260338609506 1.2933581127401296e-16 + outer loop + vertex 169.26071429718345 -114.41849103986603 -62.600000000000065 + vertex 170.4439108399647 -113.51945860333164 -3.000000000000062 + vertex 170.4439108399647 -113.51945860333161 -62.600000000000065 + endloop +endfacet +facet normal 0.8191520442889912 -0.5735764363510468 -1.652161531954164e-16 + outer loop + vertex 142.92035092844716 -57.61499983057255 -62.600000000000065 + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + endloop +endfacet +facet normal 0.8191520442889912 -0.5735764363510468 -1.652161531954164e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 142.92035092844716 -57.61499983057255 -62.600000000000065 + vertex 142.9203509284472 -57.61499983057255 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 170.40253457015433 -88.88746394602529 -62.600000000000065 + vertex 170.40253457015433 -88.88746394602529 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 170.40253457015433 -88.88746394602529 -62.600000000000065 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 171.40253457015433 -87.15541313845642 -62.600000000000065 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885078e-17 + outer loop + vertex 162.15253457015433 -103.17688310846853 -62.600000000000065 + vertex 166.70536792090212 -105.80546266909826 -3.000000000000062 + vertex 166.7053679209021 -105.80546266909826 -62.600000000000065 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885078e-17 + outer loop + vertex 166.70536792090212 -105.80546266909826 -3.000000000000062 + vertex 162.15253457015433 -103.17688310846853 -62.600000000000065 + vertex 162.15253457015433 -103.17688310846853 -3.000000000000062 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885078e-17 + outer loop + vertex 174.9553679209021 -91.51604350665502 -3.000000000000062 + vertex 170.40253457015433 -88.88746394602529 -62.600000000000065 + vertex 174.9553679209021 -91.51604350665501 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885078e-17 + outer loop + vertex 170.40253457015433 -88.88746394602529 -62.600000000000065 + vertex 174.9553679209021 -91.51604350665502 -3.000000000000062 + vertex 170.40253457015433 -88.88746394602529 -3.000000000000062 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844388 1.629868445721389e-16 + outer loop + vertex 179.9246854525155 -69.38910354298146 -3.000000000000062 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844388 1.629868445721389e-16 + outer loop + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 179.9246854525155 -69.38910354298146 -3.000000000000062 + vertex 179.9246854525155 -69.38910354298145 -62.600000000000065 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844388 1.629868445721389e-16 + outer loop + vertex 179.9246854525155 -69.38910354298145 -62.600000000000065 + vertex 179.9246854525155 -69.38910354298146 -3.000000000000062 + vertex 182.52753457015436 -67.88634790425267 -3.000000000000062 + endloop +endfacet +facet normal -0.4999999999999997 0.8660254037844388 1.629868445721389e-16 + outer loop + vertex 179.9246854525155 -69.38910354298145 -62.600000000000065 + vertex 182.52753457015436 -67.88634790425267 -3.000000000000062 + vertex 182.52753457015436 -67.88634790425266 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -1.7258201180401962e-16 + outer loop + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + vertex 174.9553679209021 -91.51604350665502 -3.000000000000062 + vertex 174.9553679209021 -91.51604350665501 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -1.7258201180401962e-16 + outer loop + vertex 174.9553679209021 -91.51604350665502 -3.000000000000062 + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + vertex 175.9553679209021 -89.78399269908614 -3.000000000000062 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885077e-17 + outer loop + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 154.57694148227205 -101.11251347666712 -62.600000000000065 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 -7.697865611885077e-17 + outer loop + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 161.15253457015433 -104.9089339160374 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -1.7258201180401965e-16 + outer loop + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 154.57694148227205 -101.11251347666712 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -1.7258201180401965e-16 + outer loop + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 164.82694148227205 -83.35899269908614 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401965e-16 + outer loop + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + vertex 172.33046225985308 -111.36251347666713 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401965e-16 + outer loop + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + vertex 182.58046225985305 -93.60899269908614 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + vertex 121.62891295376006 -94.3690251855984 -62.600000000000044 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 126.27534904305944 -86.32116180481025 -35.9058285412303 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.27534904305944 -86.32116180481025 -35.9058285412303 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 126.52762680572613 -85.88420390225173 -37.39220118838113 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.52762680572613 -85.88420390225173 -37.39220118838113 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 126.87475157808723 -85.28296615995656 -38.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.87475157808723 -85.28296615995656 -38.800000000000054 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 127.31078395904645 -84.52773592238995 -40.105137148104696 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 127.31078395904645 -84.52773592238995 -40.105137148104696 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 127.82826331367458 -83.63143538830607 -41.28528137423862 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 127.82826331367458 -83.63143538830607 -41.28528137423862 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 128.41833542674155 -82.60940050834459 -42.32024008349487 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 128.41833542674155 -82.60940050834459 -42.32024008349487 + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.27534904305944 -86.32116180481025 -35.9058285412303 + vertex 126.12223483255102 -86.58636339677167 -34.36631430664067 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.12223483255102 -86.58636339677167 -34.36631430664067 + vertex 126.07090400079386 -86.67527100536981 -32.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 128.41833542674155 -82.60940050834459 -42.32024008349487 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 129.07090400079386 -81.47911858266319 -43.19230484541332 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 129.07090400079386 -81.47911858266319 -43.19230484541332 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 129.77480340660333 -80.25992904838364 -43.8865543901355 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 129.77480340660333 -80.25992904838364 -43.8865543901355 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 130.51798973017873 -78.97269257646072 -44.391109915468874 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 130.51798973017873 -78.97269257646072 -44.391109915468874 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 131.28774684747356 -77.63943413981835 -44.69733833648578 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 131.28774684747356 -77.63943413981835 -44.69733833648578 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 132.07090400079386 -76.28296615995656 -44.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 132.07090400079386 -76.28296615995656 -44.800000000000054 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 132.8540611541142 -74.92649818009477 -44.69733833648578 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 132.8540611541142 -74.92649818009477 -44.69733833648578 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 133.623818271409 -73.5932397434524 -44.391109915468874 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 133.623818271409 -73.5932397434524 -44.391109915468874 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 134.36700459498442 -72.30600327152946 -43.8865543901355 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 134.36700459498442 -72.30600327152946 -43.8865543901355 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 135.07090400079386 -71.08681373724993 -43.192304845413325 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 135.07090400079386 -71.08681373724993 -43.192304845413325 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 135.7234725748462 -69.95653181156851 -42.32024008349488 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 135.7234725748462 -69.95653181156851 -42.32024008349488 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 136.31354468791315 -68.93449693160701 -41.285281374238636 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 136.31354468791315 -68.93449693160701 -41.285281374238636 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 136.8310240425413 -68.03819639752317 -40.10513714810471 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 136.8310240425413 -68.03819639752317 -40.10513714810471 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 137.2670564235005 -67.28296615995654 -38.80000000000006 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 137.2670564235005 -67.28296615995654 -38.80000000000006 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 137.6141811958616 -66.68172841766136 -37.392201188381144 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 137.6141811958616 -66.68172841766136 -37.392201188381144 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 137.86645895852828 -66.24477051510286 -35.905828541230306 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 137.86645895852828 -66.24477051510286 -35.905828541230306 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 138.01957316903673 -65.97956892314143 -34.36631430664068 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 138.01957316903673 -65.97956892314143 -34.36631430664068 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 138.07090400079386 -65.89066131454328 -32.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 128.41833542674155 -82.60940050834459 -23.279759916505228 + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 128.41833542674155 -82.60940050834459 -23.279759916505228 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 127.82826331367458 -83.63143538830607 -24.314718625761483 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 127.82826331367458 -83.63143538830607 -24.314718625761483 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 127.31078395904645 -84.52773592238995 -25.4948628518954 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 127.31078395904645 -84.52773592238995 -25.4948628518954 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.87475157808723 -85.28296615995656 -26.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.87475157808723 -85.28296615995656 -26.800000000000054 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.52762680572613 -85.88420390225173 -28.207798811618975 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.52762680572613 -85.88420390225173 -28.207798811618975 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.27534904305944 -86.32116180481025 -29.6941714587698 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.27534904305944 -86.32116180481025 -29.6941714587698 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.12223483255102 -86.58636339677167 -31.233685693359433 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 126.12223483255102 -86.58636339677167 -31.233685693359433 + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 126.07090400079386 -86.67527100536981 -32.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 128.41833542674155 -82.60940050834459 -23.279759916505228 + vertex 129.07090400079386 -81.47911858266316 -22.40769515458679 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 129.07090400079386 -81.47911858266316 -22.40769515458679 + vertex 129.77480340660333 -80.25992904838364 -21.71344560986461 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 129.77480340660333 -80.25992904838364 -21.71344560986461 + vertex 130.51798973017873 -78.97269257646072 -21.208890084531234 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 130.51798973017873 -78.97269257646072 -21.208890084531234 + vertex 131.28774684747356 -77.63943413981835 -20.90266166351433 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 131.28774684747356 -77.63943413981835 -20.90266166351433 + vertex 132.07090400079386 -76.28296615995656 -20.80000000000005 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 132.07090400079386 -76.28296615995656 -20.80000000000005 + vertex 132.8540611541142 -74.92649818009477 -20.90266166351433 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 132.8540611541142 -74.92649818009477 -20.90266166351433 + vertex 133.623818271409 -73.5932397434524 -21.208890084531237 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 133.623818271409 -73.5932397434524 -21.208890084531237 + vertex 134.36700459498442 -72.30600327152945 -21.71344560986461 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 134.36700459498442 -72.30600327152945 -21.71344560986461 + vertex 135.07090400079386 -71.08681373724991 -22.407695154586794 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 135.07090400079386 -71.08681373724991 -22.407695154586794 + vertex 135.7234725748462 -69.95653181156851 -23.279759916505235 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 135.7234725748462 -69.95653181156851 -23.279759916505235 + vertex 136.31354468791315 -68.93449693160701 -24.314718625761483 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 136.31354468791315 -68.93449693160701 -24.314718625761483 + vertex 136.8310240425413 -68.03819639752314 -25.494862851895416 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 136.8310240425413 -68.03819639752314 -25.494862851895416 + vertex 137.2670564235005 -67.28296615995654 -26.800000000000058 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 137.2670564235005 -67.28296615995654 -26.800000000000058 + vertex 137.6141811958616 -66.68172841766136 -28.207798811618986 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 137.6141811958616 -66.68172841766136 -28.207798811618986 + vertex 137.86645895852828 -66.24477051510286 -29.69417145876981 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 137.86645895852828 -66.24477051510286 -29.69417145876981 + vertex 138.01957316903673 -65.97956892314143 -31.233685693359437 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 138.01957316903673 -65.97956892314143 -31.233685693359437 + vertex 138.07090400079386 -65.89066131454328 -32.800000000000054 + endloop +endfacet +facet normal 0.8660254037844386 -0.5 -1.8925949547301314e-16 + outer loop + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 138.07090400079386 -65.89066131454328 -32.800000000000054 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 162.15253457015433 -103.17688310846853 -3.000000000000062 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 161.15253457015433 -104.9089339160374 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 162.15253457015433 -103.17688310846853 -3.000000000000062 + vertex 162.15253457015433 -103.17688310846853 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885077e-17 + outer loop + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + vertex 182.58046225985305 -93.60899269908614 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 7.697865611885077e-17 + outer loop + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + vertex 175.9553679209021 -89.78399269908614 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -1.7258201180401962e-16 + outer loop + vertex 166.7053679209021 -105.80546266909826 -62.600000000000065 + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + vertex 165.7053679209021 -107.53751347666713 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 -1.7258201180401962e-16 + outer loop + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + vertex 166.7053679209021 -105.80546266909826 -62.600000000000065 + vertex 166.70536792090212 -105.80546266909826 -3.000000000000062 + endloop +endfacet +facet normal -0.9991524752349787 -0.04116225494084529 1.8698261122315608e-16 + outer loop + vertex 183.8202561633931 -83.48638307532283 -3.000000000000062 + vertex 183.88142351495898 -84.97112949673388 -62.600000000000065 + vertex 183.88142351495898 -84.9711294967339 -3.000000000000062 + endloop +endfacet +facet normal -0.9991524752349787 -0.04116225494084529 1.8698261122315608e-16 + outer loop + vertex 183.88142351495898 -84.97112949673388 -62.600000000000065 + vertex 183.8202561633931 -83.48638307532283 -3.000000000000062 + vertex 183.82025616339308 -83.48638307532282 -62.600000000000065 + endloop +endfacet +facet normal 0.9999473364568807 -0.010262763409046471 -1.881412486327818e-16 + outer loop + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 152.85873887103978 -120.9285537079229 -62.600000000000065 + endloop +endfacet +facet normal 0.9999473364568807 -0.010262763409046471 -1.881412486327818e-16 + outer loop + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 153.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 0.4226182617406982 -0.9063077870366505 -9.721776452502636e-17 + outer loop + vertex 144.6483918807086 -56.40501252946401 -62.600000000000065 + vertex 144.0045710852997 -56.70523109684263 -3.000000000000062 + vertex 144.00457108529966 -56.70523109684263 -62.600000000000065 + endloop +endfacet +facet normal 0.4226182617406982 -0.9063077870366505 -9.721776452502636e-17 + outer loop + vertex 144.0045710852997 -56.70523109684263 -3.000000000000062 + vertex 144.6483918807086 -56.40501252946401 -62.600000000000065 + vertex 144.6483918807086 -56.405012529464024 -3.000000000000062 + endloop +endfacet +facet normal 0.6999089239761678 -0.7142321038279666 -1.4556488299553903e-16 + outer loop + vertex 175.89783222505156 -112.63519917575516 -62.600000000000065 + vertex 174.74684595244167 -113.7631036192213 -3.000000000000062 + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + endloop +endfacet +facet normal 0.6999089239761678 -0.7142321038279666 -1.4556488299553903e-16 + outer loop + vertex 174.74684595244167 -113.7631036192213 -3.000000000000062 + vertex 175.89783222505156 -112.63519917575516 -62.600000000000065 + vertex 175.89783222505156 -112.63519917575516 -3.000000000000062 + endloop +endfacet +facet normal 0.6694253404686521 -0.7428793398247319 -1.4039771887661554e-16 + outer loop + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + vertex 173.54969460939628 -114.84188371505721 -3.000000000000062 + vertex 173.54969460939628 -114.84188371505721 -62.600000000000065 + endloop +endfacet +facet normal 0.6694253404686521 -0.7428793398247319 -1.4039771887661554e-16 + outer loop + vertex 173.54969460939628 -114.84188371505721 -3.000000000000062 + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + vertex 174.74684595244167 -113.7631036192213 -3.000000000000062 + endloop +endfacet +facet normal 0.5088614820537074 -0.8608484141137188 -1.1253499041091416e-16 + outer loop + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 166.97032256947557 -80.33241005582236 -62.600000000000065 + endloop +endfacet +facet normal 0.5088614820537074 -0.8608484141137188 -1.1253499041091416e-16 + outer loop + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 181.1290344193379 -71.96296547328224 -3.000000000000062 + endloop +endfacet +facet normal 0.14720786925724988 -0.9891055773923938 -4.707940523677671e-17 + outer loop + vertex 154.83214687982968 -123.66723255536573 -3.000000000000062 + vertex 153.23820152839704 -123.90445829168752 -62.600000000000065 + vertex 154.83214687982968 -123.66723255536573 -62.600000000000065 + endloop +endfacet +facet normal 0.14720786925724988 -0.9891055773923938 -4.707940523677671e-17 + outer loop + vertex 153.23820152839704 -123.90445829168752 -62.600000000000065 + vertex 154.83214687982968 -123.66723255536573 -3.000000000000062 + vertex 153.23820152839704 -123.90445829168753 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + vertex 150.55309081768112 -100.48202726980837 -62.600000000000065 + vertex 150.55309081768115 -100.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 150.55309081768112 -100.48202726980837 -62.600000000000065 + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + vertex 162.26899907810125 -80.18947890594488 -62.600000000000065 + endloop +endfacet +facet normal 0.8956764823140574 -0.444706239026974 -1.7706975454735825e-16 + outer loop + vertex 183.22060786378736 -102.09672729689305 -62.600000000000065 + vertex 182.50396298921407 -103.54011149975622 -3.000000000000062 + vertex 182.50396298921405 -103.5401114997562 -62.600000000000065 + endloop +endfacet +facet normal 0.8956764823140574 -0.444706239026974 -1.7706975454735825e-16 + outer loop + vertex 182.50396298921407 -103.54011149975622 -3.000000000000062 + vertex 183.22060786378736 -102.09672729689305 -62.600000000000065 + vertex 183.2206078637874 -102.09672729689308 -3.000000000000062 + endloop +endfacet +facet normal -0.4226182617407051 -0.9063077870366475 6.164421566816344e-17 + outer loop + vertex 148.0799058081063 -56.705231096842645 -3.000000000000062 + vertex 147.4360850126974 -56.40501252946401 -62.600000000000065 + vertex 148.0799058081063 -56.70523109684263 -62.600000000000065 + endloop +endfacet +facet normal -0.4226182617407051 -0.9063077870366475 6.164421566816344e-17 + outer loop + vertex 147.4360850126974 -56.40501252946401 -62.600000000000065 + vertex 148.0799058081063 -56.705231096842645 -3.000000000000062 + vertex 147.4360850126974 -56.405012529464024 -3.000000000000062 + endloop +endfacet +facet normal 0.9859209640962899 -0.1672119988381284 -1.8858520825170085e-16 + outer loop + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + vertex 186.203301450242 -92.92519376771133 -3.000000000000062 + vertex 186.203301450242 -92.92519376771133 -62.600000000000065 + endloop +endfacet +facet normal 0.9859209640962899 -0.1672119988381284 -1.8858520825170085e-16 + outer loop + vertex 186.203301450242 -92.92519376771133 -3.000000000000062 + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + vertex 186.4727638760373 -91.33638042612219 -3.000000000000062 + endloop +endfacet +facet normal -0.2588190451025147 -0.9659258262890701 2.96881605212334e-17 + outer loop + vertex 147.4360850126974 -56.405012529464024 -3.000000000000062 + vertex 146.74991289470114 -56.22115326457817 -62.600000000000065 + vertex 147.4360850126974 -56.40501252946401 -62.600000000000065 + endloop +endfacet +facet normal -0.2588190451025147 -0.9659258262890701 2.96881605212334e-17 + outer loop + vertex 146.74991289470114 -56.22115326457817 -62.600000000000065 + vertex 147.4360850126974 -56.405012529464024 -3.000000000000062 + vertex 146.74991289470114 -56.22115326457817 -3.000000000000062 + endloop +endfacet +facet normal 0.978065050469156 -0.20829968087053663 -1.879150590781168e-16 + outer loop + vertex 186.203301450242 -92.92519376771133 -62.600000000000065 + vertex 185.8676261536738 -94.50134729088121 -3.000000000000062 + vertex 185.8676261536738 -94.50134729088121 -62.600000000000065 + endloop +endfacet +facet normal 0.978065050469156 -0.20829968087053663 -1.879150590781168e-16 + outer loop + vertex 185.8676261536738 -94.50134729088121 -3.000000000000062 + vertex 186.203301450242 -92.92519376771133 -62.600000000000065 + vertex 186.203301450242 -92.92519376771133 -3.000000000000062 + endloop +endfacet +facet normal 0.10571189404139092 -0.9943967998028664 -3.938409077752592e-17 + outer loop + vertex 153.23820152839704 -123.90445829168753 -3.000000000000062 + vertex 151.63572936288375 -124.07481319206391 -62.600000000000065 + vertex 153.23820152839704 -123.90445829168752 -62.600000000000065 + endloop +endfacet +facet normal 0.10571189404139092 -0.9943967998028664 -3.938409077752592e-17 + outer loop + vertex 151.63572936288375 -124.07481319206391 -62.600000000000065 + vertex 153.23820152839704 -123.90445829168753 -3.000000000000062 + vertex 151.63572936288375 -124.07481319206391 -3.000000000000062 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 101.65107743484678 -100.48202726980834 -42.69777747886726 + vertex 102.42753457015436 -100.48202726980834 -42.800000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 101.65107743484678 -100.48202726980834 -42.69777747886726 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 100.92753457015435 -100.48202726980836 -42.39807621135338 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 100.92753457015435 -100.48202726980836 -42.39807621135338 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 100.3062142265947 -100.48202726980837 -41.9213203435597 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 100.3062142265947 -100.48202726980837 -41.9213203435597 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 99.82945835880103 -100.48202726980837 -41.30000000000006 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.82945835880103 -100.48202726980837 -41.30000000000006 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 99.52975709128715 -100.48202726980837 -40.57645713530762 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.52975709128715 -100.48202726980837 -40.57645713530762 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 99.42753457015435 -100.48202726980834 -25.800000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.42753457015435 -100.48202726980834 -25.800000000000054 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 99.52975709128714 -100.48202726980834 -25.02354286469249 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.52975709128714 -100.48202726980834 -25.02354286469249 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 99.82945835880103 -100.48202726980834 -24.300000000000058 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 99.82945835880103 -100.48202726980834 -24.300000000000058 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 100.3062142265947 -100.48202726980834 -23.678679656440412 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 100.3062142265947 -100.48202726980834 -23.678679656440412 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 100.92753457015434 -100.48202726980836 -23.201923788646738 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 100.92753457015434 -100.48202726980836 -23.201923788646738 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 101.65107743484678 -100.48202726980837 -22.902222521132845 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 101.65107743484678 -100.48202726980837 -22.902222521132845 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 102.42753457015434 -100.48202726980834 -22.800000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 102.42753457015434 -100.48202726980834 -22.800000000000054 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 105.32531204902155 -100.48202726980838 -40.576457135307614 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 105.32531204902155 -100.48202726980838 -40.576457135307614 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 105.02561078150767 -100.48202726980838 -41.300000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 105.02561078150767 -100.48202726980838 -41.300000000000054 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 105.02561078150767 -100.48202726980838 -41.300000000000054 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 104.54885491371398 -100.48202726980837 -41.9213203435597 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 104.54885491371398 -100.48202726980837 -41.9213203435597 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 103.92753457015436 -100.48202726980837 -42.39807621135337 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 103.92753457015436 -100.48202726980837 -42.39807621135337 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 103.20399170546192 -100.48202726980836 -42.69777747886726 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 103.20399170546192 -100.48202726980836 -42.69777747886726 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + vertex 102.42753457015436 -100.48202726980834 -42.800000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 105.32531204902155 -100.48202726980838 -40.576457135307614 + vertex 105.42753457015434 -100.48202726980838 -39.800000000000054 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 105.42753457015434 -100.48202726980838 -39.800000000000054 + vertex 105.42753457015434 -100.48202726980838 -25.800000000000047 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 105.42753457015434 -100.48202726980838 -25.800000000000047 + vertex 105.32531204902155 -100.48202726980838 -25.02354286469249 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 105.32531204902155 -100.48202726980838 -25.02354286469249 + vertex 105.02561078150764 -100.48202726980837 -24.30000000000005 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 105.02561078150764 -100.48202726980837 -24.30000000000005 + vertex 104.54885491371398 -100.48202726980837 -23.678679656440412 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 104.54885491371398 -100.48202726980837 -23.678679656440412 + vertex 103.92753457015434 -100.48202726980836 -23.201923788646738 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 103.92753457015434 -100.48202726980836 -23.201923788646738 + vertex 103.2039917054619 -100.48202726980837 -22.902222521132845 + endloop +endfacet +facet normal 9.436895709313829e-16 1.0 1.9625534153898504e-17 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 103.2039917054619 -100.48202726980837 -22.902222521132845 + vertex 102.42753457015434 -100.48202726980834 -22.800000000000054 + endloop +endfacet +facet normal 7.771561172376096e-16 1.0 1.9625534153898544e-17 + outer loop + vertex 125.1582563526354 -100.48202726980834 -62.60000000000005 + vertex 150.55309081768115 -100.48202726980838 -3.0000000000000733 + vertex 150.55309081768112 -100.48202726980837 -62.600000000000065 + endloop +endfacet +facet normal 7.771561172376096e-16 1.0 1.9625534153898544e-17 + outer loop + vertex 150.55309081768115 -100.48202726980838 -3.0000000000000733 + vertex 125.1582563526354 -100.48202726980834 -62.60000000000005 + vertex 125.15825635263542 -100.48202726980836 -3.000000000000051 + endloop +endfacet +facet normal 0.2698621119172097 -0.9628989773343741 -6.961791905771798e-17 + outer loop + vertex 159.5350332499214 -122.55906210334588 -62.600000000000065 + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 157.98331987988098 -122.99394536419275 -62.600000000000065 + endloop +endfacet +facet normal 0.2698621119172097 -0.9628989773343741 -6.961791905771798e-17 + outer loop + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 159.5350332499214 -122.55906210334588 -62.600000000000065 + vertex 159.5350332499214 -122.55906210334588 -3.000000000000062 + endloop +endfacet +facet normal 0.42647308217927365 -0.9045002543816728 -9.790680320921633e-17 + outer loop + vertex 165.51981701130626 -120.18365814564442 -62.600000000000065 + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + endloop +endfacet +facet normal 0.42647308217927365 -0.9045002543816728 -9.790680320921633e-17 + outer loop + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + vertex 165.51981701130626 -120.18365814564442 -62.600000000000065 + vertex 165.51981701130626 -120.18365814564442 -3.000000000000062 + endloop +endfacet +facet normal -0.707106781186551 -0.7071067811865441 1.1902318351521197e-16 + outer loop + vertex 149.16412596495886 -57.614999830572565 -3.000000000000062 + vertex 148.66181311184843 -57.11268697746215 -62.600000000000065 + vertex 149.16412596495886 -57.614999830572565 -62.600000000000065 + endloop +endfacet +facet normal -0.707106781186551 -0.7071067811865441 1.1902318351521197e-16 + outer loop + vertex 148.66181311184843 -57.11268697746215 -62.600000000000065 + vertex 149.16412596495886 -57.614999830572565 -3.000000000000062 + vertex 148.66181311184843 -57.11268697746215 -3.000000000000062 + endloop +endfacet +facet normal 0.6377703208595341 -0.7702266016119718 -1.3498487096514298e-16 + outer loop + vertex 173.54969460939628 -114.84188371505721 -62.600000000000065 + vertex 172.3084731066061 -115.86965169195585 -3.000000000000062 + vertex 172.3084731066061 -115.86965169195585 -62.600000000000065 + endloop +endfacet +facet normal 0.6377703208595341 -0.7702266016119718 -1.3498487096514298e-16 + outer loop + vertex 172.3084731066061 -115.86965169195585 -3.000000000000062 + vertex 173.54969460939628 -114.84188371505721 -62.600000000000065 + vertex 173.54969460939628 -114.84188371505721 -3.000000000000062 + endloop +endfacet +facet normal 0.9134916689428489 -0.40685743298114696 -1.7967531110889034e-16 + outer loop + vertex 183.8762593218509 -100.62463388991569 -62.600000000000065 + vertex 183.2206078637874 -102.09672729689308 -3.000000000000062 + vertex 183.22060786378736 -102.09672729689305 -62.600000000000065 + endloop +endfacet +facet normal 0.9134916689428489 -0.40685743298114696 -1.7967531110889034e-16 + outer loop + vertex 183.2206078637874 -102.09672729689308 -3.000000000000062 + vertex 183.8762593218509 -100.62463388991569 -62.600000000000065 + vertex 183.8762593218509 -100.6246338899157 -3.000000000000062 + endloop +endfacet +facet normal -0.9301944916753204 -0.36706703428242143 1.6762592114233944e-16 + outer loop + vertex 181.67449817895138 -73.34523992784575 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 181.67449817895138 -73.34523992784574 -62.600000000000065 + endloop +endfacet +facet normal -0.9301944916753204 -0.36706703428242143 1.6762592114233944e-16 + outer loop + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 181.67449817895138 -73.34523992784575 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -3.000000000000062 + endloop +endfacet +facet normal 0.06403093220852701 -0.9979479143324601 -3.1619857586072013e-17 + outer loop + vertex 151.63572936288375 -124.07481319206391 -3.000000000000062 + vertex 150.02753457015433 -124.17799915024115 -62.600000000000065 + vertex 151.63572936288375 -124.07481319206391 -62.600000000000065 + endloop +endfacet +facet normal 0.06403093220852701 -0.9979479143324601 -3.1619857586072013e-17 + outer loop + vertex 150.02753457015433 -124.17799915024115 -62.600000000000065 + vertex 151.63572936288375 -124.07481319206391 -3.000000000000062 + vertex 150.02753457015433 -124.17799915024115 -3.000000000000062 + endloop +endfacet +facet normal 0.08715574274765725 -0.9961946980917458 -3.5931751782467723e-17 + outer loop + vertex 146.042238446703 -56.159239772911356 -3.000000000000062 + vertex 145.33456399870488 -56.221153264578156 -62.600000000000065 + vertex 146.042238446703 -56.15923977291135 -62.600000000000065 + endloop +endfacet +facet normal 0.08715574274765725 -0.9961946980917458 -3.5931751782467723e-17 + outer loop + vertex 145.33456399870488 -56.221153264578156 -62.600000000000065 + vertex 146.042238446703 -56.159239772911356 -3.000000000000062 + vertex 145.33456399870488 -56.221153264578156 -3.000000000000062 + endloop +endfacet +facet normal 0.18844624350994654 -0.9820835062798836 -5.46923348330725e-17 + outer loop + vertex 156.4147761514999 -123.36355110749695 -3.000000000000062 + vertex 154.83214687982968 -123.66723255536573 -62.600000000000065 + vertex 156.41477615149986 -123.36355110749695 -62.600000000000065 + endloop +endfacet +facet normal 0.18844624350994654 -0.9820835062798836 -5.46923348330725e-17 + outer loop + vertex 154.83214687982968 -123.66723255536573 -62.600000000000065 + vertex 156.4147761514999 -123.36355110749695 -3.000000000000062 + vertex 154.83214687982968 -123.66723255536573 -3.000000000000062 + endloop +endfacet +facet normal 0.571169500434386 -0.8208321398273426 -1.2346042516618207e-16 + outer loop + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + vertex 169.70258105841677 -117.76504968478835 -3.000000000000062 + vertex 169.70258105841674 -117.76504968478835 -62.600000000000065 + endloop +endfacet +facet normal 0.571169500434386 -0.8208321398273426 -1.2346042516618207e-16 + outer loop + vertex 169.70258105841677 -117.76504968478835 -3.000000000000062 + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + vertex 171.0253534737069 -116.84460904537994 -3.000000000000062 + endloop +endfacet +facet normal 0.9920516018175789 -0.12583171035623705 -1.889253497189432e-16 + outer loop + vertex 186.67554189525936 -89.7376875512249 -62.600000000000065 + vertex 186.4727638760373 -91.33638042612219 -3.000000000000062 + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + endloop +endfacet +facet normal 0.9920516018175789 -0.12583171035623705 -1.889253497189432e-16 + outer loop + vertex 186.4727638760373 -91.33638042612219 -3.000000000000062 + vertex 186.67554189525936 -89.7376875512249 -62.600000000000065 + vertex 186.67554189525939 -89.7376875512249 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.8925949547301319e-16 + outer loop + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 93.58223510853358 -102.48202726980831 -62.60000000000003 + vertex 93.5822351085336 -102.48202726980831 -3.0000000000000284 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.8925949547301319e-16 + outer loop + vertex 93.58223510853358 -102.48202726980831 -62.60000000000003 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + endloop +endfacet +facet normal 0.3882711944089259 -0.92154515873736 -9.106128389727811e-17 + outer loop + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + vertex 162.5771416647378 -121.49661995877844 -3.000000000000062 + vertex 162.5771416647378 -121.49661995877844 -62.600000000000065 + endloop +endfacet +facet normal 0.3882711944089259 -0.92154515873736 -9.106128389727811e-17 + outer loop + vertex 162.5771416647378 -121.49661995877844 -3.000000000000062 + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + endloop +endfacet +facet normal 0.6049992586789495 -0.7962260338609393 -1.2933581127401553e-16 + outer loop + vertex 172.3084731066061 -115.86965169195585 -62.600000000000065 + vertex 171.0253534737069 -116.84460904537994 -3.000000000000062 + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + endloop +endfacet +facet normal 0.6049992586789495 -0.7962260338609393 -1.2933581127401553e-16 + outer loop + vertex 171.0253534737069 -116.84460904537994 -3.000000000000062 + vertex 172.3084731066061 -115.86965169195585 -62.600000000000065 + vertex 172.3084731066061 -115.86965169195585 -3.000000000000062 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 1.64546565764282e-16 + outer loop + vertex 150.02753457015433 -121.17248787278362 -3.0000000000000733 + vertex 150.02753457015433 -124.17799915024115 -62.600000000000065 + vertex 150.02753457015433 -124.17799915024115 -3.000000000000062 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 1.64546565764282e-16 + outer loop + vertex 150.02753457015433 -124.17799915024115 -62.600000000000065 + vertex 150.02753457015433 -121.17248787278362 -3.0000000000000733 + vertex 150.02753457015433 -121.17248787278362 -62.60000000000008 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 1.64546565764282e-16 + outer loop + vertex 150.02753457015433 -121.17248787278362 -62.60000000000008 + vertex 150.02753457015433 -121.17248787278362 -3.0000000000000733 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 1.64546565764282e-16 + outer loop + vertex 150.02753457015433 -121.17248787278362 -62.60000000000008 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + endloop +endfacet +facet normal 0.866025403784438 0.5000000000000009 -1.5295647765012086e-16 + outer loop + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 168.16311056879684 -82.39837947330521 -62.600000000000065 + vertex 166.97032256947557 -80.33241005582236 -62.600000000000065 + endloop +endfacet +facet normal 0.866025403784438 0.5000000000000009 -1.5295647765012086e-16 + outer loop + vertex 168.16311056879684 -82.39837947330521 -62.600000000000065 + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 168.16311056879687 -82.39837947330521 -3.000000000000062 + endloop +endfacet +facet normal 0.8553779590758183 -0.518004389100409 -1.7093417315095026e-16 + outer loop + vertex 181.72757876430887 -104.95226070173364 -62.600000000000065 + vertex 180.8928137939151 -106.33070376458772 -3.000000000000062 + vertex 180.8928137939151 -106.33070376458772 -62.600000000000065 + endloop +endfacet +facet normal 0.8553779590758183 -0.518004389100409 -1.7093417315095026e-16 + outer loop + vertex 180.8928137939151 -106.33070376458772 -3.000000000000062 + vertex 181.72757876430887 -104.95226070173364 -62.600000000000065 + vertex 181.7275787643089 -104.95226070173364 -3.000000000000062 + endloop +endfacet +facet normal 0.9684976081015065 -0.2490228565848135 -1.8691607490093722e-16 + outer loop + vertex 185.8676261536738 -94.50134729088121 -62.600000000000065 + vertex 185.4663253888957 -96.06208286410164 -3.000000000000062 + vertex 185.46632538889568 -96.06208286410163 -62.600000000000065 + endloop +endfacet +facet normal 0.9684976081015065 -0.2490228565848135 -1.8691607490093722e-16 + outer loop + vertex 185.4663253888957 -96.06208286410164 -3.000000000000062 + vertex 185.8676261536738 -94.50134729088121 -62.600000000000065 + vertex 185.8676261536738 -94.50134729088121 -3.000000000000062 + endloop +endfacet +facet normal 0.22935485323248694 -0.9733428744788264 -6.220955760198338e-17 + outer loop + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 156.41477615149986 -123.36355110749695 -62.600000000000065 + vertex 157.98331987988098 -122.99394536419275 -62.600000000000065 + endloop +endfacet +facet normal 0.22935485323248694 -0.9733428744788264 -6.220955760198338e-17 + outer loop + vertex 156.41477615149986 -123.36355110749695 -62.600000000000065 + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 156.4147761514999 -123.36355110749695 -3.000000000000062 + endloop +endfacet +facet normal 0.996446235550411 -0.08423122732938658 -1.8893488826187043e-16 + outer loop + vertex 186.81128066401757 -88.13191271645411 -62.600000000000065 + vertex 186.67554189525939 -89.7376875512249 -3.000000000000062 + vertex 186.67554189525936 -89.7376875512249 -62.600000000000065 + endloop +endfacet +facet normal 0.996446235550411 -0.08423122732938658 -1.8893488826187043e-16 + outer loop + vertex 186.67554189525939 -89.7376875512249 -3.000000000000062 + vertex 186.81128066401757 -88.13191271645411 -62.600000000000065 + vertex 186.8112806640176 -88.13191271645411 -3.000000000000062 + endloop +endfacet +facet normal 0.9659258262890714 0.2588190451025095 -1.7646604060570657e-16 + outer loop + vertex 121.14483512149557 -97.11436699499986 -62.60000000000005 + vertex 121.32869438638144 -97.80053911299613 -3.000000000000051 + vertex 121.32869438638143 -97.80053911299612 -62.60000000000005 + endloop +endfacet +facet normal 0.9659258262890714 0.2588190451025095 -1.7646604060570657e-16 + outer loop + vertex 121.32869438638144 -97.80053911299613 -3.000000000000051 + vertex 121.14483512149557 -97.11436699499986 -62.60000000000005 + vertex 121.14483512149559 -97.11436699499987 -3.000000000000051 + endloop +endfacet +facet normal -0.0871557427476704 -0.9961946980917445 -3.169954360194482e-18 + outer loop + vertex 146.74991289470114 -56.22115326457817 -3.000000000000062 + vertex 146.042238446703 -56.15923977291135 -62.600000000000065 + vertex 146.74991289470114 -56.22115326457817 -62.600000000000065 + endloop +endfacet +facet normal -0.0871557427476704 -0.9961946980917445 -3.169954360194482e-18 + outer loop + vertex 146.042238446703 -56.15923977291135 -62.600000000000065 + vertex 146.74991289470114 -56.22115326457817 -3.000000000000062 + vertex 146.042238446703 -56.159239772911356 -3.000000000000062 + endloop +endfacet +facet normal 0.9964286670416539 -0.08443880326954645 -1.889356600540168e-16 + outer loop + vertex 121.13921260616522 -95.74242516819551 -62.600000000000065 + vertex 121.08292162982879 -96.40669254700173 -3.000000000000051 + vertex 121.08292162982877 -96.40669254700171 -62.60000000000005 + endloop +endfacet +facet normal 0.9964286670416539 -0.08443880326954645 -1.889356600540168e-16 + outer loop + vertex 121.08292162982879 -96.40669254700173 -3.000000000000051 + vertex 121.13921260616522 -95.74242516819551 -62.600000000000065 + vertex 121.13921260616522 -95.74242516819551 -3.000000000000062 + endloop +endfacet +facet normal 0.819152044288985 0.5735764363510556 -1.4270266531245705e-16 + outer loop + vertex 121.62891295376006 -98.44435990840503 -62.60000000000005 + vertex 122.03636883437957 -99.02626721214715 -3.000000000000051 + vertex 122.03636883437957 -99.02626721214713 -62.60000000000005 + endloop +endfacet +facet normal 0.819152044288985 0.5735764363510556 -1.4270266531245705e-16 + outer loop + vertex 122.03636883437957 -99.02626721214715 -3.000000000000051 + vertex 121.62891295376006 -98.44435990840503 -62.60000000000005 + vertex 121.62891295376006 -98.44435990840505 -3.000000000000051 + endloop +endfacet +facet normal 0.57357643635105 -0.819152044288989 -1.2387983536035098e-16 + outer loop + vertex 144.00457108529966 -56.70523109684263 -62.600000000000065 + vertex 143.42266378155756 -57.11268697746216 -3.000000000000062 + vertex 143.42266378155756 -57.11268697746215 -62.600000000000065 + endloop +endfacet +facet normal 0.57357643635105 -0.819152044288989 -1.2387983536035098e-16 + outer loop + vertex 143.42266378155756 -57.11268697746216 -3.000000000000062 + vertex 144.00457108529966 -56.70523109684263 -62.600000000000065 + vertex 144.0045710852997 -56.70523109684263 -3.000000000000062 + endloop +endfacet +facet normal 0.9063077870366479 0.42261826174070405 -1.6204619883521917e-16 + outer loop + vertex 121.32869438638143 -97.80053911299612 -62.60000000000005 + vertex 121.62891295376006 -98.44435990840505 -3.000000000000051 + vertex 121.62891295376006 -98.44435990840503 -62.60000000000005 + endloop +endfacet +facet normal 0.9063077870366479 0.42261826174070405 -1.6204619883521917e-16 + outer loop + vertex 121.62891295376006 -98.44435990840505 -3.000000000000051 + vertex 121.32869438638143 -97.80053911299612 -62.60000000000005 + vertex 121.32869438638144 -97.80053911299613 -3.000000000000051 + endloop +endfacet +facet normal 0.9091671933849138 -0.41643128421457354 -1.790504190202131e-16 + outer loop + vertex 121.62891295376006 -94.3690251855984 -62.600000000000044 + vertex 121.33566537762498 -95.00925344381994 -3.000000000000062 + vertex 121.33566537762498 -95.00925344381994 -62.600000000000065 + endloop +endfacet +facet normal 0.9091671933849138 -0.41643128421457354 -1.790504190202131e-16 + outer loop + vertex 121.33566537762498 -95.00925344381994 -3.000000000000062 + vertex 121.62891295376006 -94.3690251855984 -62.600000000000044 + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + endloop +endfacet +facet normal 0.2588190451025147 0.9659258262890701 -2.96881605212334e-17 + outer loop + vertex 123.764409786641 -100.23625451325569 -62.60000000000005 + vertex 124.45058190463727 -100.42011377814154 -3.000000000000051 + vertex 124.45058190463727 -100.42011377814154 -62.60000000000005 + endloop +endfacet +facet normal 0.2588190451025147 0.9659258262890701 -2.96881605212334e-17 + outer loop + vertex 124.45058190463727 -100.42011377814154 -3.000000000000051 + vertex 123.764409786641 -100.23625451325569 -62.60000000000005 + vertex 123.76440978664102 -100.2362545132557 -3.000000000000051 + endloop +endfacet +facet normal -0.5735764363510415 -0.8191520442889951 9.172724251549031e-17 + outer loop + vertex 148.66181311184843 -57.11268697746215 -3.000000000000062 + vertex 148.0799058081063 -56.70523109684263 -62.600000000000065 + vertex 148.66181311184843 -57.11268697746215 -62.600000000000065 + endloop +endfacet +facet normal -0.5735764363510415 -0.8191520442889951 9.172724251549031e-17 + outer loop + vertex 148.0799058081063 -56.70523109684263 -62.600000000000065 + vertex 148.66181311184843 -57.11268697746215 -3.000000000000062 + vertex 148.0799058081063 -56.705231096842645 -3.000000000000062 + endloop +endfacet +facet normal 0.9637952185786789 -0.2666435385395205 -1.8637807733403893e-16 + outer loop + vertex 121.33566537762498 -95.00925344381994 -62.600000000000065 + vertex 121.14483512149559 -95.69901809900358 -3.000000000000051 + vertex 121.14483512149557 -95.69901809900358 -62.600000000000044 + endloop +endfacet +facet normal 0.9637952185786789 -0.2666435385395205 -1.8637807733403893e-16 + outer loop + vertex 121.14483512149559 -95.69901809900358 -3.000000000000051 + vertex 121.33566537762498 -95.00925344381994 -62.600000000000065 + vertex 121.33566537762498 -95.00925344381994 -3.000000000000062 + endloop +endfacet +facet normal 0.4226182617407051 0.9063077870366475 -6.164421566816344e-17 + outer loop + vertex 123.12058899123208 -99.93603594587707 -62.60000000000005 + vertex 123.76440978664102 -100.2362545132557 -3.000000000000051 + vertex 123.764409786641 -100.23625451325569 -62.60000000000005 + endloop +endfacet +facet normal 0.4226182617407051 0.9063077870366475 -6.164421566816344e-17 + outer loop + vertex 123.76440978664102 -100.2362545132557 -3.000000000000051 + vertex 123.12058899123208 -99.93603594587707 -62.60000000000005 + vertex 123.12058899123211 -99.93603594587707 -3.000000000000051 + endloop +endfacet +facet normal -0.8660254037844387 -0.5000000000000003 1.5295647765012099e-16 + outer loop + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + vertex 149.57158184557838 -58.19690713431467 -62.600000000000065 + vertex 162.26899907810125 -80.18947890594488 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844387 -0.5000000000000003 1.5295647765012099e-16 + outer loop + vertex 149.57158184557838 -58.19690713431467 -62.600000000000065 + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + vertex 149.57158184557838 -58.19690713431467 -3.000000000000062 + endloop +endfacet +facet normal 0.7071067811865523 0.7071067811865427 -1.1902318351521227e-16 + outer loop + vertex 122.03636883437957 -99.02626721214713 -62.60000000000005 + vertex 122.53868168748998 -99.52858006525757 -3.000000000000051 + vertex 122.53868168748998 -99.52858006525756 -62.60000000000005 + endloop +endfacet +facet normal 0.7071067811865523 0.7071067811865427 -1.1902318351521227e-16 + outer loop + vertex 122.53868168748998 -99.52858006525757 -3.000000000000051 + vertex 122.03636883437957 -99.02626721214713 -62.60000000000005 + vertex 122.03636883437957 -99.02626721214715 -3.000000000000051 + endloop +endfacet +facet normal 0.9917151050050453 -0.12845680404257295 -1.8891362409815973e-16 + outer loop + vertex 121.14483512149557 -95.69901809900358 -62.600000000000044 + vertex 121.13921260616522 -95.74242516819551 -3.000000000000062 + vertex 121.13921260616522 -95.74242516819551 -62.600000000000065 + endloop +endfacet +facet normal 0.9917151050050453 -0.12845680404257295 -1.8891362409815973e-16 + outer loop + vertex 121.13921260616522 -95.74242516819551 -3.000000000000062 + vertex 121.14483512149557 -95.69901809900358 -62.600000000000044 + vertex 121.14483512149559 -95.69901809900358 -3.000000000000051 + endloop +endfacet +facet normal 0.258819045102526 -0.9659258262890669 -6.760178110917338e-17 + outer loop + vertex 145.33456399870488 -56.221153264578156 -62.600000000000065 + vertex 144.6483918807086 -56.405012529464024 -3.000000000000062 + vertex 144.6483918807086 -56.40501252946401 -62.600000000000065 + endloop +endfacet +facet normal 0.258819045102526 -0.9659258262890669 -6.760178110917338e-17 + outer loop + vertex 144.6483918807086 -56.405012529464024 -3.000000000000062 + vertex 145.33456399870488 -56.221153264578156 -62.600000000000065 + vertex 145.33456399870488 -56.221153264578156 -3.000000000000062 + endloop +endfacet +facet normal 0.7071067811865454 -0.7071067811865499 -1.4677788008447083e-16 + outer loop + vertex 143.42266378155756 -57.11268697746215 -62.600000000000065 + vertex 142.9203509284472 -57.61499983057255 -3.000000000000062 + vertex 142.92035092844716 -57.61499983057255 -62.600000000000065 + endloop +endfacet +facet normal 0.7071067811865454 -0.7071067811865499 -1.4677788008447083e-16 + outer loop + vertex 142.9203509284472 -57.61499983057255 -3.000000000000062 + vertex 143.42266378155756 -57.11268697746215 -62.600000000000065 + vertex 143.42266378155756 -57.11268697746216 -3.000000000000062 + endloop +endfacet +facet normal 0.5735764363510415 0.8191520442889951 -9.172724251549031e-17 + outer loop + vertex 122.53868168748998 -99.52858006525756 -62.60000000000005 + vertex 123.12058899123211 -99.93603594587707 -3.000000000000051 + vertex 123.12058899123208 -99.93603594587707 -62.60000000000005 + endloop +endfacet +facet normal 0.5735764363510415 0.8191520442889951 -9.172724251549031e-17 + outer loop + vertex 123.12058899123211 -99.93603594587707 -3.000000000000051 + vertex 122.53868168748998 -99.52858006525756 -62.60000000000005 + vertex 122.53868168748998 -99.52858006525757 -3.000000000000051 + endloop +endfacet +facet normal 0.9932753778753307 0.11577574748892414 -1.8441368268833016e-16 + outer loop + vertex 121.07305832758563 -96.49857203241152 -62.600000000000065 + vertex 121.14483512149559 -97.11436699499987 -3.000000000000051 + vertex 121.14483512149557 -97.11436699499986 -62.60000000000005 + endloop +endfacet +facet normal 0.9932753778753307 0.11577574748892414 -1.8441368268833016e-16 + outer loop + vertex 121.14483512149559 -97.11436699499987 -3.000000000000051 + vertex 121.07305832758563 -96.49857203241152 -62.600000000000065 + vertex 121.07305832758566 -96.49857203241152 -3.000000000000062 + endloop +endfacet +facet normal 0.0871557427476704 0.9961946980917445 3.169954360194482e-18 + outer loop + vertex 124.45058190463727 -100.42011377814154 -62.60000000000005 + vertex 125.15825635263542 -100.48202726980836 -3.000000000000051 + vertex 125.1582563526354 -100.48202726980834 -62.60000000000005 + endloop +endfacet +facet normal 0.0871557427476704 0.9961946980917445 3.169954360194482e-18 + outer loop + vertex 125.15825635263542 -100.48202726980836 -3.000000000000051 + vertex 124.45058190463727 -100.42011377814154 -62.60000000000005 + vertex 124.45058190463727 -100.42011377814154 -3.000000000000051 + endloop +endfacet +facet normal 0.9942872710787393 -0.10673716583643095 -1.8897080252742161e-16 + outer loop + vertex 121.08292162982877 -96.40669254700171 -62.60000000000005 + vertex 121.07305832758566 -96.49857203241152 -3.000000000000062 + vertex 121.07305832758563 -96.49857203241152 -62.600000000000065 + endloop +endfacet +facet normal 0.9942872710787393 -0.10673716583643095 -1.8897080252742161e-16 + outer loop + vertex 121.07305832758566 -96.49857203241152 -3.000000000000062 + vertex 121.08292162982877 -96.40669254700171 -62.60000000000005 + vertex 121.08292162982879 -96.40669254700173 -3.000000000000051 + endloop +endfacet +facet normal -0.819152044288985 -0.5735764363510556 1.4270266531245705e-16 + outer loop + vertex 149.57158184557838 -58.19690713431467 -3.000000000000062 + vertex 149.16412596495886 -57.614999830572565 -62.600000000000065 + vertex 149.57158184557838 -58.19690713431467 -62.600000000000065 + endloop +endfacet +facet normal -0.819152044288985 -0.5735764363510556 1.4270266531245705e-16 + outer loop + vertex 149.16412596495886 -57.614999830572565 -62.600000000000065 + vertex 149.57158184557838 -58.19690713431467 -3.000000000000062 + vertex 149.16412596495886 -57.614999830572565 -3.000000000000062 + endloop +endfacet +facet normal 0.978339619447619 0.2070062535748331 -1.7981606344395135e-16 + outer loop + vertex 185.87924330029884 -76.9295518108256 -62.600000000000065 + vertex 186.2128342365394 -78.50614780237996 -3.000000000000062 + vertex 186.2128342365394 -78.50614780237994 -62.600000000000065 + endloop +endfacet +facet normal 0.978339619447619 0.2070062535748331 -1.7981606344395135e-16 + outer loop + vertex 186.2128342365394 -78.50614780237996 -3.000000000000062 + vertex 185.87924330029884 -76.9295518108256 -62.600000000000065 + vertex 185.87924330029887 -76.9295518108256 -3.000000000000062 + endloop +endfacet +facet normal 0.9301944916753149 0.3670670342824357 -1.676259211423381e-16 + outer loop + vertex 183.89597471679528 -70.80363748245898 -3.000000000000062 + vertex 184.48750387842546 -72.30264751720463 -62.600000000000065 + vertex 183.89597471679528 -70.80363748245898 -62.600000000000065 + endloop +endfacet +facet normal 0.9301944916753149 0.3670670342824357 -1.676259211423381e-16 + outer loop + vertex 184.48750387842546 -72.30264751720463 -62.600000000000065 + vertex 183.89597471679528 -70.80363748245898 -3.000000000000062 + vertex 184.48750387842546 -72.30264751720465 -3.000000000000062 + endloop +endfacet +facet normal 0.9688260316082282 0.24774204422796836 -1.7722852548447566e-16 + outer loop + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 185.87924330029887 -76.9295518108256 -3.000000000000062 + vertex 185.87924330029884 -76.9295518108256 -62.600000000000065 + endloop +endfacet +facet normal 0.9688260316082282 0.24774204422796836 -1.7722852548447566e-16 + outer loop + vertex 185.87924330029887 -76.9295518108256 -3.000000000000062 + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 185.4800065668526 -75.36828698255519 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 139.5052590600145 -40.76152462432976 -41.30000000000007 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.5052590600145 -40.76152462432976 -41.30000000000007 + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 139.65510969377144 -41.0210735355432 -40.57645713530763 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.65510969377144 -41.0210735355432 -40.57645713530763 + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 139.5052590600145 -40.76152462432976 -41.30000000000007 + vertex 139.26688112611765 -40.348641931417156 -41.921320343559714 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 139.26688112611765 -40.348641931417156 -41.921320343559714 + vertex 138.95622095433782 -39.81056273000644 -42.398076211353384 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 138.95622095433782 -39.81056273000644 -42.398076211353384 + vertex 138.5944495219916 -39.18395622845583 -42.69777747886727 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 138.5944495219916 -39.18395622845583 -42.69777747886727 + vertex 138.20622095433785 -38.51152462432976 -42.80000000000007 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.65510969377144 -41.0210735355432 -40.57645713530763 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 139.70622095433785 -41.10960083568308 -39.80000000000007 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.70622095433785 -41.10960083568308 -39.80000000000007 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 139.70622095433788 -41.109600835683096 -25.800000000000065 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.70622095433788 -41.109600835683096 -25.800000000000065 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 139.65510969377144 -41.0210735355432 -25.0235428646925 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.65510969377144 -41.0210735355432 -25.0235428646925 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 139.5052590600145 -40.76152462432976 -24.30000000000006 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.5052590600145 -40.76152462432976 -24.30000000000006 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 139.26688112611768 -40.34864193141716 -23.678679656440423 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 139.26688112611768 -40.34864193141716 -23.678679656440423 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 138.95622095433782 -39.81056273000644 -23.20192378864675 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 138.95622095433782 -39.81056273000644 -23.20192378864675 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 138.59444952199163 -39.183956228455806 -22.90222252113286 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 138.59444952199163 -39.183956228455806 -22.90222252113286 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 138.20622095433785 -38.51152462432976 -22.800000000000065 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 136.75733221490424 -36.00197571311632 -40.57645713530763 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 136.75733221490424 -36.00197571311632 -40.57645713530763 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 136.90718284866117 -36.261524624329745 -41.30000000000007 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 136.90718284866117 -36.261524624329745 -41.30000000000007 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 137.14556078255802 -36.674407317242355 -41.921320343559714 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 137.14556078255802 -36.674407317242355 -41.921320343559714 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 137.45622095433782 -37.2124865186531 -42.398076211353384 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 137.45622095433782 -37.2124865186531 -42.398076211353384 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 137.81799238668404 -37.83909302020373 -42.69777747886727 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 137.81799238668404 -37.83909302020373 -42.69777747886727 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 138.20622095433785 -38.51152462432976 -42.80000000000007 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 136.70622095433782 -35.91344841297645 -25.800000000000065 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 136.70622095433782 -35.91344841297645 -25.800000000000065 + vertex 136.75733221490424 -36.00197571311634 -25.0235428646925 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 136.75733221490424 -36.00197571311634 -25.0235428646925 + vertex 136.90718284866117 -36.261524624329766 -24.300000000000068 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 136.90718284866117 -36.261524624329766 -24.300000000000068 + vertex 137.14556078255802 -36.674407317242384 -23.678679656440423 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 137.14556078255802 -36.674407317242384 -23.678679656440423 + vertex 137.45622095433782 -37.2124865186531 -23.20192378864675 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 137.45622095433782 -37.2124865186531 -23.20192378864675 + vertex 137.81799238668407 -37.83909302020372 -22.90222252113286 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 137.81799238668407 -37.83909302020372 -22.90222252113286 + vertex 138.20622095433785 -38.51152462432976 -22.800000000000065 + endloop +endfacet +facet normal -0.8660254037844385 -0.5000000000000006 1.5295647765012091e-16 + outer loop + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + vertex 138.20622095433785 -38.51152462432976 -22.800000000000065 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 123.15084234181414 -83.13296615995655 -26.800000000000054 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 123.15084234181414 -83.13296615995655 -26.800000000000054 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 123.58687472277336 -82.37773592238995 -25.4948628518954 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 123.58687472277336 -82.37773592238995 -25.4948628518954 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 124.1043540774015 -81.48143538830607 -24.314718625761483 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 124.1043540774015 -81.48143538830607 -24.314718625761483 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 124.69442619046845 -80.45940050834457 -23.279759916505228 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 124.69442619046845 -80.45940050834457 -23.279759916505228 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 125.34699476452077 -79.32911858266316 -22.40769515458679 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 125.34699476452077 -79.32911858266316 -22.40769515458679 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 123.15084234181414 -83.13296615995655 -26.800000000000054 + vertex 122.80371756945306 -83.73420390225172 -28.207798811618975 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.80371756945306 -83.73420390225172 -28.207798811618975 + vertex 122.55143980678636 -84.17116180481023 -29.6941714587698 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.55143980678636 -84.17116180481023 -29.6941714587698 + vertex 122.39832559627791 -84.43636339677167 -31.233685693359433 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.39832559627791 -84.43636339677167 -31.233685693359433 + vertex 122.34699476452076 -84.5252710053698 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 125.34699476452077 -79.32911858266316 -22.40769515458679 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 126.05089417033024 -78.10992904838363 -21.71344560986461 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 126.05089417033024 -78.10992904838363 -21.71344560986461 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 126.79408049390564 -76.82269257646071 -21.208890084531234 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 126.79408049390564 -76.82269257646071 -21.208890084531234 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 127.56383761120046 -75.48943413981834 -20.90266166351433 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 127.56383761120046 -75.48943413981834 -20.90266166351433 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 128.34699476452076 -74.13296615995655 -20.80000000000005 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 128.34699476452076 -74.13296615995655 -20.80000000000005 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 129.1301519178411 -72.77649818009475 -20.90266166351433 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 129.1301519178411 -72.77649818009475 -20.90266166351433 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 129.89990903513592 -71.4432397434524 -21.208890084531237 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 129.89990903513592 -71.4432397434524 -21.208890084531237 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 130.64309535871132 -70.15600327152943 -21.71344560986461 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 130.64309535871132 -70.15600327152943 -21.71344560986461 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 131.3469947645208 -68.9368137372499 -22.407695154586794 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 131.3469947645208 -68.9368137372499 -22.407695154586794 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 131.9995633385731 -67.8065318115685 -23.279759916505235 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 131.9995633385731 -67.8065318115685 -23.279759916505235 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 132.58963545164005 -66.78449693160701 -24.314718625761483 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 132.58963545164005 -66.78449693160701 -24.314718625761483 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 133.10711480626819 -65.88819639752313 -25.494862851895416 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 133.10711480626819 -65.88819639752313 -25.494862851895416 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 133.5431471872274 -65.13296615995654 -26.800000000000058 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 133.5431471872274 -65.13296615995654 -26.800000000000058 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 133.8902719595885 -64.53172841766136 -28.207798811618986 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 133.8902719595885 -64.53172841766136 -28.207798811618986 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 134.14254972225518 -64.09477051510284 -29.69417145876981 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 134.14254972225518 -64.09477051510284 -29.69417145876981 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 134.29566393276363 -63.829568923141416 -31.233685693359437 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 134.29566393276363 -63.829568923141416 -31.233685693359437 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 134.3469947645208 -63.74066131454328 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 125.34699476452076 -79.32911858266318 -43.19230484541332 + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 125.34699476452076 -79.32911858266318 -43.19230484541332 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 124.69442619046845 -80.45940050834457 -42.32024008349487 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 124.69442619046845 -80.45940050834457 -42.32024008349487 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 124.1043540774015 -81.48143538830607 -41.28528137423862 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 124.1043540774015 -81.48143538830607 -41.28528137423862 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 123.58687472277336 -82.37773592238995 -40.105137148104696 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 123.58687472277336 -82.37773592238995 -40.105137148104696 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 123.15084234181414 -83.13296615995655 -38.800000000000054 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 123.15084234181414 -83.13296615995655 -38.800000000000054 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.80371756945306 -83.73420390225172 -37.39220118838113 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 122.80371756945306 -83.73420390225172 -37.39220118838113 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.55143980678636 -84.17116180481023 -35.9058285412303 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 122.55143980678636 -84.17116180481023 -35.9058285412303 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.39832559627791 -84.43636339677167 -34.36631430664067 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 122.39832559627791 -84.43636339677167 -34.36631430664067 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.34699476452076 -84.5252710053698 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 125.34699476452076 -79.32911858266318 -43.19230484541332 + vertex 126.05089417033024 -78.10992904838363 -43.8865543901355 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 126.05089417033024 -78.10992904838363 -43.8865543901355 + vertex 126.79408049390564 -76.82269257646071 -44.391109915468874 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 126.79408049390564 -76.82269257646071 -44.391109915468874 + vertex 127.56383761120046 -75.48943413981834 -44.69733833648578 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 127.56383761120046 -75.48943413981834 -44.69733833648578 + vertex 128.34699476452076 -74.13296615995655 -44.800000000000054 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 128.34699476452076 -74.13296615995655 -44.800000000000054 + vertex 129.1301519178411 -72.77649818009475 -44.69733833648578 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 129.1301519178411 -72.77649818009475 -44.69733833648578 + vertex 129.89990903513592 -71.4432397434524 -44.391109915468874 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 129.89990903513592 -71.4432397434524 -44.391109915468874 + vertex 130.6430953587113 -70.15600327152946 -43.8865543901355 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 130.6430953587113 -70.15600327152946 -43.8865543901355 + vertex 131.34699476452076 -68.93681373724992 -43.192304845413325 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 131.34699476452076 -68.93681373724992 -43.192304845413325 + vertex 131.9995633385731 -67.8065318115685 -42.32024008349488 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 131.9995633385731 -67.8065318115685 -42.32024008349488 + vertex 132.58963545164005 -66.78449693160701 -41.285281374238636 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 132.58963545164005 -66.78449693160701 -41.285281374238636 + vertex 133.10711480626819 -65.88819639752316 -40.10513714810471 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 133.10711480626819 -65.88819639752316 -40.10513714810471 + vertex 133.5431471872274 -65.13296615995654 -38.80000000000006 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 133.5431471872274 -65.13296615995654 -38.80000000000006 + vertex 133.8902719595885 -64.53172841766136 -37.392201188381144 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 133.8902719595885 -64.53172841766136 -37.392201188381144 + vertex 134.14254972225518 -64.09477051510284 -35.905828541230306 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 134.14254972225518 -64.09477051510284 -35.905828541230306 + vertex 134.29566393276363 -63.829568923141416 -34.36631430664068 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 134.29566393276363 -63.829568923141416 -34.36631430664068 + vertex 134.3469947645208 -63.74066131454328 -32.800000000000054 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 1.7258201180401962e-16 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 134.3469947645208 -63.74066131454328 -32.800000000000054 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + endloop +endfacet +facet normal 0.9576170825074782 0.28804430785881835 -1.74330853025398e-16 + outer loop + vertex 185.01582266574817 -73.8250853951783 -3.000000000000062 + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 185.01582266574815 -73.8250853951783 -62.600000000000065 + endloop +endfacet +facet normal 0.9576170825074782 0.28804430785881835 -1.74330853025398e-16 + outer loop + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 185.01582266574817 -73.8250853951783 -3.000000000000062 + vertex 185.4800065668526 -75.36828698255519 -3.000000000000062 + endloop +endfacet +facet normal 0.9861411980746715 0.16590821998879904 -1.8208893893752738e-16 + outer loop + vertex 186.2128342365394 -78.50614780237994 -62.600000000000065 + vertex 186.48019562046042 -80.09531605140675 -3.000000000000062 + vertex 186.4801956204604 -80.09531605140675 -62.600000000000065 + endloop +endfacet +facet normal 0.9861411980746715 0.16590821998879904 -1.8208893893752738e-16 + outer loop + vertex 186.48019562046042 -80.09531605140675 -3.000000000000062 + vertex 186.2128342365394 -78.50614780237994 -62.600000000000065 + vertex 186.2128342365394 -78.50614780237996 -3.000000000000062 + endloop +endfacet +facet normal 0.9965567391136535 0.08291360399332269 -1.8567535078147368e-16 + outer loop + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + vertex 186.81447500937168 -83.3002285631922 -3.000000000000062 + vertex 186.81447500937168 -83.3002285631922 -62.600000000000065 + endloop +endfacet +facet normal 0.9965567391136535 0.08291360399332269 -1.8567535078147368e-16 + outer loop + vertex 186.81447500937168 -83.3002285631922 -3.000000000000062 + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + endloop +endfacet +facet normal 0.9447323868310453 0.32784251901258343 -1.711281167414058e-16 + outer loop + vertex 184.48750387842546 -72.30264751720465 -3.000000000000062 + vertex 185.01582266574815 -73.8250853951783 -62.600000000000065 + vertex 184.48750387842546 -72.30264751720463 -62.600000000000065 + endloop +endfacet +facet normal 0.9447323868310453 0.32784251901258343 -1.711281167414058e-16 + outer loop + vertex 185.01582266574815 -73.8250853951783 -62.600000000000065 + vertex 184.48750387842546 -72.30264751720465 -3.000000000000062 + vertex 185.01582266574817 -73.8250853951783 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 145.06150352437308 -42.3852223358721 -55.53185165257819 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 145.06150352437308 -42.3852223358721 -55.53185165257819 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 144.8203225694756 -41.96748466817171 -55.332050807568926 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.8203225694756 -41.96748466817171 -55.332050807568926 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 144.61321578828904 -41.60876520056452 -55.01421356237315 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.61321578828904 -41.60876520056452 -55.01421356237315 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 144.45429716569112 -41.33351007195612 -54.600000000000044 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.45429716569112 -41.33351007195612 -54.600000000000044 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 140.22143383004197 -34.00197571311636 -40.57645713530763 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.22143383004197 -34.00197571311636 -40.57645713530763 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 140.1703225694756 -33.913448412976464 -39.80000000000006 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.1703225694756 -33.913448412976464 -39.80000000000006 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 145.06150352437308 -42.3852223358721 -55.53185165257819 + vertex 145.3203225694756 -42.83351007195611 -55.60000000000006 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 145.3203225694756 -42.83351007195611 -55.60000000000006 + vertex 157.7203225694756 -64.31094008581022 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.45429716569112 -41.33351007195612 -54.600000000000044 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 144.35439674318653 -41.160477464480515 -54.11763809020509 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.35439674318653 -41.160477464480515 -54.11763809020509 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 144.3203225694756 -41.101459264387245 -53.60000000000005 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.3203225694756 -41.101459264387245 -53.60000000000005 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 144.32032256947562 -41.101459264387245 -51.600000000000044 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.32032256947562 -41.101459264387245 -51.600000000000044 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.32032256947562 -41.101459264387245 -51.600000000000044 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 144.35439674318653 -41.16047746448053 -51.082361909795 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.35439674318653 -41.16047746448053 -51.082361909795 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 144.45429716569112 -41.33351007195612 -50.60000000000003 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.45429716569112 -41.33351007195612 -50.60000000000003 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 144.61321578828907 -41.60876520056452 -50.185786437626945 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.61321578828907 -41.60876520056452 -50.185786437626945 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 144.8203225694756 -41.96748466817171 -49.86794919243116 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.8203225694756 -41.96748466817171 -49.86794919243116 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 145.06150352437308 -42.38522233587211 -49.6681483474219 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 145.06150352437308 -42.38522233587211 -49.6681483474219 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 140.92032256947556 -35.21248651865313 -42.398076211353384 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 140.92032256947556 -35.21248651865313 -42.398076211353384 + vertex 141.28209400182178 -35.83909302020376 -42.697777478867266 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 141.28209400182178 -35.83909302020376 -42.697777478867266 + vertex 141.67032256947556 -36.5115246243298 -42.80000000000007 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.1703225694756 -33.913448412976464 -39.80000000000006 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 140.17032256947556 -33.913448412976486 -25.800000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.17032256947556 -33.913448412976486 -25.800000000000065 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 140.22143383004195 -34.00197571311637 -25.0235428646925 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.22143383004195 -34.00197571311637 -25.0235428646925 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 140.3712844637989 -34.2615246243298 -24.300000000000068 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.3712844637989 -34.2615246243298 -24.300000000000068 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 140.60966239769573 -34.67440731724242 -23.678679656440423 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.60966239769573 -34.67440731724242 -23.678679656440423 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 140.92032256947556 -35.21248651865314 -23.20192378864675 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 140.92032256947556 -35.21248651865314 -23.20192378864675 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 141.2820940018218 -35.83909302020374 -22.90222252113286 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 141.2820940018218 -35.83909302020374 -22.90222252113286 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.61321578828915 -41.60876520056444 -15.41421356237314 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 144.61321578828915 -41.60876520056444 -15.41421356237314 + vertex 144.82032256947574 -41.96748466817159 -15.732050807568926 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 144.82032256947574 -41.96748466817159 -15.732050807568926 + vertex 145.0615035243732 -42.38522233587199 -15.931851652578185 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 145.0615035243732 -42.38522233587199 -15.931851652578185 + vertex 145.3203225694757 -42.833510071956034 -16.00000000000005 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 145.3203225694757 -42.833510071956034 -16.00000000000005 + vertex 157.72032256947568 -64.31094008581013 -16.000000000000068 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.61321578828915 -41.60876520056444 -15.41421356237314 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.45429716569126 -41.33351007195603 -15.000000000000046 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.45429716569126 -41.33351007195603 -15.000000000000046 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.35439674318667 -41.160477464480415 -14.517638090205088 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.35439674318667 -41.160477464480415 -14.517638090205088 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.3203225694757 -41.10145926438716 -14.000000000000048 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.3203225694757 -41.10145926438716 -14.000000000000048 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.3203225694757 -41.10145926438716 -12.000000000000034 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.3203225694757 -41.10145926438716 -12.000000000000034 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.35439674318664 -41.160477464480415 -11.482361909795 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.35439674318664 -41.160477464480415 -11.482361909795 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.45429716569126 -41.33351007195603 -11.000000000000036 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.45429716569126 -41.33351007195603 -11.000000000000036 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.61321578828915 -41.60876520056444 -10.585786437626947 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.61321578828915 -41.60876520056444 -10.585786437626947 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 144.82032256947574 -41.9674846681716 -10.267949192431168 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 144.82032256947574 -41.9674846681716 -10.267949192431168 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 145.06150352437322 -42.38522233587199 -10.068148347421902 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 145.06150352437322 -42.38522233587199 -10.068148347421902 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 145.3203225694757 -42.833510071956034 -10.000000000000037 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 158.68624839576464 -65.98397269328585 -54.117638090205105 + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.68624839576464 -65.98397269328585 -54.117638090205105 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 158.58634797326002 -65.81094008581022 -54.60000000000007 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.58634797326002 -65.81094008581022 -54.60000000000007 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 158.42742935066212 -65.53568495720181 -55.01421356237316 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.42742935066212 -65.53568495720181 -55.01421356237316 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 158.22032256947557 -65.17696548959468 -55.33205080756895 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.22032256947557 -65.17696548959468 -55.33205080756895 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 157.97914161457808 -64.75922782189426 -55.531851652578204 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457808 -64.75922782189426 -55.531851652578204 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 157.7203225694756 -64.31094008581022 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.68624839576464 -65.98397269328585 -54.117638090205105 + vertex 158.72032256947557 -66.04299089337911 -53.60000000000007 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.72032256947557 -66.04299089337911 -53.60000000000007 + vertex 158.72032256947557 -66.04299089337911 -51.600000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.72032256947557 -66.04299089337911 -51.600000000000065 + vertex 158.68624839576464 -65.98397269328585 -51.08236190979502 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.68624839576464 -65.98397269328585 -51.08236190979502 + vertex 158.58634797326002 -65.81094008581022 -50.60000000000005 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.58634797326002 -65.81094008581022 -50.60000000000005 + vertex 158.42742935066212 -65.53568495720182 -50.185786437626966 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.42742935066212 -65.53568495720182 -50.185786437626966 + vertex 158.2203225694756 -65.17696548959469 -49.86794919243118 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.2203225694756 -65.17696548959469 -49.86794919243118 + vertex 157.97914161457808 -64.75922782189426 -49.66814834742192 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 157.97914161457808 -64.75922782189426 -49.66814834742192 + vertex 157.7203225694756 -64.31094008581023 -49.60000000000006 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 157.7203225694756 -64.31094008581023 -49.60000000000006 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 142.7309827412554 -38.348641931417184 -41.921320343559714 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 142.7309827412554 -38.348641931417184 -41.921320343559714 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 142.42032256947556 -37.81056273000646 -42.39807621135338 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 142.42032256947556 -37.81056273000646 -42.39807621135338 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 142.05855113712934 -37.183956228455855 -42.697777478867266 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 142.05855113712934 -37.183956228455855 -42.697777478867266 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 141.67032256947556 -36.5115246243298 -42.80000000000007 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 142.7309827412554 -38.348641931417184 -41.921320343559714 + vertex 142.96936067515222 -38.761524624329795 -41.30000000000007 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 142.96936067515222 -38.761524624329795 -41.30000000000007 + vertex 143.11921130890917 -39.02107353554322 -40.57645713530763 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 143.11921130890917 -39.02107353554322 -40.57645713530763 + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + vertex 158.22032256947568 -65.17696548959455 -15.732050807568942 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 158.22032256947568 -65.17696548959455 -15.732050807568942 + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + vertex 143.1703225694756 -39.109600835683125 -25.800000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 143.1703225694756 -39.109600835683125 -25.800000000000065 + vertex 143.11921130890917 -39.02107353554322 -25.0235428646925 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 143.11921130890917 -39.02107353554322 -25.0235428646925 + vertex 142.96936067515222 -38.761524624329795 -24.30000000000006 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 142.96936067515222 -38.761524624329795 -24.30000000000006 + vertex 142.7309827412554 -38.348641931417184 -23.678679656440423 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 142.7309827412554 -38.348641931417184 -23.678679656440423 + vertex 142.42032256947556 -37.810562730006474 -23.20192378864675 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 142.42032256947556 -37.810562730006474 -23.20192378864675 + vertex 142.05855113712937 -37.18395622845585 -22.90222252113286 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 142.05855113712937 -37.18395622845585 -22.90222252113286 + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 157.72032256947568 -64.31094008581013 -16.000000000000068 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 158.58634797326016 -65.81094008581013 -15.000000000000062 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.58634797326016 -65.81094008581013 -15.000000000000062 + vertex 158.6862483957648 -65.98397269328572 -14.517638090205104 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.6862483957648 -65.98397269328572 -14.517638090205104 + vertex 158.7203225694757 -66.04299089337901 -14.000000000000064 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.7203225694757 -66.04299089337901 -14.000000000000064 + vertex 158.7203225694757 -66.04299089337901 -12.000000000000052 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.7203225694757 -66.04299089337901 -12.000000000000052 + vertex 158.6862483957648 -65.98397269328572 -11.482361909795022 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.6862483957648 -65.98397269328572 -11.482361909795022 + vertex 158.58634797326016 -65.81094008581013 -11.000000000000048 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.58634797326016 -65.81094008581013 -11.000000000000048 + vertex 158.42742935066227 -65.53568495720174 -10.58578643762697 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.42742935066227 -65.53568495720174 -10.58578643762697 + vertex 158.2203225694757 -65.17696548959456 -10.267949192431178 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 158.2203225694757 -65.17696548959456 -10.267949192431178 + vertex 157.97914161457825 -64.75922782189413 -10.068148347421925 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 157.97914161457825 -64.75922782189413 -10.068148347421925 + vertex 157.72032256947568 -64.31094008581013 -10.00000000000005 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 157.72032256947568 -64.31094008581013 -10.00000000000005 + vertex 145.3203225694757 -42.833510071956034 -10.000000000000037 + endloop +endfacet +facet normal 0.8660254037844386 0.5000000000000003 -8.065757021836473e-17 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 145.3203225694757 -42.833510071956034 -10.000000000000037 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + endloop +endfacet +facet normal 0.8962637115698759 0.44352154324563553 -1.5974817945265773e-16 + outer loop + vertex 182.52753457015436 -67.88634790425267 -3.000000000000062 + vertex 183.24227030542374 -69.33067842807884 -62.600000000000065 + vertex 182.52753457015436 -67.88634790425266 -62.600000000000065 + endloop +endfacet +facet normal 0.8962637115698759 0.44352154324563553 -1.5974817945265773e-16 + outer loop + vertex 183.24227030542374 -69.33067842807884 -62.600000000000065 + vertex 182.52753457015436 -67.88634790425267 -3.000000000000062 + vertex 183.24227030542374 -69.33067842807885 -3.000000000000062 + endloop +endfacet +facet normal 0.9922171154055788 0.12451986145283153 -1.8404317463084578e-16 + outer loop + vertex 186.4801956204604 -80.09531605140675 -62.600000000000065 + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + endloop +endfacet +facet normal 0.9922171154055788 0.12451986145283153 -1.8404317463084578e-16 + outer loop + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + vertex 186.4801956204604 -80.09531605140675 -62.600000000000065 + vertex 186.48019562046042 -80.09531605140675 -3.000000000000062 + endloop +endfacet +facet normal 0.9140288370919221 0.40564921417942973 -1.6383039476578056e-16 + outer loop + vertex 183.24227030542374 -69.33067842807885 -3.000000000000062 + vertex 183.89597471679528 -70.80363748245898 -62.600000000000065 + vertex 183.24227030542374 -69.33067842807884 -62.600000000000065 + endloop +endfacet +facet normal 0.9140288370919221 0.40564921417942973 -1.6383039476578056e-16 + outer loop + vertex 183.89597471679528 -70.80363748245898 -62.600000000000065 + vertex 183.24227030542374 -69.33067842807885 -3.000000000000062 + vertex 183.89597471679528 -70.80363748245898 -3.000000000000062 + endloop +endfacet +facet normal 0.5363402452594244 -0.844001860966586 -1.1736899405614526e-16 + outer loop + vertex 169.70258105841674 -117.76504968478835 -62.600000000000065 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + endloop +endfacet +facet normal 0.5363402452594244 -0.844001860966586 -1.1736899405614526e-16 + outer loop + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + vertex 169.70258105841674 -117.76504968478835 -62.600000000000065 + vertex 169.70258105841677 -117.76504968478835 -3.000000000000062 + endloop +endfacet +facet normal 0.7838084275862282 -0.6210026963265172 -1.5950409550416875e-16 + outer loop + vertex 179.0540842859469 -108.97688605509173 -62.600000000000065 + vertex 178.05333736503042 -110.23999469396773 -3.000000000000062 + vertex 178.05333736503042 -110.23999469396772 -62.600000000000065 + endloop +endfacet +facet normal 0.7838084275862282 -0.6210026963265172 -1.5950409550416875e-16 + outer loop + vertex 178.05333736503042 -110.23999469396773 -3.000000000000062 + vertex 179.0540842859469 -108.97688605509173 -62.600000000000065 + vertex 179.0540842859469 -108.97688605509173 -3.000000000000062 + endloop +endfacet +facet normal 0.46392867916166225 -0.8858725532780185 -1.0458099413404858e-16 + outer loop + vertex 166.9474021655441 -119.43603627549429 -62.600000000000065 + vertex 165.51981701130626 -120.18365814564442 -3.000000000000062 + vertex 165.51981701130626 -120.18365814564442 -62.600000000000065 + endloop +endfacet +facet normal 0.46392867916166225 -0.8858725532780185 -1.0458099413404858e-16 + outer loop + vertex 165.51981701130626 -120.18365814564442 -3.000000000000062 + vertex 166.9474021655441 -119.43603627549429 -62.600000000000065 + vertex 166.94740216554413 -119.4360362754943 -3.000000000000062 + endloop +endfacet +facet normal 0.8762939397707019 -0.4817768478467404 -1.741543413215502e-16 + outer loop + vertex 182.50396298921405 -103.5401114997562 -62.600000000000065 + vertex 181.7275787643089 -104.95226070173364 -3.000000000000062 + vertex 181.72757876430887 -104.95226070173364 -62.600000000000065 + endloop +endfacet +facet normal 0.8762939397707019 -0.4817768478467404 -1.741543413215502e-16 + outer loop + vertex 181.7275787643089 -104.95226070173364 -3.000000000000062 + vertex 182.50396298921405 -103.5401114997562 -62.600000000000065 + vertex 182.50396298921407 -103.54011149975622 -3.000000000000062 + endloop +endfacet +facet normal 0.9999997814571896 -0.0006611244764010427 -1.8796266836386061e-16 + outer loop + vertex 186.88080805451577 -84.91036450790278 -62.600000000000065 + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + endloop +endfacet +facet normal 0.9999997814571896 -0.0006611244764010427 -1.8796266836386061e-16 + outer loop + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 186.88080805451577 -84.91036450790278 -62.600000000000065 + vertex 186.8808080545158 -84.91036450790278 -3.000000000000062 + endloop +endfacet +facet normal 0.9990971750681176 -0.04248334698334532 -1.8861380718886234e-16 + outer loop + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 186.8112806640176 -88.13191271645411 -3.000000000000062 + vertex 186.81128066401757 -88.13191271645411 -62.600000000000065 + endloop +endfacet +facet normal 0.9990971750681176 -0.04248334698334532 -1.8861380718886234e-16 + outer loop + vertex 186.8112806640176 -88.13191271645411 -3.000000000000062 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + endloop +endfacet +facet normal 0.9442980716405378 -0.329091403558285 -1.83939166450922e-16 + outer loop + vertex 185.00010139733044 -97.60466933591319 -62.600000000000065 + vertex 184.4697700303989 -99.12640731420495 -3.000000000000062 + vertex 184.46977003039888 -99.12640731420494 -62.600000000000065 + endloop +endfacet +facet normal 0.9442980716405378 -0.329091403558285 -1.83939166450922e-16 + outer loop + vertex 184.4697700303989 -99.12640731420495 -3.000000000000062 + vertex 185.00010139733044 -97.60466933591319 -62.600000000000065 + vertex 185.00010139733047 -97.60466933591319 -3.000000000000062 + endloop +endfacet +facet normal 0.9991524752349786 0.04116225494084896 -1.8698261122315598e-16 + outer loop + vertex 186.81447500937168 -83.3002285631922 -62.600000000000065 + vertex 186.8808080545158 -84.91036450790278 -3.000000000000062 + vertex 186.88080805451577 -84.91036450790278 -62.600000000000065 + endloop +endfacet +facet normal 0.9991524752349786 0.04116225494084896 -1.8698261122315598e-16 + outer loop + vertex 186.8808080545158 -84.91036450790278 -3.000000000000062 + vertex 186.81447500937168 -83.3002285631922 -62.600000000000065 + vertex 186.81447500937168 -83.3002285631922 -3.000000000000062 + endloop +endfacet +facet normal 0.929708324630511 -0.3682966618267512 -1.819664515088639e-16 + outer loop + vertex 184.46977003039888 -99.12640731420494 -62.600000000000065 + vertex 183.8762593218509 -100.6246338899157 -3.000000000000062 + vertex 183.8762593218509 -100.62463388991569 -62.600000000000065 + endloop +endfacet +facet normal 0.929708324630511 -0.3682966618267512 -1.819664515088639e-16 + outer loop + vertex 183.8762593218509 -100.6246338899157 -3.000000000000062 + vertex 184.46977003039888 -99.12640731420494 -62.600000000000065 + vertex 184.4697700303989 -99.12640731420495 -3.000000000000062 + endloop +endfacet +facet normal 0.3098971353857553 -0.9507700907578567 -7.690445521229407e-17 + outer loop + vertex 161.06720089823247 -122.05966233282527 -62.600000000000065 + vertex 159.5350332499214 -122.55906210334588 -3.000000000000062 + vertex 159.5350332499214 -122.55906210334588 -62.600000000000065 + endloop +endfacet +facet normal 0.3098971353857553 -0.9507700907578567 -7.690445521229407e-17 + outer loop + vertex 159.5350332499214 -122.55906210334588 -3.000000000000062 + vertex 161.06720089823247 -122.05966233282527 -62.600000000000065 + vertex 161.06720089823247 -122.0596623328253 -3.000000000000062 + endloop +endfacet +facet normal 0.5005724413202272 -0.8656946522826092 -1.1107217741834972e-16 + outer loop + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + vertex 166.94740216554413 -119.4360362754943 -3.000000000000062 + vertex 166.9474021655441 -119.43603627549429 -62.600000000000065 + endloop +endfacet +facet normal 0.5005724413202272 -0.8656946522826092 -1.1107217741834972e-16 + outer loop + vertex 166.94740216554413 -119.4360362754943 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + endloop +endfacet +facet normal 0.809094707151618 -0.5876782749593841 -1.636026354657304e-16 + outer loop + vertex 180.00112884410115 -107.6730285328917 -62.600000000000065 + vertex 179.0540842859469 -108.97688605509173 -3.000000000000062 + vertex 179.0540842859469 -108.97688605509173 -62.600000000000065 + endloop +endfacet +facet normal 0.809094707151618 -0.5876782749593841 -1.636026354657304e-16 + outer loop + vertex 179.0540842859469 -108.97688605509173 -3.000000000000062 + vertex 180.00112884410115 -107.6730285328917 -62.600000000000065 + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + endloop +endfacet +facet normal 0.8329651413758264 -0.5533254677427648 -1.6741488504968608e-16 + outer loop + vertex 180.8928137939151 -106.33070376458772 -62.600000000000065 + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + vertex 180.00112884410115 -107.6730285328917 -62.600000000000065 + endloop +endfacet +facet normal 0.8329651413758264 -0.5533254677427648 -1.6741488504968608e-16 + outer loop + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + vertex 180.8928137939151 -106.33070376458772 -62.600000000000065 + vertex 180.8928137939151 -106.33070376458772 -3.000000000000062 + endloop +endfacet +facet normal 0.3493898658303748 -0.9369774392454884 -8.405641526141975e-17 + outer loop + vertex 162.5771416647378 -121.49661995877844 -62.600000000000065 + vertex 161.06720089823247 -122.0596623328253 -3.000000000000062 + vertex 161.06720089823247 -122.05966233282527 -62.600000000000065 + endloop +endfacet +facet normal 0.3493898658303748 -0.9369774392454884 -8.405641526141975e-17 + outer loop + vertex 161.06720089823247 -122.0596623328253 -3.000000000000062 + vertex 162.5771416647378 -121.49661995877844 -62.600000000000065 + vertex 162.5771416647378 -121.49661995877844 -3.000000000000062 + endloop +endfacet +facet normal 0.7291677277632 -0.684335023792186 -1.5047732123427997e-16 + outer loop + vertex 177.00063930139194 -111.46014411930008 -62.600000000000065 + vertex 175.89783222505156 -112.63519917575516 -3.000000000000062 + vertex 175.89783222505156 -112.63519917575516 -62.600000000000065 + endloop +endfacet +facet normal 0.7291677277632 -0.684335023792186 -1.5047732123427997e-16 + outer loop + vertex 175.89783222505156 -112.63519917575516 -3.000000000000062 + vertex 177.00063930139194 -111.46014411930008 -62.600000000000065 + vertex 177.00063930139197 -111.46014411930008 -3.000000000000062 + endloop +endfacet +facet normal 0.7571505514688199 -0.6532404170062215 -1.5512643725333332e-16 + outer loop + vertex 178.05333736503042 -110.23999469396772 -62.600000000000065 + vertex 177.00063930139197 -111.46014411930008 -3.000000000000062 + vertex 177.00063930139194 -111.46014411930008 -62.600000000000065 + endloop +endfacet +facet normal 0.7571505514688199 -0.6532404170062215 -1.5512643725333332e-16 + outer loop + vertex 177.00063930139197 -111.46014411930008 -3.000000000000062 + vertex 178.05333736503042 -110.23999469396772 -62.600000000000065 + vertex 178.05333736503042 -110.23999469396773 -3.000000000000062 + endloop +endfacet +facet normal 0.9572353791850622 -0.2893102639666116 -1.8559000385555484e-16 + outer loop + vertex 185.46632538889568 -96.06208286410163 -62.600000000000065 + vertex 185.00010139733047 -97.60466933591319 -3.000000000000062 + vertex 185.00010139733044 -97.60466933591319 -62.600000000000065 + endloop +endfacet +facet normal 0.9572353791850622 -0.2893102639666116 -1.8559000385555484e-16 + outer loop + vertex 185.00010139733047 -97.60466933591319 -3.000000000000062 + vertex 185.46632538889568 -96.06208286410163 -62.600000000000065 + vertex 185.4663253888957 -96.06208286410164 -3.000000000000062 + endloop +endfacet +facet normal -0.39667667014561375 0.687064146869443 -0.6087614290087314 + outer loop + vertex 144.45429716569112 -41.33351007195612 -54.600000000000044 + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + vertex 144.61321578828904 -41.60876520056452 -55.01421356237315 + endloop +endfacet +facet normal -0.39667667014561375 0.687064146869443 -0.6087614290087314 + outer loop + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + vertex 144.45429716569112 -41.33351007195612 -54.600000000000044 + vertex 146.18634797325998 -40.33351007195614 -54.600000000000044 + endloop +endfacet +facet normal 0.3043807145043621 -0.5272028623656732 -0.7933533402912317 + outer loop + vertex 159.9523733770444 -64.1769654895947 -55.33205080756895 + vertex 158.42742935066212 -65.53568495720181 -55.01421356237316 + vertex 158.22032256947557 -65.17696548959468 -55.33205080756895 + endloop +endfacet +facet normal 0.3043807145043621 -0.5272028623656732 -0.7933533402912317 + outer loop + vertex 158.42742935066212 -65.53568495720181 -55.01421356237316 + vertex 159.9523733770444 -64.1769654895947 -55.33205080756895 + vertex 160.159480158231 -64.53568495720184 -55.01421356237316 + endloop +endfacet +facet normal 0.19134171618254064 -0.3314135740355837 0.9238795325112906 + outer loop + vertex 158.2203225694756 -65.17696548959469 -49.86794919243118 + vertex 159.71119242214695 -63.75922782189429 -49.66814834742192 + vertex 157.97914161457808 -64.75922782189426 -49.66814834742192 + endloop +endfacet +facet normal 0.19134171618254064 -0.3314135740355837 0.9238795325112906 + outer loop + vertex 159.71119242214695 -63.75922782189429 -49.66814834742192 + vertex 158.2203225694756 -65.17696548959469 -49.86794919243118 + vertex 159.95237337704444 -64.17696548959472 -49.86794919243118 + endloop +endfacet +facet normal -0.19134171618255089 0.3314135740356015 -0.923879532511282 + outer loop + vertex 146.55237337704446 -40.96748466817173 -55.332050807568926 + vertex 145.06150352437308 -42.3852223358721 -55.53185165257819 + vertex 144.8203225694756 -41.96748466817171 -55.332050807568926 + endloop +endfacet +facet normal -0.19134171618255089 0.3314135740356015 -0.923879532511282 + outer loop + vertex 145.06150352437308 -42.3852223358721 -55.53185165257819 + vertex 146.55237337704446 -40.96748466817173 -55.332050807568926 + vertex 146.79355433194192 -41.385222335872136 -55.53185165257819 + endloop +endfacet +facet normal 0.49999999999999994 -0.8660254037844387 9.325056343474399e-32 + outer loop + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + vertex 158.72032256947557 -66.04299089337911 -51.600000000000065 + vertex 158.72032256947557 -66.04299089337911 -53.60000000000007 + endloop +endfacet +facet normal 0.49999999999999994 -0.8660254037844387 9.325056343474399e-32 + outer loop + vertex 158.72032256947557 -66.04299089337911 -51.600000000000065 + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + vertex 160.45237337704444 -65.04299089337913 -51.600000000000065 + endloop +endfacet +facet normal 0.46193976625564037 -0.800103145191261 -0.3826834323651031 + outer loop + vertex 158.58634797326002 -65.81094008581022 -54.60000000000007 + vertex 160.4182992033335 -64.98397269328588 -54.117638090205105 + vertex 158.68624839576464 -65.98397269328585 -54.117638090205105 + endloop +endfacet +facet normal 0.46193976625564037 -0.800103145191261 -0.3826834323651031 + outer loop + vertex 160.4182992033335 -64.98397269328588 -54.117638090205105 + vertex 158.58634797326002 -65.81094008581022 -54.60000000000007 + vertex 160.3183987808289 -64.81094008581026 -54.60000000000007 + endloop +endfacet +facet normal 0.4619397662556417 -0.8001031451912624 0.3826834323650983 + outer loop + vertex 160.4182992033335 -64.98397269328588 -51.08236190979502 + vertex 158.58634797326002 -65.81094008581022 -50.60000000000005 + vertex 158.68624839576464 -65.98397269328585 -51.08236190979502 + endloop +endfacet +facet normal 0.4619397662556417 -0.8001031451912624 0.3826834323650983 + outer loop + vertex 158.58634797326002 -65.81094008581022 -50.60000000000005 + vertex 160.4182992033335 -64.98397269328588 -51.08236190979502 + vertex 160.3183987808289 -64.81094008581026 -50.60000000000005 + endloop +endfacet +facet normal -7.64123652963884e-16 3.4662739414040805e-16 -1.0 + outer loop + vertex 147.05237337704446 -41.83351007195615 -55.60000000000006 + vertex 157.7203225694756 -64.31094008581022 -55.600000000000065 + vertex 145.3203225694756 -42.83351007195611 -55.60000000000006 + endloop +endfacet +facet normal -7.64123652963884e-16 3.4662739414040805e-16 -1.0 + outer loop + vertex 157.7203225694756 -64.31094008581022 -55.600000000000065 + vertex 147.05237337704446 -41.83351007195615 -55.60000000000006 + vertex 159.45237337704444 -63.310940085810245 -55.600000000000065 + endloop +endfacet +facet normal 0.3043807145043701 -0.5272028623656854 0.7933533402912205 + outer loop + vertex 158.42742935066212 -65.53568495720182 -50.185786437626966 + vertex 159.95237337704444 -64.17696548959472 -49.86794919243118 + vertex 158.2203225694756 -65.17696548959469 -49.86794919243118 + endloop +endfacet +facet normal 0.3043807145043701 -0.5272028623656854 0.7933533402912205 + outer loop + vertex 159.95237337704444 -64.17696548959472 -49.86794919243118 + vertex 158.42742935066212 -65.53568495720182 -50.185786437626966 + vertex 160.159480158231 -64.53568495720185 -50.185786437626966 + endloop +endfacet +facet normal -0.30438071450435455 0.5272028623656586 -0.7933533402912444 + outer loop + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + vertex 144.8203225694756 -41.96748466817171 -55.332050807568926 + vertex 144.61321578828904 -41.60876520056452 -55.01421356237315 + endloop +endfacet +facet normal -0.30438071450435455 0.5272028623656586 -0.7933533402912444 + outer loop + vertex 144.8203225694756 -41.96748466817171 -55.332050807568926 + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + vertex 146.55237337704446 -40.96748466817173 -55.332050807568926 + endloop +endfacet +facet normal -0.4619397662556498 0.8001031451912763 -0.38268343236505964 + outer loop + vertex 144.35439674318653 -41.160477464480515 -54.11763809020509 + vertex 146.18634797325998 -40.33351007195614 -54.600000000000044 + vertex 144.45429716569112 -41.33351007195612 -54.600000000000044 + endloop +endfacet +facet normal -0.4619397662556498 0.8001031451912763 -0.38268343236505964 + outer loop + vertex 146.18634797325998 -40.33351007195614 -54.600000000000044 + vertex 144.35439674318653 -41.160477464480515 -54.11763809020509 + vertex 146.0864475507554 -40.16047746448054 -54.11763809020509 + endloop +endfacet +facet normal 0.06526309611002466 -0.11303899832181444 -0.9914448613738106 + outer loop + vertex 159.45237337704444 -63.310940085810245 -55.600000000000065 + vertex 157.97914161457808 -64.75922782189426 -55.531851652578204 + vertex 157.7203225694756 -64.31094008581022 -55.600000000000065 + endloop +endfacet +facet normal 0.06526309611002466 -0.11303899832181444 -0.9914448613738106 + outer loop + vertex 157.97914161457808 -64.75922782189426 -55.531851652578204 + vertex 159.45237337704444 -63.310940085810245 -55.600000000000065 + vertex 159.71119242214695 -63.75922782189429 -55.531851652578204 + endloop +endfacet +facet normal -0.46193976625565225 0.8001031451912817 0.38268343236504554 + outer loop + vertex 146.18634797325998 -40.33351007195614 -50.60000000000003 + vertex 144.35439674318653 -41.16047746448053 -51.082361909795 + vertex 144.45429716569112 -41.33351007195612 -50.60000000000003 + endloop +endfacet +facet normal -0.46193976625565225 0.8001031451912817 0.38268343236504554 + outer loop + vertex 144.35439674318653 -41.16047746448053 -51.082361909795 + vertex 146.18634797325998 -40.33351007195614 -50.60000000000003 + vertex 146.08644755075537 -40.160477464480564 -51.082361909795 + endloop +endfacet +facet normal -0.49999999999999994 0.8660254037844387 2.4421626117071097e-15 + outer loop + vertex 146.05237337704446 -40.10145926438727 -51.600000000000044 + vertex 144.3203225694756 -41.101459264387245 -53.60000000000005 + vertex 144.32032256947562 -41.101459264387245 -51.600000000000044 + endloop +endfacet +facet normal -0.49999999999999994 0.8660254037844387 2.4421626117071097e-15 + outer loop + vertex 144.3203225694756 -41.101459264387245 -53.60000000000005 + vertex 146.05237337704446 -40.10145926438727 -51.600000000000044 + vertex 146.05237337704446 -40.10145926438727 -53.60000000000005 + endloop +endfacet +facet normal -0.39667667014561114 0.6870641468694398 0.6087614290087366 + outer loop + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + vertex 144.45429716569112 -41.33351007195612 -50.60000000000003 + vertex 144.61321578828907 -41.60876520056452 -50.185786437626945 + endloop +endfacet +facet normal -0.39667667014561114 0.6870641468694398 0.6087614290087366 + outer loop + vertex 144.45429716569112 -41.33351007195612 -50.60000000000003 + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + vertex 146.18634797325998 -40.33351007195614 -50.60000000000003 + endloop +endfacet +facet normal 0.0652630961100267 -0.11303899832181608 0.9914448613738104 + outer loop + vertex 157.97914161457808 -64.75922782189426 -49.66814834742192 + vertex 159.45237337704444 -63.31094008581026 -49.60000000000006 + vertex 157.7203225694756 -64.31094008581023 -49.60000000000006 + endloop +endfacet +facet normal 0.0652630961100267 -0.11303899832181608 0.9914448613738104 + outer loop + vertex 159.45237337704444 -63.31094008581026 -49.60000000000006 + vertex 157.97914161457808 -64.75922782189426 -49.66814834742192 + vertex 159.71119242214695 -63.75922782189429 -49.66814834742192 + endloop +endfacet +facet normal 0.49572243068690414 -0.8586164364012594 -0.13052619222006553 + outer loop + vertex 158.68624839576464 -65.98397269328585 -54.117638090205105 + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + vertex 158.72032256947557 -66.04299089337911 -53.60000000000007 + endloop +endfacet +facet normal 0.49572243068690414 -0.8586164364012594 -0.13052619222006553 + outer loop + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + vertex 158.68624839576464 -65.98397269328585 -54.117638090205105 + vertex 160.4182992033335 -64.98397269328588 -54.117638090205105 + endloop +endfacet +facet normal 0.3966766701456253 -0.6870641468694629 0.6087614290087012 + outer loop + vertex 160.3183987808289 -64.81094008581026 -50.60000000000005 + vertex 158.42742935066212 -65.53568495720182 -50.185786437626966 + vertex 158.58634797326002 -65.81094008581022 -50.60000000000005 + endloop +endfacet +facet normal 0.3966766701456253 -0.6870641468694629 0.6087614290087012 + outer loop + vertex 158.42742935066212 -65.53568495720182 -50.185786437626966 + vertex 160.3183987808289 -64.81094008581026 -50.60000000000005 + vertex 160.159480158231 -64.53568495720185 -50.185786437626966 + endloop +endfacet +facet normal -0.49572243068690375 0.8586164364012588 0.13052619222007125 + outer loop + vertex 146.08644755075537 -40.160477464480564 -51.082361909795 + vertex 144.32032256947562 -41.101459264387245 -51.600000000000044 + vertex 144.35439674318653 -41.16047746448053 -51.082361909795 + endloop +endfacet +facet normal -0.49572243068690375 0.8586164364012588 0.13052619222007125 + outer loop + vertex 144.32032256947562 -41.101459264387245 -51.600000000000044 + vertex 146.08644755075537 -40.160477464480564 -51.082361909795 + vertex 146.05237337704446 -40.10145926438727 -51.600000000000044 + endloop +endfacet +facet normal -0.30438071450435056 0.5272028623656531 0.7933533402912496 + outer loop + vertex 144.8203225694756 -41.96748466817171 -49.86794919243116 + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + vertex 144.61321578828907 -41.60876520056452 -50.185786437626945 + endloop +endfacet +facet normal -0.30438071450435056 0.5272028623656531 0.7933533402912496 + outer loop + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + vertex 144.8203225694756 -41.96748466817171 -49.86794919243116 + vertex 146.55237337704446 -40.96748466817173 -49.86794919243116 + endloop +endfacet +facet normal -0.06526309611002687 0.11303899832181638 -0.9914448613738103 + outer loop + vertex 146.79355433194192 -41.385222335872136 -55.53185165257819 + vertex 145.3203225694756 -42.83351007195611 -55.60000000000006 + vertex 145.06150352437308 -42.3852223358721 -55.53185165257819 + endloop +endfacet +facet normal -0.06526309611002687 0.11303899832181638 -0.9914448613738103 + outer loop + vertex 145.3203225694756 -42.83351007195611 -55.60000000000006 + vertex 146.79355433194192 -41.385222335872136 -55.53185165257819 + vertex 147.05237337704446 -41.83351007195615 -55.60000000000006 + endloop +endfacet +facet normal -0.1913417161825537 0.33141357403560795 0.9238795325112792 + outer loop + vertex 145.06150352437308 -42.38522233587211 -49.6681483474219 + vertex 146.55237337704446 -40.96748466817173 -49.86794919243116 + vertex 144.8203225694756 -41.96748466817171 -49.86794919243116 + endloop +endfacet +facet normal -0.1913417161825537 0.33141357403560795 0.9238795325112792 + outer loop + vertex 146.55237337704446 -40.96748466817173 -49.86794919243116 + vertex 145.06150352437308 -42.38522233587211 -49.6681483474219 + vertex 146.79355433194195 -41.385222335872136 -49.6681483474219 + endloop +endfacet +facet normal 0.3966766701456177 -0.687064146869451 -0.6087614290087197 + outer loop + vertex 158.42742935066212 -65.53568495720181 -55.01421356237316 + vertex 160.3183987808289 -64.81094008581026 -54.60000000000007 + vertex 158.58634797326002 -65.81094008581022 -54.60000000000007 + endloop +endfacet +facet normal 0.3966766701456177 -0.687064146869451 -0.6087614290087197 + outer loop + vertex 160.3183987808289 -64.81094008581026 -54.60000000000007 + vertex 158.42742935066212 -65.53568495720181 -55.01421356237316 + vertex 160.159480158231 -64.53568495720184 -55.01421356237316 + endloop +endfacet +facet normal 7.641236529638839e-16 -3.4662739414040785e-16 1.0 + outer loop + vertex 157.7203225694756 -64.31094008581023 -49.60000000000006 + vertex 147.05237337704446 -41.83351007195615 -49.60000000000003 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + endloop +endfacet +facet normal 7.641236529638839e-16 -3.4662739414040785e-16 1.0 + outer loop + vertex 147.05237337704446 -41.83351007195615 -49.60000000000003 + vertex 157.7203225694756 -64.31094008581023 -49.60000000000006 + vertex 159.45237337704444 -63.31094008581026 -49.60000000000006 + endloop +endfacet +facet normal 0.19134171618254847 -0.331413574035599 -0.9238795325112834 + outer loop + vertex 159.71119242214695 -63.75922782189429 -55.531851652578204 + vertex 158.22032256947557 -65.17696548959468 -55.33205080756895 + vertex 157.97914161457808 -64.75922782189426 -55.531851652578204 + endloop +endfacet +facet normal 0.19134171618254847 -0.331413574035599 -0.9238795325112834 + outer loop + vertex 158.22032256947557 -65.17696548959468 -55.33205080756895 + vertex 159.71119242214695 -63.75922782189429 -55.531851652578204 + vertex 159.9523733770444 -64.1769654895947 -55.33205080756895 + endloop +endfacet +facet normal -0.4957224306869047 0.8586164364012601 -0.1305261922200592 + outer loop + vertex 144.3203225694756 -41.101459264387245 -53.60000000000005 + vertex 146.0864475507554 -40.16047746448054 -54.11763809020509 + vertex 144.35439674318653 -41.160477464480515 -54.11763809020509 + endloop +endfacet +facet normal -0.4957224306869047 0.8586164364012601 -0.1305261922200592 + outer loop + vertex 146.0864475507554 -40.16047746448054 -54.11763809020509 + vertex 144.3203225694756 -41.101459264387245 -53.60000000000005 + vertex 146.05237337704446 -40.10145926438727 -53.60000000000005 + endloop +endfacet +facet normal 0.49572243068690436 -0.8586164364012595 0.13052619222006556 + outer loop + vertex 160.45237337704444 -65.04299089337913 -51.600000000000065 + vertex 158.68624839576464 -65.98397269328585 -51.08236190979502 + vertex 158.72032256947557 -66.04299089337911 -51.600000000000065 + endloop +endfacet +facet normal 0.49572243068690436 -0.8586164364012595 0.13052619222006556 + outer loop + vertex 158.68624839576464 -65.98397269328585 -51.08236190979502 + vertex 160.45237337704444 -65.04299089337913 -51.600000000000065 + vertex 160.4182992033335 -64.98397269328588 -51.08236190979502 + endloop +endfacet +facet normal -0.06526309611002606 0.11303899832181688 0.9914448613738103 + outer loop + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 146.79355433194195 -41.385222335872136 -49.6681483474219 + vertex 145.06150352437308 -42.38522233587211 -49.6681483474219 + endloop +endfacet +facet normal -0.06526309611002606 0.11303899832181688 0.9914448613738103 + outer loop + vertex 146.79355433194195 -41.385222335872136 -49.6681483474219 + vertex 145.32032256947562 -42.83351007195611 -49.60000000000003 + vertex 147.05237337704446 -41.83351007195615 -49.60000000000003 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 147.05237337704446 -41.83351007195618 -16.00000000000005 + vertex 159.711192422147 -63.75922782189427 -15.931851652578203 + vertex 159.45237337704447 -63.310940085810266 -16.000000000000068 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.711192422147 -63.75922782189427 -15.931851652578203 + vertex 147.05237337704446 -41.83351007195618 -16.00000000000005 + vertex 146.79355433194198 -41.38522233587212 -15.931851652578185 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.711192422147 -63.75922782189427 -15.931851652578203 + vertex 146.79355433194198 -41.38522233587212 -15.931851652578185 + vertex 159.95237337704447 -64.17696548959468 -15.732050807568942 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.95237337704447 -64.17696548959468 -15.732050807568942 + vertex 146.79355433194198 -41.38522233587212 -15.931851652578185 + vertex 146.5523733770445 -40.96748466817174 -15.732050807568926 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.95237337704447 -64.17696548959468 -15.732050807568942 + vertex 146.5523733770445 -40.96748466817174 -15.732050807568926 + vertex 160.15948015823102 -64.53568495720187 -15.414213562373158 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.15948015823102 -64.53568495720187 -15.414213562373158 + vertex 146.5523733770445 -40.96748466817174 -15.732050807568926 + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.15948015823102 -64.53568495720187 -15.414213562373158 + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + vertex 160.31839878082894 -64.81094008581027 -15.000000000000062 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.31839878082894 -64.81094008581027 -15.000000000000062 + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + vertex 146.18634797326004 -40.33351007195616 -15.000000000000046 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.31839878082894 -64.81094008581027 -15.000000000000062 + vertex 146.18634797326004 -40.33351007195616 -15.000000000000046 + vertex 160.4182992033336 -64.98397269328586 -14.517638090205104 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033336 -64.98397269328586 -14.517638090205104 + vertex 146.18634797326004 -40.33351007195616 -15.000000000000046 + vertex 146.08644755075542 -40.16047746448054 -14.517638090205088 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033336 -64.98397269328586 -14.517638090205104 + vertex 146.08644755075542 -40.16047746448054 -14.517638090205088 + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + vertex 146.08644755075542 -40.16047746448054 -14.517638090205088 + vertex 146.0523733770445 -40.101459264387294 -14.000000000000048 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + vertex 146.0523733770445 -40.101459264387294 -14.000000000000048 + vertex 160.45237337704447 -65.04299089337914 -12.000000000000052 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704447 -65.04299089337914 -12.000000000000052 + vertex 146.0523733770445 -40.101459264387294 -14.000000000000048 + vertex 146.0523733770445 -40.101459264387294 -12.000000000000034 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704447 -65.04299089337914 -12.000000000000052 + vertex 146.0523733770445 -40.101459264387294 -12.000000000000034 + vertex 160.4182992033336 -64.98397269328586 -11.482361909795022 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033336 -64.98397269328586 -11.482361909795022 + vertex 146.0523733770445 -40.101459264387294 -12.000000000000034 + vertex 146.08644755075542 -40.160477464480564 -11.482361909795 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033336 -64.98397269328586 -11.482361909795022 + vertex 146.08644755075542 -40.160477464480564 -11.482361909795 + vertex 160.31839878082894 -64.81094008581027 -11.000000000000048 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.31839878082894 -64.81094008581027 -11.000000000000048 + vertex 146.08644755075542 -40.160477464480564 -11.482361909795 + vertex 146.18634797326004 -40.33351007195616 -11.000000000000036 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.31839878082894 -64.81094008581027 -11.000000000000048 + vertex 146.18634797326004 -40.33351007195616 -11.000000000000036 + vertex 160.15948015823105 -64.53568495720187 -10.58578643762697 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.15948015823105 -64.53568495720187 -10.58578643762697 + vertex 146.18634797326004 -40.33351007195616 -11.000000000000036 + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.15948015823105 -64.53568495720187 -10.58578643762697 + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + vertex 159.9523733770445 -64.17696548959469 -10.267949192431178 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.9523733770445 -64.17696548959469 -10.267949192431178 + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + vertex 146.5523733770445 -40.96748466817174 -10.267949192431168 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.9523733770445 -64.17696548959469 -10.267949192431178 + vertex 146.5523733770445 -40.96748466817174 -10.267949192431168 + vertex 159.711192422147 -63.75922782189427 -10.068148347421925 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.711192422147 -63.75922782189427 -10.068148347421925 + vertex 146.5523733770445 -40.96748466817174 -10.267949192431168 + vertex 146.79355433194198 -41.385222335872136 -10.068148347421902 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.711192422147 -63.75922782189427 -10.068148347421925 + vertex 146.79355433194198 -41.385222335872136 -10.068148347421902 + vertex 159.45237337704447 -63.310940085810266 -10.00000000000005 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.45237337704447 -63.310940085810266 -10.00000000000005 + vertex 146.79355433194198 -41.385222335872136 -10.068148347421902 + vertex 147.05237337704446 -41.83351007195618 -10.000000000000037 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 147.05237337704446 -41.83351007195615 -55.60000000000006 + vertex 159.71119242214695 -63.75922782189429 -55.531851652578204 + vertex 159.45237337704444 -63.310940085810245 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.71119242214695 -63.75922782189429 -55.531851652578204 + vertex 147.05237337704446 -41.83351007195615 -55.60000000000006 + vertex 146.79355433194192 -41.385222335872136 -55.53185165257819 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.71119242214695 -63.75922782189429 -55.531851652578204 + vertex 146.79355433194192 -41.385222335872136 -55.53185165257819 + vertex 159.9523733770444 -64.1769654895947 -55.33205080756895 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.9523733770444 -64.1769654895947 -55.33205080756895 + vertex 146.79355433194192 -41.385222335872136 -55.53185165257819 + vertex 146.55237337704446 -40.96748466817173 -55.332050807568926 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.9523733770444 -64.1769654895947 -55.33205080756895 + vertex 146.55237337704446 -40.96748466817173 -55.332050807568926 + vertex 160.159480158231 -64.53568495720184 -55.01421356237316 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.159480158231 -64.53568495720184 -55.01421356237316 + vertex 146.55237337704446 -40.96748466817173 -55.332050807568926 + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.159480158231 -64.53568495720184 -55.01421356237316 + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + vertex 160.3183987808289 -64.81094008581026 -54.60000000000007 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.3183987808289 -64.81094008581026 -54.60000000000007 + vertex 146.3452665958579 -40.608765200564555 -55.01421356237315 + vertex 146.18634797325998 -40.33351007195614 -54.600000000000044 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.3183987808289 -64.81094008581026 -54.60000000000007 + vertex 146.18634797325998 -40.33351007195614 -54.600000000000044 + vertex 160.4182992033335 -64.98397269328588 -54.117638090205105 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033335 -64.98397269328588 -54.117638090205105 + vertex 146.18634797325998 -40.33351007195614 -54.600000000000044 + vertex 146.0864475507554 -40.16047746448054 -54.11763809020509 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033335 -64.98397269328588 -54.117638090205105 + vertex 146.0864475507554 -40.16047746448054 -54.11763809020509 + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + vertex 146.0864475507554 -40.16047746448054 -54.11763809020509 + vertex 146.05237337704446 -40.10145926438727 -53.60000000000005 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704444 -65.04299089337913 -53.60000000000007 + vertex 146.05237337704446 -40.10145926438727 -53.60000000000005 + vertex 160.45237337704444 -65.04299089337913 -51.600000000000065 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704444 -65.04299089337913 -51.600000000000065 + vertex 146.05237337704446 -40.10145926438727 -53.60000000000005 + vertex 146.05237337704446 -40.10145926438727 -51.600000000000044 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.45237337704444 -65.04299089337913 -51.600000000000065 + vertex 146.05237337704446 -40.10145926438727 -51.600000000000044 + vertex 160.4182992033335 -64.98397269328588 -51.08236190979502 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033335 -64.98397269328588 -51.08236190979502 + vertex 146.05237337704446 -40.10145926438727 -51.600000000000044 + vertex 146.08644755075537 -40.160477464480564 -51.082361909795 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.4182992033335 -64.98397269328588 -51.08236190979502 + vertex 146.08644755075537 -40.160477464480564 -51.082361909795 + vertex 160.3183987808289 -64.81094008581026 -50.60000000000005 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.3183987808289 -64.81094008581026 -50.60000000000005 + vertex 146.08644755075537 -40.160477464480564 -51.082361909795 + vertex 146.18634797325998 -40.33351007195614 -50.60000000000003 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.3183987808289 -64.81094008581026 -50.60000000000005 + vertex 146.18634797325998 -40.33351007195614 -50.60000000000003 + vertex 160.159480158231 -64.53568495720185 -50.185786437626966 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.159480158231 -64.53568495720185 -50.185786437626966 + vertex 146.18634797325998 -40.33351007195614 -50.60000000000003 + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 160.159480158231 -64.53568495720185 -50.185786437626966 + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + vertex 159.95237337704444 -64.17696548959472 -49.86794919243118 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.95237337704444 -64.17696548959472 -49.86794919243118 + vertex 146.3452665958579 -40.60876520056457 -50.185786437626945 + vertex 146.55237337704446 -40.96748466817173 -49.86794919243116 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.95237337704444 -64.17696548959472 -49.86794919243118 + vertex 146.55237337704446 -40.96748466817173 -49.86794919243116 + vertex 159.71119242214695 -63.75922782189429 -49.66814834742192 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.71119242214695 -63.75922782189429 -49.66814834742192 + vertex 146.55237337704446 -40.96748466817173 -49.86794919243116 + vertex 146.79355433194195 -41.385222335872136 -49.6681483474219 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.71119242214695 -63.75922782189429 -49.66814834742192 + vertex 146.79355433194195 -41.385222335872136 -49.6681483474219 + vertex 159.45237337704444 -63.31094008581026 -49.60000000000006 + endloop +endfacet +facet normal 0.8660254037844388 0.4999999999999997 -4.88436798029084e-16 + outer loop + vertex 159.45237337704444 -63.31094008581026 -49.60000000000006 + vertex 146.79355433194195 -41.385222335872136 -49.6681483474219 + vertex 147.05237337704446 -41.83351007195615 -49.60000000000003 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 135.04517266035938 -106.48202726980834 -55.531851652578204 + vertex 109.72753457015432 -106.48202726980834 -55.600000000000065 + vertex 134.52753457015433 -106.48202726980834 -55.600000000000065 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 109.72753457015432 -106.48202726980834 -55.600000000000065 + vertex 135.04517266035938 -106.48202726980834 -55.531851652578204 + vertex 109.20989647994928 -106.48202726980834 -55.531851652578204 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 -55.531851652578204 + vertex 135.04517266035938 -106.48202726980834 -55.531851652578204 + vertex 135.52753457015433 -106.48202726980831 -55.33205080756894 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 -55.531851652578204 + vertex 135.52753457015433 -106.48202726980831 -55.33205080756894 + vertex 108.72753457015433 -106.48202726980834 -55.33205080756894 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.72753457015433 -106.48202726980834 -55.33205080756894 + vertex 135.52753457015433 -106.48202726980831 -55.33205080756894 + vertex 135.94174813252744 -106.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.72753457015433 -106.48202726980834 -55.33205080756894 + vertex 135.94174813252744 -106.48202726980834 -55.01421356237316 + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + vertex 135.94174813252744 -106.48202726980834 -55.01421356237316 + vertex 136.25958537772323 -106.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + vertex 136.25958537772323 -106.48202726980834 -54.60000000000006 + vertex 107.99548376258544 -106.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -54.60000000000006 + vertex 136.25958537772323 -106.48202726980834 -54.60000000000006 + vertex 136.45938622273246 -106.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -54.60000000000006 + vertex 136.45938622273246 -106.48202726980834 -54.117638090205105 + vertex 107.79568291757619 -106.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.79568291757619 -106.48202726980834 -54.117638090205105 + vertex 136.45938622273246 -106.48202726980834 -54.117638090205105 + vertex 136.52753457015433 -106.48202726980834 -53.60000000000006 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.79568291757619 -106.48202726980834 -54.117638090205105 + vertex 136.52753457015433 -106.48202726980834 -53.60000000000006 + vertex 107.72753457015433 -106.48202726980834 -53.60000000000006 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.72753457015433 -106.48202726980834 -53.60000000000006 + vertex 136.52753457015433 -106.48202726980834 -53.60000000000006 + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.72753457015433 -106.48202726980834 -53.60000000000006 + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + vertex 107.72753457015433 -106.48202726980834 -51.60000000000005 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.72753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.45938622273246 -106.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.72753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.45938622273246 -106.48202726980834 -51.082361909795004 + vertex 107.79568291757619 -106.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.79568291757619 -106.48202726980834 -51.082361909795004 + vertex 136.45938622273246 -106.48202726980834 -51.082361909795004 + vertex 136.25958537772323 -106.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.79568291757619 -106.48202726980834 -51.082361909795004 + vertex 136.25958537772323 -106.48202726980834 -50.600000000000044 + vertex 107.99548376258544 -106.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -50.600000000000044 + vertex 136.25958537772323 -106.48202726980834 -50.600000000000044 + vertex 135.94174813252744 -106.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -50.600000000000044 + vertex 135.94174813252744 -106.48202726980834 -50.18578643762695 + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + vertex 135.94174813252744 -106.48202726980834 -50.18578643762695 + vertex 135.52753457015436 -106.48202726980834 -49.867949192431176 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + vertex 135.52753457015436 -106.48202726980834 -49.867949192431176 + vertex 108.72753457015433 -106.48202726980834 -49.867949192431176 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.72753457015433 -106.48202726980834 -49.867949192431176 + vertex 135.52753457015436 -106.48202726980834 -49.867949192431176 + vertex 135.04517266035938 -106.48202726980834 -49.668148347421905 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 108.72753457015433 -106.48202726980834 -49.867949192431176 + vertex 135.04517266035938 -106.48202726980834 -49.668148347421905 + vertex 109.20989647994928 -106.48202726980834 -49.668148347421905 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 -49.668148347421905 + vertex 135.04517266035938 -106.48202726980834 -49.668148347421905 + vertex 134.52753457015433 -106.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal 2.220446049250313e-16 -1.0 -1.242990277445663e-16 + outer loop + vertex 109.20989647994928 -106.48202726980834 -49.668148347421905 + vertex 134.52753457015433 -106.48202726980834 -49.600000000000044 + vertex 109.72753457015432 -106.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal 6.504153270546949e-16 -1.4967879642209175e-16 1.0 + outer loop + vertex 157.72032256947568 -64.31094008581013 -10.00000000000005 + vertex 147.05237337704446 -41.83351007195618 -10.000000000000037 + vertex 145.3203225694757 -42.833510071956034 -10.000000000000037 + endloop +endfacet +facet normal 6.504153270546949e-16 -1.4967879642209175e-16 1.0 + outer loop + vertex 147.05237337704446 -41.83351007195618 -10.000000000000037 + vertex 157.72032256947568 -64.31094008581013 -10.00000000000005 + vertex 159.45237337704447 -63.310940085810266 -10.00000000000005 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 135.04517266035938 -106.48202726980836 -15.931851652578198 + vertex 109.72753457015432 -106.48202726980836 -16.00000000000006 + vertex 134.52753457015433 -106.48202726980834 -16.00000000000006 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 109.72753457015432 -106.48202726980836 -16.00000000000006 + vertex 135.04517266035938 -106.48202726980836 -15.931851652578198 + vertex 109.20989647994928 -106.48202726980836 -15.931851652578198 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 109.20989647994928 -106.48202726980836 -15.931851652578198 + vertex 135.04517266035938 -106.48202726980836 -15.931851652578198 + vertex 135.52753457015433 -106.48202726980834 -15.732050807568937 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 109.20989647994928 -106.48202726980836 -15.931851652578198 + vertex 135.52753457015433 -106.48202726980834 -15.732050807568937 + vertex 108.72753457015435 -106.48202726980836 -15.732050807568937 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.72753457015435 -106.48202726980836 -15.732050807568937 + vertex 135.52753457015433 -106.48202726980834 -15.732050807568937 + vertex 135.94174813252744 -106.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.72753457015435 -106.48202726980836 -15.732050807568937 + vertex 135.94174813252744 -106.48202726980836 -15.414213562373153 + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + vertex 135.94174813252744 -106.48202726980836 -15.414213562373153 + vertex 136.25958537772323 -106.48202726980836 -15.000000000000057 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + vertex 136.25958537772323 -106.48202726980836 -15.000000000000057 + vertex 107.99548376258544 -106.48202726980834 -15.000000000000057 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -15.000000000000057 + vertex 136.25958537772323 -106.48202726980836 -15.000000000000057 + vertex 136.45938622273246 -106.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -15.000000000000057 + vertex 136.45938622273246 -106.48202726980836 -14.517638090205098 + vertex 107.7956829175762 -106.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.7956829175762 -106.48202726980836 -14.517638090205098 + vertex 136.45938622273246 -106.48202726980836 -14.517638090205098 + vertex 136.52753457015433 -106.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.7956829175762 -106.48202726980836 -14.517638090205098 + vertex 136.52753457015433 -106.48202726980836 -14.000000000000059 + vertex 107.72753457015433 -106.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 -14.000000000000059 + vertex 136.52753457015433 -106.48202726980836 -14.000000000000059 + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 -14.000000000000059 + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + vertex 107.72753457015433 -106.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.45938622273246 -106.48202726980836 -11.482361909795012 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.72753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.45938622273246 -106.48202726980836 -11.482361909795012 + vertex 107.7956829175762 -106.48202726980834 -11.482361909795012 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.7956829175762 -106.48202726980834 -11.482361909795012 + vertex 136.45938622273246 -106.48202726980836 -11.482361909795012 + vertex 136.25958537772323 -106.48202726980836 -11.000000000000048 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.7956829175762 -106.48202726980834 -11.482361909795012 + vertex 136.25958537772323 -106.48202726980836 -11.000000000000048 + vertex 107.99548376258544 -106.48202726980834 -11.000000000000048 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -11.000000000000048 + vertex 136.25958537772323 -106.48202726980836 -11.000000000000048 + vertex 135.94174813252744 -106.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 107.99548376258544 -106.48202726980834 -11.000000000000048 + vertex 135.94174813252744 -106.48202726980836 -10.58578643762696 + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + vertex 135.94174813252744 -106.48202726980836 -10.58578643762696 + vertex 135.52753457015436 -106.48202726980836 -10.267949192431178 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + vertex 135.52753457015436 -106.48202726980836 -10.267949192431178 + vertex 108.72753457015435 -106.48202726980836 -10.267949192431178 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.72753457015435 -106.48202726980836 -10.267949192431178 + vertex 135.52753457015436 -106.48202726980836 -10.267949192431178 + vertex 135.04517266035938 -106.48202726980836 -10.068148347421912 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 108.72753457015435 -106.48202726980836 -10.267949192431178 + vertex 135.04517266035938 -106.48202726980836 -10.068148347421912 + vertex 109.20989647994928 -106.48202726980836 -10.068148347421912 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 109.20989647994928 -106.48202726980836 -10.068148347421912 + vertex 135.04517266035938 -106.48202726980836 -10.068148347421912 + vertex 134.52753457015433 -106.48202726980834 -10.00000000000005 + endloop +endfacet +facet normal 1.1102230246251563e-16 -1.0 -2.0134478754370017e-16 + outer loop + vertex 109.20989647994928 -106.48202726980836 -10.068148347421912 + vertex 134.52753457015433 -106.48202726980834 -10.00000000000005 + vertex 109.72753457015432 -106.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal -0.46193976625564426 0.8001031451912668 -0.3826834323650861 + outer loop + vertex 144.35439674318667 -41.160477464480415 -14.517638090205088 + vertex 146.18634797326004 -40.33351007195616 -15.000000000000046 + vertex 144.45429716569126 -41.33351007195603 -15.000000000000046 + endloop +endfacet +facet normal -0.46193976625564426 0.8001031451912668 -0.3826834323650861 + outer loop + vertex 146.18634797326004 -40.33351007195616 -15.000000000000046 + vertex 144.35439674318667 -41.160477464480415 -14.517638090205088 + vertex 146.08644755075542 -40.16047746448054 -14.517638090205088 + endloop +endfacet +facet normal 0.06526309611002626 -0.11303899832181721 -0.9914448613738102 + outer loop + vertex 159.45237337704447 -63.310940085810266 -16.000000000000068 + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 157.72032256947568 -64.31094008581013 -16.000000000000068 + endloop +endfacet +facet normal 0.06526309611002626 -0.11303899832181721 -0.9914448613738102 + outer loop + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + vertex 159.45237337704447 -63.310940085810266 -16.000000000000068 + vertex 159.711192422147 -63.75922782189427 -15.931851652578203 + endloop +endfacet +facet normal 0.19134171618253798 -0.33141357403557914 0.9238795325112927 + outer loop + vertex 158.2203225694757 -65.17696548959456 -10.267949192431178 + vertex 159.711192422147 -63.75922782189427 -10.068148347421925 + vertex 157.97914161457825 -64.75922782189413 -10.068148347421925 + endloop +endfacet +facet normal 0.19134171618253798 -0.33141357403557914 0.9238795325112927 + outer loop + vertex 159.711192422147 -63.75922782189427 -10.068148347421925 + vertex 158.2203225694757 -65.17696548959456 -10.267949192431178 + vertex 159.9523733770445 -64.17696548959469 -10.267949192431178 + endloop +endfacet +facet normal 0.39667667014561314 -0.6870641468694433 -0.6087614290087314 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 160.31839878082894 -64.81094008581027 -15.000000000000062 + vertex 158.58634797326016 -65.81094008581013 -15.000000000000062 + endloop +endfacet +facet normal 0.39667667014561314 -0.6870641468694433 -0.6087614290087314 + outer loop + vertex 160.31839878082894 -64.81094008581027 -15.000000000000062 + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 160.15948015823102 -64.53568495720187 -15.414213562373158 + endloop +endfacet +facet normal -7.641236529638842e-16 3.4662739414040825e-16 -1.0 + outer loop + vertex 147.05237337704446 -41.83351007195618 -16.00000000000005 + vertex 157.72032256947568 -64.31094008581013 -16.000000000000068 + vertex 145.3203225694757 -42.833510071956034 -16.00000000000005 + endloop +endfacet +facet normal -7.641236529638842e-16 3.4662739414040825e-16 -1.0 + outer loop + vertex 157.72032256947568 -64.31094008581013 -16.000000000000068 + vertex 147.05237337704446 -41.83351007195618 -16.00000000000005 + vertex 159.45237337704447 -63.310940085810266 -16.000000000000068 + endloop +endfacet +facet normal -0.4619397662556468 0.8001031451912721 0.38268343236507185 + outer loop + vertex 146.18634797326004 -40.33351007195616 -11.000000000000036 + vertex 144.35439674318664 -41.160477464480415 -11.482361909795 + vertex 144.45429716569126 -41.33351007195603 -11.000000000000036 + endloop +endfacet +facet normal -0.4619397662556468 0.8001031451912721 0.38268343236507185 + outer loop + vertex 144.35439674318664 -41.160477464480415 -11.482361909795 + vertex 146.18634797326004 -40.33351007195616 -11.000000000000036 + vertex 146.08644755075542 -40.160477464480564 -11.482361909795 + endloop +endfacet +facet normal -0.49572243068690613 0.8586164364012626 -0.130526192220038 + outer loop + vertex 144.3203225694757 -41.10145926438716 -14.000000000000048 + vertex 146.08644755075542 -40.16047746448054 -14.517638090205088 + vertex 144.35439674318667 -41.160477464480415 -14.517638090205088 + endloop +endfacet +facet normal -0.49572243068690613 0.8586164364012626 -0.130526192220038 + outer loop + vertex 146.08644755075542 -40.16047746448054 -14.517638090205088 + vertex 144.3203225694757 -41.10145926438716 -14.000000000000048 + vertex 146.0523733770445 -40.101459264387294 -14.000000000000048 + endloop +endfacet +facet normal -0.39667667014561336 0.6870641468694437 0.6087614290087308 + outer loop + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + vertex 144.45429716569126 -41.33351007195603 -11.000000000000036 + vertex 144.61321578828915 -41.60876520056444 -10.585786437626947 + endloop +endfacet +facet normal -0.39667667014561336 0.6870641468694437 0.6087614290087308 + outer loop + vertex 144.45429716569126 -41.33351007195603 -11.000000000000036 + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + vertex 146.18634797326004 -40.33351007195616 -11.000000000000036 + endloop +endfacet +facet normal -0.3043807145043558 0.5272028623656622 0.7933533402912416 + outer loop + vertex 144.82032256947574 -41.9674846681716 -10.267949192431168 + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + vertex 144.61321578828915 -41.60876520056444 -10.585786437626947 + endloop +endfacet +facet normal -0.3043807145043558 0.5272028623656622 0.7933533402912416 + outer loop + vertex 146.34526659585794 -40.60876520056458 -10.585786437626947 + vertex 144.82032256947574 -41.9674846681716 -10.267949192431168 + vertex 146.5523733770445 -40.96748466817174 -10.267949192431168 + endloop +endfacet +facet normal 0.19134171618254847 -0.331413574035599 -0.9238795325112834 + outer loop + vertex 159.711192422147 -63.75922782189427 -15.931851652578203 + vertex 158.22032256947568 -65.17696548959455 -15.732050807568942 + vertex 157.97914161457825 -64.75922782189413 -15.931851652578203 + endloop +endfacet +facet normal 0.19134171618254847 -0.331413574035599 -0.9238795325112834 + outer loop + vertex 158.22032256947568 -65.17696548959455 -15.732050807568942 + vertex 159.711192422147 -63.75922782189427 -15.931851652578203 + vertex 159.95237337704447 -64.17696548959468 -15.732050807568942 + endloop +endfacet +facet normal -0.1913417161825537 0.33141357403560795 0.9238795325112792 + outer loop + vertex 145.06150352437322 -42.38522233587199 -10.068148347421902 + vertex 146.5523733770445 -40.96748466817174 -10.267949192431168 + vertex 144.82032256947574 -41.9674846681716 -10.267949192431168 + endloop +endfacet +facet normal -0.1913417161825537 0.33141357403560795 0.9238795325112792 + outer loop + vertex 146.5523733770445 -40.96748466817174 -10.267949192431168 + vertex 145.06150352437322 -42.38522233587199 -10.068148347421902 + vertex 146.79355433194198 -41.385222335872136 -10.068148347421902 + endloop +endfacet +facet normal -0.06526309611002466 0.11303899832181444 0.9914448613738106 + outer loop + vertex 145.3203225694757 -42.833510071956034 -10.000000000000037 + vertex 146.79355433194198 -41.385222335872136 -10.068148347421902 + vertex 145.06150352437322 -42.38522233587199 -10.068148347421902 + endloop +endfacet +facet normal -0.06526309611002466 0.11303899832181444 0.9914448613738106 + outer loop + vertex 146.79355433194198 -41.385222335872136 -10.068148347421902 + vertex 145.3203225694757 -42.833510071956034 -10.000000000000037 + vertex 147.05237337704446 -41.83351007195618 -10.000000000000037 + endloop +endfacet +facet normal -0.1913417161825498 0.33141357403559957 -0.9238795325112831 + outer loop + vertex 146.5523733770445 -40.96748466817174 -15.732050807568926 + vertex 145.0615035243732 -42.38522233587199 -15.931851652578185 + vertex 144.82032256947574 -41.96748466817159 -15.732050807568926 + endloop +endfacet +facet normal -0.1913417161825498 0.33141357403559957 -0.9238795325112831 + outer loop + vertex 145.0615035243732 -42.38522233587199 -15.931851652578185 + vertex 146.5523733770445 -40.96748466817174 -15.732050807568926 + vertex 146.79355433194198 -41.38522233587212 -15.931851652578185 + endloop +endfacet +facet normal -0.49999999999999994 0.8660254037844387 -9.325056343474399e-32 + outer loop + vertex 146.0523733770445 -40.101459264387294 -12.000000000000034 + vertex 144.3203225694757 -41.10145926438716 -14.000000000000048 + vertex 144.3203225694757 -41.10145926438716 -12.000000000000034 + endloop +endfacet +facet normal -0.49999999999999994 0.8660254037844387 -9.325056343474399e-32 + outer loop + vertex 144.3203225694757 -41.10145926438716 -14.000000000000048 + vertex 146.0523733770445 -40.101459264387294 -12.000000000000034 + vertex 146.0523733770445 -40.101459264387294 -14.000000000000048 + endloop +endfacet +facet normal 0.39667667014561664 -0.6870641468694482 0.6087614290087234 + outer loop + vertex 160.31839878082894 -64.81094008581027 -11.000000000000048 + vertex 158.42742935066227 -65.53568495720174 -10.58578643762697 + vertex 158.58634797326016 -65.81094008581013 -11.000000000000048 + endloop +endfacet +facet normal 0.39667667014561664 -0.6870641468694482 0.6087614290087234 + outer loop + vertex 158.42742935066227 -65.53568495720174 -10.58578643762697 + vertex 160.31839878082894 -64.81094008581027 -11.000000000000048 + vertex 160.15948015823105 -64.53568495720187 -10.58578643762697 + endloop +endfacet +facet normal -0.3043807145043598 0.5272028623656677 -0.7933533402912364 + outer loop + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + vertex 144.82032256947574 -41.96748466817159 -15.732050807568926 + vertex 144.61321578828915 -41.60876520056444 -15.41421356237314 + endloop +endfacet +facet normal -0.3043807145043598 0.5272028623656677 -0.7933533402912364 + outer loop + vertex 144.82032256947574 -41.96748466817159 -15.732050807568926 + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + vertex 146.5523733770445 -40.96748466817174 -15.732050807568926 + endloop +endfacet +facet normal 0.30438071450435567 -0.5272028623656606 0.7933533402912427 + outer loop + vertex 158.42742935066227 -65.53568495720174 -10.58578643762697 + vertex 159.9523733770445 -64.17696548959469 -10.267949192431178 + vertex 158.2203225694757 -65.17696548959456 -10.267949192431178 + endloop +endfacet +facet normal 0.30438071450435567 -0.5272028623656606 0.7933533402912427 + outer loop + vertex 159.9523733770445 -64.17696548959469 -10.267949192431178 + vertex 158.42742935066227 -65.53568495720174 -10.58578643762697 + vertex 160.15948015823105 -64.53568495720187 -10.58578643762697 + endloop +endfacet +facet normal 0.4619397662556509 -0.8001031451912783 0.3826834323650537 + outer loop + vertex 160.4182992033336 -64.98397269328586 -11.482361909795022 + vertex 158.58634797326016 -65.81094008581013 -11.000000000000048 + vertex 158.6862483957648 -65.98397269328572 -11.482361909795022 + endloop +endfacet +facet normal 0.4619397662556509 -0.8001031451912783 0.3826834323650537 + outer loop + vertex 158.58634797326016 -65.81094008581013 -11.000000000000048 + vertex 160.4182992033336 -64.98397269328586 -11.482361909795022 + vertex 160.31839878082894 -64.81094008581027 -11.000000000000048 + endloop +endfacet +facet normal 0.46193976625564825 -0.8001031451912746 -0.38268343236506525 + outer loop + vertex 158.58634797326016 -65.81094008581013 -15.000000000000062 + vertex 160.4182992033336 -64.98397269328586 -14.517638090205104 + vertex 158.6862483957648 -65.98397269328572 -14.517638090205104 + endloop +endfacet +facet normal 0.46193976625564825 -0.8001031451912746 -0.38268343236506525 + outer loop + vertex 160.4182992033336 -64.98397269328586 -14.517638090205104 + vertex 158.58634797326016 -65.81094008581013 -15.000000000000062 + vertex 160.31839878082894 -64.81094008581027 -15.000000000000062 + endloop +endfacet +facet normal 0.49572243068690375 -0.8586164364012588 -0.13052619222007125 + outer loop + vertex 158.6862483957648 -65.98397269328572 -14.517638090205104 + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + vertex 158.7203225694757 -66.04299089337901 -14.000000000000064 + endloop +endfacet +facet normal 0.49572243068690375 -0.8586164364012588 -0.13052619222007125 + outer loop + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + vertex 158.6862483957648 -65.98397269328572 -14.517638090205104 + vertex 160.4182992033336 -64.98397269328586 -14.517638090205104 + endloop +endfacet +facet normal -0.4957224306869052 0.8586164364012612 0.13052619222005 + outer loop + vertex 146.08644755075542 -40.160477464480564 -11.482361909795 + vertex 144.3203225694757 -41.10145926438716 -12.000000000000034 + vertex 144.35439674318664 -41.160477464480415 -11.482361909795 + endloop +endfacet +facet normal -0.4957224306869052 0.8586164364012612 0.13052619222005 + outer loop + vertex 144.3203225694757 -41.10145926438716 -12.000000000000034 + vertex 146.08644755075542 -40.160477464480564 -11.482361909795 + vertex 146.0523733770445 -40.101459264387294 -12.000000000000034 + endloop +endfacet +facet normal -0.39667667014561825 0.6870641468694507 -0.6087614290087197 + outer loop + vertex 144.45429716569126 -41.33351007195603 -15.000000000000046 + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + vertex 144.61321578828915 -41.60876520056444 -15.41421356237314 + endloop +endfacet +facet normal -0.39667667014561825 0.6870641468694507 -0.6087614290087197 + outer loop + vertex 146.34526659585794 -40.60876520056458 -15.41421356237314 + vertex 144.45429716569126 -41.33351007195603 -15.000000000000046 + vertex 146.18634797326004 -40.33351007195616 -15.000000000000046 + endloop +endfacet +facet normal 0.30438071450435167 -0.5272028623656551 -0.7933533402912479 + outer loop + vertex 159.95237337704447 -64.17696548959468 -15.732050807568942 + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 158.22032256947568 -65.17696548959455 -15.732050807568942 + endloop +endfacet +facet normal 0.30438071450435167 -0.5272028623656551 -0.7933533402912479 + outer loop + vertex 158.42742935066224 -65.53568495720172 -15.414213562373158 + vertex 159.95237337704447 -64.17696548959468 -15.732050807568942 + vertex 160.15948015823102 -64.53568495720187 -15.414213562373158 + endloop +endfacet +facet normal -0.06526309611002548 0.11303899832181395 -0.9914448613738106 + outer loop + vertex 146.79355433194198 -41.38522233587212 -15.931851652578185 + vertex 145.3203225694757 -42.833510071956034 -16.00000000000005 + vertex 145.0615035243732 -42.38522233587199 -15.931851652578185 + endloop +endfacet +facet normal -0.06526309611002548 0.11303899832181395 -0.9914448613738106 + outer loop + vertex 145.3203225694757 -42.833510071956034 -16.00000000000005 + vertex 146.79355433194198 -41.38522233587212 -15.931851652578185 + vertex 147.05237337704446 -41.83351007195618 -16.00000000000005 + endloop +endfacet +facet normal 0.0652630961100377 -0.11303899832183512 0.9914448613738074 + outer loop + vertex 157.97914161457825 -64.75922782189413 -10.068148347421925 + vertex 159.45237337704447 -63.310940085810266 -10.00000000000005 + vertex 157.72032256947568 -64.31094008581013 -10.00000000000005 + endloop +endfacet +facet normal 0.0652630961100377 -0.11303899832183512 0.9914448613738074 + outer loop + vertex 159.45237337704447 -63.310940085810266 -10.00000000000005 + vertex 157.97914161457825 -64.75922782189413 -10.068148347421925 + vertex 159.711192422147 -63.75922782189427 -10.068148347421925 + endloop +endfacet +facet normal 0.49999999999999994 -0.8660254037844387 9.325056343474399e-32 + outer loop + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + vertex 158.7203225694757 -66.04299089337901 -12.000000000000052 + vertex 158.7203225694757 -66.04299089337901 -14.000000000000064 + endloop +endfacet +facet normal 0.49999999999999994 -0.8660254037844387 9.325056343474399e-32 + outer loop + vertex 158.7203225694757 -66.04299089337901 -12.000000000000052 + vertex 160.45237337704447 -65.04299089337914 -14.000000000000064 + vertex 160.45237337704447 -65.04299089337914 -12.000000000000052 + endloop +endfacet +facet normal 0.4957224306869038 -0.8586164364012585 0.1305261922200726 + outer loop + vertex 160.45237337704447 -65.04299089337914 -12.000000000000052 + vertex 158.6862483957648 -65.98397269328572 -11.482361909795022 + vertex 158.7203225694757 -66.04299089337901 -12.000000000000052 + endloop +endfacet +facet normal 0.4957224306869038 -0.8586164364012585 0.1305261922200726 + outer loop + vertex 158.6862483957648 -65.98397269328572 -11.482361909795022 + vertex 160.45237337704447 -65.04299089337914 -12.000000000000052 + vertex 160.4182992033336 -64.98397269328586 -11.482361909795022 + endloop +endfacet +facet normal 0.7933533402912313 5.384581669432008e-15 0.6087614290087258 + outer loop + vertex 136.25958537772323 -106.48202726980834 -50.600000000000044 + vertex 135.94174813252744 -104.48202726980834 -50.18578643762695 + vertex 135.94174813252744 -106.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal 0.7933533402912313 5.384581669432008e-15 0.6087614290087258 + outer loop + vertex 135.94174813252744 -104.48202726980834 -50.18578643762695 + vertex 136.25958537772323 -106.48202726980834 -50.600000000000044 + vertex 136.25958537772323 -104.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal 1.0 1.67088565206086e-14 -5.933957380480419e-32 + outer loop + vertex 136.52753457015433 -104.48202726980836 -53.60000000000006 + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.52753457015433 -106.48202726980834 -53.60000000000006 + endloop +endfacet +facet normal 1.0 1.67088565206086e-14 -5.933957380480419e-32 + outer loop + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.52753457015433 -104.48202726980836 -53.60000000000006 + vertex 136.52753457015433 -104.48202726980836 -51.60000000000005 + endloop +endfacet +facet normal 0.13052619222005016 1.7347234759768086e-16 0.9914448613738107 + outer loop + vertex 134.52753457015433 -106.48202726980834 -49.600000000000044 + vertex 135.04517266035938 -104.48202726980834 -49.668148347421905 + vertex 134.52753457015433 -104.48202726980836 -49.600000000000044 + endloop +endfacet +facet normal 0.13052619222005016 1.7347234759768086e-16 0.9914448613738107 + outer loop + vertex 135.04517266035938 -104.48202726980834 -49.668148347421905 + vertex 134.52753457015433 -106.48202726980834 -49.600000000000044 + vertex 135.04517266035938 -106.48202726980834 -49.668148347421905 + endloop +endfacet +facet normal 0.9238795325112927 -9.436895709313829e-16 -0.3826834323650756 + outer loop + vertex 136.25958537772323 -104.48202726980834 -54.60000000000006 + vertex 136.45938622273246 -106.48202726980834 -54.117638090205105 + vertex 136.25958537772323 -106.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal 0.9238795325112927 -9.436895709313829e-16 -0.3826834323650756 + outer loop + vertex 136.45938622273246 -106.48202726980834 -54.117638090205105 + vertex 136.25958537772323 -104.48202726980834 -54.60000000000006 + vertex 136.45938622273246 -104.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal 0.9238795325112943 -9.992007221626409e-16 0.3826834323650719 + outer loop + vertex 136.45938622273246 -106.48202726980834 -51.082361909795004 + vertex 136.25958537772323 -104.48202726980834 -50.600000000000044 + vertex 136.25958537772323 -106.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal 0.9238795325112943 -9.992007221626409e-16 0.3826834323650719 + outer loop + vertex 136.25958537772323 -104.48202726980834 -50.600000000000044 + vertex 136.45938622273246 -106.48202726980834 -51.082361909795004 + vertex 136.45938622273246 -104.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal 0.9914448613738096 8.937295348232509e-15 0.13052619222005787 + outer loop + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.45938622273246 -104.48202726980834 -51.082361909795004 + vertex 136.45938622273246 -106.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal 0.9914448613738096 8.937295348232509e-15 0.13052619222005787 + outer loop + vertex 136.45938622273246 -104.48202726980834 -51.082361909795004 + vertex 136.52753457015433 -106.48202726980834 -51.60000000000005 + vertex 136.52753457015433 -104.48202726980836 -51.60000000000005 + endloop +endfacet +facet normal 0.1305261922200502 1.804112415015878e-16 -0.9914448613738107 + outer loop + vertex 135.04517266035938 -104.48202726980834 -55.531851652578204 + vertex 134.52753457015433 -106.48202726980834 -55.600000000000065 + vertex 134.52753457015433 -104.48202726980836 -55.600000000000065 + endloop +endfacet +facet normal 0.1305261922200502 1.804112415015878e-16 -0.9914448613738107 + outer loop + vertex 134.52753457015433 -106.48202726980834 -55.600000000000065 + vertex 135.04517266035938 -104.48202726980834 -55.531851652578204 + vertex 135.04517266035938 -106.48202726980834 -55.531851652578204 + endloop +endfacet +facet normal 0.6087614290087273 6.827871601444713e-15 0.7933533402912301 + outer loop + vertex 135.52753457015436 -106.48202726980834 -49.867949192431176 + vertex 135.94174813252744 -104.48202726980834 -50.18578643762695 + vertex 135.52753457015436 -104.48202726980831 -49.867949192431176 + endloop +endfacet +facet normal 0.6087614290087273 6.827871601444713e-15 0.7933533402912301 + outer loop + vertex 135.94174813252744 -104.48202726980834 -50.18578643762695 + vertex 135.52753457015436 -106.48202726980834 -49.867949192431176 + vertex 135.94174813252744 -106.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal -0.13052619222005168 -1.8041124150158809e-16 -0.9914448613738105 + outer loop + vertex 109.72753457015432 -104.48202726980836 -16.00000000000006 + vertex 109.20989647994928 -106.48202726980836 -15.931851652578198 + vertex 109.20989647994928 -104.48202726980836 -15.931851652578198 + endloop +endfacet +facet normal -0.13052619222005168 -1.8041124150158809e-16 -0.9914448613738105 + outer loop + vertex 109.20989647994928 -106.48202726980836 -15.931851652578198 + vertex 109.72753457015432 -104.48202726980836 -16.00000000000006 + vertex 109.72753457015432 -106.48202726980836 -16.00000000000006 + endloop +endfacet +facet normal -0.6087614290087192 -7.771561172376097e-16 -0.7933533402912363 + outer loop + vertex 108.72753457015433 -104.48202726980834 -15.732050807568937 + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + vertex 108.31332100778123 -104.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal -0.6087614290087192 -7.771561172376097e-16 -0.7933533402912363 + outer loop + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + vertex 108.72753457015433 -104.48202726980834 -15.732050807568937 + vertex 108.72753457015435 -106.48202726980836 -15.732050807568937 + endloop +endfacet +facet normal 0.9914448613738134 9.43689570931383e-16 -0.13052619222003028 + outer loop + vertex 136.4593862227325 -104.48202726980836 -14.517638090205098 + vertex 136.52753457015433 -106.48202726980836 -14.000000000000059 + vertex 136.45938622273246 -106.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal 0.9914448613738134 9.43689570931383e-16 -0.13052619222003028 + outer loop + vertex 136.52753457015433 -106.48202726980836 -14.000000000000059 + vertex 136.4593862227325 -104.48202726980836 -14.517638090205098 + vertex 136.52753457015433 -104.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 109.72753457015432 -106.48202726980836 -10.00000000000005 + vertex 134.52753457015433 -104.48202726980836 -10.00000000000005 + vertex 109.72753457015432 -104.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 134.52753457015433 -104.48202726980836 -10.00000000000005 + vertex 109.72753457015432 -106.48202726980836 -10.00000000000005 + vertex 134.52753457015433 -106.48202726980834 -10.00000000000005 + endloop +endfacet +facet normal -0.923879532511291 3.497202527569243e-15 0.3826834323650798 + outer loop + vertex 107.99548376258544 -106.48202726980834 -11.000000000000048 + vertex 107.7956829175762 -104.48202726980834 -11.482361909795012 + vertex 107.7956829175762 -106.48202726980834 -11.482361909795012 + endloop +endfacet +facet normal -0.923879532511291 3.497202527569243e-15 0.3826834323650798 + outer loop + vertex 107.7956829175762 -104.48202726980834 -11.482361909795012 + vertex 107.99548376258544 -106.48202726980834 -11.000000000000048 + vertex 107.99548376258547 -104.48202726980834 -11.000000000000048 + endloop +endfacet +facet normal -1.0 -1.443289932012703e-15 5.933957380480203e-32 + outer loop + vertex 107.72753457015433 -104.48202726980836 -12.000000000000046 + vertex 107.72753457015433 -106.48202726980836 -14.000000000000059 + vertex 107.72753457015433 -106.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal -1.0 -1.443289932012703e-15 5.933957380480203e-32 + outer loop + vertex 107.72753457015433 -106.48202726980836 -14.000000000000059 + vertex 107.72753457015433 -104.48202726980836 -12.000000000000046 + vertex 107.72753457015433 -104.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal -0.38268343236509555 -4.718447854656916e-16 -0.9238795325112844 + outer loop + vertex 109.20989647994928 -104.48202726980836 -15.931851652578198 + vertex 108.72753457015435 -106.48202726980836 -15.732050807568937 + vertex 108.72753457015433 -104.48202726980834 -15.732050807568937 + endloop +endfacet +facet normal -0.38268343236509555 -4.718447854656916e-16 -0.9238795325112844 + outer loop + vertex 108.72753457015435 -106.48202726980836 -15.732050807568937 + vertex 109.20989647994928 -104.48202726980836 -15.931851652578198 + vertex 109.20989647994928 -106.48202726980836 -15.931851652578198 + endloop +endfacet +facet normal 0.793353340291227 1.221245327087672e-15 -0.6087614290087313 + outer loop + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 136.25958537772323 -106.48202726980836 -15.000000000000057 + vertex 135.94174813252744 -106.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal 0.793353340291227 1.221245327087672e-15 -0.6087614290087313 + outer loop + vertex 136.25958537772323 -106.48202726980836 -15.000000000000057 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 136.25958537772323 -104.48202726980836 -15.000000000000057 + endloop +endfacet +facet normal -0.9238795325112887 3.5527136788005e-15 -0.38268343236508484 + outer loop + vertex 107.7956829175762 -104.48202726980836 -14.517638090205098 + vertex 107.99548376258544 -106.48202726980834 -15.000000000000057 + vertex 107.7956829175762 -106.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal -0.9238795325112887 3.5527136788005e-15 -0.38268343236508484 + outer loop + vertex 107.99548376258544 -106.48202726980834 -15.000000000000057 + vertex 107.7956829175762 -104.48202726980836 -14.517638090205098 + vertex 107.99548376258547 -104.48202726980834 -15.000000000000057 + endloop +endfacet +facet normal -0.6087614290087118 -7.771561172376095e-16 0.793353340291242 + outer loop + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + vertex 108.72753457015433 -104.48202726980834 -10.267949192431178 + vertex 108.31332100778123 -104.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal -0.6087614290087118 -7.771561172376095e-16 0.793353340291242 + outer loop + vertex 108.72753457015433 -104.48202726980834 -10.267949192431178 + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + vertex 108.72753457015435 -106.48202726980836 -10.267949192431178 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 134.52753457015433 -104.48202726980836 -16.00000000000006 + vertex 109.72753457015432 -106.48202726980836 -16.00000000000006 + vertex 109.72753457015432 -104.48202726980836 -16.00000000000006 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 109.72753457015432 -106.48202726980836 -16.00000000000006 + vertex 134.52753457015433 -104.48202726980836 -16.00000000000006 + vertex 134.52753457015433 -106.48202726980834 -16.00000000000006 + endloop +endfacet +facet normal -0.7933533402912346 1.9984014443252818e-15 0.6087614290087214 + outer loop + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + vertex 107.99548376258547 -104.48202726980834 -11.000000000000048 + vertex 107.99548376258544 -106.48202726980834 -11.000000000000048 + endloop +endfacet +facet normal -0.7933533402912346 1.9984014443252818e-15 0.6087614290087214 + outer loop + vertex 107.99548376258547 -104.48202726980834 -11.000000000000048 + vertex 108.31332100778123 -106.48202726980836 -10.58578643762696 + vertex 108.31332100778123 -104.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal -0.99144486137381 1.852639103397051e-32 0.13052619222005532 + outer loop + vertex 107.7956829175762 -106.48202726980834 -11.482361909795012 + vertex 107.72753457015433 -104.48202726980836 -12.000000000000046 + vertex 107.72753457015433 -106.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal -0.99144486137381 1.852639103397051e-32 0.13052619222005532 + outer loop + vertex 107.72753457015433 -104.48202726980836 -12.000000000000046 + vertex 107.7956829175762 -106.48202726980834 -11.482361909795012 + vertex 107.7956829175762 -104.48202726980834 -11.482361909795012 + endloop +endfacet +facet normal -0.7933533402912387 1.887379141862766e-15 -0.6087614290087162 + outer loop + vertex 107.99548376258547 -104.48202726980834 -15.000000000000057 + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + vertex 107.99548376258544 -106.48202726980834 -15.000000000000057 + endloop +endfacet +facet normal -0.7933533402912387 1.887379141862766e-15 -0.6087614290087162 + outer loop + vertex 108.31332100778123 -106.48202726980836 -15.414213562373153 + vertex 107.99548376258547 -104.48202726980834 -15.000000000000057 + vertex 108.31332100778123 -104.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal 0.6087614290087198 -6.106226635438362e-16 -0.7933533402912359 + outer loop + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 135.52753457015433 -106.48202726980834 -15.732050807568937 + vertex 135.52753457015436 -104.48202726980836 -15.732050807568937 + endloop +endfacet +facet normal 0.6087614290087198 -6.106226635438362e-16 -0.7933533402912359 + outer loop + vertex 135.52753457015433 -106.48202726980834 -15.732050807568937 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 135.94174813252744 -106.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal -0.13052619222005152 -1.6653345369377333e-16 0.9914448613738105 + outer loop + vertex 109.20989647994928 -106.48202726980836 -10.068148347421912 + vertex 109.72753457015432 -104.48202726980836 -10.00000000000005 + vertex 109.20989647994928 -104.48202726980836 -10.068148347421912 + endloop +endfacet +facet normal -0.13052619222005152 -1.6653345369377333e-16 0.9914448613738105 + outer loop + vertex 109.72753457015432 -104.48202726980836 -10.00000000000005 + vertex 109.20989647994928 -106.48202726980836 -10.068148347421912 + vertex 109.72753457015432 -106.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal -0.99144486137381 -1.1102230246251563e-16 -0.13052619222005393 + outer loop + vertex 107.72753457015433 -104.48202726980836 -14.000000000000059 + vertex 107.7956829175762 -106.48202726980836 -14.517638090205098 + vertex 107.72753457015433 -106.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal -0.99144486137381 -1.1102230246251563e-16 -0.13052619222005393 + outer loop + vertex 107.7956829175762 -106.48202726980836 -14.517638090205098 + vertex 107.72753457015433 -104.48202726980836 -14.000000000000059 + vertex 107.7956829175762 -104.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal -0.3826834323651044 -4.4408920985006247e-16 0.9238795325112809 + outer loop + vertex 108.72753457015435 -106.48202726980836 -10.267949192431178 + vertex 109.20989647994928 -104.48202726980836 -10.068148347421912 + vertex 108.72753457015433 -104.48202726980834 -10.267949192431178 + endloop +endfacet +facet normal -0.3826834323651044 -4.4408920985006247e-16 0.9238795325112809 + outer loop + vertex 109.20989647994928 -104.48202726980836 -10.068148347421912 + vertex 108.72753457015435 -106.48202726980836 -10.267949192431178 + vertex 109.20989647994928 -106.48202726980836 -10.068148347421912 + endloop +endfacet +facet normal 0.3826834323650936 -1.6653345369377346e-15 0.9238795325112852 + outer loop + vertex 135.04517266035938 -106.48202726980836 -10.068148347421912 + vertex 135.52753457015436 -104.48202726980834 -10.267949192431178 + vertex 135.04517266035938 -104.48202726980834 -10.068148347421912 + endloop +endfacet +facet normal 0.3826834323650936 -1.6653345369377346e-15 0.9238795325112852 + outer loop + vertex 135.52753457015436 -104.48202726980834 -10.267949192431178 + vertex 135.04517266035938 -106.48202726980836 -10.068148347421912 + vertex 135.52753457015436 -106.48202726980836 -10.267949192431178 + endloop +endfacet +facet normal 0.3826834323650984 -1.4988010832439615e-15 -0.9238795325112833 + outer loop + vertex 135.52753457015436 -104.48202726980836 -15.732050807568937 + vertex 135.04517266035938 -106.48202726980836 -15.931851652578198 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + endloop +endfacet +facet normal 0.3826834323650984 -1.4988010832439615e-15 -0.9238795325112833 + outer loop + vertex 135.04517266035938 -106.48202726980836 -15.931851652578198 + vertex 135.52753457015436 -104.48202726980836 -15.732050807568937 + vertex 135.52753457015433 -106.48202726980834 -15.732050807568937 + endloop +endfacet +facet normal 0.6087614290087225 2.109423746787797e-15 0.7933533402912337 + outer loop + vertex 135.52753457015436 -106.48202726980836 -10.267949192431178 + vertex 135.94174813252744 -104.48202726980836 -10.58578643762696 + vertex 135.52753457015436 -104.48202726980834 -10.267949192431178 + endloop +endfacet +facet normal 0.6087614290087225 2.109423746787797e-15 0.7933533402912337 + outer loop + vertex 135.94174813252744 -104.48202726980836 -10.58578643762696 + vertex 135.52753457015436 -106.48202726980836 -10.267949192431178 + vertex 135.94174813252744 -106.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal 0.13052619222004924 -1.8041124150158809e-16 -0.9914448613738107 + outer loop + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 134.52753457015433 -106.48202726980834 -16.00000000000006 + vertex 134.52753457015433 -104.48202726980836 -16.00000000000006 + endloop +endfacet +facet normal 0.13052619222004924 -1.8041124150158809e-16 -0.9914448613738107 + outer loop + vertex 134.52753457015433 -106.48202726980834 -16.00000000000006 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 135.04517266035938 -106.48202726980836 -15.931851652578198 + endloop +endfacet +facet normal 0.7933533402912321 4.940492459581946e-15 0.6087614290087248 + outer loop + vertex 136.25958537772323 -106.48202726980836 -11.000000000000048 + vertex 135.94174813252744 -104.48202726980836 -10.58578643762696 + vertex 135.94174813252744 -106.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal 0.7933533402912321 4.940492459581946e-15 0.6087614290087248 + outer loop + vertex 135.94174813252744 -104.48202726980836 -10.58578643762696 + vertex 136.25958537772323 -106.48202726980836 -11.000000000000048 + vertex 136.25958537772323 -104.48202726980836 -11.000000000000048 + endloop +endfacet +facet normal 0.9914448613738134 9.43689570931383e-16 0.13052619222003028 + outer loop + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.4593862227325 -104.48202726980836 -11.482361909795012 + vertex 136.45938622273246 -106.48202726980836 -11.482361909795012 + endloop +endfacet +facet normal 0.9914448613738134 9.43689570931383e-16 0.13052619222003028 + outer loop + vertex 136.4593862227325 -104.48202726980836 -11.482361909795012 + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.52753457015433 -104.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal 0.1305261922200492 -1.804112415015878e-16 0.9914448613738107 + outer loop + vertex 134.52753457015433 -106.48202726980834 -10.00000000000005 + vertex 135.04517266035938 -104.48202726980834 -10.068148347421912 + vertex 134.52753457015433 -104.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal 0.1305261922200492 -1.804112415015878e-16 0.9914448613738107 + outer loop + vertex 135.04517266035938 -104.48202726980834 -10.068148347421912 + vertex 134.52753457015433 -106.48202726980834 -10.00000000000005 + vertex 135.04517266035938 -106.48202726980836 -10.068148347421912 + endloop +endfacet +facet normal 0.9238795325112855 -1.3322676295501875e-15 -0.3826834323650928 + outer loop + vertex 136.25958537772323 -104.48202726980836 -15.000000000000057 + vertex 136.45938622273246 -106.48202726980836 -14.517638090205098 + vertex 136.25958537772323 -106.48202726980836 -15.000000000000057 + endloop +endfacet +facet normal 0.9238795325112855 -1.3322676295501875e-15 -0.3826834323650928 + outer loop + vertex 136.45938622273246 -106.48202726980836 -14.517638090205098 + vertex 136.25958537772323 -104.48202726980836 -15.000000000000057 + vertex 136.4593862227325 -104.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal 1.0 6.272760089132133e-15 1.3714293846086423e-29 + outer loop + vertex 136.52753457015433 -104.48202726980836 -14.000000000000059 + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.52753457015433 -106.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal 1.0 6.272760089132133e-15 1.3714293846086423e-29 + outer loop + vertex 136.52753457015433 -106.48202726980836 -12.000000000000046 + vertex 136.52753457015433 -104.48202726980836 -14.000000000000059 + vertex 136.52753457015433 -104.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal 0.923879532511287 -1.2767564783189294e-15 0.38268343236508906 + outer loop + vertex 136.45938622273246 -106.48202726980836 -11.482361909795012 + vertex 136.25958537772323 -104.48202726980836 -11.000000000000048 + vertex 136.25958537772323 -106.48202726980836 -11.000000000000048 + endloop +endfacet +facet normal 0.923879532511287 -1.2767564783189294e-15 0.38268343236508906 + outer loop + vertex 136.25958537772323 -104.48202726980836 -11.000000000000048 + vertex 136.45938622273246 -106.48202726980836 -11.482361909795012 + vertex 136.4593862227325 -104.48202726980836 -11.482361909795012 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 109.72753457015432 -106.48202726980834 -49.600000000000044 + vertex 134.52753457015433 -104.48202726980836 -49.600000000000044 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 134.52753457015433 -104.48202726980836 -49.600000000000044 + vertex 109.72753457015432 -106.48202726980834 -49.600000000000044 + vertex 134.52753457015433 -106.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal -0.6087614290087187 -7.771561172376097e-16 -0.7933533402912368 + outer loop + vertex 108.72753457015433 -104.48202726980834 -55.33205080756894 + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + vertex 108.31332100778123 -104.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal -0.6087614290087187 -7.771561172376097e-16 -0.7933533402912368 + outer loop + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + vertex 108.72753457015433 -104.48202726980834 -55.33205080756894 + vertex 108.72753457015433 -106.48202726980834 -55.33205080756894 + endloop +endfacet +facet normal 0.9914448613738096 8.826273045769993e-15 -0.13052619222005787 + outer loop + vertex 136.45938622273246 -104.48202726980834 -54.117638090205105 + vertex 136.52753457015433 -106.48202726980834 -53.60000000000006 + vertex 136.45938622273246 -106.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal 0.9914448613738096 8.826273045769993e-15 -0.13052619222005787 + outer loop + vertex 136.52753457015433 -106.48202726980834 -53.60000000000006 + vertex 136.45938622273246 -104.48202726980834 -54.117638090205105 + vertex 136.52753457015433 -104.48202726980836 -53.60000000000006 + endloop +endfacet +facet normal -0.13052619222005155 -2.0122792321330977e-16 -0.9914448613738105 + outer loop + vertex 109.72753457015432 -104.48202726980834 -55.600000000000065 + vertex 109.20989647994928 -106.48202726980834 -55.531851652578204 + vertex 109.20989647994928 -104.48202726980836 -55.531851652578204 + endloop +endfacet +facet normal -0.13052619222005155 -2.0122792321330977e-16 -0.9914448613738105 + outer loop + vertex 109.20989647994928 -106.48202726980834 -55.531851652578204 + vertex 109.72753457015432 -104.48202726980834 -55.600000000000065 + vertex 109.72753457015432 -106.48202726980834 -55.600000000000065 + endloop +endfacet +facet normal -1.0 -1.443289932012703e-15 5.933957380480203e-32 + outer loop + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + vertex 107.72753457015433 -106.48202726980834 -53.60000000000006 + vertex 107.72753457015433 -106.48202726980834 -51.60000000000005 + endloop +endfacet +facet normal -1.0 -1.443289932012703e-15 5.933957380480203e-32 + outer loop + vertex 107.72753457015433 -106.48202726980834 -53.60000000000006 + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + vertex 107.72753457015433 -104.48202726980834 -53.60000000000006 + endloop +endfacet +facet normal -0.7933533402912323 2.997602166487922e-15 0.6087614290087243 + outer loop + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + vertex 107.99548376258547 -104.48202726980834 -50.600000000000044 + vertex 107.99548376258544 -106.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal -0.7933533402912323 2.997602166487922e-15 0.6087614290087243 + outer loop + vertex 107.99548376258547 -104.48202726980834 -50.600000000000044 + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + vertex 108.31332100778123 -104.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal 0.793353340291221 -7.771561172376097e-16 -0.6087614290087392 + outer loop + vertex 135.94174813252744 -104.48202726980834 -55.01421356237316 + vertex 136.25958537772323 -106.48202726980834 -54.60000000000006 + vertex 135.94174813252744 -106.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal 0.793353340291221 -7.771561172376097e-16 -0.6087614290087392 + outer loop + vertex 136.25958537772323 -106.48202726980834 -54.60000000000006 + vertex 135.94174813252744 -104.48202726980834 -55.01421356237316 + vertex 136.25958537772323 -104.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal -0.6087614290087113 -7.216449660063515e-16 0.7933533402912423 + outer loop + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + vertex 108.72753457015433 -104.48202726980834 -49.867949192431176 + vertex 108.31332100778123 -104.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal -0.6087614290087113 -7.216449660063515e-16 0.7933533402912423 + outer loop + vertex 108.72753457015433 -104.48202726980834 -49.867949192431176 + vertex 108.31332100778123 -106.48202726980834 -50.18578643762695 + vertex 108.72753457015433 -106.48202726980834 -49.867949192431176 + endloop +endfacet +facet normal -0.38268343236509555 -4.996003610813205e-16 -0.9238795325112844 + outer loop + vertex 109.20989647994928 -104.48202726980836 -55.531851652578204 + vertex 108.72753457015433 -106.48202726980834 -55.33205080756894 + vertex 108.72753457015433 -104.48202726980834 -55.33205080756894 + endloop +endfacet +facet normal -0.38268343236509555 -4.996003610813205e-16 -0.9238795325112844 + outer loop + vertex 108.72753457015433 -106.48202726980834 -55.33205080756894 + vertex 109.20989647994928 -104.48202726980836 -55.531851652578204 + vertex 109.20989647994928 -106.48202726980834 -55.531851652578204 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 134.52753457015433 -104.48202726980836 -55.600000000000065 + vertex 109.72753457015432 -106.48202726980834 -55.600000000000065 + vertex 109.72753457015432 -104.48202726980834 -55.600000000000065 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 109.72753457015432 -106.48202726980834 -55.600000000000065 + vertex 134.52753457015433 -104.48202726980836 -55.600000000000065 + vertex 134.52753457015433 -106.48202726980834 -55.600000000000065 + endloop +endfacet +facet normal -0.9238795325112925 4.7184478546569145e-15 0.38268343236507574 + outer loop + vertex 107.99548376258544 -106.48202726980834 -50.600000000000044 + vertex 107.7956829175762 -104.48202726980834 -51.082361909795004 + vertex 107.79568291757619 -106.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal -0.9238795325112925 4.7184478546569145e-15 0.38268343236507574 + outer loop + vertex 107.7956829175762 -104.48202726980834 -51.082361909795004 + vertex 107.99548376258544 -106.48202726980834 -50.600000000000044 + vertex 107.99548376258547 -104.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal -0.99144486137381 1.8526391033970518e-32 0.13052619222005538 + outer loop + vertex 107.79568291757619 -106.48202726980834 -51.082361909795004 + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + vertex 107.72753457015433 -106.48202726980834 -51.60000000000005 + endloop +endfacet +facet normal -0.99144486137381 1.8526391033970518e-32 0.13052619222005538 + outer loop + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + vertex 107.79568291757619 -106.48202726980834 -51.082361909795004 + vertex 107.7956829175762 -104.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal -0.7933533402912363 2.8310687127941484e-15 -0.6087614290087192 + outer loop + vertex 107.99548376258547 -104.48202726980834 -54.60000000000006 + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + vertex 107.99548376258544 -106.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal -0.7933533402912363 2.8310687127941484e-15 -0.6087614290087192 + outer loop + vertex 108.31332100778123 -106.48202726980834 -55.01421356237316 + vertex 107.99548376258547 -104.48202726980834 -54.60000000000006 + vertex 108.31332100778123 -104.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal -0.1305261922200514 -2.0122792321330948e-16 0.9914448613738105 + outer loop + vertex 109.20989647994928 -106.48202726980834 -49.668148347421905 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 109.20989647994928 -104.48202726980836 -49.668148347421905 + endloop +endfacet +facet normal -0.1305261922200514 -2.0122792321330948e-16 0.9914448613738105 + outer loop + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 109.20989647994928 -106.48202726980834 -49.668148347421905 + vertex 109.72753457015432 -106.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal -0.99144486137381 -1.1102230246251563e-16 -0.13052619222005393 + outer loop + vertex 107.72753457015433 -104.48202726980834 -53.60000000000006 + vertex 107.79568291757619 -106.48202726980834 -54.117638090205105 + vertex 107.72753457015433 -106.48202726980834 -53.60000000000006 + endloop +endfacet +facet normal -0.99144486137381 -1.1102230246251563e-16 -0.13052619222005393 + outer loop + vertex 107.79568291757619 -106.48202726980834 -54.117638090205105 + vertex 107.72753457015433 -104.48202726980834 -53.60000000000006 + vertex 107.7956829175762 -104.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal 0.38268343236509017 1.2767564783189302e-15 0.9238795325112867 + outer loop + vertex 135.04517266035938 -106.48202726980834 -49.668148347421905 + vertex 135.52753457015436 -104.48202726980831 -49.867949192431176 + vertex 135.04517266035938 -104.48202726980834 -49.668148347421905 + endloop +endfacet +facet normal 0.38268343236509017 1.2767564783189302e-15 0.9238795325112867 + outer loop + vertex 135.52753457015436 -104.48202726980831 -49.867949192431176 + vertex 135.04517266035938 -106.48202726980834 -49.668148347421905 + vertex 135.52753457015436 -106.48202726980834 -49.867949192431176 + endloop +endfacet +facet normal -0.9238795325112904 4.8294701571194286e-15 -0.38268343236508084 + outer loop + vertex 107.7956829175762 -104.48202726980834 -54.117638090205105 + vertex 107.99548376258544 -106.48202726980834 -54.60000000000006 + vertex 107.79568291757619 -106.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal -0.9238795325112904 4.8294701571194286e-15 -0.38268343236508084 + outer loop + vertex 107.99548376258544 -106.48202726980834 -54.60000000000006 + vertex 107.7956829175762 -104.48202726980834 -54.117638090205105 + vertex 107.99548376258547 -104.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal 0.6087614290087294 -6.106226635438361e-16 -0.7933533402912284 + outer loop + vertex 135.94174813252744 -104.48202726980834 -55.01421356237316 + vertex 135.52753457015433 -106.48202726980831 -55.33205080756894 + vertex 135.52753457015436 -104.48202726980834 -55.33205080756894 + endloop +endfacet +facet normal 0.6087614290087294 -6.106226635438361e-16 -0.7933533402912284 + outer loop + vertex 135.52753457015433 -106.48202726980831 -55.33205080756894 + vertex 135.94174813252744 -104.48202726980834 -55.01421356237316 + vertex 135.94174813252744 -106.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal -0.3826834323651044 -4.996003610813202e-16 0.9238795325112806 + outer loop + vertex 108.72753457015433 -106.48202726980834 -49.867949192431176 + vertex 109.20989647994928 -104.48202726980836 -49.668148347421905 + vertex 108.72753457015433 -104.48202726980834 -49.867949192431176 + endloop +endfacet +facet normal -0.3826834323651044 -4.996003610813202e-16 0.9238795325112806 + outer loop + vertex 109.20989647994928 -104.48202726980836 -49.668148347421905 + vertex 108.72753457015433 -106.48202726980834 -49.867949192431176 + vertex 109.20989647994928 -106.48202726980834 -49.668148347421905 + endloop +endfacet +facet normal 0.38268343236509444 -4.1633363423443385e-16 -0.9238795325112849 + outer loop + vertex 135.52753457015436 -104.48202726980834 -55.33205080756894 + vertex 135.04517266035938 -106.48202726980834 -55.531851652578204 + vertex 135.04517266035938 -104.48202726980834 -55.531851652578204 + endloop +endfacet +facet normal 0.38268343236509444 -4.1633363423443385e-16 -0.9238795325112849 + outer loop + vertex 135.04517266035938 -106.48202726980834 -55.531851652578204 + vertex 135.52753457015436 -104.48202726980834 -55.33205080756894 + vertex 135.52753457015433 -106.48202726980831 -55.33205080756894 + endloop +endfacet +facet normal 0.4999999999999991 -0.8660254037844393 -2.823841496478738e-16 + outer loop + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 140.17032256947556 -33.913448412976486 -25.800000000000065 + vertex 136.70622095433782 -35.91344841297645 -25.800000000000065 + endloop +endfacet +facet normal 0.4999999999999991 -0.8660254037844393 -2.823841496478738e-16 + outer loop + vertex 140.17032256947556 -33.913448412976486 -25.800000000000065 + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 140.1703225694756 -33.913448412976464 -39.80000000000006 + endloop +endfacet +facet normal 0.4957224306869044 -0.8586164364012618 -0.1305261922200486 + outer loop + vertex 136.70622095433782 -35.91344841297645 -25.800000000000065 + vertex 140.22143383004195 -34.00197571311637 -25.0235428646925 + vertex 136.75733221490424 -36.00197571311634 -25.0235428646925 + endloop +endfacet +facet normal 0.4957224306869044 -0.8586164364012618 -0.1305261922200486 + outer loop + vertex 140.22143383004195 -34.00197571311637 -25.0235428646925 + vertex 136.70622095433782 -35.91344841297645 -25.800000000000065 + vertex 140.17032256947556 -33.913448412976486 -25.800000000000065 + endloop +endfacet +facet normal 0.4619397662556412 -0.8001031451912637 -0.38268343236509644 + outer loop + vertex 136.75733221490424 -36.00197571311634 -25.0235428646925 + vertex 140.3712844637989 -34.2615246243298 -24.300000000000068 + vertex 136.90718284866117 -36.261524624329766 -24.300000000000068 + endloop +endfacet +facet normal 0.4619397662556412 -0.8001031451912637 -0.38268343236509644 + outer loop + vertex 140.3712844637989 -34.2615246243298 -24.300000000000068 + vertex 136.75733221490424 -36.00197571311634 -25.0235428646925 + vertex 140.22143383004195 -34.00197571311637 -25.0235428646925 + endloop +endfacet +facet normal 0.3966766701456187 -0.6870641468694537 -0.6087614290087159 + outer loop + vertex 136.90718284866117 -36.261524624329766 -24.300000000000068 + vertex 140.60966239769573 -34.67440731724242 -23.678679656440423 + vertex 137.14556078255802 -36.674407317242384 -23.678679656440423 + endloop +endfacet +facet normal 0.3966766701456187 -0.6870641468694537 -0.6087614290087159 + outer loop + vertex 140.60966239769573 -34.67440731724242 -23.678679656440423 + vertex 136.90718284866117 -36.261524624329766 -24.300000000000068 + vertex 140.3712844637989 -34.2615246243298 -24.300000000000068 + endloop +endfacet +facet normal 0.30438071450436033 -0.5272028623656704 -0.7933533402912344 + outer loop + vertex 140.60966239769573 -34.67440731724242 -23.678679656440423 + vertex 137.45622095433782 -37.2124865186531 -23.20192378864675 + vertex 137.14556078255802 -36.674407317242384 -23.678679656440423 + endloop +endfacet +facet normal 0.30438071450436033 -0.5272028623656704 -0.7933533402912344 + outer loop + vertex 137.45622095433782 -37.2124865186531 -23.20192378864675 + vertex 140.60966239769573 -34.67440731724242 -23.678679656440423 + vertex 140.92032256947556 -35.21248651865314 -23.20192378864675 + endloop +endfacet +facet normal 0.19134171618254409 -0.3314135740355912 -0.9238795325112871 + outer loop + vertex 140.92032256947556 -35.21248651865314 -23.20192378864675 + vertex 137.81799238668407 -37.83909302020372 -22.90222252113286 + vertex 137.45622095433782 -37.2124865186531 -23.20192378864675 + endloop +endfacet +facet normal 0.19134171618254409 -0.3314135740355912 -0.9238795325112871 + outer loop + vertex 137.81799238668407 -37.83909302020372 -22.90222252113286 + vertex 140.92032256947556 -35.21248651865314 -23.20192378864675 + vertex 141.2820940018218 -35.83909302020374 -22.90222252113286 + endloop +endfacet +facet normal 0.06526309611002502 -0.11303899832181424 -0.9914448613738106 + outer loop + vertex 141.2820940018218 -35.83909302020374 -22.90222252113286 + vertex 138.20622095433785 -38.51152462432976 -22.800000000000065 + vertex 137.81799238668407 -37.83909302020372 -22.90222252113286 + endloop +endfacet +facet normal 0.06526309611002502 -0.11303899832181424 -0.9914448613738106 + outer loop + vertex 138.20622095433785 -38.51152462432976 -22.800000000000065 + vertex 141.2820940018218 -35.83909302020374 -22.90222252113286 + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + endloop +endfacet +facet normal -0.06526309611002565 0.11303899832181558 -0.9914448613738105 + outer loop + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 138.59444952199163 -39.183956228455806 -22.90222252113286 + vertex 138.20622095433785 -38.51152462432976 -22.800000000000065 + endloop +endfacet +facet normal -0.06526309611002565 0.11303899832181558 -0.9914448613738105 + outer loop + vertex 138.59444952199163 -39.183956228455806 -22.90222252113286 + vertex 141.6703225694756 -36.5115246243298 -22.800000000000065 + vertex 142.05855113712937 -37.18395622845585 -22.90222252113286 + endloop +endfacet +facet normal -0.1913417161825425 0.3314135740355887 -0.9238795325112884 + outer loop + vertex 142.05855113712937 -37.18395622845585 -22.90222252113286 + vertex 138.95622095433782 -39.81056273000644 -23.20192378864675 + vertex 138.59444952199163 -39.183956228455806 -22.90222252113286 + endloop +endfacet +facet normal -0.1913417161825425 0.3314135740355887 -0.9238795325112884 + outer loop + vertex 138.95622095433782 -39.81056273000644 -23.20192378864675 + vertex 142.05855113712937 -37.18395622845585 -22.90222252113286 + vertex 142.42032256947556 -37.810562730006474 -23.20192378864675 + endloop +endfacet +facet normal -0.30438071450436105 0.5272028623656717 -0.7933533402912333 + outer loop + vertex 142.42032256947556 -37.810562730006474 -23.20192378864675 + vertex 139.26688112611768 -40.34864193141716 -23.678679656440423 + vertex 138.95622095433782 -39.81056273000644 -23.20192378864675 + endloop +endfacet +facet normal -0.30438071450436105 0.5272028623656717 -0.7933533402912333 + outer loop + vertex 139.26688112611768 -40.34864193141716 -23.678679656440423 + vertex 142.42032256947556 -37.810562730006474 -23.20192378864675 + vertex 142.7309827412554 -38.348641931417184 -23.678679656440423 + endloop +endfacet +facet normal -0.396676670145618 0.6870641468694528 -0.6087614290087173 + outer loop + vertex 139.26688112611768 -40.34864193141716 -23.678679656440423 + vertex 142.96936067515222 -38.761524624329795 -24.30000000000006 + vertex 139.5052590600145 -40.76152462432976 -24.30000000000006 + endloop +endfacet +facet normal -0.396676670145618 0.6870641468694528 -0.6087614290087173 + outer loop + vertex 142.96936067515222 -38.761524624329795 -24.30000000000006 + vertex 139.26688112611768 -40.34864193141716 -23.678679656440423 + vertex 142.7309827412554 -38.348641931417184 -23.678679656440423 + endloop +endfacet +facet normal -0.4619397662556417 0.8001031451912646 -0.38268343236509383 + outer loop + vertex 139.5052590600145 -40.76152462432976 -24.30000000000006 + vertex 143.11921130890917 -39.02107353554322 -25.0235428646925 + vertex 139.65510969377144 -41.0210735355432 -25.0235428646925 + endloop +endfacet +facet normal -0.4619397662556417 0.8001031451912646 -0.38268343236509383 + outer loop + vertex 143.11921130890917 -39.02107353554322 -25.0235428646925 + vertex 139.5052590600145 -40.76152462432976 -24.30000000000006 + vertex 142.96936067515222 -38.761524624329795 -24.30000000000006 + endloop +endfacet +facet normal -0.49572243068690414 0.8586164364012612 -0.13052619222005474 + outer loop + vertex 139.65510969377144 -41.0210735355432 -25.0235428646925 + vertex 143.1703225694756 -39.109600835683125 -25.800000000000065 + vertex 139.70622095433788 -41.109600835683096 -25.800000000000065 + endloop +endfacet +facet normal -0.49572243068690414 0.8586164364012612 -0.13052619222005474 + outer loop + vertex 143.1703225694756 -39.109600835683125 -25.800000000000065 + vertex 139.65510969377144 -41.0210735355432 -25.0235428646925 + vertex 143.11921130890917 -39.02107353554322 -25.0235428646925 + endloop +endfacet +facet normal -0.4999999999999991 0.8660254037844393 3.488803731010178e-16 + outer loop + vertex 143.1703225694756 -39.109600835683125 -25.800000000000065 + vertex 139.70622095433785 -41.10960083568308 -39.80000000000007 + vertex 139.70622095433788 -41.109600835683096 -25.800000000000065 + endloop +endfacet +facet normal -0.4999999999999991 0.8660254037844393 3.488803731010178e-16 + outer loop + vertex 139.70622095433785 -41.10960083568308 -39.80000000000007 + vertex 143.1703225694756 -39.109600835683125 -25.800000000000065 + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + endloop +endfacet +facet normal -0.49572243068690447 0.8586164364012617 0.13052619222004905 + outer loop + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + vertex 139.65510969377144 -41.0210735355432 -40.57645713530763 + vertex 139.70622095433785 -41.10960083568308 -39.80000000000007 + endloop +endfacet +facet normal -0.49572243068690447 0.8586164364012617 0.13052619222004905 + outer loop + vertex 139.65510969377144 -41.0210735355432 -40.57645713530763 + vertex 143.1703225694756 -39.109600835683125 -39.80000000000006 + vertex 143.11921130890917 -39.02107353554322 -40.57645713530763 + endloop +endfacet +facet normal -0.4619397662556417 0.8001031451912646 0.38268343236509383 + outer loop + vertex 143.11921130890917 -39.02107353554322 -40.57645713530763 + vertex 139.5052590600145 -40.76152462432976 -41.30000000000007 + vertex 139.65510969377144 -41.0210735355432 -40.57645713530763 + endloop +endfacet +facet normal -0.4619397662556417 0.8001031451912646 0.38268343236509383 + outer loop + vertex 139.5052590600145 -40.76152462432976 -41.30000000000007 + vertex 143.11921130890917 -39.02107353554322 -40.57645713530763 + vertex 142.96936067515222 -38.761524624329795 -41.30000000000007 + endloop +endfacet +facet normal -0.39667667014561814 0.6870641468694526 0.6087614290087177 + outer loop + vertex 142.96936067515222 -38.761524624329795 -41.30000000000007 + vertex 139.26688112611765 -40.348641931417156 -41.921320343559714 + vertex 139.5052590600145 -40.76152462432976 -41.30000000000007 + endloop +endfacet +facet normal -0.39667667014561814 0.6870641468694526 0.6087614290087177 + outer loop + vertex 139.26688112611765 -40.348641931417156 -41.921320343559714 + vertex 142.96936067515222 -38.761524624329795 -41.30000000000007 + vertex 142.7309827412554 -38.348641931417184 -41.921320343559714 + endloop +endfacet +facet normal -0.30438071450436 0.5272028623656697 0.7933533402912349 + outer loop + vertex 139.26688112611765 -40.348641931417156 -41.921320343559714 + vertex 142.42032256947556 -37.81056273000646 -42.39807621135338 + vertex 138.95622095433782 -39.81056273000644 -42.398076211353384 + endloop +endfacet +facet normal -0.30438071450436 0.5272028623656697 0.7933533402912349 + outer loop + vertex 142.42032256947556 -37.81056273000646 -42.39807621135338 + vertex 139.26688112611765 -40.348641931417156 -41.921320343559714 + vertex 142.7309827412554 -38.348641931417184 -41.921320343559714 + endloop +endfacet +facet normal -0.1913417161825457 0.3314135740355939 0.9238795325112859 + outer loop + vertex 138.95622095433782 -39.81056273000644 -42.398076211353384 + vertex 142.05855113712934 -37.183956228455855 -42.697777478867266 + vertex 138.5944495219916 -39.18395622845583 -42.69777747886727 + endloop +endfacet +facet normal -0.1913417161825457 0.3314135740355939 0.9238795325112859 + outer loop + vertex 142.05855113712934 -37.183956228455855 -42.697777478867266 + vertex 138.95622095433782 -39.81056273000644 -42.398076211353384 + vertex 142.42032256947556 -37.81056273000646 -42.39807621135338 + endloop +endfacet +facet normal -0.06526309611002462 0.11303899832181355 0.9914448613738108 + outer loop + vertex 138.5944495219916 -39.18395622845583 -42.69777747886727 + vertex 141.67032256947556 -36.5115246243298 -42.80000000000007 + vertex 138.20622095433785 -38.51152462432976 -42.80000000000007 + endloop +endfacet +facet normal -0.06526309611002462 0.11303899832181355 0.9914448613738108 + outer loop + vertex 141.67032256947556 -36.5115246243298 -42.80000000000007 + vertex 138.5944495219916 -39.18395622845583 -42.69777747886727 + vertex 142.05855113712934 -37.183956228455855 -42.697777478867266 + endloop +endfacet +facet normal 0.06526309611002604 -0.11303899832181624 0.9914448613738103 + outer loop + vertex 138.20622095433785 -38.51152462432976 -42.80000000000007 + vertex 141.28209400182178 -35.83909302020376 -42.697777478867266 + vertex 137.81799238668404 -37.83909302020373 -42.69777747886727 + endloop +endfacet +facet normal 0.06526309611002604 -0.11303899832181624 0.9914448613738103 + outer loop + vertex 141.28209400182178 -35.83909302020376 -42.697777478867266 + vertex 138.20622095433785 -38.51152462432976 -42.80000000000007 + vertex 141.67032256947556 -36.5115246243298 -42.80000000000007 + endloop +endfacet +facet normal 0.1913417161825425 -0.3314135740355887 0.9238795325112884 + outer loop + vertex 137.81799238668404 -37.83909302020373 -42.69777747886727 + vertex 140.92032256947556 -35.21248651865313 -42.398076211353384 + vertex 137.45622095433782 -37.2124865186531 -42.398076211353384 + endloop +endfacet +facet normal 0.1913417161825425 -0.3314135740355887 0.9238795325112884 + outer loop + vertex 140.92032256947556 -35.21248651865313 -42.398076211353384 + vertex 137.81799238668404 -37.83909302020373 -42.69777747886727 + vertex 141.28209400182178 -35.83909302020376 -42.697777478867266 + endloop +endfacet +facet normal 0.30438071450435833 -0.527202862365667 0.7933533402912374 + outer loop + vertex 137.45622095433782 -37.2124865186531 -42.398076211353384 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 137.14556078255802 -36.674407317242355 -41.921320343559714 + endloop +endfacet +facet normal 0.30438071450435833 -0.527202862365667 0.7933533402912374 + outer loop + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 137.45622095433782 -37.2124865186531 -42.398076211353384 + vertex 140.92032256947556 -35.21248651865313 -42.398076211353384 + endloop +endfacet +facet normal 0.3966766701456188 -0.6870641468694539 0.6087614290087157 + outer loop + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 136.90718284866117 -36.261524624329745 -41.30000000000007 + vertex 137.14556078255802 -36.674407317242355 -41.921320343559714 + endloop +endfacet +facet normal 0.3966766701456188 -0.6870641468694539 0.6087614290087157 + outer loop + vertex 136.90718284866117 -36.261524624329745 -41.30000000000007 + vertex 140.60966239769576 -34.6744073172424 -41.921320343559714 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + endloop +endfacet +facet normal 0.4619397662556419 -0.800103145191265 0.38268343236509245 + outer loop + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 136.75733221490424 -36.00197571311632 -40.57645713530763 + vertex 136.90718284866117 -36.261524624329745 -41.30000000000007 + endloop +endfacet +facet normal 0.4619397662556419 -0.800103145191265 0.38268343236509245 + outer loop + vertex 136.75733221490424 -36.00197571311632 -40.57645713530763 + vertex 140.3712844637989 -34.26152462432978 -41.30000000000007 + vertex 140.22143383004197 -34.00197571311636 -40.57645713530763 + endloop +endfacet +facet normal 0.4957224306869044 -0.8586164364012618 0.1305261922200486 + outer loop + vertex 140.22143383004197 -34.00197571311636 -40.57645713530763 + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 136.75733221490424 -36.00197571311632 -40.57645713530763 + endloop +endfacet +facet normal 0.4957224306869044 -0.8586164364012618 0.1305261922200486 + outer loop + vertex 136.70622095433785 -35.913448412976436 -39.80000000000007 + vertex 140.22143383004197 -34.00197571311636 -40.57645713530763 + vertex 140.1703225694756 -33.913448412976464 -39.80000000000006 + endloop +endfacet +facet normal 0.9914448613738109 3.3306690738754686e-16 -0.13052619222004863 + outer loop + vertex 99.42753457015435 -100.48202726980834 -25.800000000000054 + vertex 99.52975709128714 -104.4820272698083 -25.0235428646925 + vertex 99.42753457015435 -104.4820272698083 -25.800000000000065 + endloop +endfacet +facet normal 0.9914448613738109 3.3306690738754686e-16 -0.13052619222004863 + outer loop + vertex 99.52975709128714 -104.4820272698083 -25.0235428646925 + vertex 99.42753457015435 -100.48202726980834 -25.800000000000054 + vertex 99.52975709128714 -100.48202726980834 -25.02354286469249 + endloop +endfacet +facet normal 1.0 3.885780586188048e-16 4.1537659655416226e-16 + outer loop + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + vertex 99.42753457015435 -104.4820272698083 -25.800000000000065 + vertex 99.42753457015435 -104.48202726980831 -39.80000000000006 + endloop +endfacet +facet normal 1.0 3.885780586188048e-16 4.1537659655416226e-16 + outer loop + vertex 99.42753457015435 -104.4820272698083 -25.800000000000065 + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + vertex 99.42753457015435 -100.48202726980834 -25.800000000000054 + endloop +endfacet +facet normal 0.9914448613738109 4.440892098500625e-16 0.13052619222004863 + outer loop + vertex 99.52975709128715 -104.48202726980831 -40.57645713530763 + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + vertex 99.42753457015435 -104.48202726980831 -39.80000000000006 + endloop +endfacet +facet normal 0.9914448613738109 4.440892098500625e-16 0.13052619222004863 + outer loop + vertex 99.42753457015435 -100.48202726980837 -39.800000000000054 + vertex 99.52975709128715 -104.48202726980831 -40.57645713530763 + vertex 99.52975709128715 -100.48202726980837 -40.57645713530762 + endloop +endfacet +facet normal 0.9238795325112846 4.996003610813204e-16 0.3826834323650951 + outer loop + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 99.52975709128715 -100.48202726980837 -40.57645713530762 + vertex 99.52975709128715 -104.48202726980831 -40.57645713530763 + endloop +endfacet +facet normal 0.9238795325112846 4.996003610813204e-16 0.3826834323650951 + outer loop + vertex 99.52975709128715 -100.48202726980837 -40.57645713530762 + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 99.82945835880103 -100.48202726980837 -41.30000000000006 + endloop +endfacet +facet normal 0.793353340291239 4.996003610813205e-16 0.6087614290087157 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 99.82945835880103 -100.48202726980837 -41.30000000000006 + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + endloop +endfacet +facet normal 0.793353340291239 4.996003610813205e-16 0.6087614290087157 + outer loop + vertex 99.82945835880103 -100.48202726980837 -41.30000000000006 + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 100.3062142265947 -100.48202726980837 -41.9213203435597 + endloop +endfacet +facet normal 0.6087614290087179 6.106226635438362e-16 0.7933533402912374 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 100.92753457015435 -100.48202726980836 -42.39807621135338 + vertex 100.3062142265947 -100.48202726980837 -41.9213203435597 + endloop +endfacet +facet normal 0.6087614290087179 6.106226635438362e-16 0.7933533402912374 + outer loop + vertex 100.92753457015435 -100.48202726980836 -42.39807621135338 + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 100.92753457015435 -104.48202726980831 -42.398076211353384 + endloop +endfacet +facet normal 0.38268343236508295 5.828670879282073e-16 0.9238795325112897 + outer loop + vertex 100.92753457015435 -104.48202726980831 -42.398076211353384 + vertex 101.65107743484678 -100.48202726980834 -42.69777747886726 + vertex 100.92753457015435 -100.48202726980836 -42.39807621135338 + endloop +endfacet +facet normal 0.38268343236508295 5.828670879282073e-16 0.9238795325112897 + outer loop + vertex 101.65107743484678 -100.48202726980834 -42.69777747886726 + vertex 100.92753457015435 -104.48202726980831 -42.398076211353384 + vertex 101.6510774348468 -104.4820272698083 -42.697777478867266 + endloop +endfacet +facet normal 0.13052619222005243 4.996003610813205e-16 0.9914448613738103 + outer loop + vertex 101.6510774348468 -104.4820272698083 -42.697777478867266 + vertex 102.42753457015436 -100.48202726980834 -42.800000000000054 + vertex 101.65107743484678 -100.48202726980834 -42.69777747886726 + endloop +endfacet +facet normal 0.13052619222005243 4.996003610813205e-16 0.9914448613738103 + outer loop + vertex 102.42753457015436 -100.48202726980834 -42.800000000000054 + vertex 101.6510774348468 -104.4820272698083 -42.697777478867266 + vertex 102.42753457015436 -104.4820272698083 -42.80000000000006 + endloop +endfacet +facet normal -0.13052619222004935 4.093947403305266e-16 0.9914448613738107 + outer loop + vertex 102.42753457015436 -104.4820272698083 -42.80000000000006 + vertex 103.20399170546192 -100.48202726980836 -42.69777747886726 + vertex 102.42753457015436 -100.48202726980834 -42.800000000000054 + endloop +endfacet +facet normal -0.13052619222004935 4.093947403305266e-16 0.9914448613738107 + outer loop + vertex 103.20399170546192 -100.48202726980836 -42.69777747886726 + vertex 102.42753457015436 -104.4820272698083 -42.80000000000006 + vertex 103.20399170546195 -104.4820272698083 -42.697777478867266 + endloop +endfacet +facet normal -0.38268343236509195 3.053113317719182e-16 0.923879532511286 + outer loop + vertex 103.20399170546195 -104.4820272698083 -42.697777478867266 + vertex 103.92753457015436 -100.48202726980837 -42.39807621135337 + vertex 103.20399170546192 -100.48202726980836 -42.69777747886726 + endloop +endfacet +facet normal -0.38268343236509195 3.053113317719182e-16 0.923879532511286 + outer loop + vertex 103.92753457015436 -100.48202726980837 -42.39807621135337 + vertex 103.20399170546195 -104.4820272698083 -42.697777478867266 + vertex 103.92753457015438 -104.4820272698083 -42.39807621135338 + endloop +endfacet +facet normal -0.608761429008721 1.6653345369377356e-16 0.7933533402912348 + outer loop + vertex 103.92753457015438 -104.4820272698083 -42.39807621135338 + vertex 104.54885491371398 -100.48202726980837 -41.9213203435597 + vertex 103.92753457015436 -100.48202726980837 -42.39807621135337 + endloop +endfacet +facet normal -0.608761429008721 1.6653345369377356e-16 0.7933533402912348 + outer loop + vertex 104.54885491371398 -100.48202726980837 -41.9213203435597 + vertex 103.92753457015438 -104.4820272698083 -42.39807621135338 + vertex 104.54885491371401 -104.48202726980831 -41.92132034355971 + endloop +endfacet +facet normal -0.7933533402912389 -5.551115123125773e-17 0.6087614290087157 + outer loop + vertex 105.02561078150768 -104.48202726980831 -41.30000000000006 + vertex 104.54885491371398 -100.48202726980837 -41.9213203435597 + vertex 104.54885491371401 -104.48202726980831 -41.92132034355971 + endloop +endfacet +facet normal -0.7933533402912389 -5.551115123125773e-17 0.6087614290087157 + outer loop + vertex 104.54885491371398 -100.48202726980837 -41.9213203435597 + vertex 105.02561078150768 -104.48202726980831 -41.30000000000006 + vertex 105.02561078150767 -100.48202726980838 -41.300000000000054 + endloop +endfacet +facet normal -0.9238795325112851 -1.1102230246251558e-16 0.38268343236509383 + outer loop + vertex 105.32531204902156 -104.48202726980831 -40.57645713530762 + vertex 105.02561078150767 -100.48202726980838 -41.300000000000054 + vertex 105.02561078150768 -104.48202726980831 -41.30000000000006 + endloop +endfacet +facet normal -0.9238795325112851 -1.1102230246251558e-16 0.38268343236509383 + outer loop + vertex 105.02561078150767 -100.48202726980838 -41.300000000000054 + vertex 105.32531204902156 -104.48202726980831 -40.57645713530762 + vertex 105.32531204902155 -100.48202726980838 -40.576457135307614 + endloop +endfacet +facet normal -0.9914448613738107 -2.7755575615628904e-16 0.13052619222004905 + outer loop + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 105.32531204902155 -100.48202726980838 -40.576457135307614 + vertex 105.32531204902156 -104.48202726980831 -40.57645713530762 + endloop +endfacet +facet normal -0.9914448613738107 -2.7755575615628904e-16 0.13052619222004905 + outer loop + vertex 105.32531204902155 -100.48202726980838 -40.576457135307614 + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 105.42753457015434 -100.48202726980838 -39.800000000000054 + endloop +endfacet +facet normal -1.0 -3.3306690738754686e-16 -3.488803731010178e-16 + outer loop + vertex 105.42753457015434 -100.48202726980838 -25.800000000000047 + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 105.42753457015435 -104.48202726980831 -25.80000000000006 + endloop +endfacet +facet normal -1.0 -3.3306690738754686e-16 -3.488803731010178e-16 + outer loop + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 105.42753457015434 -100.48202726980838 -25.800000000000047 + vertex 105.42753457015434 -100.48202726980838 -39.800000000000054 + endloop +endfacet +facet normal -0.9914448613738099 -3.885780586188047e-16 -0.13052619222005565 + outer loop + vertex 105.32531204902155 -100.48202726980838 -25.02354286469249 + vertex 105.42753457015435 -104.48202726980831 -25.80000000000006 + vertex 105.32531204902156 -104.4820272698083 -25.0235428646925 + endloop +endfacet +facet normal -0.9914448613738099 -3.885780586188047e-16 -0.13052619222005565 + outer loop + vertex 105.42753457015435 -104.48202726980831 -25.80000000000006 + vertex 105.32531204902155 -100.48202726980838 -25.02354286469249 + vertex 105.42753457015434 -100.48202726980838 -25.800000000000047 + endloop +endfacet +facet normal -0.9238795325112852 -5.551115123125783e-16 -0.38268343236509383 + outer loop + vertex 105.02561078150764 -100.48202726980837 -24.30000000000005 + vertex 105.32531204902156 -104.4820272698083 -25.0235428646925 + vertex 105.02561078150767 -104.48202726980831 -24.30000000000006 + endloop +endfacet +facet normal -0.9238795325112852 -5.551115123125783e-16 -0.38268343236509383 + outer loop + vertex 105.32531204902156 -104.4820272698083 -25.0235428646925 + vertex 105.02561078150764 -100.48202726980837 -24.30000000000005 + vertex 105.32531204902155 -100.48202726980838 -25.02354286469249 + endloop +endfacet +facet normal -0.7933533402912376 -4.440892098500626e-16 -0.6087614290087173 + outer loop + vertex 104.54885491371398 -100.48202726980837 -23.678679656440412 + vertex 105.02561078150767 -104.48202726980831 -24.30000000000006 + vertex 104.54885491371401 -104.4820272698083 -23.678679656440423 + endloop +endfacet +facet normal -0.7933533402912376 -4.440892098500626e-16 -0.6087614290087173 + outer loop + vertex 105.02561078150767 -104.48202726980831 -24.30000000000006 + vertex 104.54885491371398 -100.48202726980837 -23.678679656440412 + vertex 105.02561078150764 -100.48202726980837 -24.30000000000005 + endloop +endfacet +facet normal -0.6087614290087233 -6.66133814775094e-16 -0.7933533402912333 + outer loop + vertex 104.54885491371398 -100.48202726980837 -23.678679656440412 + vertex 103.92753457015436 -104.4820272698083 -23.20192378864675 + vertex 103.92753457015434 -100.48202726980836 -23.201923788646738 + endloop +endfacet +facet normal -0.6087614290087233 -6.66133814775094e-16 -0.7933533402912333 + outer loop + vertex 103.92753457015436 -104.4820272698083 -23.20192378864675 + vertex 104.54885491371398 -100.48202726980837 -23.678679656440412 + vertex 104.54885491371401 -104.4820272698083 -23.678679656440423 + endloop +endfacet +facet normal -0.382683432365091 -5.273559366969495e-16 -0.9238795325112863 + outer loop + vertex 103.92753457015434 -100.48202726980836 -23.201923788646738 + vertex 103.20399170546192 -104.4820272698083 -22.902222521132856 + vertex 103.2039917054619 -100.48202726980837 -22.902222521132845 + endloop +endfacet +facet normal -0.382683432365091 -5.273559366969495e-16 -0.9238795325112863 + outer loop + vertex 103.20399170546192 -104.4820272698083 -22.902222521132856 + vertex 103.92753457015434 -100.48202726980836 -23.201923788646738 + vertex 103.92753457015436 -104.4820272698083 -23.20192378864675 + endloop +endfacet +facet normal -0.13052619222004494 -4.926614671774133e-16 -0.9914448613738113 + outer loop + vertex 103.2039917054619 -100.48202726980837 -22.902222521132845 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 102.42753457015434 -100.48202726980834 -22.800000000000054 + endloop +endfacet +facet normal -0.13052619222004494 -4.926614671774133e-16 -0.9914448613738113 + outer loop + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 103.2039917054619 -100.48202726980837 -22.902222521132845 + vertex 103.20399170546192 -104.4820272698083 -22.902222521132856 + endloop +endfacet +facet normal 0.13052619222004308 -4.093947403305266e-16 -0.9914448613738115 + outer loop + vertex 102.42753457015434 -100.48202726980834 -22.800000000000054 + vertex 101.65107743484678 -104.48202726980831 -22.902222521132856 + vertex 101.65107743484678 -100.48202726980837 -22.902222521132845 + endloop +endfacet +facet normal 0.13052619222004308 -4.093947403305266e-16 -0.9914448613738115 + outer loop + vertex 101.65107743484678 -104.48202726980831 -22.902222521132856 + vertex 102.42753457015434 -100.48202726980834 -22.800000000000054 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + endloop +endfacet +facet normal 0.38268343236509494 -3.33066907387547e-16 -0.9238795325112845 + outer loop + vertex 101.65107743484678 -100.48202726980837 -22.902222521132845 + vertex 100.92753457015434 -104.48202726980831 -23.20192378864675 + vertex 100.92753457015434 -100.48202726980836 -23.201923788646738 + endloop +endfacet +facet normal 0.38268343236509494 -3.33066907387547e-16 -0.9238795325112845 + outer loop + vertex 100.92753457015434 -104.48202726980831 -23.20192378864675 + vertex 101.65107743484678 -100.48202726980837 -22.902222521132845 + vertex 101.65107743484678 -104.48202726980831 -22.902222521132856 + endloop +endfacet +facet normal 0.6087614290087218 -1.6653345369377356e-16 -0.7933533402912343 + outer loop + vertex 100.92753457015434 -100.48202726980836 -23.201923788646738 + vertex 100.3062142265947 -104.4820272698083 -23.678679656440423 + vertex 100.3062142265947 -100.48202726980834 -23.678679656440412 + endloop +endfacet +facet normal 0.6087614290087218 -1.6653345369377356e-16 -0.7933533402912343 + outer loop + vertex 100.3062142265947 -104.4820272698083 -23.678679656440423 + vertex 100.92753457015434 -100.48202726980836 -23.201923788646738 + vertex 100.92753457015434 -104.48202726980831 -23.20192378864675 + endloop +endfacet +facet normal 0.7933533402912387 -8.64052807209775e-32 -0.6087614290087159 + outer loop + vertex 99.82945835880103 -100.48202726980834 -24.300000000000058 + vertex 100.3062142265947 -104.4820272698083 -23.678679656440423 + vertex 99.82945835880103 -104.4820272698083 -24.300000000000068 + endloop +endfacet +facet normal 0.7933533402912387 -8.64052807209775e-32 -0.6087614290087159 + outer loop + vertex 100.3062142265947 -104.4820272698083 -23.678679656440423 + vertex 99.82945835880103 -100.48202726980834 -24.300000000000058 + vertex 100.3062142265947 -100.48202726980834 -23.678679656440412 + endloop +endfacet +facet normal 0.9238795325112841 5.551115123125776e-17 -0.38268343236509633 + outer loop + vertex 99.52975709128714 -100.48202726980834 -25.02354286469249 + vertex 99.82945835880103 -104.4820272698083 -24.300000000000068 + vertex 99.52975709128714 -104.4820272698083 -25.0235428646925 + endloop +endfacet +facet normal 0.9238795325112841 5.551115123125776e-17 -0.38268343236509633 + outer loop + vertex 99.82945835880103 -104.4820272698083 -24.300000000000068 + vertex 99.52975709128714 -100.48202726980834 -25.02354286469249 + vertex 99.82945835880103 -100.48202726980834 -24.300000000000058 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 135.04517266035938 -104.48202726980834 -55.531851652578204 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.04517266035938 -104.48202726980834 -55.531851652578204 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 135.52753457015436 -104.48202726980834 -55.33205080756894 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.52753457015436 -104.48202726980834 -55.33205080756894 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 135.94174813252744 -104.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.94174813252744 -104.48202726980834 -55.01421356237316 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 136.25958537772323 -104.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.25958537772323 -104.48202726980834 -54.60000000000006 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 136.45938622273246 -104.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.45938622273246 -104.48202726980834 -54.117638090205105 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 135.04517266035938 -104.48202726980834 -55.531851652578204 + vertex 134.52753457015433 -104.48202726980836 -55.600000000000065 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.45938622273246 -104.48202726980834 -54.117638090205105 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.52753457015433 -104.48202726980836 -53.60000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.52753457015433 -104.48202726980836 -53.60000000000006 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.52753457015433 -104.48202726980836 -51.60000000000005 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.52753457015433 -104.48202726980836 -51.60000000000005 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.45938622273246 -104.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.45938622273246 -104.48202726980834 -51.082361909795004 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.25958537772323 -104.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.25958537772323 -104.48202726980834 -50.600000000000044 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.94174813252744 -104.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.94174813252744 -104.48202726980834 -50.18578643762695 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.52753457015436 -104.48202726980831 -49.867949192431176 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.52753457015436 -104.48202726980831 -49.867949192431176 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.04517266035938 -104.48202726980834 -49.668148347421905 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.04517266035938 -104.48202726980834 -49.668148347421905 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 134.52753457015433 -104.48202726980836 -49.600000000000044 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 134.52753457015433 -104.48202726980836 -49.600000000000044 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 104.54885491371401 -104.48202726980831 -41.92132034355971 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 104.54885491371401 -104.48202726980831 -41.92132034355971 + vertex 103.92753457015438 -104.4820272698083 -42.39807621135338 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 103.92753457015438 -104.4820272698083 -42.39807621135338 + vertex 103.20399170546195 -104.4820272698083 -42.697777478867266 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 103.20399170546195 -104.4820272698083 -42.697777478867266 + vertex 102.42753457015436 -104.4820272698083 -42.80000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 104.54885491371401 -104.48202726980831 -41.92132034355971 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 105.02561078150768 -104.48202726980831 -41.30000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.02561078150768 -104.48202726980831 -41.30000000000006 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 105.32531204902156 -104.48202726980831 -40.57645713530762 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.32531204902156 -104.48202726980831 -40.57645713530762 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 135.52753457015436 -104.48202726980836 -15.732050807568937 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 135.52753457015436 -104.48202726980836 -15.732050807568937 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.42753457015438 -104.48202726980831 -39.80000000000006 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 105.42753457015435 -104.48202726980831 -25.80000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.42753457015435 -104.48202726980831 -25.80000000000006 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 105.32531204902156 -104.4820272698083 -25.0235428646925 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.32531204902156 -104.4820272698083 -25.0235428646925 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 105.02561078150767 -104.48202726980831 -24.30000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 105.02561078150767 -104.48202726980831 -24.30000000000006 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 104.54885491371401 -104.4820272698083 -23.678679656440423 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 104.54885491371401 -104.4820272698083 -23.678679656440423 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 103.92753457015436 -104.4820272698083 -23.20192378864675 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 103.92753457015436 -104.4820272698083 -23.20192378864675 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 103.20399170546192 -104.4820272698083 -22.902222521132856 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 103.20399170546192 -104.4820272698083 -22.902222521132856 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 135.04517266035938 -104.48202726980834 -15.931851652578198 + vertex 134.52753457015433 -104.48202726980836 -16.00000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.94174813252744 -104.48202726980836 -15.414213562373153 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.25958537772323 -104.48202726980836 -15.000000000000057 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.25958537772323 -104.48202726980836 -15.000000000000057 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.4593862227325 -104.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.4593862227325 -104.48202726980836 -14.517638090205098 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.52753457015433 -104.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.52753457015433 -104.48202726980836 -14.000000000000059 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.52753457015433 -104.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.52753457015433 -104.48202726980836 -12.000000000000046 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.4593862227325 -104.48202726980836 -11.482361909795012 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.4593862227325 -104.48202726980836 -11.482361909795012 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 136.25958537772323 -104.48202726980836 -11.000000000000048 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 136.25958537772323 -104.48202726980836 -11.000000000000048 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.94174813252744 -104.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.94174813252744 -104.48202726980836 -10.58578643762696 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.52753457015436 -104.48202726980834 -10.267949192431178 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.52753457015436 -104.48202726980834 -10.267949192431178 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 135.04517266035938 -104.48202726980834 -10.068148347421912 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 135.04517266035938 -104.48202726980834 -10.068148347421912 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 134.52753457015433 -104.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 134.52753457015433 -104.48202726980836 -10.00000000000005 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 109.72753457015432 -104.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 99.42753457015435 -104.48202726980831 -39.80000000000006 + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.42753457015435 -104.48202726980831 -39.80000000000006 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 99.52975709128715 -104.48202726980831 -40.57645713530763 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.52975709128715 -104.48202726980831 -40.57645713530763 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 107.99548376258547 -104.48202726980834 -54.60000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 107.99548376258547 -104.48202726980834 -54.60000000000006 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 108.31332100778123 -104.48202726980834 -55.01421356237316 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 108.31332100778123 -104.48202726980834 -55.01421356237316 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 108.72753457015433 -104.48202726980834 -55.33205080756894 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 108.72753457015433 -104.48202726980834 -55.33205080756894 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 109.20989647994928 -104.48202726980836 -55.531851652578204 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.20989647994928 -104.48202726980836 -55.531851652578204 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 109.72753457015432 -104.48202726980834 -55.600000000000065 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980834 -55.600000000000065 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 134.52753457015433 -104.48202726980836 -55.600000000000065 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 107.99548376258547 -104.48202726980834 -54.60000000000006 + vertex 107.7956829175762 -104.48202726980834 -54.117638090205105 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 107.7956829175762 -104.48202726980834 -54.117638090205105 + vertex 107.72753457015433 -104.48202726980834 -53.60000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 107.72753457015433 -104.48202726980834 -53.60000000000006 + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 99.82945835880103 -104.48202726980831 -41.30000000000007 + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 107.72753457015433 -104.48202726980834 -51.60000000000005 + vertex 107.7956829175762 -104.48202726980834 -51.082361909795004 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 107.7956829175762 -104.48202726980834 -51.082361909795004 + vertex 107.99548376258547 -104.48202726980834 -50.600000000000044 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 107.99548376258547 -104.48202726980834 -50.600000000000044 + vertex 108.31332100778123 -104.48202726980834 -50.18578643762695 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 108.31332100778123 -104.48202726980834 -50.18578643762695 + vertex 108.72753457015433 -104.48202726980834 -49.867949192431176 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 108.72753457015433 -104.48202726980834 -49.867949192431176 + vertex 109.20989647994928 -104.48202726980836 -49.668148347421905 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 109.20989647994928 -104.48202726980836 -49.668148347421905 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.30621422659472 -104.48202726980831 -41.921320343559714 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 100.92753457015435 -104.48202726980831 -42.398076211353384 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 100.92753457015435 -104.48202726980831 -42.398076211353384 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 101.6510774348468 -104.4820272698083 -42.697777478867266 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 101.6510774348468 -104.4820272698083 -42.697777478867266 + vertex 109.72753457015432 -104.48202726980834 -49.600000000000044 + vertex 102.42753457015436 -104.4820272698083 -42.80000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 99.42753457015435 -104.48202726980831 -39.80000000000006 + vertex 99.42753457015435 -104.4820272698083 -25.800000000000065 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 99.42753457015435 -104.4820272698083 -25.800000000000065 + vertex 99.52975709128714 -104.4820272698083 -25.0235428646925 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 99.52975709128714 -104.4820272698083 -25.0235428646925 + vertex 99.82945835880103 -104.4820272698083 -24.300000000000068 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 99.82945835880103 -104.4820272698083 -24.300000000000068 + vertex 100.3062142265947 -104.4820272698083 -23.678679656440423 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 100.3062142265947 -104.4820272698083 -23.678679656440423 + vertex 100.92753457015434 -104.48202726980831 -23.20192378864675 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 100.92753457015434 -104.48202726980831 -23.20192378864675 + vertex 101.65107743484678 -104.48202726980831 -22.902222521132856 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 101.65107743484678 -104.48202726980831 -22.902222521132856 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 108.31332100778123 -104.48202726980836 -15.414213562373153 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 108.31332100778123 -104.48202726980836 -15.414213562373153 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 108.72753457015433 -104.48202726980834 -15.732050807568937 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 108.72753457015433 -104.48202726980834 -15.732050807568937 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 109.20989647994928 -104.48202726980836 -15.931851652578198 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.20989647994928 -104.48202726980836 -15.931851652578198 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 109.72753457015432 -104.48202726980836 -16.00000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 109.72753457015432 -104.48202726980836 -16.00000000000006 + vertex 102.42753457015436 -104.4820272698083 -22.800000000000065 + vertex 134.52753457015433 -104.48202726980836 -16.00000000000006 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 108.31332100778123 -104.48202726980836 -15.414213562373153 + vertex 107.99548376258547 -104.48202726980834 -15.000000000000057 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 107.99548376258547 -104.48202726980834 -15.000000000000057 + vertex 107.7956829175762 -104.48202726980836 -14.517638090205098 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 107.7956829175762 -104.48202726980836 -14.517638090205098 + vertex 107.72753457015433 -104.48202726980836 -14.000000000000059 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 107.72753457015433 -104.48202726980836 -14.000000000000059 + vertex 107.72753457015433 -104.48202726980836 -12.000000000000046 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 107.72753457015433 -104.48202726980836 -12.000000000000046 + vertex 107.7956829175762 -104.48202726980834 -11.482361909795012 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 107.7956829175762 -104.48202726980834 -11.482361909795012 + vertex 107.99548376258547 -104.48202726980834 -11.000000000000048 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 107.99548376258547 -104.48202726980834 -11.000000000000048 + vertex 108.31332100778123 -104.48202726980836 -10.58578643762696 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 108.31332100778123 -104.48202726980836 -10.58578643762696 + vertex 108.72753457015433 -104.48202726980834 -10.267949192431178 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 108.72753457015433 -104.48202726980834 -10.267949192431178 + vertex 109.20989647994928 -104.48202726980836 -10.068148347421912 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 109.20989647994928 -104.48202726980836 -10.068148347421912 + vertex 109.72753457015432 -104.48202726980836 -10.00000000000005 + endloop +endfacet +facet normal -6.661338147750937e-16 -1.0 -9.79264862752035e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 109.72753457015432 -104.48202726980836 -10.00000000000005 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal -0.8660254037844379 0.5000000000000013 1.8925949547301319e-16 + outer loop + vertex 135.51562203109634 -29.851270586485406 -3.000000000000062 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844379 0.5000000000000013 1.8925949547301319e-16 + outer loop + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + vertex 135.51562203109634 -29.851270586485406 -3.000000000000062 + vertex 135.5156220310963 -29.85127058648539 -62.600000000000065 + endloop +endfacet +facet normal -0.7990717941595373 0.6012356175233285 1.8788331711158385e-16 + outer loop + vertex 135.85382598854784 -29.401780843702213 -3.000000000000062 + vertex 135.5156220310963 -29.85127058648539 -62.600000000000065 + vertex 135.51562203109634 -29.851270586485406 -3.000000000000062 + endloop +endfacet +facet normal -0.7990717941595373 0.6012356175233285 1.8788331711158385e-16 + outer loop + vertex 135.5156220310963 -29.85127058648539 -62.600000000000065 + vertex 135.85382598854784 -29.401780843702213 -3.000000000000062 + vertex 135.85382598854784 -29.401780843702213 -62.600000000000065 + endloop +endfacet +facet normal 0.2223220049061566 0.9749732950878742 4.897386689705081e-17 + outer loop + vertex 136.6703225694756 -29.022843461739203 -3.000000000000062 + vertex 137.09297230028594 -29.119219778916523 -62.600000000000065 + vertex 136.67032256947556 -29.022843461739203 -62.600000000000065 + endloop +endfacet +facet normal 0.2223220049061566 0.9749732950878742 4.897386689705081e-17 + outer loop + vertex 137.09297230028594 -29.119219778916523 -62.600000000000065 + vertex 136.6703225694756 -29.022843461739203 -3.000000000000062 + vertex 137.09297230028594 -29.119219778916534 -3.000000000000062 + endloop +endfacet +facet normal -0.582933426294525 0.8125199200687485 1.725215534807415e-16 + outer loop + vertex 136.2476728386652 -29.119219778916513 -3.000000000000062 + vertex 135.85382598854784 -29.401780843702213 -62.600000000000065 + vertex 135.85382598854784 -29.401780843702213 -3.000000000000062 + endloop +endfacet +facet normal -0.582933426294525 0.8125199200687485 1.725215534807415e-16 + outer loop + vertex 135.85382598854784 -29.401780843702213 -62.600000000000065 + vertex 136.2476728386652 -29.119219778916513 -3.000000000000062 + vertex 136.2476728386652 -29.119219778916513 -62.600000000000065 + endloop +endfacet +facet normal -0.9202212155149954 0.39139866442810534 1.8784422362071592e-16 + outer loop + vertex 93.5822351085336 -102.48202726980831 -3.0000000000000284 + vertex 93.36206755126858 -102.99966536001337 -62.60000000000003 + vertex 93.3620675512686 -102.99966536001337 -3.0000000000000284 + endloop +endfacet +facet normal -0.9202212155149954 0.39139866442810534 1.8784422362071592e-16 + outer loop + vertex 93.36206755126858 -102.99966536001337 -62.60000000000003 + vertex 93.5822351085336 -102.48202726980831 -3.0000000000000284 + vertex 93.58223510853358 -102.48202726980831 -62.60000000000003 + endloop +endfacet +facet normal -0.12114942135546836 -0.9926342819514322 -7.411378289433364e-17 + outer loop + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 94.17856413219631 -104.41387892238646 -62.60000000000003 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + endloop +endfacet +facet normal -0.12114942135546836 -0.9926342819514322 -7.411378289433364e-17 + outer loop + vertex 94.17856413219631 -104.41387892238646 -62.60000000000003 + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 94.17856413219633 -104.41387892238646 -3.0000000000000284 + endloop +endfacet +facet normal -0.7331906391044605 -0.680023151612938 5.601884531566151e-17 + outer loop + vertex 93.73693564691285 -104.21407807737721 -3.0000000000000284 + vertex 93.44214644250891 -103.89624083218142 -62.60000000000003 + vertex 93.73693564691284 -104.21407807737718 -62.60000000000003 + endloop +endfacet +facet normal -0.7331906391044605 -0.680023151612938 5.601884531566151e-17 + outer loop + vertex 93.44214644250891 -103.89624083218142 -62.60000000000003 + vertex 93.73693564691285 -104.21407807737721 -3.0000000000000284 + vertex 93.44214644250893 -103.89624083218142 -3.0000000000000284 + endloop +endfacet +facet normal 0.5829334262945308 0.8125199200687445 -1.1646732101374945e-17 + outer loop + vertex 137.09297230028594 -29.119219778916534 -3.000000000000062 + vertex 137.4868191504033 -29.401780843702223 -62.600000000000065 + vertex 137.09297230028594 -29.119219778916523 -62.600000000000065 + endloop +endfacet +facet normal 0.5829334262945308 0.8125199200687445 -1.1646732101374945e-17 + outer loop + vertex 137.4868191504033 -29.401780843702223 -62.600000000000065 + vertex 137.09297230028594 -29.119219778916534 -3.000000000000062 + vertex 137.4868191504033 -29.401780843702223 -3.000000000000062 + endloop +endfacet +facet normal -0.41219617871316916 -0.9110951159205395 -1.866582931446986e-17 + outer loop + vertex 94.17856413219633 -104.41387892238646 -3.0000000000000284 + vertex 93.73693564691284 -104.21407807737718 -62.60000000000003 + vertex 94.17856413219631 -104.41387892238646 -62.60000000000003 + endloop +endfacet +facet normal -0.41219617871316916 -0.9110951159205395 -1.866582931446986e-17 + outer loop + vertex 93.73693564691284 -104.21407807737718 -62.60000000000003 + vertex 94.17856413219633 -104.41387892238646 -3.0000000000000284 + vertex 93.73693564691285 -104.21407807737721 -3.0000000000000284 + endloop +endfacet +facet normal -0.9555126440105886 -0.29495014347495135 1.2888213579542982e-16 + outer loop + vertex 93.44214644250893 -103.89624083218142 -3.0000000000000284 + vertex 93.31428591610246 -103.48202726980831 -62.60000000000003 + vertex 93.44214644250891 -103.89624083218142 -62.60000000000003 + endloop +endfacet +facet normal -0.9555126440105886 -0.29495014347495135 1.2888213579542982e-16 + outer loop + vertex 93.31428591610246 -103.48202726980831 -62.60000000000003 + vertex 93.44214644250893 -103.89624083218142 -3.0000000000000284 + vertex 93.31428591610248 -103.48202726980831 -3.0000000000000284 + endloop +endfacet +facet normal -0.9951296050077003 0.09857519585178845 1.7252155348074164e-16 + outer loop + vertex 93.3620675512686 -102.99966536001337 -3.0000000000000284 + vertex 93.31428591610246 -103.48202726980831 -62.60000000000003 + vertex 93.31428591610248 -103.48202726980831 -3.0000000000000284 + endloop +endfacet +facet normal -0.9951296050077003 0.09857519585178845 1.7252155348074164e-16 + outer loop + vertex 93.31428591610246 -103.48202726980831 -62.60000000000003 + vertex 93.3620675512686 -102.99966536001337 -3.0000000000000284 + vertex 93.36206755126858 -102.99966536001337 -62.60000000000003 + endloop +endfacet +facet normal -0.22232200490613963 0.9749732950878782 1.28659506126373e-16 + outer loop + vertex 136.2476728386652 -29.119219778916513 -3.000000000000062 + vertex 136.67032256947556 -29.022843461739203 -62.600000000000065 + vertex 136.2476728386652 -29.119219778916513 -62.600000000000065 + endloop +endfacet +facet normal -0.22232200490613963 0.9749732950878782 1.28659506126373e-16 + outer loop + vertex 136.67032256947556 -29.022843461739203 -62.600000000000065 + vertex 136.2476728386652 -29.119219778916513 -3.000000000000062 + vertex 136.6703225694756 -29.022843461739203 -3.000000000000062 + endloop +endfacet +facet normal 0.7990717941595427 0.6012356175233213 -3.7118550168378584e-17 + outer loop + vertex 137.4868191504033 -29.401780843702223 -3.000000000000062 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 137.4868191504033 -29.401780843702223 -62.600000000000065 + endloop +endfacet +facet normal 0.7990717941595427 0.6012356175233213 -3.7118550168378584e-17 + outer loop + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 137.4868191504033 -29.401780843702223 -3.000000000000062 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 166.7053679209021 -105.80546266909826 -62.600000000000065 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 162.15253457015433 -103.17688310846853 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 154.57694148227205 -101.11251347666712 -62.600000000000065 + vertex 155.41311056879684 -104.48202726980838 -62.60000000000008 + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 155.41311056879684 -104.48202726980838 -62.60000000000008 + vertex 154.57694148227205 -101.11251347666712 -62.600000000000065 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 155.41311056879684 -104.48202726980838 -62.60000000000008 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 165.7053679209021 -107.53751347666713 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 165.7053679209021 -107.53751347666713 -62.600000000000065 + vertex 161.15253457015433 -104.9089339160374 -62.600000000000065 + vertex 166.7053679209021 -105.80546266909826 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + vertex 165.7053679209021 -107.53751347666713 -62.600000000000065 + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 93.58223510853358 -102.48202726980831 -62.60000000000003 + vertex 94.73693564691283 -100.48202726980833 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 93.58223510853358 -102.48202726980831 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 93.36206755126858 -102.99966536001337 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 93.36206755126858 -102.99966536001337 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 93.31428591610246 -103.48202726980831 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 93.31428591610246 -103.48202726980831 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 93.44214644250891 -103.89624083218142 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 93.44214644250891 -103.89624083218142 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 93.73693564691284 -104.21407807737718 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 93.73693564691284 -104.21407807737718 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 94.17856413219631 -104.41387892238646 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 94.17856413219631 -104.41387892238646 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 94.73693564691284 -104.48202726980831 -62.60000000000003 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 124.45058190463727 -100.42011377814154 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 124.45058190463727 -100.42011377814154 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 123.764409786641 -100.23625451325569 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 123.764409786641 -100.23625451325569 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 123.12058899123208 -99.93603594587707 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 123.12058899123208 -99.93603594587707 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.53868168748998 -99.52858006525756 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 122.53868168748998 -99.52858006525756 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 122.03636883437957 -99.02626721214713 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 122.03636883437957 -99.02626721214713 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.62891295376006 -98.44435990840503 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.62891295376006 -98.44435990840503 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.32869438638143 -97.80053911299612 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.32869438638143 -97.80053911299612 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.14483512149557 -97.11436699499986 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.14483512149557 -97.11436699499986 -62.60000000000005 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.07305832758563 -96.49857203241152 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.07305832758563 -96.49857203241152 -62.600000000000065 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.13921260616522 -95.74242516819551 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.13921260616522 -95.74242516819551 -62.600000000000065 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.14483512149557 -95.69901809900358 -62.600000000000044 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.14483512149557 -95.69901809900358 -62.600000000000044 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.33566537762498 -95.00925344381994 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.33566537762498 -95.00925344381994 -62.600000000000065 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 121.62891295376006 -94.3690251855984 -62.600000000000044 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.62891295376006 -94.3690251855984 -62.600000000000044 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.07305832758563 -96.49857203241152 -62.600000000000065 + vertex 121.13921260616522 -95.74242516819551 -62.600000000000065 + vertex 121.08292162982877 -96.40669254700171 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 124.45058190463727 -100.42011377814154 -62.60000000000005 + vertex 125.1582563526354 -100.48202726980834 -62.60000000000005 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 125.1582563526354 -100.48202726980834 -62.60000000000005 + vertex 150.55309081768112 -100.48202726980837 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 150.55309081768112 -100.48202726980837 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 166.97032256947557 -80.33241005582236 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 166.97032256947557 -80.33241005582236 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 179.9246854525155 -69.38910354298145 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 166.97032256947557 -80.33241005582236 -62.600000000000065 + vertex 179.9246854525155 -69.38910354298145 -62.600000000000065 + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 179.9246854525155 -69.38910354298145 -62.600000000000065 + vertex 182.52753457015436 -67.88634790425266 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 182.52753457015436 -67.88634790425266 -62.600000000000065 + vertex 183.24227030542374 -69.33067842807884 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 181.1290344193379 -71.96296547328224 -62.600000000000065 + vertex 183.24227030542374 -69.33067842807884 -62.600000000000065 + vertex 181.67449817895138 -73.34523992784574 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 181.67449817895138 -73.34523992784574 -62.600000000000065 + vertex 183.24227030542374 -69.33067842807884 -62.600000000000065 + vertex 183.89597471679528 -70.80363748245898 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 181.67449817895138 -73.34523992784574 -62.600000000000065 + vertex 183.89597471679528 -70.80363748245898 -62.600000000000065 + vertex 182.16167407948234 -74.74911777963072 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.16167407948234 -74.74911777963072 -62.600000000000065 + vertex 183.89597471679528 -70.80363748245898 -62.600000000000065 + vertex 184.48750387842546 -72.30264751720463 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.16167407948234 -74.74911777963072 -62.600000000000065 + vertex 184.48750387842546 -72.30264751720463 -62.600000000000065 + vertex 182.58970960549215 -76.17214236454272 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.58970960549215 -76.17214236454272 -62.600000000000065 + vertex 184.48750387842546 -72.30264751720463 -62.600000000000065 + vertex 185.01582266574815 -73.8250853951783 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.58970960549215 -76.17214236454272 -62.600000000000065 + vertex 185.01582266574815 -73.8250853951783 -62.600000000000065 + vertex 182.95785573205208 -77.6118235133703 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.95785573205208 -77.6118235133703 -62.600000000000065 + vertex 185.01582266574815 -73.8250853951783 -62.600000000000065 + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.95785573205208 -77.6118235133703 -62.600000000000065 + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 183.2654682354717 -79.06564190936425 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.2654682354717 -79.06564190936425 -62.600000000000065 + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 183.51200882063426 -80.53105349682295 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.51200882063426 -80.53105349682295 -62.600000000000065 + vertex 185.4800065668526 -75.36828698255519 -62.600000000000065 + vertex 185.87924330029884 -76.9295518108256 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.51200882063426 -80.53105349682295 -62.600000000000065 + vertex 185.87924330029884 -76.9295518108256 -62.600000000000065 + vertex 183.6970460629663 -82.00549393296835 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.6970460629663 -82.00549393296835 -62.600000000000065 + vertex 185.87924330029884 -76.9295518108256 -62.600000000000065 + vertex 186.2128342365394 -78.50614780237994 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.6970460629663 -82.00549393296835 -62.600000000000065 + vertex 186.2128342365394 -78.50614780237994 -62.600000000000065 + vertex 183.82025616339308 -83.48638307532282 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.82025616339308 -83.48638307532282 -62.600000000000065 + vertex 186.2128342365394 -78.50614780237994 -62.600000000000065 + vertex 186.4801956204604 -80.09531605140675 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.82025616339308 -83.48638307532282 -62.600000000000065 + vertex 186.4801956204604 -80.09531605140675 -62.600000000000065 + vertex 183.88142351495898 -84.97112949673388 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.88142351495898 -84.97112949673388 -62.600000000000065 + vertex 186.4801956204604 -80.09531605140675 -62.600000000000065 + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.88142351495898 -84.97112949673388 -62.600000000000065 + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + vertex 183.88044108012068 -86.4571350201463 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.88044108012068 -86.4571350201463 -62.600000000000065 + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + vertex 183.81731057805365 -87.94179926518602 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.81731057805365 -87.94179926518602 -62.600000000000065 + vertex 186.68085959290207 -81.69427565173784 -62.600000000000065 + vertex 186.81447500937168 -83.3002285631922 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.81731057805365 -87.94179926518602 -62.600000000000065 + vertex 186.81447500937168 -83.3002285631922 -62.600000000000065 + vertex 183.6921424816438 -89.42252419859925 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.6921424816438 -89.42252419859925 -62.600000000000065 + vertex 186.81447500937168 -83.3002285631922 -62.600000000000065 + vertex 186.88080805451577 -84.91036450790278 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.6921424816438 -89.42252419859925 -62.600000000000065 + vertex 186.88080805451577 -84.91036450790278 -62.600000000000065 + vertex 183.50515582416938 -90.89671868058495 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.50515582416938 -90.89671868058495 -62.600000000000065 + vertex 186.88080805451577 -84.91036450790278 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.50515582416938 -90.89671868058495 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 182.58046225985305 -93.60899269908614 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 182.58046225985305 -93.60899269908614 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 169.70258105841674 -117.76504968478835 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 169.70258105841674 -117.76504968478835 -62.600000000000065 + vertex 186.87974265127676 -86.52186588805824 -62.600000000000065 + vertex 186.81128066401757 -88.13191271645411 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 169.70258105841674 -117.76504968478835 -62.600000000000065 + vertex 186.81128066401757 -88.13191271645411 -62.600000000000065 + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + vertex 186.81128066401757 -88.13191271645411 -62.600000000000065 + vertex 186.67554189525936 -89.7376875512249 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + vertex 186.67554189525936 -89.7376875512249 -62.600000000000065 + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 171.02535347370687 -116.84460904537994 -62.600000000000065 + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + vertex 172.3084731066061 -115.86965169195585 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 172.3084731066061 -115.86965169195585 -62.600000000000065 + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + vertex 173.54969460939628 -114.84188371505721 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 173.54969460939628 -114.84188371505721 -62.600000000000065 + vertex 186.4727638760373 -91.33638042612219 -62.600000000000065 + vertex 186.203301450242 -92.92519376771133 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 173.54969460939628 -114.84188371505721 -62.600000000000065 + vertex 186.203301450242 -92.92519376771133 -62.600000000000065 + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + vertex 186.203301450242 -92.92519376771133 -62.600000000000065 + vertex 185.8676261536738 -94.50134729088121 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + vertex 185.8676261536738 -94.50134729088121 -62.600000000000065 + vertex 185.46632538889568 -96.06208286410163 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 174.74684595244167 -113.76310361922127 -62.600000000000065 + vertex 185.46632538889568 -96.06208286410163 -62.600000000000065 + vertex 175.89783222505156 -112.63519917575516 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 175.89783222505156 -112.63519917575516 -62.600000000000065 + vertex 185.46632538889568 -96.06208286410163 -62.600000000000065 + vertex 185.00010139733044 -97.60466933591319 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 175.89783222505156 -112.63519917575516 -62.600000000000065 + vertex 185.00010139733044 -97.60466933591319 -62.600000000000065 + vertex 177.00063930139194 -111.46014411930008 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 177.00063930139194 -111.46014411930008 -62.600000000000065 + vertex 185.00010139733044 -97.60466933591319 -62.600000000000065 + vertex 184.46977003039888 -99.12640731420494 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 177.00063930139194 -111.46014411930008 -62.600000000000065 + vertex 184.46977003039888 -99.12640731420494 -62.600000000000065 + vertex 178.05333736503042 -110.23999469396772 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 178.05333736503042 -110.23999469396772 -62.600000000000065 + vertex 184.46977003039888 -99.12640731420494 -62.600000000000065 + vertex 183.8762593218509 -100.62463388991569 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 178.05333736503042 -110.23999469396772 -62.600000000000065 + vertex 183.8762593218509 -100.62463388991569 -62.600000000000065 + vertex 179.0540842859469 -108.97688605509173 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 179.0540842859469 -108.97688605509173 -62.600000000000065 + vertex 183.8762593218509 -100.62463388991569 -62.600000000000065 + vertex 183.22060786378736 -102.09672729689305 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 179.0540842859469 -108.97688605509173 -62.600000000000065 + vertex 183.22060786378736 -102.09672729689305 -62.600000000000065 + vertex 180.00112884410115 -107.6730285328917 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 180.00112884410115 -107.6730285328917 -62.600000000000065 + vertex 183.22060786378736 -102.09672729689305 -62.600000000000065 + vertex 182.50396298921405 -103.5401114997562 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 180.00112884410115 -107.6730285328917 -62.600000000000065 + vertex 182.50396298921405 -103.5401114997562 -62.600000000000065 + vertex 180.8928137939151 -106.33070376458772 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 180.8928137939151 -106.33070376458772 -62.600000000000065 + vertex 182.50396298921405 -103.5401114997562 -62.600000000000065 + vertex 181.72757876430887 -104.95226070173364 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 150.02753457015433 -121.17248787278362 -62.60000000000008 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 154.57694148227205 -101.11251347666712 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 154.57694148227205 -101.11251347666712 -62.600000000000065 + vertex 150.02753457015433 -104.48202726980836 -62.600000000000065 + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -121.17248787278362 -62.60000000000008 + vertex 153.02753457015433 -104.48202726980838 -62.60000000000008 + vertex 152.85873887103978 -120.9285537079229 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -121.17248787278362 -62.60000000000008 + vertex 152.85873887103978 -120.9285537079229 -62.600000000000065 + vertex 150.02753457015433 -124.17799915024115 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 150.02753457015433 -124.17799915024115 -62.600000000000065 + vertex 152.85873887103978 -120.9285537079229 -62.600000000000065 + vertex 151.63572936288375 -124.07481319206391 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 151.63572936288375 -124.07481319206391 -62.600000000000065 + vertex 152.85873887103978 -120.9285537079229 -62.600000000000065 + vertex 154.32855554350078 -120.7098019533102 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 151.63572936288375 -124.07481319206391 -62.600000000000065 + vertex 154.32855554350078 -120.7098019533102 -62.600000000000065 + vertex 153.23820152839704 -123.90445829168752 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 153.23820152839704 -123.90445829168752 -62.600000000000065 + vertex 154.32855554350078 -120.7098019533102 -62.600000000000065 + vertex 155.78793737722236 -120.42976973338907 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 153.23820152839704 -123.90445829168752 -62.600000000000065 + vertex 155.78793737722236 -120.42976973338907 -62.600000000000065 + vertex 154.83214687982968 -123.66723255536573 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 154.83214687982968 -123.66723255536573 -62.600000000000065 + vertex 155.78793737722236 -120.42976973338907 -62.600000000000065 + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 154.83214687982968 -123.66723255536573 -62.600000000000065 + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + vertex 156.41477615149986 -123.36355110749695 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 156.41477615149986 -123.36355110749695 -62.600000000000065 + vertex 157.23433058097086 -120.0889470801798 -62.600000000000065 + vertex 158.66520409248508 -119.68793040367179 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 156.41477615149986 -123.36355110749695 -62.600000000000065 + vertex 158.66520409248508 -119.68793040367179 -62.600000000000065 + vertex 157.98331987988098 -122.99394536419275 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 157.98331987988098 -122.99394536419275 -62.600000000000065 + vertex 158.66520409248508 -119.68793040367179 -62.600000000000065 + vertex 160.07805400761478 -119.22742144815793 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 157.98331987988098 -122.99394536419275 -62.600000000000065 + vertex 160.07805400761478 -119.22742144815793 -62.600000000000065 + vertex 161.47040796193536 -118.70822606424322 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 157.98331987988098 -122.99394536419275 -62.600000000000065 + vertex 161.47040796193536 -118.70822606424322 -62.600000000000065 + vertex 159.5350332499214 -122.55906210334588 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 159.5350332499214 -122.55906210334588 -62.600000000000065 + vertex 161.47040796193536 -118.70822606424322 -62.600000000000065 + vertex 162.83982945717034 -118.13125279867626 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 159.5350332499214 -122.55906210334588 -62.600000000000065 + vertex 162.83982945717034 -118.13125279867626 -62.600000000000065 + vertex 161.06720089823247 -122.05966233282527 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 161.06720089823247 -122.05966233282527 -62.600000000000065 + vertex 162.83982945717034 -118.13125279867626 -62.600000000000065 + vertex 164.18392212485122 -117.49751130447146 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 161.06720089823247 -122.05966233282527 -62.600000000000065 + vertex 164.18392212485122 -117.49751130447146 -62.600000000000065 + vertex 162.5771416647378 -121.49661995877844 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 162.5771416647378 -121.49661995877844 -62.600000000000065 + vertex 164.18392212485122 -117.49751130447146 -62.600000000000065 + vertex 165.50033391975418 -116.80811057410422 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 162.5771416647378 -121.49661995877844 -62.600000000000065 + vertex 165.50033391975418 -116.80811057410422 -62.600000000000065 + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + vertex 165.50033391975418 -116.80811057410422 -62.600000000000065 + vertex 166.7867612357742 -116.06425699887048 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + vertex 166.7867612357742 -116.06425699887048 -62.600000000000065 + vertex 168.04095293703554 -115.26725225780693 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 164.0622132844704 -120.87092025637166 -62.600000000000065 + vertex 168.04095293703554 -115.26725225780693 -62.600000000000065 + vertex 165.51981701130626 -120.18365814564442 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 165.51981701130626 -120.18365814564442 -62.600000000000065 + vertex 168.04095293703554 -115.26725225780693 -62.600000000000065 + vertex 169.26071429718345 -114.41849103986603 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 165.51981701130626 -120.18365814564442 -62.600000000000065 + vertex 169.26071429718345 -114.41849103986603 -62.600000000000065 + vertex 166.9474021655441 -119.43603627549429 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 166.9474021655441 -119.43603627549429 -62.600000000000065 + vertex 169.26071429718345 -114.41849103986603 -62.600000000000065 + vertex 170.4439108399647 -113.51945860333161 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 166.9474021655441 -119.43603627549429 -62.600000000000065 + vertex 170.4439108399647 -113.51945860333161 -62.600000000000065 + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + vertex 170.4439108399647 -113.51945860333161 -62.600000000000065 + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 168.34247059737294 -118.62936291914629 -62.600000000000065 + vertex 170.6996386991948 -113.30770840086842 -62.60000000000009 + vertex 172.33046225985305 -111.36251347666713 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 168.16311056879684 -82.39837947330521 -62.600000000000065 + vertex 171.40253457015433 -87.15541313845642 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 168.16311056879684 -82.39837947330521 -62.600000000000065 + vertex 164.82694148227205 -83.35899269908614 -62.600000000000065 + vertex 166.97032256947557 -80.33241005582236 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 171.40253457015433 -87.15541313845642 -62.600000000000065 + vertex 168.16311056879684 -82.39837947330521 -62.600000000000065 + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 171.40253457015433 -87.15541313845642 -62.600000000000065 + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 171.40253457015433 -87.15541313845642 -62.600000000000065 + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + vertex 170.40253457015433 -88.88746394602529 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + vertex 183.4496386991948 -91.22406060436526 -62.600000000000065 + vertex 182.58046225985305 -93.60899269908614 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 174.9553679209021 -91.51604350665501 -62.600000000000065 + vertex 170.40253457015433 -88.88746394602529 -62.600000000000065 + vertex 175.9553679209021 -89.78399269908614 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 121.65644752391404 -94.32133391112714 -62.600000000000065 + vertex 121.62891295376006 -94.3690251855984 -62.600000000000044 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 135.5156220310963 -29.85127058648539 -62.600000000000065 + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 134.36092149271707 -31.851270586485388 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 135.5156220310963 -29.85127058648539 -62.600000000000065 + vertex 135.85382598854784 -29.401780843702213 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 135.85382598854784 -29.401780843702213 -62.600000000000065 + vertex 136.2476728386652 -29.119219778916513 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 136.2476728386652 -29.119219778916513 -62.600000000000065 + vertex 136.67032256947556 -29.022843461739203 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 136.67032256947556 -29.022843461739203 -62.600000000000065 + vertex 137.09297230028594 -29.119219778916523 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 137.09297230028594 -29.119219778916523 -62.600000000000065 + vertex 137.4868191504033 -29.401780843702223 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 137.4868191504033 -29.401780843702223 -62.600000000000065 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 137.8250231078548 -29.851270586485416 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 149.16412596495886 -57.614999830572565 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 149.16412596495886 -57.614999830572565 -62.600000000000065 + vertex 148.66181311184843 -57.11268697746215 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 148.66181311184843 -57.11268697746215 -62.600000000000065 + vertex 148.0799058081063 -56.70523109684263 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 148.0799058081063 -56.70523109684263 -62.600000000000065 + vertex 147.4360850126974 -56.40501252946401 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 147.4360850126974 -56.40501252946401 -62.600000000000065 + vertex 146.74991289470114 -56.22115326457817 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 146.74991289470114 -56.22115326457817 -62.600000000000065 + vertex 146.042238446703 -56.15923977291135 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 146.042238446703 -56.15923977291135 -62.600000000000065 + vertex 145.33456399870488 -56.221153264578156 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 145.33456399870488 -56.221153264578156 -62.600000000000065 + vertex 144.6483918807086 -56.40501252946401 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 144.6483918807086 -56.40501252946401 -62.600000000000065 + vertex 144.00457108529966 -56.70523109684263 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 144.00457108529966 -56.70523109684263 -62.600000000000065 + vertex 143.42266378155756 -57.11268697746215 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 143.42266378155756 -57.11268697746215 -62.600000000000065 + vertex 142.92035092844716 -57.61499983057255 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 142.92035092844716 -57.61499983057255 -62.600000000000065 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 143.55963228918762 -47.78390505010473 -62.600000000000065 + vertex 142.51289504782764 -58.196907134314685 -62.600000000000065 + vertex 113.1343572398539 -100.48202726980834 -62.600000000000044 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 149.16412596495886 -57.614999830572565 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 149.57158184557838 -58.19690713431467 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 149.57158184557838 -58.19690713431467 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 162.26899907810125 -80.18947890594488 -62.600000000000065 + endloop +endfacet +facet normal -2.629858328621002e-16 -5.887874950271871e-17 -1.0 + outer loop + vertex 162.26899907810125 -80.18947890594488 -62.600000000000065 + vertex 165.47032256947557 -77.73433384446905 -62.600000000000065 + vertex 150.55309081768112 -100.48202726980837 -62.600000000000065 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 174.9553679209021 -91.51604350665502 -3.000000000000062 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 170.40253457015433 -88.88746394602529 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.82694148227205 -83.35899269908614 -3.000000000000062 + vertex 168.16311056879687 -82.39837947330521 -3.000000000000062 + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.16311056879687 -82.39837947330521 -3.000000000000062 + vertex 164.82694148227205 -83.35899269908614 -3.000000000000062 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.16311056879687 -82.39837947330521 -3.000000000000062 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 175.9553679209021 -89.78399269908614 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 175.9553679209021 -89.78399269908614 -3.000000000000062 + vertex 171.40253457015433 -87.15541313845642 -3.000000000000062 + vertex 174.9553679209021 -91.51604350665502 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + vertex 175.9553679209021 -89.78399269908614 -3.000000000000062 + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 135.51562203109634 -29.851270586485406 -3.000000000000062 + vertex 134.36092149271707 -31.851270586485402 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 135.51562203109634 -29.851270586485406 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 135.85382598854784 -29.401780843702213 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 135.85382598854784 -29.401780843702213 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 136.2476728386652 -29.119219778916513 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 136.2476728386652 -29.119219778916513 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 136.6703225694756 -29.022843461739203 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 136.6703225694756 -29.022843461739203 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 137.09297230028594 -29.119219778916534 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 137.09297230028594 -29.119219778916534 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 137.4868191504033 -29.401780843702223 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 137.4868191504033 -29.401780843702223 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 137.82502310785483 -29.851270586485416 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 149.16412596495886 -57.614999830572565 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 149.16412596495886 -57.614999830572565 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 148.66181311184843 -57.11268697746215 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 148.66181311184843 -57.11268697746215 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 148.0799058081063 -56.705231096842645 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 148.0799058081063 -56.705231096842645 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 147.4360850126974 -56.405012529464024 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 147.4360850126974 -56.405012529464024 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 146.74991289470114 -56.22115326457817 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 146.74991289470114 -56.22115326457817 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 146.042238446703 -56.159239772911356 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 146.042238446703 -56.159239772911356 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 145.33456399870488 -56.221153264578156 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 145.33456399870488 -56.221153264578156 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 144.6483918807086 -56.405012529464024 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 144.6483918807086 -56.405012529464024 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 144.0045710852997 -56.70523109684263 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 144.0045710852997 -56.70523109684263 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 143.42266378155756 -57.11268697746216 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 143.42266378155756 -57.11268697746216 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 142.9203509284472 -57.61499983057255 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 142.9203509284472 -57.61499983057255 -3.000000000000062 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 149.16412596495886 -57.614999830572565 -3.000000000000062 + vertex 149.57158184557838 -58.19690713431467 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 149.57158184557838 -58.19690713431467 -3.000000000000062 + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 153.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 153.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 150.02753457015433 -121.17248787278362 -3.0000000000000733 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 153.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 150.02753457015433 -121.17248787278362 -3.0000000000000733 + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 150.02753457015433 -121.17248787278362 -3.0000000000000733 + vertex 150.02753457015433 -124.17799915024115 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 150.02753457015433 -124.17799915024115 -3.000000000000062 + vertex 151.63572936288375 -124.07481319206391 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 152.85873887103978 -120.9285537079229 -3.000000000000062 + vertex 151.63572936288375 -124.07481319206391 -3.000000000000062 + vertex 154.3285555435008 -120.7098019533102 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.3285555435008 -120.7098019533102 -3.000000000000062 + vertex 151.63572936288375 -124.07481319206391 -3.000000000000062 + vertex 153.23820152839704 -123.90445829168753 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.3285555435008 -120.7098019533102 -3.000000000000062 + vertex 153.23820152839704 -123.90445829168753 -3.000000000000062 + vertex 155.78793737722236 -120.42976973338907 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 155.78793737722236 -120.42976973338907 -3.000000000000062 + vertex 153.23820152839704 -123.90445829168753 -3.000000000000062 + vertex 154.83214687982968 -123.66723255536573 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 155.78793737722236 -120.42976973338907 -3.000000000000062 + vertex 154.83214687982968 -123.66723255536573 -3.000000000000062 + vertex 157.23433058097086 -120.0889470801798 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 157.23433058097086 -120.0889470801798 -3.000000000000062 + vertex 154.83214687982968 -123.66723255536573 -3.000000000000062 + vertex 156.4147761514999 -123.36355110749695 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 157.23433058097086 -120.0889470801798 -3.000000000000062 + vertex 156.4147761514999 -123.36355110749695 -3.000000000000062 + vertex 158.66520409248508 -119.68793040367179 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 158.66520409248508 -119.68793040367179 -3.000000000000062 + vertex 156.4147761514999 -123.36355110749695 -3.000000000000062 + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 158.66520409248508 -119.68793040367179 -3.000000000000062 + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 160.07805400761478 -119.22742144815793 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 160.07805400761478 -119.22742144815793 -3.000000000000062 + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 161.4704079619354 -118.70822606424322 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.4704079619354 -118.70822606424322 -3.000000000000062 + vertex 157.98331987988098 -122.99394536419275 -3.000000000000062 + vertex 159.5350332499214 -122.55906210334588 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.4704079619354 -118.70822606424322 -3.000000000000062 + vertex 159.5350332499214 -122.55906210334588 -3.000000000000062 + vertex 162.83982945717034 -118.13125279867626 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 162.83982945717034 -118.13125279867626 -3.000000000000062 + vertex 159.5350332499214 -122.55906210334588 -3.000000000000062 + vertex 161.06720089823247 -122.0596623328253 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 162.83982945717034 -118.13125279867626 -3.000000000000062 + vertex 161.06720089823247 -122.0596623328253 -3.000000000000062 + vertex 164.18392212485122 -117.49751130447146 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.18392212485122 -117.49751130447146 -3.000000000000062 + vertex 161.06720089823247 -122.0596623328253 -3.000000000000062 + vertex 162.5771416647378 -121.49661995877844 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.18392212485122 -117.49751130447146 -3.000000000000062 + vertex 162.5771416647378 -121.49661995877844 -3.000000000000062 + vertex 165.50033391975418 -116.80811057410425 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.50033391975418 -116.80811057410425 -3.000000000000062 + vertex 162.5771416647378 -121.49661995877844 -3.000000000000062 + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.50033391975418 -116.80811057410425 -3.000000000000062 + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + vertex 166.7867612357742 -116.06425699887048 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 166.7867612357742 -116.06425699887048 -3.000000000000062 + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + vertex 168.04095293703554 -115.26725225780693 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.04095293703554 -115.26725225780693 -3.000000000000062 + vertex 164.0622132844704 -120.87092025637168 -3.000000000000062 + vertex 165.51981701130626 -120.18365814564442 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 168.04095293703554 -115.26725225780693 -3.000000000000062 + vertex 165.51981701130626 -120.18365814564442 -3.000000000000062 + vertex 169.26071429718345 -114.41849103986604 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 169.26071429718345 -114.41849103986604 -3.000000000000062 + vertex 165.51981701130626 -120.18365814564442 -3.000000000000062 + vertex 166.94740216554413 -119.4360362754943 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 169.26071429718345 -114.41849103986604 -3.000000000000062 + vertex 166.94740216554413 -119.4360362754943 -3.000000000000062 + vertex 170.4439108399647 -113.51945860333164 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 170.4439108399647 -113.51945860333164 -3.000000000000062 + vertex 166.94740216554413 -119.4360362754943 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 170.4439108399647 -113.51945860333164 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + vertex 172.33046225985308 -111.36251347666713 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 172.33046225985308 -111.36251347666713 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 179.9246854525155 -69.38910354298146 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 164.82694148227205 -83.35899269908614 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 164.82694148227205 -83.35899269908614 -3.000000000000062 + vertex 165.47032256947557 -77.73433384446906 -3.000000000000062 + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 179.9246854525155 -69.38910354298146 -3.000000000000062 + vertex 166.9703225694756 -80.33241005582238 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 179.9246854525155 -69.38910354298146 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -3.000000000000062 + vertex 182.52753457015436 -67.88634790425267 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 182.52753457015436 -67.88634790425267 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -3.000000000000062 + vertex 183.24227030542374 -69.33067842807885 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.24227030542374 -69.33067842807885 -3.000000000000062 + vertex 181.1290344193379 -71.96296547328224 -3.000000000000062 + vertex 181.67449817895138 -73.34523992784575 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.24227030542374 -69.33067842807885 -3.000000000000062 + vertex 181.67449817895138 -73.34523992784575 -3.000000000000062 + vertex 183.89597471679528 -70.80363748245898 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.89597471679528 -70.80363748245898 -3.000000000000062 + vertex 181.67449817895138 -73.34523992784575 -3.000000000000062 + vertex 182.16167407948234 -74.74911777963072 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.89597471679528 -70.80363748245898 -3.000000000000062 + vertex 182.16167407948234 -74.74911777963072 -3.000000000000062 + vertex 184.48750387842546 -72.30264751720465 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.48750387842546 -72.30264751720465 -3.000000000000062 + vertex 182.16167407948234 -74.74911777963072 -3.000000000000062 + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.48750387842546 -72.30264751720465 -3.000000000000062 + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + vertex 185.01582266574817 -73.8250853951783 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.01582266574817 -73.8250853951783 -3.000000000000062 + vertex 182.58970960549215 -76.17214236454274 -3.000000000000062 + vertex 182.95785573205208 -77.6118235133703 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.01582266574817 -73.8250853951783 -3.000000000000062 + vertex 182.95785573205208 -77.6118235133703 -3.000000000000062 + vertex 185.4800065668526 -75.36828698255519 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4800065668526 -75.36828698255519 -3.000000000000062 + vertex 182.95785573205208 -77.6118235133703 -3.000000000000062 + vertex 183.26546823547173 -79.06564190936425 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4800065668526 -75.36828698255519 -3.000000000000062 + vertex 183.26546823547173 -79.06564190936425 -3.000000000000062 + vertex 183.51200882063426 -80.53105349682295 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4800065668526 -75.36828698255519 -3.000000000000062 + vertex 183.51200882063426 -80.53105349682295 -3.000000000000062 + vertex 185.87924330029887 -76.9295518108256 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.87924330029887 -76.9295518108256 -3.000000000000062 + vertex 183.51200882063426 -80.53105349682295 -3.000000000000062 + vertex 183.6970460629663 -82.00549393296835 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.87924330029887 -76.9295518108256 -3.000000000000062 + vertex 183.6970460629663 -82.00549393296835 -3.000000000000062 + vertex 186.2128342365394 -78.50614780237996 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.2128342365394 -78.50614780237996 -3.000000000000062 + vertex 183.6970460629663 -82.00549393296835 -3.000000000000062 + vertex 183.8202561633931 -83.48638307532283 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.2128342365394 -78.50614780237996 -3.000000000000062 + vertex 183.8202561633931 -83.48638307532283 -3.000000000000062 + vertex 186.48019562046042 -80.09531605140675 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.48019562046042 -80.09531605140675 -3.000000000000062 + vertex 183.8202561633931 -83.48638307532283 -3.000000000000062 + vertex 183.88142351495898 -84.9711294967339 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.48019562046042 -80.09531605140675 -3.000000000000062 + vertex 183.88142351495898 -84.9711294967339 -3.000000000000062 + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + vertex 183.88142351495898 -84.9711294967339 -3.000000000000062 + vertex 183.88044108012068 -86.45713502014631 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + vertex 183.88044108012068 -86.45713502014631 -3.000000000000062 + vertex 183.81731057805365 -87.94179926518602 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.6808595929021 -81.69427565173785 -3.000000000000062 + vertex 183.81731057805365 -87.94179926518602 -3.000000000000062 + vertex 186.81447500937168 -83.3002285631922 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.81447500937168 -83.3002285631922 -3.000000000000062 + vertex 183.81731057805365 -87.94179926518602 -3.000000000000062 + vertex 183.6921424816438 -89.42252419859925 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.81447500937168 -83.3002285631922 -3.000000000000062 + vertex 183.6921424816438 -89.42252419859925 -3.000000000000062 + vertex 186.8808080545158 -84.91036450790278 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8808080545158 -84.91036450790278 -3.000000000000062 + vertex 183.6921424816438 -89.42252419859925 -3.000000000000062 + vertex 183.5051558241694 -90.89671868058495 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8808080545158 -84.91036450790278 -3.000000000000062 + vertex 183.5051558241694 -90.89671868058495 -3.000000000000062 + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 183.5051558241694 -90.89671868058495 -3.000000000000062 + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 183.4496386991948 -91.22406060436526 -3.000000000000062 + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 182.58046225985305 -93.60899269908616 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 168.34247059737294 -118.62936291914629 -3.000000000000062 + vertex 169.70258105841677 -117.76504968478835 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.87974265127679 -86.52186588805824 -3.000000000000062 + vertex 169.70258105841677 -117.76504968478835 -3.000000000000062 + vertex 186.8112806640176 -88.13191271645411 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8112806640176 -88.13191271645411 -3.000000000000062 + vertex 169.70258105841677 -117.76504968478835 -3.000000000000062 + vertex 171.0253534737069 -116.84460904537994 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.8112806640176 -88.13191271645411 -3.000000000000062 + vertex 171.0253534737069 -116.84460904537994 -3.000000000000062 + vertex 186.67554189525939 -89.7376875512249 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.67554189525939 -89.7376875512249 -3.000000000000062 + vertex 171.0253534737069 -116.84460904537994 -3.000000000000062 + vertex 172.3084731066061 -115.86965169195585 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.67554189525939 -89.7376875512249 -3.000000000000062 + vertex 172.3084731066061 -115.86965169195585 -3.000000000000062 + vertex 186.4727638760373 -91.33638042612219 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.4727638760373 -91.33638042612219 -3.000000000000062 + vertex 172.3084731066061 -115.86965169195585 -3.000000000000062 + vertex 173.54969460939628 -114.84188371505721 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.4727638760373 -91.33638042612219 -3.000000000000062 + vertex 173.54969460939628 -114.84188371505721 -3.000000000000062 + vertex 186.203301450242 -92.92519376771133 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.203301450242 -92.92519376771133 -3.000000000000062 + vertex 173.54969460939628 -114.84188371505721 -3.000000000000062 + vertex 174.74684595244167 -113.7631036192213 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 186.203301450242 -92.92519376771133 -3.000000000000062 + vertex 174.74684595244167 -113.7631036192213 -3.000000000000062 + vertex 185.8676261536738 -94.50134729088121 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.8676261536738 -94.50134729088121 -3.000000000000062 + vertex 174.74684595244167 -113.7631036192213 -3.000000000000062 + vertex 175.89783222505156 -112.63519917575516 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.8676261536738 -94.50134729088121 -3.000000000000062 + vertex 175.89783222505156 -112.63519917575516 -3.000000000000062 + vertex 185.4663253888957 -96.06208286410164 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4663253888957 -96.06208286410164 -3.000000000000062 + vertex 175.89783222505156 -112.63519917575516 -3.000000000000062 + vertex 177.00063930139197 -111.46014411930008 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.4663253888957 -96.06208286410164 -3.000000000000062 + vertex 177.00063930139197 -111.46014411930008 -3.000000000000062 + vertex 185.00010139733047 -97.60466933591319 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.00010139733047 -97.60466933591319 -3.000000000000062 + vertex 177.00063930139197 -111.46014411930008 -3.000000000000062 + vertex 178.05333736503042 -110.23999469396773 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 185.00010139733047 -97.60466933591319 -3.000000000000062 + vertex 178.05333736503042 -110.23999469396773 -3.000000000000062 + vertex 184.4697700303989 -99.12640731420495 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.4697700303989 -99.12640731420495 -3.000000000000062 + vertex 178.05333736503042 -110.23999469396773 -3.000000000000062 + vertex 179.0540842859469 -108.97688605509173 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 184.4697700303989 -99.12640731420495 -3.000000000000062 + vertex 179.0540842859469 -108.97688605509173 -3.000000000000062 + vertex 183.8762593218509 -100.6246338899157 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.8762593218509 -100.6246338899157 -3.000000000000062 + vertex 179.0540842859469 -108.97688605509173 -3.000000000000062 + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.8762593218509 -100.6246338899157 -3.000000000000062 + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + vertex 183.2206078637874 -102.09672729689308 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 183.2206078637874 -102.09672729689308 -3.000000000000062 + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + vertex 182.50396298921407 -103.54011149975622 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 182.50396298921407 -103.54011149975622 -3.000000000000062 + vertex 180.00112884410115 -107.6730285328917 -3.000000000000062 + vertex 180.8928137939151 -106.33070376458772 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 182.50396298921407 -103.54011149975622 -3.000000000000062 + vertex 180.8928137939151 -106.33070376458772 -3.000000000000062 + vertex 181.7275787643089 -104.95226070173364 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 155.41311056879684 -104.48202726980838 -3.0000000000000733 + vertex 161.15253457015433 -104.9089339160374 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 155.41311056879684 -104.48202726980838 -3.0000000000000733 + vertex 154.57694148227208 -101.11251347666712 -3.000000000000062 + vertex 153.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.15253457015433 -104.9089339160374 -3.000000000000062 + vertex 155.41311056879684 -104.48202726980838 -3.0000000000000733 + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.15253457015433 -104.9089339160374 -3.000000000000062 + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 161.15253457015433 -104.9089339160374 -3.000000000000062 + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + vertex 162.15253457015433 -103.17688310846853 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + vertex 170.69963869919482 -113.30770840086842 -3.000000000000085 + vertex 172.33046225985308 -111.36251347666713 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 166.70536792090212 -105.80546266909826 -3.000000000000062 + vertex 162.15253457015433 -103.17688310846853 -3.000000000000062 + vertex 165.70536792090212 -107.53751347666713 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 93.3620675512686 -102.99966536001337 -3.0000000000000284 + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 93.5822351085336 -102.48202726980831 -3.0000000000000284 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 94.73693564691284 -100.48202726980834 -3.0000000000000284 + vertex 93.3620675512686 -102.99966536001337 -3.0000000000000284 + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 93.3620675512686 -102.99966536001337 -3.0000000000000284 + vertex 93.31428591610248 -103.48202726980831 -3.0000000000000284 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 93.31428591610248 -103.48202726980831 -3.0000000000000284 + vertex 93.44214644250893 -103.89624083218142 -3.0000000000000284 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 93.44214644250893 -103.89624083218142 -3.0000000000000284 + vertex 93.73693564691285 -104.21407807737721 -3.0000000000000284 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 93.73693564691285 -104.21407807737721 -3.0000000000000284 + vertex 94.17856413219633 -104.41387892238646 -3.0000000000000284 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 94.17856413219633 -104.41387892238646 -3.0000000000000284 + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 94.73693564691285 -104.48202726980834 -3.0000000000000284 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 124.45058190463727 -100.42011377814154 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 124.45058190463727 -100.42011377814154 -3.000000000000051 + vertex 123.76440978664102 -100.2362545132557 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 123.76440978664102 -100.2362545132557 -3.000000000000051 + vertex 123.12058899123211 -99.93603594587707 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 123.12058899123211 -99.93603594587707 -3.000000000000051 + vertex 122.53868168748998 -99.52858006525757 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 122.53868168748998 -99.52858006525757 -3.000000000000051 + vertex 122.03636883437957 -99.02626721214715 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 122.03636883437957 -99.02626721214715 -3.000000000000051 + vertex 121.62891295376006 -98.44435990840505 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.62891295376006 -98.44435990840505 -3.000000000000051 + vertex 121.32869438638144 -97.80053911299613 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.32869438638144 -97.80053911299613 -3.000000000000051 + vertex 121.14483512149559 -97.11436699499987 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.14483512149559 -97.11436699499987 -3.000000000000051 + vertex 121.07305832758566 -96.49857203241152 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.07305832758566 -96.49857203241152 -3.000000000000062 + vertex 121.13921260616522 -95.74242516819551 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.13921260616522 -95.74242516819551 -3.000000000000062 + vertex 121.14483512149559 -95.69901809900358 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.14483512149559 -95.69901809900358 -3.000000000000051 + vertex 121.33566537762498 -95.00925344381994 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.33566537762498 -95.00925344381994 -3.000000000000062 + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 113.13435723985393 -100.48202726980836 -3.0000000000000395 + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 143.55963228918762 -47.78390505010474 -3.000000000000062 + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 121.13921260616522 -95.74242516819551 -3.000000000000062 + vertex 121.07305832758566 -96.49857203241152 -3.000000000000062 + vertex 121.08292162982879 -96.40669254700173 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 124.45058190463727 -100.42011377814154 -3.000000000000051 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 125.15825635263542 -100.48202726980836 -3.000000000000051 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 125.15825635263542 -100.48202726980836 -3.000000000000051 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 150.55309081768115 -100.48202726980838 -3.0000000000000733 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 150.55309081768115 -100.48202726980838 -3.0000000000000733 + vertex 150.02753457015433 -104.48202726980838 -3.0000000000000733 + vertex 162.26899907810125 -80.1894789059449 -3.000000000000062 + endloop +endfacet +facet normal 3.10220314556862e-16 7.227945163972765e-17 1.0 + outer loop + vertex 121.65644752391407 -94.32133391112714 -3.000000000000062 + vertex 142.51289504782764 -58.196907134314685 -3.000000000000062 + vertex 121.62891295376006 -94.3690251855984 -3.000000000000051 + endloop +endfacet +facet normal 0.49892946161930196 0.8641711769176166 -0.0654031292301445 + outer loop + vertex 122.39832559627791 -84.43636339677167 -31.233685693359433 + vertex 126.07090400079386 -86.67527100536981 -32.800000000000054 + vertex 122.34699476452076 -84.5252710053698 -32.800000000000054 + endloop +endfacet +facet normal 0.49892946161930196 0.8641711769176166 -0.0654031292301445 + outer loop + vertex 126.07090400079386 -86.67527100536981 -32.800000000000054 + vertex 122.39832559627791 -84.43636339677167 -31.233685693359433 + vertex 126.12223483255102 -86.58636339677167 -31.233685693359433 + endloop +endfacet +facet normal 0.4903926402016156 0.8493849684870416 -0.19509032201612717 + outer loop + vertex 122.55143980678636 -84.17116180481023 -29.6941714587698 + vertex 126.12223483255102 -86.58636339677167 -31.233685693359433 + vertex 122.39832559627791 -84.43636339677167 -31.233685693359433 + endloop +endfacet +facet normal 0.4903926402016156 0.8493849684870416 -0.19509032201612717 + outer loop + vertex 126.12223483255102 -86.58636339677167 -31.233685693359433 + vertex 122.55143980678636 -84.17116180481023 -29.6941714587698 + vertex 126.27534904305944 -86.32116180481025 -29.6941714587698 + endloop +endfacet +facet normal 0.47346506474755257 0.8200655477516486 -0.321439465303165 + outer loop + vertex 122.80371756945306 -83.73420390225172 -28.207798811618975 + vertex 126.27534904305944 -86.32116180481025 -29.6941714587698 + vertex 122.55143980678636 -84.17116180481023 -29.6941714587698 + endloop +endfacet +facet normal 0.47346506474755257 0.8200655477516486 -0.321439465303165 + outer loop + vertex 126.27534904305944 -86.32116180481025 -29.6941714587698 + vertex 122.80371756945306 -83.73420390225172 -28.207798811618975 + vertex 126.52762680572613 -85.88420390225173 -28.207798811618975 + endloop +endfacet +facet normal 0.44843637076634585 0.7767145781291053 -0.4422886902189955 + outer loop + vertex 123.15084234181414 -83.13296615995655 -26.800000000000054 + vertex 126.52762680572613 -85.88420390225173 -28.207798811618975 + vertex 122.80371756945306 -83.73420390225172 -28.207798811618975 + endloop +endfacet +facet normal 0.44843637076634585 0.7767145781291053 -0.4422886902189955 + outer loop + vertex 126.52762680572613 -85.88420390225173 -28.207798811618975 + vertex 123.15084234181414 -83.13296615995655 -26.800000000000054 + vertex 126.87475157808723 -85.28296615995656 -26.800000000000054 + endloop +endfacet +facet normal 0.4157348061512734 0.7200738067288033 -0.5555702330196006 + outer loop + vertex 123.58687472277336 -82.37773592238995 -25.4948628518954 + vertex 126.87475157808723 -85.28296615995656 -26.800000000000054 + vertex 123.15084234181414 -83.13296615995655 -26.800000000000054 + endloop +endfacet +facet normal 0.4157348061512734 0.7200738067288033 -0.5555702330196006 + outer loop + vertex 126.87475157808723 -85.28296615995656 -26.800000000000054 + vertex 123.58687472277336 -82.37773592238995 -25.4948628518954 + vertex 127.31078395904645 -84.52773592238995 -25.4948628518954 + endloop +endfacet +facet normal 0.37591990373948686 0.6511123728531923 -0.6593458151000737 + outer loop + vertex 124.1043540774015 -81.48143538830607 -24.314718625761483 + vertex 127.31078395904645 -84.52773592238995 -25.4948628518954 + vertex 123.58687472277336 -82.37773592238995 -25.4948628518954 + endloop +endfacet +facet normal 0.37591990373948686 0.6511123728531923 -0.6593458151000737 + outer loop + vertex 127.31078395904645 -84.52773592238995 -25.4948628518954 + vertex 124.1043540774015 -81.48143538830607 -24.314718625761483 + vertex 127.82826331367458 -83.63143538830607 -24.314718625761483 + endloop +endfacet +facet normal 0.3296729075500369 0.5710102257556209 -0.7518398074789735 + outer loop + vertex 128.41833542674155 -82.60940050834459 -23.279759916505228 + vertex 124.1043540774015 -81.48143538830607 -24.314718625761483 + vertex 124.69442619046845 -80.45940050834457 -23.279759916505228 + endloop +endfacet +facet normal 0.3296729075500369 0.5710102257556209 -0.7518398074789735 + outer loop + vertex 124.1043540774015 -81.48143538830607 -24.314718625761483 + vertex 128.41833542674155 -82.60940050834459 -23.279759916505228 + vertex 127.82826331367458 -83.63143538830607 -24.314718625761483 + endloop +endfacet +facet normal 0.2777851165097979 0.48113793538140986 -0.8314696123025498 + outer loop + vertex 129.07090400079386 -81.47911858266316 -22.40769515458679 + vertex 124.69442619046845 -80.45940050834457 -23.279759916505228 + vertex 125.34699476452077 -79.32911858266316 -22.40769515458679 + endloop +endfacet +facet normal 0.2777851165097979 0.48113793538140986 -0.8314696123025498 + outer loop + vertex 124.69442619046845 -80.45940050834457 -23.279759916505228 + vertex 129.07090400079386 -81.47911858266316 -22.40769515458679 + vertex 128.41833542674155 -82.60940050834459 -23.279759916505228 + endloop +endfacet +facet normal 0.2211443451095007 0.38303324153620094 -0.8968727415326883 + outer loop + vertex 129.77480340660333 -80.25992904838364 -21.71344560986461 + vertex 125.34699476452077 -79.32911858266316 -22.40769515458679 + vertex 126.05089417033024 -78.10992904838363 -21.71344560986461 + endloop +endfacet +facet normal 0.2211443451095007 0.38303324153620094 -0.8968727415326883 + outer loop + vertex 125.34699476452077 -79.32911858266316 -22.40769515458679 + vertex 129.77480340660333 -80.25992904838364 -21.71344560986461 + vertex 129.07090400079386 -81.47911858266316 -22.40769515458679 + endloop +endfacet +facet normal 0.16071973265158207 0.2783747427314266 -0.9469301294951049 + outer loop + vertex 130.51798973017873 -78.97269257646072 -21.208890084531234 + vertex 126.05089417033024 -78.10992904838363 -21.71344560986461 + vertex 126.79408049390564 -76.82269257646071 -21.208890084531234 + endloop +endfacet +facet normal 0.16071973265158207 0.2783747427314266 -0.9469301294951049 + outer loop + vertex 126.05089417033024 -78.10992904838363 -21.71344560986461 + vertex 130.51798973017873 -78.97269257646072 -21.208890084531234 + vertex 129.77480340660333 -80.25992904838364 -21.71344560986461 + endloop +endfacet +facet normal 0.09754516100806396 0.16895317489845324 -0.9807852804032307 + outer loop + vertex 131.28774684747356 -77.63943413981835 -20.90266166351433 + vertex 126.79408049390564 -76.82269257646071 -21.208890084531234 + vertex 127.56383761120046 -75.48943413981834 -20.90266166351433 + endloop +endfacet +facet normal 0.09754516100806396 0.16895317489845324 -0.9807852804032307 + outer loop + vertex 126.79408049390564 -76.82269257646071 -21.208890084531234 + vertex 131.28774684747356 -77.63943413981835 -20.90266166351433 + vertex 130.51798973017873 -78.97269257646072 -21.208890084531234 + endloop +endfacet +facet normal 0.032701564615072155 0.056640771400301514 -0.9978589232386036 + outer loop + vertex 132.07090400079386 -76.28296615995656 -20.80000000000005 + vertex 127.56383761120046 -75.48943413981834 -20.90266166351433 + vertex 128.34699476452076 -74.13296615995655 -20.80000000000005 + endloop +endfacet +facet normal 0.032701564615072155 0.056640771400301514 -0.9978589232386036 + outer loop + vertex 127.56383761120046 -75.48943413981834 -20.90266166351433 + vertex 132.07090400079386 -76.28296615995656 -20.80000000000005 + vertex 131.28774684747356 -77.63943413981835 -20.90266166351433 + endloop +endfacet +facet normal -0.032701564615072155 -0.056640771400301514 -0.9978589232386036 + outer loop + vertex 132.8540611541142 -74.92649818009477 -20.90266166351433 + vertex 128.34699476452076 -74.13296615995655 -20.80000000000005 + vertex 129.1301519178411 -72.77649818009475 -20.90266166351433 + endloop +endfacet +facet normal -0.032701564615072155 -0.056640771400301514 -0.9978589232386036 + outer loop + vertex 128.34699476452076 -74.13296615995655 -20.80000000000005 + vertex 132.8540611541142 -74.92649818009477 -20.90266166351433 + vertex 132.07090400079386 -76.28296615995656 -20.80000000000005 + endloop +endfacet +facet normal -0.0975451610080657 -0.16895317489845627 -0.98078528040323 + outer loop + vertex 133.623818271409 -73.5932397434524 -21.208890084531237 + vertex 129.1301519178411 -72.77649818009475 -20.90266166351433 + vertex 129.89990903513592 -71.4432397434524 -21.208890084531237 + endloop +endfacet +facet normal -0.0975451610080657 -0.16895317489845627 -0.98078528040323 + outer loop + vertex 129.1301519178411 -72.77649818009475 -20.90266166351433 + vertex 133.623818271409 -73.5932397434524 -21.208890084531237 + vertex 132.8540611541142 -74.92649818009477 -20.90266166351433 + endloop +endfacet +facet normal -0.16071973265157824 -0.27837474273141993 -0.9469301294951075 + outer loop + vertex 134.36700459498442 -72.30600327152945 -21.71344560986461 + vertex 129.89990903513592 -71.4432397434524 -21.208890084531237 + vertex 130.64309535871132 -70.15600327152943 -21.71344560986461 + endloop +endfacet +facet normal -0.16071973265157824 -0.27837474273141993 -0.9469301294951075 + outer loop + vertex 129.89990903513592 -71.4432397434524 -21.208890084531237 + vertex 134.36700459498442 -72.30600327152945 -21.71344560986461 + vertex 133.623818271409 -73.5932397434524 -21.208890084531237 + endloop +endfacet +facet normal -0.22114434510950218 -0.3830332415362035 -0.8968727415326869 + outer loop + vertex 135.07090400079386 -71.08681373724991 -22.407695154586794 + vertex 130.64309535871132 -70.15600327152943 -21.71344560986461 + vertex 131.3469947645208 -68.9368137372499 -22.407695154586794 + endloop +endfacet +facet normal -0.22114434510950218 -0.3830332415362035 -0.8968727415326869 + outer loop + vertex 130.64309535871132 -70.15600327152943 -21.71344560986461 + vertex 135.07090400079386 -71.08681373724991 -22.407695154586794 + vertex 134.36700459498442 -72.30600327152945 -21.71344560986461 + endloop +endfacet +facet normal -0.2777851165098012 -0.4811379353814156 -0.8314696123025452 + outer loop + vertex 135.7234725748462 -69.95653181156851 -23.279759916505235 + vertex 131.3469947645208 -68.9368137372499 -22.407695154586794 + vertex 131.9995633385731 -67.8065318115685 -23.279759916505235 + endloop +endfacet +facet normal -0.2777851165098012 -0.4811379353814156 -0.8314696123025452 + outer loop + vertex 131.3469947645208 -68.9368137372499 -22.407695154586794 + vertex 135.7234725748462 -69.95653181156851 -23.279759916505235 + vertex 135.07090400079386 -71.08681373724991 -22.407695154586794 + endloop +endfacet +facet normal -0.3296729075500358 -0.571010225755619 -0.7518398074789752 + outer loop + vertex 136.31354468791315 -68.93449693160701 -24.314718625761483 + vertex 131.9995633385731 -67.8065318115685 -23.279759916505235 + vertex 132.58963545164005 -66.78449693160701 -24.314718625761483 + endloop +endfacet +facet normal -0.3296729075500358 -0.571010225755619 -0.7518398074789752 + outer loop + vertex 131.9995633385731 -67.8065318115685 -23.279759916505235 + vertex 136.31354468791315 -68.93449693160701 -24.314718625761483 + vertex 135.7234725748462 -69.95653181156851 -23.279759916505235 + endloop +endfacet +facet normal -0.37591990373948836 -0.651112372853195 -0.6593458151000701 + outer loop + vertex 136.31354468791315 -68.93449693160701 -24.314718625761483 + vertex 133.10711480626819 -65.88819639752313 -25.494862851895416 + vertex 136.8310240425413 -68.03819639752314 -25.494862851895416 + endloop +endfacet +facet normal -0.37591990373948836 -0.651112372853195 -0.6593458151000701 + outer loop + vertex 133.10711480626819 -65.88819639752313 -25.494862851895416 + vertex 136.31354468791315 -68.93449693160701 -24.314718625761483 + vertex 132.58963545164005 -66.78449693160701 -24.314718625761483 + endloop +endfacet +facet normal -0.4157348061512729 -0.7200738067288024 -0.5555702330196023 + outer loop + vertex 136.8310240425413 -68.03819639752314 -25.494862851895416 + vertex 133.5431471872274 -65.13296615995654 -26.800000000000058 + vertex 137.2670564235005 -67.28296615995654 -26.800000000000058 + endloop +endfacet +facet normal -0.4157348061512729 -0.7200738067288024 -0.5555702330196023 + outer loop + vertex 133.5431471872274 -65.13296615995654 -26.800000000000058 + vertex 136.8310240425413 -68.03819639752314 -25.494862851895416 + vertex 133.10711480626819 -65.88819639752313 -25.494862851895416 + endloop +endfacet +facet normal -0.4484363707663462 -0.7767145781291058 -0.44228869021899403 + outer loop + vertex 137.2670564235005 -67.28296615995654 -26.800000000000058 + vertex 133.8902719595885 -64.53172841766136 -28.207798811618986 + vertex 137.6141811958616 -66.68172841766136 -28.207798811618986 + endloop +endfacet +facet normal -0.4484363707663462 -0.7767145781291058 -0.44228869021899403 + outer loop + vertex 133.8902719595885 -64.53172841766136 -28.207798811618986 + vertex 137.2670564235005 -67.28296615995654 -26.800000000000058 + vertex 133.5431471872274 -65.13296615995654 -26.800000000000058 + endloop +endfacet +facet normal -0.4734650647475524 -0.8200655477516484 -0.32143946530316614 + outer loop + vertex 137.6141811958616 -66.68172841766136 -28.207798811618986 + vertex 134.14254972225518 -64.09477051510284 -29.69417145876981 + vertex 137.86645895852828 -66.24477051510286 -29.69417145876981 + endloop +endfacet +facet normal -0.4734650647475524 -0.8200655477516484 -0.32143946530316614 + outer loop + vertex 134.14254972225518 -64.09477051510284 -29.69417145876981 + vertex 137.6141811958616 -66.68172841766136 -28.207798811618986 + vertex 133.8902719595885 -64.53172841766136 -28.207798811618986 + endloop +endfacet +facet normal -0.4903926402016156 -0.8493849684870416 -0.19509032201612717 + outer loop + vertex 137.86645895852828 -66.24477051510286 -29.69417145876981 + vertex 134.29566393276363 -63.829568923141416 -31.233685693359437 + vertex 138.01957316903673 -65.97956892314143 -31.233685693359437 + endloop +endfacet +facet normal -0.4903926402016156 -0.8493849684870416 -0.19509032201612717 + outer loop + vertex 134.29566393276363 -63.829568923141416 -31.233685693359437 + vertex 137.86645895852828 -66.24477051510286 -29.69417145876981 + vertex 134.14254972225518 -64.09477051510284 -29.69417145876981 + endloop +endfacet +facet normal -0.4989294616193019 -0.8641711769176165 -0.06540312923014474 + outer loop + vertex 138.01957316903673 -65.97956892314143 -31.233685693359437 + vertex 134.3469947645208 -63.74066131454328 -32.800000000000054 + vertex 138.07090400079386 -65.89066131454328 -32.800000000000054 + endloop +endfacet +facet normal -0.4989294616193019 -0.8641711769176165 -0.06540312923014474 + outer loop + vertex 134.3469947645208 -63.74066131454328 -32.800000000000054 + vertex 138.01957316903673 -65.97956892314143 -31.233685693359437 + vertex 134.29566393276363 -63.829568923141416 -31.233685693359437 + endloop +endfacet +facet normal -0.49892946161930196 -0.8641711769176166 0.06540312923014403 + outer loop + vertex 138.07090400079386 -65.89066131454328 -32.800000000000054 + vertex 134.29566393276363 -63.829568923141416 -34.36631430664068 + vertex 138.01957316903673 -65.97956892314143 -34.36631430664068 + endloop +endfacet +facet normal -0.49892946161930196 -0.8641711769176166 0.06540312923014403 + outer loop + vertex 134.29566393276363 -63.829568923141416 -34.36631430664068 + vertex 138.07090400079386 -65.89066131454328 -32.800000000000054 + vertex 134.3469947645208 -63.74066131454328 -32.800000000000054 + endloop +endfacet +facet normal -0.49039264020161555 -0.8493849684870416 0.19509032201612783 + outer loop + vertex 138.01957316903673 -65.97956892314143 -34.36631430664068 + vertex 134.14254972225518 -64.09477051510284 -35.905828541230306 + vertex 137.86645895852828 -66.24477051510286 -35.905828541230306 + endloop +endfacet +facet normal -0.49039264020161555 -0.8493849684870416 0.19509032201612783 + outer loop + vertex 134.14254972225518 -64.09477051510284 -35.905828541230306 + vertex 138.01957316903673 -65.97956892314143 -34.36631430664068 + vertex 134.29566393276363 -63.829568923141416 -34.36631430664068 + endloop +endfacet +facet normal -0.47346506474755257 -0.8200655477516486 0.321439465303165 + outer loop + vertex 137.86645895852828 -66.24477051510286 -35.905828541230306 + vertex 133.8902719595885 -64.53172841766136 -37.392201188381144 + vertex 137.6141811958616 -66.68172841766136 -37.392201188381144 + endloop +endfacet +facet normal -0.47346506474755257 -0.8200655477516486 0.321439465303165 + outer loop + vertex 133.8902719595885 -64.53172841766136 -37.392201188381144 + vertex 137.86645895852828 -66.24477051510286 -35.905828541230306 + vertex 134.14254972225518 -64.09477051510284 -35.905828541230306 + endloop +endfacet +facet normal -0.44843637076634585 -0.7767145781291053 0.4422886902189955 + outer loop + vertex 137.6141811958616 -66.68172841766136 -37.392201188381144 + vertex 133.5431471872274 -65.13296615995654 -38.80000000000006 + vertex 137.2670564235005 -67.28296615995654 -38.80000000000006 + endloop +endfacet +facet normal -0.44843637076634585 -0.7767145781291053 0.4422886902189955 + outer loop + vertex 133.5431471872274 -65.13296615995654 -38.80000000000006 + vertex 137.6141811958616 -66.68172841766136 -37.392201188381144 + vertex 133.8902719595885 -64.53172841766136 -37.392201188381144 + endloop +endfacet +facet normal -0.4157348061512695 -0.7200738067287966 0.5555702330196122 + outer loop + vertex 137.2670564235005 -67.28296615995654 -38.80000000000006 + vertex 133.10711480626819 -65.88819639752316 -40.10513714810471 + vertex 136.8310240425413 -68.03819639752317 -40.10513714810471 + endloop +endfacet +facet normal -0.4157348061512695 -0.7200738067287966 0.5555702330196122 + outer loop + vertex 133.10711480626819 -65.88819639752316 -40.10513714810471 + vertex 137.2670564235005 -67.28296615995654 -38.80000000000006 + vertex 133.5431471872274 -65.13296615995654 -38.80000000000006 + endloop +endfacet +facet normal -0.3759199037394911 -0.6511123728531998 0.6593458151000637 + outer loop + vertex 136.8310240425413 -68.03819639752317 -40.10513714810471 + vertex 132.58963545164005 -66.78449693160701 -41.285281374238636 + vertex 136.31354468791315 -68.93449693160701 -41.285281374238636 + endloop +endfacet +facet normal -0.3759199037394911 -0.6511123728531998 0.6593458151000637 + outer loop + vertex 132.58963545164005 -66.78449693160701 -41.285281374238636 + vertex 136.8310240425413 -68.03819639752317 -40.10513714810471 + vertex 133.10711480626819 -65.88819639752316 -40.10513714810471 + endloop +endfacet +facet normal -0.3296729075500358 -0.571010225755619 0.7518398074789752 + outer loop + vertex 135.7234725748462 -69.95653181156851 -42.32024008349488 + vertex 132.58963545164005 -66.78449693160701 -41.285281374238636 + vertex 131.9995633385731 -67.8065318115685 -42.32024008349488 + endloop +endfacet +facet normal -0.3296729075500358 -0.571010225755619 0.7518398074789752 + outer loop + vertex 132.58963545164005 -66.78449693160701 -41.285281374238636 + vertex 135.7234725748462 -69.95653181156851 -42.32024008349488 + vertex 136.31354468791315 -68.93449693160701 -41.285281374238636 + endloop +endfacet +facet normal -0.2777851165097979 -0.48113793538140986 0.8314696123025498 + outer loop + vertex 135.07090400079386 -71.08681373724993 -43.192304845413325 + vertex 131.9995633385731 -67.8065318115685 -42.32024008349488 + vertex 131.34699476452076 -68.93681373724992 -43.192304845413325 + endloop +endfacet +facet normal -0.2777851165097979 -0.48113793538140986 0.8314696123025498 + outer loop + vertex 131.9995633385731 -67.8065318115685 -42.32024008349488 + vertex 135.07090400079386 -71.08681373724993 -43.192304845413325 + vertex 135.7234725748462 -69.95653181156851 -42.32024008349488 + endloop +endfacet +facet normal -0.2211443451095007 -0.38303324153620094 0.8968727415326883 + outer loop + vertex 134.36700459498442 -72.30600327152946 -43.8865543901355 + vertex 131.34699476452076 -68.93681373724992 -43.192304845413325 + vertex 130.6430953587113 -70.15600327152946 -43.8865543901355 + endloop +endfacet +facet normal -0.2211443451095007 -0.38303324153620094 0.8968727415326883 + outer loop + vertex 131.34699476452076 -68.93681373724992 -43.192304845413325 + vertex 134.36700459498442 -72.30600327152946 -43.8865543901355 + vertex 135.07090400079386 -71.08681373724993 -43.192304845413325 + endloop +endfacet +facet normal -0.16071973265158207 -0.2783747427314266 0.9469301294951049 + outer loop + vertex 133.623818271409 -73.5932397434524 -44.391109915468874 + vertex 130.6430953587113 -70.15600327152946 -43.8865543901355 + vertex 129.89990903513592 -71.4432397434524 -44.391109915468874 + endloop +endfacet +facet normal -0.16071973265158207 -0.2783747427314266 0.9469301294951049 + outer loop + vertex 130.6430953587113 -70.15600327152946 -43.8865543901355 + vertex 133.623818271409 -73.5932397434524 -44.391109915468874 + vertex 134.36700459498442 -72.30600327152946 -43.8865543901355 + endloop +endfacet +facet normal -0.09754516100806396 -0.16895317489845324 0.9807852804032307 + outer loop + vertex 132.8540611541142 -74.92649818009477 -44.69733833648578 + vertex 129.89990903513592 -71.4432397434524 -44.391109915468874 + vertex 129.1301519178411 -72.77649818009475 -44.69733833648578 + endloop +endfacet +facet normal -0.09754516100806396 -0.16895317489845324 0.9807852804032307 + outer loop + vertex 129.89990903513592 -71.4432397434524 -44.391109915468874 + vertex 132.8540611541142 -74.92649818009477 -44.69733833648578 + vertex 133.623818271409 -73.5932397434524 -44.391109915468874 + endloop +endfacet +facet normal -0.032701564615072155 -0.056640771400301514 0.9978589232386036 + outer loop + vertex 132.07090400079386 -76.28296615995656 -44.800000000000054 + vertex 129.1301519178411 -72.77649818009475 -44.69733833648578 + vertex 128.34699476452076 -74.13296615995655 -44.800000000000054 + endloop +endfacet +facet normal -0.032701564615072155 -0.056640771400301514 0.9978589232386036 + outer loop + vertex 129.1301519178411 -72.77649818009475 -44.69733833648578 + vertex 132.07090400079386 -76.28296615995656 -44.800000000000054 + vertex 132.8540611541142 -74.92649818009477 -44.69733833648578 + endloop +endfacet +facet normal 0.032701564615072155 0.056640771400301514 0.9978589232386036 + outer loop + vertex 131.28774684747356 -77.63943413981835 -44.69733833648578 + vertex 128.34699476452076 -74.13296615995655 -44.800000000000054 + vertex 127.56383761120046 -75.48943413981834 -44.69733833648578 + endloop +endfacet +facet normal 0.032701564615072155 0.056640771400301514 0.9978589232386036 + outer loop + vertex 128.34699476452076 -74.13296615995655 -44.800000000000054 + vertex 131.28774684747356 -77.63943413981835 -44.69733833648578 + vertex 132.07090400079386 -76.28296615995656 -44.800000000000054 + endloop +endfacet +facet normal 0.09754516100806396 0.16895317489845324 0.9807852804032307 + outer loop + vertex 130.51798973017873 -78.97269257646072 -44.391109915468874 + vertex 127.56383761120046 -75.48943413981834 -44.69733833648578 + vertex 126.79408049390564 -76.82269257646071 -44.391109915468874 + endloop +endfacet +facet normal 0.09754516100806396 0.16895317489845324 0.9807852804032307 + outer loop + vertex 127.56383761120046 -75.48943413981834 -44.69733833648578 + vertex 130.51798973017873 -78.97269257646072 -44.391109915468874 + vertex 131.28774684747356 -77.63943413981835 -44.69733833648578 + endloop +endfacet +facet normal 0.16071973265158207 0.2783747427314266 0.9469301294951049 + outer loop + vertex 129.77480340660333 -80.25992904838364 -43.8865543901355 + vertex 126.79408049390564 -76.82269257646071 -44.391109915468874 + vertex 126.05089417033024 -78.10992904838363 -43.8865543901355 + endloop +endfacet +facet normal 0.16071973265158207 0.2783747427314266 0.9469301294951049 + outer loop + vertex 126.79408049390564 -76.82269257646071 -44.391109915468874 + vertex 129.77480340660333 -80.25992904838364 -43.8865543901355 + vertex 130.51798973017873 -78.97269257646072 -44.391109915468874 + endloop +endfacet +facet normal 0.2211443451094986 0.3830332415361973 0.8968727415326905 + outer loop + vertex 129.07090400079386 -81.47911858266319 -43.19230484541332 + vertex 126.05089417033024 -78.10992904838363 -43.8865543901355 + vertex 125.34699476452076 -79.32911858266318 -43.19230484541332 + endloop +endfacet +facet normal 0.2211443451094986 0.3830332415361973 0.8968727415326905 + outer loop + vertex 126.05089417033024 -78.10992904838363 -43.8865543901355 + vertex 129.07090400079386 -81.47911858266319 -43.19230484541332 + vertex 129.77480340660333 -80.25992904838364 -43.8865543901355 + endloop +endfacet +facet normal 0.2777851165098018 0.4811379353814166 0.8314696123025443 + outer loop + vertex 128.41833542674155 -82.60940050834459 -42.32024008349487 + vertex 125.34699476452076 -79.32911858266318 -43.19230484541332 + vertex 124.69442619046845 -80.45940050834457 -42.32024008349487 + endloop +endfacet +facet normal 0.2777851165098018 0.4811379353814166 0.8314696123025443 + outer loop + vertex 125.34699476452076 -79.32911858266318 -43.19230484541332 + vertex 128.41833542674155 -82.60940050834459 -42.32024008349487 + vertex 129.07090400079386 -81.47911858266319 -43.19230484541332 + endloop +endfacet +facet normal 0.3296729075500358 0.571010225755619 0.7518398074789752 + outer loop + vertex 127.82826331367458 -83.63143538830607 -41.28528137423862 + vertex 124.69442619046845 -80.45940050834457 -42.32024008349487 + vertex 124.1043540774015 -81.48143538830607 -41.28528137423862 + endloop +endfacet +facet normal 0.3296729075500358 0.571010225755619 0.7518398074789752 + outer loop + vertex 124.69442619046845 -80.45940050834457 -42.32024008349487 + vertex 127.82826331367458 -83.63143538830607 -41.28528137423862 + vertex 128.41833542674155 -82.60940050834459 -42.32024008349487 + endloop +endfacet +facet normal 0.3759199037394875 0.6511123728531937 0.6593458151000718 + outer loop + vertex 123.58687472277336 -82.37773592238995 -40.105137148104696 + vertex 127.82826331367458 -83.63143538830607 -41.28528137423862 + vertex 124.1043540774015 -81.48143538830607 -41.28528137423862 + endloop +endfacet +facet normal 0.3759199037394875 0.6511123728531937 0.6593458151000718 + outer loop + vertex 127.82826331367458 -83.63143538830607 -41.28528137423862 + vertex 123.58687472277336 -82.37773592238995 -40.105137148104696 + vertex 127.31078395904645 -84.52773592238995 -40.105137148104696 + endloop +endfacet +facet normal 0.4157348061512732 0.7200738067288028 0.5555702330196015 + outer loop + vertex 123.15084234181414 -83.13296615995655 -38.800000000000054 + vertex 127.31078395904645 -84.52773592238995 -40.105137148104696 + vertex 123.58687472277336 -82.37773592238995 -40.105137148104696 + endloop +endfacet +facet normal 0.4157348061512732 0.7200738067288028 0.5555702330196015 + outer loop + vertex 127.31078395904645 -84.52773592238995 -40.105137148104696 + vertex 123.15084234181414 -83.13296615995655 -38.800000000000054 + vertex 126.87475157808723 -85.28296615995656 -38.800000000000054 + endloop +endfacet +facet normal 0.44843637076634596 0.7767145781291055 0.4422886902189947 + outer loop + vertex 122.80371756945306 -83.73420390225172 -37.39220118838113 + vertex 126.87475157808723 -85.28296615995656 -38.800000000000054 + vertex 123.15084234181414 -83.13296615995655 -38.800000000000054 + endloop +endfacet +facet normal 0.44843637076634596 0.7767145781291055 0.4422886902189947 + outer loop + vertex 126.87475157808723 -85.28296615995656 -38.800000000000054 + vertex 122.80371756945306 -83.73420390225172 -37.39220118838113 + vertex 126.52762680572613 -85.88420390225173 -37.39220118838113 + endloop +endfacet +facet normal 0.47346506474755257 0.8200655477516486 0.321439465303165 + outer loop + vertex 122.55143980678636 -84.17116180481023 -35.9058285412303 + vertex 126.52762680572613 -85.88420390225173 -37.39220118838113 + vertex 122.80371756945306 -83.73420390225172 -37.39220118838113 + endloop +endfacet +facet normal 0.47346506474755257 0.8200655477516486 0.321439465303165 + outer loop + vertex 126.52762680572613 -85.88420390225173 -37.39220118838113 + vertex 122.55143980678636 -84.17116180481023 -35.9058285412303 + vertex 126.27534904305944 -86.32116180481025 -35.9058285412303 + endloop +endfacet +facet normal 0.4903926402016156 0.8493849684870416 0.19509032201612717 + outer loop + vertex 122.39832559627791 -84.43636339677167 -34.36631430664067 + vertex 126.27534904305944 -86.32116180481025 -35.9058285412303 + vertex 122.55143980678636 -84.17116180481023 -35.9058285412303 + endloop +endfacet +facet normal 0.4903926402016156 0.8493849684870416 0.19509032201612717 + outer loop + vertex 126.27534904305944 -86.32116180481025 -35.9058285412303 + vertex 122.39832559627791 -84.43636339677167 -34.36631430664067 + vertex 126.12223483255102 -86.58636339677167 -34.36631430664067 + endloop +endfacet +facet normal 0.4989294616193019 0.8641711769176165 0.06540312923014474 + outer loop + vertex 122.34699476452076 -84.5252710053698 -32.800000000000054 + vertex 126.12223483255102 -86.58636339677167 -34.36631430664067 + vertex 122.39832559627791 -84.43636339677167 -34.36631430664067 + endloop +endfacet +facet normal 0.4989294616193019 0.8641711769176165 0.06540312923014474 + outer loop + vertex 126.12223483255102 -86.58636339677167 -34.36631430664067 + vertex 122.34699476452076 -84.5252710053698 -32.800000000000054 + vertex 126.07090400079386 -86.67527100536981 -32.800000000000054 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 158.54010736919759 -95.49094968042887 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 156.7675822461111 -99.07009060718198 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 156.7675822461111 -99.07009060718198 -62.60000000000005 + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + vertex 155.39369720768377 -101.14069194162175 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 156.7675822461111 -99.07009060718198 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 157.09895309600955 -98.81582081102533 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 157.09895309600955 -98.81582081102533 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 157.4848426238455 -98.65598013501793 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 157.4848426238455 -98.65598013501793 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 157.89895309600956 -98.60146145708043 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 157.89895309600956 -98.60146145708043 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 158.3130635681736 -98.65598013501793 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.3130635681736 -98.65598013501793 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 158.65254293449578 -98.09620556875467 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.3130635681736 -98.65598013501793 -62.60000000000005 + vertex 158.65254293449578 -98.09620556875467 -62.60000000000005 + vertex 158.69895309600955 -98.81582081102533 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.69895309600955 -98.81582081102533 -62.60000000000005 + vertex 158.65254293449578 -98.09620556875467 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.69895309600955 -98.81582081102533 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 159.03032394590804 -99.07009060718195 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.03032394590804 -99.07009060718195 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 159.28459374206466 -99.40146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.28459374206466 -99.40146145708044 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 159.4444344180721 -99.78735098491639 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.4444344180721 -99.78735098491639 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 159.4989530960096 -100.20146145708043 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.4989530960096 -100.20146145708043 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 159.4444344180721 -100.61557192924447 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.4444344180721 -100.61557192924447 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.89895309600956 -88.0771058040983 -62.60000000000005 + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + vertex 164.56758224611107 -87.82283600794166 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + vertex 164.89895309600956 -88.0771058040983 -62.60000000000005 + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 164.89895309600956 -88.0771058040983 -62.60000000000005 + vertex 165.28484262384555 -88.2369464801057 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 165.28484262384555 -88.2369464801057 -62.60000000000005 + vertex 165.69895309600957 -88.2914651580432 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 165.69895309600957 -88.2914651580432 -62.60000000000005 + vertex 166.1130635681736 -88.23694648010569 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 166.1130635681736 -88.23694648010569 -62.60000000000005 + vertex 166.49895309600956 -88.07710580409828 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 166.49895309600956 -88.07710580409828 -62.60000000000005 + vertex 166.83032394590805 -87.82283600794165 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 166.83032394590805 -87.82283600794165 -62.60000000000005 + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.5526158302817 -84.3451278923153 -62.60000000000005 + vertex 161.79369720768378 -89.05556677318093 -62.60000000000005 + vertex 164.39369720768377 -84.55223467350186 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 161.79369720768378 -89.05556677318093 -62.60000000000005 + vertex 164.5526158302817 -84.3451278923153 -62.60000000000005 + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + vertex 164.5526158302817 -84.3451278923153 -62.60000000000005 + vertex 164.75972261146825 -84.18620926971741 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + vertex 164.75972261146825 -84.18620926971741 -62.600000000000065 + vertex 165.0009035663657 -84.08630884721279 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + vertex 165.0009035663657 -84.08630884721279 -62.600000000000065 + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + vertex 164.15347177394705 -86.27735468587916 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 164.15347177394705 -86.27735468587916 -62.60000000000005 + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + vertex 164.15347177394705 -86.27735468587916 -62.60000000000005 + vertex 164.09895309600955 -86.69146515804319 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + vertex 164.09895309600955 -86.69146515804319 -62.60000000000005 + vertex 164.15347177394705 -87.10557563020723 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + vertex 164.15347177394705 -87.10557563020723 -62.60000000000005 + vertex 164.31331244995442 -87.49146515804318 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + vertex 164.31331244995442 -87.49146515804318 -62.60000000000005 + vertex 164.56758224611107 -87.82283600794166 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + vertex 164.56758224611107 -87.82283600794166 -62.60000000000005 + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 176.8448477799091 -90.58620926971743 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 181.5552866607747 -93.34512789231532 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + vertex 181.5552866607747 -93.34512789231532 -62.600000000000044 + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + vertex 181.5552866607747 -93.34512789231532 -62.600000000000044 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 178.7677951218588 -98.85556677318094 -62.60000000000005 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.7677951218588 -98.85556677318094 -62.60000000000005 + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 181.84817987958814 -94.05223467350186 -62.60000000000002 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + vertex 181.84817987958814 -94.05223467350186 -62.60000000000002 + vertex 181.81410570587718 -94.31105371860438 -62.60000000000002 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + vertex 181.81410570587718 -94.31105371860438 -62.60000000000002 + vertex 181.71420528337256 -94.55223467350186 -62.60000000000002 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 177.3553595565606 -98.5019769346947 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.3553595565606 -98.5019769346947 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + vertex 178.7677951218588 -98.85556677318094 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.78249996400035 -98.21085935300758 -62.60000000000005 + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + vertex 163.78249996400035 -98.21085935300758 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 163.78249996400035 -98.21085935300758 -62.60000000000005 + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 166.2156826553102 -95.99646330756181 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.2156826553102 -95.99646330756181 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 166.6447629363245 -95.43727499835813 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.6447629363245 -95.43727499835813 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 167.20395124552817 -95.00819471734383 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.20395124552817 -95.00819471734383 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 167.8551398237514 -94.73846357658132 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.8551398237514 -94.73846357658132 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 168.55395124552817 -94.6464633075618 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 168.55395124552817 -94.6464633075618 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 169.252762667305 -94.73846357658132 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.252762667305 -94.73846357658132 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.252762667305 -94.73846357658132 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 169.9039512455282 -95.00819471734383 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.9039512455282 -95.00819471734383 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 170.46313955473187 -95.43727499835813 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.46313955473187 -95.43727499835813 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 170.89221983574618 -95.99646330756181 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.89221983574618 -95.99646330756181 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 171.16195097650868 -96.64765188578501 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.16195097650868 -96.64765188578501 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 171.25395124552816 -97.3464633075618 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.25395124552816 -97.3464633075618 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 171.16195097650865 -98.04527472933862 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.16195097650865 -98.04527472933862 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 170.89221983574615 -98.6964633075618 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 155.39369720768377 -100.14069194162175 -62.600000000000044 + vertex 157.9936972076838 -95.63735984194264 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.39369720768377 -100.14069194162175 -62.600000000000044 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 155.29379678517915 -100.38187289651923 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.29379678517915 -100.38187289651923 -62.600000000000044 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 155.25972261146825 -100.64069194162175 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.25972261146825 -100.64069194162175 -62.600000000000044 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 155.29379678517915 -100.89951098672427 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.29379678517915 -100.89951098672427 -62.600000000000044 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 155.39369720768377 -101.14069194162175 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + vertex 164.56758224611104 -85.5600943081447 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.56758224611104 -85.5600943081447 -62.60000000000005 + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + vertex 164.89895309600954 -85.30582451198808 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.89895309600954 -85.30582451198808 -62.60000000000005 + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 164.89895309600954 -85.30582451198808 -62.60000000000005 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + vertex 165.2848426238455 -85.14598383598067 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 165.2848426238455 -85.14598383598067 -62.60000000000005 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + vertex 165.69895309600955 -85.09146515804318 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 165.69895309600955 -85.09146515804318 -62.60000000000005 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + vertex 166.11306356817357 -85.14598383598066 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.11306356817357 -85.14598383598066 -62.60000000000005 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.11306356817357 -85.14598383598066 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 166.49895309600953 -85.30582451198806 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.49895309600953 -85.30582451198806 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 166.83032394590802 -85.56009430814467 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.83032394590802 -85.56009430814467 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 167.08459374206464 -85.89146515804318 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.08459374206464 -85.89146515804318 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 167.24443441807207 -86.27735468587913 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.24443441807207 -86.27735468587913 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 167.29895309600957 -86.69146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.29895309600957 -86.69146515804317 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 167.24443441807207 -87.1055756302072 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.24443441807207 -87.1055756302072 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 170.0630547111473 -87.13261943123119 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 170.0630547111473 -87.13261943123119 -62.60000000000005 + vertex 169.70946487266107 -88.5450549965294 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.70946487266107 -88.5450549965294 -62.60000000000005 + vertex 170.0630547111473 -87.13261943123119 -62.60000000000005 + vertex 170.4094648726611 -87.3326194312312 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 166.6447629363245 -99.25565161676548 -62.60000000000005 + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.6447629363245 -99.25565161676548 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 166.2156826553102 -98.6964633075618 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.2156826553102 -98.6964633075618 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 165.9459515145477 -98.0452747293386 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 165.9459515145477 -98.0452747293386 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 165.85395124552818 -97.3464633075618 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 165.85395124552818 -97.3464633075618 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 165.9459515145477 -96.647651885785 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 165.9459515145477 -96.647651885785 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 166.2156826553102 -95.99646330756181 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 166.6447629363245 -99.25565161676548 -62.60000000000005 + vertex 167.20395124552817 -99.6847318977798 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 167.20395124552817 -99.6847318977798 -62.60000000000005 + vertex 167.85513982375136 -99.95446303854229 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 167.85513982375136 -99.95446303854229 -62.60000000000005 + vertex 168.55395124552817 -100.04646330756181 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 168.55395124552817 -100.04646330756181 -62.60000000000005 + vertex 169.252762667305 -99.95446303854229 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 169.252762667305 -99.95446303854229 -62.60000000000005 + vertex 169.9039512455282 -99.68473189777978 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 169.9039512455282 -99.68473189777978 -62.60000000000005 + vertex 170.46313955473187 -99.25565161676548 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 170.46313955473187 -99.25565161676548 -62.60000000000005 + vertex 170.89221983574615 -98.6964633075618 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 170.89221983574615 -98.6964633075618 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 176.2984376183953 -90.7326194312312 -62.60000000000005 + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + vertex 175.59843761839528 -91.9450549965294 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + vertex 176.2984376183953 -90.7326194312312 -62.60000000000005 + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 170.19108795200523 -101.91085935300757 -62.60000000000005 + vertex 170.3208507942464 -105.48610351731132 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.19108795200523 -101.91085935300757 -62.60000000000005 + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.3208507942464 -105.48610351731132 -62.60000000000005 + vertex 170.19108795200523 -101.91085935300757 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.3208507942464 -105.48610351731132 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 173.95535955656058 -104.3909496804289 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 172.5403202449453 -106.87009060718195 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.5403202449453 -106.87009060718195 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 172.7945900411019 -107.20146145708043 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.7945900411019 -107.20146145708043 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 172.95443071710932 -107.58735098491637 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.95443071710932 -107.58735098491637 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 173.0089493950468 -108.00146145708042 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 173.0089493950468 -108.00146145708042 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 172.95443071710932 -108.41557192924445 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.95443071710932 -108.41557192924445 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 172.7945900411019 -108.80146145708042 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.7945900411019 -108.80146145708042 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 174.96779512185879 -105.43735984194271 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + vertex 174.96779512185879 -105.43735984194271 -62.60000000000005 + vertex 172.10699892469066 -110.60661776791083 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.10699892469066 -110.60661776791083 -62.600000000000065 + vertex 174.96779512185879 -105.43735984194271 -62.60000000000005 + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.10699892469066 -110.60661776791083 -62.600000000000065 + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 172.34817987958812 -110.5067173454062 -62.60000000000008 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.34817987958812 -110.5067173454062 -62.60000000000008 + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 172.55528666077467 -110.34779872280829 -62.60000000000008 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.55528666077467 -110.34779872280829 -62.60000000000008 + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 172.71420528337256 -110.14069194162177 -62.60000000000008 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.3984376183953 -106.14787161859421 -62.60000000000005 + vertex 167.04484777990902 -107.56030718389242 -62.60000000000005 + vertex 166.69843761839527 -107.36030718389243 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.04484777990902 -107.56030718389242 -62.60000000000005 + vertex 167.3984376183953 -106.14787161859421 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 167.04484777990902 -107.56030718389242 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 170.0233087489917 -108.80146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + vertex 170.0233087489917 -108.80146145708044 -62.60000000000005 + vertex 170.27757854514834 -109.13283230697894 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + vertex 170.27757854514834 -109.13283230697894 -62.60000000000005 + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.0233087489917 -108.80146145708044 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 169.8634680729843 -108.41557192924448 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.8634680729843 -108.41557192924448 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 169.8089493950468 -108.00146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.8089493950468 -108.00146145708044 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 169.8634680729843 -107.58735098491641 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 169.8634680729843 -107.58735098491641 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 170.0233087489917 -107.20146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.0233087489917 -107.20146145708044 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 170.27757854514834 -109.13283230697894 -62.60000000000005 + vertex 170.60894939504684 -109.38710210313555 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 170.60894939504684 -109.38710210313555 -62.60000000000005 + vertex 170.9948389228828 -109.54694277914295 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 170.9948389228828 -109.54694277914295 -62.60000000000005 + vertex 171.40894939504682 -109.60146145708045 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 171.40894939504682 -109.60146145708045 -62.60000000000005 + vertex 171.82305986721084 -109.54694277914295 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 171.82305986721084 -109.54694277914295 -62.60000000000005 + vertex 172.20894939504683 -109.38710210313553 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 172.20894939504683 -109.38710210313553 -62.60000000000005 + vertex 171.5893608344856 -110.60661776791083 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.5893608344856 -110.60661776791083 -62.60000000000005 + vertex 172.20894939504683 -109.38710210313553 -62.60000000000005 + vertex 172.5403202449453 -109.1328323069789 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.5893608344856 -110.60661776791083 -62.60000000000005 + vertex 172.5403202449453 -109.1328323069789 -62.60000000000005 + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + vertex 172.5403202449453 -109.1328323069789 -62.60000000000005 + vertex 172.7945900411019 -108.80146145708042 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + vertex 170.27757854514832 -106.87009060718195 -62.60000000000005 + vertex 170.0233087489917 -107.20146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.27757854514832 -106.87009060718195 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + vertex 170.6089493950468 -106.61582081102533 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.6089493950468 -106.61582081102533 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + vertex 170.99483892288274 -106.45598013501792 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 170.99483892288274 -106.45598013501792 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + vertex 171.4089493950468 -106.40146145708043 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.4089493950468 -106.40146145708043 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.4089493950468 -106.40146145708043 -62.60000000000005 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 171.82305986721084 -106.4559801350179 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 171.82305986721084 -106.4559801350179 -62.60000000000005 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 172.2089493950468 -106.61582081102532 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 172.2089493950468 -106.61582081102532 -62.60000000000005 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 172.5403202449453 -106.87009060718195 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 166.78705169680995 -89.20682309781228 -62.60000000000005 + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.78705169680995 -89.20682309781228 -62.60000000000005 + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + vertex 166.78705169680995 -89.20682309781228 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 161.50946487266108 -102.74787161859419 -62.60000000000005 + vertex 160.4630547111473 -103.76030718389238 -62.60000000000005 + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.4630547111473 -103.76030718389238 -62.60000000000005 + vertex 161.50946487266108 -102.74787161859419 -62.60000000000005 + vertex 160.80946487266107 -103.96030718389238 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + vertex 155.39369720768377 -101.14069194162175 -62.600000000000044 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + vertex 156.35347177394706 -99.78735098491643 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + vertex 156.35347177394706 -99.78735098491643 -62.60000000000005 + vertex 156.29895309600957 -100.20146145708047 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + vertex 156.29895309600957 -100.20146145708047 -62.60000000000005 + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + vertex 156.29895309600957 -100.20146145708047 -62.60000000000005 + vertex 156.35347177394706 -100.6155719292445 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + vertex 156.35347177394706 -100.6155719292445 -62.60000000000005 + vertex 156.51331244995447 -101.00146145708045 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + vertex 156.51331244995447 -101.00146145708045 -62.60000000000005 + vertex 156.7675822461111 -101.33283230697894 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + vertex 156.7675822461111 -101.33283230697894 -62.60000000000005 + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 156.7675822461111 -101.33283230697894 -62.60000000000005 + vertex 157.09895309600958 -101.58710210313555 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 157.09895309600958 -101.58710210313555 -62.60000000000005 + vertex 157.48484262384554 -101.74694277914296 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 157.48484262384554 -101.74694277914296 -62.60000000000005 + vertex 157.8989530960096 -101.80146145708045 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 157.8989530960096 -101.80146145708045 -62.60000000000005 + vertex 158.31306356817362 -101.74694277914296 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 158.31306356817362 -101.74694277914296 -62.60000000000005 + vertex 158.69895309600957 -101.58710210313555 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 158.69895309600957 -101.58710210313555 -62.60000000000005 + vertex 159.03032394590804 -101.33283230697893 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 159.03032394590804 -101.33283230697893 -62.60000000000005 + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + endloop +endfacet +facet normal 3.598955634993343e-19 1.7942835350329497e-19 -1.0 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + vertex 160.4630547111473 -103.76030718389238 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 157.9936972076838 -95.63735984194264 617.3999999999999 + vertex 155.39369720768377 -100.14069194162175 -62.600000000000044 + vertex 155.39369720768377 -100.14069194162175 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 155.39369720768377 -100.14069194162175 -62.600000000000044 + vertex 157.9936972076838 -95.63735984194264 617.3999999999999 + vertex 157.9936972076838 -95.63735984194264 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112951 0.38268343236507 -1.6369160198769278e-16 + outer loop + vertex 155.39369720768377 -100.14069194162175 617.3999999999999 + vertex 155.29379678517915 -100.38187289651923 -62.600000000000044 + vertex 155.29379678517915 -100.38187289651923 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112951 0.38268343236507 -1.6369160198769278e-16 + outer loop + vertex 155.29379678517915 -100.38187289651923 -62.600000000000044 + vertex 155.39369720768377 -100.14069194162175 617.3999999999999 + vertex 155.39369720768377 -100.14069194162175 -62.600000000000044 + endloop +endfacet +facet normal -0.8660254037844367 0.5000000000000033 -1.3771336778111587e-16 + outer loop + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + vertex 163.78249996400035 -98.21085935300758 -62.60000000000005 + vertex 163.78249996400035 -98.21085935300758 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844367 0.5000000000000033 -1.3771336778111587e-16 + outer loop + vertex 163.78249996400035 -98.21085935300758 -62.60000000000005 + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738093 0.13052619222006007 -2.0684907214262692e-16 + outer loop + vertex 155.29379678517915 -100.38187289651923 617.3999999999999 + vertex 155.25972261146825 -100.64069194162175 -62.600000000000044 + vertex 155.25972261146825 -100.64069194162175 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738093 0.13052619222006007 -2.0684907214262692e-16 + outer loop + vertex 155.25972261146825 -100.64069194162175 -62.600000000000044 + vertex 155.29379678517915 -100.38187289651923 617.3999999999999 + vertex 155.29379678517915 -100.38187289651923 -62.600000000000044 + endloop +endfacet +facet normal -0.9914448613738132 -0.13052619222003078 -2.3591011986529993e-16 + outer loop + vertex 155.25972261146825 -100.64069194162175 617.3999999999999 + vertex 155.29379678517915 -100.89951098672427 -62.600000000000044 + vertex 155.29379678517915 -100.89951098672427 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738132 -0.13052619222003078 -2.3591011986529993e-16 + outer loop + vertex 155.29379678517915 -100.89951098672427 -62.600000000000044 + vertex 155.25972261146825 -100.64069194162175 617.3999999999999 + vertex 155.25972261146825 -100.64069194162175 -62.600000000000044 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844386 2.0805319374395364e-16 + outer loop + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 161.50946487266108 -102.74787161859419 -62.60000000000005 + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000001 0.8660254037844386 2.0805319374395364e-16 + outer loop + vertex 161.50946487266108 -102.74787161859419 -62.60000000000005 + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 161.50946487266108 -102.74787161859419 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000049 0.866025403784436 2.0805319374395443e-16 + outer loop + vertex 157.9936972076838 -95.63735984194264 -62.60000000000005 + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000049 0.866025403784436 2.0805319374395443e-16 + outer loop + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + vertex 157.9936972076838 -95.63735984194264 -62.60000000000005 + vertex 157.9936972076838 -95.63735984194264 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 158.65254293449578 -98.09620556875467 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 164.25254293449578 -88.39672104636894 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111666e-16 + outer loop + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 159.6042089843353 -101.6478716185942 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111666e-16 + outer loop + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + vertex 160.6213662718607 -99.8861035173113 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + vertex 158.65254293449578 -98.09620556875467 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 161.79369720768378 -89.05556677318093 -62.60000000000005 + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 161.79369720768378 -89.05556677318093 -62.60000000000005 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 161.79369720768378 -89.05556677318093 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912274 -0.6087614290087309 -2.449167116386771e-16 + outer loop + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + vertex 155.39369720768377 -101.14069194162175 -62.600000000000044 + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + endloop +endfacet +facet normal -0.7933533402912274 -0.6087614290087309 -2.449167116386771e-16 + outer loop + vertex 155.39369720768377 -101.14069194162175 -62.600000000000044 + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + endloop +endfacet +facet normal 0.2588190451025164 -0.9659258262890695 -4.9737767925804687e-17 + outer loop + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + endloop +endfacet +facet normal 0.2588190451025164 -0.9659258262890695 -4.9737767925804687e-17 + outer loop + vertex 160.6213662718607 -99.8861035173113 -62.60000000000005 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 160.6213662718607 -99.8861035173113 617.3999999999999 + endloop +endfacet +facet normal -0.2588190451025207 0.9659258262890684 4.9737767925803565e-17 + outer loop + vertex 163.78249996400035 -98.21085935300758 617.3999999999999 + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + endloop +endfacet +facet normal -0.2588190451025207 0.9659258262890684 4.9737767925803565e-17 + outer loop + vertex 160.41431103577867 -99.11336285628003 -62.60000000000005 + vertex 163.78249996400035 -98.21085935300758 617.3999999999999 + vertex 163.78249996400035 -98.21085935300758 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 160.4630547111473 -103.76030718389238 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 160.4630547111473 -103.76030718389238 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + vertex 160.4630547111473 -103.76030718389238 -62.60000000000005 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 161.94010736919756 -89.6019769346947 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 162.14010736919758 -89.25556677318093 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844304 -0.5000000000000142 1.377133677811133e-16 + outer loop + vertex 161.50946487266108 -102.74787161859419 -62.60000000000005 + vertex 160.80946487266107 -103.96030718389238 617.3999999999999 + vertex 160.80946487266107 -103.96030718389238 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844304 -0.5000000000000142 1.377133677811133e-16 + outer loop + vertex 160.80946487266107 -103.96030718389238 617.3999999999999 + vertex 161.50946487266108 -102.74787161859419 -62.60000000000005 + vertex 161.50946487266108 -102.74787161859419 617.3999999999999 + endloop +endfacet +facet normal -0.9659258262890691 -0.25881904510251763 -2.4449388036193263e-16 + outer loop + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + endloop +endfacet +facet normal -0.9659258262890691 -0.25881904510251763 -2.4449388036193263e-16 + outer loop + vertex 166.91681453905113 -92.78206726211604 -62.60000000000005 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912216 0.6087614290087383 -1.0937881967044587e-16 + outer loop + vertex 164.5526158302817 -84.3451278923153 617.3999999999999 + vertex 164.39369720768377 -84.55223467350186 -62.60000000000005 + vertex 164.39369720768377 -84.55223467350186 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912216 0.6087614290087383 -1.0937881967044587e-16 + outer loop + vertex 164.39369720768377 -84.55223467350186 -62.60000000000005 + vertex 164.5526158302817 -84.3451278923153 617.3999999999999 + vertex 164.5526158302817 -84.3451278923153 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087271 0.7933533402912302 -4.7612051549719774e-17 + outer loop + vertex 164.75972261146825 -84.18620926971741 617.3999999999999 + vertex 164.5526158302817 -84.3451278923153 -62.60000000000005 + vertex 164.5526158302817 -84.3451278923153 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087271 0.7933533402912302 -4.7612051549719774e-17 + outer loop + vertex 164.5526158302817 -84.3451278923153 -62.60000000000005 + vertex 164.75972261146825 -84.18620926971741 617.3999999999999 + vertex 164.75972261146825 -84.18620926971741 -62.600000000000065 + endloop +endfacet +facet normal -0.4999999999999974 -0.8660254037844404 -2.0805319374395325e-16 + outer loop + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + vertex 160.2630547111473 -104.10671734540614 -62.60000000000005 + endloop +endfacet +facet normal -0.4999999999999974 -0.8660254037844404 -2.0805319374395325e-16 + outer loop + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 158.34010736919757 -95.83735984194263 -62.60000000000005 + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 158.54010736919759 -95.49094968042887 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087248 -0.7933533402912322 -2.242484713441219e-16 + outer loop + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + vertex 155.75972261146822 -101.50671734540619 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087248 -0.7933533402912322 -2.242484713441219e-16 + outer loop + vertex 155.5526158302817 -101.34779872280829 -62.600000000000044 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 161.94010736919756 -89.6019769346947 -62.60000000000005 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 161.94010736919756 -89.6019769346947 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236510877 0.9238795325112791 1.7399399201488056e-17 + outer loop + vertex 165.0009035663657 -84.08630884721279 617.3999999999999 + vertex 164.75972261146825 -84.18620926971741 -62.600000000000065 + vertex 164.75972261146825 -84.18620926971741 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236510877 0.9238795325112791 1.7399399201488056e-17 + outer loop + vertex 164.75972261146825 -84.18620926971741 -62.600000000000065 + vertex 165.0009035663657 -84.08630884721279 617.3999999999999 + vertex 165.0009035663657 -84.08630884721279 -62.600000000000065 + endloop +endfacet +facet normal -0.13052619222005007 0.9914448613738107 8.122510965098939e-17 + outer loop + vertex 165.0009035663657 -84.08630884721279 -62.600000000000065 + vertex 165.25972261146822 -84.05223467350184 617.3999999999999 + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + endloop +endfacet +facet normal -0.13052619222005007 0.9914448613738107 8.122510965098939e-17 + outer loop + vertex 165.25972261146822 -84.05223467350184 617.3999999999999 + vertex 165.0009035663657 -84.08630884721279 -62.600000000000065 + vertex 165.0009035663657 -84.08630884721279 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112845 -0.38268343236509544 -2.4889428277906133e-16 + outer loop + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + vertex 155.29379678517915 -100.89951098672427 -62.600000000000044 + vertex 155.39369720768377 -101.14069194162175 -62.600000000000044 + endloop +endfacet +facet normal -0.9238795325112845 -0.38268343236509544 -2.4889428277906133e-16 + outer loop + vertex 155.29379678517915 -100.89951098672427 -62.600000000000044 + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + vertex 155.29379678517915 -100.89951098672427 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000351 0.8660254037844184 2.0805319374395916e-16 + outer loop + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 158.54010736919759 -95.49094968042887 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000351 0.8660254037844184 2.0805319374395916e-16 + outer loop + vertex 159.75254293449578 -96.19094968042891 -62.60000000000005 + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000047 -0.8660254037844359 -2.0805319374395433e-16 + outer loop + vertex 160.80946487266107 -103.96030718389238 617.3999999999999 + vertex 160.4630547111473 -103.76030718389238 -62.60000000000005 + vertex 160.80946487266107 -103.96030718389238 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000047 -0.8660254037844359 -2.0805319374395433e-16 + outer loop + vertex 160.4630547111473 -103.76030718389238 -62.60000000000005 + vertex 160.80946487266107 -103.96030718389238 617.3999999999999 + vertex 160.4630547111473 -103.76030718389238 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111666e-16 + outer loop + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111666e-16 + outer loop + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.25254293449578 -88.39672104636894 -62.60000000000005 + vertex 164.25254293449578 -88.39672104636894 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 164.39369720768377 -84.55223467350186 617.3999999999999 + vertex 161.79369720768378 -89.05556677318093 -62.60000000000005 + vertex 161.79369720768378 -89.05556677318093 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 161.79369720768378 -89.05556677318093 -62.60000000000005 + vertex 164.39369720768377 -84.55223467350186 617.3999999999999 + vertex 164.39369720768377 -84.55223467350186 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112906 -0.3826834323650804 1.6369160198769062e-16 + outer loop + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + vertex 164.15347177394705 -86.27735468587916 617.3999999999999 + vertex 164.15347177394705 -86.27735468587916 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112906 -0.3826834323650804 1.6369160198769062e-16 + outer loop + vertex 164.15347177394705 -86.27735468587916 617.3999999999999 + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236508945 0.923879532511287 1.8829806831558386e-16 + outer loop + vertex 167.20395124552817 -99.6847318977798 617.3999999999999 + vertex 167.85513982375136 -99.95446303854229 -62.60000000000005 + vertex 167.20395124552817 -99.6847318977798 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236508945 0.923879532511287 1.8829806831558386e-16 + outer loop + vertex 167.85513982375136 -99.95446303854229 -62.60000000000005 + vertex 167.20395124552817 -99.6847318977798 617.3999999999999 + vertex 167.85513982375136 -99.95446303854229 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738133 0.13052619222003006 2.359101198652999e-16 + outer loop + vertex 165.85395124552818 -97.3464633075618 -62.60000000000005 + vertex 165.9459515145477 -98.0452747293386 617.3999999999999 + vertex 165.9459515145477 -98.0452747293386 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738133 0.13052619222003006 2.359101198652999e-16 + outer loop + vertex 165.9459515145477 -98.0452747293386 617.3999999999999 + vertex 165.85395124552818 -97.3464633075618 -62.60000000000005 + vertex 165.85395124552818 -97.3464633075618 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006037 0.9914448613738093 1.3951546310861218e-16 + outer loop + vertex 167.85513982375136 -99.95446303854229 617.3999999999999 + vertex 168.55395124552817 -100.04646330756181 -62.60000000000005 + vertex 167.85513982375136 -99.95446303854229 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006037 0.9914448613738093 1.3951546310861218e-16 + outer loop + vertex 168.55395124552817 -100.04646330756181 -62.60000000000005 + vertex 167.85513982375136 -99.95446303854229 617.3999999999999 + vertex 168.55395124552817 -100.04646330756181 617.3999999999999 + endloop +endfacet +facet normal 0.1305261922200625 0.991444861373809 1.395154631086126e-16 + outer loop + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + endloop +endfacet +facet normal 0.1305261922200625 0.991444861373809 1.395154631086126e-16 + outer loop + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + vertex 165.25972261146822 -84.05223467350184 -62.600000000000065 + vertex 165.25972261146822 -84.05223467350184 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912395 0.608761429008715 -1.0937881967045245e-16 + outer loop + vertex 170.89221983574615 -98.6964633075618 617.3999999999999 + vertex 170.46313955473187 -99.25565161676548 -62.60000000000005 + vertex 170.46313955473187 -99.25565161676548 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912395 0.608761429008715 -1.0937881967045245e-16 + outer loop + vertex 170.46313955473187 -99.25565161676548 -62.60000000000005 + vertex 170.89221983574615 -98.6964633075618 617.3999999999999 + vertex 170.89221983574615 -98.6964633075618 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738133 -0.13052619222003006 -2.359101198652999e-16 + outer loop + vertex 171.16195097650868 -96.64765188578501 617.3999999999999 + vertex 171.25395124552816 -97.3464633075618 -62.60000000000005 + vertex 171.25395124552816 -97.3464633075618 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738133 -0.13052619222003006 -2.359101198652999e-16 + outer loop + vertex 171.25395124552816 -97.3464633075618 -62.60000000000005 + vertex 171.16195097650868 -96.64765188578501 617.3999999999999 + vertex 171.16195097650868 -96.64765188578501 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912292 0.6087614290087288 2.449167116386773e-16 + outer loop + vertex 166.2156826553102 -98.6964633075618 617.3999999999999 + vertex 166.6447629363245 -99.25565161676548 -62.60000000000005 + vertex 166.2156826553102 -98.6964633075618 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912292 0.6087614290087288 2.449167116386773e-16 + outer loop + vertex 166.6447629363245 -99.25565161676548 -62.60000000000005 + vertex 166.2156826553102 -98.6964633075618 617.3999999999999 + vertex 166.6447629363245 -99.25565161676548 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087108 0.7933533402912428 -4.761205154971471e-17 + outer loop + vertex 170.46313955473187 -99.25565161676548 617.3999999999999 + vertex 169.9039512455282 -99.68473189777978 -62.60000000000005 + vertex 169.9039512455282 -99.68473189777978 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087108 0.7933533402912428 -4.761205154971471e-17 + outer loop + vertex 169.9039512455282 -99.68473189777978 -62.60000000000005 + vertex 170.46313955473187 -99.25565161676548 617.3999999999999 + vertex 170.46313955473187 -99.25565161676548 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912393 -0.6087614290087152 1.0937881967045242e-16 + outer loop + vertex 166.6447629363245 -95.43727499835813 -62.60000000000005 + vertex 166.2156826553102 -95.99646330756181 617.3999999999999 + vertex 166.2156826553102 -95.99646330756181 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912393 -0.6087614290087152 1.0937881967045242e-16 + outer loop + vertex 166.2156826553102 -95.99646330756181 617.3999999999999 + vertex 166.6447629363245 -95.43727499835813 -62.60000000000005 + vertex 166.6447629363245 -95.43727499835813 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006037 -0.9914448613738093 -1.3951546310861218e-16 + outer loop + vertex 169.252762667305 -94.73846357658132 617.3999999999999 + vertex 168.55395124552817 -94.6464633075618 -62.60000000000005 + vertex 169.252762667305 -94.73846357658132 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006037 -0.9914448613738093 -1.3951546310861218e-16 + outer loop + vertex 168.55395124552817 -94.6464633075618 -62.60000000000005 + vertex 169.252762667305 -94.73846357658132 617.3999999999999 + vertex 168.55395124552817 -94.6464633075618 617.3999999999999 + endloop +endfacet +facet normal -0.991444861373812 0.13052619222003967 -2.0684907214262986e-16 + outer loop + vertex 171.25395124552816 -97.3464633075618 617.3999999999999 + vertex 171.16195097650865 -98.04527472933862 -62.60000000000005 + vertex 171.16195097650865 -98.04527472933862 617.3999999999999 + endloop +endfacet +facet normal -0.991444861373812 0.13052619222003967 -2.0684907214262986e-16 + outer loop + vertex 171.16195097650865 -98.04527472933862 -62.60000000000005 + vertex 171.25395124552816 -97.3464633075618 617.3999999999999 + vertex 171.25395124552816 -97.3464633075618 -62.60000000000005 + endloop +endfacet +facet normal -0.1305261922200493 0.9914448613738108 8.122510965098958e-17 + outer loop + vertex 168.55395124552817 -100.04646330756181 617.3999999999999 + vertex 169.252762667305 -99.95446303854229 -62.60000000000005 + vertex 168.55395124552817 -100.04646330756181 -62.60000000000005 + endloop +endfacet +facet normal -0.1305261922200493 0.9914448613738108 8.122510965098958e-17 + outer loop + vertex 169.252762667305 -99.95446303854229 -62.60000000000005 + vertex 168.55395124552817 -100.04646330756181 617.3999999999999 + vertex 169.252762667305 -99.95446303854229 617.3999999999999 + endloop +endfacet +facet normal 0.608761429008723 0.7933533402912334 2.242484713441216e-16 + outer loop + vertex 166.6447629363245 -99.25565161676548 617.3999999999999 + vertex 167.20395124552817 -99.6847318977798 -62.60000000000005 + vertex 166.6447629363245 -99.25565161676548 -62.60000000000005 + endloop +endfacet +facet normal 0.608761429008723 0.7933533402912334 2.242484713441216e-16 + outer loop + vertex 167.20395124552817 -99.6847318977798 -62.60000000000005 + vertex 166.6447629363245 -99.25565161676548 617.3999999999999 + vertex 167.20395124552817 -99.6847318977798 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912365 -0.608761429008719 -2.4491671163867783e-16 + outer loop + vertex 170.89221983574618 -95.99646330756181 617.3999999999999 + vertex 170.46313955473187 -95.43727499835813 -62.60000000000005 + vertex 170.89221983574618 -95.99646330756181 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912365 -0.608761429008719 -2.4491671163867783e-16 + outer loop + vertex 170.46313955473187 -95.43727499835813 -62.60000000000005 + vertex 170.89221983574618 -95.99646330756181 617.3999999999999 + vertex 170.46313955473187 -95.43727499835813 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912613 -0.6087614290086866 1.093788196704605e-16 + outer loop + vertex 164.56758224611104 -85.5600943081447 -62.60000000000005 + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + vertex 164.31331244995442 -85.89146515804319 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912613 -0.6087614290086866 1.093788196704605e-16 + outer loop + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + vertex 164.56758224611104 -85.5600943081447 -62.60000000000005 + vertex 164.56758224611104 -85.5600943081447 617.3999999999999 + endloop +endfacet +facet normal 0.1305261922200507 -0.9914448613738105 -8.122510965098921e-17 + outer loop + vertex 168.55395124552817 -94.6464633075618 617.3999999999999 + vertex 167.8551398237514 -94.73846357658132 -62.60000000000005 + vertex 168.55395124552817 -94.6464633075618 -62.60000000000005 + endloop +endfacet +facet normal 0.1305261922200507 -0.9914448613738105 -8.122510965098921e-17 + outer loop + vertex 167.8551398237514 -94.73846357658132 -62.60000000000005 + vertex 168.55395124552817 -94.6464633075618 617.3999999999999 + vertex 167.8551398237514 -94.73846357658132 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651094 0.9238795325112787 1.739939920148787e-17 + outer loop + vertex 169.9039512455282 -99.68473189777978 617.3999999999999 + vertex 169.252762667305 -99.95446303854229 -62.60000000000005 + vertex 169.252762667305 -99.95446303854229 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651094 0.9238795325112787 1.739939920148787e-17 + outer loop + vertex 169.252762667305 -99.95446303854229 -62.60000000000005 + vertex 169.9039512455282 -99.68473189777978 617.3999999999999 + vertex 169.9039512455282 -99.68473189777978 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112841 -0.3826834323650964 1.6369160198768739e-16 + outer loop + vertex 166.2156826553102 -95.99646330756181 -62.60000000000005 + vertex 165.9459515145477 -96.647651885785 617.3999999999999 + vertex 165.9459515145477 -96.647651885785 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112841 -0.3826834323650964 1.6369160198768739e-16 + outer loop + vertex 165.9459515145477 -96.647651885785 617.3999999999999 + vertex 166.2156826553102 -95.99646330756181 -62.60000000000005 + vertex 166.2156826553102 -95.99646330756181 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112874 -0.38268343236508856 -2.4889428277906123e-16 + outer loop + vertex 171.16195097650868 -96.64765188578501 617.3999999999999 + vertex 170.89221983574618 -95.99646330756181 -62.60000000000005 + vertex 171.16195097650868 -96.64765188578501 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112874 -0.38268343236508856 -2.4889428277906123e-16 + outer loop + vertex 170.89221983574618 -95.99646330756181 -62.60000000000005 + vertex 171.16195097650868 -96.64765188578501 617.3999999999999 + vertex 170.89221983574618 -95.99646330756181 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087198 -0.793353340291236 -2.242484713441212e-16 + outer loop + vertex 170.46313955473187 -95.43727499835813 617.3999999999999 + vertex 169.9039512455282 -95.00819471734383 -62.60000000000005 + vertex 170.46313955473187 -95.43727499835813 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087198 -0.793353340291236 -2.242484713441212e-16 + outer loop + vertex 169.9039512455282 -95.00819471734383 -62.60000000000005 + vertex 170.46313955473187 -95.43727499835813 617.3999999999999 + vertex 169.9039512455282 -95.00819471734383 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112841 0.3826834323650964 -1.6369160198768739e-16 + outer loop + vertex 171.16195097650865 -98.04527472933862 617.3999999999999 + vertex 170.89221983574615 -98.6964633075618 -62.60000000000005 + vertex 170.89221983574615 -98.6964633075618 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112841 0.3826834323650964 -1.6369160198768739e-16 + outer loop + vertex 170.89221983574615 -98.6964633075618 -62.60000000000005 + vertex 171.16195097650865 -98.04527472933862 617.3999999999999 + vertex 171.16195097650865 -98.04527472933862 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087054 -0.7933533402912468 4.761205154971309e-17 + outer loop + vertex 164.89895309600954 -85.30582451198808 -62.60000000000005 + vertex 164.56758224611104 -85.5600943081447 617.3999999999999 + vertex 164.56758224611104 -85.5600943081447 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087054 -0.7933533402912468 4.761205154971309e-17 + outer loop + vertex 164.56758224611104 -85.5600943081447 617.3999999999999 + vertex 164.89895309600954 -85.30582451198808 -62.60000000000005 + vertex 164.89895309600954 -85.30582451198808 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112867 0.3826834323650901 2.4889428277906123e-16 + outer loop + vertex 165.9459515145477 -98.0452747293386 617.3999999999999 + vertex 166.2156826553102 -98.6964633075618 -62.60000000000005 + vertex 165.9459515145477 -98.0452747293386 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112867 0.3826834323650901 2.4889428277906123e-16 + outer loop + vertex 166.2156826553102 -98.6964633075618 -62.60000000000005 + vertex 165.9459515145477 -98.0452747293386 617.3999999999999 + vertex 166.2156826553102 -98.6964633075618 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236511393 -0.9238795325112767 -1.739939920148661e-17 + outer loop + vertex 165.2848426238455 -85.14598383598067 -62.60000000000005 + vertex 164.89895309600954 -85.30582451198808 617.3999999999999 + vertex 164.89895309600954 -85.30582451198808 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236511393 -0.9238795325112767 -1.739939920148661e-17 + outer loop + vertex 164.89895309600954 -85.30582451198808 617.3999999999999 + vertex 165.2848426238455 -85.14598383598067 -62.60000000000005 + vertex 165.2848426238455 -85.14598383598067 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738067 -0.13052619222007997 2.0684907214262419e-16 + outer loop + vertex 164.15347177394705 -86.27735468587916 -62.60000000000005 + vertex 164.09895309600955 -86.69146515804319 617.3999999999999 + vertex 164.09895309600955 -86.69146515804319 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738067 -0.13052619222007997 2.0684907214262419e-16 + outer loop + vertex 164.09895309600955 -86.69146515804319 617.3999999999999 + vertex 164.15347177394705 -86.27735468587916 -62.60000000000005 + vertex 164.15347177394705 -86.27735468587916 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651094 -0.9238795325112787 -1.739939920148787e-17 + outer loop + vertex 167.8551398237514 -94.73846357658132 -62.60000000000005 + vertex 167.20395124552817 -95.00819471734383 617.3999999999999 + vertex 167.20395124552817 -95.00819471734383 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651094 -0.9238795325112787 -1.739939920148787e-17 + outer loop + vertex 167.20395124552817 -95.00819471734383 617.3999999999999 + vertex 167.8551398237514 -94.73846357658132 -62.60000000000005 + vertex 167.8551398237514 -94.73846357658132 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087108 -0.7933533402912428 4.761205154971471e-17 + outer loop + vertex 167.20395124552817 -95.00819471734383 -62.60000000000005 + vertex 166.6447629363245 -95.43727499835813 617.3999999999999 + vertex 166.6447629363245 -95.43727499835813 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087108 -0.7933533402912428 4.761205154971471e-17 + outer loop + vertex 166.6447629363245 -95.43727499835813 617.3999999999999 + vertex 167.20395124552817 -95.00819471734383 -62.60000000000005 + vertex 167.20395124552817 -95.00819471734383 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236508945 -0.923879532511287 -1.8829806831558386e-16 + outer loop + vertex 169.9039512455282 -95.00819471734383 617.3999999999999 + vertex 169.252762667305 -94.73846357658132 -62.60000000000005 + vertex 169.9039512455282 -95.00819471734383 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236508945 -0.923879532511287 -1.8829806831558386e-16 + outer loop + vertex 169.252762667305 -94.73846357658132 -62.60000000000005 + vertex 169.9039512455282 -95.00819471734383 617.3999999999999 + vertex 169.252762667305 -94.73846357658132 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650856 0.9238795325112886 1.8829806831558317e-16 + outer loop + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + endloop +endfacet +facet normal 0.3826834323650856 0.9238795325112886 1.8829806831558317e-16 + outer loop + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 165.51854165657076 -84.08630884721279 -62.60000000000008 + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006945 -0.9914448613738082 -8.12251096509848e-17 + outer loop + vertex 165.69895309600955 -85.09146515804318 617.3999999999999 + vertex 165.2848426238455 -85.14598383598067 -62.60000000000005 + vertex 165.69895309600955 -85.09146515804318 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006945 -0.9914448613738082 -8.12251096509848e-17 + outer loop + vertex 165.2848426238455 -85.14598383598067 -62.60000000000005 + vertex 165.69895309600955 -85.09146515804318 617.3999999999999 + vertex 165.2848426238455 -85.14598383598067 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738119 -0.13052619222004044 2.0684907214262973e-16 + outer loop + vertex 165.9459515145477 -96.647651885785 -62.60000000000005 + vertex 165.85395124552818 -97.3464633075618 617.3999999999999 + vertex 165.85395124552818 -97.3464633075618 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738119 -0.13052619222004044 2.0684907214262973e-16 + outer loop + vertex 165.85395124552818 -97.3464633075618 617.3999999999999 + vertex 165.9459515145477 -96.647651885785 -62.60000000000005 + vertex 165.9459515145477 -96.647651885785 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087054 0.7933533402912468 -4.761205154971309e-17 + outer loop + vertex 166.83032394590805 -87.82283600794165 617.3999999999999 + vertex 166.49895309600956 -88.07710580409828 -62.60000000000005 + vertex 166.49895309600956 -88.07710580409828 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087054 0.7933533402912468 -4.761205154971309e-17 + outer loop + vertex 166.49895309600956 -88.07710580409828 -62.60000000000005 + vertex 166.83032394590805 -87.82283600794165 617.3999999999999 + vertex 166.83032394590805 -87.82283600794165 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112911 0.3826834323650796 -1.6369160198769084e-16 + outer loop + vertex 167.24443441807207 -87.1055756302072 617.3999999999999 + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112911 0.3826834323650796 -1.6369160198769084e-16 + outer loop + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + vertex 167.24443441807207 -87.1055756302072 617.3999999999999 + vertex 167.24443441807207 -87.1055756302072 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087139 -0.7933533402912404 -2.242484713441204e-16 + outer loop + vertex 166.83032394590802 -85.56009430814467 617.3999999999999 + vertex 166.49895309600953 -85.30582451198806 -62.60000000000005 + vertex 166.83032394590802 -85.56009430814467 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087139 -0.7933533402912404 -2.242484713441204e-16 + outer loop + vertex 166.49895309600953 -85.30582451198806 -62.60000000000005 + vertex 166.83032394590802 -85.56009430814467 617.3999999999999 + vertex 166.49895309600953 -85.30582451198806 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650796 0.9238795325112911 1.8829806831558214e-16 + outer loop + vertex 164.89895309600956 -88.0771058040983 617.3999999999999 + vertex 165.28484262384555 -88.2369464801057 -62.60000000000005 + vertex 164.89895309600956 -88.0771058040983 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323650796 0.9238795325112911 1.8829806831558214e-16 + outer loop + vertex 165.28484262384555 -88.2369464801057 -62.60000000000005 + vertex 164.89895309600956 -88.0771058040983 617.3999999999999 + vertex 165.28484262384555 -88.2369464801057 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112876 0.38268343236508756 2.488942827790612e-16 + outer loop + vertex 164.15347177394705 -87.10557563020723 617.3999999999999 + vertex 164.31331244995442 -87.49146515804318 -62.60000000000005 + vertex 164.15347177394705 -87.10557563020723 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112876 0.38268343236508756 2.488942827790612e-16 + outer loop + vertex 164.31331244995442 -87.49146515804318 -62.60000000000005 + vertex 164.15347177394705 -87.10557563020723 617.3999999999999 + vertex 164.31331244995442 -87.49146515804318 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290086873 -0.7933533402912608 -2.2424847134411675e-16 + outer loop + vertex 180.34032024494527 -93.36009430814468 617.3999999999999 + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290086873 -0.7933533402912608 -2.2424847134411675e-16 + outer loop + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + vertex 180.34032024494527 -93.36009430814468 617.3999999999999 + vertex 180.00894939504678 -93.10582451198808 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738074 -0.13052619222007578 -2.3591011986530373e-16 + outer loop + vertex 167.24443441807207 -86.27735468587913 617.3999999999999 + vertex 167.29895309600957 -86.69146515804317 -62.60000000000005 + vertex 167.29895309600957 -86.69146515804317 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738074 -0.13052619222007578 -2.3591011986530373e-16 + outer loop + vertex 167.29895309600957 -86.69146515804317 -62.60000000000005 + vertex 167.24443441807207 -86.27735468587913 617.3999999999999 + vertex 167.24443441807207 -86.27735468587913 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912617 0.6087614290086859 -1.093788196704607e-16 + outer loop + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + vertex 166.83032394590805 -87.82283600794165 -62.60000000000005 + vertex 166.83032394590805 -87.82283600794165 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912617 0.6087614290086859 -1.093788196704607e-16 + outer loop + vertex 166.83032394590805 -87.82283600794165 -62.60000000000005 + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + vertex 167.08459374206464 -87.49146515804317 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 166.49895309600953 -85.30582451198806 617.3999999999999 + vertex 166.11306356817357 -85.14598383598066 -62.60000000000005 + vertex 166.49895309600953 -85.30582451198806 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 166.11306356817357 -85.14598383598066 -62.60000000000005 + vertex 166.49895309600953 -85.30582451198806 617.3999999999999 + vertex 166.11306356817357 -85.14598383598066 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087593 0.7933533402912054 -4.7612051549729734e-17 + outer loop + vertex 180.3403202449453 -95.62283600794163 617.3999999999999 + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + vertex 180.00894939504684 -95.87710580409829 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087593 0.7933533402912054 -4.7612051549729734e-17 + outer loop + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + vertex 180.3403202449453 -95.62283600794163 617.3999999999999 + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112876 -0.38268343236508756 -2.488942827790612e-16 + outer loop + vertex 167.24443441807207 -86.27735468587913 617.3999999999999 + vertex 167.08459374206464 -85.89146515804318 -62.60000000000005 + vertex 167.24443441807207 -86.27735468587913 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112876 -0.38268343236508756 -2.488942827790612e-16 + outer loop + vertex 167.08459374206464 -85.89146515804318 -62.60000000000005 + vertex 167.24443441807207 -86.27735468587913 617.3999999999999 + vertex 167.08459374206464 -85.89146515804318 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112816 -0.3826834323651024 -2.4889428277906147e-16 + outer loop + vertex 180.7544307171093 -94.07735468587913 617.3999999999999 + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112816 -0.3826834323651024 -2.4889428277906147e-16 + outer loop + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 617.3999999999999 + vertex 180.5945900411019 -93.69146515804317 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650796 0.9238795325112911 1.8829806831558214e-16 + outer loop + vertex 178.40894939504682 -95.87710580409828 617.3999999999999 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323650796 0.9238795325112911 1.8829806831558214e-16 + outer loop + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + vertex 178.40894939504682 -95.87710580409828 617.3999999999999 + vertex 178.79483892288278 -96.03694648010568 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738132 0.1305261922200305 -2.0684907214263111e-16 + outer loop + vertex 180.8089493950468 -94.49146515804317 617.3999999999999 + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + vertex 180.7544307171093 -94.9055756302072 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738132 0.1305261922200305 -2.0684907214263111e-16 + outer loop + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + vertex 180.8089493950468 -94.49146515804317 617.3999999999999 + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912486 -0.6087614290087032 -2.4491671163867876e-16 + outer loop + vertex 180.5945900411019 -93.69146515804317 617.3999999999999 + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + vertex 180.5945900411019 -93.69146515804317 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912486 -0.6087614290087032 -2.4491671163867876e-16 + outer loop + vertex 180.34032024494527 -93.36009430814468 -62.60000000000005 + vertex 180.5945900411019 -93.69146515804317 617.3999999999999 + vertex 180.34032024494527 -93.36009430814468 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738064 0.13052619222008258 -2.068490721426238e-16 + outer loop + vertex 167.29895309600957 -86.69146515804317 617.3999999999999 + vertex 167.24443441807207 -87.1055756302072 -62.60000000000005 + vertex 167.24443441807207 -87.1055756302072 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738064 0.13052619222008258 -2.068490721426238e-16 + outer loop + vertex 167.24443441807207 -87.1055756302072 -62.60000000000005 + vertex 167.29895309600957 -86.69146515804317 617.3999999999999 + vertex 167.29895309600957 -86.69146515804317 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236511393 0.9238795325112767 1.739939920148661e-17 + outer loop + vertex 166.49895309600956 -88.07710580409828 617.3999999999999 + vertex 166.1130635681736 -88.23694648010569 -62.60000000000005 + vertex 166.1130635681736 -88.23694648010569 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236511393 0.9238795325112767 1.739939920148661e-17 + outer loop + vertex 166.1130635681736 -88.23694648010569 -62.60000000000005 + vertex 166.49895309600956 -88.07710580409828 617.3999999999999 + vertex 166.49895309600956 -88.07710580409828 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 180.00894939504678 -93.10582451198808 617.3999999999999 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + vertex 180.00894939504678 -93.10582451198808 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + vertex 180.00894939504678 -93.10582451198808 617.3999999999999 + vertex 179.62305986721083 -92.94598383598067 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651025 0.9238795325112814 1.739939920148968e-17 + outer loop + vertex 180.00894939504684 -95.87710580409829 617.3999999999999 + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 179.62305986721086 -96.0369464801057 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651025 0.9238795325112814 1.739939920148968e-17 + outer loop + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 180.00894939504684 -95.87710580409829 617.3999999999999 + vertex 180.00894939504684 -95.87710580409829 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222007983 0.9914448613738067 1.3951546310861622e-16 + outer loop + vertex 178.79483892288278 -96.03694648010568 617.3999999999999 + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222007983 0.9914448613738067 1.3951546310861622e-16 + outer loop + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + vertex 178.79483892288278 -96.03694648010568 617.3999999999999 + vertex 179.2089493950468 -96.09146515804319 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087137 0.7933533402912407 2.242484713441203e-16 + outer loop + vertex 164.56758224611107 -87.82283600794166 617.3999999999999 + vertex 164.89895309600956 -88.0771058040983 -62.60000000000005 + vertex 164.56758224611107 -87.82283600794166 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087137 0.7933533402912407 2.242484713441203e-16 + outer loop + vertex 164.89895309600956 -88.0771058040983 -62.60000000000005 + vertex 164.56758224611107 -87.82283600794166 617.3999999999999 + vertex 164.89895309600956 -88.0771058040983 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004275 0.9914448613738117 1.3951546310860853e-16 + outer loop + vertex 165.28484262384555 -88.2369464801057 617.3999999999999 + vertex 165.69895309600957 -88.2914651580432 -62.60000000000005 + vertex 165.28484262384555 -88.2369464801057 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222004275 0.9914448613738117 1.3951546310860853e-16 + outer loop + vertex 165.69895309600957 -88.2914651580432 -62.60000000000005 + vertex 165.28484262384555 -88.2369464801057 617.3999999999999 + vertex 165.69895309600957 -88.2914651580432 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912207 -0.6087614290087394 -2.4491671163867655e-16 + outer loop + vertex 167.08459374206464 -85.89146515804318 617.3999999999999 + vertex 166.83032394590802 -85.56009430814467 -62.60000000000005 + vertex 167.08459374206464 -85.89146515804318 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912207 -0.6087614290087394 -2.4491671163867655e-16 + outer loop + vertex 166.83032394590802 -85.56009430814467 -62.60000000000005 + vertex 167.08459374206464 -85.89146515804318 617.3999999999999 + vertex 166.83032394590802 -85.56009430814467 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912282 0.6087614290087299 -1.093788196704483e-16 + outer loop + vertex 180.59459004110192 -95.29146515804317 617.3999999999999 + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + vertex 180.3403202449453 -95.62283600794163 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912282 0.6087614290087299 -1.093788196704483e-16 + outer loop + vertex 180.3403202449453 -95.62283600794163 -62.60000000000005 + vertex 180.59459004110192 -95.29146515804317 617.3999999999999 + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112911 0.3826834323650796 -1.6369160198769084e-16 + outer loop + vertex 180.7544307171093 -94.9055756302072 617.3999999999999 + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + vertex 180.59459004110192 -95.29146515804317 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112911 0.3826834323650796 -1.6369160198769084e-16 + outer loop + vertex 180.59459004110192 -95.29146515804317 -62.60000000000005 + vertex 180.7544307171093 -94.9055756302072 617.3999999999999 + vertex 180.7544307171093 -94.9055756302072 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912296 0.608761429008728 2.449167116386773e-16 + outer loop + vertex 164.31331244995442 -87.49146515804318 617.3999999999999 + vertex 164.56758224611107 -87.82283600794166 -62.60000000000005 + vertex 164.31331244995442 -87.49146515804318 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912296 0.608761429008728 2.449167116386773e-16 + outer loop + vertex 164.56758224611107 -87.82283600794166 -62.60000000000005 + vertex 164.31331244995442 -87.49146515804318 617.3999999999999 + vertex 164.56758224611107 -87.82283600794166 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738078 0.1305261922200717 2.3591011986530333e-16 + outer loop + vertex 164.09895309600955 -86.69146515804319 -62.60000000000005 + vertex 164.15347177394705 -87.10557563020723 617.3999999999999 + vertex 164.15347177394705 -87.10557563020723 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738078 0.1305261922200717 2.3591011986530333e-16 + outer loop + vertex 164.15347177394705 -87.10557563020723 617.3999999999999 + vertex 164.09895309600955 -86.69146515804319 -62.60000000000005 + vertex 164.09895309600955 -86.69146515804319 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738068 -0.13052619222007983 -2.35910119865304e-16 + outer loop + vertex 180.7544307171093 -94.07735468587913 617.3999999999999 + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + vertex 180.8089493950468 -94.49146515804317 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738068 -0.13052619222007983 -2.35910119865304e-16 + outer loop + vertex 180.8089493950468 -94.49146515804317 -62.60000000000005 + vertex 180.7544307171093 -94.07735468587913 617.3999999999999 + vertex 180.7544307171093 -94.07735468587913 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004275 -0.9914448613738117 -1.3951546310860853e-16 + outer loop + vertex 166.11306356817357 -85.14598383598066 617.3999999999999 + vertex 165.69895309600955 -85.09146515804318 -62.60000000000005 + vertex 166.11306356817357 -85.14598383598066 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004275 -0.9914448613738117 -1.3951546310860853e-16 + outer loop + vertex 165.69895309600955 -85.09146515804318 -62.60000000000005 + vertex 166.11306356817357 -85.14598383598066 617.3999999999999 + vertex 165.69895309600955 -85.09146515804318 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222007983 -0.9914448613738067 -1.3951546310861622e-16 + outer loop + vertex 179.62305986721083 -92.94598383598067 617.3999999999999 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222007983 -0.9914448613738067 -1.3951546310861622e-16 + outer loop + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + vertex 179.62305986721083 -92.94598383598067 617.3999999999999 + vertex 179.2089493950468 -92.89146515804318 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222004744 0.9914448613738109 8.122510965099001e-17 + outer loop + vertex 179.2089493950468 -96.09146515804319 617.3999999999999 + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 179.2089493950468 -96.09146515804319 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004744 0.9914448613738109 8.122510965099001e-17 + outer loop + vertex 179.62305986721086 -96.0369464801057 -62.60000000000005 + vertex 179.2089493950468 -96.09146515804319 617.3999999999999 + vertex 179.62305986721086 -96.0369464801057 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006945 0.9914448613738082 8.12251096509848e-17 + outer loop + vertex 165.69895309600957 -88.2914651580432 617.3999999999999 + vertex 166.1130635681736 -88.23694648010569 -62.60000000000005 + vertex 165.69895309600957 -88.2914651580432 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006945 0.9914448613738082 8.12251096509848e-17 + outer loop + vertex 166.1130635681736 -88.23694648010569 -62.60000000000005 + vertex 165.69895309600957 -88.2914651580432 617.3999999999999 + vertex 166.1130635681736 -88.23694648010569 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650796 0.9238795325112911 1.8829806831558214e-16 + outer loop + vertex 170.60894939504684 -109.38710210313555 617.3999999999999 + vertex 170.9948389228828 -109.54694277914295 -62.60000000000005 + vertex 170.60894939504684 -109.38710210313555 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323650796 0.9238795325112911 1.8829806831558214e-16 + outer loop + vertex 170.9948389228828 -109.54694277914295 -62.60000000000005 + vertex 170.60894939504684 -109.38710210313555 617.3999999999999 + vertex 170.9948389228828 -109.54694277914295 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738078 -0.1305261922200717 -2.3591011986530333e-16 + outer loop + vertex 172.95443071710932 -107.58735098491637 617.3999999999999 + vertex 173.0089493950468 -108.00146145708042 -62.60000000000005 + vertex 173.0089493950468 -108.00146145708042 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738078 -0.1305261922200717 -2.3591011986530333e-16 + outer loop + vertex 173.0089493950468 -108.00146145708042 -62.60000000000005 + vertex 172.95443071710932 -107.58735098491637 617.3999999999999 + vertex 172.95443071710932 -107.58735098491637 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738132 -0.1305261922200305 2.0684907214263111e-16 + outer loop + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + vertex 177.60894939504678 -94.4914651580432 617.3999999999999 + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738132 -0.1305261922200305 2.0684907214263111e-16 + outer loop + vertex 177.60894939504678 -94.4914651580432 617.3999999999999 + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + vertex 177.6634680729843 -94.07735468587917 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651145 -0.9238795325112765 -1.739939920148649e-17 + outer loop + vertex 170.99483892288274 -106.45598013501792 -62.60000000000005 + vertex 170.6089493950468 -106.61582081102533 617.3999999999999 + vertex 170.6089493950468 -106.61582081102533 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651145 -0.9238795325112765 -1.739939920148649e-17 + outer loop + vertex 170.6089493950468 -106.61582081102533 617.3999999999999 + vertex 170.99483892288274 -106.45598013501792 -62.60000000000005 + vertex 170.99483892288274 -106.45598013501792 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236506297 -0.9238795325112978 -1.7399399201500355e-17 + outer loop + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 617.3999999999999 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236506297 -0.9238795325112978 -1.7399399201500355e-17 + outer loop + vertex 178.4089493950468 -93.10582451198808 617.3999999999999 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 178.79483892288275 -92.94598383598067 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112816 0.3826834323651024 2.4889428277906147e-16 + outer loop + vertex 177.6634680729843 -94.90557563020724 617.3999999999999 + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112816 0.3826834323651024 2.4889428277906147e-16 + outer loop + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + vertex 177.6634680729843 -94.90557563020724 617.3999999999999 + vertex 177.8233087489917 -95.2914651580432 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087054 0.7933533402912468 -4.761205154971309e-17 + outer loop + vertex 172.5403202449453 -109.1328323069789 617.3999999999999 + vertex 172.20894939504683 -109.38710210313553 -62.60000000000005 + vertex 172.20894939504683 -109.38710210313553 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087054 0.7933533402912468 -4.761205154971309e-17 + outer loop + vertex 172.20894939504683 -109.38710210313553 -62.60000000000005 + vertex 172.5403202449453 -109.1328323069789 617.3999999999999 + vertex 172.5403202449453 -109.1328323069789 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006945 0.9914448613738082 8.12251096509848e-17 + outer loop + vertex 171.40894939504682 -109.60146145708045 617.3999999999999 + vertex 171.82305986721084 -109.54694277914295 -62.60000000000005 + vertex 171.40894939504682 -109.60146145708045 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006945 0.9914448613738082 8.12251096509848e-17 + outer loop + vertex 171.82305986721084 -109.54694277914295 -62.60000000000005 + vertex 171.40894939504682 -109.60146145708045 617.3999999999999 + vertex 171.82305986721084 -109.54694277914295 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738067 0.13052619222007997 -2.0684907214262419e-16 + outer loop + vertex 173.0089493950468 -108.00146145708042 617.3999999999999 + vertex 172.95443071710932 -108.41557192924445 -62.60000000000005 + vertex 172.95443071710932 -108.41557192924445 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738067 0.13052619222007997 -2.0684907214262419e-16 + outer loop + vertex 172.95443071710932 -108.41557192924445 -62.60000000000005 + vertex 173.0089493950468 -108.00146145708042 617.3999999999999 + vertex 173.0089493950468 -108.00146145708042 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912325 -0.6087614290087242 1.0937881967044986e-16 + outer loop + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + vertex 177.82330874899168 -93.6914651580432 617.3999999999999 + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912325 -0.6087614290087242 1.0937881967044986e-16 + outer loop + vertex 177.82330874899168 -93.6914651580432 617.3999999999999 + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + vertex 178.07757854514833 -93.36009430814471 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112876 -0.38268343236508756 -2.488942827790612e-16 + outer loop + vertex 172.95443071710932 -107.58735098491637 617.3999999999999 + vertex 172.7945900411019 -107.20146145708043 -62.60000000000005 + vertex 172.95443071710932 -107.58735098491637 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112876 -0.38268343236508756 -2.488942827790612e-16 + outer loop + vertex 172.7945900411019 -107.20146145708043 -62.60000000000005 + vertex 172.95443071710932 -107.58735098491637 617.3999999999999 + vertex 172.7945900411019 -107.20146145708043 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912296 -0.608761429008728 -2.449167116386773e-16 + outer loop + vertex 172.7945900411019 -107.20146145708043 617.3999999999999 + vertex 172.5403202449453 -106.87009060718195 -62.60000000000005 + vertex 172.7945900411019 -107.20146145708043 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912296 -0.608761429008728 -2.449167116386773e-16 + outer loop + vertex 172.5403202449453 -106.87009060718195 -62.60000000000005 + vertex 172.7945900411019 -107.20146145708043 617.3999999999999 + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087137 -0.7933533402912407 -2.242484713441203e-16 + outer loop + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + vertex 172.2089493950468 -106.61582081102532 -62.60000000000005 + vertex 172.5403202449453 -106.87009060718195 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087137 -0.7933533402912407 -2.242484713441203e-16 + outer loop + vertex 172.2089493950468 -106.61582081102532 -62.60000000000005 + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + vertex 172.2089493950468 -106.61582081102532 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222008005 -0.9914448613738067 -8.122510965098226e-17 + outer loop + vertex 179.2089493950468 -92.89146515804318 617.3999999999999 + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222008005 -0.9914448613738067 -8.122510965098226e-17 + outer loop + vertex 178.79483892288275 -92.94598383598067 -62.60000000000005 + vertex 179.2089493950468 -92.89146515804318 617.3999999999999 + vertex 178.79483892288275 -92.94598383598067 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290086873 0.7933533402912608 2.2424847134411675e-16 + outer loop + vertex 178.07757854514833 -95.62283600794169 617.3999999999999 + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290086873 0.7933533402912608 2.2424847134411675e-16 + outer loop + vertex 178.40894939504682 -95.87710580409828 -62.60000000000005 + vertex 178.07757854514833 -95.62283600794169 617.3999999999999 + vertex 178.40894939504682 -95.87710580409828 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738064 -0.13052619222008258 2.068490721426238e-16 + outer loop + vertex 169.8634680729843 -107.58735098491641 -62.60000000000005 + vertex 169.8089493950468 -108.00146145708044 617.3999999999999 + vertex 169.8089493950468 -108.00146145708044 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738064 -0.13052619222008258 2.068490721426238e-16 + outer loop + vertex 169.8089493950468 -108.00146145708044 617.3999999999999 + vertex 169.8634680729843 -107.58735098491641 -62.60000000000005 + vertex 169.8634680729843 -107.58735098491641 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112876 0.38268343236508756 2.488942827790612e-16 + outer loop + vertex 169.8634680729843 -108.41557192924448 617.3999999999999 + vertex 170.0233087489917 -108.80146145708044 -62.60000000000005 + vertex 169.8634680729843 -108.41557192924448 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112876 0.38268343236508756 2.488942827790612e-16 + outer loop + vertex 170.0233087489917 -108.80146145708044 -62.60000000000005 + vertex 169.8634680729843 -108.41557192924448 617.3999999999999 + vertex 170.0233087489917 -108.80146145708044 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112906 0.3826834323650804 -1.6369160198769062e-16 + outer loop + vertex 172.95443071710932 -108.41557192924445 617.3999999999999 + vertex 172.7945900411019 -108.80146145708042 -62.60000000000005 + vertex 172.7945900411019 -108.80146145708042 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112906 0.3826834323650804 -1.6369160198769062e-16 + outer loop + vertex 172.7945900411019 -108.80146145708042 -62.60000000000005 + vertex 172.95443071710932 -108.41557192924445 617.3999999999999 + vertex 172.95443071710932 -108.41557192924445 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006945 -0.9914448613738082 -8.12251096509848e-17 + outer loop + vertex 171.4089493950468 -106.40146145708043 617.3999999999999 + vertex 170.99483892288274 -106.45598013501792 -62.60000000000005 + vertex 171.4089493950468 -106.40146145708043 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006945 -0.9914448613738082 -8.12251096509848e-17 + outer loop + vertex 170.99483892288274 -106.45598013501792 -62.60000000000005 + vertex 171.4089493950468 -106.40146145708043 617.3999999999999 + vertex 170.99483892288274 -106.45598013501792 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738074 0.13052619222007578 2.3591011986530373e-16 + outer loop + vertex 169.8089493950468 -108.00146145708044 -62.60000000000005 + vertex 169.8634680729843 -108.41557192924448 617.3999999999999 + vertex 169.8634680729843 -108.41557192924448 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738074 0.13052619222007578 2.3591011986530373e-16 + outer loop + vertex 169.8634680729843 -108.41557192924448 617.3999999999999 + vertex 169.8089493950468 -108.00146145708044 -62.60000000000005 + vertex 169.8089493950468 -108.00146145708044 617.3999999999999 + endloop +endfacet +facet normal 0.608761429008743 -0.7933533402912181 4.761205154972467e-17 + outer loop + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + vertex 178.07757854514833 -93.36009430814471 617.3999999999999 + vertex 178.07757854514833 -93.36009430814471 -62.60000000000005 + endloop +endfacet +facet normal 0.608761429008743 -0.7933533402912181 4.761205154972467e-17 + outer loop + vertex 178.07757854514833 -93.36009430814471 617.3999999999999 + vertex 178.4089493950468 -93.10582451198808 -62.60000000000005 + vertex 178.4089493950468 -93.10582451198808 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738068 0.13052619222007983 2.35910119865304e-16 + outer loop + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + vertex 177.6634680729843 -94.90557563020724 617.3999999999999 + vertex 177.6634680729843 -94.90557563020724 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738068 0.13052619222007983 2.35910119865304e-16 + outer loop + vertex 177.6634680729843 -94.90557563020724 617.3999999999999 + vertex 177.60894939504678 -94.4914651580432 -62.60000000000005 + vertex 177.60894939504678 -94.4914651580432 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004275 0.9914448613738117 1.3951546310860853e-16 + outer loop + vertex 170.9948389228828 -109.54694277914295 617.3999999999999 + vertex 171.40894939504682 -109.60146145708045 -62.60000000000005 + vertex 170.9948389228828 -109.54694277914295 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222004275 0.9914448613738117 1.3951546310860853e-16 + outer loop + vertex 171.40894939504682 -109.60146145708045 -62.60000000000005 + vertex 170.9948389228828 -109.54694277914295 617.3999999999999 + vertex 171.40894939504682 -109.60146145708045 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 172.2089493950468 -106.61582081102532 617.3999999999999 + vertex 171.82305986721084 -106.4559801350179 -62.60000000000005 + vertex 172.2089493950468 -106.61582081102532 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 171.82305986721084 -106.4559801350179 -62.60000000000005 + vertex 172.2089493950468 -106.61582081102532 617.3999999999999 + vertex 171.82305986721084 -106.4559801350179 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236511393 0.9238795325112767 1.739939920148661e-17 + outer loop + vertex 172.20894939504683 -109.38710210313553 617.3999999999999 + vertex 171.82305986721084 -109.54694277914295 -62.60000000000005 + vertex 171.82305986721084 -109.54694277914295 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236511393 0.9238795325112767 1.739939920148661e-17 + outer loop + vertex 171.82305986721084 -109.54694277914295 -62.60000000000005 + vertex 172.20894939504683 -109.38710210313553 617.3999999999999 + vertex 172.20894939504683 -109.38710210313553 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112911 -0.3826834323650796 1.6369160198769084e-16 + outer loop + vertex 170.0233087489917 -107.20146145708044 -62.60000000000005 + vertex 169.8634680729843 -107.58735098491641 617.3999999999999 + vertex 169.8634680729843 -107.58735098491641 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112911 -0.3826834323650796 1.6369160198769084e-16 + outer loop + vertex 169.8634680729843 -107.58735098491641 617.3999999999999 + vertex 170.0233087489917 -107.20146145708044 -62.60000000000005 + vertex 170.0233087489917 -107.20146145708044 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087133 0.7933533402912409 2.242484713441203e-16 + outer loop + vertex 170.27757854514834 -109.13283230697894 617.3999999999999 + vertex 170.60894939504684 -109.38710210313555 -62.60000000000005 + vertex 170.27757854514834 -109.13283230697894 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087133 0.7933533402912409 2.242484713441203e-16 + outer loop + vertex 170.60894939504684 -109.38710210313555 -62.60000000000005 + vertex 170.27757854514834 -109.13283230697894 617.3999999999999 + vertex 170.60894939504684 -109.38710210313555 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912486 0.6087614290087032 2.4491671163867876e-16 + outer loop + vertex 177.8233087489917 -95.2914651580432 617.3999999999999 + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + vertex 177.8233087489917 -95.2914651580432 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912486 0.6087614290087032 2.4491671163867876e-16 + outer loop + vertex 178.07757854514833 -95.62283600794169 -62.60000000000005 + vertex 177.8233087489917 -95.2914651580432 617.3999999999999 + vertex 178.07757854514833 -95.62283600794169 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912613 0.6087614290086866 -1.093788196704605e-16 + outer loop + vertex 172.7945900411019 -108.80146145708042 617.3999999999999 + vertex 172.5403202449453 -109.1328323069789 -62.60000000000005 + vertex 172.5403202449453 -109.1328323069789 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912613 0.6087614290086866 -1.093788196704605e-16 + outer loop + vertex 172.5403202449453 -109.1328323069789 -62.60000000000005 + vertex 172.7945900411019 -108.80146145708042 617.3999999999999 + vertex 172.7945900411019 -108.80146145708042 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912207 0.6087614290087394 2.4491671163867655e-16 + outer loop + vertex 170.0233087489917 -108.80146145708044 617.3999999999999 + vertex 170.27757854514834 -109.13283230697894 -62.60000000000005 + vertex 170.0233087489917 -108.80146145708044 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912207 0.6087614290087394 2.4491671163867655e-16 + outer loop + vertex 170.27757854514834 -109.13283230697894 -62.60000000000005 + vertex 170.0233087489917 -108.80146145708044 617.3999999999999 + vertex 170.27757854514834 -109.13283230697894 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222004275 -0.9914448613738117 -1.3951546310860853e-16 + outer loop + vertex 171.82305986721084 -106.4559801350179 617.3999999999999 + vertex 171.4089493950468 -106.40146145708043 -62.60000000000005 + vertex 171.82305986721084 -106.4559801350179 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004275 -0.9914448613738117 -1.3951546310860853e-16 + outer loop + vertex 171.4089493950468 -106.40146145708043 -62.60000000000005 + vertex 171.82305986721084 -106.4559801350179 617.3999999999999 + vertex 171.4089493950468 -106.40146145708043 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112911 -0.3826834323650796 1.6369160198769084e-16 + outer loop + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + vertex 177.6634680729843 -94.07735468587917 617.3999999999999 + vertex 177.6634680729843 -94.07735468587917 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112911 -0.3826834323650796 1.6369160198769084e-16 + outer loop + vertex 177.6634680729843 -94.07735468587917 617.3999999999999 + vertex 177.82330874899168 -93.6914651580432 -62.60000000000005 + vertex 177.82330874899168 -93.6914651580432 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912486 -0.6087614290087032 -2.4491671163867876e-16 + outer loop + vertex 159.28459374206466 -99.40146145708044 617.3999999999999 + vertex 159.03032394590804 -99.07009060718195 -62.60000000000005 + vertex 159.28459374206466 -99.40146145708044 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912486 -0.6087614290087032 -2.4491671163867876e-16 + outer loop + vertex 159.03032394590804 -99.07009060718195 -62.60000000000005 + vertex 159.28459374206466 -99.40146145708044 617.3999999999999 + vertex 159.03032394590804 -99.07009060718195 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290086873 -0.7933533402912608 -2.2424847134411675e-16 + outer loop + vertex 159.03032394590804 -99.07009060718195 617.3999999999999 + vertex 158.69895309600955 -98.81582081102533 -62.60000000000005 + vertex 159.03032394590804 -99.07009060718195 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290086873 -0.7933533402912608 -2.2424847134411675e-16 + outer loop + vertex 158.69895309600955 -98.81582081102533 -62.60000000000005 + vertex 159.03032394590804 -99.07009060718195 617.3999999999999 + vertex 158.69895309600955 -98.81582081102533 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222007983 -0.9914448613738067 -1.3951546310861622e-16 + outer loop + vertex 158.3130635681736 -98.65598013501793 617.3999999999999 + vertex 157.89895309600956 -98.60146145708043 -62.60000000000005 + vertex 158.3130635681736 -98.65598013501793 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222007983 -0.9914448613738067 -1.3951546310861622e-16 + outer loop + vertex 157.89895309600956 -98.60146145708043 -62.60000000000005 + vertex 158.3130635681736 -98.65598013501793 617.3999999999999 + vertex 157.89895309600956 -98.60146145708043 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 158.69895309600955 -98.81582081102533 617.3999999999999 + vertex 158.3130635681736 -98.65598013501793 -62.60000000000005 + vertex 158.69895309600955 -98.81582081102533 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650796 -0.9238795325112911 -1.8829806831558214e-16 + outer loop + vertex 158.3130635681736 -98.65598013501793 -62.60000000000005 + vertex 158.69895309600955 -98.81582081102533 617.3999999999999 + vertex 158.3130635681736 -98.65598013501793 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912617 -0.6087614290086859 1.093788196704607e-16 + outer loop + vertex 170.27757854514832 -106.87009060718195 -62.60000000000005 + vertex 170.0233087489917 -107.20146145708044 617.3999999999999 + vertex 170.0233087489917 -107.20146145708044 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912617 -0.6087614290086859 1.093788196704607e-16 + outer loop + vertex 170.0233087489917 -107.20146145708044 617.3999999999999 + vertex 170.27757854514832 -106.87009060718195 -62.60000000000005 + vertex 170.27757854514832 -106.87009060718195 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912282 -0.6087614290087299 1.093788196704483e-16 + outer loop + vertex 156.7675822461111 -99.07009060718198 -62.60000000000005 + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912282 -0.6087614290087299 1.093788196704483e-16 + outer loop + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + vertex 156.7675822461111 -99.07009060718198 -62.60000000000005 + vertex 156.7675822461111 -99.07009060718198 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290086872 0.7933533402912609 2.2424847134411675e-16 + outer loop + vertex 156.7675822461111 -101.33283230697894 617.3999999999999 + vertex 157.09895309600958 -101.58710210313555 -62.60000000000005 + vertex 156.7675822461111 -101.33283230697894 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290086872 0.7933533402912609 2.2424847134411675e-16 + outer loop + vertex 157.09895309600958 -101.58710210313555 -62.60000000000005 + vertex 156.7675822461111 -101.33283230697894 617.3999999999999 + vertex 157.09895309600958 -101.58710210313555 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222008038 0.9914448613738067 8.122510965098218e-17 + outer loop + vertex 157.8989530960096 -101.80146145708045 617.3999999999999 + vertex 158.31306356817362 -101.74694277914296 -62.60000000000005 + vertex 157.8989530960096 -101.80146145708045 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222008038 0.9914448613738067 8.122510965098218e-17 + outer loop + vertex 158.31306356817362 -101.74694277914296 -62.60000000000005 + vertex 157.8989530960096 -101.80146145708045 617.3999999999999 + vertex 158.31306356817362 -101.74694277914296 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087593 -0.7933533402912054 4.7612051549729734e-17 + outer loop + vertex 157.09895309600955 -98.81582081102533 -62.60000000000005 + vertex 156.7675822461111 -99.07009060718198 617.3999999999999 + vertex 156.7675822461111 -99.07009060718198 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087593 -0.7933533402912054 4.7612051549729734e-17 + outer loop + vertex 156.7675822461111 -99.07009060718198 617.3999999999999 + vertex 157.09895309600955 -98.81582081102533 -62.60000000000005 + vertex 157.09895309600955 -98.81582081102533 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236506297 0.9238795325112978 1.7399399201500355e-17 + outer loop + vertex 158.69895309600957 -101.58710210313555 617.3999999999999 + vertex 158.31306356817362 -101.74694277914296 -62.60000000000005 + vertex 158.31306356817362 -101.74694277914296 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236506297 0.9238795325112978 1.7399399201500355e-17 + outer loop + vertex 158.31306356817362 -101.74694277914296 -62.60000000000005 + vertex 158.69895309600957 -101.58710210313555 617.3999999999999 + vertex 158.69895309600957 -101.58710210313555 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738124 0.13052619222003736 2.3591011986530057e-16 + outer loop + vertex 156.29895309600957 -100.20146145708047 -62.60000000000005 + vertex 156.35347177394706 -100.6155719292445 617.3999999999999 + vertex 156.35347177394706 -100.6155719292445 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738124 0.13052619222003736 2.3591011986530057e-16 + outer loop + vertex 156.35347177394706 -100.6155719292445 617.3999999999999 + vertex 156.29895309600957 -100.20146145708047 -62.60000000000005 + vertex 156.29895309600957 -100.20146145708047 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912325 0.6087614290087242 -1.0937881967044986e-16 + outer loop + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + vertex 159.03032394590804 -101.33283230697893 -62.60000000000005 + vertex 159.03032394590804 -101.33283230697893 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912325 0.6087614290087242 -1.0937881967044986e-16 + outer loop + vertex 159.03032394590804 -101.33283230697893 -62.60000000000005 + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738068 -0.13052619222007983 -2.35910119865304e-16 + outer loop + vertex 159.4444344180721 -99.78735098491639 617.3999999999999 + vertex 159.4989530960096 -100.20146145708043 -62.60000000000005 + vertex 159.4989530960096 -100.20146145708043 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738068 -0.13052619222007983 -2.35910119865304e-16 + outer loop + vertex 159.4989530960096 -100.20146145708043 -62.60000000000005 + vertex 159.4444344180721 -99.78735098491639 617.3999999999999 + vertex 159.4444344180721 -99.78735098491639 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112816 -0.3826834323651024 -2.4889428277906147e-16 + outer loop + vertex 159.4444344180721 -99.78735098491639 617.3999999999999 + vertex 159.28459374206466 -99.40146145708044 -62.60000000000005 + vertex 159.4444344180721 -99.78735098491639 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112816 -0.3826834323651024 -2.4889428277906147e-16 + outer loop + vertex 159.28459374206466 -99.40146145708044 -62.60000000000005 + vertex 159.4444344180721 -99.78735098491639 617.3999999999999 + vertex 159.28459374206466 -99.40146145708044 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112689 0.3826834323651328 2.48894282779062e-16 + outer loop + vertex 156.35347177394706 -100.6155719292445 617.3999999999999 + vertex 156.51331244995447 -101.00146145708045 -62.60000000000005 + vertex 156.35347177394706 -100.6155719292445 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112689 0.3826834323651328 2.48894282779062e-16 + outer loop + vertex 156.51331244995447 -101.00146145708045 -62.60000000000005 + vertex 156.35347177394706 -100.6155719292445 617.3999999999999 + vertex 156.51331244995447 -101.00146145708045 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738134 -0.13052619222003037 2.0684907214263116e-16 + outer loop + vertex 156.35347177394706 -99.78735098491643 -62.60000000000005 + vertex 156.29895309600957 -100.20146145708047 617.3999999999999 + vertex 156.29895309600957 -100.20146145708047 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738134 -0.13052619222003037 2.0684907214263116e-16 + outer loop + vertex 156.29895309600957 -100.20146145708047 617.3999999999999 + vertex 156.35347177394706 -99.78735098491643 -62.60000000000005 + vertex 156.35347177394706 -99.78735098491643 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236510355 -0.9238795325112811 -1.7399399201489422e-17 + outer loop + vertex 157.4848426238455 -98.65598013501793 -62.60000000000005 + vertex 157.09895309600955 -98.81582081102533 617.3999999999999 + vertex 157.09895309600955 -98.81582081102533 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236510355 -0.9238795325112811 -1.7399399201489422e-17 + outer loop + vertex 157.09895309600955 -98.81582081102533 617.3999999999999 + vertex 157.4848426238455 -98.65598013501793 -62.60000000000005 + vertex 157.4848426238455 -98.65598013501793 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912484 0.6087614290087034 2.449167116386787e-16 + outer loop + vertex 156.51331244995447 -101.00146145708045 617.3999999999999 + vertex 156.7675822461111 -101.33283230697894 -62.60000000000005 + vertex 156.51331244995447 -101.00146145708045 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912484 0.6087614290087034 2.449167116386787e-16 + outer loop + vertex 156.7675822461111 -101.33283230697894 -62.60000000000005 + vertex 156.51331244995447 -101.00146145708045 617.3999999999999 + vertex 156.7675822461111 -101.33283230697894 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222007983 0.9914448613738067 1.3951546310861622e-16 + outer loop + vertex 157.48484262384554 -101.74694277914296 617.3999999999999 + vertex 157.8989530960096 -101.80146145708045 -62.60000000000005 + vertex 157.48484262384554 -101.74694277914296 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222007983 0.9914448613738067 1.3951546310861622e-16 + outer loop + vertex 157.8989530960096 -101.80146145708045 -62.60000000000005 + vertex 157.48484262384554 -101.74694277914296 617.3999999999999 + vertex 157.8989530960096 -101.80146145708045 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087054 -0.7933533402912468 4.761205154971309e-17 + outer loop + vertex 170.6089493950468 -106.61582081102533 -62.60000000000005 + vertex 170.27757854514832 -106.87009060718195 617.3999999999999 + vertex 170.27757854514832 -106.87009060718195 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087054 -0.7933533402912468 4.761205154971309e-17 + outer loop + vertex 170.27757854514832 -106.87009060718195 617.3999999999999 + vertex 170.6089493950468 -106.61582081102533 -62.60000000000005 + vertex 170.6089493950468 -106.61582081102533 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004744 -0.9914448613738109 -8.122510965099001e-17 + outer loop + vertex 157.89895309600956 -98.60146145708043 617.3999999999999 + vertex 157.4848426238455 -98.65598013501793 -62.60000000000005 + vertex 157.89895309600956 -98.60146145708043 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222004744 -0.9914448613738109 -8.122510965099001e-17 + outer loop + vertex 157.4848426238455 -98.65598013501793 -62.60000000000005 + vertex 157.89895309600956 -98.60146145708043 617.3999999999999 + vertex 157.4848426238455 -98.65598013501793 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112911 -0.3826834323650796 1.6369160198769084e-16 + outer loop + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + vertex 156.35347177394706 -99.78735098491643 617.3999999999999 + vertex 156.35347177394706 -99.78735098491643 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112911 -0.3826834323650796 1.6369160198769084e-16 + outer loop + vertex 156.35347177394706 -99.78735098491643 617.3999999999999 + vertex 156.51331244995444 -99.40146145708046 -62.60000000000005 + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + endloop +endfacet +facet normal -0.608761429008743 0.7933533402912181 -4.761205154972467e-17 + outer loop + vertex 159.03032394590804 -101.33283230697893 617.3999999999999 + vertex 158.69895309600957 -101.58710210313555 -62.60000000000005 + vertex 158.69895309600957 -101.58710210313555 617.3999999999999 + endloop +endfacet +facet normal -0.608761429008743 0.7933533402912181 -4.761205154972467e-17 + outer loop + vertex 158.69895309600957 -101.58710210313555 -62.60000000000005 + vertex 159.03032394590804 -101.33283230697893 617.3999999999999 + vertex 159.03032394590804 -101.33283230697893 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738132 0.1305261922200305 -2.0684907214263111e-16 + outer loop + vertex 159.4989530960096 -100.20146145708043 617.3999999999999 + vertex 159.4444344180721 -100.61557192924447 -62.60000000000005 + vertex 159.4444344180721 -100.61557192924447 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738132 0.1305261922200305 -2.0684907214263111e-16 + outer loop + vertex 159.4444344180721 -100.61557192924447 -62.60000000000005 + vertex 159.4989530960096 -100.20146145708043 617.3999999999999 + vertex 159.4989530960096 -100.20146145708043 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236507946 0.9238795325112912 1.8829806831558211e-16 + outer loop + vertex 157.09895309600958 -101.58710210313555 617.3999999999999 + vertex 157.48484262384554 -101.74694277914296 -62.60000000000005 + vertex 157.09895309600958 -101.58710210313555 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236507946 0.9238795325112912 1.8829806831558211e-16 + outer loop + vertex 157.48484262384554 -101.74694277914296 -62.60000000000005 + vertex 157.09895309600958 -101.58710210313555 617.3999999999999 + vertex 157.48484262384554 -101.74694277914296 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112911 0.3826834323650796 -1.6369160198769084e-16 + outer loop + vertex 159.4444344180721 -100.61557192924447 617.3999999999999 + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112911 0.3826834323650796 -1.6369160198769084e-16 + outer loop + vertex 159.2845937420647 -101.00146145708044 -62.60000000000005 + vertex 159.4444344180721 -100.61557192924447 617.3999999999999 + vertex 159.4444344180721 -100.61557192924447 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650856 -0.9238795325112886 -1.8829806831558317e-16 + outer loop + vertex 171.5893608344856 -110.60661776791083 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 171.5893608344856 -110.60661776791083 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650856 -0.9238795325112886 -1.8829806831558317e-16 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 171.5893608344856 -110.60661776791083 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + endloop +endfacet +facet normal -0.4999999999999981 -0.8660254037844397 -2.0805319374395335e-16 + outer loop + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 166.84484777990903 -107.90671734540621 617.3999999999999 + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + endloop +endfacet +facet normal -0.4999999999999981 -0.8660254037844397 -2.0805319374395335e-16 + outer loop + vertex 166.84484777990903 -107.90671734540621 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 -62.60000000000005 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000033 -0.8660254037844369 -2.080531937439542e-16 + outer loop + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 166.69843761839527 -107.36030718389243 -62.60000000000005 + vertex 167.04484777990902 -107.56030718389242 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000033 -0.8660254037844369 -2.080531937439542e-16 + outer loop + vertex 166.69843761839527 -107.36030718389243 -62.60000000000005 + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 166.69843761839527 -107.36030718389243 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + vertex 170.3208507942464 -105.48610351731132 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006367 -0.9914448613738089 -1.3951546310861287e-16 + outer loop + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + vertex 171.5893608344856 -110.60661776791083 -62.60000000000005 + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + endloop +endfacet +facet normal -0.13052619222006367 -0.9914448613738089 -1.3951546310861287e-16 + outer loop + vertex 171.5893608344856 -110.60661776791083 -62.60000000000005 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + vertex 171.5893608344856 -110.60661776791083 617.3999999999999 + endloop +endfacet +facet normal -0.9659258262890691 -0.25881904510251824 -2.444938803619327e-16 + outer loop + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 170.3208507942464 -105.48610351731132 -62.60000000000005 + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + endloop +endfacet +facet normal -0.9659258262890691 -0.25881904510251824 -2.444938803619327e-16 + outer loop + vertex 170.3208507942464 -105.48610351731132 -62.60000000000005 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + endloop +endfacet +facet normal -0.8660254037844304 0.5000000000000142 -1.3771336778111328e-16 + outer loop + vertex 167.3984376183953 -106.14787161859421 617.3999999999999 + vertex 166.69843761839527 -107.36030718389243 -62.60000000000005 + vertex 166.69843761839527 -107.36030718389243 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844304 0.5000000000000142 -1.3771336778111328e-16 + outer loop + vertex 166.69843761839527 -107.36030718389243 -62.60000000000005 + vertex 167.3984376183953 -106.14787161859421 617.3999999999999 + vertex 167.3984376183953 -106.14787161859421 -62.60000000000005 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + vertex 166.84484777990903 -107.90671734540621 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 166.84484777990903 -107.90671734540621 -62.60000000000005 + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 167.04484777990902 -107.56030718389242 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 167.3984376183953 -106.14787161859421 617.3999999999999 + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 167.3984376183953 -106.14787161859421 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 169.30369350672103 -107.2478716185942 -62.60000000000005 + vertex 167.3984376183953 -106.14787161859421 617.3999999999999 + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000004 -0.8660254037844386 -2.080531937439537e-16 + outer loop + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 169.41834729097397 -102.11791458908962 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000004 -0.8660254037844386 -2.080531937439537e-16 + outer loop + vertex 163.9895552000824 -98.98360001403886 -62.60000000000005 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.0805319374395374e-16 + outer loop + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 165.75972261146822 -84.18620926971741 -62.60000000000008 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.0805319374395374e-16 + outer loop + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + vertex 170.0630547111473 -87.13261943123119 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + vertex 170.2630547111473 -86.7862092697174 -62.60000000000005 + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000018 0.8660254037844376 2.0805319374395391e-16 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000018 0.8660254037844376 2.0805319374395391e-16 + outer loop + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 170.4094648726611 -87.3326194312312 -62.60000000000005 + vertex 169.70946487266107 -88.5450549965294 617.3999999999999 + vertex 169.70946487266107 -88.5450549965294 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 169.70946487266107 -88.5450549965294 617.3999999999999 + vertex 170.4094648726611 -87.3326194312312 -62.60000000000005 + vertex 170.4094648726611 -87.3326194312312 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 176.48653621919567 -94.8068230978123 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 175.59843761839528 -91.9450549965294 -62.60000000000005 + vertex 177.50369350672102 -93.0450549965294 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 175.59843761839528 -91.9450549965294 -62.60000000000005 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 175.59843761839528 -91.9450549965294 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844304 0.5000000000000142 -1.3771336778111328e-16 + outer loop + vertex 176.2984376183953 -90.7326194312312 617.3999999999999 + vertex 175.59843761839528 -91.9450549965294 -62.60000000000005 + vertex 175.59843761839528 -91.9450549965294 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844304 0.5000000000000142 -1.3771336778111328e-16 + outer loop + vertex 175.59843761839528 -91.9450549965294 -62.60000000000005 + vertex 176.2984376183953 -90.7326194312312 617.3999999999999 + vertex 176.2984376183953 -90.7326194312312 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 166.78705169680995 -89.20682309781228 617.3999999999999 + vertex 166.78705169680995 -89.20682309781228 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 166.78705169680995 -89.20682309781228 617.3999999999999 + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + endloop +endfacet +facet normal 0.9659258262890691 0.25881904510251824 2.444938803619327e-16 + outer loop + vertex 166.78705169680995 -89.20682309781228 -62.60000000000005 + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 167.6895552000824 -92.575012026034 -62.60000000000005 + endloop +endfacet +facet normal 0.9659258262890691 0.25881904510251824 2.444938803619327e-16 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 166.78705169680995 -89.20682309781228 -62.60000000000005 + vertex 166.78705169680995 -89.20682309781228 617.3999999999999 + endloop +endfacet +facet normal -0.25881904510251624 0.9659258262890696 4.9737767925804736e-17 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 -62.60000000000005 + endloop +endfacet +facet normal -0.25881904510251624 0.9659258262890696 4.9737767925804736e-17 + outer loop + vertex 176.48653621919567 -94.8068230978123 -62.60000000000005 + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 176.48653621919567 -94.8068230978123 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 176.2984376183953 -90.7326194312312 617.3999999999999 + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 176.2984376183953 -90.7326194312312 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 176.2984376183953 -90.7326194312312 617.3999999999999 + vertex 176.64484777990907 -90.9326194312312 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 176.64484777990907 -90.9326194312312 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111663e-16 + outer loop + vertex 176.64484777990907 -90.9326194312312 -62.60000000000005 + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 176.8448477799091 -90.58620926971743 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + vertex 170.4094648726611 -87.3326194312312 -62.60000000000005 + vertex 170.0630547111473 -87.13261943123119 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 170.4094648726611 -87.3326194312312 -62.60000000000005 + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + vertex 170.4094648726611 -87.3326194312312 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 169.70946487266107 -88.5450549965294 617.3999999999999 + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 169.70946487266107 -88.5450549965294 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 167.80420898433533 -87.44505499652941 -62.60000000000005 + vertex 169.70946487266107 -88.5450549965294 617.3999999999999 + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112865 0.3826834323650907 2.488942827790613e-16 + outer loop + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + endloop +endfacet +facet normal 0.9238795325112865 0.3826834323650907 2.488942827790613e-16 + outer loop + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + vertex 181.8141057058772 -93.79341562839934 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738093 -0.1305261922200602 2.0684907214262695e-16 + outer loop + vertex 181.84817987958814 -94.05223467350186 -62.60000000000002 + vertex 181.81410570587718 -94.31105371860438 617.3999999999999 + vertex 181.81410570587718 -94.31105371860438 -62.60000000000002 + endloop +endfacet +facet normal 0.9914448613738093 -0.1305261922200602 2.0684907214262695e-16 + outer loop + vertex 181.81410570587718 -94.31105371860438 617.3999999999999 + vertex 181.84817987958814 -94.05223467350186 -62.60000000000002 + vertex 181.84817987958814 -94.05223467350186 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112951 -0.3826834323650697 1.636916019876928e-16 + outer loop + vertex 181.81410570587718 -94.31105371860438 -62.60000000000002 + vertex 181.71420528337256 -94.55223467350186 617.3999999999999 + vertex 181.71420528337256 -94.55223467350186 -62.60000000000002 + endloop +endfacet +facet normal 0.9238795325112951 -0.3826834323650697 1.636916019876928e-16 + outer loop + vertex 181.71420528337256 -94.55223467350186 617.3999999999999 + vertex 181.81410570587718 -94.31105371860438 -62.60000000000002 + vertex 181.81410570587718 -94.31105371860438 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111666e-16 + outer loop + vertex 181.71420528337256 -94.55223467350186 -62.60000000000002 + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111666e-16 + outer loop + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + vertex 181.71420528337256 -94.55223467350186 -62.60000000000002 + vertex 181.71420528337256 -94.55223467350186 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738132 0.13052619222003078 2.3591011986529993e-16 + outer loop + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 181.84817987958814 -94.05223467350186 617.3999999999999 + vertex 181.84817987958814 -94.05223467350186 -62.60000000000002 + endloop +endfacet +facet normal 0.9914448613738132 0.13052619222003078 2.3591011986529993e-16 + outer loop + vertex 181.84817987958814 -94.05223467350186 617.3999999999999 + vertex 181.8141057058772 -93.79341562839934 -62.60000000000003 + vertex 181.8141057058772 -93.79341562839934 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.0805319374395374e-16 + outer loop + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 176.8448477799091 -90.58620926971743 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.0805319374395374e-16 + outer loop + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + endloop +endfacet +facet normal 0.793353340291229 0.608761429008729 2.4491671163867724e-16 + outer loop + vertex 181.5552866607747 -93.34512789231532 617.3999999999999 + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + vertex 181.5552866607747 -93.34512789231532 -62.600000000000044 + endloop +endfacet +facet normal 0.793353340291229 0.608761429008729 2.4491671163867724e-16 + outer loop + vertex 181.71420528337256 -93.55223467350186 -62.60000000000003 + vertex 181.5552866607747 -93.34512789231532 617.3999999999999 + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087248 0.7933533402912322 2.242484713441219e-16 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 181.5552866607747 -93.34512789231532 -62.600000000000044 + vertex 181.34817987958814 -93.18620926971742 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087248 0.7933533402912322 2.242484713441219e-16 + outer loop + vertex 181.5552866607747 -93.34512789231532 -62.600000000000044 + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 181.5552866607747 -93.34512789231532 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 178.7677951218588 -98.85556677318094 -62.60000000000005 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 178.7677951218588 -98.85556677318094 -62.60000000000005 + vertex 178.7677951218588 -98.85556677318094 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + vertex 178.7677951218588 -98.85556677318094 617.3999999999999 + vertex 178.7677951218588 -98.85556677318094 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000003 -0.8660254037844387 -2.080531937439537e-16 + outer loop + vertex 178.7677951218588 -98.85556677318094 617.3999999999999 + vertex 179.11420528337257 -99.05556677318094 -62.60000000000005 + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 177.3553595565606 -98.5019769346947 -62.60000000000005 + vertex 177.3553595565606 -98.5019769346947 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 177.3553595565606 -98.5019769346947 -62.60000000000005 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 178.45535955656058 -96.59672104636894 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + vertex 170.19108795200523 -101.91085935300757 617.3999999999999 + vertex 170.19108795200523 -101.91085935300757 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 170.19108795200523 -101.91085935300757 617.3999999999999 + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + endloop +endfacet +facet normal -0.5000000000000072 -0.8660254037844345 -2.0805319374395473e-16 + outer loop + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 177.3553595565606 -98.5019769346947 -62.60000000000005 + vertex 178.56779512185878 -99.20197693469471 -62.60000000000005 + endloop +endfacet +facet normal -0.5000000000000072 -0.8660254037844345 -2.0805319374395473e-16 + outer loop + vertex 177.3553595565606 -98.5019769346947 -62.60000000000005 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 177.3553595565606 -98.5019769346947 617.3999999999999 + endloop +endfacet +facet normal 0.25881904510252063 -0.9659258262890684 -4.973776792580361e-17 + outer loop + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + vertex 173.32540252705599 -96.48206726211602 -62.60000000000005 + endloop +endfacet +facet normal 0.25881904510252063 -0.9659258262890684 -4.973776792580361e-17 + outer loop + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 -62.60000000000005 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + endloop +endfacet +facet normal 0.9659258262890691 0.2588190451025179 2.444938803619327e-16 + outer loop + vertex 170.19108795200523 -101.91085935300757 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + endloop +endfacet +facet normal 0.9659258262890691 0.2588190451025179 2.444938803619327e-16 + outer loop + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 170.19108795200523 -101.91085935300757 -62.60000000000005 + vertex 170.19108795200523 -101.91085935300757 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 173.95535955656058 -104.3909496804289 617.3999999999999 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + endloop +endfacet +facet normal -0.8660254037844385 0.5000000000000002 -1.3771336778111666e-16 + outer loop + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 173.95535955656058 -104.3909496804289 617.3999999999999 + vertex 173.95535955656058 -104.3909496804289 -62.60000000000005 + endloop +endfacet +facet normal 0.500000000000022 0.8660254037844259 2.0805319374395714e-16 + outer loop + vertex 173.95535955656058 -104.3909496804289 617.3999999999999 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 173.95535955656058 -104.3909496804289 -62.60000000000005 + endloop +endfacet +facet normal 0.500000000000022 0.8660254037844259 2.0805319374395714e-16 + outer loop + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 173.95535955656058 -104.3909496804289 617.3999999999999 + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000003 0.8660254037844387 2.080531937439537e-16 + outer loop + vertex 172.8553595565606 -106.29620556875466 -62.60000000000005 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + vertex 174.96779512185879 -105.43735984194271 -62.60000000000005 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + vertex 175.16779512185877 -105.09094968042892 -62.60000000000005 + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + endloop +endfacet +facet normal 0.5000000000000033 0.8660254037844369 2.080531937439542e-16 + outer loop + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 174.96779512185879 -105.43735984194271 -62.60000000000005 + endloop +endfacet +facet normal 0.5000000000000033 0.8660254037844369 2.080531937439542e-16 + outer loop + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + vertex 175.31420528337256 -105.63735984194271 617.3999999999999 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 172.71420528337256 -110.14069194162177 617.3999999999999 + vertex 172.71420528337256 -110.14069194162177 -62.60000000000008 + endloop +endfacet +facet normal 0.8660254037844385 -0.5000000000000002 1.3771336778111663e-16 + outer loop + vertex 172.71420528337256 -110.14069194162177 617.3999999999999 + vertex 175.31420528337256 -105.63735984194271 -62.60000000000005 + vertex 175.31420528337256 -105.63735984194271 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912218 -0.608761429008738 1.0937881967044599e-16 + outer loop + vertex 172.71420528337256 -110.14069194162177 -62.60000000000008 + vertex 172.55528666077467 -110.34779872280829 617.3999999999999 + vertex 172.55528666077467 -110.34779872280829 -62.60000000000008 + endloop +endfacet +facet normal 0.7933533402912218 -0.608761429008738 1.0937881967044599e-16 + outer loop + vertex 172.55528666077467 -110.34779872280829 617.3999999999999 + vertex 172.71420528337256 -110.14069194162177 -62.60000000000008 + vertex 172.71420528337256 -110.14069194162177 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087274 -0.7933533402912301 4.761205154971988e-17 + outer loop + vertex 172.55528666077467 -110.34779872280829 -62.60000000000008 + vertex 172.34817987958812 -110.5067173454062 617.3999999999999 + vertex 172.34817987958812 -110.5067173454062 -62.60000000000008 + endloop +endfacet +facet normal 0.6087614290087274 -0.7933533402912301 4.761205154971988e-17 + outer loop + vertex 172.34817987958812 -110.5067173454062 617.3999999999999 + vertex 172.55528666077467 -110.34779872280829 -62.60000000000008 + vertex 172.55528666077467 -110.34779872280829 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236510943 -0.9238795325112787 -1.7399399201487847e-17 + outer loop + vertex 172.34817987958812 -110.5067173454062 -62.60000000000008 + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 172.10699892469066 -110.60661776791083 -62.600000000000065 + endloop +endfacet +facet normal 0.38268343236510943 -0.9238795325112787 -1.7399399201487847e-17 + outer loop + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 172.34817987958812 -110.5067173454062 -62.60000000000008 + vertex 172.34817987958812 -110.5067173454062 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004544 -0.9914448613738112 -8.122510965099047e-17 + outer loop + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + vertex 172.10699892469066 -110.60661776791083 -62.600000000000065 + endloop +endfacet +facet normal 0.13052619222004544 -0.9914448613738112 -8.122510965099047e-17 + outer loop + vertex 171.84817987958812 -110.64069194162177 -62.600000000000065 + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 166.84484777990903 -107.90671734540621 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 170.27757854514834 -109.13283230697894 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 170.27757854514834 -109.13283230697894 617.3999999999999 + vertex 170.0233087489917 -108.80146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 170.0233087489917 -108.80146145708044 617.3999999999999 + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + vertex 170.0233087489917 -108.80146145708044 617.3999999999999 + vertex 169.8634680729843 -108.41557192924448 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + vertex 169.8634680729843 -108.41557192924448 617.3999999999999 + vertex 169.8089493950468 -108.00146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + vertex 169.8089493950468 -108.00146145708044 617.3999999999999 + vertex 169.8634680729843 -107.58735098491641 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + vertex 169.8634680729843 -107.58735098491641 617.3999999999999 + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + vertex 169.8634680729843 -107.58735098491641 617.3999999999999 + vertex 170.0233087489917 -107.20146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + vertex 170.0233087489917 -107.20146145708044 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.27757854514834 -109.13283230697894 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 170.60894939504684 -109.38710210313555 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.60894939504684 -109.38710210313555 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 170.9948389228828 -109.54694277914295 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.9948389228828 -109.54694277914295 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 171.40894939504682 -109.60146145708045 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 171.40894939504682 -109.60146145708045 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 171.82305986721084 -109.54694277914295 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 171.82305986721084 -109.54694277914295 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 172.20894939504683 -109.38710210313553 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.20894939504683 -109.38710210313553 617.3999999999999 + vertex 171.34817987958812 -110.5067173454062 617.3999999999999 + vertex 171.5893608344856 -110.60661776791083 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.20894939504683 -109.38710210313553 617.3999999999999 + vertex 171.5893608344856 -110.60661776791083 617.3999999999999 + vertex 172.5403202449453 -109.1328323069789 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.5403202449453 -109.1328323069789 617.3999999999999 + vertex 171.5893608344856 -110.60661776791083 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.5403202449453 -109.1328323069789 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + vertex 172.7945900411019 -108.80146145708042 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 175.31420528337256 -105.63735984194271 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.31420528337256 -105.63735984194271 617.3999999999999 + vertex 172.10699892469066 -110.60661776791083 617.3999999999999 + vertex 172.34817987958812 -110.5067173454062 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.31420528337256 -105.63735984194271 617.3999999999999 + vertex 172.34817987958812 -110.5067173454062 617.3999999999999 + vertex 172.55528666077467 -110.34779872280829 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.31420528337256 -105.63735984194271 617.3999999999999 + vertex 172.55528666077467 -110.34779872280829 617.3999999999999 + vertex 172.71420528337256 -110.14069194162177 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 171.4089493950468 -106.40146145708043 617.3999999999999 + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 171.4089493950468 -106.40146145708043 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 170.99483892288274 -106.45598013501792 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.99483892288274 -106.45598013501792 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 170.6089493950468 -106.61582081102533 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.6089493950468 -106.61582081102533 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 170.27757854514832 -106.87009060718195 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.27757854514832 -106.87009060718195 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + vertex 170.0233087489917 -107.20146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + vertex 171.4089493950468 -106.40146145708043 617.3999999999999 + vertex 171.82305986721084 -106.4559801350179 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + vertex 171.82305986721084 -106.4559801350179 617.3999999999999 + vertex 172.2089493950468 -106.61582081102532 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + vertex 172.2089493950468 -106.61582081102532 617.3999999999999 + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 172.8553595565606 -106.29620556875466 617.3999999999999 + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + vertex 173.95535955656058 -104.3909496804289 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.95535955656058 -104.3909496804289 617.3999999999999 + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 172.5403202449453 -106.87009060718195 617.3999999999999 + vertex 172.7945900411019 -107.20146145708043 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 172.7945900411019 -107.20146145708043 617.3999999999999 + vertex 172.95443071710932 -107.58735098491637 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 172.95443071710932 -107.58735098491637 617.3999999999999 + vertex 173.0089493950468 -108.00146145708042 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 173.0089493950468 -108.00146145708042 617.3999999999999 + vertex 172.95443071710932 -108.41557192924445 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 172.95443071710932 -108.41557192924445 617.3999999999999 + vertex 172.7945900411019 -108.80146145708042 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 172.7945900411019 -108.80146145708042 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 175.16779512185877 -105.09094968042892 617.3999999999999 + vertex 171.84817987958812 -110.64069194162177 617.3999999999999 + vertex 174.96779512185879 -105.43735984194271 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 161.94010736919756 -89.6019769346947 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.15347177394705 -86.27735468587916 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 164.15347177394705 -86.27735468587916 617.3999999999999 + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + vertex 165.25972261146822 -84.05223467350184 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.15347177394705 -86.27735468587916 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.09895309600955 -86.69146515804319 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.09895309600955 -86.69146515804319 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.15347177394705 -87.10557563020723 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.15347177394705 -87.10557563020723 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.31331244995442 -87.49146515804318 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.31331244995442 -87.49146515804318 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.56758224611107 -87.82283600794166 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.56758224611107 -87.82283600794166 617.3999999999999 + vertex 163.15254293449576 -90.30197693469471 617.3999999999999 + vertex 164.25254293449578 -88.39672104636894 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.56758224611107 -87.82283600794166 617.3999999999999 + vertex 164.25254293449578 -88.39672104636894 617.3999999999999 + vertex 164.89895309600956 -88.0771058040983 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.89895309600956 -88.0771058040983 617.3999999999999 + vertex 164.25254293449578 -88.39672104636894 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.89895309600956 -88.0771058040983 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 165.28484262384555 -88.2369464801057 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.28484262384555 -88.2369464801057 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 165.69895309600957 -88.2914651580432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.69895309600957 -88.2914651580432 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 166.1130635681736 -88.23694648010569 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.1130635681736 -88.23694648010569 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 166.49895309600956 -88.07710580409828 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.49895309600956 -88.07710580409828 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 166.83032394590805 -87.82283600794165 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.83032394590805 -87.82283600794165 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.69895309600955 -98.81582081102533 617.3999999999999 + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + vertex 158.3130635681736 -98.65598013501793 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + vertex 158.69895309600955 -98.81582081102533 617.3999999999999 + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 158.69895309600955 -98.81582081102533 617.3999999999999 + vertex 159.03032394590804 -99.07009060718195 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 159.03032394590804 -99.07009060718195 617.3999999999999 + vertex 159.28459374206466 -99.40146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 159.28459374206466 -99.40146145708044 617.3999999999999 + vertex 159.4444344180721 -99.78735098491639 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 159.4444344180721 -99.78735098491639 617.3999999999999 + vertex 159.4989530960096 -100.20146145708043 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 159.4989530960096 -100.20146145708043 617.3999999999999 + vertex 159.4444344180721 -100.61557192924447 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 159.4444344180721 -100.61557192924447 617.3999999999999 + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 155.29379678517915 -100.38187289651923 617.3999999999999 + vertex 157.9936972076838 -95.63735984194264 617.3999999999999 + vertex 155.39369720768377 -100.14069194162175 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 157.9936972076838 -95.63735984194264 617.3999999999999 + vertex 155.29379678517915 -100.38187289651923 617.3999999999999 + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + vertex 155.29379678517915 -100.38187289651923 617.3999999999999 + vertex 155.25972261146825 -100.64069194162175 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + vertex 155.25972261146825 -100.64069194162175 617.3999999999999 + vertex 155.29379678517915 -100.89951098672427 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + vertex 155.29379678517915 -100.89951098672427 617.3999999999999 + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.34010736919757 -95.83735984194263 617.3999999999999 + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + vertex 156.7675822461111 -99.07009060718198 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.54010736919759 -95.49094968042887 617.3999999999999 + vertex 156.7675822461111 -99.07009060718198 617.3999999999999 + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + vertex 156.7675822461111 -99.07009060718198 617.3999999999999 + vertex 157.09895309600955 -98.81582081102533 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + vertex 157.09895309600955 -98.81582081102533 617.3999999999999 + vertex 157.4848426238455 -98.65598013501793 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + vertex 157.4848426238455 -98.65598013501793 617.3999999999999 + vertex 157.89895309600956 -98.60146145708043 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + vertex 157.89895309600956 -98.60146145708043 617.3999999999999 + vertex 158.3130635681736 -98.65598013501793 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.75254293449578 -96.19094968042891 617.3999999999999 + vertex 158.3130635681736 -98.65598013501793 617.3999999999999 + vertex 158.65254293449578 -98.09620556875467 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 164.39369720768377 -84.55223467350186 617.3999999999999 + vertex 161.79369720768378 -89.05556677318093 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.39369720768377 -84.55223467350186 617.3999999999999 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 164.5526158302817 -84.3451278923153 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.5526158302817 -84.3451278923153 617.3999999999999 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 164.75972261146825 -84.18620926971741 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.75972261146825 -84.18620926971741 617.3999999999999 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 165.0009035663657 -84.08630884721279 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.0009035663657 -84.08630884721279 617.3999999999999 + vertex 162.14010736919758 -89.25556677318093 617.3999999999999 + vertex 165.25972261146822 -84.05223467350184 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + vertex 155.39369720768377 -101.14069194162175 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.51331244995444 -99.40146145708046 617.3999999999999 + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + vertex 156.35347177394706 -99.78735098491643 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.35347177394706 -99.78735098491643 617.3999999999999 + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + vertex 156.29895309600957 -100.20146145708047 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.29895309600957 -100.20146145708047 617.3999999999999 + vertex 155.5526158302817 -101.34779872280829 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.29895309600957 -100.20146145708047 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + vertex 156.35347177394706 -100.6155719292445 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.35347177394706 -100.6155719292445 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + vertex 156.51331244995447 -101.00146145708045 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.51331244995447 -101.00146145708045 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + vertex 156.7675822461111 -101.33283230697894 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.7675822461111 -101.33283230697894 617.3999999999999 + vertex 155.75972261146822 -101.50671734540619 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 156.7675822461111 -101.33283230697894 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 157.09895309600958 -101.58710210313555 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 157.09895309600958 -101.58710210313555 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 157.48484262384554 -101.74694277914296 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 157.48484262384554 -101.74694277914296 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 157.8989530960096 -101.80146145708045 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 157.8989530960096 -101.80146145708045 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 158.31306356817362 -101.74694277914296 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.31306356817362 -101.74694277914296 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 158.69895309600957 -101.58710210313555 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 158.69895309600957 -101.58710210313555 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 159.03032394590804 -101.33283230697893 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.03032394590804 -101.33283230697893 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.2845937420647 -101.00146145708044 617.3999999999999 + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 160.2630547111473 -104.10671734540614 617.3999999999999 + vertex 160.4630547111473 -103.76030718389238 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + vertex 160.4630547111473 -103.76030718389238 617.3999999999999 + vertex 161.50946487266108 -102.74787161859419 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 161.50946487266108 -102.74787161859419 617.3999999999999 + vertex 160.4630547111473 -103.76030718389238 617.3999999999999 + vertex 160.80946487266107 -103.96030718389238 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + vertex 170.19108795200523 -101.91085935300757 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.19108795200523 -101.91085935300757 617.3999999999999 + vertex 170.3208507942464 -105.48610351731132 617.3999999999999 + vertex 171.09359145527768 -105.2790482812293 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 167.3984376183953 -106.14787161859421 617.3999999999999 + vertex 166.69843761839527 -107.36030718389243 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.3984376183953 -106.14787161859421 617.3999999999999 + vertex 167.04484777990902 -107.56030718389242 617.3999999999999 + vertex 169.30369350672103 -107.2478716185942 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 165.9459515145477 -96.647651885785 617.3999999999999 + vertex 166.2156826553102 -95.99646330756181 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.9459515145477 -96.647651885785 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 165.85395124552818 -97.3464633075618 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.85395124552818 -97.3464633075618 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 165.9459515145477 -98.0452747293386 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.9459515145477 -98.0452747293386 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 166.2156826553102 -98.6964633075618 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.2156826553102 -98.6964633075618 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 166.6447629363245 -99.25565161676548 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.6447629363245 -99.25565161676548 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.6447629363245 -99.25565161676548 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 167.20395124552817 -99.6847318977798 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.20395124552817 -99.6847318977798 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 167.85513982375136 -99.95446303854229 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.85513982375136 -99.95446303854229 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 168.55395124552817 -100.04646330756181 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 168.55395124552817 -100.04646330756181 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 169.252762667305 -99.95446303854229 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.252762667305 -99.95446303854229 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 169.9039512455282 -99.68473189777978 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.9039512455282 -99.68473189777978 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 170.46313955473187 -99.25565161676548 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.46313955473187 -99.25565161676548 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 170.89221983574615 -98.6964633075618 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.89221983574615 -98.6964633075618 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + vertex 176.48653621919567 -94.8068230978123 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + vertex 169.41834729097397 -102.11791458908962 617.3999999999999 + vertex 170.19108795200523 -101.91085935300757 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.48653621919567 -94.8068230978123 617.3999999999999 + vertex 173.32540252705599 -96.48206726211602 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.48653621919567 -94.8068230978123 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 177.3553595565606 -98.5019769346947 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 178.79483892288278 -96.03694648010568 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.79483892288278 -96.03694648010568 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 179.2089493950468 -96.09146515804319 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 179.2089493950468 -96.09146515804319 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 179.62305986721086 -96.0369464801057 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 179.62305986721086 -96.0369464801057 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 180.00894939504684 -95.87710580409829 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 180.00894939504684 -95.87710580409829 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 180.3403202449453 -95.62283600794163 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 180.3403202449453 -95.62283600794163 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 180.59459004110192 -95.29146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 180.59459004110192 -95.29146515804317 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + vertex 178.56779512185878 -99.20197693469471 617.3999999999999 + vertex 178.7677951218588 -98.85556677318094 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + vertex 178.7677951218588 -98.85556677318094 617.3999999999999 + vertex 181.8141057058772 -93.79341562839934 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.8141057058772 -93.79341562839934 617.3999999999999 + vertex 178.7677951218588 -98.85556677318094 617.3999999999999 + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.8141057058772 -93.79341562839934 617.3999999999999 + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + vertex 181.84817987958814 -94.05223467350186 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.84817987958814 -94.05223467350186 617.3999999999999 + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + vertex 181.81410570587718 -94.31105371860438 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.81410570587718 -94.31105371860438 617.3999999999999 + vertex 179.11420528337257 -99.05556677318094 617.3999999999999 + vertex 181.71420528337256 -94.55223467350186 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 176.2984376183953 -90.7326194312312 617.3999999999999 + vertex 175.59843761839528 -91.9450549965294 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.2984376183953 -90.7326194312312 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 176.64484777990907 -90.9326194312312 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.64484777990907 -90.9326194312312 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 179.2089493950468 -92.89146515804318 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 179.2089493950468 -92.89146515804318 617.3999999999999 + vertex 179.62305986721083 -92.94598383598067 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.8448477799091 -90.58620926971743 617.3999999999999 + vertex 179.62305986721083 -92.94598383598067 617.3999999999999 + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 179.2089493950468 -92.89146515804318 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 178.79483892288275 -92.94598383598067 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.79483892288275 -92.94598383598067 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 178.4089493950468 -93.10582451198808 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.4089493950468 -93.10582451198808 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 178.07757854514833 -93.36009430814471 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.07757854514833 -93.36009430814471 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 177.82330874899168 -93.6914651580432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.82330874899168 -93.6914651580432 617.3999999999999 + vertex 177.50369350672102 -93.0450549965294 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 179.62305986721083 -92.94598383598067 617.3999999999999 + vertex 180.00894939504678 -93.10582451198808 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 180.00894939504678 -93.10582451198808 617.3999999999999 + vertex 180.34032024494527 -93.36009430814468 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 180.34032024494527 -93.36009430814468 617.3999999999999 + vertex 180.5945900411019 -93.69146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 180.5945900411019 -93.69146515804317 617.3999999999999 + vertex 180.7544307171093 -94.07735468587913 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 180.7544307171093 -94.07735468587913 617.3999999999999 + vertex 180.8089493950468 -94.49146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.34817987958814 -93.18620926971742 617.3999999999999 + vertex 180.8089493950468 -94.49146515804317 617.3999999999999 + vertex 181.5552866607747 -93.34512789231532 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.5552866607747 -93.34512789231532 617.3999999999999 + vertex 180.8089493950468 -94.49146515804317 617.3999999999999 + vertex 180.7544307171093 -94.9055756302072 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.5552866607747 -93.34512789231532 617.3999999999999 + vertex 180.7544307171093 -94.9055756302072 617.3999999999999 + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 181.71420528337256 -93.55223467350186 617.3999999999999 + vertex 180.7544307171093 -94.9055756302072 617.3999999999999 + vertex 180.59459004110192 -95.29146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + vertex 177.6634680729843 -94.07735468587917 617.3999999999999 + vertex 177.82330874899168 -93.6914651580432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.6634680729843 -94.07735468587917 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + vertex 177.60894939504678 -94.4914651580432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.60894939504678 -94.4914651580432 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + vertex 177.6634680729843 -94.90557563020724 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.6634680729843 -94.90557563020724 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + vertex 177.8233087489917 -95.2914651580432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.8233087489917 -95.2914651580432 617.3999999999999 + vertex 176.6935914552777 -95.57956375884356 617.3999999999999 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 177.8233087489917 -95.2914651580432 617.3999999999999 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 178.07757854514833 -95.62283600794169 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.07757854514833 -95.62283600794169 617.3999999999999 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 178.40894939504682 -95.87710580409828 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 178.40894939504682 -95.87710580409828 617.3999999999999 + vertex 178.45535955656058 -96.59672104636894 617.3999999999999 + vertex 178.79483892288278 -96.03694648010568 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 160.6213662718607 -99.8861035173113 617.3999999999999 + vertex 163.78249996400035 -98.21085935300758 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 160.6213662718607 -99.8861035173113 617.3999999999999 + vertex 160.41431103577867 -99.11336285628003 617.3999999999999 + vertex 159.6042089843353 -101.6478716185942 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 163.78249996400035 -98.21085935300758 617.3999999999999 + vertex 160.6213662718607 -99.8861035173113 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 163.78249996400035 -98.21085935300758 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 163.9895552000824 -98.98360001403886 617.3999999999999 + vertex 166.2156826553102 -95.99646330756181 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 166.2156826553102 -95.99646330756181 617.3999999999999 + vertex 166.6447629363245 -95.43727499835813 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 166.6447629363245 -95.43727499835813 617.3999999999999 + vertex 167.20395124552817 -95.00819471734383 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 167.20395124552817 -95.00819471734383 617.3999999999999 + vertex 167.8551398237514 -94.73846357658132 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 167.8551398237514 -94.73846357658132 617.3999999999999 + vertex 168.55395124552817 -94.6464633075618 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 168.55395124552817 -94.6464633075618 617.3999999999999 + vertex 169.252762667305 -94.73846357658132 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + vertex 169.252762667305 -94.73846357658132 617.3999999999999 + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 169.252762667305 -94.73846357658132 617.3999999999999 + vertex 169.9039512455282 -95.00819471734383 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 169.9039512455282 -95.00819471734383 617.3999999999999 + vertex 170.46313955473187 -95.43727499835813 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 170.46313955473187 -95.43727499835813 617.3999999999999 + vertex 170.89221983574618 -95.99646330756181 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 170.89221983574618 -95.99646330756181 617.3999999999999 + vertex 171.16195097650868 -96.64765188578501 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 171.16195097650868 -96.64765188578501 617.3999999999999 + vertex 171.25395124552816 -97.3464633075618 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 171.25395124552816 -97.3464633075618 617.3999999999999 + vertex 171.16195097650865 -98.04527472933862 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 173.1183472909739 -95.70932660108475 617.3999999999999 + vertex 171.16195097650865 -98.04527472933862 617.3999999999999 + vertex 170.89221983574615 -98.6964633075618 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + vertex 166.78705169680995 -89.20682309781228 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 166.78705169680995 -89.20682309781228 617.3999999999999 + vertex 166.91681453905113 -92.78206726211604 617.3999999999999 + vertex 167.6895552000824 -92.575012026034 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 169.70946487266107 -88.5450549965294 617.3999999999999 + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + vertex 169.70946487266107 -88.5450549965294 617.3999999999999 + vertex 170.4094648726611 -87.3326194312312 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + vertex 165.25972261146822 -84.05223467350184 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + vertex 164.31331244995442 -85.89146515804319 617.3999999999999 + vertex 164.56758224611104 -85.5600943081447 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + vertex 164.56758224611104 -85.5600943081447 617.3999999999999 + vertex 164.89895309600954 -85.30582451198808 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.51854165657076 -84.08630884721279 617.3999999999999 + vertex 164.89895309600954 -85.30582451198808 617.3999999999999 + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 164.89895309600954 -85.30582451198808 617.3999999999999 + vertex 165.2848426238455 -85.14598383598067 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 165.2848426238455 -85.14598383598067 617.3999999999999 + vertex 165.69895309600955 -85.09146515804318 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 165.69895309600955 -85.09146515804318 617.3999999999999 + vertex 166.11306356817357 -85.14598383598066 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 165.75972261146822 -84.18620926971741 617.3999999999999 + vertex 166.11306356817357 -85.14598383598066 617.3999999999999 + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 166.11306356817357 -85.14598383598066 617.3999999999999 + vertex 166.49895309600953 -85.30582451198806 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 166.49895309600953 -85.30582451198806 617.3999999999999 + vertex 166.83032394590802 -85.56009430814467 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 166.83032394590802 -85.56009430814467 617.3999999999999 + vertex 167.08459374206464 -85.89146515804318 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 167.08459374206464 -85.89146515804318 617.3999999999999 + vertex 167.24443441807207 -86.27735468587913 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 167.24443441807207 -86.27735468587913 617.3999999999999 + vertex 167.29895309600957 -86.69146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 167.29895309600957 -86.69146515804317 617.3999999999999 + vertex 167.24443441807207 -87.1055756302072 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 167.24443441807207 -87.1055756302072 617.3999999999999 + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + vertex 167.08459374206464 -87.49146515804317 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + vertex 166.01431103577866 -89.41387833389432 617.3999999999999 + vertex 166.78705169680995 -89.20682309781228 617.3999999999999 + endloop +endfacet +facet normal -3.598955634993343e-19 -1.7942835350329497e-19 1.0 + outer loop + vertex 170.2630547111473 -86.7862092697174 617.3999999999999 + vertex 167.80420898433533 -87.44505499652941 617.3999999999999 + vertex 170.0630547111473 -87.13261943123119 617.3999999999999 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.61050098361724 -87.02607784958096 76.89991414077534 + vertex 162.4032635063062 -86.86738434135522 76.89991962967 + vertex 162.51732844331508 -86.93308942972997 76.89991965080296 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.4607480731671 -86.90042414096168 76.8999196506057 + vertex 162.51732844331508 -86.93308942972997 76.89991965080296 + vertex 162.4032635063062 -86.86738434135522 76.89991962967 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.4054276423766 -97.26079109268794 76.89797173010349 + vertex 152.56426317563307 -95.04318901294695 76.89797171671195 + vertex 156.46094137065018 -97.29284058193514 76.89797173029706 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + vertex 156.46094137065018 -97.29284058193514 76.89797173029706 + vertex 152.56426317563307 -95.04318901294695 76.89797171671195 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.51961561508898 -97.32619913097159 76.89797180298153 + vertex 156.46094137065018 -97.29284058193514 76.89797173029706 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.6468415729909 -97.35982442234221 76.89797740205476 + vertex 156.51961561508898 -97.32619913097159 76.89797180298153 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.77843527730255 -97.35937545876124 76.8979881457542 + vertex 156.6468415729909 -97.35982442234221 76.89797740205476 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.90542883454373 -97.32488283635485 76.8980033019159 + vertex 156.77843527730255 -97.35937545876124 76.8979881457542 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 157.01916784365534 -97.25869717033821 76.89802183767264 + vertex 156.90542883454373 -97.32488283635485 76.8980033019159 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 157.1119011791289 -97.16532890447337 76.89804248984237 + vertex 157.01916784365534 -97.25869717033821 76.89802183767264 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 157.1439506683706 -97.10981517620934 76.89805289515205 + vertex 157.1119011791289 -97.16532890447337 76.89804248984237 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 157.17730921740113 -97.05114093178078 76.89806385101241 + vertex 157.1439506683706 -97.10981517620934 76.89805289515205 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + vertex 157.17730921740113 -97.05114093178078 76.89806385101241 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 157.8136970683922 -85.94957470403226 76.89967614989769 + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.9476400450679 -85.44962947468112 76.89967613963292 + vertex 157.8136970683922 -85.94957470403226 76.89967614989769 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + vertex 157.8136970683922 -85.94957470403226 76.89967614989769 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.64375656697464 -87.58342367446073 76.89983848876892 + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.67681327861195 -87.52594887179937 76.89984925151481 + vertex 162.64375656697464 -87.58342367446073 76.89983848876892 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.7107573423045 -87.39876487505593 76.89986988593273 + vertex 162.67681327861195 -87.52594887179937 76.89984925151481 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.71062714948076 -87.26712919775495 76.89988838058375 + vertex 162.7107573423045 -87.39876487505593 76.89986988593273 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.67643157256637 -87.14001259376604 76.89990347508557 + vertex 162.71062714948076 -87.26712919775495 76.89988838058375 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.61050098361724 -87.02607784958096 76.89991414077534 + vertex 162.67643157256637 -87.14001259376604 76.89990347508557 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 162.4032635063062 -86.86738434135522 76.89991962967 + vertex 162.61050098361724 -87.02607784958096 76.89991414077534 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.45394434941986 -93.82484820550569 76.8979717093563 + vertex 150.39869844570052 -93.79295333819499 76.89797170916292 + vertex 151.69817047976142 -94.5431716405479 76.89797171369364 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.3402520232914 -93.75860272109614 76.89797179443248 + vertex 151.69817047976142 -94.5431716405479 76.89797171369364 + vertex 150.39869844570052 -93.79295333819499 76.89797170916292 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 151.69817047976142 -94.5431716405479 76.89797171369364 + vertex 150.3402520232914 -93.75860272109614 76.89797179443248 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.2475792622471 -93.66518875755123 76.89797740484721 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.3402520232914 -93.75860272109614 76.89797179443248 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.18224156180347 -93.55097232211224 76.8979881582568 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.2475792622471 -93.66518875755123 76.89797740484721 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.1486915782698 -93.42373707610298 76.89800332183742 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.18224156180347 -93.55097232211224 76.8979881582568 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.14921568758027 -93.2921538912727 76.89802186221276 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.1486915782698 -93.42373707610298 76.89800332183742 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.1837781725514 -93.1651899442161 76.8980425158903 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.14921568758027 -93.2921538912727 76.89802186221276 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.21567303985657 -93.1099440405062 76.8980528710005 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.1837781725514 -93.1651899442161 76.8980425158903 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 150.2500236569494 -93.05149761810729 76.89806387535346 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.21567303985657 -93.1099440405062 76.8980528710005 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 150.2500236569494 -93.05149761810729 76.89806387535346 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.9476400450679 -85.44962947468112 76.89967613963292 + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.9476400450679 -85.44962947468112 76.89967613963292 + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 155.71549585049695 -83.58356230294731 76.89983846461737 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 155.74832782414913 -83.52669321370992 76.89984912397219 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 155.71549585049695 -83.58356230294731 76.89983846461737 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 155.84138529034598 -83.43357365251846 76.89986976748683 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 155.74832782414913 -83.52669321370992 76.89984912397219 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 155.9553730161882 -83.36771210797298 76.89988827786468 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 155.84138529034598 -83.43357365251846 76.89986976748683 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.0825229265333 -83.33359693549322 76.8999033936534 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 155.9553730161882 -83.36771210797298 76.89988827786468 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.2141699651163 -83.33355302770552 76.89991408474093 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.0825229265333 -83.33359693549322 76.8999033936534 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.34134260381495 -83.36758337685306 76.899919622544 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.2141699651163 -83.33355302770552 76.89991408474093 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.39850514821737 -83.40053689722153 76.8999196294739 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.34134260381495 -83.36758337685306 76.899919622544 + endloop +endfacet +facet normal 1.0656126774817588e-06 1.8456953068692433e-06 -0.9999999999977288 + outer loop + vertex 156.4553742374646 -83.43336887087936 76.89991962967134 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.39850514821737 -83.40053689722153 76.8999196294739 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.4534328532921 -93.82573414279042 556.8998883596452 + vertex 151.69765898363363 -94.54405757783267 556.8998883639817 + vertex 150.3981869495728 -93.79383927547973 556.8998883594511 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + vertex 150.3981869495728 -93.79383927547973 556.8998883594511 + vertex 151.69765898363363 -94.54405757783267 556.8998883639817 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.33974052716368 -93.75948865838089 556.8998884447207 + vertex 150.3981869495728 -93.79383927547973 556.8998883594511 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.2470677661193 -93.66607469483597 556.8998940551353 + vertex 150.33974052716368 -93.75948865838089 556.8998884447207 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.1817300656757 -93.55185825939698 556.899904808545 + vertex 150.2470677661193 -93.66607469483597 556.8998940551353 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.14818008214203 -93.42462301338776 556.8999199721255 + vertex 150.1817300656757 -93.55185825939698 556.899904808545 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.1487041914525 -93.29303982855744 556.8999385125009 + vertex 150.14818008214203 -93.42462301338776 556.8999199721255 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.18326667642364 -93.16607588150083 556.8999591661792 + vertex 150.1487041914525 -93.29303982855744 556.8999385125009 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.2151615437288 -93.110829977791 556.8999695212887 + vertex 150.18326667642364 -93.16607588150083 556.8999591661792 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 150.24951216082167 -93.05238355539204 556.8999805256424 + vertex 150.2151615437288 -93.110829977791 556.8999695212887 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 150.24951216082167 -93.05238355539204 556.8999805256424 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.94712854894016 -85.45051541196587 556.9015927899218 + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 156.94712854894016 -85.45051541196587 556.9015927899218 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 155.71498435436922 -83.58444824023205 556.901755114907 + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 155.7478163280214 -83.52757915099465 556.9017657742611 + vertex 155.71498435436922 -83.58444824023205 556.901755114907 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 155.84087379421823 -83.43445958980323 556.9017864177757 + vertex 155.7478163280214 -83.52757915099465 556.9017657742611 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 155.95486152006043 -83.36859804525773 556.9018049281536 + vertex 155.84087379421823 -83.43445958980323 556.9017864177757 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.08201143040554 -83.33448287277795 556.9018200439432 + vertex 155.95486152006043 -83.36859804525773 556.9018049281536 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.2136584689885 -83.33443896499027 556.9018307350299 + vertex 156.08201143040554 -83.33448287277795 556.9018200439432 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.3408311076872 -83.36846931413783 556.9018362728336 + vertex 156.2136584689885 -83.33443896499027 556.9018307350299 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.3979936520896 -83.40142283450628 556.9018362797628 + vertex 156.3408311076872 -83.36846931413783 556.9018362728336 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.45486274133685 -83.43425480816413 556.9018362799611 + vertex 156.3979936520896 -83.40142283450628 556.9018362797628 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 152.56375167950532 -95.0440749502317 556.8998883670008 + vertex 156.4049161462488 -97.26167702997267 556.8998883803916 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.46042987452242 -97.29372651921987 556.8998883805853 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 156.4049161462488 -97.26167702997267 556.8998883803916 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.51910411896122 -97.32708506825634 556.8998884532696 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 156.46042987452242 -97.29372651921987 556.8998883805853 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.64633007686317 -97.36071035962696 556.8998940523436 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 156.51910411896122 -97.32708506825634 556.8998884532696 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.77792378117482 -97.36026139604598 556.8999047960432 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 156.64633007686317 -97.36071035962696 556.8998940523436 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.90491733841597 -97.3257687736396 556.8999199522049 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 156.77792378117482 -97.36026139604598 556.8999047960432 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 157.01865634752755 -97.25958310762296 556.8999384879608 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 156.90491733841597 -97.3257687736396 556.8999199522049 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 157.11138968300114 -97.16621484175813 556.8999591401305 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 157.01865634752755 -97.25958310762296 556.8999384879608 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 157.1434391722428 -97.1107011134941 556.899969545441 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 157.11138968300114 -97.16621484175813 556.8999591401305 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 157.17679772127335 -97.05202686906556 556.8999805013005 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 157.1434391722428 -97.1107011134941 556.899969545441 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 157.17679772127335 -97.05202686906556 556.8999805013005 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 156.94712854894016 -85.45051541196587 556.9015927899218 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.64324507084686 -87.58430961174551 556.9017551390587 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.67630178248416 -87.52683480908411 556.9017659018036 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.64324507084686 -87.58430961174551 556.9017551390587 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.71024584617672 -87.39965081234072 556.9017865362224 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.67630178248416 -87.52683480908411 556.9017659018036 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.71011565335297 -87.26801513503972 556.9018050308727 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.71024584617672 -87.39965081234072 556.9017865362224 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.6759200764386 -87.1408985310508 556.9018201253746 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.71011565335297 -87.26801513503972 556.9018050308727 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.60998948748949 -87.0269637868657 556.901830791065 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.6759200764386 -87.1408985310508 556.9018201253746 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.40275201017843 -86.86827027863997 556.901836279959 + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.60998948748949 -87.0269637868657 556.901830791065 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.60998948748949 -87.0269637868657 556.901830791065 + vertex 162.51681694718732 -86.93397536701475 556.9018363010919 + vertex 162.40275201017843 -86.86827027863997 556.901836279959 + endloop +endfacet +facet normal -1.0656126774817588e-06 -1.8456953068692433e-06 0.9999999999977288 + outer loop + vertex 162.46023657703935 -86.90131007824642 556.9018363008954 + vertex 162.40275201017843 -86.86827027863997 556.901836279959 + vertex 162.51681694718732 -86.93397536701475 556.9018363010919 + endloop +endfacet +facet normal -0.4999838853756217 -0.866034692154271 -0.0001623266904071502 + outer loop + vertex 156.4054276423766 -97.26079109268794 76.89797173010349 + vertex 156.4049161462488 -97.26167702997267 556.8998883803916 + vertex 152.56426317563307 -95.04318901294695 76.89797171671195 + endloop +endfacet +facet normal -0.4999838853756217 -0.866034692154271 -0.0001623266904071502 + outer loop + vertex 152.56375167950532 -95.0440749502317 556.8998883670008 + vertex 152.56426317563307 -95.04318901294695 76.89797171671195 + vertex 156.4049161462488 -97.26167702997267 556.8998883803916 + endloop +endfacet +facet normal -0.8660570233241695 0.499945229351055 -1.0265637493692698e-08 + outer loop + vertex 152.56375167950532 -95.0440749502317 556.8998883670008 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 152.56426317563307 -95.04318901294695 76.89797171671195 + endloop +endfacet +facet normal -0.8660570233241695 0.499945229351055 -1.0265637493692698e-08 + outer loop + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + vertex 152.56426317563307 -95.04318901294695 76.89797171671195 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + endloop +endfacet +facet normal -0.49994522276429265 -0.8660570119138851 -0.00016232669011062063 + outer loop + vertex 153.3141810202773 -93.74410347689079 76.89821520675046 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + endloop +endfacet +facet normal -0.49994522276429265 -0.8660570119138851 -0.00016232669011062063 + outer loop + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 153.3136695241495 -93.74498941417556 556.9001318570386 + endloop +endfacet +facet normal 0.8660347035643212 -0.4999838919627894 3.018938274624782e-09 + outer loop + vertex 152.44761250082524 -93.24504418482444 556.9001318467738 + vertex 151.69765898363363 -94.54405757783267 556.8998883639817 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + endloop +endfacet +facet normal 0.8660347035643212 -0.4999838919627894 3.018938274624782e-09 + outer loop + vertex 151.69817047976142 -94.5431716405479 76.89797171369364 + vertex 152.448123996953 -93.24415824753966 76.8982151964857 + vertex 151.69765898363363 -94.54405757783267 556.8998883639817 + endloop +endfacet +facet normal -0.4999838853755945 -0.8660346921542866 -0.0001623266904071502 + outer loop + vertex 151.69817047976142 -94.5431716405479 76.89797171369364 + vertex 151.69765898363363 -94.54405757783267 556.8998883639817 + vertex 150.45394434941986 -93.82484820550569 76.8979717093563 + endloop +endfacet +facet normal -0.4999838853755945 -0.8660346921542866 -0.0001623266904071502 + outer loop + vertex 150.4534328532921 -93.82573414279042 556.8998883596452 + vertex 150.45394434941986 -93.82484820550569 76.8979717093563 + vertex 151.69765898363363 -94.54405757783267 556.8998883639817 + endloop +endfacet +facet normal -0.4999838853762343 -0.8660346921539174 -0.0001623266904071502 + outer loop + vertex 150.45394434941986 -93.82484820550569 76.8979717093563 + vertex 150.4534328532921 -93.82573414279042 556.8998883596452 + vertex 150.39869844570052 -93.79295333819499 76.89797170916292 + endloop +endfacet +facet normal -0.4999838853762343 -0.8660346921539174 -0.0001623266904071502 + outer loop + vertex 150.3981869495728 -93.79383927547973 556.8998883594511 + vertex 150.39869844570052 -93.79295333819499 76.89797170916292 + vertex 150.4534328532921 -93.82573414279042 556.8998883596452 + endloop +endfacet +facet normal -0.5066953613453927 -0.8621251559041121 -0.00016232181740206695 + outer loop + vertex 150.39869844570052 -93.79295333819499 76.89797170916292 + vertex 150.3981869495728 -93.79383927547973 556.8998883594511 + vertex 150.3402520232914 -93.75860272109614 76.89797179443248 + endloop +endfacet +facet normal -0.5066953613453927 -0.8621251559041121 -0.00016232181740206695 + outer loop + vertex 150.33974052716368 -93.75948865838089 556.8998884447207 + vertex 150.3402520232914 -93.75860272109614 76.89797179443248 + vertex 150.3981869495728 -93.79383927547973 556.8998883594511 + endloop +endfacet +facet normal -0.7099176199017725 -0.7042847069339206 -0.00015662695715857296 + outer loop + vertex 150.3402520232914 -93.75860272109614 76.89797179443248 + vertex 150.33974052716368 -93.75948865838089 556.8998884447207 + vertex 150.2475792622471 -93.66518875755123 76.89797740484721 + endloop +endfacet +facet normal -0.7099176199017725 -0.7042847069339206 -0.00015662695715857296 + outer loop + vertex 150.2470677661193 -93.66607469483597 556.8998940551353 + vertex 150.2475792622471 -93.66518875755123 76.89797740484721 + vertex 150.33974052716368 -93.75948865838089 556.8998884447207 + endloop +endfacet +facet normal -0.8680100610556941 -0.4965465881815375 -0.00014025464343150009 + outer loop + vertex 150.2475792622471 -93.66518875755123 76.89797740484721 + vertex 150.2470677661193 -93.66607469483597 556.8998940551353 + vertex 150.18224156180347 -93.55097232211224 76.8979881582568 + endloop +endfacet +facet normal -0.8680100610556941 -0.4965465881815375 -0.00014025464343150009 + outer loop + vertex 150.1817300656757 -93.55185825939698 556.899904808545 + vertex 150.18224156180347 -93.55097232211224 76.8979881582568 + vertex 150.2470677661193 -93.66607469483597 556.8998940551353 + endloop +endfacet +facet normal -0.9669490524484933 -0.25496963917089577 -0.00011432420753334252 + outer loop + vertex 150.14818008214203 -93.42462301338776 556.8999199721255 + vertex 150.1486915782698 -93.42373707610298 76.89800332183742 + vertex 150.1817300656757 -93.55185825939698 556.899904808545 + endloop +endfacet +facet normal -0.9669490524484933 -0.25496963917089577 -0.00011432420753334252 + outer loop + vertex 150.18224156180347 -93.55097232211224 76.8979881582568 + vertex 150.1817300656757 -93.55185825939698 556.899904808545 + vertex 150.1486915782698 -93.42373707610298 76.89800332183742 + endloop +endfacet +facet normal -0.9999920642927131 0.003983071025302724 -8.060276562570305e-05 + outer loop + vertex 150.14818008214203 -93.42462301338776 556.8999199721255 + vertex 150.1487041914525 -93.29303982855744 556.8999385125009 + vertex 150.1486915782698 -93.42373707610298 76.89800332183742 + endloop +endfacet +facet normal -0.9999920642927131 0.003983071025302724 -8.060276562570305e-05 + outer loop + vertex 150.14921568758027 -93.2921538912727 76.89802186221276 + vertex 150.1486915782698 -93.42373707610298 76.89800332183742 + vertex 150.1487041914525 -93.29303982855744 556.8999385125009 + endloop +endfacet +facet normal -0.9648872686613165 0.2626643429594258 -4.138837817004134e-05 + outer loop + vertex 150.18326667642364 -93.16607588150083 556.8999591661792 + vertex 150.1837781725514 -93.1651899442161 76.8980425158903 + vertex 150.1487041914525 -93.29303982855744 556.8999385125009 + endloop +endfacet +facet normal -0.9648872686613165 0.2626643429594258 -4.138837817004134e-05 + outer loop + vertex 150.14921568758027 -93.2921538912727 76.89802186221276 + vertex 150.1487041914525 -93.29303982855744 556.8999385125009 + vertex 150.1837781725514 -93.1651899442161 76.8980425158903 + endloop +endfacet +facet normal -0.866034703564261 0.4999838919628936 -3.018938255093285e-09 + outer loop + vertex 150.18326667642364 -93.16607588150083 556.8999591661792 + vertex 150.2151615437288 -93.110829977791 556.8999695212887 + vertex 150.1837781725514 -93.1651899442161 76.8980425158903 + endloop +endfacet +facet normal -0.866034703564261 0.4999838919628936 -3.018938255093285e-09 + outer loop + vertex 150.21567303985657 -93.1099440405062 76.8980528710005 + vertex 150.1837781725514 -93.1651899442161 76.8980425158903 + vertex 150.2151615437288 -93.110829977791 556.8999695212887 + endloop +endfacet +facet normal -0.8621251672642727 0.5066953680151102 1.2577849671949682e-06 + outer loop + vertex 150.24951216082167 -93.05238355539204 556.8999805256424 + vertex 150.2500236569494 -93.05149761810729 76.89806387535346 + vertex 150.2151615437288 -93.110829977791 556.8999695212887 + endloop +endfacet +facet normal -0.8621251672642727 0.5066953680151102 1.2577849671949682e-06 + outer loop + vertex 150.21567303985657 -93.1099440405062 76.8980528710005 + vertex 150.2151615437288 -93.110829977791 556.8999695212887 + vertex 150.2500236569494 -93.05149761810729 76.89806387535346 + endloop +endfacet +facet normal -0.8660570233241901 0.4999452293510194 -1.0265637500369582e-08 + outer loop + vertex 150.24951216082167 -93.05238355539204 556.8999805256424 + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 150.2500236569494 -93.05149761810729 76.89806387535346 + endloop +endfacet +facet normal -0.8660570233241901 0.4999452293510194 -1.0265637500369582e-08 + outer loop + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + vertex 150.2500236569494 -93.05149761810729 76.89806387535346 + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + endloop +endfacet +facet normal -0.866348697676614 0.49943962000828895 -1.050169797230436e-07 + outer loop + vertex 155.68203083400647 -83.6416107846246 556.9017444044335 + vertex 155.71498435436922 -83.58444824023205 556.901755114907 + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + endloop +endfacet +facet normal -0.866348697676614 0.49943962000828895 -1.050169797230436e-07 + outer loop + vertex 155.71549585049695 -83.58356230294731 76.89983846461737 + vertex 155.68254233013423 -83.64072484733985 76.89982775414383 + vertex 155.71498435436922 -83.58444824023205 556.901755114907 + endloop +endfacet +facet normal -0.866034703564261 0.4999838919628936 -3.018938255093285e-09 + outer loop + vertex 155.71498435436922 -83.58444824023205 556.901755114907 + vertex 155.7478163280214 -83.52757915099465 556.9017657742611 + vertex 155.71549585049695 -83.58356230294731 76.89983846461737 + endloop +endfacet +facet normal -0.866034703564261 0.4999838919628936 -3.018938255093285e-09 + outer loop + vertex 155.74832782414913 -83.52669321370992 76.89984912397219 + vertex 155.71549585049695 -83.58356230294731 76.89983846461737 + vertex 155.7478163280214 -83.52757915099465 556.9017657742611 + endloop +endfacet +facet normal -0.7073425802169827 0.7068709022524982 4.196094199893686e-05 + outer loop + vertex 155.84087379421823 -83.43445958980323 556.9017864177757 + vertex 155.84138529034598 -83.43357365251846 76.89986976748683 + vertex 155.7478163280214 -83.52757915099465 556.9017657742611 + endloop +endfacet +facet normal -0.7073425802169827 0.7068709022524982 4.196094199893686e-05 + outer loop + vertex 155.74832782414913 -83.52669321370992 76.89984912397219 + vertex 155.7478163280214 -83.52757915099465 556.9017657742611 + vertex 155.84138529034598 -83.43357365251846 76.89986976748683 + endloop +endfacet +facet normal -0.5002888131569225 0.8658585894071611 8.111645491291906e-05 + outer loop + vertex 155.84087379421823 -83.43445958980323 556.9017864177757 + vertex 155.95486152006043 -83.36859804525773 556.9018049281536 + vertex 155.84138529034598 -83.43357365251846 76.89986976748683 + endloop +endfacet +facet normal -0.5002888131569225 0.8658585894071611 8.111645491291906e-05 + outer loop + vertex 155.9553730161882 -83.36771210797298 76.89988827786468 + vertex 155.84138529034598 -83.43357365251846 76.89986976748683 + vertex 155.95486152006043 -83.36859804525773 556.9018049281536 + endloop +endfacet +facet normal -0.2591411910844064 0.9658394431359522 0.0001147440152030761 + outer loop + vertex 155.95486152006043 -83.36859804525773 556.9018049281536 + vertex 156.08201143040554 -83.33448287277795 556.9018200439432 + vertex 155.9553730161882 -83.36771210797298 76.89988827786468 + endloop +endfacet +facet normal -0.2591411910844064 0.9658394431359522 0.0001147440152030761 + outer loop + vertex 156.0825229265333 -83.33359693549322 76.8999033936534 + vertex 155.9553730161882 -83.36771210797298 76.89988827786468 + vertex 156.08201143040554 -83.33448287277795 556.9018200439432 + endloop +endfacet +facet normal -0.0003335267167290832 0.9999999345025357 0.0001405519602870857 + outer loop + vertex 156.2141699651163 -83.33355302770552 76.89991408474093 + vertex 156.0825229265333 -83.33359693549322 76.8999033936534 + vertex 156.2136584689885 -83.33443896499027 556.9018307350299 + endloop +endfacet +facet normal -0.0003335267167290832 0.9999999345025357 0.0001405519602870857 + outer loop + vertex 156.08201143040554 -83.33448287277795 556.9018200439432 + vertex 156.2136584689885 -83.33443896499027 556.9018307350299 + vertex 156.0825229265333 -83.33359693549322 76.8999033936534 + endloop +endfacet +facet normal 0.25849686548751427 0.9660120837508631 0.00015678152155038615 + outer loop + vertex 156.34134260381495 -83.36758337685306 76.899919622544 + vertex 156.2141699651163 -83.33355302770552 76.89991408474093 + vertex 156.3408311076872 -83.36846931413783 556.9018362728336 + endloop +endfacet +facet normal 0.25849686548751427 0.9660120837508631 0.00015678152155038615 + outer loop + vertex 156.2136584689885 -83.33443896499027 556.9018307350299 + vertex 156.3408311076872 -83.36846931413783 556.9018362728336 + vertex 156.2141699651163 -83.33355302770552 76.89991408474093 + endloop +endfacet +facet normal 0.49943961342800497 0.8663486862626051 0.0001623266564649421 + outer loop + vertex 156.39850514821737 -83.40053689722153 76.8999196294739 + vertex 156.34134260381495 -83.36758337685306 76.899919622544 + vertex 156.3979936520896 -83.40142283450628 556.9018362797628 + endloop +endfacet +facet normal 0.49943961342800497 0.8663486862626051 0.0001623266564649421 + outer loop + vertex 156.3408311076872 -83.36846931413783 556.9018362728336 + vertex 156.3979936520896 -83.40142283450628 556.9018362797628 + vertex 156.34134260381495 -83.36758337685306 76.899919622544 + endloop +endfacet +facet normal 0.4999838853756217 0.866034692154271 0.0001623266904071502 + outer loop + vertex 156.4553742374646 -83.43336887087936 76.89991962967134 + vertex 156.39850514821737 -83.40053689722153 76.8999196294739 + vertex 156.45486274133685 -83.43425480816413 556.9018362799611 + endloop +endfacet +facet normal 0.4999838853756217 0.866034692154271 0.0001623266904071502 + outer loop + vertex 156.3979936520896 -83.40142283450628 556.9018362797628 + vertex 156.45486274133685 -83.43425480816413 556.9018362799611 + vertex 156.39850514821737 -83.40053689722153 76.8999196294739 + endloop +endfacet +facet normal 0.4999999934125135 0.8660253923745724 0.00016232669043522317 + outer loop + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.4553742374646 -83.43336887087936 76.89991962967134 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + endloop +endfacet +facet normal 0.4999999934125135 0.8660253923745724 0.00016232669043522317 + outer loop + vertex 156.45486274133685 -83.43425480816413 556.9018362799611 + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + vertex 156.4553742374646 -83.43336887087936 76.89991962967134 + endloop +endfacet +facet normal 0.8660570233241772 -0.49994522935104174 1.026563749618815e-08 + outer loop + vertex 157.69704639433664 -84.1514298746065 556.9018362799605 + vertex 156.94712854894016 -85.45051541196587 556.9015927899218 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + endloop +endfacet +facet normal 0.8660570233241772 -0.49994522935104174 1.026563749618815e-08 + outer loop + vertex 156.9476400450679 -85.44962947468112 76.89967613963292 + vertex 157.6975578904644 -84.15054393732176 76.8999196296717 + vertex 156.94712854894016 -85.45051541196587 556.9015927899218 + endloop +endfacet +facet normal 0.49994522276429265 0.8660570119138851 0.00016232669011062063 + outer loop + vertex 157.8136970683922 -85.94957470403226 76.89967614989769 + vertex 156.9476400450679 -85.44962947468112 76.89967613963292 + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + endloop +endfacet +facet normal 0.49994522276429265 0.8660570119138851 0.00016232669011062063 + outer loop + vertex 156.94712854894016 -85.45051541196587 556.9015927899218 + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + vertex 156.9476400450679 -85.44962947468112 76.89967613963292 + endloop +endfacet +facet normal -0.866034703564261 0.4999838919628936 -3.018938255093285e-09 + outer loop + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + endloop +endfacet +facet normal -0.866034703564261 0.4999838919628936 -3.018938255093285e-09 + outer loop + vertex 157.8136970683922 -85.94957470403226 76.89967614989769 + vertex 157.81318557226444 -85.95046064131701 556.9015928001867 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 0.49999999341251655 0.8660253923745707 0.00016232669043522317 + outer loop + vertex 162.4032635063062 -86.86738434135522 76.89991962967 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + vertex 162.40275201017843 -86.86827027863997 556.901836279959 + endloop +endfacet +facet normal 0.49999999341251655 0.8660253923745707 0.00016232669043522317 + outer loop + vertex 158.56312978995575 -84.65146335620798 556.9018362799603 + vertex 162.40275201017843 -86.86827027863997 556.901836279959 + vertex 158.5636412860835 -84.65057741892323 76.89991962967062 + endloop +endfacet +facet normal 0.49831439203042943 0.8669963900417861 0.00016232638330655633 + outer loop + vertex 162.4607480731671 -86.90042414096168 76.8999196506057 + vertex 162.4032635063062 -86.86738434135522 76.89991962967 + vertex 162.46023657703935 -86.90131007824642 556.9018363008954 + endloop +endfacet +facet normal 0.49831439203042943 0.8669963900417861 0.00016232638330655633 + outer loop + vertex 162.40275201017843 -86.86827027863997 556.901836279959 + vertex 162.46023657703935 -86.90131007824642 556.9018363008954 + vertex 162.4032635063062 -86.86738434135522 76.89991962967 + endloop +endfacet +facet normal 0.4999838853762198 0.8660346921539257 0.0001623266904071502 + outer loop + vertex 162.51732844331508 -86.93308942972997 76.89991965080296 + vertex 162.4607480731671 -86.90042414096168 76.8999196506057 + vertex 162.51681694718732 -86.93397536701475 556.9018363010919 + endloop +endfacet +facet normal 0.4999838853762198 0.8660346921539257 0.0001623266904071502 + outer loop + vertex 162.46023657703935 -86.90131007824642 556.9018363008954 + vertex 162.51681694718732 -86.93397536701475 556.9018363010919 + vertex 162.4607480731671 -86.90042414096168 76.8999196506057 + endloop +endfacet +facet normal 0.7064070708677972 0.7078057824220768 0.00015683701866325126 + outer loop + vertex 162.61050098361724 -87.02607784958096 76.89991414077534 + vertex 162.51732844331508 -86.93308942972997 76.89991965080296 + vertex 162.60998948748949 -87.0269637868657 556.901830791065 + endloop +endfacet +facet normal 0.7064070708677972 0.7078057824220768 0.00015683701866325126 + outer loop + vertex 162.51681694718732 -86.93397536701475 556.9018363010919 + vertex 162.60998948748949 -87.0269637868657 556.901830791065 + vertex 162.51732844331508 -86.93308942972997 76.89991965080296 + endloop +endfacet +facet normal 0.8655304524472672 0.500856282881034 0.00014065924284202788 + outer loop + vertex 162.67643157256637 -87.14001259376604 76.89990347508557 + vertex 162.61050098361724 -87.02607784958096 76.89991414077534 + vertex 162.6759200764386 -87.1408985310508 556.9018201253746 + endloop +endfacet +facet normal 0.8655304524472672 0.500856282881034 0.00014065924284202788 + outer loop + vertex 162.60998948748949 -87.0269637868657 556.901830791065 + vertex 162.6759200764386 -87.1408985310508 556.9018201253746 + vertex 162.61050098361724 -87.02607784958096 76.89991414077534 + endloop +endfacet +facet normal 0.9656693655093931 0.2597742545281341 0.0001148957720722702 + outer loop + vertex 162.71062714948076 -87.26712919775495 76.89988838058375 + vertex 162.67643157256637 -87.14001259376604 76.89990347508557 + vertex 162.71011565335297 -87.26801513503972 556.9018050308727 + endloop +endfacet +facet normal 0.9656693655093931 0.2597742545281341 0.0001148957720722702 + outer loop + vertex 162.6759200764386 -87.1408985310508 556.9018201253746 + vertex 162.71011565335297 -87.26801513503972 556.9018050308727 + vertex 162.67643157256637 -87.14001259376604 76.89990347508557 + endloop +endfacet +facet normal 0.999999507596363 0.0009890384018153237 8.13023441173768e-05 + outer loop + vertex 162.71011565335297 -87.26801513503972 556.9018050308727 + vertex 162.71024584617672 -87.39965081234072 556.9017865362224 + vertex 162.71062714948076 -87.26712919775495 76.89988838058375 + endloop +endfacet +facet normal 0.999999507596363 0.0009890384018153237 8.13023441173768e-05 + outer loop + vertex 162.7107573423045 -87.39876487505593 76.89986988593273 + vertex 162.71062714948076 -87.26712919775495 76.89988838058375 + vertex 162.71024584617672 -87.39965081234072 556.9017865362224 + endloop +endfacet +facet normal 0.9661813349808758 -0.25786358051575975 4.2168295496365976e-05 + outer loop + vertex 162.71024584617672 -87.39965081234072 556.9017865362224 + vertex 162.67630178248416 -87.52683480908411 556.9017659018036 + vertex 162.7107573423045 -87.39876487505593 76.89986988593273 + endloop +endfacet +facet normal 0.9661813349808758 -0.25786358051575975 4.2168295496365976e-05 + outer loop + vertex 162.67681327861195 -87.52594887179937 76.89984925151481 + vertex 162.7107573423045 -87.39876487505593 76.89986988593273 + vertex 162.67630178248416 -87.52683480908411 556.9017659018036 + endloop +endfacet +facet normal 0.8668495948420497 -0.4985697342620213 2.679591724845893e-07 + outer loop + vertex 162.64324507084686 -87.58430961174551 556.9017551390587 + vertex 162.64375656697464 -87.58342367446073 76.89983848876892 + vertex 162.67630178248416 -87.52683480908411 556.9017659018036 + endloop +endfacet +facet normal 0.8668495948420497 -0.4985697342620213 2.679591724845893e-07 + outer loop + vertex 162.67681327861195 -87.52594887179937 76.89984925151481 + vertex 162.67630178248416 -87.52683480908411 556.9017659018036 + vertex 162.64375656697464 -87.58342367446073 76.89983848876892 + endloop +endfacet +facet normal 0.8661841131862911 -0.49972500644221907 5.153940097857468e-08 + outer loop + vertex 162.64324507084686 -87.58430961174551 556.9017551390587 + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + vertex 162.64375656697464 -87.58342367446073 76.89983848876892 + endloop +endfacet +facet normal 0.8661841131862911 -0.49972500644221907 5.153940097857468e-08 + outer loop + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + vertex 162.64375656697464 -87.58342367446073 76.89983848876892 + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + endloop +endfacet +facet normal 0.86601415924229 -0.5000194756125703 -3.6508229560595423e-09 + outer loop + vertex 162.61059669412066 -87.64089974607334 556.9017445338203 + vertex 157.17679772127335 -97.05202686906556 556.8999805013005 + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + endloop +endfacet +facet normal 0.86601415924229 -0.5000194756125703 -3.6508229560595423e-09 + outer loop + vertex 157.17730921740113 -97.05114093178078 76.89806385101241 + vertex 162.61110819024844 -87.64001380878855 76.89982788353065 + vertex 157.17679772127335 -97.05202686906556 556.8999805013005 + endloop +endfacet +facet normal 0.869323457685581 -0.4942435896563823 1.0769114124448531e-06 + outer loop + vertex 157.1434391722428 -97.1107011134941 556.899969545441 + vertex 157.1439506683706 -97.10981517620934 76.89805289515205 + vertex 157.17679772127335 -97.05202686906556 556.8999805013005 + endloop +endfacet +facet normal 0.869323457685581 -0.4942435896563823 1.0769114124448531e-06 + outer loop + vertex 157.17730921740113 -97.05114093178078 76.89806385101241 + vertex 157.17679772127335 -97.05202686906556 556.8999805013005 + vertex 157.1439506683706 -97.10981517620934 76.89805289515205 + endloop +endfacet +facet normal 0.866034703564261 -0.4999838919628936 3.018938255093285e-09 + outer loop + vertex 157.1434391722428 -97.1107011134941 556.899969545441 + vertex 157.11138968300114 -97.16621484175813 556.8999591401305 + vertex 157.1439506683706 -97.10981517620934 76.89805289515205 + endloop +endfacet +facet normal 0.866034703564261 -0.4999838919628936 3.018938255093285e-09 + outer loop + vertex 157.1119011791289 -97.16532890447337 76.89804248984237 + vertex 157.1439506683706 -97.10981517620934 76.89805289515205 + vertex 157.11138968300114 -97.16621484175813 556.8999591401305 + endloop +endfacet +facet normal 0.7095151162022568 -0.7046902143212075 -4.1478052693903445e-05 + outer loop + vertex 157.11138968300114 -97.16621484175813 556.8999591401305 + vertex 157.01865634752755 -97.25958310762296 556.8999384879608 + vertex 157.1119011791289 -97.16532890447337 76.89804248984237 + endloop +endfacet +facet normal 0.7095151162022568 -0.7046902143212075 -4.1478052693903445e-05 + outer loop + vertex 157.01916784365534 -97.25869717033821 76.89802183767264 + vertex 157.1119011791289 -97.16532890447337 76.89804248984237 + vertex 157.01865634752755 -97.25958310762296 556.8999384879608 + endloop +endfacet +facet normal 0.5029517253411875 -0.8643145003218068 -8.068325748916705e-05 + outer loop + vertex 157.01865634752755 -97.25958310762296 556.8999384879608 + vertex 156.90491733841597 -97.3257687736396 556.8999199522049 + vertex 157.01916784365534 -97.25869717033821 76.89802183767264 + endloop +endfacet +facet normal 0.5029517253411875 -0.8643145003218068 -8.068325748916705e-05 + outer loop + vertex 156.90542883454373 -97.32488283635485 76.8980033019159 + vertex 157.01916784365534 -97.25869717033821 76.89802183767264 + vertex 156.90491733841597 -97.3257687736396 556.8999199522049 + endloop +endfacet +facet normal 0.26211300639167023 -0.9650371800066778 -0.00011439003134875239 + outer loop + vertex 156.90491733841597 -97.3257687736396 556.8999199522049 + vertex 156.77792378117482 -97.36026139604598 556.8999047960432 + vertex 156.90542883454373 -97.32488283635485 76.8980033019159 + endloop +endfacet +facet normal 0.26211300639167023 -0.9650371800066778 -0.00011439003134875239 + outer loop + vertex 156.77843527730255 -97.35937545876124 76.8979881457542 + vertex 156.90542883454373 -97.32488283635485 76.8980033019159 + vertex 156.77792378117482 -97.36026139604598 556.8999047960432 + endloop +endfacet +facet normal 0.0034117208399137996 -0.9999941702212329 -0.00014030131341523824 + outer loop + vertex 156.77843527730255 -97.35937545876124 76.8979881457542 + vertex 156.77792378117482 -97.36026139604598 556.8999047960432 + vertex 156.6468415729909 -97.35982442234221 76.89797740205476 + endloop +endfacet +facet normal 0.0034117208399137996 -0.9999941702212329 -0.00014030131341523824 + outer loop + vertex 156.64633007686317 -97.36071035962696 556.8998940523436 + vertex 156.6468415729909 -97.35982442234221 76.89797740205476 + vertex 156.77792378117482 -97.36026139604598 556.8999047960432 + endloop +endfacet +facet normal -0.2555220663840057 -0.9668032111299694 -0.0001566512928286133 + outer loop + vertex 156.6468415729909 -97.35982442234221 76.89797740205476 + vertex 156.64633007686317 -97.36071035962696 556.8998940523436 + vertex 156.51961561508898 -97.32619913097159 76.89797180298153 + endloop +endfacet +facet normal -0.2555220663840057 -0.9668032111299694 -0.0001566512928286133 + outer loop + vertex 156.51910411896122 -97.32708506825634 556.8998884532696 + vertex 156.51961561508898 -97.32619913097159 76.89797180298153 + vertex 156.64633007686317 -97.36071035962696 556.8998940523436 + endloop +endfacet +facet normal -0.49424358314217537 -0.8693234462350529 -0.00016232311816103822 + outer loop + vertex 156.51961561508898 -97.32619913097159 76.89797180298153 + vertex 156.51910411896122 -97.32708506825634 556.8998884532696 + vertex 156.46094137065018 -97.29284058193514 76.89797173029706 + endloop +endfacet +facet normal -0.49424358314217537 -0.8693234462350529 -0.00016232311816103822 + outer loop + vertex 156.46042987452242 -97.29372651921987 556.8998883805853 + vertex 156.46094137065018 -97.29284058193514 76.89797173029706 + vertex 156.51910411896122 -97.32708506825634 556.8998884532696 + endloop +endfacet +facet normal -0.4999838853756217 -0.866034692154271 -0.0001623266904071502 + outer loop + vertex 156.46094137065018 -97.29284058193514 76.89797173029706 + vertex 156.46042987452242 -97.29372651921987 556.8998883805853 + vertex 156.4054276423766 -97.26079109268794 76.89797173010349 + endloop +endfacet +facet normal -0.4999838853756217 -0.866034692154271 -0.0001623266904071502 + outer loop + vertex 156.4049161462488 -97.26167702997267 556.8998883803916 + vertex 156.4054276423766 -97.26079109268794 76.89797173010349 + vertex 156.46042987452242 -97.29372651921987 556.8998883805853 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 153.31563935474955 -93.74157756749428 345.08857154516386 + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 152.56572151010528 -95.04066310355044 345.088543645375 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 153.31563935474955 -93.74157756749428 345.08857154516386 + vertex 152.4495823314252 -93.24163233814332 345.08857154398754 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + vertex 160.29755637867893 -85.64828588518857 345.0887668428436 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 156.7111092121235 -74.9164370738851 345.088906357228 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 143.2115441314605 -98.29937406607544 345.08840416102845 + vertex 150.548364317498 -102.53510722567025 345.08840416395924 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 143.2115441314605 -98.29937406607544 345.08840416102845 + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 150.34171035776353 -93.7560768116996 345.0885436542804 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 150.34171035776353 -93.7560768116996 345.0885436542804 + vertex 150.24903759671912 -93.6626628481548 345.0885442971377 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 150.24903759671912 -93.6626628481548 345.0885442971377 + vertex 150.1836998962755 -93.54844641271563 345.0885455292944 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 150.1836998962755 -93.54844641271563 345.0885455292944 + vertex 150.15014991274182 -93.4212111667064 345.08854726678095 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 150.15014991274182 -93.4212111667064 345.08854726678095 + vertex 150.15067402205236 -93.2896279818762 345.08854939119055 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 150.15067402205236 -93.2896279818762 345.08854939119055 + vertex 150.1852365070235 -93.16266403481956 345.0885517577483 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 150.1852365070235 -93.16266403481956 345.0885517577483 + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 152.56572151010528 -95.04066310355044 345.088543645375 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 150.1852365070235 -93.16266403481956 345.0885517577483 + vertex 155.7497861586212 -83.52416730431335 345.08875876409775 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 155.7497861586212 -83.52416730431335 345.08875876409775 + vertex 155.8428436248181 -83.43104774312178 345.088761129491 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 155.8428436248181 -83.43104774312178 345.088761129491 + vertex 155.95683135066037 -83.36518619857638 345.08876325046333 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 155.95683135066037 -83.36518619857638 345.08876325046333 + vertex 156.0839812610055 -83.33107102609686 345.08876498247406 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 156.0839812610055 -83.33107102609686 345.08876498247406 + vertex 156.21562829958822 -83.33102711830917 345.0887662074895 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 156.21562829958822 -83.33102711830917 345.0887662074895 + vertex 156.34280093828696 -83.36505746745658 345.08876684202687 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + vertex 156.34280093828696 -83.36505746745658 345.08876684202687 + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 157.81515540286435 -85.94704879463588 345.088738944231 + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + vertex 156.94909837954006 -85.44710356528462 345.0887389430547 + endloop +endfacet +facet normal -9.299929624683236e-06 -1.610795061521043e-05 0.9999999998270228 + outer loop + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + vertex 157.81515540286435 -85.94704879463588 345.088738944231 + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.459555419915711e-10 + outer loop + vertex 150.54842476704056 -102.53500252399127 338.5884041650836 + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.459555419915711e-10 + outer loop + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + vertex 150.54842476704056 -102.53500252399127 338.5884041650836 + vertex 154.29785136850236 -96.04052618679373 338.5885436471913 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480166e-05 + outer loop + vertex 150.54842476704056 -102.53500252399127 338.5884041650836 + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + vertex 143.21160458100306 -98.29926936439645 338.58840416215276 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480166e-05 + outer loop + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + vertex 150.54842476704056 -102.53500252399127 338.5884041650836 + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915711e-10 + outer loop + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915711e-10 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605112e-05 + outer loop + vertex 156.7111092121235 -74.9164370738851 345.088906357228 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 155.3450906166828 -75.28248788533665 345.0888877570228 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605112e-05 + outer loop + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 156.7111092121235 -74.9164370738851 345.088906357228 + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + vertex 156.7111092121235 -74.9164370738851 345.088906357228 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624575e-05 + outer loop + vertex 143.21160458100306 -98.29926936439645 338.58840416215276 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624575e-05 + outer loop + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 143.21160458100306 -98.29926936439645 338.58840416215276 + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 152.44964278096776 -93.24152763646433 338.5885715451119 + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + vertex 151.69968926377615 -94.54054102947242 338.58854364615337 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + vertex 152.44964278096776 -93.24152763646433 338.5885715451119 + vertex 153.31569980429214 -93.74147286581528 338.58857154628816 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.54842476704056 -102.53500252399127 338.5884041650836 + vertex 143.21160458100306 -98.29926936439645 338.58840416215276 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.54842476704056 -102.53500252399127 338.5884041650836 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 154.29785136850236 -96.04052618679373 338.5885436471913 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 154.29785136850236 -96.04052618679373 338.5885436471913 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 151.69968926377615 -94.54054102947242 338.58854364615337 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 154.29785136850236 -96.04052618679373 338.5885436471913 + vertex 151.69968926377615 -94.54054102947242 338.58854364615337 + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 157.8152158524069 -85.94694409295687 338.5887389453554 + vertex 156.94915882908262 -85.44699886360563 338.58873894417906 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 157.8152158524069 -85.94694409295687 338.5887389453554 + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 158.5651600700981 -84.64794680784767 338.5887668439679 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.3417708073061 -93.7559721100206 338.58854365540475 + vertex 151.69968926377615 -94.54054102947242 338.58854364615337 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.3417708073061 -93.7559721100206 338.58854365540475 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.24909804626168 -93.66255814647579 338.58854429826204 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.24909804626168 -93.66255814647579 338.58854429826204 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.18376034581806 -93.54834171103664 338.58854553041874 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.18376034581806 -93.54834171103664 338.58854553041874 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.15021036228438 -93.42110646502739 338.5885472679053 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.15021036228438 -93.42110646502739 338.5885472679053 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.15073447159492 -93.2895232801972 338.5885493923149 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.15073447159492 -93.2895232801972 338.5885493923149 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 150.18529695656605 -93.16255933314055 338.5885517588726 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.18529695656605 -93.16255933314055 338.5885517588726 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 150.18529695656605 -93.16255933314055 338.5885517588726 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 155.74984660816375 -83.52406260263436 338.58875876522217 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 155.74984660816375 -83.52406260263436 338.58875876522217 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 155.84290407436066 -83.43094304144279 338.5887611306153 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 155.84290407436066 -83.43094304144279 338.5887611306153 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 155.95689180020292 -83.36508149689737 338.5887632515877 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 155.95689180020292 -83.36508149689737 338.5887632515877 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 156.08404171054806 -83.33096632441787 338.5887649835984 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 156.08404171054806 -83.33096632441787 338.5887649835984 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 156.21568874913078 -83.33092241663016 338.58876620861383 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 156.21568874913078 -83.33092241663016 338.58876620861383 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 156.34286138782952 -83.36495276577757 338.5887668431513 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 156.34286138782952 -83.36495276577757 338.5887668431513 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 158.5651600700981 -84.64794680784767 338.5887668439679 + vertex 164.04798984770355 -79.15206553180093 338.5889063612832 + vertex 160.2976168282215 -85.64818118350956 338.5887668439679 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 164.04798984770355 -79.15206553180093 338.5889063612832 + vertex 158.5651600700981 -84.64794680784767 338.5887668439679 + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 164.04798984770355 -79.15206553180093 338.5889063612832 + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + endloop +endfacet +facet normal 9.299929624760356e-06 1.610795061516386e-05 -0.9999999998270228 + outer loop + vertex 164.04798984770355 -79.15206553180093 338.5889063612832 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 156.71116966166605 -74.9163323722061 338.58890635835235 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 156.71116966166605 -74.9163323722061 338.58890635835235 + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 156.71116966166605 -74.9163323722061 338.58890635835235 + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 164.04798984770355 -79.15206553180093 338.5889063612832 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605112e-05 + outer loop + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605112e-05 + outer loop + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + vertex 156.71116966166605 -74.9163323722061 338.58890635835235 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480166e-05 + outer loop + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + vertex 143.2115441314605 -98.29937406607544 345.08840416102845 + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480166e-05 + outer loop + vertex 143.2115441314605 -98.29937406607544 345.08840416102845 + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + vertex 150.548364317498 -102.53510722567025 345.08840416395924 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915711e-10 + outer loop + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915711e-10 + outer loop + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 155.34515106622536 -75.28238318365764 338.58888775814717 + vertex 142.8455537693152 -96.93325076901907 338.58842276166604 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624575e-05 + outer loop + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624575e-05 + outer loop + vertex 142.8454933197726 -96.93335547069806 345.08842276054173 + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + vertex 143.2115441314605 -98.29937406607544 345.08840416102845 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.8599859240707935e-05 + outer loop + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 156.34280093828696 -83.36505746745658 345.08876684202687 + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.8599859240707935e-05 + outer loop + vertex 156.34280093828696 -83.36505746745658 345.08876684202687 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + endloop +endfacet +facet normal -0.25849686862182286 -0.966012095467748 -1.796447781698182e-05 + outer loop + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 156.21562829958822 -83.33102711830917 345.0887662074895 + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + endloop +endfacet +facet normal -0.25849686862182286 -0.966012095467748 -1.796447781698182e-05 + outer loop + vertex 156.21562829958822 -83.33102711830917 345.0887662074895 + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 156.34280093828696 -83.36505746745658 345.08876684202687 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.610484794495737e-05 + outer loop + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + vertex 156.0839812610055 -83.33107102609686 345.08876498247406 + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.610484794495737e-05 + outer loop + vertex 156.0839812610055 -83.33107102609686 345.08876498247406 + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + vertex 156.21562829958822 -83.33102711830917 345.0887662074895 + endloop +endfacet +facet normal 0.25914119276608716 -0.9658394494111885 -1.3147699300030627e-05 + outer loop + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + vertex 156.0839812610055 -83.33107102609686 345.08876498247406 + vertex 155.95683135066037 -83.36518619857638 345.08876325046333 + endloop +endfacet +facet normal 0.25914119276608716 -0.9658394494111885 -1.3147699300030627e-05 + outer loop + vertex 156.0839812610055 -83.33107102609686 345.08876498247406 + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + endloop +endfacet +facet normal 0.5002888147805679 -0.8658585922187676 -9.294556675347814e-06 + outer loop + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + vertex 155.95683135066037 -83.36518619857638 345.08876325046333 + vertex 155.8428436248181 -83.43104774312178 345.088761129491 + endloop +endfacet +facet normal 0.5002888147805679 -0.8658585922187676 -9.294556675347814e-06 + outer loop + vertex 155.95683135066037 -83.36518619857638 345.08876325046333 + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664446 -4.808005373256879e-06 + outer loop + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + vertex 155.8428436248181 -83.43104774312178 345.088761129491 + vertex 155.7497861586212 -83.52416730431335 345.08875876409775 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664446 -4.808005373256879e-06 + outer loop + vertex 155.8428436248181 -83.43104774312178 345.088761129491 + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238093e-10 + outer loop + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 155.7497861586212 -83.52416730431335 345.08875876409775 + vertex 150.1852365070235 -93.16266403481956 345.0885517577483 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238093e-10 + outer loop + vertex 155.7497861586212 -83.52416730431335 345.08875876409775 + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + endloop +endfacet +facet normal 0.9648872694768666 -0.2626643431815329 4.742399434363142e-06 + outer loop + vertex 150.15067402205236 -93.2896279818762 345.08854939119055 + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 150.1852365070235 -93.16266403481956 345.0885517577483 + endloop +endfacet +facet normal 0.9648872694768666 -0.2626643431815329 4.742399434363142e-06 + outer loop + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 150.15067402205236 -93.2896279818762 345.08854939119055 + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + endloop +endfacet +facet normal 0.9999920674984399 -0.003983071038499263 9.235696742989527e-06 + outer loop + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + vertex 150.15067402205236 -93.2896279818762 345.08854939119055 + vertex 150.15014991274182 -93.4212111667064 345.08854726678095 + endloop +endfacet +facet normal 0.9999920674984399 -0.003983071038499263 9.235696742989527e-06 + outer loop + vertex 150.15067402205236 -93.2896279818762 345.08854939119055 + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + endloop +endfacet +facet normal 0.966949058684553 0.25496964081524937 1.3099596581315955e-05 + outer loop + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + vertex 150.15014991274182 -93.4212111667064 345.08854726678095 + vertex 150.1836998962755 -93.54844641271563 345.0885455292944 + endloop +endfacet +facet normal 0.966949058684553 0.25496964081524937 1.3099596581315955e-05 + outer loop + vertex 150.15014991274182 -93.4212111667064 345.08854726678095 + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + endloop +endfacet +facet normal 0.8680100694813435 0.4965465930008214 1.607078056068101e-05 + outer loop + vertex 150.24903759671912 -93.6626628481548 345.0885442971377 + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + vertex 150.1836998962755 -93.54844641271563 345.0885455292944 + endloop +endfacet +facet normal 0.8680100694813435 0.4965465930008214 1.607078056068101e-05 + outer loop + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + vertex 150.24903759671912 -93.6626628481548 345.0885442971377 + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + endloop +endfacet +facet normal 0.7099176284945937 0.7042847154599664 1.7946767403102795e-05 + outer loop + vertex 150.34171035776353 -93.7560768116996 345.0885436542804 + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + vertex 150.24903759671912 -93.6626628481548 345.0885442971377 + endloop +endfacet +facet normal 0.7099176284945937 0.7042847154599664 1.7946767403102795e-05 + outer loop + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + vertex 150.34171035776353 -93.7560768116996 345.0885436542804 + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.859985831256328e-05 + outer loop + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + vertex 150.34171035776353 -93.7560768116996 345.0885436542804 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.859985831256328e-05 + outer loop + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.4595554311055867e-10 + outer loop + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 152.4495823314252 -93.24163233814332 345.08857154398754 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.4595554311055867e-10 + outer loop + vertex 151.6996288142336 -94.54064573115143 345.088543645029 + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.8599859210822803e-05 + outer loop + vertex 153.31563935474955 -93.74157756749428 345.08857154516386 + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + vertex 152.4495823314252 -93.24163233814332 345.08857154398754 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.8599859210822803e-05 + outer loop + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + vertex 153.31563935474955 -93.74157756749428 345.08857154516386 + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558301e-09 + outer loop + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + vertex 153.31563935474955 -93.74157756749428 345.08857154516386 + vertex 152.56572151010528 -95.04066310355044 345.088543645375 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558301e-09 + outer loop + vertex 153.31563935474955 -93.74157756749428 345.08857154516386 + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + vertex 152.56572151010528 -95.04066310355044 345.088543645375 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + endloop +endfacet +facet normal -0.49999597293545345 -0.866027728633691 -1.6908566647105917e-05 + outer loop + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + endloop +endfacet +facet normal -0.49999597293545345 -0.866027728633691 -1.6908566647105917e-05 + outer loop + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + vertex 160.29755637867893 -85.64828588518857 345.0887668428436 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.459555440260841e-10 + outer loop + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + vertex 157.81515540286435 -85.94704879463588 345.088738944231 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.459555440260841e-10 + outer loop + vertex 158.56509962055554 -84.64805150952668 345.08876684284354 + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.85998592108228e-05 + outer loop + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + vertex 156.94909837954006 -85.44710356528462 345.0887389430547 + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.85998592108228e-05 + outer loop + vertex 156.94909837954006 -85.44710356528462 345.0887389430547 + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + vertex 157.81515540286435 -85.94704879463588 345.088738944231 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.1763031831983162e-09 + outer loop + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 156.94909837954006 -85.44710356528462 345.0887389430547 + vertex 157.69901622493632 -84.1480180279252 345.08876684284354 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.1763031831983162e-09 + outer loop + vertex 156.94909837954006 -85.44710356528462 345.0887389430547 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.4595554154404836e-10 + outer loop + vertex 160.2976168282215 -85.64818118350956 338.5887668439679 + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.4595554154404836e-10 + outer loop + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 160.2976168282215 -85.64818118350956 338.5887668439679 + vertex 164.04798984770355 -79.15206553180093 338.5889063612832 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.459555419915711e-10 + outer loop + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 150.548364317498 -102.53510722567025 345.08840416395924 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.459555419915711e-10 + outer loop + vertex 154.2977909189598 -96.04063088847272 345.0885436460669 + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.4595554154404836e-10 + outer loop + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 160.29755637867893 -85.64828588518857 345.0887668428436 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.4595554154404836e-10 + outer loop + vertex 164.047929398161 -79.15217023347992 345.0889063601589 + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + endloop +endfacet +facet normal -0.4999959728122984 -0.8660277284203799 -2.7901968550393905e-05 + outer loop + vertex 160.2976168282215 -85.64818118350956 338.5887668439679 + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + vertex 158.5651600700981 -84.64794680784767 338.5887668439679 + endloop +endfacet +facet normal -0.4999959728122984 -0.8660277284203799 -2.7901968550393905e-05 + outer loop + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + vertex 160.2976168282215 -85.64818118350956 338.5887668439679 + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.85998592108228e-05 + outer loop + vertex 157.8152158524069 -85.94694409295687 338.5887389453554 + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + vertex 156.94915882908262 -85.44699886360563 338.58873894417906 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.85998592108228e-05 + outer loop + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + vertex 157.8152158524069 -85.94694409295687 338.5887389453554 + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.8599859240707935e-05 + outer loop + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 156.34286138782952 -83.36495276577757 338.5887668431513 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.8599859240707935e-05 + outer loop + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.4595554534885843e-10 + outer loop + vertex 157.8152158524069 -85.94694409295687 338.5887389453554 + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.4595554534885843e-10 + outer loop + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + vertex 157.8152158524069 -85.94694409295687 338.5887389453554 + vertex 158.5651600700981 -84.64794680784767 338.5887668439679 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.176303183198729e-09 + outer loop + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.176303183198729e-09 + outer loop + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + vertex 157.69907667447887 -84.1479133262462 338.5887668439679 + vertex 156.94915882908262 -85.44699886360563 338.58873894417906 + endloop +endfacet +facet normal -0.25849686862206855 -0.9660120954676824 -1.7964477783502208e-05 + outer loop + vertex 156.21568874913078 -83.33092241663016 338.58876620861383 + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + endloop +endfacet +facet normal -0.25849686862206855 -0.9660120954676824 -1.7964477783502208e-05 + outer loop + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 156.21568874913078 -83.33092241663016 338.58876620861383 + vertex 156.34286138782952 -83.36495276577757 338.5887668431513 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.610484786074712e-05 + outer loop + vertex 156.08404171054806 -83.33096632441787 338.5887649835984 + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.610484786074712e-05 + outer loop + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + vertex 156.08404171054806 -83.33096632441787 338.5887649835984 + vertex 156.21568874913078 -83.33092241663016 338.58876620861383 + endloop +endfacet +facet normal 0.2591411927664384 -0.9658394494110942 -1.3147699252164233e-05 + outer loop + vertex 155.95689180020292 -83.36508149689737 338.5887632515877 + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + endloop +endfacet +facet normal 0.2591411927664384 -0.9658394494110942 -1.3147699252164233e-05 + outer loop + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + vertex 155.95689180020292 -83.36508149689737 338.5887632515877 + vertex 156.08404171054806 -83.33096632441787 338.5887649835984 + endloop +endfacet +facet normal 0.5002888147805681 -0.8658585922187676 -9.294556675347814e-06 + outer loop + vertex 155.84290407436066 -83.43094304144279 338.5887611306153 + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + endloop +endfacet +facet normal 0.5002888147805681 -0.8658585922187676 -9.294556675347814e-06 + outer loop + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + vertex 155.84290407436066 -83.43094304144279 338.5887611306153 + vertex 155.95689180020292 -83.36508149689737 338.5887632515877 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664445 -4.808005373256878e-06 + outer loop + vertex 155.74984660816375 -83.52406260263436 338.58875876522217 + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664445 -4.808005373256878e-06 + outer loop + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + vertex 155.74984660816375 -83.52406260263436 338.58875876522217 + vertex 155.84290407436066 -83.43094304144279 338.5887611306153 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238093e-10 + outer loop + vertex 150.18529695656605 -93.16255933314055 338.5885517588726 + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238093e-10 + outer loop + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + vertex 150.18529695656605 -93.16255933314055 338.5885517588726 + vertex 155.74984660816375 -83.52406260263436 338.58875876522217 + endloop +endfacet +facet normal 0.9648872694768552 -0.26266434318157506 4.742399440113685e-06 + outer loop + vertex 150.15073447159492 -93.2895232801972 338.5885493923149 + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + endloop +endfacet +facet normal 0.9648872694768552 -0.26266434318157506 4.742399440113685e-06 + outer loop + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 150.15073447159492 -93.2895232801972 338.5885493923149 + vertex 150.18529695656605 -93.16255933314055 338.5885517588726 + endloop +endfacet +facet normal 0.9999920674984402 -0.003983071038414164 9.235696754194314e-06 + outer loop + vertex 150.15021036228438 -93.42110646502739 338.5885472679053 + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + endloop +endfacet +facet normal 0.9999920674984402 -0.003983071038414164 9.235696754194314e-06 + outer loop + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + vertex 150.15021036228438 -93.42110646502739 338.5885472679053 + vertex 150.15073447159492 -93.2895232801972 338.5885493923149 + endloop +endfacet +facet normal 0.9669490586845839 0.25496964081513257 1.3099596597201569e-05 + outer loop + vertex 150.18376034581806 -93.54834171103664 338.58854553041874 + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + endloop +endfacet +facet normal 0.9669490586845839 0.25496964081513257 1.3099596597201569e-05 + outer loop + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + vertex 150.18376034581806 -93.54834171103664 338.58854553041874 + vertex 150.15021036228438 -93.42110646502739 338.5885472679053 + endloop +endfacet +facet normal 0.8680100694812698 0.49654659300095 1.60707805801751e-05 + outer loop + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + vertex 150.18376034581806 -93.54834171103664 338.58854553041874 + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + endloop +endfacet +facet normal 0.8680100694812698 0.49654659300095 1.60707805801751e-05 + outer loop + vertex 150.18376034581806 -93.54834171103664 338.58854553041874 + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + vertex 150.24909804626168 -93.66255814647579 338.58854429826204 + endloop +endfacet +facet normal 0.7099176284945936 0.7042847154599665 1.7946767403102792e-05 + outer loop + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + vertex 150.24909804626168 -93.66255814647579 338.58854429826204 + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + endloop +endfacet +facet normal 0.7099176284945936 0.7042847154599665 1.7946767403102792e-05 + outer loop + vertex 150.24909804626168 -93.66255814647579 338.58854429826204 + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + vertex 150.3417708073061 -93.7559721100206 338.58854365540475 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.8599858312563282e-05 + outer loop + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + vertex 150.3417708073061 -93.7559721100206 338.58854365540475 + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.8599858312563282e-05 + outer loop + vertex 150.3417708073061 -93.7559721100206 338.58854365540475 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + vertex 151.69968926377615 -94.54054102947242 338.58854364615337 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.4595554311055867e-10 + outer loop + vertex 152.44964278096776 -93.24152763646433 338.5885715451119 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.4595554311055867e-10 + outer loop + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + vertex 152.44964278096776 -93.24152763646433 338.5885715451119 + vertex 151.69968926377615 -94.54054102947242 338.58854364615337 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.8599859210822803e-05 + outer loop + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + vertex 152.44964278096776 -93.24152763646433 338.5885715451119 + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.8599859210822803e-05 + outer loop + vertex 152.44964278096776 -93.24152763646433 338.5885715451119 + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + vertex 153.31569980429214 -93.74147286581528 338.58857154628816 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558301e-09 + outer loop + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558301e-09 + outer loop + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + vertex 153.31569980429214 -93.74147286581528 338.58857154628816 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480166e-05 + outer loop + vertex 152.56578195964784 -95.04055840187145 338.5885436464994 + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + vertex 154.29785136850236 -96.04052618679373 338.5885436471913 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + vertex 152.44963348103815 -93.24154374441493 339.58857154493893 + vertex 153.3156905043625 -93.7414889737659 339.58857154611525 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + vertex 156.94914952915298 -85.44701497155624 339.5887389440061 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 157.8152065524773 -85.9469602009075 339.5887389451824 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.34176150737645 -93.75598821797122 339.5885436552317 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.24908874633206 -93.6625742544264 339.58854429808906 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.1837510458884 -93.5483578189873 339.58854553024577 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.15020106235477 -93.42112257297802 339.58854726773234 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.15072517166527 -93.28953938814786 339.58854939214194 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.18528765663646 -93.16257544109116 339.5885517586996 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 155.74983730823413 -83.52407871058497 339.58875876504914 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 155.84289477443104 -83.4309591493934 339.5887611304424 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 155.9568825002733 -83.36509760484799 339.58876325141466 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 156.0840324106184 -83.3309824323684 339.5887649834254 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 156.2156794492011 -83.33093852458069 339.58876620844086 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 156.3428520878999 -83.36496887372819 339.58876684297826 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 160.2976075282919 -85.64819729146019 339.58876684379493 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 158.56514146835886 -84.64797902769725 339.5887668434489 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 157.69906737454926 -84.14792943419681 339.58876684379493 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 164.04798054777393 -79.15208163975153 339.5889063611103 + vertex 155.3451417662957 -75.28239929160826 339.5888877579742 + vertex 156.71116036173643 -74.91634848015673 339.5889063581794 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + vertex 143.21159528107341 -98.29928547234705 339.5884041619798 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 150.54841546711094 -102.53501863194187 339.5884041649106 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + vertex 142.84554446938554 -96.93326687696968 339.58842276149306 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + endloop +endfacet +facet normal 9.299929624683236e-06 1.610795061521043e-05 -0.9999999998270228 + outer loop + vertex 154.29784206857275 -96.04054229474433 339.5885436470183 + vertex 151.69967996384653 -94.54055713742304 339.5885436459804 + vertex 152.56577265971822 -95.04057450982206 339.5885436463264 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 152.56541926239248 -95.0411866119454 377.58854363975354 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + vertex 153.31533710703678 -93.74210107588924 377.5885715395424 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 152.4492800837124 -93.24215584653827 377.58857153836607 + vertex 153.31533710703678 -93.74210107588924 377.5885715395424 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 160.29725413096617 -85.64880939358353 377.5887668372221 + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 156.7108069644107 -74.91696058228007 377.5889063516065 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.5480620697852 -102.53563073406521 377.58840415833777 + vertex 143.2112418837477 -98.29989757447039 377.588404155407 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + vertex 143.2112418837477 -98.29989757447039 377.588404155407 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.34140811005074 -93.75660032009456 377.5885436486589 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.24873534900635 -93.66318635654974 377.5885442915162 + vertex 150.34140811005074 -93.75660032009456 377.5885436486589 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.18339764856273 -93.54896992111058 377.5885455236729 + vertex 150.24873534900635 -93.66318635654974 377.5885442915162 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.14984766502906 -93.42173467510136 377.5885472611595 + vertex 150.18339764856273 -93.54896992111058 377.5885455236729 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.15037177433956 -93.29015149027116 377.58854938556914 + vertex 150.14984766502906 -93.42173467510136 377.5885472611595 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 150.18493425931072 -93.1631875432145 377.5885517521268 + vertex 150.15037177433956 -93.29015149027116 377.58854938556914 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + vertex 150.18493425931072 -93.1631875432145 377.5885517521268 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 152.56541926239248 -95.0411866119454 377.58854363975354 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 155.7494839109084 -83.52469081270831 377.58875875847633 + vertex 150.18493425931072 -93.1631875432145 377.5885517521268 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 155.8425413771053 -83.43157125151674 377.5887611238695 + vertex 155.7494839109084 -83.52469081270831 377.58875875847633 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 155.9565291029476 -83.36570970697133 377.58876324484186 + vertex 155.8425413771053 -83.43157125151674 377.5887611238695 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 156.08367901329274 -83.33159453449183 377.5887649768526 + vertex 155.9565291029476 -83.36570970697133 377.58876324484186 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 156.21532605187542 -83.33155062670411 377.58876620186805 + vertex 156.08367901329274 -83.33159453449183 377.5887649768526 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 156.3424986905742 -83.36558097585154 377.5887668364054 + vertex 156.21532605187542 -83.33155062670411 377.58876620186805 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + vertex 156.3424986905742 -83.36558097585154 377.5887668364054 + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 156.94879613182727 -85.44762707367958 377.5887389374332 + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + vertex 157.81485315515155 -85.94757230303082 377.58873893860954 + endloop +endfacet +facet normal 9.299929624683234e-06 1.6107950615210427e-05 -0.9999999998270228 + outer loop + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + vertex 157.81485315515155 -85.94757230303082 377.58873893860954 + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.4595554199157153e-10 + outer loop + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + vertex 150.54800162024264 -102.53573543574421 384.0884041572134 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.4595554199157153e-10 + outer loop + vertex 154.29742822170445 -96.04125909854667 384.08854363932113 + vertex 150.54800162024264 -102.53573543574421 384.0884041572134 + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.8599859244801655e-05 + outer loop + vertex 143.21118143420514 -98.3000022761494 384.0884041542826 + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + vertex 150.54800162024264 -102.53573543574421 384.0884041572134 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.8599859244801655e-05 + outer loop + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + vertex 150.54800162024264 -102.53573543574421 384.0884041572134 + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.4595554199157153e-10 + outer loop + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.4595554199157153e-10 + outer loop + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605108e-05 + outer loop + vertex 155.34478836897 -75.2830113937316 377.58888775140133 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 156.7108069644107 -74.91696058228007 377.5889063516065 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605108e-05 + outer loop + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + vertex 156.7108069644107 -74.91696058228007 377.5889063516065 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 156.7108069644107 -74.91696058228007 377.5889063516065 + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624571e-05 + outer loop + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 143.21118143420514 -98.3000022761494 384.0884041542826 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624571e-05 + outer loop + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + vertex 143.21118143420514 -98.3000022761494 384.0884041542826 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 151.69926611697824 -94.54127394122538 384.08854363828317 + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + vertex 152.44921963416985 -93.24226054821727 384.0885715372417 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 153.31527665749422 -93.74220577756824 384.088571538418 + vertex 152.44921963416985 -93.24226054821727 384.0885715372417 + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 143.21118143420514 -98.3000022761494 384.0884041542826 + vertex 150.54800162024264 -102.53573543574421 384.0884041572134 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 154.29742822170445 -96.04125909854667 384.08854363932113 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.54800162024264 -102.53573543574421 384.0884041572134 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 151.69926611697824 -94.54127394122538 384.08854363828317 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 154.29742822170445 -96.04125909854667 384.08854363932113 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + vertex 151.69926611697824 -94.54127394122538 384.08854363828317 + vertex 154.29742822170445 -96.04125909854667 384.08854363932113 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 156.9487356822847 -85.44773177535858 384.0887389363089 + vertex 157.814792705609 -85.94767700470983 384.08873893748523 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 158.56473692330022 -84.64867971960062 384.08876683609776 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + vertex 157.814792705609 -85.94767700470983 384.08873893748523 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 151.69926611697824 -94.54127394122538 384.08854363828317 + vertex 150.34134766050818 -93.75670502177356 384.08854364753455 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 150.2486748994638 -93.66329105822874 384.0885442903919 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.34134766050818 -93.75670502177356 384.08854364753455 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 150.18333719902014 -93.54907462278959 384.08854552254854 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.2486748994638 -93.66329105822874 384.0885442903919 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 150.14978721548647 -93.42183937678035 384.0885472600351 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.18333719902014 -93.54907462278959 384.08854552254854 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 150.150311324797 -93.29025619195016 384.0885493844448 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.14978721548647 -93.42183937678035 384.0885472600351 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 150.18487380976816 -93.1632922448935 384.08855175100246 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.150311324797 -93.29025619195016 384.0885493844448 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 150.18487380976816 -93.1632922448935 384.08855175100246 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 155.74942346136584 -83.5247955143873 384.08875875735197 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 150.18487380976816 -93.1632922448935 384.08855175100246 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 155.84248092756275 -83.43167595319574 384.08876112274515 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 155.74942346136584 -83.5247955143873 384.08875875735197 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 155.956468653405 -83.36581440865034 384.0887632437175 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 155.84248092756275 -83.43167595319574 384.08876112274515 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 156.08361856375018 -83.33169923617082 384.0887649757282 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 155.956468653405 -83.36581440865034 384.0887632437175 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 156.21526560233286 -83.33165532838312 384.08876620074363 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 156.08361856375018 -83.33169923617082 384.0887649757282 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 156.3424382410316 -83.36568567753054 384.08876683528104 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 156.21526560233286 -83.33165532838312 384.08876620074363 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 156.3424382410316 -83.36568567753054 384.08876683528104 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 160.29719368142358 -85.64891409526253 384.08876683609776 + vertex 164.04756670090563 -79.15279844355386 384.08890635341305 + vertex 158.56473692330022 -84.64867971960062 384.08876683609776 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + vertex 158.56473692330022 -84.64867971960062 384.08876683609776 + vertex 164.04756670090563 -79.15279844355386 384.08890635341305 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + vertex 164.04756670090563 -79.15279844355386 384.08890635341305 + endloop +endfacet +facet normal -9.299929624606113e-06 -1.6107950615256996e-05 0.9999999998270228 + outer loop + vertex 156.71074651486813 -74.91706528395908 384.0889063504822 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 164.04756670090563 -79.15279844355386 384.08890635341305 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + vertex 156.71074651486813 -74.91706528395908 384.0889063504822 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 164.04756670090563 -79.15279844355386 384.08890635341305 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + vertex 156.71074651486813 -74.91706528395908 384.0889063504822 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605108e-05 + outer loop + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + endloop +endfacet +facet normal -0.2588370112032979 0.9659210120182565 1.3151841973605108e-05 + outer loop + vertex 156.71074651486813 -74.91706528395908 384.0889063504822 + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.8599859244801655e-05 + outer loop + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + vertex 143.2112418837477 -98.29989757447039 377.588404155407 + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.8599859244801655e-05 + outer loop + vertex 150.5480620697852 -102.53563073406521 377.58840415833777 + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + vertex 143.2112418837477 -98.29989757447039 377.588404155407 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.4595554199157153e-10 + outer loop + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.4595554199157153e-10 + outer loop + vertex 142.84513062251727 -96.93398368077203 384.0884227537959 + vertex 155.34472791942744 -75.2831160954106 384.08888775027697 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624571e-05 + outer loop + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + endloop +endfacet +facet normal -0.9659210120630118 -0.25883701103625684 -1.3152331228624571e-05 + outer loop + vertex 143.2112418837477 -98.29989757447039 377.588404155407 + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + vertex 142.84519107205983 -96.93387897909302 377.58842275492026 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.859985924070793e-05 + outer loop + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + vertex 156.3424986905742 -83.36558097585154 377.5887668364054 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.859985924070793e-05 + outer loop + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 156.3424986905742 -83.36558097585154 377.5887668364054 + endloop +endfacet +facet normal -0.25849686862182286 -0.966012095467748 -1.7964477816981815e-05 + outer loop + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + vertex 156.21532605187542 -83.33155062670411 377.58876620186805 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + endloop +endfacet +facet normal -0.25849686862182286 -0.966012095467748 -1.7964477816981815e-05 + outer loop + vertex 156.3424986905742 -83.36558097585154 377.5887668364054 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + vertex 156.21532605187542 -83.33155062670411 377.58876620186805 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.6104847944957366e-05 + outer loop + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + vertex 156.08367901329274 -83.33159453449183 377.5887649768526 + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.6104847944957366e-05 + outer loop + vertex 156.21532605187542 -83.33155062670411 377.58876620186805 + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + vertex 156.08367901329274 -83.33159453449183 377.5887649768526 + endloop +endfacet +facet normal 0.25914119276608716 -0.9658394494111885 -1.3147699300030625e-05 + outer loop + vertex 155.9565291029476 -83.36570970697133 377.58876324484186 + vertex 156.08367901329274 -83.33159453449183 377.5887649768526 + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + endloop +endfacet +facet normal 0.25914119276608716 -0.9658394494111885 -1.3147699300030625e-05 + outer loop + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + vertex 156.08367901329274 -83.33159453449183 377.5887649768526 + endloop +endfacet +facet normal 0.5002888147805679 -0.8658585922187676 -9.294556675347812e-06 + outer loop + vertex 155.8425413771053 -83.43157125151674 377.5887611238695 + vertex 155.9565291029476 -83.36570970697133 377.58876324484186 + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + endloop +endfacet +facet normal 0.5002888147805679 -0.8658585922187676 -9.294556675347812e-06 + outer loop + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + vertex 155.9565291029476 -83.36570970697133 377.58876324484186 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664446 -4.808005373256878e-06 + outer loop + vertex 155.7494839109084 -83.52469081270831 377.58875875847633 + vertex 155.8425413771053 -83.43157125151674 377.5887611238695 + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664446 -4.808005373256878e-06 + outer loop + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + vertex 155.8425413771053 -83.43157125151674 377.5887611238695 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238134e-10 + outer loop + vertex 150.18493425931072 -93.1631875432145 377.5885517521268 + vertex 155.7494839109084 -83.52469081270831 377.58875875847633 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238134e-10 + outer loop + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + vertex 155.7494839109084 -83.52469081270831 377.58875875847633 + endloop +endfacet +facet normal 0.9648872694768666 -0.2626643431815329 4.742399434363141e-06 + outer loop + vertex 150.18493425931072 -93.1631875432145 377.5885517521268 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + vertex 150.15037177433956 -93.29015149027116 377.58854938556914 + endloop +endfacet +facet normal 0.9648872694768666 -0.2626643431815329 4.742399434363141e-06 + outer loop + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + vertex 150.15037177433956 -93.29015149027116 377.58854938556914 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + endloop +endfacet +facet normal 0.9999920674984399 -0.003983071038499263 9.235696742989525e-06 + outer loop + vertex 150.14984766502906 -93.42173467510136 377.5885472611595 + vertex 150.15037177433956 -93.29015149027116 377.58854938556914 + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + endloop +endfacet +facet normal 0.9999920674984399 -0.003983071038499263 9.235696742989525e-06 + outer loop + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + vertex 150.15037177433956 -93.29015149027116 377.58854938556914 + endloop +endfacet +facet normal 0.966949058684553 0.25496964081524937 1.3099596581315954e-05 + outer loop + vertex 150.18339764856273 -93.54896992111058 377.5885455236729 + vertex 150.14984766502906 -93.42173467510136 377.5885472611595 + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + endloop +endfacet +facet normal 0.966949058684553 0.25496964081524937 1.3099596581315954e-05 + outer loop + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + vertex 150.14984766502906 -93.42173467510136 377.5885472611595 + endloop +endfacet +facet normal 0.8680100694813435 0.4965465930008214 1.6070780560681005e-05 + outer loop + vertex 150.18339764856273 -93.54896992111058 377.5885455236729 + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + vertex 150.24873534900635 -93.66318635654974 377.5885442915162 + endloop +endfacet +facet normal 0.8680100694813435 0.4965465930008214 1.6070780560681005e-05 + outer loop + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + vertex 150.24873534900635 -93.66318635654974 377.5885442915162 + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + endloop +endfacet +facet normal 0.7099176284945937 0.7042847154599664 1.7946767403102792e-05 + outer loop + vertex 150.24873534900635 -93.66318635654974 377.5885442915162 + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + vertex 150.34140811005074 -93.75660032009456 377.5885436486589 + endloop +endfacet +facet normal 0.7099176284945937 0.7042847154599664 1.7946767403102792e-05 + outer loop + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + vertex 150.34140811005074 -93.75660032009456 377.5885436486589 + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.8599858312563282e-05 + outer loop + vertex 150.34140811005074 -93.75660032009456 377.5885436486589 + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.8599858312563282e-05 + outer loop + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.459555431105591e-10 + outer loop + vertex 152.4492800837124 -93.24215584653827 377.58857153836607 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.459555431105591e-10 + outer loop + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + vertex 151.6993265665208 -94.54116923954639 377.58854363940753 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.85998592108228e-05 + outer loop + vertex 152.4492800837124 -93.24215584653827 377.58857153836607 + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + vertex 153.31533710703678 -93.74210107588924 377.5885715395424 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.85998592108228e-05 + outer loop + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + vertex 153.31533710703678 -93.74210107588924 377.5885715395424 + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558303e-09 + outer loop + vertex 152.56541926239248 -95.0411866119454 377.58854363975354 + vertex 153.31533710703678 -93.74210107588924 377.5885715395424 + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558303e-09 + outer loop + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + vertex 153.31533710703678 -93.74210107588924 377.5885715395424 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 152.56541926239248 -95.0411866119454 377.58854363975354 + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + endloop +endfacet +facet normal -0.4999959729039955 -0.8660277285792044 -2.0291151848476755e-05 + outer loop + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + endloop +endfacet +facet normal -0.4999959729039955 -0.8660277285792044 -2.0291151848476755e-05 + outer loop + vertex 160.29725413096617 -85.64880939358353 377.5887668372221 + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.45955544433092e-10 + outer loop + vertex 157.81485315515155 -85.94757230303082 377.58873893860954 + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.45955544433092e-10 + outer loop + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + vertex 158.56479737284278 -84.64857501792163 377.58876683722207 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.8599859210822796e-05 + outer loop + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + vertex 156.94879613182727 -85.44762707367958 377.5887389374332 + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.8599859210822796e-05 + outer loop + vertex 157.81485315515155 -85.94757230303082 377.58873893860954 + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + vertex 156.94879613182727 -85.44762707367958 377.5887389374332 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.1763031831991422e-09 + outer loop + vertex 157.69871397722355 -84.14854153632015 377.58876683722207 + vertex 156.94879613182727 -85.44762707367958 377.5887389374332 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.1763031831991422e-09 + outer loop + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 156.94879613182727 -85.44762707367958 377.5887389374332 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.459555415440488e-10 + outer loop + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + vertex 160.29719368142358 -85.64891409526253 384.08876683609776 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.459555415440488e-10 + outer loop + vertex 164.04756670090563 -79.15279844355386 384.08890635341305 + vertex 160.29719368142358 -85.64891409526253 384.08876683609776 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.4595554199157153e-10 + outer loop + vertex 150.5480620697852 -102.53563073406521 377.58840415833777 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.4595554199157153e-10 + outer loop + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + vertex 154.29748867124704 -96.04115439686767 377.58854364044544 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.459555415440488e-10 + outer loop + vertex 160.29725413096617 -85.64880939358353 377.5887668372221 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.459555415440488e-10 + outer loop + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + vertex 164.04762715044822 -79.15269374187487 377.5889063545374 + endloop +endfacet +facet normal -0.49999597298531645 -0.866027728720056 -9.297749943632537e-06 + outer loop + vertex 158.56473692330022 -84.64867971960062 384.08876683609776 + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + vertex 160.29719368142358 -85.64891409526253 384.08876683609776 + endloop +endfacet +facet normal -0.49999597298531645 -0.866027728720056 -9.297749943632537e-06 + outer loop + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + vertex 160.29719368142358 -85.64891409526253 384.08876683609776 + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.8599859210822796e-05 + outer loop + vertex 156.9487356822847 -85.44773177535858 384.0887389363089 + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + vertex 157.814792705609 -85.94767700470983 384.08873893748523 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.8599859210822796e-05 + outer loop + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + vertex 157.814792705609 -85.94767700470983 384.08873893748523 + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.859985924070793e-05 + outer loop + vertex 156.3424382410316 -83.36568567753054 384.08876683528104 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + endloop +endfacet +facet normal -0.4999757178927258 -0.8660394224119932 -1.859985924070793e-05 + outer loop + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.459555431103176e-10 + outer loop + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + vertex 157.814792705609 -85.94767700470983 384.08873893748523 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.459555431103176e-10 + outer loop + vertex 158.56473692330022 -84.64867971960062 384.08876683609776 + vertex 157.814792705609 -85.94767700470983 384.08873893748523 + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.1763031831987292e-09 + outer loop + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + endloop +endfacet +facet normal -0.8660570233242345 0.49994522935094254 -1.1763031831987292e-09 + outer loop + vertex 156.9487356822847 -85.44773177535858 384.0887389363089 + vertex 157.698653527681 -84.14864623799916 384.08876683609776 + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + endloop +endfacet +facet normal -0.25849686862206855 -0.9660120954676824 -1.796447785046388e-05 + outer loop + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + vertex 156.21526560233286 -83.33165532838312 384.08876620074363 + endloop +endfacet +facet normal -0.25849686862206855 -0.9660120954676824 -1.796447785046388e-05 + outer loop + vertex 156.3424382410316 -83.36568567753054 384.08876683528104 + vertex 156.21526560233286 -83.33165532838312 384.08876620074363 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.6104848029167617e-05 + outer loop + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + vertex 156.08361856375018 -83.33169923617082 384.0887649757282 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.6104848029167617e-05 + outer loop + vertex 156.21526560233286 -83.33165532838312 384.08876620074363 + vertex 156.08361856375018 -83.33169923617082 384.0887649757282 + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + endloop +endfacet +facet normal 0.2591411927664384 -0.9658394494110942 -1.3147699347887451e-05 + outer loop + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + vertex 155.956468653405 -83.36581440865034 384.0887632437175 + endloop +endfacet +facet normal 0.2591411927664384 -0.9658394494110942 -1.3147699347887451e-05 + outer loop + vertex 156.08361856375018 -83.33169923617082 384.0887649757282 + vertex 155.956468653405 -83.36581440865034 384.0887632437175 + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + endloop +endfacet +facet normal 0.5002888147805681 -0.8658585922187676 -9.294556675347812e-06 + outer loop + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + vertex 155.84248092756275 -83.43167595319574 384.08876112274515 + endloop +endfacet +facet normal 0.5002888147805681 -0.8658585922187676 -9.294556675347812e-06 + outer loop + vertex 155.956468653405 -83.36581440865034 384.0887632437175 + vertex 155.84248092756275 -83.43167595319574 384.08876112274515 + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664445 -4.8080053732568774e-06 + outer loop + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + vertex 155.74942346136584 -83.5247955143873 384.08875875735197 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664445 -4.8080053732568774e-06 + outer loop + vertex 155.84248092756275 -83.43167595319574 384.08876112274515 + vertex 155.74942346136584 -83.5247955143873 384.08875875735197 + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238134e-10 + outer loop + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + vertex 150.18487380976816 -93.1632922448935 384.08855175100246 + endloop +endfacet +facet normal 0.8660347035642624 -0.4999838919628916 3.4595554214238134e-10 + outer loop + vertex 155.74942346136584 -83.5247955143873 384.08875875735197 + vertex 150.18487380976816 -93.1632922448935 384.08855175100246 + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + endloop +endfacet +facet normal 0.9648872694768552 -0.26266434318157506 4.7423994286110264e-06 + outer loop + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + vertex 150.150311324797 -93.29025619195016 384.0885493844448 + endloop +endfacet +facet normal 0.9648872694768552 -0.26266434318157506 4.7423994286110264e-06 + outer loop + vertex 150.18487380976816 -93.1632922448935 384.08855175100246 + vertex 150.150311324797 -93.29025619195016 384.0885493844448 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + endloop +endfacet +facet normal 0.9999920674984402 -0.003983071038414164 9.235696731787482e-06 + outer loop + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + vertex 150.14978721548647 -93.42183937678035 384.0885472600351 + endloop +endfacet +facet normal 0.9999920674984402 -0.003983071038414164 9.235696731787482e-06 + outer loop + vertex 150.150311324797 -93.29025619195016 384.0885493844448 + vertex 150.14978721548647 -93.42183937678035 384.0885472600351 + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + endloop +endfacet +facet normal 0.9669490586845839 0.25496964081513257 1.3099596565427152e-05 + outer loop + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + vertex 150.18333719902014 -93.54907462278959 384.08854552254854 + endloop +endfacet +facet normal 0.9669490586845839 0.25496964081513257 1.3099596565427152e-05 + outer loop + vertex 150.14978721548647 -93.42183937678035 384.0885472600351 + vertex 150.18333719902014 -93.54907462278959 384.08854552254854 + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + endloop +endfacet +facet normal 0.8680100694812698 0.49654659300095 1.6070780541189686e-05 + outer loop + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + vertex 150.18333719902014 -93.54907462278959 384.08854552254854 + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + endloop +endfacet +facet normal 0.8680100694812698 0.49654659300095 1.6070780541189686e-05 + outer loop + vertex 150.2486748994638 -93.66329105822874 384.0885442903919 + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + vertex 150.18333719902014 -93.54907462278959 384.08854552254854 + endloop +endfacet +facet normal 0.7099176284945936 0.7042847154599665 1.794676740310279e-05 + outer loop + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + vertex 150.2486748994638 -93.66329105822874 384.0885442903919 + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + endloop +endfacet +facet normal 0.7099176284945936 0.7042847154599665 1.794676740310279e-05 + outer loop + vertex 150.34134766050818 -93.75670502177356 384.08854364753455 + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + vertex 150.2486748994638 -93.66329105822874 384.0885442903919 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.859985831256328e-05 + outer loop + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + vertex 150.34134766050818 -93.75670502177356 384.08854364753455 + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761391 1.859985831256328e-05 + outer loop + vertex 151.69926611697824 -94.54127394122538 384.08854363828317 + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 150.34134766050818 -93.75670502177356 384.08854364753455 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.459555431105591e-10 + outer loop + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 152.44921963416985 -93.24226054821727 384.0885715372417 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.459555431105591e-10 + outer loop + vertex 151.69926611697824 -94.54127394122538 384.08854363828317 + vertex 152.44921963416985 -93.24226054821727 384.0885715372417 + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.85998592108228e-05 + outer loop + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + vertex 152.44921963416985 -93.24226054821727 384.0885715372417 + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + endloop +endfacet +facet normal 0.4999452292644192 0.8660570231744518 1.85998592108228e-05 + outer loop + vertex 153.31527665749422 -93.74220577756824 384.088571538418 + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + vertex 152.44921963416985 -93.24226054821727 384.0885715372417 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558303e-09 + outer loop + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031795558303e-09 + outer loop + vertex 153.31527665749422 -93.74220577756824 384.088571538418 + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.8599859244801655e-05 + outer loop + vertex 154.29742822170445 -96.04125909854667 384.08854363932113 + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + vertex 152.56535881284992 -95.0412913136244 384.0885436386292 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 153.31528595742384 -93.74218966961762 383.088571538591 + vertex 152.4492289340995 -93.24224444026666 383.0885715374147 + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 156.94874498221435 -85.44771566740796 383.08873893648183 + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 157.81480200553864 -85.94766089675922 383.08873893765815 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.3413569604378 -93.75668891382294 383.0885436477075 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.2486841993934 -93.66327495027812 383.08854429056487 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.18334649894976 -93.54905851483902 383.0885455227216 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.1497965154161 -93.42182326882974 383.0885472602081 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.15032062472662 -93.29024008399958 383.08854938461775 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 150.18488310969778 -93.16327613694288 383.08855175117543 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 155.74943276129548 -83.5247794064367 383.08875875752494 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 155.8424902274924 -83.43165984524512 383.08876112291813 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 155.95647795333463 -83.36579830069972 383.08876324389047 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 156.08362786367974 -83.33168312822013 383.0887649759012 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 156.21527490226245 -83.33163922043241 383.08876620091667 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 156.34244754096125 -83.36566956957992 383.08876683545407 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 160.29720298135322 -85.64889798731191 383.08876683627074 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 158.5647369214202 -84.64867972354897 383.0887668359247 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 157.6986628276106 -84.14863013004855 383.08876683627074 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 156.71075581479778 -74.91704917600845 383.0889063506552 + vertex 155.34473721935706 -75.28309998745999 383.08888775044994 + vertex 164.04757600083528 -79.15278233560326 383.088906353586 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 143.21119073413476 -98.29998616819879 383.0884041544556 + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 150.5480109201723 -102.53571932779359 383.0884041573864 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 142.8451399224469 -96.9339675728214 383.08842275396887 + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + endloop +endfacet +facet normal -9.299929624683234e-06 -1.6107950615210427e-05 0.9999999998270228 + outer loop + vertex 152.56536811277957 -95.0412752056738 383.08854363880215 + vertex 151.69927541690788 -94.54125783327477 383.0885436384562 + vertex 154.2974375216341 -96.04124299059606 383.08854363949405 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 157.8148531551514 -85.94757230303068 377.58873893860937 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + vertex 156.94879613182712 -85.44762707367943 377.58873893743305 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.54806206978526 -102.53563073406517 377.58840415833754 + vertex 154.29748867124707 -96.04115439686761 377.58854364044527 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 152.56541926239237 -95.04118661194525 377.58854363975337 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 154.29748867124707 -96.04115439686761 377.58854364044527 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 152.56541926239237 -95.04118661194525 377.58854363975337 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 153.31533710703664 -93.7421010758891 377.58857153954216 + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + vertex 152.56541926239237 -95.04118661194525 377.58854363975337 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.34140811005062 -93.7566003200944 377.5885436486587 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.2487353490062 -93.6631863565496 377.58854429151603 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.34140811005062 -93.7566003200944 377.5885436486587 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.18339764856265 -93.54896992111053 377.58854552367274 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.2487353490062 -93.6631863565496 377.58854429151603 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.14984766502894 -93.4217346751012 377.5885472611593 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.18339764856265 -93.54896992111053 377.58854552367274 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.15037177433945 -93.29015149027101 377.5885493855689 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.14984766502894 -93.4217346751012 377.5885472611593 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.18493425931052 -93.16318754321432 377.58855175212665 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.15037177433945 -93.29015149027101 377.5885493855689 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.18493425931052 -93.16318754321432 377.58855175212665 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 164.04762715044825 -79.15269374187481 377.5889063545372 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + vertex 160.2972541309662 -85.64880939358348 377.5887668372219 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + vertex 160.2972541309662 -85.64880939358348 377.5887668372219 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 157.6987139772234 -84.14854153632002 377.5887668372219 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 156.94879613182712 -85.44762707367943 377.58873893743305 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + vertex 157.6987139772234 -84.14854153632002 377.5887668372219 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 156.39966123497643 -83.39853449621971 377.5887668371992 + vertex 157.6987139772234 -84.14854153632002 377.5887668372219 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 156.34249869057405 -83.36558097585139 377.5887668364052 + vertex 156.39966123497643 -83.39853449621971 377.5887668371992 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 156.21532605187525 -83.33155062670389 377.5887662018678 + vertex 156.34249869057405 -83.36558097585139 377.5887668364052 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 156.08367901329257 -83.33159453449159 377.58876497685236 + vertex 156.21532605187525 -83.33155062670389 377.5887662018678 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 155.9565291029474 -83.3657097069711 377.58876324484163 + vertex 156.08367901329257 -83.33159453449159 377.58876497685236 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 155.8425413771052 -83.4315712515166 377.58876112386935 + vertex 155.9565291029474 -83.3657097069711 377.58876324484163 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 155.8425413771052 -83.4315712515166 377.58876112386935 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 151.5704343856383 -81.76414174725016 377.588748252447 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 151.5704343856383 -81.76414174725016 377.588748252447 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + vertex 151.5704343856383 -81.76414174725016 377.588748252447 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 155.7166519372563 -83.58155990194558 377.5887575370966 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 150.21682912661578 -93.10794163950449 377.5885529386449 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 150.18493425931052 -93.16318754321432 377.58855175212665 + vertex 150.21682912661578 -93.10794163950449 377.5885529386449 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + endloop +endfacet +facet normal -9.299929627727398e-06 -1.6107950613497323e-05 0.9999999998270228 + outer loop + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + vertex 153.31533710703664 -93.7421010758891 377.58857153954216 + vertex 152.4492800837123 -93.24215584653813 377.5885715383659 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.459555419915709e-10 + outer loop + vertex 150.54806206978526 -102.53563073406517 377.58840415833754 + vertex 150.54836431749806 -102.53510722567016 345.08840416395924 + vertex 154.29748867124707 -96.04115439686761 377.58854364044527 + endloop +endfacet +facet normal 0.8660347035642583 -0.4999838919628986 3.459555419915709e-10 + outer loop + vertex 154.29779091895986 -96.04063088847262 345.08854364606697 + vertex 154.29748867124707 -96.04115439686761 377.58854364044527 + vertex 150.54836431749806 -102.53510722567016 345.08840416395924 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480165e-05 + outer loop + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + vertex 150.54836431749806 -102.53510722567016 345.08840416395924 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480165e-05 + outer loop + vertex 150.54806206978526 -102.53563073406517 377.58840415833754 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 150.54836431749806 -102.53510722567016 345.08840416395924 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + vertex 152.9308919167184 -78.43493313673302 350.9505833566614 + vertex 151.13771928156893 -81.5136262928737 345.08874825789576 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.0057754383743 -78.30512674395735 350.5888147525759 + vertex 151.13771928156893 -81.5136262928737 345.08874825789576 + vertex 152.9308919167184 -78.43493313673302 350.9505833566614 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.12497264333518 -78.09868347083638 350.27815904985073 + vertex 151.13771928156893 -81.5136262928737 345.08874825789576 + vertex 153.0057754383743 -78.30512674395735 350.5888147525759 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 151.13771928156893 -81.5136262928737 345.08874825789576 + vertex 153.12497264333518 -78.09868347083638 350.27815904985073 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + vertex 152.9308919167184 -78.43493313673302 350.9505833566614 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 152.90621390605745 -78.48014157712299 371.3388109089005 + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.28036043906553 -77.82967208526959 350.0397869212439 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 153.12497264333518 -78.09868347083638 350.27815904985073 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.46134940407686 -77.5164252686211 349.8899430333913 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 153.28036043906553 -77.82967208526959 350.0397869212439 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.6556054395021 -77.18029027378067 349.8388389996215 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 153.46134940407686 -77.5164252686211 349.8899430333913 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.84989031755023 -76.84417414515728 349.8899574753824 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 153.6556054395021 -77.18029027378067 349.8388389996215 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.03096384485326 -76.53098264145854 350.0398148210282 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 153.84989031755023 -76.84417414515728 349.8899574753824 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.18648615976355 -76.26205924608799 350.27819850610405 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 154.03096384485326 -76.53098264145854 350.0398148210282 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.3058586735329 -76.05573064402324 350.5888630764198 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 154.18648615976355 -76.26205924608799 350.27819850610405 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.38094634662016 -75.9260577885209 350.9506372549058 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 154.3058586735329 -76.05573064402324 350.5888630764198 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 154.38094634662016 -75.9260577885209 350.9506372549058 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + vertex 153.12580471743715 -78.09963927300623 372.399479218377 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.00666606816725 -78.30610297743854 372.0888146214888 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + vertex 153.12580471743715 -78.09963927300623 372.399479218377 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 152.93176773175702 -78.43588522743131 371.72704041352574 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + vertex 153.00666606816725 -78.30610297743854 372.0888146214888 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 152.90621390605745 -78.48014157712299 371.3388109089005 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + vertex 152.93176773175702 -78.43588522743131 371.72704041352574 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.28106457750485 -77.83056427439412 372.6378629253101 + vertex 153.12580471743715 -78.09963927300623 372.399479218377 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.46186494548584 -77.51721499809021 372.78772028660813 + vertex 153.28106457750485 -77.83056427439412 372.6378629253101 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.65588457508898 -77.1809456794404 372.8388387707498 + vertex 153.46186494548584 -77.51721499809021 372.78772028660813 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.84990134918937 -76.84467251679933 372.78773473751806 + vertex 153.65588457508898 -77.1809456794404 372.8388387707498 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.03069334525998 -76.53131197048334 372.6378908423243 + vertex 153.84990134918937 -76.84467251679933 372.78773473751806 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.18593988754148 -76.26221904387116 372.3995186989971 + vertex 154.03069334525998 -76.53131197048334 372.6378908423243 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.30506118073438 -76.05573197521412 372.08886297517574 + vertex 154.18593988754148 -76.26221904387116 372.3995186989971 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.37993930556487 -75.92592251700532 371.7270943450557 + vertex 154.30506118073438 -76.05573197521412 372.08886297517574 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + vertex 154.37993930556487 -75.92592251700532 371.7270943450557 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 152.90621390605745 -78.48014157712299 371.3388109089005 + vertex 152.93174604206027 -78.4358560294191 370.9505833067736 + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 152.93111099818998 -78.4350764398789 351.7270404038425 + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + vertex 152.93174604206027 -78.4358560294191 370.9505833067736 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.00662416689076 -78.3060465712103 370.5888146766536 + vertex 152.93111099818998 -78.4350764398789 351.7270404038425 + vertex 152.93174604206027 -78.4358560294191 370.9505833067736 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.00619867127725 -78.30540358437658 352.08881458232855 + vertex 152.93111099818998 -78.4350764398789 351.7270404038425 + vertex 153.00662416689076 -78.3060465712103 370.5888146766536 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + vertex 153.00619867127725 -78.30540358437658 352.08881458232855 + vertex 153.00662416689076 -78.3060465712103 370.5888146766536 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.1255711850466 -78.09907498231183 352.3994791526443 + vertex 153.00619867127725 -78.30540358437658 352.08881458232855 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.28109349995685 -77.83015158694128 352.6378628377202 + vertex 153.1255711850466 -78.09907498231183 352.3994791526443 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.2809920023652 -77.83046657594109 370.039786809505 + vertex 153.28109349995685 -77.83015158694128 352.6378628377202 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.4621670272599 -77.51696008324254 352.787720183366 + vertex 153.28109349995685 -77.83015158694128 352.6378628377202 + vertex 153.2809920023652 -77.83046657594109 370.039786809505 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.46178399843578 -77.51710602962508 369.88994291431123 + vertex 153.4621670272599 -77.51696008324254 352.787720183366 + vertex 153.2809920023652 -77.83046657594109 370.039786809505 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.656451905308 -77.18084395461914 352.83883865912685 + vertex 153.4621670272599 -77.51696008324254 352.787720183366 + vertex 153.46178399843578 -77.51710602962508 369.88994291431123 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.65580077253614 -77.18083286698402 369.8388388810795 + vertex 153.656451905308 -77.18084395461914 352.83883865912685 + vertex 153.46178399843578 -77.51710602962508 369.88994291431123 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.85070794073326 -76.8447089597787 352.7877346253571 + vertex 153.656451905308 -77.18084395461914 352.83883865912685 + vertex 153.65580077253614 -77.18083286698402 369.8388388810795 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 153.84982040213927 -76.84456354833422 369.88995736522116 + vertex 153.85070794073326 -76.8447089597787 352.7877346253571 + vertex 153.65580077253614 -77.18083286698402 369.8388388810795 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.03169690574458 -76.53146214313021 352.6378907375045 + vertex 153.85070794073326 -76.8447089597787 352.7877346253571 + vertex 153.84982040213927 -76.84456354833422 369.88995736522116 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.03062077012032 -76.5312142720303 370.0398147265192 + vertex 154.03169690574458 -76.53146214313021 352.6378907375045 + vertex 153.84982040213927 -76.84456354833422 369.88995736522116 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.18708470147493 -76.26245075756343 352.3995186088976 + vertex 154.03169690574458 -76.53146214313021 352.6378907375045 + vertex 154.03062077012032 -76.5312142720303 370.0398147265192 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.185880630188 -76.26213927341817 370.2781984334523 + vertex 154.18708470147493 -76.26245075756343 352.3995186088976 + vertex 154.03062077012032 -76.5312142720303 370.0398147265192 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.30628190643583 -76.05600748444246 352.08886290617244 + vertex 154.18708470147493 -76.26245075756343 352.3995186088976 + vertex 154.185880630188 -76.26213927341817 370.2781984334523 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.3050192794579 -76.05567556898588 370.5888630303405 + vertex 154.30628190643583 -76.05600748444246 352.08886290617244 + vertex 154.185880630188 -76.26213927341817 370.2781984334523 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.38116542809175 -75.92620109166678 351.72709430208687 + vertex 154.30628190643583 -76.05600748444246 352.08886290617244 + vertex 154.3050192794579 -76.05567556898588 370.5888630303405 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.37991761586812 -75.92589331899306 370.95063723830356 + vertex 154.38116542809175 -75.92620109166678 351.72709430208687 + vertex 154.3050192794579 -76.05567556898588 370.5888630303405 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + vertex 154.38116542809175 -75.92620109166678 351.72709430208687 + vertex 154.37991761586812 -75.92589331899306 370.95063723830356 + endloop +endfacet +facet normal -0.865792965821221 0.5004022651890614 0.00033664246695197866 + outer loop + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + vertex 154.37991761586812 -75.92589331899306 370.95063723830356 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480165e-05 + outer loop + vertex 164.04792939816105 -79.15217023347982 345.0889063601589 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 164.04762715044825 -79.15269374187481 377.5889063545372 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480165e-05 + outer loop + vertex 155.38728011480566 -74.15285482224584 377.5889063510776 + vertex 164.04762715044825 -79.15269374187481 377.5889063545372 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 153.31563935474946 -93.7415775674941 345.08857154516386 + vertex 151.69962881423348 -94.54064573115123 345.08854364502906 + vertex 152.4495823314251 -93.24163233814313 345.08857154398754 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 164.04792939816105 -79.15217023347982 345.0889063601589 + vertex 160.297556378679 -85.64828588518847 345.0887668428436 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 158.56509962055546 -84.64805150952648 345.0887668428436 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 160.297556378679 -85.64828588518847 345.0887668428436 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 158.56509962055546 -84.64805150952648 345.0887668428436 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 156.94909837953995 -85.44710356528444 345.08873894305475 + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + vertex 158.56509962055546 -84.64805150952648 345.0887668428436 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 156.39996348268926 -83.3980109878247 345.08876684282086 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 156.34280093828684 -83.3650574674564 345.0887668420269 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 156.39996348268926 -83.3980109878247 345.08876684282086 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 156.21562829958805 -83.3310271183089 345.0887662074895 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 156.34280093828684 -83.3650574674564 345.0887668420269 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 156.08398126100536 -83.3310710260966 345.08876498247406 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 156.21562829958805 -83.3310271183089 345.0887662074895 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 155.9568313506602 -83.3651861985761 345.08876325046333 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 156.08398126100536 -83.3310710260966 345.08876498247406 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 155.842843624818 -83.4310477431216 345.088761129491 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 155.9568313506602 -83.3651861985761 345.08876325046333 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 155.842843624818 -83.4310477431216 345.088761129491 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 151.13771928156893 -81.5136262928737 345.08874825789576 + vertex 155.3875823625184 -74.1523313138508 345.0889063566993 + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 154.29779091895986 -96.04063088847262 345.08854364606697 + vertex 150.54836431749806 -102.53510722567016 345.08840416395924 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + vertex 150.54836431749806 -102.53510722567016 345.08840416395924 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 151.69962881423348 -94.54064573115123 345.08854364502906 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 153.31563935474946 -93.7415775674941 345.08857154516386 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + vertex 151.69962881423348 -94.54064573115123 345.08854364502906 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.34171035776342 -93.75607681169942 345.0885436542804 + vertex 151.69962881423348 -94.54064573115123 345.08854364502906 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.24903759671903 -93.6626628481546 345.08854429713773 + vertex 150.34171035776342 -93.75607681169942 345.0885436542804 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.18369989627547 -93.54844641271553 345.08854552929444 + vertex 150.24903759671903 -93.6626628481546 345.08854429713773 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.1501499127417 -93.4212111667062 345.088547266781 + vertex 150.18369989627547 -93.54844641271553 345.08854552929444 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.15067402205224 -93.28962798187602 345.0885493911906 + vertex 150.1501499127417 -93.4212111667062 345.088547266781 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 150.15067402205224 -93.28962798187602 345.0885493911906 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 146.57089771458698 -90.42396527299968 345.08856225947625 + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 146.57089771458698 -90.42396527299968 345.08856225947625 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 146.57089771458698 -90.42396527299968 345.08856225947625 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 155.71695418496913 -83.58103639355058 345.08875754271827 + vertex 150.21713137432857 -93.1074181311095 345.0885529442666 + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + vertex 150.21713137432857 -93.1074181311095 345.0885529442666 + endloop +endfacet +facet normal 9.299929625675227e-06 1.6107950614637687e-05 -0.9999999998270228 + outer loop + vertex 158.56509962055546 -84.64805150952648 345.0887668428436 + vertex 157.81515540286424 -85.94704879463569 345.08873894423107 + vertex 156.94909837953995 -85.44710356528444 345.08873894305475 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.4595540321369283e-10 + outer loop + vertex 146.57089771458698 -90.42396527299968 345.08856225947625 + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.4595540321369283e-10 + outer loop + vertex 151.5704343856383 -81.76414174725016 377.588748252447 + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480165e-05 + outer loop + vertex 146.57089771458698 -90.42396527299968 345.08856225947625 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480165e-05 + outer loop + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + vertex 146.57059546687424 -90.42448878139473 377.58856225385455 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480165e-05 + outer loop + vertex 151.13771928156893 -81.5136262928737 345.08874825789576 + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + endloop +endfacet +facet normal -0.4999838918764072 -0.866034703414457 -1.859985924480165e-05 + outer loop + vertex 151.5704343856383 -81.76414174725016 377.588748252447 + vertex 151.1374170338562 -81.51414980126874 377.58874825227406 + vertex 151.57073663335103 -81.76361823885512 345.08874825806873 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + vertex 142.93041433650887 -95.7551825322223 351.7266685268374 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 142.9323915778253 -95.7567364442471 370.950211327374 + vertex 142.93041433650887 -95.7551825322223 351.7266685268374 + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.00533387512593 -95.62541251045653 352.0884427463218 + vertex 142.93041433650887 -95.7551825322223 351.7266685268374 + vertex 142.9323915778253 -95.7567364442471 370.950211327374 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.00723341839526 -95.62690607390317 370.5884427370222 + vertex 143.00533387512593 -95.62541251045653 352.0884427463218 + vertex 142.9323915778253 -95.7567364442471 370.950211327374 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.1245161131354 -95.41897395127233 352.3991073518439 + vertex 143.00533387512593 -95.62541251045653 352.0884427463218 + vertex 143.00723341839526 -95.62690607390317 370.5884427370222 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + vertex 143.1245161131354 -95.41897395127233 352.3991073518439 + vertex 143.00723341839526 -95.62690607390317 370.5884427370222 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.2798389779749 -95.14993530132229 352.637491063935 + vertex 143.1245161131354 -95.41897395127233 352.3991073518439 + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.28147379742944 -95.1512526255574 370.0394149352006 + vertex 143.2798389779749 -95.14993530132229 352.637491063935 + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.4607174730887 -94.83663109999313 352.7873484265637 + vertex 143.2798389779749 -95.14993530132229 352.637491063935 + vertex 143.28147379742944 -95.1512526255574 370.0394149352006 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.4621833072663 -94.83784454400585 369.8895710611137 + vertex 143.4607174730887 -94.83663109999313 352.7873484265637 + vertex 143.28147379742944 -95.1512526255574 370.0394149352006 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.65482502795072 -94.5004125108457 352.838466908118 + vertex 143.4607174730887 -94.83663109999313 352.7873484265637 + vertex 143.4621833072663 -94.83784454400585 369.8895710611137 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.65611233773603 -94.50152081720148 369.8384670391763 + vertex 143.65482502795072 -94.5004125108457 352.838466908118 + vertex 143.4621833072663 -94.83784454400585 369.8895710611137 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + vertex 143.65482502795072 -94.5004125108457 352.838466908118 + vertex 143.65611233773603 -94.50152081720148 369.8384670391763 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.85004494589515 -94.16520135132487 369.88958552403017 + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + vertex 143.65611233773603 -94.50152081720148 369.8384670391763 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.03076494498626 -93.85180576218127 370.0394428754097 + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + vertex 143.85004494589515 -94.16520135132487 369.88958552403017 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.0298148157895 -93.85088324620058 352.63751896372383 + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + vertex 144.03076494498626 -93.85180576218127 370.0394428754097 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.18595656572532 -93.58269144126007 370.27782656246944 + vertex 144.0298148157895 -93.85088324620058 352.63751896372383 + vertex 144.03076494498626 -93.85180576218127 370.0394428754097 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + vertex 144.0298148157895 -93.85088324620058 352.63751896372383 + vertex 144.18595656572532 -93.58269144126007 370.27782656246944 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.30504375562518 -93.37619808479967 370.5884911308839 + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + vertex 144.18595656572532 -93.58269144126007 370.27782656246944 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.3043301306699 -93.37538834930898 352.08849107017363 + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + vertex 144.30504375562518 -93.37619808479967 370.5884911308839 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.3799109194952 -93.24639787379643 370.9502653037131 + vertex 144.3043301306699 -93.37538834930898 352.08849107017363 + vertex 144.30504375562518 -93.37619808479967 370.5884911308839 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.37925639818468 -93.24560667275045 351.72672242509066 + vertex 144.3043301306699 -93.37538834930898 352.08849107017363 + vertex 144.3799109194952 -93.24639787379643 370.9502653037131 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + vertex 144.37925639818468 -93.24560667275045 351.72672242509066 + vertex 144.3799109194952 -93.24639787379643 370.9502653037131 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + vertex 144.37925639818468 -93.24560667275045 351.72672242509066 + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 142.93042155750558 -95.75517002508911 350.9502113916642 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.0053478250204 -95.62538834853059 350.5884427465812 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + vertex 142.93042155750558 -95.75517002508911 350.9502113916642 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + vertex 143.0053478250204 -95.62538834853059 350.5884427465812 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 141.8880172818554 -97.53526830604113 345.0884041604997 + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.27986313990078 -95.14989345163899 350.039414853031 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.4607444222153 -94.8365844227366 349.88957094819773 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 143.27986313990078 -95.14989345163899 350.039414853031 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.65485292773957 -94.50036418699386 349.83846690863686 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 143.4607444222153 -94.8365844227366 349.88957094819773 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.8489604826016 -94.16414559784646 349.88958539019114 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 143.65485292773957 -94.50036418699386 349.83846690863686 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.0298389777154 -93.85084139651728 350.03944275281987 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 143.8489604826016 -94.16414559784646 349.88958539019114 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.18516184255486 -93.58180274656723 350.27782646491096 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 144.0298389777154 -93.85084139651728 350.03944275281987 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.30434408056433 -93.37536418738306 350.58849107043307 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 144.18516184255486 -93.58180274656723 350.27782646491096 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.37926361918142 -93.24559416561726 350.9502652899174 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 144.30434408056433 -93.37536418738306 350.58849107043307 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 144.37926361918142 -93.24559416561726 350.9502652899174 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + vertex 143.12637310684354 -95.42047524174265 372.3991070949901 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.00728591694366 -95.62696859820304 372.0884425265756 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 143.12637310684354 -95.42047524174265 372.3991070949901 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 142.93241875307368 -95.75676880920629 371.7266683537464 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 143.00728591694366 -95.62696859820304 372.0884425265756 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 142.93241875307368 -95.75676880920629 371.7266683537464 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + vertex 141.88771503414267 -97.53579181443617 377.58840415487805 + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.28156472758258 -95.15136092082145 372.6374907820498 + vertex 143.12637310684354 -95.42047524174265 372.3991070949901 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.46228472667372 -94.83796533167786 372.78734813342936 + vertex 143.28156472758258 -95.15136092082145 372.6374907820498 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.6562173348328 -94.50164586580122 372.8384666182832 + vertex 143.46228472667372 -94.83796533167786 372.78734813342936 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 143.85014636530255 -94.16532213899687 372.7873625963459 + vertex 143.6562173348328 -94.50164586580122 372.8384666182832 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.0308558751394 -93.85191405744531 372.6375187222589 + vertex 143.85014636530255 -94.16532213899687 372.7873625963459 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.18603080988447 -93.58277986397292 372.3991466084127 + vertex 144.0308558751394 -93.85191405744531 372.6375187222589 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.30509625417358 -93.37626060909955 372.0884909204373 + vertex 144.18603080988447 -93.58277986397292 372.3991466084127 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.37993809474352 -93.24643023875561 371.7267223300855 + vertex 144.30509625417358 -93.37626060909955 372.0884909204373 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + vertex 144.37993809474352 -93.24643023875561 371.7267223300855 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8662980286671272 0.499527499655437 5.1141337947807864e-05 + outer loop + vertex 146.13788036280488 -90.17397332701823 345.0885622593033 + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + vertex 146.13757811509214 -90.17449683541328 377.5885622536816 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.36900195428754 -97.79937597189308 351.3384390099724 + vertex 146.39455315076592 -97.7551181000739 351.7266685282213 + vertex 146.39456037176262 -97.75510559294071 350.950211393048 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.46948663927742 -97.6253239163822 350.588442747965 + vertex 146.39456037176262 -97.75510559294071 350.950211393048 + vertex 146.39455315076592 -97.7551181000739 351.7266685282213 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.469472689383 -97.62534807830812 352.0884427477056 + vertex 146.46948663927742 -97.6253239163822 350.588442747965 + vertex 146.39455315076592 -97.7551181000739 351.7266685282213 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.58867465552234 -97.4188753490006 350.27778701003496 + vertex 146.46948663927742 -97.6253239163822 350.588442747965 + vertex 146.469472689383 -97.62534807830812 352.0884427477056 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + vertex 146.58867465552234 -97.4188753490006 350.27778701003496 + vertex 146.469472689383 -97.62534807830812 352.0884427477056 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.74400195415782 -97.14982901949058 350.0394148544148 + vertex 146.58867465552234 -97.4188753490006 350.27778701003496 + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.7439777922319 -97.14987086917388 352.6374910653188 + vertex 146.74400195415782 -97.14982901949058 350.0394148544148 + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.92488323647234 -96.83651999058819 349.8895709495815 + vertex 146.74400195415782 -97.14982901949058 350.0394148544148 + vertex 146.7439777922319 -97.14987086917388 352.6374910653188 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 146.9248562873457 -96.83656666784472 352.78734842794756 + vertex 146.92488323647234 -96.83651999058819 349.8895709495815 + vertex 146.7439777922319 -97.14987086917388 352.6374910653188 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.1189917419966 -96.50029975484546 349.8384669100207 + vertex 146.92488323647234 -96.83651999058819 349.8895709495815 + vertex 146.9248562873457 -96.83656666784472 352.78734842794756 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.11896384220773 -96.5003480786973 352.83846690950185 + vertex 147.1189917419966 -96.50029975484546 349.8384669100207 + vertex 146.9248562873457 -96.83656666784472 352.78734842794756 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.3130992968586 -96.16408116569804 349.88958539157494 + vertex 147.1189917419966 -96.50029975484546 349.8384669100207 + vertex 147.11896384220773 -96.5003480786973 352.83846690950185 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.313072347732 -96.16412784295457 352.787362869941 + vertex 147.3130992968586 -96.16408116569804 349.88958539157494 + vertex 147.11896384220773 -96.5003480786973 352.83846690950185 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.49397779197244 -95.85077696436888 350.0394427542037 + vertex 147.3130992968586 -96.16408116569804 349.88958539157494 + vertex 147.313072347732 -96.16412784295457 352.787362869941 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.49395363004652 -95.85081881405219 352.63751896510763 + vertex 147.49397779197244 -95.85077696436888 350.0394427542037 + vertex 147.313072347732 -96.16412784295457 352.787362869941 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + vertex 147.49397779197244 -95.85077696436888 350.0394427542037 + vertex 147.49395363004652 -95.85081881405219 352.63751896510763 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.649280928682 -95.58177248454216 352.3991468094875 + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + vertex 147.49395363004652 -95.85081881405219 352.63751896510763 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.76848289482137 -95.37529975523464 350.58849107181686 + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + vertex 147.649280928682 -95.58177248454216 352.3991468094875 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.76846894492692 -95.37532391716057 352.0884910715574 + vertex 147.76848289482137 -95.37529975523464 350.58849107181686 + vertex 147.649280928682 -95.58177248454216 352.3991468094875 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.84340243343846 -95.24552973346886 350.9502652913012 + vertex 147.76848289482137 -95.37529975523464 350.58849107181686 + vertex 147.76846894492692 -95.37532391716057 352.0884910715574 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.84339521244175 -95.24554224060205 351.72672242647445 + vertex 147.84340243343846 -95.24552973346886 350.9502652913012 + vertex 147.76846894492692 -95.37532391716057 352.0884910715574 + endloop +endfacet +facet normal -0.8660347035642583 0.4999838919628986 -3.459555419915709e-10 + outer loop + vertex 147.86895362991677 -95.20127186164967 351.3384948095501 + vertex 147.84340243343846 -95.24552973346886 350.9502652913012 + vertex 147.84339521244175 -95.24554224060205 351.72672242647445 + endloop +endfacet +facet normal -0.39666955215042093 -0.6870813306610472 0.6087466726429224 + outer loop + vertex 144.18516184255486 -93.58180274656723 350.27782646491096 + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + vertex 144.30434408056433 -93.37536418738306 350.58849107043307 + endloop +endfacet +facet normal -0.39666955215042093 -0.6870813306610472 0.6087466726429224 + outer loop + vertex 147.76848289482137 -95.37529975523464 350.58849107181686 + vertex 144.30434408056433 -93.37536418738306 350.58849107043307 + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + endloop +endfacet +facet normal -0.3043782866302378 -0.5272213029181235 0.793342017277137 + outer loop + vertex 147.49397779197244 -95.85077696436888 350.0394427542037 + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + vertex 144.0298389777154 -93.85084139651728 350.03944275281987 + endloop +endfacet +facet normal -0.3043782866302378 -0.5272213029181235 0.793342017277137 + outer loop + vertex 144.18516184255486 -93.58180274656723 350.27782646491096 + vertex 144.0298389777154 -93.85084139651728 350.03944275281987 + vertex 147.64930065681193 -95.58173831441883 350.27782646629475 + endloop +endfacet +facet normal -0.19134414388516638 -0.3314320146558334 0.9238724144934886 + outer loop + vertex 147.3130992968586 -96.16408116569804 349.88958539157494 + vertex 147.49397779197244 -95.85077696436888 350.0394427542037 + vertex 143.8489604826016 -94.16414559784646 349.88958539019114 + endloop +endfacet +facet normal -0.19134414388516638 -0.3314320146558334 0.9238724144934886 + outer loop + vertex 144.0298389777154 -93.85084139651728 350.03944275281987 + vertex 143.8489604826016 -94.16414559784646 349.88958539019114 + vertex 147.49397779197244 -95.85077696436888 350.0394427542037 + endloop +endfacet +facet normal -0.06527021394542022 -0.11305618231196382 0.9914424334335118 + outer loop + vertex 147.1189917419966 -96.50029975484546 349.8384669100207 + vertex 147.3130992968586 -96.16408116569804 349.88958539157494 + vertex 143.65485292773957 -94.50036418699386 349.83846690863686 + endloop +endfacet +facet normal -0.06527021394542022 -0.11305618231196382 0.9914424334335118 + outer loop + vertex 143.8489604826016 -94.16414559784646 349.88958539019114 + vertex 143.65485292773957 -94.50036418699386 349.83846690863686 + vertex 147.3130992968586 -96.16408116569804 349.88958539157494 + endloop +endfacet +facet normal 0.06525177321054512 0.11302424202223438 0.9914472889711178 + outer loop + vertex 146.92488323647234 -96.83651999058819 349.8895709495815 + vertex 147.1189917419966 -96.50029975484546 349.8384669100207 + vertex 143.4607444222153 -94.8365844227366 349.88957094819773 + endloop +endfacet +facet normal 0.06525177321054512 0.11302424202223438 0.9914472889711178 + outer loop + vertex 143.65485292773957 -94.50036418699386 349.83846690863686 + vertex 143.4607444222153 -94.8365844227366 349.88957094819773 + vertex 147.1189917419966 -96.50029975484546 349.8384669100207 + endloop +endfacet +facet normal 0.19132695985589823 0.3314022510440651 0.923886650209443 + outer loop + vertex 146.74400195415782 -97.14982901949058 350.0394148544148 + vertex 146.92488323647234 -96.83651999058819 349.8895709495815 + vertex 143.27986313990078 -95.14989345163899 350.039414853031 + endloop +endfacet +facet normal 0.19132695985589823 0.3314022510440651 0.923886650209443 + outer loop + vertex 143.4607444222153 -94.8365844227366 349.88957094819773 + vertex 143.27986313990078 -95.14989345163899 350.039414853031 + vertex 146.92488323647234 -96.83651999058819 349.8895709495815 + endloop +endfacet +facet normal 0.3043635303697915 0.5271957443253034 0.7933646630308956 + outer loop + vertex 146.58867465552234 -97.4188753490006 350.27778701003496 + vertex 146.74400195415782 -97.14982901949058 350.0394148544148 + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + endloop +endfacet +facet normal 0.3043635303697915 0.5271957443253034 0.7933646630308956 + outer loop + vertex 143.27986313990078 -95.14989345163899 350.039414853031 + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + vertex 146.74400195415782 -97.14982901949058 350.0394148544148 + endloop +endfacet +facet normal 0.3966582292735144 0.6870617188629587 0.6087761851638719 + outer loop + vertex 146.58867465552234 -97.4188753490006 350.27778701003496 + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + vertex 146.46948663927742 -97.6253239163822 350.588442747965 + endloop +endfacet +facet normal 0.3966582292735144 0.6870617188629587 0.6087761851638719 + outer loop + vertex 143.0053478250204 -95.62538834853059 350.5884427465812 + vertex 146.46948663927742 -97.6253239163822 350.588442747965 + vertex 143.12453584126533 -95.418939781149 350.27778700865116 + endloop +endfacet +facet normal 0.46192132536096836 0.8001055726832853 0.38270061632811425 + outer loop + vertex 146.46948663927742 -97.6253239163822 350.588442747965 + vertex 143.0053478250204 -95.62538834853059 350.5884427465812 + vertex 146.39456037176262 -97.75510559294071 350.950211393048 + endloop +endfacet +facet normal 0.46192132536096836 0.8001055726832853 0.38270061632811425 + outer loop + vertex 142.93042155750558 -95.75517002508911 350.9502113916642 + vertex 146.39456037176262 -97.75510559294071 350.950211393048 + vertex 143.0053478250204 -95.62538834853059 350.5884427465812 + endloop +endfacet +facet normal 0.49570524648613756 0.8586235539621913 0.1305446329323946 + outer loop + vertex 146.39456037176262 -97.75510559294071 350.950211393048 + vertex 142.93042155750558 -95.75517002508911 350.9502113916642 + vertex 146.36900195428754 -97.79937597189308 351.3384390099724 + endloop +endfacet +facet normal 0.49570524648613756 0.8586235539621913 0.1305446329323946 + outer loop + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + vertex 146.36900195428754 -97.79937597189308 351.3384390099724 + vertex 142.93042155750558 -95.75517002508911 350.9502113916642 + endloop +endfacet +facet normal 0.4957076742549412 0.8586277589811079 -0.13050775146265353 + outer loop + vertex 146.36900195428754 -97.79937597189308 351.3384390099724 + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + vertex 146.39455315076592 -97.7551181000739 351.7266685282213 + endloop +endfacet +facet normal 0.4957076742549412 0.8586277589811079 -0.13050775146265353 + outer loop + vertex 142.93041433650887 -95.7551825322223 351.7266685268374 + vertex 146.39455315076592 -97.7551181000739 351.7266685282213 + vertex 142.90486314003053 -95.79944040404149 351.3384390085886 + endloop +endfacet +facet normal 0.4619284432189475 0.8001179011749451 -0.3826662482695866 + outer loop + vertex 146.39455315076592 -97.7551181000739 351.7266685282213 + vertex 142.93041433650887 -95.7551825322223 351.7266685268374 + vertex 146.469472689383 -97.62534807830812 352.0884427477056 + endloop +endfacet +facet normal 0.4619284432189475 0.8001179011749451 -0.3826662482695866 + outer loop + vertex 143.00533387512593 -95.62541251045653 352.0884427463218 + vertex 146.469472689383 -97.62534807830812 352.0884427477056 + vertex 142.93041433650887 -95.7551825322223 351.7266685268374 + endloop +endfacet +facet normal 0.39666955215042093 0.6870813306610472 -0.6087466726429224 + outer loop + vertex 146.469472689383 -97.62534807830812 352.0884427477056 + vertex 143.00533387512593 -95.62541251045653 352.0884427463218 + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + endloop +endfacet +facet normal 0.39666955215042093 0.6870813306610472 -0.6087466726429224 + outer loop + vertex 143.1245161131354 -95.41897395127233 352.3991073518439 + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + vertex 143.00533387512593 -95.62541251045653 352.0884427463218 + endloop +endfacet +facet normal 0.3043782866302378 0.5272213029181235 -0.793342017277137 + outer loop + vertex 146.7439777922319 -97.14987086917388 352.6374910653188 + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + vertex 143.2798389779749 -95.14993530132229 352.637491063935 + endloop +endfacet +facet normal 0.3043782866302378 0.5272213029181235 -0.793342017277137 + outer loop + vertex 143.1245161131354 -95.41897395127233 352.3991073518439 + vertex 143.2798389779749 -95.14993530132229 352.637491063935 + vertex 146.58865492739244 -97.41890951912393 352.3991073532277 + endloop +endfacet +facet normal 0.19134414388516638 0.3314320146558334 -0.9238724144934886 + outer loop + vertex 146.9248562873457 -96.83656666784472 352.78734842794756 + vertex 146.7439777922319 -97.14987086917388 352.6374910653188 + vertex 143.4607174730887 -94.83663109999313 352.7873484265637 + endloop +endfacet +facet normal 0.19134414388516638 0.3314320146558334 -0.9238724144934886 + outer loop + vertex 143.2798389779749 -95.14993530132229 352.637491063935 + vertex 143.4607174730887 -94.83663109999313 352.7873484265637 + vertex 146.7439777922319 -97.14987086917388 352.6374910653188 + endloop +endfacet +facet normal 0.06527021394542022 0.11305618231196382 -0.9914424334335118 + outer loop + vertex 147.11896384220773 -96.5003480786973 352.83846690950185 + vertex 146.9248562873457 -96.83656666784472 352.78734842794756 + vertex 143.65482502795072 -94.5004125108457 352.838466908118 + endloop +endfacet +facet normal 0.06527021394542022 0.11305618231196382 -0.9914424334335118 + outer loop + vertex 143.4607174730887 -94.83663109999313 352.7873484265637 + vertex 143.65482502795072 -94.5004125108457 352.838466908118 + vertex 146.9248562873457 -96.83656666784472 352.78734842794756 + endloop +endfacet +facet normal -0.06525177321054512 -0.11302424202223438 -0.9914472889711178 + outer loop + vertex 147.313072347732 -96.16412784295457 352.787362869941 + vertex 147.11896384220773 -96.5003480786973 352.83846690950185 + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + endloop +endfacet +facet normal -0.06525177321054512 -0.11302424202223438 -0.9914472889711178 + outer loop + vertex 143.65482502795072 -94.5004125108457 352.838466908118 + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + vertex 147.11896384220773 -96.5003480786973 352.83846690950185 + endloop +endfacet +facet normal -0.19132695985589823 -0.3314022510440651 -0.923886650209443 + outer loop + vertex 147.49395363004652 -95.85081881405219 352.63751896510763 + vertex 147.313072347732 -96.16412784295457 352.787362869941 + vertex 144.0298148157895 -93.85088324620058 352.63751896372383 + endloop +endfacet +facet normal -0.19132695985589823 -0.3314022510440651 -0.923886650209443 + outer loop + vertex 143.848933533475 -94.16419227510298 352.7873628685572 + vertex 144.0298148157895 -93.85088324620058 352.63751896372383 + vertex 147.313072347732 -96.16412784295457 352.787362869941 + endloop +endfacet +facet normal -0.3043635303697915 -0.5271957443253034 -0.7933646630308956 + outer loop + vertex 147.649280928682 -95.58177248454216 352.3991468094875 + vertex 147.49395363004652 -95.85081881405219 352.63751896510763 + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + endloop +endfacet +facet normal -0.3043635303697915 -0.5271957443253034 -0.7933646630308956 + outer loop + vertex 144.0298148157895 -93.85088324620058 352.63751896372383 + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + vertex 147.49395363004652 -95.85081881405219 352.63751896510763 + endloop +endfacet +facet normal -0.3966582292735144 -0.6870617188629587 -0.6087761851638719 + outer loop + vertex 144.3043301306699 -93.37538834930898 352.08849107017363 + vertex 147.76846894492692 -95.37532391716057 352.0884910715574 + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + endloop +endfacet +facet normal -0.3966582292735144 -0.6870617188629587 -0.6087761851638719 + outer loop + vertex 147.649280928682 -95.58177248454216 352.3991468094875 + vertex 144.18514211442496 -93.58183691669058 352.39914680810364 + vertex 147.76846894492692 -95.37532391716057 352.0884910715574 + endloop +endfacet +facet normal -0.46192132536096836 -0.8001055726832853 -0.38270061632811425 + outer loop + vertex 144.37925639818468 -93.24560667275045 351.72672242509066 + vertex 147.84339521244175 -95.24554224060205 351.72672242647445 + vertex 144.3043301306699 -93.37538834930898 352.08849107017363 + endloop +endfacet +facet normal -0.46192132536096836 -0.8001055726832853 -0.38270061632811425 + outer loop + vertex 147.76846894492692 -95.37532391716057 352.0884910715574 + vertex 144.3043301306699 -93.37538834930898 352.08849107017363 + vertex 147.84339521244175 -95.24554224060205 351.72672242647445 + endloop +endfacet +facet normal -0.49570524648613756 -0.8586235539621913 -0.1305446329323946 + outer loop + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + vertex 147.86895362991677 -95.20127186164967 351.3384948095501 + vertex 144.37925639818468 -93.24560667275045 351.72672242509066 + endloop +endfacet +facet normal -0.49570524648613756 -0.8586235539621913 -0.1305446329323946 + outer loop + vertex 147.84339521244175 -95.24554224060205 351.72672242647445 + vertex 144.37925639818468 -93.24560667275045 351.72672242509066 + vertex 147.86895362991677 -95.20127186164967 351.3384948095501 + endloop +endfacet +facet normal -0.4957076742549412 -0.8586277589811079 0.13050775146265353 + outer loop + vertex 144.37926361918142 -93.24559416561726 350.9502652899174 + vertex 147.84340243343846 -95.24552973346886 350.9502652913012 + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + endloop +endfacet +facet normal -0.4957076742549412 -0.8586277589811079 0.13050775146265353 + outer loop + vertex 147.86895362991677 -95.20127186164967 351.3384948095501 + vertex 144.40481481565976 -93.2013362937981 351.3384948081663 + vertex 147.84340243343846 -95.24552973346886 350.9502652913012 + endloop +endfacet +facet normal -0.4619284432189475 -0.8001179011749451 0.3826662482695866 + outer loop + vertex 144.30434408056433 -93.37536418738306 350.58849107043307 + vertex 147.76848289482137 -95.37529975523464 350.58849107181686 + vertex 144.37926361918142 -93.24559416561726 350.9502652899174 + endloop +endfacet +facet normal -0.4619284432189475 -0.8001179011749451 0.3826662482695866 + outer loop + vertex 147.84340243343846 -95.24552973346886 350.9502652913012 + vertex 144.37926361918142 -93.24559416561726 350.9502652899174 + vertex 147.76848289482137 -95.37529975523464 350.58849107181686 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.37206580339617 -97.79914020349905 371.3382343231689 + vertex 146.39761086774226 -97.75487880782785 371.7264637883946 + vertex 146.3975836924939 -97.75484644286865 370.9500067620222 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.47242553306384 -97.62501607252473 370.5882381716704 + vertex 146.3975836924939 -97.75484644286865 370.9500067620222 + vertex 146.39761086774226 -97.75487880782785 371.7264637883946 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.47247803161224 -97.6250785968246 372.0882379612238 + vertex 146.47242553306384 -97.62501607252473 370.5882381716704 + vertex 146.39761086774226 -97.75487880782785 371.7264637883946 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.59149097735295 -97.41849681765136 370.277582483695 + vertex 146.47242553306384 -97.62501607252473 370.5882381716704 + vertex 146.47247803161224 -97.6250785968246 372.0882379612238 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.5915652215121 -97.41858524036421 372.3989025296383 + vertex 146.59149097735295 -97.41849681765136 370.277582483695 + vertex 146.47247803161224 -97.6250785968246 372.0882379612238 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.746665912098 -97.14936262417896 370.03921036984883 + vertex 146.59149097735295 -97.41849681765136 370.277582483695 + vertex 146.5915652215121 -97.41858524036421 372.3989025296383 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.74675684225116 -97.149470919443 372.637286216698 + vertex 146.746665912098 -97.14936262417896 370.03921036984883 + vertex 146.5915652215121 -97.41858524036421 372.3989025296383 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.92737542193487 -96.83595454262742 369.8893664957619 + vertex 146.746665912098 -97.14936262417896 370.03921036984883 + vertex 146.74675684225116 -97.149470919443 372.637286216698 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 146.9274768413423 -96.83607533029942 372.78714356807757 + vertex 146.92737542193487 -96.83595454262742 369.8893664957619 + vertex 146.74675684225116 -97.149470919443 372.637286216698 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.12130445240462 -96.49963081582305 369.83826247382456 + vertex 146.92737542193487 -96.83595454262742 369.8893664957619 + vertex 146.9274768413423 -96.83607533029942 372.78714356807757 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.1214094495014 -96.49975586442278 372.83826205293144 + vertex 147.12130445240462 -96.49963081582305 369.83826247382456 + vertex 146.9274768413423 -96.83607533029942 372.78714356807757 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.3152370605637 -96.16331134994643 369.8893809586784 + vertex 147.12130445240462 -96.49963081582305 369.83826247382456 + vertex 147.1214094495014 -96.49975586442278 372.83826205293144 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.31533847997113 -96.16343213761843 372.7871580309941 + vertex 147.3152370605637 -96.16331134994643 369.8893809586784 + vertex 147.1214094495014 -96.49975586442278 372.83826205293144 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.49595705965484 -95.84991576080283 370.03923831005795 + vertex 147.3152370605637 -96.16331134994643 369.8893809586784 + vertex 147.31533847997113 -96.16343213761843 372.7871580309941 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.496047989808 -95.85002405606687 372.6373141569071 + vertex 147.49595705965484 -95.84991576080283 370.03923831005795 + vertex 147.31533847997113 -96.16343213761843 372.7871580309941 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.6511486803939 -95.58080143988163 370.2776219971177 + vertex 147.49595705965484 -95.84991576080283 370.03923831005795 + vertex 147.496047989808 -95.85002405606687 372.6373141569071 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + vertex 147.6511486803939 -95.58080143988163 370.2776219971177 + vertex 147.496047989808 -95.85002405606687 372.6373141569071 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.77023587029376 -95.37430808342124 370.58828656553214 + vertex 147.6511486803939 -95.58080143988163 370.2776219971177 + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.77028836884216 -95.3743706077211 372.0882863550856 + vertex 147.77023587029376 -95.37430808342124 370.58828656553214 + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.84510303416374 -95.244507872418 370.95006073836134 + vertex 147.77023587029376 -95.37430808342124 370.58828656553214 + vertex 147.77028836884216 -95.3743706077211 372.0882863550856 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.8451302094121 -95.24454023737718 371.7265177647338 + vertex 147.84510303416374 -95.244507872418 370.95006073836134 + vertex 147.77028836884216 -95.3743706077211 372.0882863550856 + endloop +endfacet +facet normal -0.8662980286671544 0.4995274996553899 5.1141337943045235e-05 + outer loop + vertex 147.87064809850983 -95.20024647674678 371.33829020358706 + vertex 147.84510303416374 -95.244507872418 370.95006073836134 + vertex 147.8451302094121 -95.24454023737718 371.7265177647338 + endloop +endfacet +facet normal -0.06523612223638255 -0.11303325680617896 -0.9914472911916944 + outer loop + vertex 147.1214094495014 -96.49975586442278 372.83826205293144 + vertex 143.6562173348328 -94.50164586580122 372.8384666182832 + vertex 147.31533847997113 -96.16343213761843 372.7871580309941 + endloop +endfacet +facet normal -0.06523612223638255 -0.11303325680617896 -0.9914472911916944 + outer loop + vertex 143.85014636530255 -94.16532213899687 372.7873625963459 + vertex 147.31533847997113 -96.16343213761843 372.7871580309941 + vertex 143.6562173348328 -94.50164586580122 372.8384666182832 + endloop +endfacet +facet normal -0.19119323355555573 -0.33147939330275683 -0.9238866593139048 + outer loop + vertex 147.31533847997113 -96.16343213761843 372.7871580309941 + vertex 143.85014636530255 -94.16532213899687 372.7873625963459 + vertex 147.496047989808 -95.85002405606687 372.6373141569071 + endloop +endfacet +facet normal -0.19119323355555573 -0.33147939330275683 -0.9238866593139048 + outer loop + vertex 144.0308558751394 -93.85191405744531 372.6375187222589 + vertex 147.496047989808 -95.85002405606687 372.6373141569071 + vertex 143.85014636530255 -94.16532213899687 372.7873625963459 + endloop +endfacet +facet normal -0.304120841969668 -0.527335756941337 -0.7933646783987597 + outer loop + vertex 147.496047989808 -95.85002405606687 372.6373141569071 + vertex 144.0308558751394 -93.85191405744531 372.6375187222589 + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + endloop +endfacet +facet normal -0.304120841969668 -0.527335756941337 -0.7933646783987597 + outer loop + vertex 144.18603080988447 -93.58277986397292 372.3991466084127 + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + vertex 144.0308558751394 -93.85191405744531 372.6375187222589 + endloop +endfacet +facet normal -0.3963231175869931 -0.6872550602078926 -0.6087762057478697 + outer loop + vertex 147.77028836884216 -95.3743706077211 372.0882863550856 + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + vertex 144.30509625417358 -93.37626060909955 372.0884909204373 + endloop +endfacet +facet normal -0.3963231175869931 -0.6872550602078926 -0.6087762057478697 + outer loop + vertex 144.18603080988447 -93.58277986397292 372.3991466084127 + vertex 144.30509625417358 -93.37626060909955 372.0884909204373 + vertex 147.65122292455305 -95.58088986259449 372.39894204306097 + endloop +endfacet +facet normal -0.4615166276956668 -0.8003390668639377 -0.38270064072559534 + outer loop + vertex 147.8451302094121 -95.24454023737718 371.7265177647338 + vertex 147.77028836884216 -95.3743706077211 372.0882863550856 + vertex 144.37993809474352 -93.24643023875561 371.7267223300855 + endloop +endfacet +facet normal -0.4615166276956668 -0.8003390668639377 -0.38270064072559534 + outer loop + vertex 144.30509625417358 -93.37626060909955 372.0884909204373 + vertex 144.37993809474352 -93.24643023875561 371.7267223300855 + vertex 147.77028836884216 -95.3743706077211 372.0882863550856 + endloop +endfacet +facet normal -0.49525854231920413 -0.8588812887361096 -0.13054465948041147 + outer loop + vertex 147.87064809850983 -95.20024647674678 371.33829020358706 + vertex 147.8451302094121 -95.24454023737718 371.7265177647338 + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + endloop +endfacet +facet normal -0.49525854231920413 -0.8588812887361096 -0.13054465948041147 + outer loop + vertex 144.37993809474352 -93.24643023875561 371.7267223300855 + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + vertex 147.8451302094121 -95.24454023737718 371.7265177647338 + endloop +endfacet +facet normal -0.4952494057371125 -0.8588921701493305 0.13050772457295526 + outer loop + vertex 147.84510303416374 -95.244507872418 370.95006073836134 + vertex 147.87064809850983 -95.20024647674678 371.33829020358706 + vertex 144.3799109194952 -93.24639787379643 370.9502653037131 + endloop +endfacet +facet normal -0.4952494057371125 -0.8588921701493305 0.13050772457295526 + outer loop + vertex 144.40545598384125 -93.20213647812523 371.33849476893886 + vertex 144.3799109194952 -93.24639787379643 370.9502653037131 + vertex 147.87064809850983 -95.20024647674678 371.33829020358706 + endloop +endfacet +facet normal -0.4614898405923627 -0.8003709695532722 0.38266622287104285 + outer loop + vertex 147.77023587029376 -95.37430808342124 370.58828656553214 + vertex 147.84510303416374 -95.244507872418 370.95006073836134 + vertex 144.30504375562518 -93.37619808479967 370.5884911308839 + endloop +endfacet +facet normal -0.4614898405923627 -0.8003709695532722 0.38266622287104285 + outer loop + vertex 144.3799109194952 -93.24639787379643 370.9502653037131 + vertex 144.30504375562518 -93.37619808479967 370.5884911308839 + vertex 147.84510303416374 -95.244507872418 370.95006073836134 + endloop +endfacet +facet normal -0.39628050545929794 -0.6873058100577827 0.608746650466135 + outer loop + vertex 147.6511486803939 -95.58080143988163 370.2776219971177 + vertex 147.77023587029376 -95.37430808342124 370.58828656553214 + vertex 144.18595656572532 -93.58269144126007 370.27782656246944 + endloop +endfacet +facet normal -0.39628050545929794 -0.6873058100577827 0.608746650466135 + outer loop + vertex 144.30504375562518 -93.37619808479967 370.5884911308839 + vertex 144.18595656572532 -93.58269144126007 370.27782656246944 + vertex 147.77023587029376 -95.37430808342124 370.58828656553214 + endloop +endfacet +facet normal -0.3040653087636446 -0.5274018954333461 0.7933419998334786 + outer loop + vertex 147.49595705965484 -95.84991576080283 370.03923831005795 + vertex 147.6511486803939 -95.58080143988163 370.2776219971177 + vertex 144.03076494498626 -93.85180576218127 370.0394428754097 + endloop +endfacet +facet normal -0.3040653087636446 -0.5274018954333461 0.7933419998334786 + outer loop + vertex 144.18595656572532 -93.58269144126007 370.27782656246944 + vertex 144.03076494498626 -93.85180576218127 370.0394428754097 + vertex 147.6511486803939 -95.58080143988163 370.2776219971177 + endloop +endfacet +facet normal -0.19112856376746587 -0.3315564132080306 0.9238724029717585 + outer loop + vertex 147.3152370605637 -96.16331134994643 369.8893809586784 + vertex 147.49595705965484 -95.84991576080283 370.03923831005795 + vertex 143.85004494589515 -94.16520135132487 369.88958552403017 + endloop +endfacet +facet normal -0.19112856376746587 -0.3315564132080306 0.9238724029717585 + outer loop + vertex 144.03076494498626 -93.85180576218127 370.0394428754097 + vertex 143.85004494589515 -94.16520135132487 369.88958552403017 + vertex 147.49595705965484 -95.84991576080283 370.03923831005795 + endloop +endfacet +facet normal -0.06516672300538406 -0.11311590934540475 0.9914424286188794 + outer loop + vertex 147.12130445240462 -96.49963081582305 369.83826247382456 + vertex 147.3152370605637 -96.16331134994643 369.8893809586784 + vertex 143.65611233773603 -94.50152081720148 369.8384670391763 + endloop +endfacet +facet normal -0.06516672300538406 -0.11311590934540475 0.9914424286188794 + outer loop + vertex 143.85004494589515 -94.16520135132487 369.88958552403017 + vertex 143.65611233773603 -94.50152081720148 369.8384670391763 + vertex 147.3152370605637 -96.16331134994643 369.8893809586784 + endloop +endfacet +facet normal 0.06523612223638255 0.11303325680617896 0.9914472911916944 + outer loop + vertex 146.92737542193487 -96.83595454262742 369.8893664957619 + vertex 147.12130445240462 -96.49963081582305 369.83826247382456 + vertex 143.4621833072663 -94.83784454400585 369.8895710611137 + endloop +endfacet +facet normal 0.06523612223638255 0.11303325680617896 0.9914472911916944 + outer loop + vertex 143.65611233773603 -94.50152081720148 369.8384670391763 + vertex 143.4621833072663 -94.83784454400585 369.8895710611137 + vertex 147.12130445240462 -96.49963081582305 369.83826247382456 + endloop +endfacet +facet normal 0.19119323355555573 0.33147939330275683 0.9238866593139048 + outer loop + vertex 146.746665912098 -97.14936262417896 370.03921036984883 + vertex 146.92737542193487 -96.83595454262742 369.8893664957619 + vertex 143.28147379742944 -95.1512526255574 370.0394149352006 + endloop +endfacet +facet normal 0.19119323355555573 0.33147939330275683 0.9238866593139048 + outer loop + vertex 143.4621833072663 -94.83784454400585 369.8895710611137 + vertex 143.28147379742944 -95.1512526255574 370.0394149352006 + vertex 146.92737542193487 -96.83595454262742 369.8893664957619 + endloop +endfacet +facet normal 0.304120841969668 0.527335756941337 0.7933646783987597 + outer loop + vertex 146.59149097735295 -97.41849681765136 370.277582483695 + vertex 146.746665912098 -97.14936262417896 370.03921036984883 + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + endloop +endfacet +facet normal 0.304120841969668 0.527335756941337 0.7933646783987597 + outer loop + vertex 143.28147379742944 -95.1512526255574 370.0394149352006 + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + vertex 146.746665912098 -97.14936262417896 370.03921036984883 + endloop +endfacet +facet normal 0.3963231175869931 0.6872550602078926 0.6087762057478697 + outer loop + vertex 146.59149097735295 -97.41849681765136 370.277582483695 + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + vertex 146.47242553306384 -97.62501607252473 370.5882381716704 + endloop +endfacet +facet normal 0.3963231175869931 0.6872550602078926 0.6087762057478697 + outer loop + vertex 143.00723341839526 -95.62690607390317 370.5884427370222 + vertex 146.47242553306384 -97.62501607252473 370.5882381716704 + vertex 143.1262988626844 -95.42038681902979 370.2777870490468 + endloop +endfacet +facet normal 0.4615166276956668 0.8003390668639377 0.38270064072559534 + outer loop + vertex 146.47242553306384 -97.62501607252473 370.5882381716704 + vertex 143.00723341839526 -95.62690607390317 370.5884427370222 + vertex 146.3975836924939 -97.75484644286865 370.9500067620222 + endloop +endfacet +facet normal 0.4615166276956668 0.8003390668639377 0.38270064072559534 + outer loop + vertex 142.9323915778253 -95.7567364442471 370.950211327374 + vertex 146.3975836924939 -97.75484644286865 370.9500067620222 + vertex 143.00723341839526 -95.62690607390317 370.5884427370222 + endloop +endfacet +facet normal 0.49525854231920413 0.8588812887361096 0.13054465948041147 + outer loop + vertex 146.3975836924939 -97.75484644286865 370.9500067620222 + vertex 142.9323915778253 -95.7567364442471 370.950211327374 + vertex 146.37206580339617 -97.79914020349905 371.3382343231689 + endloop +endfacet +facet normal 0.49525854231920413 0.8588812887361096 0.13054465948041147 + outer loop + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + vertex 146.37206580339617 -97.79914020349905 371.3382343231689 + vertex 142.9323915778253 -95.7567364442471 370.950211327374 + endloop +endfacet +facet normal 0.4952494057371125 0.8588921701493305 -0.13050772457295526 + outer loop + vertex 146.37206580339617 -97.79914020349905 371.3382343231689 + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + vertex 146.39761086774226 -97.75487880782785 371.7264637883946 + endloop +endfacet +facet normal 0.4952494057371125 0.8588921701493305 -0.13050772457295526 + outer loop + vertex 142.93241875307368 -95.75676880920629 371.7266683537464 + vertex 146.39761086774226 -97.75487880782785 371.7264637883946 + vertex 142.9068736887276 -95.80103020487748 371.33843888852067 + endloop +endfacet +facet normal 0.4614898405923627 0.8003709695532722 -0.38266622287104285 + outer loop + vertex 146.39761086774226 -97.75487880782785 371.7264637883946 + vertex 142.93241875307368 -95.75676880920629 371.7266683537464 + vertex 146.47247803161224 -97.6250785968246 372.0882379612238 + endloop +endfacet +facet normal 0.4614898405923627 0.8003709695532722 -0.38266622287104285 + outer loop + vertex 143.00728591694366 -95.62696859820304 372.0884425265756 + vertex 146.47247803161224 -97.6250785968246 372.0882379612238 + vertex 142.93241875307368 -95.75676880920629 371.7266683537464 + endloop +endfacet +facet normal 0.39628050545929794 0.6873058100577827 -0.608746650466135 + outer loop + vertex 146.47247803161224 -97.6250785968246 372.0882379612238 + vertex 143.00728591694366 -95.62696859820304 372.0884425265756 + vertex 146.5915652215121 -97.41858524036421 372.3989025296383 + endloop +endfacet +facet normal 0.39628050545929794 0.6873058100577827 -0.608746650466135 + outer loop + vertex 143.12637310684354 -95.42047524174265 372.3991070949901 + vertex 146.5915652215121 -97.41858524036421 372.3989025296383 + vertex 143.00728591694366 -95.62696859820304 372.0884425265756 + endloop +endfacet +facet normal 0.30406530876363563 0.5274018954333306 -0.7933419998334927 + outer loop + vertex 146.5915652215121 -97.41858524036421 372.3989025296383 + vertex 143.12637310684354 -95.42047524174265 372.3991070949901 + vertex 146.74675684225116 -97.149470919443 372.637286216698 + endloop +endfacet +facet normal 0.30406530876363563 0.5274018954333306 -0.7933419998334927 + outer loop + vertex 143.28156472758258 -95.15136092082145 372.6374907820498 + vertex 146.74675684225116 -97.149470919443 372.637286216698 + vertex 143.12637310684354 -95.42047524174265 372.3991070949901 + endloop +endfacet +facet normal 0.19112856376747817 0.3315564132080519 -0.9238724029717484 + outer loop + vertex 146.74675684225116 -97.149470919443 372.637286216698 + vertex 143.28156472758258 -95.15136092082145 372.6374907820498 + vertex 146.9274768413423 -96.83607533029942 372.78714356807757 + endloop +endfacet +facet normal 0.19112856376747817 0.3315564132080519 -0.9238724029717484 + outer loop + vertex 143.46228472667372 -94.83796533167786 372.78734813342936 + vertex 146.9274768413423 -96.83607533029942 372.78714356807757 + vertex 143.28156472758258 -95.15136092082145 372.6374907820498 + endloop +endfacet +facet normal 0.06516672300538406 0.11311590934540475 -0.9914424286188794 + outer loop + vertex 146.9274768413423 -96.83607533029942 372.78714356807757 + vertex 143.46228472667372 -94.83796533167786 372.78734813342936 + vertex 147.1214094495014 -96.49975586442278 372.83826205293144 + endloop +endfacet +facet normal 0.06516672300538406 0.11311590934540475 -0.9914424286188794 + outer loop + vertex 143.6562173348328 -94.50164586580122 372.8384666182832 + vertex 147.1214094495014 -96.49975586442278 372.83826205293144 + vertex 143.46228472667372 -94.83796533167786 372.78734813342936 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.37088683910153 -80.47915169152049 371.3386389550015 + vertex 156.3964406648011 -80.4348953418288 371.72686845962676 + vertex 156.39641897510435 -80.43486614381659 370.95041135287465 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.47129709993482 -80.3050566856078 370.5886427227546 + vertex 156.39641897510435 -80.43486614381659 370.95041135287465 + vertex 156.3964406648011 -80.4348953418288 371.72686845962676 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.47133900121133 -80.30511309183603 372.0886426675898 + vertex 156.47129709993482 -80.3050566856078 370.5886427227546 + vertex 156.3964406648011 -80.4348953418288 371.72686845962676 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.59041839312772 -80.09856961695077 370.2779869989332 + vertex 156.47129709993482 -80.3050566856078 370.5886427227546 + vertex 156.47133900121133 -80.30511309183603 372.0886426675898 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.59047765048123 -80.09864938740374 372.399307264478 + vertex 156.59041839312772 -80.09856961695077 370.2779869989332 + vertex 156.47133900121133 -80.30511309183603 372.0886426675898 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.74566493540925 -79.82947669033857 370.03961485560603 + vertex 156.59041839312772 -80.09856961695077 370.2779869989332 + vertex 156.59047765048123 -80.09864938740374 372.399307264478 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.7457375105489 -79.8295743887916 372.6376909714111 + vertex 156.74566493540925 -79.82947669033857 370.03961485560603 + vertex 156.59047765048123 -80.09864938740374 372.399307264478 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.92645693147986 -79.51611614402256 369.88977096041225 + vertex 156.74566493540925 -79.82947669033857 370.03961485560603 + vertex 156.7457375105489 -79.8295743887916 372.6376909714111 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 156.92653787852993 -79.51622511248769 372.78754833270915 + vertex 156.92645693147986 -79.51611614402256 369.88977096041225 + vertex 156.7457375105489 -79.8295743887916 372.6376909714111 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.12047370558022 -79.17984298138151 369.8386669271805 + vertex 156.92645693147986 -79.51611614402256 369.88977096041225 + vertex 156.92653787852993 -79.51622511248769 372.78754833270915 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.12055750813306 -79.17995579383788 372.83866681685083 + vertex 157.12047370558022 -79.17984298138151 369.8386669271805 + vertex 156.92653787852993 -79.51622511248769 372.78754833270915 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.31449333518336 -78.84357366273171 369.8897854113221 + vertex 157.12047370558022 -79.17984298138151 369.8386669271805 + vertex 157.12055750813306 -79.17995579383788 372.83866681685083 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.31457428223342 -78.84368263119684 372.78756278361914 + vertex 157.31449333518336 -78.84357366273171 369.8897854113221 + vertex 157.12055750813306 -79.17995579383788 372.83866681685083 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.49529370316438 -78.53022438642779 370.03964277262025 + vertex 157.31449333518336 -78.84357366273171 369.8897854113221 + vertex 157.31457428223342 -78.84368263119684 372.78756278361914 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.49536627830403 -78.53032208488082 372.63771888842524 + vertex 157.49529370316438 -78.53022438642779 370.03964277262025 + vertex 157.31457428223342 -78.84368263119684 372.78756278361914 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.65055356323205 -78.26114938781566 370.2780264795533 + vertex 157.49529370316438 -78.53022438642779 370.03964277262025 + vertex 157.49536627830403 -78.53032208488082 372.63771888842524 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + vertex 157.65055356323205 -78.26114938781566 370.2780264795533 + vertex 157.49536627830403 -78.53032208488082 372.63771888842524 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.76969221250195 -78.05468568338337 370.58869107644153 + vertex 157.65055356323205 -78.26114938781566 370.2780264795533 + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.76973411377847 -78.05474208961161 372.08869102127676 + vertex 157.76969221250195 -78.05468568338337 370.58869107644153 + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.8445905489122 -77.92490343339055 370.9504652844046 + vertex 157.76969221250195 -78.05468568338337 370.58869107644153 + vertex 157.76973411377847 -78.05474208961161 372.08869102127676 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.84461223860893 -77.9249326314028 371.72692239115673 + vertex 157.8445905489122 -77.92490343339055 370.9504652844046 + vertex 157.76973411377847 -78.05474208961161 372.08869102127676 + endloop +endfacet +facet normal -0.8661682332610214 0.499752528599378 4.2988474745472314e-05 + outer loop + vertex 157.87014437461178 -77.88064708369892 371.33869478902983 + vertex 157.8445905489122 -77.92490343339055 370.9504652844046 + vertex 157.84461223860893 -77.9249326314028 371.72692239115673 + endloop +endfacet +facet normal 0.49548072364034323 0.8587531358732626 0.13054464419760692 + outer loop + vertex 156.39641897510435 -80.43486614381659 370.95041135287465 + vertex 152.93174604206027 -78.4358560294191 370.9505833067736 + vertex 156.37088683910153 -80.47915169152049 371.3386389550015 + endloop +endfacet +facet normal 0.49548072364034323 0.8587531358732626 0.13054464419760692 + outer loop + vertex 152.90621390605745 -78.48014157712299 371.3388109089005 + vertex 156.37088683910153 -80.47915169152049 371.3386389550015 + vertex 152.93174604206027 -78.4358560294191 370.9505833067736 + endloop +endfacet +facet normal 0.49547343135466027 0.8587629525271786 -0.13050773995607154 + outer loop + vertex 156.37088683910153 -80.47915169152049 371.3386389550015 + vertex 152.90621390605745 -78.48014157712299 371.3388109089005 + vertex 156.3964406648011 -80.4348953418288 371.72686845962676 + endloop +endfacet +facet normal 0.49547343135466027 0.8587629525271786 -0.13050773995607154 + outer loop + vertex 152.93176773175702 -78.43588522743131 371.72704041352574 + vertex 156.3964406648011 -80.4348953418288 371.72686845962676 + vertex 152.90621390605745 -78.48014157712299 371.3388109089005 + endloop +endfacet +facet normal 0.46170044353074574 0.800249493139297 -0.38266623730584204 + outer loop + vertex 156.3964406648011 -80.4348953418288 371.72686845962676 + vertex 152.93176773175702 -78.43588522743131 371.72704041352574 + vertex 156.47133900121133 -80.30511309183603 372.0886426675898 + endloop +endfacet +facet normal 0.46170044353074574 0.800249493139297 -0.38266623730584204 + outer loop + vertex 153.00666606816725 -78.30610297743854 372.0888146214888 + vertex 156.47133900121133 -80.30511309183603 372.0886426675898 + vertex 152.93176773175702 -78.43588522743131 371.72704041352574 + endloop +endfacet +facet normal 0.3964633334762089 0.6872003532686835 -0.6087466629693581 + outer loop + vertex 156.47133900121133 -80.30511309183603 372.0886426675898 + vertex 153.00666606816725 -78.30610297743854 372.0888146214888 + vertex 156.59047765048123 -80.09864938740374 372.399307264478 + endloop +endfacet +facet normal 0.3964633334762089 0.6872003532686835 -0.6087466629693581 + outer loop + vertex 153.12580471743715 -78.09963927300623 372.399479218377 + vertex 156.59047765048123 -80.09864938740374 372.399307264478 + vertex 153.00666606816725 -78.30610297743854 372.0888146214888 + endloop +endfacet +facet normal 0.30420790243196666 0.5273196449751949 -0.7933420095527387 + outer loop + vertex 156.59047765048123 -80.09864938740374 372.399307264478 + vertex 153.12580471743715 -78.09963927300623 372.399479218377 + vertex 156.7457375105489 -79.8295743887916 372.6376909714111 + endloop +endfacet +facet normal 0.30420790243196666 0.5273196449751949 -0.7933420095527387 + outer loop + vertex 153.28106457750485 -77.83056427439412 372.6378629253101 + vertex 156.7457375105489 -79.8295743887916 372.6376909714111 + vertex 153.12580471743715 -78.09963927300623 372.399479218377 + endloop +endfacet +facet normal 0.19122120556428934 0.3315029743135194 -0.9238724092448208 + outer loop + vertex 156.7457375105489 -79.8295743887916 372.6376909714111 + vertex 153.28106457750485 -77.83056427439412 372.6378629253101 + vertex 156.92653787852993 -79.51622511248769 372.78754833270915 + endloop +endfacet +facet normal 0.19122120556428934 0.3315029743135194 -0.9238724092448208 + outer loop + vertex 153.46186494548584 -77.51721499809021 372.78772028660813 + vertex 156.92653787852993 -79.51622511248769 372.78754833270915 + vertex 153.28106457750485 -77.83056427439412 372.6378629253101 + endloop +endfacet +facet normal 0.06520309954540061 0.11309492378696474 -0.9914424310182076 + outer loop + vertex 156.92653787852993 -79.51622511248769 372.78754833270915 + vertex 153.46186494548584 -77.51721499809021 372.78772028660813 + vertex 157.12055750813306 -79.17995579383788 372.83866681685083 + endloop +endfacet +facet normal 0.06520309954540061 0.11309492378696474 -0.9914424310182076 + outer loop + vertex 153.65588457508898 -77.1809456794404 372.8388387707498 + vertex 157.12055750813306 -79.17995579383788 372.83866681685083 + vertex 153.46186494548584 -77.51721499809021 372.78772028660813 + endloop +endfacet +facet normal -0.06525848995430916 -0.1130203588975056 -0.991447289553793 + outer loop + vertex 157.12055750813306 -79.17995579383788 372.83866681685083 + vertex 153.65588457508898 -77.1809456794404 372.8388387707498 + vertex 157.31457428223342 -78.84368263119684 372.78756278361914 + endloop +endfacet +facet normal -0.06525848995430916 -0.1130203588975056 -0.991447289553793 + outer loop + vertex 153.84990134918937 -76.84467251679933 372.78773473751806 + vertex 157.31457428223342 -78.84368263119684 372.78756278361914 + vertex 153.65588457508898 -77.1809456794404 372.8388387707498 + endloop +endfacet +facet normal -0.1912728212083556 -0.3314334908980314 -0.923886653750416 + outer loop + vertex 157.31457428223342 -78.84368263119684 372.78756278361914 + vertex 153.84990134918937 -76.84467251679933 372.78773473751806 + vertex 157.49536627830403 -78.53032208488082 372.63771888842524 + endloop +endfacet +facet normal -0.1912728212083556 -0.3314334908980314 -0.923886653750416 + outer loop + vertex 154.03069334525998 -76.53131197048334 372.6378908423243 + vertex 157.49536627830403 -78.53032208488082 372.63771888842524 + vertex 153.84990134918937 -76.84467251679933 372.78773473751806 + endloop +endfacet +facet normal -0.3042522257903939 -0.5272599782136993 -0.7933646692887706 + outer loop + vertex 157.49536627830403 -78.53032208488082 372.63771888842524 + vertex 154.03069334525998 -76.53131197048334 372.6378908423243 + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + endloop +endfacet +facet normal -0.3042522257903939 -0.5272599782136993 -0.7933646692887706 + outer loop + vertex 154.18593988754148 -76.26221904387116 372.3995186989971 + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + vertex 154.03069334525998 -76.53131197048334 372.6378908423243 + endloop +endfacet +facet normal -0.3964973439853189 -0.6871545693522869 -0.6087761937123207 + outer loop + vertex 157.76973411377847 -78.05474208961161 372.08869102127676 + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + vertex 154.30506118073438 -76.05573197521412 372.08886297517574 + endloop +endfacet +facet normal -0.3964973439853189 -0.6871545693522869 -0.6087761937123207 + outer loop + vertex 154.18593988754148 -76.26221904387116 372.3995186989971 + vertex 154.30506118073438 -76.05573197521412 372.08886297517574 + vertex 157.65061282058556 -78.26122915826863 372.3993467450981 + endloop +endfacet +facet normal -0.4617218234305358 -0.8002207121662198 -0.3827006265845002 + outer loop + vertex 157.84461223860893 -77.9249326314028 371.72692239115673 + vertex 157.76973411377847 -78.05474208961161 372.08869102127676 + vertex 154.37993930556487 -75.92592251700532 371.7270943450557 + endloop +endfacet +facet normal -0.4617218234305358 -0.8002207121662198 -0.3827006265845002 + outer loop + vertex 154.30506118073438 -76.05573197521412 372.08886297517574 + vertex 154.37993930556487 -75.92592251700532 371.7270943450557 + vertex 157.76973411377847 -78.05474208961161 372.08869102127676 + endloop +endfacet +facet normal -0.49548072364034323 -0.8587531358732626 -0.13054464419760692 + outer loop + vertex 157.87014437461178 -77.88064708369892 371.33869478902983 + vertex 157.84461223860893 -77.9249326314028 371.72692239115673 + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + endloop +endfacet +facet normal -0.49548072364034323 -0.8587531358732626 -0.13054464419760692 + outer loop + vertex 154.37993930556487 -75.92592251700532 371.7270943450557 + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + vertex 157.84461223860893 -77.9249326314028 371.72692239115673 + endloop +endfacet +facet normal -0.49547343135466776 -0.8587629525271916 0.1305077399559583 + outer loop + vertex 157.8445905489122 -77.92490343339055 370.9504652844046 + vertex 157.87014437461178 -77.88064708369892 371.33869478902983 + vertex 154.37991761586812 -75.92589331899306 370.95063723830356 + endloop +endfacet +facet normal -0.49547343135466776 -0.8587629525271916 0.1305077399559583 + outer loop + vertex 154.4054714415677 -75.88163696930143 371.3388667429288 + vertex 154.37991761586812 -75.92589331899306 370.95063723830356 + vertex 157.87014437461178 -77.88064708369892 371.33869478902983 + endloop +endfacet +facet normal -0.46170044353072537 -0.8002494931392617 0.3826662373059404 + outer loop + vertex 157.76969221250195 -78.05468568338337 370.58869107644153 + vertex 157.8445905489122 -77.92490343339055 370.9504652844046 + vertex 154.3050192794579 -76.05567556898588 370.5888630303405 + endloop +endfacet +facet normal -0.46170044353072537 -0.8002494931392617 0.3826662373059404 + outer loop + vertex 154.37991761586812 -75.92589331899306 370.95063723830356 + vertex 154.3050192794579 -76.05567556898588 370.5888630303405 + vertex 157.8445905489122 -77.92490343339055 370.9504652844046 + endloop +endfacet +facet normal -0.3964633334762089 -0.6872003532686835 0.6087466629693581 + outer loop + vertex 157.65055356323205 -78.26114938781566 370.2780264795533 + vertex 157.76969221250195 -78.05468568338337 370.58869107644153 + vertex 154.185880630188 -76.26213927341817 370.2781984334523 + endloop +endfacet +facet normal -0.3964633334762089 -0.6872003532686835 0.6087466629693581 + outer loop + vertex 154.3050192794579 -76.05567556898588 370.5888630303405 + vertex 154.185880630188 -76.26213927341817 370.2781984334523 + vertex 157.76969221250195 -78.05468568338337 370.58869107644153 + endloop +endfacet +facet normal -0.30420790243196666 -0.5273196449751949 0.7933420095527387 + outer loop + vertex 157.49529370316438 -78.53022438642779 370.03964277262025 + vertex 157.65055356323205 -78.26114938781566 370.2780264795533 + vertex 154.03062077012032 -76.5312142720303 370.0398147265192 + endloop +endfacet +facet normal -0.30420790243196666 -0.5273196449751949 0.7933420095527387 + outer loop + vertex 154.185880630188 -76.26213927341817 370.2781984334523 + vertex 154.03062077012032 -76.5312142720303 370.0398147265192 + vertex 157.65055356323205 -78.26114938781566 370.2780264795533 + endloop +endfacet +facet normal -0.19122120556428934 -0.3315029743135194 0.9238724092448208 + outer loop + vertex 157.31449333518336 -78.84357366273171 369.8897854113221 + vertex 157.49529370316438 -78.53022438642779 370.03964277262025 + vertex 153.84982040213927 -76.84456354833422 369.88995736522116 + endloop +endfacet +facet normal -0.19122120556428934 -0.3315029743135194 0.9238724092448208 + outer loop + vertex 154.03062077012032 -76.5312142720303 370.0398147265192 + vertex 153.84982040213927 -76.84456354833422 369.88995736522116 + vertex 157.49529370316438 -78.53022438642779 370.03964277262025 + endloop +endfacet +facet normal -0.06520309954540061 -0.11309492378696474 0.9914424310182076 + outer loop + vertex 157.12047370558022 -79.17984298138151 369.8386669271805 + vertex 157.31449333518336 -78.84357366273171 369.8897854113221 + vertex 153.65580077253614 -77.18083286698402 369.8388388810795 + endloop +endfacet +facet normal -0.06520309954540061 -0.11309492378696474 0.9914424310182076 + outer loop + vertex 153.84982040213927 -76.84456354833422 369.88995736522116 + vertex 153.65580077253614 -77.18083286698402 369.8388388810795 + vertex 157.31449333518336 -78.84357366273171 369.8897854113221 + endloop +endfacet +facet normal 0.06525848995430916 0.1130203588975056 0.991447289553793 + outer loop + vertex 156.92645693147986 -79.51611614402256 369.88977096041225 + vertex 157.12047370558022 -79.17984298138151 369.8386669271805 + vertex 153.46178399843578 -77.51710602962508 369.88994291431123 + endloop +endfacet +facet normal 0.06525848995430916 0.1130203588975056 0.991447289553793 + outer loop + vertex 153.65580077253614 -77.18083286698402 369.8388388810795 + vertex 153.46178399843578 -77.51710602962508 369.88994291431123 + vertex 157.12047370558022 -79.17984298138151 369.8386669271805 + endloop +endfacet +facet normal 0.1912728212083556 0.3314334908980314 0.923886653750416 + outer loop + vertex 156.74566493540925 -79.82947669033857 370.03961485560603 + vertex 156.92645693147986 -79.51611614402256 369.88977096041225 + vertex 153.2809920023652 -77.83046657594109 370.039786809505 + endloop +endfacet +facet normal 0.1912728212083556 0.3314334908980314 0.923886653750416 + outer loop + vertex 153.46178399843578 -77.51710602962508 369.88994291431123 + vertex 153.2809920023652 -77.83046657594109 370.039786809505 + vertex 156.92645693147986 -79.51611614402256 369.88977096041225 + endloop +endfacet +facet normal 0.3042522257903939 0.5272599782136993 0.7933646692887706 + outer loop + vertex 156.59041839312772 -80.09856961695077 370.2779869989332 + vertex 156.74566493540925 -79.82947669033857 370.03961485560603 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + endloop +endfacet +facet normal 0.3042522257903939 0.5272599782136993 0.7933646692887706 + outer loop + vertex 153.2809920023652 -77.83046657594109 370.039786809505 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + vertex 156.74566493540925 -79.82947669033857 370.03961485560603 + endloop +endfacet +facet normal 0.3964973439853189 0.6871545693522869 0.6087761937123207 + outer loop + vertex 156.59041839312772 -80.09856961695077 370.2779869989332 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + vertex 156.47129709993482 -80.3050566856078 370.5886427227546 + endloop +endfacet +facet normal 0.3964973439853189 0.6871545693522869 0.6087761937123207 + outer loop + vertex 153.00662416689076 -78.3060465712103 370.5888146766536 + vertex 156.47129709993482 -80.3050566856078 370.5886427227546 + vertex 153.12574546008366 -78.09955950255328 370.27815895283226 + endloop +endfacet +facet normal 0.4617218234305358 0.8002207121662198 0.3827006265845002 + outer loop + vertex 156.47129709993482 -80.3050566856078 370.5886427227546 + vertex 153.00662416689076 -78.3060465712103 370.5888146766536 + vertex 156.39641897510435 -80.43486614381659 370.95041135287465 + endloop +endfacet +facet normal 0.4617218234305358 0.8002207121662198 0.3827006265845002 + outer loop + vertex 152.93174604206027 -78.4358560294191 370.9505833067736 + vertex 156.39641897510435 -80.43486614381659 370.95041135287465 + vertex 153.00662416689076 -78.3060465712103 370.5888146766536 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.36859712990218 -80.48086561876725 351.33746435972193 + vertex 156.3942828614748 -80.43668550063518 351.72569383397456 + vertex 156.39406378000322 -80.4365421974893 350.9492367867935 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.46937053456207 -80.30701264513284 352.08746801246065 + vertex 156.39406378000322 -80.4365421974893 350.9492367867935 + vertex 156.3942828614748 -80.43668550063518 351.72569383397456 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.4689473016591 -80.30673580471363 350.58746818270794 + vertex 156.39406378000322 -80.4365421974893 350.9492367867935 + vertex 156.46937053456207 -80.30701264513284 352.08746801246065 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + vertex 156.4689473016591 -80.30673580471363 350.58746818270794 + vertex 156.46937053456207 -80.30701264513284 352.08746801246065 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.58814450662 -80.10029253159266 350.2768124799828 + vertex 156.4689473016591 -80.30673580471363 350.58746818270794 + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.74426536324168 -79.83176064769756 352.63651626785224 + vertex 156.58814450662 -80.10029253159266 350.2768124799828 + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.74353230235036 -79.83128114602587 350.038440351376 + vertex 156.58814450662 -80.10029253159266 350.2768124799828 + vertex 156.74426536324168 -79.83176064769756 352.63651626785224 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.92533889054474 -79.5185691439988 352.78637361349803 + vertex 156.74353230235036 -79.83128114602587 350.038440351376 + vertex 156.74426536324168 -79.83176064769756 352.63651626785224 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 156.92452126736168 -79.51803432937739 349.8885964635234 + vertex 156.74353230235036 -79.83128114602587 350.038440351376 + vertex 156.92533889054474 -79.5185691439988 352.78637361349803 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.11962376859285 -79.18245301537542 352.83749208925894 + vertex 156.92452126736168 -79.51803432937739 349.8885964635234 + vertex 156.92533889054474 -79.5185691439988 352.78637361349803 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.11877730278695 -79.18189933453695 349.8374924297536 + vertex 156.92452126736168 -79.51803432937739 349.8885964635234 + vertex 157.11962376859285 -79.18245301537542 352.83749208925894 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.3138798040181 -78.84631802053498 352.7863880554891 + vertex 157.11877730278695 -79.18189933453695 349.8374924297536 + vertex 157.11962376859285 -79.18245301537542 352.83749208925894 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.31306218083503 -78.84578320591356 349.88861090551444 + vertex 157.11877730278695 -79.18189933453695 349.8374924297536 + vertex 157.3138798040181 -78.84631802053498 352.7863880554891 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.4948687690294 -78.53307120388648 352.63654416763654 + vertex 157.31306218083503 -78.84578320591356 349.88861090551444 + vertex 157.3138798040181 -78.84631802053498 352.7863880554891 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.4941357081381 -78.53259170221482 350.0384682511603 + vertex 157.31306218083503 -78.84578320591356 349.88861090551444 + vertex 157.4948687690294 -78.53307120388648 352.63654416763654 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.65025656475976 -78.26405981831971 352.3981720390297 + vertex 157.4941357081381 -78.53259170221482 350.0384682511603 + vertex 157.4948687690294 -78.53307120388648 352.63654416763654 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.64965802304837 -78.26366830684427 350.27685193623614 + vertex 157.4941357081381 -78.53259170221482 350.0384682511603 + vertex 157.65025656475976 -78.26405981831971 352.3981720390297 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.76945376972066 -78.05761654519874 352.08751633630453 + vertex 157.64965802304837 -78.26366830684427 350.27685193623614 + vertex 157.65025656475976 -78.26405981831971 352.3981720390297 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.76903053681772 -78.05733970477951 350.5875165065519 + vertex 157.64965802304837 -78.26366830684427 350.27685193623614 + vertex 157.76945376972066 -78.05761654519874 352.08751633630453 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.84433729137658 -77.92781015242305 351.72574773221896 + vertex 157.76903053681772 -78.05733970477951 350.5875165065519 + vertex 157.76945376972066 -78.05761654519874 352.08751633630453 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.844118209905 -77.92766684927717 350.9492906850379 + vertex 157.76903053681772 -78.05733970477951 350.5875165065519 + vertex 157.84433729137658 -77.92781015242305 351.72574773221896 + endloop +endfacet +facet normal -0.8657929658212125 0.5004022651890762 0.00033664246698150073 + outer loop + vertex 157.8698039414776 -77.88348673114511 351.33752015929053 + vertex 157.844118209905 -77.92766684927717 350.9492906850379 + vertex 157.84433729137658 -77.92781015242305 351.72574773221896 + endloop +endfacet +facet normal 0.0650358652437237 0.11319164640563603 -0.9914423772544635 + outer loop + vertex 157.11962376859285 -79.18245301537542 352.83749208925894 + vertex 156.92533889054474 -79.5185691439988 352.78637361349803 + vertex 153.656451905308 -77.18084395461914 352.83883865912685 + endloop +endfacet +facet normal 0.0650358652437237 0.11319164640563603 -0.9914423772544635 + outer loop + vertex 153.4621670272599 -77.51696008324254 352.787720183366 + vertex 153.656451905308 -77.18084395461914 352.83883865912685 + vertex 156.92533889054474 -79.5185691439988 352.78637361349803 + endloop +endfacet +facet normal -0.06559534805782397 -0.11282568370348313 -0.9914472327915465 + outer loop + vertex 157.3138798040181 -78.84631802053498 352.7863880554891 + vertex 157.11962376859285 -79.18245301537542 352.83749208925894 + vertex 153.85070794073326 -76.8447089597787 352.7877346253571 + endloop +endfacet +facet normal -0.06559534805782397 -0.11282568370348313 -0.9914472327915465 + outer loop + vertex 153.656451905308 -77.18084395461914 352.83883865912685 + vertex 153.85070794073326 -76.8447089597787 352.7877346253571 + vertex 157.11962376859285 -79.18245301537542 352.83749208925894 + endloop +endfacet +facet normal -0.19175634679065254 -0.33115412992143956 -0.9238865978579176 + outer loop + vertex 157.4948687690294 -78.53307120388648 352.63654416763654 + vertex 157.3138798040181 -78.84631802053498 352.7863880554891 + vertex 154.03169690574458 -76.53146214313021 352.6378907375045 + endloop +endfacet +facet normal -0.19175634679065254 -0.33115412992143956 -0.9238865978579176 + outer loop + vertex 153.85070794073326 -76.8447089597787 352.7877346253571 + vertex 154.03169690574458 -76.53146214313021 352.6378907375045 + vertex 157.3138798040181 -78.84631802053498 352.7863880554891 + endloop +endfacet +facet normal -0.30484946738208113 -0.5269149694433884 -0.7933646180750279 + outer loop + vertex 157.65025656475976 -78.26405981831971 352.3981720390297 + vertex 157.4948687690294 -78.53307120388648 352.63654416763654 + vertex 154.18708470147493 -76.26245075756343 352.3995186088976 + endloop +endfacet +facet normal -0.30484946738208113 -0.5269149694433884 -0.7933646180750279 + outer loop + vertex 154.03169690574458 -76.53146214313021 352.6378907375045 + vertex 154.18708470147493 -76.26245075756343 352.3995186088976 + vertex 157.4948687690294 -78.53307120388648 352.63654416763654 + endloop +endfacet +facet normal -0.3971676005589536 -0.6867674245658731 -0.6087761506673871 + outer loop + vertex 157.76945376972066 -78.05761654519874 352.08751633630453 + vertex 157.65025656475976 -78.26405981831971 352.3981720390297 + vertex 154.30628190643583 -76.05600748444246 352.08886290617244 + endloop +endfacet +facet normal -0.3971676005589536 -0.6867674245658731 -0.6087761506673871 + outer loop + vertex 154.18708470147493 -76.26245075756343 352.3995186088976 + vertex 154.30628190643583 -76.05600748444246 352.08886290617244 + vertex 157.65025656475976 -78.26405981831971 352.3981720390297 + endloop +endfacet +facet normal -0.46241941810824055 -0.7998178146410486 -0.38270059464188616 + outer loop + vertex 157.84433729137658 -77.92781015242305 351.72574773221896 + vertex 157.76945376972066 -78.05761654519874 352.08751633630453 + vertex 154.38116542809175 -75.92620109166678 351.72709430208687 + endloop +endfacet +facet normal -0.46241941810824055 -0.7998178146410486 -0.38270059464188616 + outer loop + vertex 154.30628190643583 -76.05600748444246 352.08886290617244 + vertex 154.38116542809175 -75.92620109166678 351.72709430208687 + vertex 157.76945376972066 -78.05761654519874 352.08751633630453 + endloop +endfacet +facet normal -0.49615811649766006 -0.858361942409851 -0.13054462553426827 + outer loop + vertex 157.8698039414776 -77.88348673114511 351.33752015929053 + vertex 157.84433729137658 -77.92781015242305 351.72574773221896 + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + endloop +endfacet +facet normal -0.49615811649766006 -0.858361942409851 -0.13054462553426827 + outer loop + vertex 154.38116542809175 -75.92620109166678 351.72709430208687 + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + vertex 157.84433729137658 -77.92781015242305 351.72574773221896 + endloop +endfacet +facet normal -0.4960844591878245 -0.8584101223136098 0.1305077440685319 + outer loop + vertex 157.844118209905 -77.92766684927717 350.9492906850379 + vertex 157.8698039414776 -77.88348673114511 351.33752015929053 + vertex 154.38094634662016 -75.9260577885209 350.9506372549058 + endloop +endfacet +facet normal -0.4960844591878245 -0.8584101223136098 0.1305077440685319 + outer loop + vertex 154.40663207819276 -75.88187767038883 351.33886672915844 + vertex 154.38094634662016 -75.9260577885209 350.9506372549058 + vertex 157.8698039414776 -77.88348673114511 351.33752015929053 + endloop +endfacet +facet normal -0.46220346580269206 -0.7999590709715347 0.3826662265870075 + outer loop + vertex 157.76903053681772 -78.05733970477951 350.5875165065519 + vertex 157.844118209905 -77.92766684927717 350.9492906850379 + vertex 154.3058586735329 -76.05573064402324 350.5888630764198 + endloop +endfacet +facet normal -0.46220346580269206 -0.7999590709715347 0.3826662265870075 + outer loop + vertex 154.38094634662016 -75.9260577885209 350.9506372549058 + vertex 154.3058586735329 -76.05573064402324 350.5888630764198 + vertex 157.844118209905 -77.92766684927717 350.9492906850379 + endloop +endfacet +facet normal -0.39682407005039544 -0.6869921309375289 0.6087466381496921 + outer loop + vertex 157.64965802304837 -78.26366830684427 350.27685193623614 + vertex 157.76903053681772 -78.05733970477951 350.5875165065519 + vertex 154.18648615976355 -76.26205924608799 350.27819850610405 + endloop +endfacet +facet normal -0.39682407005039544 -0.6869921309375289 0.6087466381496921 + outer loop + vertex 154.3058586735329 -76.05573064402324 350.5888630764198 + vertex 154.18648615976355 -76.26205924608799 350.27819850610405 + vertex 157.76903053681772 -78.05733970477951 350.5875165065519 + endloop +endfacet +facet normal -0.30440176970700505 -0.5272078124884072 0.7933419723236834 + outer loop + vertex 157.64965802304837 -78.26366830684427 350.27685193623614 + vertex 154.18648615976355 -76.26205924608799 350.27819850610405 + vertex 157.4941357081381 -78.53259170221482 350.0384682511603 + endloop +endfacet +facet normal -0.30440176970700505 -0.5272078124884072 0.7933419723236834 + outer loop + vertex 154.03096384485326 -76.53098264145854 350.0398148210282 + vertex 157.4941357081381 -78.53259170221482 350.0384682511603 + vertex 154.18648615976355 -76.26205924608799 350.27819850610405 + endloop +endfacet +facet normal -0.1912349918057851 -0.3314951528702935 0.923872362143463 + outer loop + vertex 157.4941357081381 -78.53259170221482 350.0384682511603 + vertex 154.03096384485326 -76.53098264145854 350.0398148210282 + vertex 157.31306218083503 -78.84578320591356 349.88861090551444 + endloop +endfacet +facet normal -0.1912349918057851 -0.3314951528702935 0.923872362143463 + outer loop + vertex 153.84989031755023 -76.84417414515728 349.8899574753824 + vertex 157.31306218083503 -78.84578320591356 349.88861090551444 + vertex 154.03096384485326 -76.53098264145854 350.0398148210282 + endloop +endfacet +facet normal -0.06503586524370954 -0.11319164640561152 0.9914423772544672 + outer loop + vertex 157.31306218083503 -78.84578320591356 349.88861090551444 + vertex 153.84989031755023 -76.84417414515728 349.8899574753824 + vertex 157.11877730278695 -79.18189933453695 349.8374924297536 + endloop +endfacet +facet normal -0.06503586524370954 -0.11319164640561152 0.9914423772544672 + outer loop + vertex 153.6556054395021 -77.18029027378067 349.8388389996215 + vertex 157.11877730278695 -79.18189933453695 349.8374924297536 + vertex 153.84989031755023 -76.84417414515728 349.8899574753824 + endloop +endfacet +facet normal 0.0655953480578098 0.11282568370345863 0.9914472327915501 + outer loop + vertex 157.11877730278695 -79.18189933453695 349.8374924297536 + vertex 153.6556054395021 -77.18029027378067 349.8388389996215 + vertex 156.92452126736168 -79.51803432937739 349.8885964635234 + endloop +endfacet +facet normal 0.0655953480578098 0.11282568370345863 0.9914472327915501 + outer loop + vertex 153.46134940407686 -77.5164252686211 349.8899430333913 + vertex 156.92452126736168 -79.51803432937739 349.8885964635234 + vertex 153.6556054395021 -77.18029027378067 349.8388389996215 + endloop +endfacet +facet normal 0.19175634679066486 0.33115412992146087 0.9238865978579075 + outer loop + vertex 156.92452126736168 -79.51803432937739 349.8885964635234 + vertex 153.46134940407686 -77.5164252686211 349.8899430333913 + vertex 156.74353230235036 -79.83128114602587 350.038440351376 + endloop +endfacet +facet normal 0.19175634679066486 0.33115412992146087 0.9238865978579075 + outer loop + vertex 153.28036043906553 -77.82967208526959 350.0397869212439 + vertex 156.74353230235036 -79.83128114602587 350.038440351376 + vertex 153.46134940407686 -77.5164252686211 349.8899430333913 + endloop +endfacet +facet normal 0.30484946738208113 0.5269149694433884 0.7933646180750279 + outer loop + vertex 156.74353230235036 -79.83128114602587 350.038440351376 + vertex 153.28036043906553 -77.82967208526959 350.0397869212439 + vertex 156.58814450662 -80.10029253159266 350.2768124799828 + endloop +endfacet +facet normal 0.30484946738208113 0.5269149694433884 0.7933646180750279 + outer loop + vertex 153.12497264333518 -78.09868347083638 350.27815904985073 + vertex 156.58814450662 -80.10029253159266 350.2768124799828 + vertex 153.28036043906553 -77.82967208526959 350.0397869212439 + endloop +endfacet +facet normal 0.3971676005589536 0.6867674245658731 0.6087761506673871 + outer loop + vertex 156.58814450662 -80.10029253159266 350.2768124799828 + vertex 153.12497264333518 -78.09868347083638 350.27815904985073 + vertex 156.4689473016591 -80.30673580471363 350.58746818270794 + endloop +endfacet +facet normal 0.3971676005589536 0.6867674245658731 0.6087761506673871 + outer loop + vertex 153.0057754383743 -78.30512674395735 350.5888147525759 + vertex 156.4689473016591 -80.30673580471363 350.58746818270794 + vertex 153.12497264333518 -78.09868347083638 350.27815904985073 + endloop +endfacet +facet normal 0.46241941810824055 0.7998178146410486 0.38270059464188616 + outer loop + vertex 156.4689473016591 -80.30673580471363 350.58746818270794 + vertex 153.0057754383743 -78.30512674395735 350.5888147525759 + vertex 156.39406378000322 -80.4365421974893 350.9492367867935 + endloop +endfacet +facet normal 0.46241941810824055 0.7998178146410486 0.38270059464188616 + outer loop + vertex 152.9308919167184 -78.43493313673302 350.9505833566614 + vertex 156.39406378000322 -80.4365421974893 350.9492367867935 + vertex 153.0057754383743 -78.30512674395735 350.5888147525759 + endloop +endfacet +facet normal 0.49615811649766006 0.858361942409851 0.13054462553426827 + outer loop + vertex 156.39406378000322 -80.4365421974893 350.9492367867935 + vertex 152.9308919167184 -78.43493313673302 350.9505833566614 + vertex 156.36859712990218 -80.48086561876725 351.33746435972193 + endloop +endfacet +facet normal 0.49615811649766006 0.858361942409851 0.13054462553426827 + outer loop + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + vertex 156.36859712990218 -80.48086561876725 351.33746435972193 + vertex 152.9308919167184 -78.43493313673302 350.9505833566614 + endloop +endfacet +facet normal 0.4960844591878245 0.8584101223136098 -0.1305077440685319 + outer loop + vertex 156.36859712990218 -80.48086561876725 351.33746435972193 + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + vertex 156.3942828614748 -80.43668550063518 351.72569383397456 + endloop +endfacet +facet normal 0.4960844591878245 0.8584101223136098 -0.1305077440685319 + outer loop + vertex 152.93111099818998 -78.4350764398789 351.7270404038425 + vertex 156.3942828614748 -80.43668550063518 351.72569383397456 + vertex 152.90542526661733 -78.47925655801097 351.3388109295899 + endloop +endfacet +facet normal 0.46220346580269206 0.7999590709715347 -0.3826662265870075 + outer loop + vertex 156.3942828614748 -80.43668550063518 351.72569383397456 + vertex 152.93111099818998 -78.4350764398789 351.7270404038425 + vertex 156.46937053456207 -80.30701264513284 352.08746801246065 + endloop +endfacet +facet normal 0.46220346580269206 0.7999590709715347 -0.3826662265870075 + outer loop + vertex 153.00619867127725 -78.30540358437658 352.08881458232855 + vertex 156.46937053456207 -80.30701264513284 352.08746801246065 + vertex 152.93111099818998 -78.4350764398789 351.7270404038425 + endloop +endfacet +facet normal 0.39682407005039544 0.6869921309375289 -0.6087466381496921 + outer loop + vertex 156.46937053456207 -80.30701264513284 352.08746801246065 + vertex 153.00619867127725 -78.30540358437658 352.08881458232855 + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + endloop +endfacet +facet normal 0.39682407005039544 0.6869921309375289 -0.6087466381496921 + outer loop + vertex 153.1255711850466 -78.09907498231183 352.3994791526443 + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + vertex 153.00619867127725 -78.30540358437658 352.08881458232855 + endloop +endfacet +facet normal 0.30440176970700505 0.5272078124884072 -0.7933419723236834 + outer loop + vertex 156.74426536324168 -79.83176064769756 352.63651626785224 + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + vertex 153.28109349995685 -77.83015158694128 352.6378628377202 + endloop +endfacet +facet normal 0.30440176970700505 0.5272078124884072 -0.7933419723236834 + outer loop + vertex 153.1255711850466 -78.09907498231183 352.3994791526443 + vertex 153.28109349995685 -77.83015158694128 352.6378628377202 + vertex 156.5887430483314 -80.1006840430681 352.3981325827764 + endloop +endfacet +facet normal 0.1912349918057728 0.33149515287027226 -0.9238723621434733 + outer loop + vertex 156.92533889054474 -79.5185691439988 352.78637361349803 + vertex 156.74426536324168 -79.83176064769756 352.63651626785224 + vertex 153.4621670272599 -77.51696008324254 352.787720183366 + endloop +endfacet +facet normal 0.1912349918057728 0.33149515287027226 -0.9238723621434733 + outer loop + vertex 153.28109349995685 -77.83015158694128 352.6378628377202 + vertex 153.4621670272599 -77.51696008324254 352.787720183366 + vertex 156.74426536324168 -79.83176064769756 352.63651626785224 + endloop +endfacet +facet normal -0.4999999999135008 -0.866025403634642 -1.859985924801902e-05 + outer loop + vertex 158.56509962055546 -84.64805150952648 345.0887668428436 + vertex 160.297556378679 -85.64828588518847 345.0887668428436 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + endloop +endfacet +facet normal -0.4999999999135008 -0.866025403634642 -1.859985924801902e-05 + outer loop + vertex 160.2972541309662 -85.64880939358348 377.5887668372219 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + vertex 160.297556378679 -85.64828588518847 345.0887668428436 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.459555267187432e-10 + outer loop + vertex 157.8148531551514 -85.94757230303068 377.58873893860937 + vertex 157.81515540286424 -85.94704879463569 345.08873894423107 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + endloop +endfacet +facet normal 0.8660347035643184 -0.4999838919627944 3.459555267187432e-10 + outer loop + vertex 158.56509962055546 -84.64805150952648 345.0887668428436 + vertex 158.56479737284266 -84.64857501792149 377.5887668372219 + vertex 157.81515540286424 -85.94704879463569 345.08873894423107 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.859985921082137e-05 + outer loop + vertex 156.94909837953995 -85.44710356528444 345.08873894305475 + vertex 157.81515540286424 -85.94704879463569 345.08873894423107 + vertex 156.94879613182712 -85.44762707367943 377.58873893743305 + endloop +endfacet +facet normal -0.49994522926465357 -0.8660570231743162 -1.859985921082137e-05 + outer loop + vertex 157.8148531551514 -85.94757230303068 377.58873893860937 + vertex 156.94879613182712 -85.44762707367943 377.58873893743305 + vertex 157.81515540286424 -85.94704879463569 345.08873894423107 + endloop +endfacet +facet normal -0.8660570233242345 0.4999452293509425 -1.176303165687834e-09 + outer loop + vertex 156.94909837953995 -85.44710356528444 345.08873894305475 + vertex 156.94879613182712 -85.44762707367943 377.58873893743305 + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + endloop +endfacet +facet normal -0.8660570233242345 0.4999452293509425 -1.176303165687834e-09 + outer loop + vertex 157.6987139772234 -84.14854153632002 377.5887668372219 + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + vertex 156.94879613182712 -85.44762707367943 377.58873893743305 + endloop +endfacet +facet normal -0.4999992947572106 -0.8660258107564331 -1.859985924801143e-05 + outer loop + vertex 156.39996348268926 -83.3980109878247 345.08876684282086 + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + vertex 156.39966123497643 -83.39853449621971 377.5887668371992 + endloop +endfacet +facet normal -0.4999992947572106 -0.8660258107564331 -1.859985924801143e-05 + outer loop + vertex 157.6987139772234 -84.14854153632002 377.5887668372219 + vertex 156.39966123497643 -83.39853449621971 377.5887668371992 + vertex 157.6990162249362 -84.14801802792502 345.0887668428436 + endloop +endfacet +facet normal -0.4994396199205255 -0.8663486975275524 -1.8599855355581055e-05 + outer loop + vertex 156.34280093828684 -83.3650574674564 345.0887668420269 + vertex 156.39996348268926 -83.3980109878247 345.08876684282086 + vertex 156.34249869057405 -83.36558097585139 377.5887668364052 + endloop +endfacet +facet normal -0.4994396199205255 -0.8663486975275524 -1.8599855355581055e-05 + outer loop + vertex 156.39966123497643 -83.39853449621971 377.5887668371992 + vertex 156.34249869057405 -83.36558097585139 377.5887668364052 + vertex 156.39996348268926 -83.3980109878247 345.08876684282086 + endloop +endfacet +facet normal -0.25849686862231425 -0.9660120954676167 -1.796447781698743e-05 + outer loop + vertex 156.21562829958805 -83.3310271183089 345.0887662074895 + vertex 156.34280093828684 -83.3650574674564 345.0887668420269 + vertex 156.21532605187525 -83.33155062670389 377.5887662018678 + endloop +endfacet +facet normal -0.25849686862231425 -0.9660120954676167 -1.796447781698743e-05 + outer loop + vertex 156.34249869057405 -83.36558097585139 377.5887668364052 + vertex 156.21532605187525 -83.33155062670389 377.5887662018678 + vertex 156.34280093828684 -83.3650574674564 345.0887668420269 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.6104847944964888e-05 + outer loop + vertex 156.08398126100536 -83.3310710260966 345.08876498247406 + vertex 156.21562829958805 -83.3310271183089 345.0887662074895 + vertex 156.08367901329257 -83.33159453449159 377.58876497685236 + endloop +endfacet +facet normal 0.0003335267201213798 -0.9999999442502788 -1.6104847944964888e-05 + outer loop + vertex 156.21532605187525 -83.33155062670389 377.5887662018678 + vertex 156.08367901329257 -83.33159453449159 377.58876497685236 + vertex 156.21562829958805 -83.3310271183089 345.0887662074895 + endloop +endfacet +facet normal 0.25914119276608716 -0.9658394494111885 -1.3147699300042003e-05 + outer loop + vertex 155.9565291029474 -83.3657097069711 377.58876324484163 + vertex 155.9568313506602 -83.3651861985761 345.08876325046333 + vertex 156.08367901329257 -83.33159453449159 377.58876497685236 + endloop +endfacet +facet normal 0.25914119276608716 -0.9658394494111885 -1.3147699300042003e-05 + outer loop + vertex 156.08398126100536 -83.3310710260966 345.08876498247406 + vertex 156.08367901329257 -83.33159453449159 377.58876497685236 + vertex 155.9568313506602 -83.3651861985761 345.08876325046333 + endloop +endfacet +facet normal 0.5002888147812303 -0.8658585922183849 -9.294556675349942e-06 + outer loop + vertex 155.8425413771052 -83.4315712515166 377.58876112386935 + vertex 155.842843624818 -83.4310477431216 345.088761129491 + vertex 155.9565291029474 -83.3657097069711 377.58876324484163 + endloop +endfacet +facet normal 0.5002888147812303 -0.8658585922183849 -9.294556675349942e-06 + outer loop + vertex 155.9568313506602 -83.3651861985761 345.08876325046333 + vertex 155.9565291029474 -83.3657097069711 377.58876324484163 + vertex 155.842843624818 -83.4310477431216 345.088761129491 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664446 -4.808005373273424e-06 + outer loop + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + vertex 155.8425413771052 -83.4315712515166 377.58876112386935 + endloop +endfacet +facet normal 0.7073425808317078 -0.7068709028664446 -4.808005373273424e-06 + outer loop + vertex 155.842843624818 -83.4310477431216 345.088761129491 + vertex 155.8425413771052 -83.4315712515166 377.58876112386935 + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + endloop +endfacet +facet normal 0.8660347035656324 -0.4999838919605184 3.45955575600947e-10 + outer loop + vertex 155.7166519372563 -83.58155990194558 377.5887575370966 + vertex 155.71695418496913 -83.58103639355058 345.08875754271827 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + endloop +endfacet +facet normal 0.8660347035656324 -0.4999838919605184 3.45955575600947e-10 + outer loop + vertex 155.74978615862108 -83.52416730431317 345.0887587640978 + vertex 155.74948391090828 -83.52469081270817 377.5887587584761 + vertex 155.71695418496913 -83.58103639355058 345.08875754271827 + endloop +endfacet +facet normal 0.8660347035642542 -0.4999838919629057 3.459555243281557e-10 + outer loop + vertex 150.21682912661578 -93.10794163950449 377.5885529386449 + vertex 150.21713137432857 -93.1074181311095 345.0885529442666 + vertex 155.7166519372563 -83.58155990194558 377.5887575370966 + endloop +endfacet +facet normal 0.8660347035642542 -0.4999838919629057 3.459555243281557e-10 + outer loop + vertex 155.71695418496913 -83.58103639355058 345.08875754271827 + vertex 155.7166519372563 -83.58155990194558 377.5887575370966 + vertex 150.21713137432857 -93.1074181311095 345.0885529442666 + endloop +endfacet +facet normal 0.866034703563551 -0.4999838919641237 3.4595549816965313e-10 + outer loop + vertex 150.18493425931052 -93.16318754321432 377.58855175212665 + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 150.21682912661578 -93.10794163950449 377.5885529386449 + endloop +endfacet +facet normal 0.866034703563551 -0.4999838919641237 3.4595549816965313e-10 + outer loop + vertex 150.21713137432857 -93.1074181311095 345.0885529442666 + vertex 150.21682912661578 -93.10794163950449 377.5885529386449 + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + endloop +endfacet +facet normal 0.9648872694770408 -0.26266434318089305 4.742399434357771e-06 + outer loop + vertex 150.15037177433945 -93.29015149027101 377.5885493855689 + vertex 150.15067402205224 -93.28962798187602 345.0885493911906 + vertex 150.18493425931052 -93.16318754321432 377.58855175212665 + endloop +endfacet +facet normal 0.9648872694770408 -0.26266434318089305 4.742399434357771e-06 + outer loop + vertex 150.18523650702332 -93.16266403481931 345.0885517577483 + vertex 150.18493425931052 -93.16318754321432 377.58855175212665 + vertex 150.15067402205224 -93.28962798187602 345.0885493911906 + endloop +endfacet +facet normal 0.9999920674984399 -0.003983071038499263 9.235696742973618e-06 + outer loop + vertex 150.14984766502894 -93.4217346751012 377.5885472611593 + vertex 150.1501499127417 -93.4212111667062 345.088547266781 + vertex 150.15037177433945 -93.29015149027101 377.5885493855689 + endloop +endfacet +facet normal 0.9999920674984399 -0.003983071038499263 9.235696742973618e-06 + outer loop + vertex 150.15067402205224 -93.28962798187602 345.0885493911906 + vertex 150.15037177433945 -93.29015149027101 377.5885493855689 + vertex 150.1501499127417 -93.4212111667062 345.088547266781 + endloop +endfacet +facet normal 0.9669490586844907 0.2549696408154866 1.309959658130576e-05 + outer loop + vertex 150.18339764856265 -93.54896992111053 377.58854552367274 + vertex 150.18369989627547 -93.54844641271553 345.08854552929444 + vertex 150.14984766502894 -93.4217346751012 377.5885472611593 + endloop +endfacet +facet normal 0.9669490586844907 0.2549696408154866 1.309959658130576e-05 + outer loop + vertex 150.1501499127417 -93.4212111667062 345.088547266781 + vertex 150.14984766502894 -93.4217346751012 377.5885472611593 + vertex 150.18369989627547 -93.54844641271553 345.08854552929444 + endloop +endfacet +facet normal 0.8680100694813677 0.49654659300077875 1.6070780560670495e-05 + outer loop + vertex 150.24903759671903 -93.6626628481546 345.08854429713773 + vertex 150.18369989627547 -93.54844641271553 345.08854552929444 + vertex 150.2487353490062 -93.6631863565496 377.58854429151603 + endloop +endfacet +facet normal 0.8680100694813677 0.49654659300077875 1.6070780560670495e-05 + outer loop + vertex 150.18339764856265 -93.54896992111053 377.58854552367274 + vertex 150.2487353490062 -93.6631863565496 377.58854429151603 + vertex 150.18369989627547 -93.54844641271553 345.08854552929444 + endloop +endfacet +facet normal 0.7099176284945937 0.7042847154599664 1.7946767403096812e-05 + outer loop + vertex 150.34171035776342 -93.75607681169942 345.0885436542804 + vertex 150.24903759671903 -93.6626628481546 345.08854429713773 + vertex 150.34140811005062 -93.7566003200944 377.5885436486587 + endloop +endfacet +facet normal 0.7099176284945937 0.7042847154599664 1.7946767403096812e-05 + outer loop + vertex 150.2487353490062 -93.6631863565496 377.58854429151603 + vertex 150.34140811005062 -93.7566003200944 377.5885436486587 + vertex 150.24903759671903 -93.6626628481546 345.08854429713773 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761392 1.859985831256185e-05 + outer loop + vertex 151.69962881423348 -94.54064573115123 345.08854364502906 + vertex 150.34171035776342 -93.75607681169942 345.0885436542804 + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + endloop +endfacet +facet normal 0.5002746392317561 0.8658667824761392 1.859985831256185e-05 + outer loop + vertex 150.34140811005062 -93.7566003200944 377.5885436486587 + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + vertex 150.34171035776342 -93.75607681169942 345.0885436542804 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.4595552559972795e-10 + outer loop + vertex 151.69962881423348 -94.54064573115123 345.08854364502906 + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + vertex 152.4495823314251 -93.24163233814313 345.08857154398754 + endloop +endfacet +facet normal -0.8660347035642884 0.4999838919628465 -3.4595552559972795e-10 + outer loop + vertex 152.4492800837123 -93.24215584653813 377.5885715383659 + vertex 152.4495823314251 -93.24163233814313 345.08857154398754 + vertex 151.69932656652065 -94.54116923954622 377.58854363940736 + endloop +endfacet +facet normal 0.49994522926441914 0.8660570231744517 1.859985921082137e-05 + outer loop + vertex 153.31563935474946 -93.7415775674941 345.08857154516386 + vertex 152.4495823314251 -93.24163233814313 345.08857154398754 + vertex 153.31533710703664 -93.7421010758891 377.58857153954216 + endloop +endfacet +facet normal 0.49994522926441914 0.8660570231744517 1.859985921082137e-05 + outer loop + vertex 152.4492800837123 -93.24215584653813 377.5885715383659 + vertex 153.31533710703664 -93.7421010758891 377.58857153954216 + vertex 152.4495823314251 -93.24163233814313 345.08857154398754 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031620449354e-09 + outer loop + vertex 152.56541926239237 -95.04118661194525 377.58854363975337 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + vertex 153.31533710703664 -93.7421010758891 377.58857153954216 + endloop +endfacet +facet normal 0.8660570233241365 -0.4999452293511121 1.1763031620449354e-09 + outer loop + vertex 153.31563935474946 -93.7415775674941 345.08857154516386 + vertex 153.31533710703664 -93.7421010758891 377.58857153954216 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480165e-05 + outer loop + vertex 154.29779091895986 -96.04063088847262 345.08854364606697 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + vertex 154.29748867124707 -96.04115439686761 377.58854364044527 + endloop +endfacet +facet normal 0.4999838918764072 0.866034703414457 1.859985924480165e-05 + outer loop + vertex 152.56541926239237 -95.04118661194525 377.58854363975337 + vertex 154.29748867124707 -96.04115439686761 377.58854364044527 + vertex 152.56572151010516 -95.04066310355026 345.08854364537507 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.4595554154404816e-10 + outer loop + vertex 160.2972541309662 -85.64880939358348 377.5887668372219 + vertex 160.297556378679 -85.64828588518847 345.0887668428436 + vertex 164.04762715044825 -79.15269374187481 377.5889063545372 + endloop +endfacet +facet normal 0.8660347035642463 -0.4999838919629194 3.4595554154404816e-10 + outer loop + vertex 164.04792939816105 -79.15217023347982 345.0889063601589 + vertex 164.04762715044825 -79.15269374187481 377.5889063545372 + vertex 160.297556378679 -85.64828588518847 345.0887668428436 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.7575276644561 -94.40198758902719 76.8999141407756 + vertex -157.5164763162614 -94.30186142317248 76.89991962967026 + vertex -157.63041106045628 -94.36779201211587 76.89991965080323 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.57383190548697 -94.33512461859637 76.89991965060597 + vertex -157.63041106045628 -94.36779201211587 76.89991965080323 + vertex -157.5164763162614 -94.30186142317248 76.89991962967026 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.5185126628154 -83.91087982161369 76.89797173010376 + vertex -159.67743069290276 -81.69313485317022 76.89797171671222 + vertex -163.5740251988186 -83.94293137593381 76.89797173029733 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + vertex -163.5740251988186 -83.94293137593381 76.89797173029733 + vertex -159.67743069290276 -81.69313485317022 76.89797171671222 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.63225167193696 -83.97706548764744 76.8979718029818 + vertex -163.5740251988186 -83.94293137593381 76.89797173029733 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.72498500742452 -84.07043375352602 76.89797740205503 + vertex -163.63225167193696 -83.97706548764744 76.8979718029818 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.79039304571387 -84.1846217262285 76.89798814575447 + vertex -163.72498500742452 -84.07043375352602 76.89797740205503 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.82401833708735 -84.3118476841195 76.89800330191619 + vertex -163.79039304571387 -84.1846217262285 76.89798814575447 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.82356937350636 -84.44344138841973 76.89802183767291 + vertex -163.82401833708735 -84.3118476841195 76.89800330191619 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.78907675109687 -84.57043494564991 76.89804248984264 + vertex -163.82356937350636 -84.44344138841973 76.89802183767291 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.75702519678228 -84.62594748164355 76.89805289515232 + vertex -163.78907675109687 -84.57043494564991 76.89804248984264 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -163.72289108507456 -84.68417395475166 76.89806385101268 + vertex -163.75702519678228 -84.62594748164355 76.89805289515232 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + vertex -163.72289108507456 -84.68417395475166 76.89806385101268 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -154.4268466355445 -90.78608511424399 76.89967614989796 + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -153.56085285476345 -90.28603034559481 76.8996761396332 + vertex -154.4268466355445 -90.78608511424399 76.89967614989796 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + vertex -154.4268466355445 -90.78608511424399 76.89967614989796 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.25683109917384 -94.15211485659248 76.89983848876919 + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.22358481581026 -94.20948020996663 76.89984925151508 + vertex -158.25683109917384 -94.15211485659248 76.89983848876919 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.1304122755219 -94.3024686298038 76.89986988593301 + vertex -158.22358481581026 -94.20948020996663 76.89984925151508 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.016347338523 -94.36817371816151 76.89988838058402 + vertex -158.1304122755219 -94.3024686298038 76.89986988593301 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.8891633417686 -94.40211778185105 76.89990347508584 + vertex -158.016347338523 -94.36817371816151 76.89988838058402 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.7575276644561 -94.40198758902719 76.8999141407756 + vertex -157.8891633417686 -94.40211778185105 76.89990347508584 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.5164763162614 -94.30186142317248 76.89991962967026 + vertex -157.7575276644561 -94.40198758902719 76.8999141407756 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.56715719008477 -80.47471554330563 76.89797170935657 + vertex -157.5119124728837 -80.442818620885 76.89797170916319 + vertex -158.81135659813577 -81.19308526271273 76.8979717136939 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.45294075463588 -80.40937784286784 76.89797179443275 + vertex -158.81135659813577 -81.19308526271273 76.8979717136939 + vertex -157.5119124728837 -80.442818620885 76.89797170916319 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -158.81135659813577 -81.19308526271273 76.8979717136939 + vertex -157.45294075463588 -80.40937784286784 76.89797179443275 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.3257055086156 -80.37582785933705 76.89797740484748 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -157.45294075463588 -80.40937784286784 76.89797179443275 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.1941223237739 -80.37635196864751 76.89798815825706 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -157.3257055086156 -80.37582785933705 76.89797740484748 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -157.06715837670635 -80.41091445361543 76.89800332183769 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -157.1941223237739 -80.37635196864751 76.89798815825706 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -156.95346605058768 -80.47715993800782 76.89802186221303 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -157.06715837670635 -80.41091445361543 76.89800332183769 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -156.86079328955748 -80.57057390153903 76.89804251589057 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -156.95346605058768 -80.47715993800782 76.89802186221303 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -156.82889636714228 -80.6258186187306 76.89805287100077 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -156.86079328955748 -80.57057390153903 76.89804251589057 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -156.7954555891309 -80.6847903369681 76.89806387535373 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -156.82889636714228 -80.6258186187306 76.89805287100077 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -156.7954555891309 -80.6847903369681 76.89806387535373 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -153.56085285476345 -90.28603034559481 76.8996761396332 + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -153.56085285476345 -90.28603034559481 76.8996761396332 + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.32871918158833 -90.15199575783775 76.89983846461764 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.29588509244473 -90.20886362569561 76.89984912397246 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.32871918158833 -90.15199575783775 76.89983846461764 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.2617699199621 -90.33601353602963 76.8998697674871 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.29588509244473 -90.20886362569561 76.89984912397246 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.2617260121743 -90.46766057460133 76.89988827786495 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.2617699199621 -90.33601353602963 76.8998697674871 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.29575636132495 -90.59483321328898 76.89990339365369 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.2617260121743 -90.46766057460133 76.89988827786495 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.36154185535688 -90.70886484692869 76.8999140847412 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.29575636132495 -90.59483321328898 76.89990339365369 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.4545993215676 -90.80198440813426 76.89991962254427 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.36154185535688 -90.70886484692869 76.8999140847412 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.51171917955205 -90.83501186354749 76.89991962947417 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.4545993215676 -90.80198440813426 76.89991962254427 + endloop +endfacet +facet normal 1.0656126846536056e-06 -1.84569530272859e-06 -0.9999999999977288 + outer loop + vertex -151.56858704741973 -90.86784595269675 76.89991962967161 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.51171917955205 -90.83501186354749 76.89991962947417 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.56766868621563 -80.47382960602269 556.8998883596455 + vertex -158.81186809426669 -81.19219932542975 556.899888363982 + vertex -157.51242396901458 -80.44193268360209 556.8998883594513 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + vertex -157.51242396901458 -80.44193268360209 556.8998883594513 + vertex -158.81186809426669 -81.19219932542975 556.899888363982 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.45345225076673 -80.40849190558491 556.8998884447209 + vertex -157.51242396901458 -80.44193268360209 556.8998883594513 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.32621700474647 -80.3749419220541 556.8998940551355 + vertex -157.45345225076673 -80.40849190558491 556.8998884447209 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.1946338199048 -80.37546603136458 556.8999048085452 + vertex -157.32621700474647 -80.3749419220541 556.8998940551355 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.06766987283723 -80.41002851633247 556.8999199721258 + vertex -157.1946338199048 -80.37546603136458 556.8999048085452 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -156.95397754671853 -80.47627400072487 556.8999385125012 + vertex -157.06766987283723 -80.41002851633247 556.8999199721258 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -156.86130478568833 -80.56968796425609 556.8999591661794 + vertex -156.95397754671853 -80.47627400072487 556.8999385125012 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -156.8294078632732 -80.62493268144762 556.8999695212889 + vertex -156.86130478568833 -80.56968796425609 556.8999591661794 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -156.79596708526176 -80.68390439968516 556.8999805256426 + vertex -156.8294078632732 -80.62493268144762 556.8999695212889 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -156.79596708526176 -80.68390439968516 556.8999805256426 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -153.56136435089434 -90.28514440831188 556.9015927899221 + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -153.56136435089434 -90.28514440831188 556.9015927899221 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.3292306777192 -90.15110982055481 556.9017551149075 + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.29639658857562 -90.20797768841267 556.9017657742614 + vertex -151.3292306777192 -90.15110982055481 556.9017551149075 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.262281416093 -90.33512759874668 556.901786417776 + vertex -151.29639658857562 -90.20797768841267 556.9017657742614 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.26223750830522 -90.46677463731838 556.9018049281539 + vertex -151.262281416093 -90.33512759874668 556.901786417776 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.2962678574558 -90.59394727600603 556.9018200439434 + vertex -151.26223750830522 -90.46677463731838 556.9018049281539 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.36205335148773 -90.70797890964575 556.9018307350301 + vertex -151.2962678574558 -90.59394727600603 556.9018200439434 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.45511081769848 -90.8010984708513 556.901836272834 + vertex -151.36205335148773 -90.70797890964575 556.9018307350301 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.51223067568293 -90.83412592626453 556.9018362797632 + vertex -151.45511081769848 -90.8010984708513 556.901836272834 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -151.5690985435506 -90.86696001541381 556.9018362799613 + vertex -151.51223067568293 -90.83412592626453 556.9018362797632 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -159.67794218903362 -81.69224891588726 556.899888367001 + vertex -163.51902415894628 -83.90999388433075 556.8998883803919 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.57453669494947 -83.94204543865087 556.8998883805855 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.51902415894628 -83.90999388433075 556.8998883803919 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.63276316806784 -83.9761795503645 556.8998884532699 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.57453669494947 -83.94204543865087 556.8998883805855 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.7254965035554 -84.06954781624307 556.8998940523439 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.63276316806784 -83.9761795503645 556.8998884532699 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.79090454184472 -84.18373578894555 556.8999047960434 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.7254965035554 -84.06954781624307 556.8998940523439 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.82452983321824 -84.31096174683654 556.8999199522051 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.79090454184472 -84.18373578894555 556.8999047960434 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.8240808696372 -84.44255545113678 556.8999384879611 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.82452983321824 -84.31096174683654 556.8999199522051 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.78958824722778 -84.56954900836696 556.8999591401308 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.8240808696372 -84.44255545113678 556.8999384879611 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.75753669291316 -84.62506154436058 556.8999695454412 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.78958824722778 -84.56954900836696 556.8999591401308 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -163.72340258120548 -84.68328801746868 556.8999805013008 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.75753669291316 -84.62506154436058 556.8999695454412 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -163.72340258120548 -84.68328801746868 556.8999805013008 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -153.56136435089434 -90.28514440831188 556.9015927899221 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.25734259530475 -94.1512289193095 556.9017551390589 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.22409631194114 -94.2085942726837 556.901765901804 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -158.25734259530475 -94.1512289193095 556.9017551390589 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.1309237716528 -94.3015826925208 556.9017865362227 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -158.22409631194114 -94.2085942726837 556.901765901804 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -158.01685883465387 -94.36728778087853 556.9018050308729 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -158.1309237716528 -94.3015826925208 556.9017865362227 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.8896748378995 -94.40123184456809 556.9018201253748 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -158.01685883465387 -94.36728778087853 556.9018050308729 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.75803916058695 -94.40110165174426 556.9018307910653 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -157.8896748378995 -94.40123184456809 556.9018201253748 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.51698781239227 -94.30097548588954 556.9018362799592 + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -157.75803916058695 -94.40110165174426 556.9018307910653 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.75803916058695 -94.40110165174426 556.9018307910653 + vertex -157.63092255658717 -94.3669060748329 556.9018363010921 + vertex -157.51698781239227 -94.30097548588954 556.9018362799592 + endloop +endfacet +facet normal -1.0656126846536056e-06 1.84569530272859e-06 0.9999999999977288 + outer loop + vertex -157.57434340161785 -94.33423868131341 556.9018363008956 + vertex -157.51698781239227 -94.30097548588954 556.9018362799592 + vertex -157.63092255658717 -94.3669060748329 556.9018363010921 + endloop +endfacet +facet normal -0.5000161012764235 0.8660160922952709 -0.00016232669040715017 + outer loop + vertex -163.5185126628154 -83.91087982161369 76.89797173010376 + vertex -163.51902415894628 -83.90999388433075 556.8998883803919 + vertex -159.67743069290276 -81.69313485317022 76.89797171671222 + endloop +endfacet +facet normal -0.5000161012764235 0.8660160922952709 -0.00016232669040715017 + outer loop + vertex -159.67794218903362 -81.69224891588726 556.899888367001 + vertex -159.67743069290276 -81.69313485317022 76.89797171671222 + vertex -163.51902415894628 -83.90999388433075 556.8998883803919 + endloop +endfacet +facet normal 0.8659937807809363 0.500054768649135 -1.0265637493693751e-08 + outer loop + vertex -159.67794218903362 -81.69224891588726 556.899888367001 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -159.67743069290276 -81.69313485317022 76.89797171671222 + endloop +endfacet +facet normal 0.8659937807809363 0.500054768649135 -1.0265637493693751e-08 + outer loop + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + vertex -159.67743069290276 -81.69313485317022 76.89797171671222 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + endloop +endfacet +facet normal -0.5000547620609203 0.8659937693714905 -0.00016232669011062063 + outer loop + vertex -158.92734853931128 -82.99212552541144 76.89821520675073 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + endloop +endfacet +facet normal -0.5000547620609203 0.8659937693714905 -0.00016232669011062063 + outer loop + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -158.92786003544217 -82.99123958812847 556.9001318570389 + endloop +endfacet +facet normal -0.8660161037049507 -0.5000161078642328 3.0189382746258325e-09 + outer loop + vertex -158.06186625466114 -82.49118481947929 556.900131846774 + vertex -158.81186809426669 -81.19219932542975 556.899888363982 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + endloop +endfacet +facet normal -0.8660161037049507 -0.5000161078642328 3.0189382746258325e-09 + outer loop + vertex -158.81135659813577 -81.19308526271273 76.8979717136939 + vertex -158.06135475853026 -82.49207075676226 76.89821519648596 + vertex -158.81186809426669 -81.19219932542975 556.899888363982 + endloop +endfacet +facet normal -0.5000161012764507 0.8660160922952552 -0.00016232669040715017 + outer loop + vertex -158.81135659813577 -81.19308526271273 76.8979717136939 + vertex -158.81186809426669 -81.19219932542975 556.899888363982 + vertex -157.56715719008477 -80.47471554330563 76.89797170935657 + endloop +endfacet +facet normal -0.5000161012764507 0.8660160922952552 -0.00016232669040715017 + outer loop + vertex -157.56766868621563 -80.47382960602269 556.8998883596455 + vertex -157.56715719008477 -80.47471554330563 76.89797170935657 + vertex -158.81186809426669 -81.19219932542975 556.899888363982 + endloop +endfacet +facet normal -0.500016101275811 0.8660160922956246 -0.00016232669040715017 + outer loop + vertex -157.56715719008477 -80.47471554330563 76.89797170935657 + vertex -157.56766868621563 -80.47382960602269 556.8998883596455 + vertex -157.5119124728837 -80.442818620885 76.89797170916319 + endloop +endfacet +facet normal -0.500016101275811 0.8660160922956246 -0.00016232669040715017 + outer loop + vertex -157.51242396901458 -80.44193268360209 556.8998883594513 + vertex -157.5119124728837 -80.442818620885 76.89797170916319 + vertex -157.56766868621563 -80.47382960602269 556.8998883596455 + endloop +endfacet +facet normal -0.49327460558188424 0.8698736328569019 -0.00016232181740206692 + outer loop + vertex -157.5119124728837 -80.442818620885 76.89797170916319 + vertex -157.51242396901458 -80.44193268360209 556.8998883594513 + vertex -157.45294075463588 -80.40937784286784 76.89797179443275 + endloop +endfacet +facet normal -0.49327460558188424 0.8698736328569019 -0.00016232181740206692 + outer loop + vertex -157.45345225076673 -80.40849190558491 556.8998884447209 + vertex -157.45294075463588 -80.40937784286784 76.89797179443275 + vertex -157.51242396901458 -80.44193268360209 556.8998883594513 + endloop +endfacet +facet normal -0.25496963775076736 0.9669490468960807 -0.00015662695715857298 + outer loop + vertex -157.45294075463588 -80.40937784286784 76.89797179443275 + vertex -157.45345225076673 -80.40849190558491 556.8998884447209 + vertex -157.3257055086156 -80.37582785933705 76.89797740484748 + endloop +endfacet +facet normal -0.25496963775076736 0.9669490468960807 -0.00015662695715857298 + outer loop + vertex -157.32621700474647 -80.3749419220541 556.8998940551355 + vertex -157.3257055086156 -80.37582785933705 76.89797740484748 + vertex -157.45345225076673 -80.40849190558491 556.8998884447209 + endloop +endfacet +facet normal 0.0039830710001457345 0.9999920577054815 -0.00014025464343150009 + outer loop + vertex -157.3257055086156 -80.37582785933705 76.89797740484748 + vertex -157.32621700474647 -80.3749419220541 556.8998940551355 + vertex -157.1941223237739 -80.37635196864751 76.89798815825706 + endloop +endfacet +facet normal 0.0039830710001457345 0.9999920577054815 -0.00014025464343150009 + outer loop + vertex -157.1946338199048 -80.37546603136458 556.8999048085452 + vertex -157.1941223237739 -80.37635196864751 76.89798815825706 + vertex -157.32621700474647 -80.3749419220541 556.8998940551355 + endloop +endfacet +facet normal 0.26266434150849904 0.9648872631711345 -0.00011432420753334252 + outer loop + vertex -157.06766987283723 -80.41002851633247 556.8999199721258 + vertex -157.06715837670635 -80.41091445361543 76.89800332183769 + vertex -157.1946338199048 -80.37546603136458 556.8999048085452 + endloop +endfacet +facet normal 0.26266434150849904 0.9648872631711345 -0.00011432420753334252 + outer loop + vertex -157.1941223237739 -80.37635196864751 76.89798815825706 + vertex -157.1946338199048 -80.37546603136458 556.8999048085452 + vertex -157.06715837670635 -80.41091445361543 76.89800332183769 + endloop +endfacet +facet normal 0.5034454728393466 0.8640269957476798 -8.060276562570307e-05 + outer loop + vertex -157.06766987283723 -80.41002851633247 556.8999199721258 + vertex -156.95397754671853 -80.47627400072487 556.8999385125012 + vertex -157.06715837670635 -80.41091445361543 76.89800332183769 + endloop +endfacet +facet normal 0.5034454728393466 0.8640269957476798 -8.060276562570307e-05 + outer loop + vertex -156.95346605058768 -80.47715993800782 76.89802186221303 + vertex -157.06715837670635 -80.41091445361543 76.89800332183769 + vertex -156.95397754671853 -80.47627400072487 556.8999385125012 + endloop +endfacet +facet normal 0.7099176280018695 0.7042847149691677 -4.138837817004136e-05 + outer loop + vertex -156.86130478568833 -80.56968796425609 556.8999591661794 + vertex -156.86079328955748 -80.57057390153903 76.89804251589057 + vertex -156.95397754671853 -80.47627400072487 556.8999385125012 + endloop +endfacet +facet normal 0.7099176280018695 0.7042847149691677 -4.138837817004136e-05 + outer loop + vertex -156.95346605058768 -80.47715993800782 76.89802186221303 + vertex -156.95397754671853 -80.47627400072487 556.8999385125012 + vertex -156.86079328955748 -80.57057390153903 76.89804251589057 + endloop +endfacet +facet normal 0.8660161037050109 0.5000161078641286 -3.0189382550943355e-09 + outer loop + vertex -156.86130478568833 -80.56968796425609 556.8999591661794 + vertex -156.8294078632732 -80.62493268144762 556.8999695212889 + vertex -156.86079328955748 -80.57057390153903 76.89804251589057 + endloop +endfacet +facet normal 0.8660161037050109 0.5000161078641286 -3.0189382550943355e-09 + outer loop + vertex -156.82889636714228 -80.6258186187306 76.89805287100077 + vertex -156.86079328955748 -80.57057390153903 76.89804251589057 + vertex -156.8294078632732 -80.62493268144762 556.8999695212889 + endloop +endfacet +facet normal 0.8698736443131271 0.49327461208521295 1.2577849671949673e-06 + outer loop + vertex -156.79596708526176 -80.68390439968516 556.8999805256426 + vertex -156.7954555891309 -80.6847903369681 76.89806387535373 + vertex -156.8294078632732 -80.62493268144762 556.8999695212889 + endloop +endfacet +facet normal 0.8698736443131271 0.49327461208521295 1.2577849671949673e-06 + outer loop + vertex -156.82889636714228 -80.6258186187306 76.89805287100077 + vertex -156.8294078632732 -80.62493268144762 556.8999695212889 + vertex -156.7954555891309 -80.6847903369681 76.89806387535373 + endloop +endfacet +facet normal 0.8659937807809156 0.5000547686491705 -1.0265637500370636e-08 + outer loop + vertex -156.79596708526176 -80.68390439968516 556.8999805256426 + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -156.7954555891309 -80.6847903369681 76.89806387535373 + endloop +endfacet +facet normal 0.8659937807809156 0.5000547686491705 -1.0265637500370636e-08 + outer loop + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + vertex -156.7954555891309 -80.6847903369681 76.89806387535373 + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + endloop +endfacet +facet normal 0.8657017474219322 0.5005601707193673 -1.0501697972304467e-07 + outer loop + vertex -151.36225813312674 -90.09398996258028 556.9017444044338 + vertex -151.3292306777192 -90.15110982055481 556.9017551149075 + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + endloop +endfacet +facet normal 0.8657017474219322 0.5005601707193673 -1.0501697972304467e-07 + outer loop + vertex -151.32871918158833 -90.15199575783775 76.89983846461764 + vertex -151.36174663699586 -90.09487589986321 76.8998277541441 + vertex -151.3292306777192 -90.15110982055481 556.9017551149075 + endloop +endfacet +facet normal 0.8660161037050109 0.5000161078641286 -3.0189382550943355e-09 + outer loop + vertex -151.3292306777192 -90.15110982055481 556.9017551149075 + vertex -151.29639658857562 -90.20797768841267 556.9017657742614 + vertex -151.32871918158833 -90.15199575783775 76.89983846461764 + endloop +endfacet +facet normal 0.8660161037050109 0.5000161078641286 -3.0189382550943355e-09 + outer loop + vertex -151.29588509244473 -90.20886362569561 76.89984912397246 + vertex -151.32871918158833 -90.15199575783775 76.89983846461764 + vertex -151.29639658857562 -90.20797768841267 556.9017657742614 + endloop +endfacet +facet normal 0.9658394486551818 0.25914119252008944 4.196094199893687e-05 + outer loop + vertex -151.262281416093 -90.33512759874668 556.901786417776 + vertex -151.2617699199621 -90.33601353602963 76.8998697674871 + vertex -151.29639658857562 -90.20797768841267 556.9017657742614 + endloop +endfacet +facet normal 0.9658394486551818 0.25914119252008944 4.196094199893687e-05 + outer loop + vertex -151.29588509244473 -90.20886362569561 76.89984912397246 + vertex -151.29639658857562 -90.20797768841267 556.9017657742614 + vertex -151.2617699199621 -90.33601353602963 76.8998697674871 + endloop +endfacet +facet normal 0.9999999410900223 0.00033352671948020697 8.111645491291906e-05 + outer loop + vertex -151.262281416093 -90.33512759874668 556.901786417776 + vertex -151.26223750830522 -90.46677463731838 556.9018049281539 + vertex -151.2617699199621 -90.33601353602963 76.8998697674871 + endloop +endfacet +facet normal 0.9999999410900223 0.00033352671948020697 8.111645491291906e-05 + outer loop + vertex -151.2617260121743 -90.46766057460133 76.89988827786495 + vertex -151.2617699199621 -90.33601353602963 76.8998697674871 + vertex -151.26223750830522 -90.46677463731838 556.9018049281539 + endloop +endfacet +facet normal 0.9660120892749533 -0.2584968669219232 0.0001147440152030761 + outer loop + vertex -151.26223750830522 -90.46677463731838 556.9018049281539 + vertex -151.2962678574558 -90.59394727600603 556.9018200439434 + vertex -151.2617260121743 -90.46766057460133 76.89988827786495 + endloop +endfacet +facet normal 0.9660120892749533 -0.2584968669219232 0.0001147440152030761 + outer loop + vertex -151.29575636132495 -90.59483321328898 76.89990339365369 + vertex -151.2617260121743 -90.46766057460133 76.89988827786495 + vertex -151.2962678574558 -90.59394727600603 556.9018200439434 + endloop +endfacet +facet normal 0.8661921104203348 -0.4997111246417401 0.00014055196028708565 + outer loop + vertex -151.36154185535688 -90.70886484692869 76.8999140847412 + vertex -151.29575636132495 -90.59483321328898 76.89990339365369 + vertex -151.36205335148773 -90.70797890964575 556.9018307350301 + endloop +endfacet +facet normal 0.8661921104203348 -0.4997111246417401 0.00014055196028708565 + outer loop + vertex -151.2962678574558 -90.59394727600603 556.9018200439434 + vertex -151.36205335148773 -90.70797890964575 556.9018307350301 + vertex -151.29575636132495 -90.59483321328898 76.89990339365369 + endloop +endfacet +facet normal 0.7073425721472306 -0.7068708941862679 0.00015678152155038607 + outer loop + vertex -151.4545993215676 -90.80198440813426 76.89991962254427 + vertex -151.36154185535688 -90.70886484692869 76.8999140847412 + vertex -151.45511081769848 -90.8010984708513 556.901836272834 + endloop +endfacet +facet normal 0.7073425721472306 -0.7068708941862679 0.00015678152155038607 + outer loop + vertex -151.36205335148773 -90.70797890964575 556.9018307350301 + vertex -151.45511081769848 -90.8010984708513 556.901836272834 + vertex -151.36154185535688 -90.70886484692869 76.8999140847412 + endloop +endfacet +facet normal 0.5005601641246878 -0.8657017360162346 0.00016232665646494205 + outer loop + vertex -151.51171917955205 -90.83501186354749 76.89991962947417 + vertex -151.4545993215676 -90.80198440813426 76.89991962254427 + vertex -151.51223067568293 -90.83412592626453 556.9018362797632 + endloop +endfacet +facet normal 0.5005601641246878 -0.8657017360162346 0.00016232665646494205 + outer loop + vertex -151.45511081769848 -90.8010984708513 556.901836272834 + vertex -151.51223067568293 -90.83412592626453 556.9018362797632 + vertex -151.4545993215676 -90.80198440813426 76.89991962254427 + endloop +endfacet +facet normal 0.5000161012764235 -0.8660160922952709 0.00016232669040715017 + outer loop + vertex -151.56858704741973 -90.86784595269675 76.89991962967161 + vertex -151.51171917955205 -90.83501186354749 76.89991962947417 + vertex -151.5690985435506 -90.86696001541381 556.9018362799613 + endloop +endfacet +facet normal 0.5000161012764235 -0.8660160922952709 0.00016232669040715017 + outer loop + vertex -151.51223067568293 -90.83412592626453 556.9018362797632 + vertex -151.5690985435506 -90.86696001541381 556.9018362799613 + vertex -151.51171917955205 -90.83501186354749 76.89991962947417 + endloop +endfacet +facet normal 0.499999993412509 -0.866025392374575 0.00016232669043522314 + outer loop + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -151.56858704741973 -90.86784595269675 76.89991962967161 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + endloop +endfacet +facet normal 0.499999993412509 -0.866025392374575 0.00016232669043522314 + outer loop + vertex -151.5690985435506 -90.86696001541381 556.9018362799613 + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + vertex -151.56858704741973 -90.86784595269675 76.89991962967161 + endloop +endfacet +facet normal -0.8659937807809285 -0.5000547686491482 1.0265637496189201e-08 + outer loop + vertex -152.8112821965504 -91.58413508185618 556.9018362799609 + vertex -153.56136435089434 -90.28514440831188 556.9015927899221 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + endloop +endfacet +facet normal -0.8659937807809285 -0.5000547686491482 1.0265637496189201e-08 + outer loop + vertex -153.56085285476345 -90.28603034559481 76.8996761396332 + vertex -152.8107707004195 -91.58502101913913 76.89991962967197 + vertex -153.56136435089434 -90.28514440831188 556.9015927899221 + endloop +endfacet +facet normal 0.5000547620609203 -0.8659937693714905 0.00016232669011062063 + outer loop + vertex -154.4268466355445 -90.78608511424399 76.89967614989796 + vertex -153.56085285476345 -90.28603034559481 76.8996761396332 + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + endloop +endfacet +facet normal 0.5000547620609203 -0.8659937693714905 0.00016232669011062063 + outer loop + vertex -153.56136435089434 -90.28514440831188 556.9015927899221 + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + vertex -153.56085285476345 -90.28603034559481 76.8996761396332 + endloop +endfacet +facet normal 0.8660161037050109 0.5000161078641286 -3.0189382550943355e-09 + outer loop + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + endloop +endfacet +facet normal 0.8660161037050109 0.5000161078641286 -3.0189382550943355e-09 + outer loop + vertex -154.4268466355445 -90.78608511424399 76.89967614989796 + vertex -154.4273581316754 -90.78519917696103 556.9015928001869 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 0.49999999341250595 -0.8660253923745768 0.00016232669043522314 + outer loop + vertex -157.5164763162614 -94.30186142317248 76.89991962967026 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + vertex -157.51698781239227 -94.30097548588954 556.9018362799592 + endloop +endfacet +facet normal 0.49999999341250595 -0.8660253923745768 0.00016232669043522314 + outer loop + vertex -153.67736559216962 -92.0841685634575 556.9018362799605 + vertex -157.51698781239227 -94.30097548588954 556.9018362799592 + vertex -153.67685409603874 -92.08505450074045 76.89991962967089 + endloop +endfacet +facet normal 0.5016837027503734 -0.8650511175906428 0.00016232638330655627 + outer loop + vertex -157.57383190548697 -94.33512461859637 76.89991965060597 + vertex -157.5164763162614 -94.30186142317248 76.89991962967026 + vertex -157.57434340161785 -94.33423868131341 556.9018363008956 + endloop +endfacet +facet normal 0.5016837027503734 -0.8650511175906428 0.00016232638330655627 + outer loop + vertex -157.51698781239227 -94.30097548588954 556.9018362799592 + vertex -157.57434340161785 -94.33423868131341 556.9018363008956 + vertex -157.5164763162614 -94.30186142317248 76.89991962967026 + endloop +endfacet +facet normal 0.5000161012758254 -0.8660160922956163 0.00016232669040715017 + outer loop + vertex -157.63041106045628 -94.36779201211587 76.89991965080323 + vertex -157.57383190548697 -94.33512461859637 76.89991965060597 + vertex -157.63092255658717 -94.3669060748329 556.9018363010921 + endloop +endfacet +facet normal 0.5000161012758254 -0.8660160922956163 0.00016232669040715017 + outer loop + vertex -157.57434340161785 -94.33423868131341 556.9018363008956 + vertex -157.63092255658717 -94.3669060748329 556.9018363010921 + vertex -157.57383190548697 -94.33512461859637 76.89991965060597 + endloop +endfacet +facet normal 0.259774253089141 -0.9656693599955052 0.00015683701866325126 + outer loop + vertex -157.7575276644561 -94.40198758902719 76.8999141407756 + vertex -157.63041106045628 -94.36779201211587 76.89991965080323 + vertex -157.75803916058695 -94.40110165174426 556.9018307910653 + endloop +endfacet +facet normal 0.259774253089141 -0.9656693599955052 0.00015683701866325126 + outer loop + vertex -157.63092255658717 -94.3669060748329 556.9018363010921 + vertex -157.75803916058695 -94.40110165174426 556.9018307910653 + vertex -157.63041106045628 -94.36779201211587 76.89991965080323 + endloop +endfacet +facet normal 0.0009890383963867414 -0.9999995010088893 0.00014065924284202783 + outer loop + vertex -157.8891633417686 -94.40211778185105 76.89990347508584 + vertex -157.7575276644561 -94.40198758902719 76.8999141407756 + vertex -157.8896748378995 -94.40123184456809 556.9018201253748 + endloop +endfacet +facet normal 0.0009890383963867414 -0.9999995010088893 0.00014065924284202783 + outer loop + vertex -157.75803916058695 -94.40110165174426 556.9018307910653 + vertex -157.8896748378995 -94.40123184456809 556.9018201253748 + vertex -157.7575276644561 -94.40198758902719 76.8999141407756 + endloop +endfacet +facet normal -0.25786357908416785 -0.9661813294516018 0.00011489577207227023 + outer loop + vertex -158.016347338523 -94.36817371816151 76.89988838058402 + vertex -157.8891633417686 -94.40211778185105 76.89990347508584 + vertex -158.01685883465387 -94.36728778087853 556.9018050308729 + endloop +endfacet +facet normal -0.25786357908416785 -0.9661813294516018 0.00011489577207227023 + outer loop + vertex -157.8896748378995 -94.40123184456809 556.9018201253748 + vertex -158.01685883465387 -94.36728778087853 556.9018050308729 + vertex -157.8891633417686 -94.40211778185105 76.89990347508584 + endloop +endfacet +facet normal -0.49914322141689127 -0.8665194965512877 8.130234411737682e-05 + outer loop + vertex -158.01685883465387 -94.36728778087853 556.9018050308729 + vertex -158.1309237716528 -94.3015826925208 556.9017865362227 + vertex -158.016347338523 -94.36817371816151 76.89988838058402 + endloop +endfacet +facet normal -0.49914322141689127 -0.8665194965512877 8.130234411737682e-05 + outer loop + vertex -158.1304122755219 -94.3024686298038 76.89986988593301 + vertex -158.016347338523 -94.36817371816151 76.89988838058402 + vertex -158.1309237716528 -94.3015826925208 556.9017865362227 + endloop +endfacet +facet normal -0.7064070789279 -0.7078057904979208 4.216829549636598e-05 + outer loop + vertex -158.1309237716528 -94.3015826925208 556.9017865362227 + vertex -158.22409631194114 -94.2085942726837 556.901765901804 + vertex -158.1304122755219 -94.3024686298038 76.89986988593301 + endloop +endfacet +facet normal -0.7064070789279 -0.7078057904979208 4.216829549636598e-05 + outer loop + vertex -158.22358481581026 -94.20948020996663 76.89984925151508 + vertex -158.1304122755219 -94.3024686298038 76.89986988593301 + vertex -158.22409631194114 -94.2085942726837 556.901765901804 + endloop +endfacet +facet normal -0.8651988528499923 -0.5014289032624523 2.679591724845905e-07 + outer loop + vertex -158.25734259530475 -94.1512289193095 556.9017551390589 + vertex -158.25683109917384 -94.15211485659248 76.89983848876919 + vertex -158.22409631194114 -94.2085942726837 556.901765901804 + endloop +endfacet +facet normal -0.8651988528499923 -0.5014289032624523 2.679591724845905e-07 + outer loop + vertex -158.22358481581026 -94.20948020996663 76.89984925151508 + vertex -158.22409631194114 -94.2085942726837 556.901765901804 + vertex -158.25683109917384 -94.15211485659248 76.89983848876919 + endloop +endfacet +facet normal -0.8658666070784498 -0.5002749431527138 5.1539400978575745e-08 + outer loop + vertex -158.25734259530475 -94.1512289193095 556.9017551390589 + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + vertex -158.25683109917384 -94.15211485659248 76.89983848876919 + endloop +endfacet +facet normal -0.8658666070784498 -0.5002749431527138 5.1539400978575745e-08 + outer loop + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + vertex -158.25683109917384 -94.15211485659248 76.89983848876919 + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + endloop +endfacet +facet normal -0.8660366478886046 -0.4999805241345598 -3.650822956058494e-09 + outer loop + vertex -158.29002690087313 -94.09465952850837 556.9017445338206 + vertex -163.72340258120548 -84.68328801746868 556.8999805013008 + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + endloop +endfacet +facet normal -0.8660366478886046 -0.4999805241345598 -3.650822956058494e-09 + outer loop + vertex -163.72289108507456 -84.68417395475166 76.89806385101268 + vertex -158.28951540474222 -94.09554546579137 76.89982788353092 + vertex -163.72340258120548 -84.68328801746868 556.8999805013008 + endloop +endfacet +facet normal -0.8626892331428296 -0.5057344036332481 1.0769114124448546e-06 + outer loop + vertex -163.75753669291316 -84.62506154436058 556.8999695454412 + vertex -163.75702519678228 -84.62594748164355 76.89805289515232 + vertex -163.72340258120548 -84.68328801746868 556.8999805013008 + endloop +endfacet +facet normal -0.8626892331428296 -0.5057344036332481 1.0769114124448546e-06 + outer loop + vertex -163.72289108507456 -84.68417395475166 76.89806385101268 + vertex -163.72340258120548 -84.68328801746868 556.8999805013008 + vertex -163.75702519678228 -84.62594748164355 76.89805289515232 + endloop +endfacet +facet normal -0.8660161037050109 -0.5000161078641286 3.0189382550943355e-09 + outer loop + vertex -163.75753669291316 -84.62506154436058 556.8999695454412 + vertex -163.78958824722778 -84.56954900836696 556.8999591401308 + vertex -163.75702519678228 -84.62594748164355 76.89805289515232 + endloop +endfacet +facet normal -0.8660161037050109 -0.5000161078641286 3.0189382550943355e-09 + outer loop + vertex -163.78907675109687 -84.57043494564991 76.89804248984264 + vertex -163.75702519678228 -84.62594748164355 76.89805289515232 + vertex -163.78958824722778 -84.56954900836696 556.8999591401308 + endloop +endfacet +facet normal -0.9650371855015948 -0.2621130078396181 -4.147805269390345e-05 + outer loop + vertex -163.78958824722778 -84.56954900836696 556.8999591401308 + vertex -163.8240808696372 -84.44255545113678 556.8999384879611 + vertex -163.78907675109687 -84.57043494564991 76.89804248984264 + endloop +endfacet +facet normal -0.9650371855015948 -0.2621130078396181 -4.147805269390345e-05 + outer loop + vertex -163.82356937350636 -84.44344138841973 76.89802183767291 + vertex -163.78907675109687 -84.57043494564991 76.89804248984264 + vertex -163.8240808696372 -84.44255545113678 556.8999384879611 + endloop +endfacet +facet normal -0.9999941768085319 -0.0034117208617779654 -8.068325748916707e-05 + outer loop + vertex -163.8240808696372 -84.44255545113678 556.8999384879611 + vertex -163.82452983321824 -84.31096174683654 556.8999199522051 + vertex -163.82356937350636 -84.44344138841973 76.89802183767291 + endloop +endfacet +facet normal -0.9999941768085319 -0.0034117208617779654 -8.068325748916707e-05 + outer loop + vertex -163.82401833708735 -84.3118476841195 76.89800330191619 + vertex -163.82356937350636 -84.44344138841973 76.89802183767291 + vertex -163.82452983321824 -84.31096174683654 556.8999199522051 + endloop +endfacet +facet normal -0.9668032166781141 0.25552206780584014 -0.00011439003134875238 + outer loop + vertex -163.82452983321824 -84.31096174683654 556.8999199522051 + vertex -163.79090454184472 -84.18373578894555 556.8999047960434 + vertex -163.82401833708735 -84.3118476841195 76.89800330191619 + endloop +endfacet +facet normal -0.9668032166781141 0.25552206780584014 -0.00011439003134875238 + outer loop + vertex -163.79039304571387 -84.1846217262285 76.89798814575447 + vertex -163.82401833708735 -84.3118476841195 76.89800330191619 + vertex -163.79090454184472 -84.18373578894555 556.8999047960434 + endloop +endfacet +facet normal -0.8677262154678845 0.4970424481926308 -0.0001403013134152382 + outer loop + vertex -163.79039304571387 -84.1846217262285 76.89798814575447 + vertex -163.79090454184472 -84.18373578894555 556.8999047960434 + vertex -163.72498500742452 -84.07043375352602 76.89797740205503 + endloop +endfacet +facet normal -0.8677262154678845 0.4970424481926308 -0.0001403013134152382 + outer loop + vertex -163.7254965035554 -84.06954781624307 556.8998940523439 + vertex -163.72498500742452 -84.07043375352602 76.89797740205503 + vertex -163.79090454184472 -84.18373578894555 556.8999047960434 + endloop +endfacet +facet normal -0.7095151081069204 0.7046902062810276 -0.00015665129282861325 + outer loop + vertex -163.72498500742452 -84.07043375352602 76.89797740205503 + vertex -163.7254965035554 -84.06954781624307 556.8998940523439 + vertex -163.63225167193696 -83.97706548764744 76.8979718029818 + endloop +endfacet +facet normal -0.7095151081069204 0.7046902062810276 -0.00015665129282861325 + outer loop + vertex -163.63276316806784 -83.9761795503645 556.8998884532699 + vertex -163.63225167193696 -83.97706548764744 76.8979718029818 + vertex -163.7254965035554 -84.06954781624307 556.8998940523439 + endloop +endfacet +facet normal -0.5057343969739034 0.8626892217760969 -0.00016232311816103822 + outer loop + vertex -163.63225167193696 -83.97706548764744 76.8979718029818 + vertex -163.63276316806784 -83.9761795503645 556.8998884532699 + vertex -163.5740251988186 -83.94293137593381 76.89797173029733 + endloop +endfacet +facet normal -0.5057343969739034 0.8626892217760969 -0.00016232311816103822 + outer loop + vertex -163.57453669494947 -83.94204543865087 556.8998883805855 + vertex -163.5740251988186 -83.94293137593381 76.89797173029733 + vertex -163.63276316806784 -83.9761795503645 556.8998884532699 + endloop +endfacet +facet normal -0.5000161012764235 0.8660160922952709 -0.00016232669040715017 + outer loop + vertex -163.5740251988186 -83.94293137593381 76.89797173029733 + vertex -163.57453669494947 -83.94204543865087 556.8998883805855 + vertex -163.5185126628154 -83.91087982161369 76.89797173010376 + endloop +endfacet +facet normal -0.5000161012764235 0.8660160922952709 -0.00016232669040715017 + outer loop + vertex -163.51902415894628 -83.90999388433075 556.8998883803919 + vertex -163.5185126628154 -83.91087982161369 76.89797173010376 + vertex -163.57453669494947 -83.94204543865087 556.8998883805855 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -158.92589020484243 -82.99465143480991 345.0885715451641 + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -159.67597235843385 -81.69566076256861 345.08854364537524 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -158.92589020484243 -82.99465143480991 345.0885715451641 + vertex -158.05989642406146 -82.49459666616058 345.08857154398777 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + vertex -155.40785251969305 -93.08781478580067 345.0887668428438 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -144.3205752362527 -95.34778483588465 345.0889063572282 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -157.82101014624894 -71.965350039894 345.0884041610287 + vertex -165.1576727591289 -76.20135612420354 345.08840416395947 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -157.82101014624894 -71.965350039894 345.0884041610287 + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -157.45148242016688 -80.41190375226617 345.0885436542806 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -157.45148242016688 -80.41190375226617 345.0885436542806 + vertex -157.32424717414668 -80.3783537687353 345.0885442971379 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -157.32424717414668 -80.3783537687353 345.0885442971379 + vertex -157.19266398930486 -80.37887787804584 345.0885455292946 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -157.19266398930486 -80.37887787804584 345.0885455292946 + vertex -157.06570004223724 -80.41344036301373 345.0885472667812 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -157.06570004223724 -80.41344036301373 345.0885472667812 + vertex -156.95200771611871 -80.47968584740612 345.0885493911908 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -156.95200771611871 -80.47968584740612 345.0885493911908 + vertex -156.85933495508849 -80.57309981093738 345.0885517577485 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -156.85933495508849 -80.57309981093738 345.0885517577485 + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -159.67597235843385 -81.69566076256861 345.08854364537524 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -156.85933495508849 -80.57309981093738 345.0885517577485 + vertex -151.2944267579757 -90.21138953509391 345.088758764098 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.2944267579757 -90.21138953509391 345.088758764098 + vertex -151.26031158549299 -90.33853944542804 345.0887611294912 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.26031158549299 -90.33853944542804 345.0887611294912 + vertex -151.26026767770531 -90.47018648399975 345.08876325046356 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.26026767770531 -90.47018648399975 345.08876325046356 + vertex -151.29429802685618 -90.59735912268734 345.0887649824743 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.29429802685618 -90.59735912268734 345.0887649824743 + vertex -151.3600835208879 -90.71139075632678 345.0887662074897 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.3600835208879 -90.71139075632678 345.0887662074897 + vertex -151.4531409870986 -90.80451031753248 345.0887668420271 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + vertex -151.4531409870986 -90.80451031753248 345.0887668420271 + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -154.42538830107569 -90.78861102364228 345.08873894423124 + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + vertex -153.55939452029452 -90.28855625499315 345.0887389430549 + endloop +endfacet +facet normal -9.299929623335791e-06 1.6107950615988392e-05 0.9999999998270227 + outer loop + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + vertex -154.42538830107569 -90.78861102364228 345.08873894423124 + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262024e-10 + outer loop + vertex -165.15761230958637 -76.20146082588255 338.58840416508383 + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262024e-10 + outer loop + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + vertex -165.15761230958637 -76.20146082588255 338.58840416508383 + vertex -161.4079441180273 -82.6957976809724 338.5885436471915 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801665e-05 + outer loop + vertex -165.15761230958637 -76.20146082588255 338.58840416508383 + vertex -157.820958996636 -71.9654386336224 339.58840416198 + vertex -157.82094969670638 -71.96545474157301 338.588404162153 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801665e-05 + outer loop + vertex -157.820958996636 -71.9654386336224 339.58840416198 + vertex -165.15761230958637 -76.20146082588255 338.58840416508383 + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262024e-10 + outer loop + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262024e-10 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605118e-05 + outer loop + vertex -144.3205752362527 -95.34778483588465 345.0889063572282 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -143.9545752403253 -93.9817526244653 345.08888775702303 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605118e-05 + outer loop + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -144.3205752362527 -95.34778483588465 345.0889063572282 + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + vertex -144.3205752362527 -95.34778483588465 345.0889063572282 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624585e-05 + outer loop + vertex -157.82094969670638 -71.96545474157301 338.588404162153 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624585e-05 + outer loop + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -157.82094969670638 -71.96545474157301 338.588404162153 + vertex -157.820958996636 -71.9654386336224 339.58840416198 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -158.05983597451893 -82.49470136783958 338.5885715451121 + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + vertex -158.80983781412434 -81.19571587379009 338.5885436461536 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + vertex -158.05983597451893 -82.49470136783958 338.5885715451121 + vertex -158.92582975529984 -82.99475613648892 338.5885715462884 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -165.15761230958637 -76.20146082588255 338.58840416508383 + vertex -157.82094969670638 -71.96545474157301 338.588404162153 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -165.15761230958637 -76.20146082588255 338.58840416508383 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -161.4079441180273 -82.6957976809724 338.5885436471915 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -161.4079441180273 -82.6957976809724 338.5885436471915 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -158.80983781412434 -81.19571587379009 338.5885436461536 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -161.4079441180273 -82.6957976809724 338.5885436471915 + vertex -158.80983781412434 -81.19571587379009 338.5885436461536 + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -154.42532785153313 -90.78871572532128 338.5887389453556 + vertex -153.55933407075196 -90.28866095667216 338.5887389441793 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -154.42532785153313 -90.78871572532128 338.5887389453556 + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -153.67533531202716 -92.08768511181773 338.58876684396813 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -157.45142197062432 -80.41200845394518 338.588543655405 + vertex -158.80983781412434 -81.19571587379009 338.5885436461536 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -157.45142197062432 -80.41200845394518 338.588543655405 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -157.32418672460412 -80.37845847041429 338.58854429826226 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -157.32418672460412 -80.37845847041429 338.58854429826226 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -157.1926035397623 -80.37898257972483 338.58854553041897 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -157.1926035397623 -80.37898257972483 338.58854553041897 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -157.0656395926947 -80.41354506469274 338.58854726790554 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -157.0656395926947 -80.41354506469274 338.58854726790554 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -156.95194726657616 -80.47979054908512 338.58854939231514 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -156.95194726657616 -80.47979054908512 338.58854939231514 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -156.85927450554593 -80.57320451261637 338.5885517588728 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -156.85927450554593 -80.57320451261637 338.5885517588728 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -156.85927450554593 -80.57320451261637 338.5885517588728 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -151.29436630843315 -90.21149423677292 338.5887587652224 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.29436630843315 -90.21149423677292 338.5887587652224 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -151.26025113595045 -90.33864414710705 338.5887611306155 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.26025113595045 -90.33864414710705 338.5887611306155 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -151.26020722816278 -90.47029118567876 338.5887632515879 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.26020722816278 -90.47029118567876 338.5887632515879 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -151.29423757731362 -90.59746382436634 338.58876498359865 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.29423757731362 -90.59746382436634 338.58876498359865 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -151.36002307134538 -90.71149545800579 338.58876620861406 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.36002307134538 -90.71149545800579 338.58876620861406 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -151.45308053755608 -90.80461501921148 338.58876684315146 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.45308053755608 -90.80461501921148 338.58876684315146 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -153.67533531202716 -92.08768511181773 338.58876684396813 + vertex -151.65717739959013 -99.58389562187321 338.5889063612834 + vertex -155.4077920701505 -93.08791948747968 338.58876684396813 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.65717739959013 -99.58389562187321 338.5889063612834 + vertex -153.67533531202716 -92.08768511181773 338.58876684396813 + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.65717739959013 -99.58389562187321 338.5889063612834 + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + endloop +endfacet +facet normal 9.2999296232569e-06 -1.6107950616031896e-05 -0.9999999998270227 + outer loop + vertex -151.65717739959013 -99.58389562187321 338.5889063612834 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -144.32051478671016 -95.34788953756366 338.5889063583526 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -144.32051478671016 -95.34788953756366 338.5889063583526 + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -144.32051478671016 -95.34788953756366 338.5889063583526 + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -151.65717739959013 -99.58389562187321 338.5889063612834 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605118e-05 + outer loop + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605118e-05 + outer loop + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + vertex -144.32051478671016 -95.34788953756366 338.5889063583526 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801665e-05 + outer loop + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + vertex -157.82101014624894 -71.965350039894 345.0884041610287 + vertex -157.820958996636 -71.9654386336224 339.58840416198 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801665e-05 + outer loop + vertex -157.82101014624894 -71.965350039894 345.0884041610287 + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + vertex -165.1576727591289 -76.20135612420354 345.08840416395947 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262024e-10 + outer loop + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262024e-10 + outer loop + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -143.95451479078275 -93.98185732614431 338.5888877581474 + vertex -156.4549174852237 -72.33145473726408 338.58842276166627 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624585e-05 + outer loop + vertex -157.820958996636 -71.9654386336224 339.58840416198 + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624585e-05 + outer loop + vertex -156.45497793476625 -72.33135003558507 345.08842276054196 + vertex -157.820958996636 -71.9654386336224 339.58840416198 + vertex -157.82101014624894 -71.965350039894 345.0884041610287 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.859985924070794e-05 + outer loop + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -151.4531409870986 -90.80451031753248 345.0887668420271 + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.859985924070794e-05 + outer loop + vertex -151.4531409870986 -90.80451031753248 345.0887668420271 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + endloop +endfacet +facet normal -0.7073425807271966 0.7068709027591015 -1.7964477816981825e-05 + outer loop + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -151.3600835208879 -90.71139075632678 345.0887662074897 + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + endloop +endfacet +facet normal -0.7073425807271966 0.7068709027591015 -1.7964477816981825e-05 + outer loop + vertex -151.3600835208879 -90.71139075632678 345.0887662074897 + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -151.4531409870986 -90.80451031753248 345.0887668420271 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847944957377e-05 + outer loop + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + vertex -151.29429802685618 -90.59735912268734 345.0887649824743 + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847944957377e-05 + outer loop + vertex -151.29429802685618 -90.59735912268734 345.0887649824743 + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + vertex -151.3600835208879 -90.71139075632678 345.0887662074897 + endloop +endfacet +facet normal -0.9660120955503078 0.2584968686031633 -1.3147699300030635e-05 + outer loop + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + vertex -151.29429802685618 -90.59735912268734 345.0887649824743 + vertex -151.26026767770531 -90.47018648399975 345.08876325046356 + endloop +endfacet +facet normal -0.9660120955503078 0.2584968686031633 -1.3147699300030635e-05 + outer loop + vertex -151.29429802685618 -90.59735912268734 345.0887649824743 + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979508525 -9.29455667534782e-06 + outer loop + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + vertex -151.26026767770531 -90.47018648399975 345.08876325046356 + vertex -151.26031158549299 -90.33853944542804 345.0887611294912 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979508525 -9.29455667534782e-06 + outer loop + vertex -151.26026767770531 -90.47018648399975 345.08876325046356 + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + endloop +endfacet +facet normal -0.9658394494942373 -0.2591411927454837 -4.808005373256881e-06 + outer loop + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + vertex -151.26031158549299 -90.33853944542804 345.0887611294912 + vertex -151.2944267579757 -90.21138953509391 345.088758764098 + endloop +endfacet +facet normal -0.9658394494942373 -0.2591411927454837 -4.808005373256881e-06 + outer loop + vertex -151.26031158549299 -90.33853944542804 345.0887611294912 + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343005e-10 + outer loop + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -151.2944267579757 -90.21138953509391 345.088758764098 + vertex -156.85933495508849 -80.57309981093738 345.0885517577485 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343005e-10 + outer loop + vertex -151.2944267579757 -90.21138953509391 345.088758764098 + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + endloop +endfacet +facet normal -0.709917628601995 -0.7042847155644013 4.742399434363147e-06 + outer loop + vertex -156.95200771611871 -80.47968584740612 345.0885493911908 + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -156.85933495508849 -80.57309981093738 345.0885517577485 + endloop +endfacet +facet normal -0.709917628601995 -0.7042847155644013 4.742399434363147e-06 + outer loop + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -156.95200771611871 -80.47968584740612 345.0885493911908 + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + endloop +endfacet +facet normal -0.5034454744536385 -0.8640269985173223 9.235696742989533e-06 + outer loop + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + vertex -156.95200771611871 -80.47968584740612 345.0885493911908 + vertex -157.06570004223724 -80.41344036301373 345.0885472667812 + endloop +endfacet +facet normal -0.5034454744536385 -0.8640269985173223 9.235696742989533e-06 + outer loop + vertex -156.95200771611871 -80.47968584740612 345.0885493911908 + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + endloop +endfacet +facet normal -0.262664343202477 -0.9648872693938976 1.3099596581315967e-05 + outer loop + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + vertex -157.06570004223724 -80.41344036301373 345.0885472667812 + vertex -157.19266398930486 -80.37887787804584 345.0885455292946 + endloop +endfacet +facet normal -0.262664343202477 -0.9648872693938976 1.3099596581315967e-05 + outer loop + vertex -157.06570004223724 -80.41344036301373 345.0885472667812 + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + endloop +endfacet +facet normal -0.003983071039348085 -0.9999920674119498 1.6070780560681015e-05 + outer loop + vertex -157.32424717414668 -80.3783537687353 345.0885442971379 + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + vertex -157.19266398930486 -80.37887787804584 345.0885455292946 + endloop +endfacet +facet normal -0.003983071039348085 -0.9999920674119498 1.6070780560681015e-05 + outer loop + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + vertex -157.32424717414668 -80.3783537687353 345.0885442971379 + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + endloop +endfacet +facet normal 0.254969640838129 -0.9669490586007048 1.7946767403102802e-05 + outer loop + vertex -157.45148242016688 -80.41190375226617 345.0885436542806 + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + vertex -157.32424717414668 -80.3783537687353 345.0885442971379 + endloop +endfacet +facet normal 0.254969640838129 -0.9669490586007048 1.7946767403102802e-05 + outer loop + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + vertex -157.45148242016688 -80.41190375226617 345.0885436542806 + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.8599858312563285e-05 + outer loop + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + vertex -157.45148242016688 -80.41190375226617 345.0885436542806 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.8599858312563285e-05 + outer loop + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116078e-10 + outer loop + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -158.05989642406146 -82.49459666616058 345.08857154398777 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116078e-10 + outer loop + vertex -158.8098982636669 -81.19561117211109 345.08854364502923 + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.859985921082281e-05 + outer loop + vertex -158.92589020484243 -82.99465143480991 345.0885715451641 + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + vertex -158.05989642406146 -82.49459666616058 345.08857154398777 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.859985921082281e-05 + outer loop + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + vertex -158.92589020484243 -82.99465143480991 345.0885715451641 + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.17630317955688e-09 + outer loop + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + vertex -158.92589020484243 -82.99465143480991 345.0885715451641 + vertex -159.67597235843385 -81.69566076256861 345.08854364537524 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.17630317955688e-09 + outer loop + vertex -158.92589020484243 -82.99465143480991 345.0885715451641 + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + vertex -159.67597235843385 -81.69566076256861 345.08854364537524 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + endloop +endfacet +facet normal -0.5000040269107857 0.8660230786688647 -1.6908566647105924e-05 + outer loop + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + endloop +endfacet +facet normal -0.5000040269107857 0.8660230786688647 -1.6908566647105924e-05 + outer loop + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + vertex -155.40785251969305 -93.08781478580067 345.0887668428438 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.459555440271332e-10 + outer loop + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + vertex -154.42538830107569 -90.78861102364228 345.08873894423124 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.459555440271332e-10 + outer loop + vertex -153.6753957615697 -92.08758041013873 345.08876684284377 + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.859985921082281e-05 + outer loop + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + vertex -153.55939452029452 -90.28855625499315 345.0887389430549 + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.859985921082281e-05 + outer loop + vertex -153.55939452029452 -90.28855625499315 345.0887389430549 + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + vertex -154.42538830107569 -90.78861102364228 345.08873894423124 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.1763031831993657e-09 + outer loop + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -153.55939452029452 -90.28855625499315 345.0887389430549 + vertex -152.80931236595043 -91.58754692853731 345.08876684284377 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.1763031831993657e-09 + outer loop + vertex -153.55939452029452 -90.28855625499315 345.0887389430549 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450975e-10 + outer loop + vertex -155.4077920701505 -93.08791948747968 338.58876684396813 + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450975e-10 + outer loop + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -155.4077920701505 -93.08791948747968 338.58876684396813 + vertex -151.65717739959013 -99.58389562187321 338.5889063612834 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262024e-10 + outer loop + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -165.1576727591289 -76.20135612420354 345.08840416395947 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262024e-10 + outer loop + vertex -161.40800456756986 -82.6956929792934 345.08854364606714 + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450975e-10 + outer loop + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -155.40785251969305 -93.08781478580067 345.0887668428438 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450975e-10 + outer loop + vertex -151.65723784913268 -99.5837909201942 345.0889063601591 + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + endloop +endfacet +facet normal -0.5000040267876305 0.8660230784555542 -2.7901968550393912e-05 + outer loop + vertex -155.4077920701505 -93.08791948747968 338.58876684396813 + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + vertex -153.67533531202716 -92.08768511181773 338.58876684396813 + endloop +endfacet +facet normal -0.5000040267876305 0.8660230784555542 -2.7901968550393912e-05 + outer loop + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + vertex -155.4077920701505 -93.08791948747968 338.58876684396813 + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.859985921082281e-05 + outer loop + vertex -154.42532785153313 -90.78871572532128 338.5887389453556 + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + vertex -153.55933407075196 -90.28866095667216 338.5887389441793 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.859985921082281e-05 + outer loop + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + vertex -154.42532785153313 -90.78871572532128 338.5887389453556 + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.859985924070794e-05 + outer loop + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -151.45308053755608 -90.80461501921148 338.58876684315146 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.859985924070794e-05 + outer loop + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.4595554534990755e-10 + outer loop + vertex -154.42532785153313 -90.78871572532128 338.5887389453556 + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.4595554534990755e-10 + outer loop + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + vertex -154.42532785153313 -90.78871572532128 338.5887389453556 + vertex -153.67533531202716 -92.08768511181773 338.58876684396813 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.1763031831997787e-09 + outer loop + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.1763031831997787e-09 + outer loop + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + vertex -152.80925191640787 -91.58765163021631 338.58876684396813 + vertex -153.55933407075196 -90.28866095667216 338.5887389441793 + endloop +endfacet +facet normal -0.7073425807270168 0.7068709027592814 -1.7964477783502214e-05 + outer loop + vertex -151.36002307134538 -90.71149545800579 338.58876620861406 + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + endloop +endfacet +facet normal -0.7073425807270168 0.7068709027592814 -1.7964477783502214e-05 + outer loop + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -151.36002307134538 -90.71149545800579 338.58876620861406 + vertex -151.45308053755608 -90.80461501921148 338.58876684315146 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847860747126e-05 + outer loop + vertex -151.29423757731362 -90.59746382436634 338.58876498359865 + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847860747126e-05 + outer loop + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + vertex -151.29423757731362 -90.59746382436634 338.58876498359865 + vertex -151.36002307134538 -90.71149545800579 338.58876620861406 + endloop +endfacet +facet normal -0.9660120955504019 0.25849686860281185 -1.314769925216424e-05 + outer loop + vertex -151.26020722816278 -90.47029118567876 338.5887632515879 + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + endloop +endfacet +facet normal -0.9660120955504019 0.25849686860281185 -1.314769925216424e-05 + outer loop + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + vertex -151.26020722816278 -90.47029118567876 338.5887632515879 + vertex -151.29423757731362 -90.59746382436634 338.58876498359865 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979519616 -9.294556675347818e-06 + outer loop + vertex -151.26025113595045 -90.33864414710705 338.5887611306155 + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979519616 -9.294556675347818e-06 + outer loop + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + vertex -151.26025113595045 -90.33864414710705 338.5887611306155 + vertex -151.26020722816278 -90.47029118567876 338.5887632515879 + endloop +endfacet +facet normal -0.9658394494942373 -0.25914119274548375 -4.80800537325688e-06 + outer loop + vertex -151.29436630843315 -90.21149423677292 338.5887587652224 + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + endloop +endfacet +facet normal -0.9658394494942373 -0.25914119274548375 -4.80800537325688e-06 + outer loop + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + vertex -151.29436630843315 -90.21149423677292 338.5887587652224 + vertex -151.26025113595045 -90.33864414710705 338.5887611306155 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343005e-10 + outer loop + vertex -156.85927450554593 -80.57320451261637 338.5885517588728 + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343005e-10 + outer loop + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + vertex -156.85927450554593 -80.57320451261637 338.5885517588728 + vertex -151.29436630843315 -90.21149423677292 338.5887587652224 + endloop +endfacet +facet normal -0.7099176286020258 -0.7042847155643703 4.74239944011369e-06 + outer loop + vertex -156.95194726657616 -80.47979054908512 338.58854939231514 + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + endloop +endfacet +facet normal -0.7099176286020258 -0.7042847155643703 4.74239944011369e-06 + outer loop + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -156.95194726657616 -80.47979054908512 338.58854939231514 + vertex -156.85927450554593 -80.57320451261637 338.5885517588728 + endloop +endfacet +facet normal -0.503445474453565 -0.8640269985173652 9.235696754194322e-06 + outer loop + vertex -157.0656395926947 -80.41354506469274 338.58854726790554 + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + endloop +endfacet +facet normal -0.503445474453565 -0.8640269985173652 9.235696754194322e-06 + outer loop + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + vertex -157.0656395926947 -80.41354506469274 338.58854726790554 + vertex -156.95194726657616 -80.47979054908512 338.58854939231514 + endloop +endfacet +facet normal -0.2626643432025935 -0.964887269393866 1.3099596597201584e-05 + outer loop + vertex -157.1926035397623 -80.37898257972483 338.58854553041897 + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + endloop +endfacet +facet normal -0.2626643432025935 -0.964887269393866 1.3099596597201584e-05 + outer loop + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + vertex -157.1926035397623 -80.37898257972483 338.58854553041897 + vertex -157.0656395926947 -80.41354506469274 338.58854726790554 + endloop +endfacet +facet normal -0.00398307103919987 -0.9999920674119505 1.607078058017511e-05 + outer loop + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + vertex -157.1926035397623 -80.37898257972483 338.58854553041897 + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + endloop +endfacet +facet normal -0.00398307103919987 -0.9999920674119505 1.607078058017511e-05 + outer loop + vertex -157.1926035397623 -80.37898257972483 338.58854553041897 + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + vertex -157.32418672460412 -80.37845847041429 338.58854429826226 + endloop +endfacet +facet normal 0.25496964083812906 -0.9669490586007048 1.7946767403102802e-05 + outer loop + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + vertex -157.32418672460412 -80.37845847041429 338.58854429826226 + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + endloop +endfacet +facet normal 0.25496964083812906 -0.9669490586007048 1.7946767403102802e-05 + outer loop + vertex -157.32418672460412 -80.37845847041429 338.58854429826226 + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + vertex -157.45142197062432 -80.41200845394518 338.588543655405 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.859985831256329e-05 + outer loop + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + vertex -157.45142197062432 -80.41200845394518 338.588543655405 + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.859985831256329e-05 + outer loop + vertex -157.45142197062432 -80.41200845394518 338.588543655405 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + vertex -158.80983781412434 -81.19571587379009 338.5885436461536 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116078e-10 + outer loop + vertex -158.05983597451893 -82.49470136783958 338.5885715451121 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116078e-10 + outer loop + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + vertex -158.05983597451893 -82.49470136783958 338.5885715451121 + vertex -158.80983781412434 -81.19571587379009 338.5885436461536 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.859985921082281e-05 + outer loop + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + vertex -158.05983597451893 -82.49470136783958 338.5885715451121 + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.859985921082281e-05 + outer loop + vertex -158.05983597451893 -82.49470136783958 338.5885715451121 + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + vertex -158.92582975529984 -82.99475613648892 338.5885715462884 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.17630317955688e-09 + outer loop + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.17630317955688e-09 + outer loop + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + vertex -158.92582975529984 -82.99475613648892 338.5885715462884 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801665e-05 + outer loop + vertex -159.6759119088913 -81.69576546424761 338.5885436464996 + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + vertex -161.4079441180273 -82.6957976809724 338.5885436471915 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + vertex -158.05984527444852 -82.49468525988897 339.58857154493916 + vertex -158.9258390552295 -82.99474002853829 339.5885715461155 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + vertex -153.55934337068157 -90.28864484872153 339.5887389440063 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -154.42533715146274 -90.78869961737067 339.5887389451826 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -157.45143127055394 -80.41199234599456 339.58854365523194 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -157.32419602453373 -80.37844236246367 339.5885442980893 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -157.19261283969195 -80.37896647177418 339.588545530246 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -157.06564889262432 -80.41352895674213 339.58854726773257 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -156.9519565665058 -80.47977444113447 339.58854939214217 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -156.85928380547557 -80.57318840466576 339.58855175869985 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.29437560836277 -90.21147812882229 339.58875876504936 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.26026043588007 -90.33862803915643 339.5887611304426 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.2602165280924 -90.47027507772815 339.5887632514149 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.29424687724313 -90.59744771641572 339.5887649834256 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.3600323712749 -90.71147935005517 339.5887662084411 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.4530898374857 -90.80459891126087 339.5887668429785 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -155.40780137008014 -93.08790337952905 339.58876684379516 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -153.67535391436576 -92.08765289231421 339.58876684344915 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -152.8092612163375 -91.5876355222657 339.58876684379516 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -151.65718669951977 -99.58387951392258 339.5889063611105 + vertex -143.95452409071237 -93.98184121819368 339.5888877579744 + vertex -144.3205240866398 -95.34787342961305 339.5889063581796 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + vertex -157.820958996636 -71.9654386336224 339.58840416198 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -165.157621609516 -76.20144471793193 339.58840416491086 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + vertex -156.45492678515333 -72.33143862931345 339.5884227614933 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + endloop +endfacet +facet normal 9.299929623335791e-06 -1.6107950615988392e-05 -0.9999999998270227 + outer loop + vertex -161.40795341795692 -82.69578157302179 339.5885436470185 + vertex -158.80984711405395 -81.19569976583948 339.5885436459806 + vertex -159.6759212088209 -81.695749356297 339.5885436463266 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -159.6762746061466 -81.69513725417363 377.58854363975377 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + vertex -158.92619245255517 -82.99412792641493 377.5885715395426 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -158.0601986717742 -82.4940731577656 377.5885715383663 + vertex -158.92619245255517 -82.99412792641493 377.5885715395426 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -155.40815476740582 -93.08729127740568 377.58876683722235 + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -144.32087748396546 -95.34726132748968 377.58890635160674 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -165.15797500684164 -76.20083261580857 377.588404158338 + vertex -157.82131239396168 -71.96482653149903 377.5884041554072 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + vertex -157.82131239396168 -71.96482653149903 377.5884041554072 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -157.45178466787962 -80.41138024387119 377.58854364865914 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -157.32454942185942 -80.3778302603403 377.5885442915164 + vertex -157.45178466787962 -80.41138024387119 377.58854364865914 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -157.1929662370176 -80.37835436965086 377.58854552367313 + vertex -157.32454942185942 -80.3778302603403 377.5885442915164 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -157.06600228994998 -80.41291685461876 377.5885472611597 + vertex -157.1929662370176 -80.37835436965086 377.58854552367313 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -156.95230996383145 -80.47916233901113 377.58854938556937 + vertex -157.06600228994998 -80.41291685461876 377.5885472611597 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -156.85963720280122 -80.5725763025424 377.58855175212705 + vertex -156.95230996383145 -80.47916233901113 377.58854938556937 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + vertex -156.85963720280122 -80.5725763025424 377.58855175212705 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -159.6762746061466 -81.69513725417363 377.58854363975377 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -151.29472900568845 -90.21086602669894 377.5887587584765 + vertex -156.85963720280122 -80.5725763025424 377.58855175212705 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -151.26061383320575 -90.33801593703306 377.58876112386974 + vertex -151.29472900568845 -90.21086602669894 377.5887587584765 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -151.26056992541805 -90.46966297560478 377.5887632448421 + vertex -151.26061383320575 -90.33801593703306 377.58876112386974 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -151.29460027456892 -90.59683561429236 377.5887649768528 + vertex -151.26056992541805 -90.46966297560478 377.5887632448421 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -151.36038576860065 -90.7108672479318 377.5887662018683 + vertex -151.29460027456892 -90.59683561429236 377.5887649768528 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -151.45344323481135 -90.8039868091375 377.5887668364056 + vertex -151.36038576860065 -90.7108672479318 377.5887662018683 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + vertex -151.45344323481135 -90.8039868091375 377.5887668364056 + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -153.55969676800726 -90.28803274659816 377.58873893743345 + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + vertex -154.42569054878842 -90.7880875152473 377.58873893860977 + endloop +endfacet +facet normal 9.29992962333579e-06 -1.610795061598839e-05 -0.9999999998270227 + outer loop + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + vertex -154.42569054878842 -90.7880875152473 377.58873893860977 + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262066e-10 + outer loop + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + vertex -165.15803545638423 -76.20072791412956 384.08840415721363 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262066e-10 + outer loop + vertex -161.40836726482513 -82.69506476921941 384.08854363932136 + vertex -165.15803545638423 -76.20072791412956 384.08840415721363 + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801662e-05 + outer loop + vertex -157.82137284350424 -71.96472182982002 384.08840415428284 + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + vertex -165.15803545638423 -76.20072791412956 384.08840415721363 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801662e-05 + outer loop + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + vertex -165.15803545638423 -76.20072791412956 384.08840415721363 + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262066e-10 + outer loop + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262066e-10 + outer loop + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605115e-05 + outer loop + vertex -143.95487748803805 -93.98122911607032 377.58888775140156 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -144.32087748396546 -95.34726132748968 377.58890635160674 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605115e-05 + outer loop + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + vertex -144.32087748396546 -95.34726132748968 377.58890635160674 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -144.32087748396546 -95.34726132748968 377.58890635160674 + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624581e-05 + outer loop + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -157.82137284350424 -71.96472182982002 384.08840415428284 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624581e-05 + outer loop + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + vertex -157.82137284350424 -71.96472182982002 384.08840415428284 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -158.81026096092216 -81.1949829620371 384.0885436382834 + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + vertex -158.06025912131676 -82.4939684560866 384.08857153724193 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -158.9262529020977 -82.99402322473593 384.08857153841825 + vertex -158.06025912131676 -82.4939684560866 384.08857153724193 + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -157.82137284350424 -71.96472182982002 384.08840415428284 + vertex -165.15803545638423 -76.20072791412956 384.08840415721363 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -161.40836726482513 -82.69506476921941 384.08854363932136 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -165.15803545638423 -76.20072791412956 384.08840415721363 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -158.81026096092216 -81.1949829620371 384.0885436382834 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -161.40836726482513 -82.69506476921941 384.08854363932136 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + vertex -158.81026096092216 -81.1949829620371 384.0885436382834 + vertex -161.40836726482513 -82.69506476921941 384.08854363932136 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -153.55975721754982 -90.28792804491917 384.08873893630914 + vertex -154.42575099833098 -90.78798281356829 384.08873893748546 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -153.67575845882502 -92.08695220006474 384.088766836098 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + vertex -154.42575099833098 -90.78798281356829 384.08873893748546 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -158.81026096092216 -81.1949829620371 384.0885436382834 + vertex -157.45184511742218 -80.41127554219219 384.0885436475348 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -157.32460987140195 -80.37772555866131 384.0885442903921 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -157.45184511742218 -80.41127554219219 384.0885436475348 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -157.19302668656013 -80.37824966797186 384.08854552254877 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -157.32460987140195 -80.37772555866131 384.0885442903921 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -157.06606273949254 -80.41281215293975 384.08854726003534 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -157.19302668656013 -80.37824966797186 384.08854552254877 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -156.95237041337398 -80.47905763733213 384.088549384445 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -157.06606273949254 -80.41281215293975 384.08854726003534 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -156.85969765234378 -80.5724716008634 384.0885517510027 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -156.95237041337398 -80.47905763733213 384.088549384445 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -156.85969765234378 -80.5724716008634 384.0885517510027 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -151.294789455231 -90.21076132501993 384.0887587573522 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -156.85969765234378 -80.5724716008634 384.0885517510027 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -151.2606742827483 -90.33791123535406 384.0887611227454 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.294789455231 -90.21076132501993 384.0887587573522 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -151.26063037496064 -90.46955827392577 384.0887632437177 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.2606742827483 -90.33791123535406 384.0887611227454 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -151.29466072411145 -90.59673091261335 384.08876497572845 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.26063037496064 -90.46955827392577 384.0887632437177 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -151.36044621814324 -90.7107625462528 384.08876620074386 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.29466072411145 -90.59673091261335 384.08876497572845 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -151.45350368435393 -90.80388210745849 384.08876683528126 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.36044621814324 -90.7107625462528 384.08876620074386 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.45350368435393 -90.80388210745849 384.08876683528126 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -155.40821521694838 -93.08718657572669 384.088766836098 + vertex -151.65760054638798 -99.58316271012022 384.0889063534133 + vertex -153.67575845882502 -92.08695220006474 384.088766836098 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + vertex -153.67575845882502 -92.08695220006474 384.088766836098 + vertex -151.65760054638798 -99.58316271012022 384.0889063534133 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + vertex -151.65760054638798 -99.58316271012022 384.0889063534133 + endloop +endfacet +facet normal -9.29992962341468e-06 1.6107950615944885e-05 0.9999999998270227 + outer loop + vertex -144.32093793350802 -95.34715662581067 384.08890635048243 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -151.65760054638798 -99.58316271012022 384.0889063534133 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + vertex -144.32093793350802 -95.34715662581067 384.08890635048243 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -151.65760054638798 -99.58316271012022 384.0889063534133 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + vertex -144.32093793350802 -95.34715662581067 384.08890635048243 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605115e-05 + outer loop + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + endloop +endfacet +facet normal 0.9659306400586332 -0.2588010788674356 1.3151841973605115e-05 + outer loop + vertex -144.32093793350802 -95.34715662581067 384.08890635048243 + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801662e-05 + outer loop + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + vertex -157.82131239396168 -71.96482653149903 377.5884041554072 + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801662e-05 + outer loop + vertex -165.15797500684164 -76.20083261580857 377.588404158338 + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + vertex -157.82131239396168 -71.96482653149903 377.5884041554072 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262066e-10 + outer loop + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262066e-10 + outer loop + vertex -156.45534063202155 -72.33072182551109 384.0884227537961 + vertex -143.95493793758058 -93.98112441439132 384.0888877502772 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624581e-05 + outer loop + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + endloop +endfacet +facet normal 0.2588010790344744 0.9659306400138717 -1.3152331228624581e-05 + outer loop + vertex -157.82131239396168 -71.96482653149903 377.5884041554072 + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + vertex -156.455280182479 -72.3308265271901 377.5884227549205 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.8599859240707938e-05 + outer loop + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + vertex -151.45344323481135 -90.8039868091375 377.5887668364056 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.8599859240707938e-05 + outer loop + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -151.45344323481135 -90.8039868091375 377.5887668364056 + endloop +endfacet +facet normal -0.7073425807271966 0.7068709027591015 -1.7964477816981822e-05 + outer loop + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + vertex -151.36038576860065 -90.7108672479318 377.5887662018683 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + endloop +endfacet +facet normal -0.7073425807271966 0.7068709027591015 -1.7964477816981822e-05 + outer loop + vertex -151.45344323481135 -90.8039868091375 377.5887668364056 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + vertex -151.36038576860065 -90.7108672479318 377.5887662018683 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847944957373e-05 + outer loop + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + vertex -151.29460027456892 -90.59683561429236 377.5887649768528 + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847944957373e-05 + outer loop + vertex -151.36038576860065 -90.7108672479318 377.5887662018683 + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + vertex -151.29460027456892 -90.59683561429236 377.5887649768528 + endloop +endfacet +facet normal -0.9660120955503078 0.2584968686031633 -1.3147699300030632e-05 + outer loop + vertex -151.26056992541805 -90.46966297560478 377.5887632448421 + vertex -151.29460027456892 -90.59683561429236 377.5887649768528 + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + endloop +endfacet +facet normal -0.9660120955503078 0.2584968686031633 -1.3147699300030632e-05 + outer loop + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + vertex -151.29460027456892 -90.59683561429236 377.5887649768528 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979508525 -9.294556675347818e-06 + outer loop + vertex -151.26061383320575 -90.33801593703306 377.58876112386974 + vertex -151.26056992541805 -90.46966297560478 377.5887632448421 + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979508525 -9.294556675347818e-06 + outer loop + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + vertex -151.26056992541805 -90.46966297560478 377.5887632448421 + endloop +endfacet +facet normal -0.9658394494942373 -0.2591411927454837 -4.80800537325688e-06 + outer loop + vertex -151.29472900568845 -90.21086602669894 377.5887587584765 + vertex -151.26061383320575 -90.33801593703306 377.58876112386974 + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + endloop +endfacet +facet normal -0.9658394494942373 -0.2591411927454837 -4.80800537325688e-06 + outer loop + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + vertex -151.26061383320575 -90.33801593703306 377.58876112386974 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343047e-10 + outer loop + vertex -156.85963720280122 -80.5725763025424 377.58855175212705 + vertex -151.29472900568845 -90.21086602669894 377.5887587584765 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343047e-10 + outer loop + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + vertex -151.29472900568845 -90.21086602669894 377.5887587584765 + endloop +endfacet +facet normal -0.709917628601995 -0.7042847155644013 4.742399434363146e-06 + outer loop + vertex -156.85963720280122 -80.5725763025424 377.58855175212705 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + vertex -156.95230996383145 -80.47916233901113 377.58854938556937 + endloop +endfacet +facet normal -0.709917628601995 -0.7042847155644013 4.742399434363146e-06 + outer loop + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + vertex -156.95230996383145 -80.47916233901113 377.58854938556937 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + endloop +endfacet +facet normal -0.5034454744536385 -0.8640269985173223 9.235696742989532e-06 + outer loop + vertex -157.06600228994998 -80.41291685461876 377.5885472611597 + vertex -156.95230996383145 -80.47916233901113 377.58854938556937 + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + endloop +endfacet +facet normal -0.5034454744536385 -0.8640269985173223 9.235696742989532e-06 + outer loop + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + vertex -156.95230996383145 -80.47916233901113 377.58854938556937 + endloop +endfacet +facet normal -0.262664343202477 -0.9648872693938976 1.3099596581315964e-05 + outer loop + vertex -157.1929662370176 -80.37835436965086 377.58854552367313 + vertex -157.06600228994998 -80.41291685461876 377.5885472611597 + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + endloop +endfacet +facet normal -0.262664343202477 -0.9648872693938976 1.3099596581315964e-05 + outer loop + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + vertex -157.06600228994998 -80.41291685461876 377.5885472611597 + endloop +endfacet +facet normal -0.003983071039348085 -0.9999920674119498 1.6070780560681012e-05 + outer loop + vertex -157.1929662370176 -80.37835436965086 377.58854552367313 + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + vertex -157.32454942185942 -80.3778302603403 377.5885442915164 + endloop +endfacet +facet normal -0.003983071039348085 -0.9999920674119498 1.6070780560681012e-05 + outer loop + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + vertex -157.32454942185942 -80.3778302603403 377.5885442915164 + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + endloop +endfacet +facet normal 0.254969640838129 -0.9669490586007048 1.79467674031028e-05 + outer loop + vertex -157.32454942185942 -80.3778302603403 377.5885442915164 + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + vertex -157.45178466787962 -80.41138024387119 377.58854364865914 + endloop +endfacet +facet normal 0.254969640838129 -0.9669490586007048 1.79467674031028e-05 + outer loop + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + vertex -157.45178466787962 -80.41138024387119 377.58854364865914 + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.859985831256329e-05 + outer loop + vertex -157.45178466787962 -80.41138024387119 377.58854364865914 + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.859985831256329e-05 + outer loop + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116082e-10 + outer loop + vertex -158.0601986717742 -82.4940731577656 377.5885715383663 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116082e-10 + outer loop + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + vertex -158.81020051137963 -81.19508766371611 377.58854363940776 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.8599859210822807e-05 + outer loop + vertex -158.0601986717742 -82.4940731577656 377.5885715383663 + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + vertex -158.92619245255517 -82.99412792641493 377.5885715395426 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.8599859210822807e-05 + outer loop + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + vertex -158.92619245255517 -82.99412792641493 377.5885715395426 + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.1763031795568804e-09 + outer loop + vertex -159.6762746061466 -81.69513725417363 377.58854363975377 + vertex -158.92619245255517 -82.99412792641493 377.5885715395426 + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.1763031795568804e-09 + outer loop + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + vertex -158.92619245255517 -82.99412792641493 377.5885715395426 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -159.6762746061466 -81.69513725417363 377.58854363975377 + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + endloop +endfacet +facet normal -0.5000040268793279 0.8660230786143782 -2.0291151848476758e-05 + outer loop + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + endloop +endfacet +facet normal -0.5000040268793279 0.8660230786143782 -2.0291151848476758e-05 + outer loop + vertex -155.40815476740582 -93.08729127740568 377.58876683722235 + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.459555444341411e-10 + outer loop + vertex -154.42569054878842 -90.7880875152473 377.58873893860977 + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.459555444341411e-10 + outer loop + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + vertex -153.67569800928243 -92.08705690174375 377.5887668372223 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.8599859210822807e-05 + outer loop + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + vertex -153.55969676800726 -90.28803274659816 377.58873893743345 + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.8599859210822807e-05 + outer loop + vertex -154.42569054878842 -90.7880875152473 377.58873893860977 + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + vertex -153.55969676800726 -90.28803274659816 377.58873893743345 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.1763031832001919e-09 + outer loop + vertex -152.80961461366317 -91.58702342014233 377.5887668372223 + vertex -153.55969676800726 -90.28803274659816 377.58873893743345 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.1763031832001919e-09 + outer loop + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -153.55969676800726 -90.28803274659816 377.58873893743345 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450979e-10 + outer loop + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + vertex -155.40821521694838 -93.08718657572669 384.088766836098 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450979e-10 + outer loop + vertex -151.65760054638798 -99.58316271012022 384.0889063534133 + vertex -155.40821521694838 -93.08718657572669 384.088766836098 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262066e-10 + outer loop + vertex -165.15797500684164 -76.20083261580857 377.588404158338 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262066e-10 + outer loop + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + vertex -161.40830681528257 -82.69516947089842 377.58854364044566 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450979e-10 + outer loop + vertex -155.40815476740582 -93.08729127740568 377.58876683722235 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450979e-10 + outer loop + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + vertex -151.65754009684545 -99.58326741179923 377.58890635453764 + endloop +endfacet +facet normal -0.5000040269606483 0.86602307875523 -9.297749943632543e-06 + outer loop + vertex -153.67575845882502 -92.08695220006474 384.088766836098 + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + vertex -155.40821521694838 -93.08718657572669 384.088766836098 + endloop +endfacet +facet normal -0.5000040269606483 0.86602307875523 -9.297749943632543e-06 + outer loop + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + vertex -155.40821521694838 -93.08718657572669 384.088766836098 + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.8599859210822807e-05 + outer loop + vertex -153.55975721754982 -90.28792804491917 384.08873893630914 + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + vertex -154.42575099833098 -90.78798281356829 384.08873893748546 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.8599859210822807e-05 + outer loop + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + vertex -154.42575099833098 -90.78798281356829 384.08873893748546 + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.8599859240707938e-05 + outer loop + vertex -151.45350368435393 -90.80388210745849 384.08876683528126 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + endloop +endfacet +facet normal -0.5000242815412254 0.8660113841764592 -1.8599859240707938e-05 + outer loop + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.459555431113667e-10 + outer loop + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + vertex -154.42575099833098 -90.78798281356829 384.08873893748546 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.459555431113667e-10 + outer loop + vertex -153.67575845882502 -92.08695220006474 384.088766836098 + vertex -154.42575099833098 -90.78798281356829 384.08873893748546 + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.176303183199779e-09 + outer loop + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + endloop +endfacet +facet normal 0.8659937807808712 0.5000547686492475 -1.176303183199779e-09 + outer loop + vertex -153.55975721754982 -90.28792804491917 384.08873893630914 + vertex -152.80967506320573 -91.58691871846332 384.088766836098 + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + endloop +endfacet +facet normal -0.7073425807270168 0.7068709027592814 -1.7964477850463886e-05 + outer loop + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + vertex -151.36044621814324 -90.7107625462528 384.08876620074386 + endloop +endfacet +facet normal -0.7073425807270168 0.7068709027592814 -1.7964477850463886e-05 + outer loop + vertex -151.45350368435393 -90.80388210745849 384.08876683528126 + vertex -151.36044621814324 -90.7107625462528 384.08876620074386 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104848029167624e-05 + outer loop + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + vertex -151.29466072411145 -90.59673091261335 384.08876497572845 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104848029167624e-05 + outer loop + vertex -151.36044621814324 -90.7107625462528 384.08876620074386 + vertex -151.29466072411145 -90.59673091261335 384.08876497572845 + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + endloop +endfacet +facet normal -0.9660120955504019 0.25849686860281185 -1.3147699347887458e-05 + outer loop + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + vertex -151.26063037496064 -90.46955827392577 384.0887632437177 + endloop +endfacet +facet normal -0.9660120955504019 0.25849686860281185 -1.3147699347887458e-05 + outer loop + vertex -151.29466072411145 -90.59673091261335 384.08876497572845 + vertex -151.26063037496064 -90.46955827392577 384.0887632437177 + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979519616 -9.294556675347816e-06 + outer loop + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + vertex -151.2606742827483 -90.33791123535406 384.0887611227454 + endloop +endfacet +facet normal -0.9999999443367676 -0.00033352671979519616 -9.294556675347816e-06 + outer loop + vertex -151.26063037496064 -90.46955827392577 384.0887632437177 + vertex -151.2606742827483 -90.33791123535406 384.0887611227454 + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + endloop +endfacet +facet normal -0.9658394494942373 -0.25914119274548375 -4.808005373256879e-06 + outer loop + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + vertex -151.294789455231 -90.21076132501993 384.0887587573522 + endloop +endfacet +facet normal -0.9658394494942373 -0.25914119274548375 -4.808005373256879e-06 + outer loop + vertex -151.2606742827483 -90.33791123535406 384.0887611227454 + vertex -151.294789455231 -90.21076132501993 384.0887587573522 + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343047e-10 + outer loop + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + vertex -156.85969765234378 -80.5724716008634 384.0885517510027 + endloop +endfacet +facet normal -0.8660161037050097 -0.5000161078641306 3.4595554214343047e-10 + outer loop + vertex -151.294789455231 -90.21076132501993 384.0887587573522 + vertex -156.85969765234378 -80.5724716008634 384.0885517510027 + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + endloop +endfacet +facet normal -0.7099176286020258 -0.7042847155643703 4.742399428611032e-06 + outer loop + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + vertex -156.95237041337398 -80.47905763733213 384.088549384445 + endloop +endfacet +facet normal -0.7099176286020258 -0.7042847155643703 4.742399428611032e-06 + outer loop + vertex -156.85969765234378 -80.5724716008634 384.0885517510027 + vertex -156.95237041337398 -80.47905763733213 384.088549384445 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + endloop +endfacet +facet normal -0.503445474453565 -0.8640269985173652 9.23569673178749e-06 + outer loop + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + vertex -157.06606273949254 -80.41281215293975 384.08854726003534 + endloop +endfacet +facet normal -0.503445474453565 -0.8640269985173652 9.23569673178749e-06 + outer loop + vertex -156.95237041337398 -80.47905763733213 384.088549384445 + vertex -157.06606273949254 -80.41281215293975 384.08854726003534 + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + endloop +endfacet +facet normal -0.2626643432025935 -0.964887269393866 1.3099596565427166e-05 + outer loop + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + vertex -157.19302668656013 -80.37824966797186 384.08854552254877 + endloop +endfacet +facet normal -0.2626643432025935 -0.964887269393866 1.3099596565427166e-05 + outer loop + vertex -157.06606273949254 -80.41281215293975 384.08854726003534 + vertex -157.19302668656013 -80.37824966797186 384.08854552254877 + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + endloop +endfacet +facet normal -0.00398307103919987 -0.9999920674119505 1.60707805411897e-05 + outer loop + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + vertex -157.19302668656013 -80.37824966797186 384.08854552254877 + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + endloop +endfacet +facet normal -0.00398307103919987 -0.9999920674119505 1.60707805411897e-05 + outer loop + vertex -157.32460987140195 -80.37772555866131 384.0885442903921 + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + vertex -157.19302668656013 -80.37824966797186 384.08854552254877 + endloop +endfacet +facet normal 0.25496964083812906 -0.9669490586007048 1.79467674031028e-05 + outer loop + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + vertex -157.32460987140195 -80.37772555866131 384.0885442903921 + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + endloop +endfacet +facet normal 0.25496964083812906 -0.9669490586007048 1.79467674031028e-05 + outer loop + vertex -157.45184511742218 -80.41127554219219 384.0885436475348 + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + vertex -157.32460987140195 -80.37772555866131 384.0885442903921 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.8599858312563285e-05 + outer loop + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + vertex -157.45184511742218 -80.41127554219219 384.0885436475348 + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + endloop +endfacet +facet normal 0.499725310301553 -0.8661839376818655 1.8599858312563285e-05 + outer loop + vertex -158.81026096092216 -81.1949829620371 384.0885436382834 + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -157.45184511742218 -80.41127554219219 384.0885436475348 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116082e-10 + outer loop + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -158.06025912131676 -82.4939684560866 384.08857153724193 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.459555431116082e-10 + outer loop + vertex -158.81026096092216 -81.1949829620371 384.0885436382834 + vertex -158.06025912131676 -82.4939684560866 384.08857153724193 + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.8599859210822807e-05 + outer loop + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + vertex -158.06025912131676 -82.4939684560866 384.08857153724193 + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310484 1.8599859210822807e-05 + outer loop + vertex -158.9262529020977 -82.99402322473593 384.08857153841825 + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + vertex -158.06025912131676 -82.4939684560866 384.08857153724193 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.1763031795568804e-09 + outer loop + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.1763031795568804e-09 + outer loop + vertex -158.9262529020977 -82.99402322473593 384.08857153841825 + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801662e-05 + outer loop + vertex -161.40836726482513 -82.69506476921941 384.08854363932136 + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + vertex -159.67633505568912 -81.69503255249462 384.0885436386294 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -158.92624360216809 -82.99403933268654 383.0885715385912 + vertex -158.06024982138715 -82.4939845640372 383.0885715374149 + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -153.5597479176202 -90.28794415286977 383.08873893648206 + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -154.42574169840134 -90.78799892151892 383.0887389376584 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -157.45183581749254 -80.4112916501428 383.08854364770775 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -157.32460057147236 -80.37774166661191 383.0885442905651 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -157.19301738663054 -80.37826577592243 383.08854552272174 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -157.06605343956292 -80.41282826089036 383.0885472602083 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -156.9523611134444 -80.4790737452827 383.088549384618 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -156.85968835241414 -80.57248770881401 383.08855175117566 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.29478015530137 -90.21077743297054 383.08875875752517 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.26066498281867 -90.33792734330467 383.08876112291836 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.260621075031 -90.46957438187637 383.0887632438907 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.29465142418175 -90.59674702056395 383.0887649759014 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.3604369182135 -90.71077865420341 383.0887662009169 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.4534943844243 -90.80389821540912 383.0887668354543 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -155.40820591701873 -93.08720268367729 383.08876683627096 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -153.67575846130435 -92.08695219646245 383.0887668359249 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -152.8096657632761 -91.58693482641395 383.08876683627096 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -144.32092863357838 -95.34717273376128 383.0889063506554 + vertex -143.95492863765097 -93.98114052234195 383.08888775045017 + vertex -151.65759124645837 -99.58317881807082 383.08890635358625 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -157.82136354357462 -71.96473793777064 383.0884041544558 + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -165.15802615645458 -76.20074402208017 383.0884041573866 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -156.45533133209193 -72.33073793346169 383.0884227539691 + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + endloop +endfacet +facet normal -9.29992962333579e-06 1.610795061598839e-05 0.9999999998270227 + outer loop + vertex -159.6763257557595 -81.69504866044524 383.0885436388024 + vertex -158.81025166099258 -81.19499906998772 383.0885436384564 + vertex -161.40835796489552 -82.69508087717003 383.0885436394943 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -154.42569054878822 -90.78808751524727 377.5887389386096 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + vertex -153.5596967680071 -90.28803274659813 377.5887389374333 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -165.15797500684164 -76.20083261580862 377.58840415833777 + vertex -161.40830681528254 -82.69516947089848 377.5885436404455 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -159.6762746061464 -81.69513725417359 377.5885436397536 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -161.40830681528254 -82.69516947089848 377.5885436404455 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -159.6762746061464 -81.69513725417359 377.5885436397536 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -158.92619245255497 -82.99412792641489 377.58857153954244 + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + vertex -159.6762746061464 -81.69513725417359 377.5885436397536 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -157.45178466787942 -80.41138024387115 377.5885436486589 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -157.32454942185925 -80.37783026034028 377.58854429151626 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -157.45178466787942 -80.41138024387115 377.5885436486589 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -157.19296623701752 -80.37835436965082 377.58854552367296 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -157.32454942185925 -80.37783026034028 377.58854429151626 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -157.0660022899498 -80.41291685461871 377.58854726115953 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -157.19296623701752 -80.37835436965082 377.58854552367296 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -156.95230996383125 -80.4791623390111 377.58854938556914 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -157.0660022899498 -80.41291685461871 377.58854726115953 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -156.85963720280094 -80.5725763025423 377.5885517521269 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -156.95230996383125 -80.4791623390111 377.58854938556914 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -156.85963720280094 -80.5725763025423 377.5885517521269 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.6575400968454 -99.58326741179927 377.5889063545374 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + vertex -155.4081547674058 -93.08729127740574 377.5887668372221 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + vertex -155.4081547674058 -93.08729127740574 377.5887668372221 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -152.809614613663 -91.58702342014229 377.5887668372221 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -153.5596967680071 -90.28803274659813 377.5887389374333 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + vertex -152.809614613663 -91.58702342014229 377.5887668372221 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.51056309279548 -90.83701426455075 377.58876683719944 + vertex -152.809614613663 -91.58702342014229 377.5887668372221 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.45344323481117 -90.80398680913747 377.58876683640545 + vertex -151.51056309279548 -90.83701426455075 377.58876683719944 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.36038576860037 -90.71086724793176 377.58876620186805 + vertex -151.45344323481117 -90.80398680913747 377.58876683640545 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.29460027456864 -90.5968356142923 377.5887649768526 + vertex -151.36038576860037 -90.71086724793176 377.58876620186805 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.26056992541777 -90.46966297560473 377.58876324484186 + vertex -151.29460027456864 -90.5968356142923 377.5887649768526 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.26061383320555 -90.33801593703302 377.5887611238696 + vertex -151.26056992541777 -90.46966297560473 377.58876324484186 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -151.26061383320555 -90.33801593703302 377.5887611238696 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -147.68052402775768 -87.4719775068708 377.58874825244726 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -147.68052402775768 -87.4719775068708 377.58874825244726 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + vertex -147.68052402775768 -87.4719775068708 377.58874825244726 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -151.32756309483193 -90.1539981588412 377.58875753709685 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -156.82774028038585 -80.62782101973391 377.58855293864514 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -156.85963720280094 -80.5725763025423 377.5885517521269 + vertex -156.82774028038585 -80.62782101973391 377.58855293864514 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + endloop +endfacet +facet normal -9.299929620330117e-06 1.610795061776816e-05 0.9999999998270227 + outer loop + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + vertex -158.92619245255497 -82.99412792641489 377.58857153954244 + vertex -158.06019867177403 -82.49407315776557 377.5885715383661 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262004e-10 + outer loop + vertex -165.15797500684164 -76.20083261580862 377.58840415833777 + vertex -165.15767275912887 -76.20135612420364 345.08840416395947 + vertex -161.40830681528254 -82.69516947089848 377.5885436404455 + endloop +endfacet +facet normal -0.8660161037050138 -0.5000161078641236 3.4595554199262004e-10 + outer loop + vertex -161.4080045675698 -82.69569297929348 345.0885436460672 + vertex -161.40830681528254 -82.69516947089848 377.5885436404455 + vertex -165.15767275912887 -76.20135612420364 345.08840416395947 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801655e-05 + outer loop + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + vertex -165.15767275912887 -76.20135612420364 345.08840416395947 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801655e-05 + outer loop + vertex -165.15797500684164 -76.20083261580862 377.58840415833777 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -165.15767275912887 -76.20135612420364 345.08840416395947 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + vertex -145.477573562092 -90.31477259481457 350.95058335666164 + vertex -147.24721372819238 -87.22249296133373 345.088748257896 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.4025996892026 -90.44452682328128 350.5888147525761 + vertex -147.24721372819238 -87.22249296133373 345.088748257896 + vertex -145.477573562092 -90.31477259481457 350.95058335666164 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.28341317271986 -90.650976267398 350.27815904985096 + vertex -147.24721372819238 -87.22249296133373 345.088748257896 + vertex -145.4025996892026 -90.44452682328128 350.5888147525761 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -147.24721372819238 -87.22249296133373 345.088748257896 + vertex -145.28341317271986 -90.650976267398 350.27815904985096 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + vertex -145.477573562092 -90.31477259481457 350.95058335666164 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.5043862146047 -90.27079659047236 371.3388109089007 + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.12813637677695 -90.92005173872194 350.0397869212441 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -145.28341317271986 -90.650976267398 350.27815904985096 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.9473511584104 -91.23341618855065 349.88994303339155 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -145.12813637677695 -90.92005173872194 350.0397869212441 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.75337773149027 -91.56971434748758 349.8388389996217 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.9473511584104 -91.23341618855065 349.88994303339155 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.5594350645048 -91.9060280517601 349.88995747538263 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.75337773149027 -91.56971434748758 349.8388389996217 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.37874002970375 -92.21943807820675 350.0398148210284 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.5594350645048 -91.9060280517601 349.88995747538263 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.22360669509604 -92.48858605145969 350.2781985061043 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.37874002970375 -92.21943807820675 350.0398148210284 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.10460714106532 -92.69512998192992 350.58886307642 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.22360669509604 -92.48858605145969 350.2781985061043 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.02985099056264 -92.82499424208574 350.95063725490604 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.10460714106532 -92.69512998192992 350.58886307642 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.02985099056264 -92.82499424208574 350.95063725490604 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + vertex -145.28465695873095 -90.65121896362321 372.3994792183773 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.4038904470938 -90.44481001456674 372.088814621489 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + vertex -145.28465695873095 -90.65121896362321 372.3994792183773 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.47883600434272 -90.31505502753791 371.72704041352597 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + vertex -145.4038904470938 -90.44481001456674 372.088814621489 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.5043862146047 -90.27079659047236 371.3388109089007 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + vertex -145.47883600434272 -90.31505502753791 371.72704041352597 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.1292611044434 -90.92021544593588 372.63786292531034 + vertex -145.28465695873095 -90.65121896362321 372.3994792183773 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.94829285489726 -91.23346779577298 372.7877202866084 + vertex -145.1292611044434 -90.92021544593588 372.63786292531034 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.75408489723483 -91.56962838316704 372.8388387707501 + vertex -144.94829285489726 -91.23346779577298 372.7877202866084 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.5598721828269 -91.9057884196188 372.7877347375183 + vertex -144.75408489723483 -91.56962838316704 372.8388387707501 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.3788899872088 -92.21903915417484 372.6378908423245 + vertex -144.5598721828269 -91.9057884196188 372.7877347375183 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.22347194792468 -92.48803306694643 372.39951869899727 + vertex -144.3788899872088 -92.21903915417484 372.6378908423245 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.10420954751118 -92.69443866731166 372.08886297517597 + vertex -144.22347194792468 -92.48803306694643 372.39951869899727 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.02923032146612 -92.82418975470699 371.72709434505595 + vertex -144.10420954751118 -92.69443866731166 372.08886297517597 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + vertex -144.02923032146612 -92.82418975470699 371.72709434505595 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.5043862146047 -90.27079659047236 371.3388109089007 + vertex -145.47879987327406 -90.31505084271564 370.9505833067738 + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.47780720699257 -90.31489067336153 351.72704040384275 + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + vertex -145.47879987327406 -90.31505084271564 370.9505833067738 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.40382064722897 -90.44480193011097 370.58881467665384 + vertex -145.47780720699257 -90.31489067336153 351.72704040384275 + vertex -145.47879987327406 -90.31505084271564 370.9505833067738 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.40305105648991 -90.44475493351733 352.0888145823288 + vertex -145.47780720699257 -90.31489067336153 351.72704040384275 + vertex -145.40382064722897 -90.44480193011097 370.58881467665384 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + vertex -145.40305105648991 -90.44475493351733 352.0888145823288 + vertex -145.40382064722897 -90.44480193011097 370.58881467665384 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.28405150245916 -90.65129886398756 352.3994791526445 + vertex -145.40305105648991 -90.44475493351733 352.0888145823288 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.12891816785145 -90.9204468372405 352.63786283772043 + vertex -145.28405150245916 -90.65129886398756 352.3994791526445 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -145.12914020753135 -90.92020144324778 370.03978680950524 + vertex -145.12891816785145 -90.9204468372405 352.63786283772043 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.9482231330504 -91.23385686368717 352.7877201833662 + vertex -145.12891816785145 -90.9204468372405 352.63786283772043 + vertex -145.12914020753135 -90.92020144324778 370.03978680950524 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.94815801191322 -91.23345217780383 369.88994291431146 + vertex -144.9482231330504 -91.23385686368717 352.7877201833662 + vertex -145.12914020753135 -90.92020144324778 370.03978680950524 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.75428046606493 -91.57017056795969 352.8388386591271 + vertex -144.9482231330504 -91.23385686368717 352.7877201833662 + vertex -144.94815801191322 -91.23345217780383 369.88994291431146 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.7539452975053 -91.56961221425557 369.8388388810797 + vertex -144.75428046606493 -91.57017056795969 352.8388386591271 + vertex -144.94815801191322 -91.23345217780383 369.88994291431146 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.5603070391448 -91.90646872689662 352.78773462535725 + vertex -144.75428046606493 -91.57017056795969 352.8388386591271 + vertex -144.7539452975053 -91.56961221425557 369.8388388810797 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.55973733984285 -91.90577280164965 369.8899573652214 + vertex -144.5603070391448 -91.90646872689662 352.78773462535725 + vertex -144.7539452975053 -91.56961221425557 369.8388388810797 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.37952182077825 -92.21983317672533 352.63789073750473 + vertex -144.5603070391448 -91.90646872689662 352.78773462535725 + vertex -144.55973733984285 -91.90577280164965 369.8899573652214 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.37876909029671 -92.21902515148673 370.0398147265194 + vertex -144.37952182077825 -92.21983317672533 352.63789073750473 + vertex -144.55973733984285 -91.90577280164965 369.8899573652214 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.22424502483534 -92.48890864804926 352.39951860889784 + vertex -144.37952182077825 -92.21983317672533 352.63789073750473 + vertex -144.37876909029671 -92.21902515148673 370.0398147265194 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.2233732360092 -92.48802163379942 370.27819843345253 + vertex -144.22424502483534 -92.48890864804926 352.39951860889784 + vertex -144.37876909029671 -92.21902515148673 370.0398147265194 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.1050585083526 -92.69535809216599 352.08886290617266 + vertex -144.22424502483534 -92.48890864804926 352.39951860889784 + vertex -144.2233732360092 -92.48802163379942 370.27819843345253 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.10413974764634 -92.69443058285587 370.58886303034075 + vertex -144.1050585083526 -92.69535809216599 352.08886290617266 + vertex -144.2233732360092 -92.48802163379942 370.27819843345253 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.03008463546323 -92.82511232063268 351.7270943020871 + vertex -144.1050585083526 -92.69535809216599 352.08886290617266 + vertex -144.10413974764634 -92.69443058285587 370.58886303034075 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.02919419039736 -92.82418556988475 370.9506372383038 + vertex -144.03008463546323 -92.82511232063268 351.7270943020871 + vertex -144.10413974764634 -92.69443058285587 370.58886303034075 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + vertex -144.03008463546323 -92.82511232063268 351.7270943020871 + vertex -144.02919419039736 -92.82418556988475 370.9506372383038 + endloop +endfacet +facet normal 0.8662575566756152 0.49959757022451845 0.0003366424669519788 + outer loop + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + vertex -144.02919419039736 -92.82418556988475 370.9506372383038 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801655e-05 + outer loop + vertex -151.65723784913263 -99.58379092019429 345.0889063601591 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.6575400968454 -99.58326741179927 377.5889063545374 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801655e-05 + outer loop + vertex -142.9973790597953 -94.58310633315804 377.5889063510778 + vertex -151.6575400968454 -99.58326741179927 377.5889063545374 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -158.9258902048422 -82.99465143480991 345.0885715451641 + vertex -158.8098982636667 -81.19561117211109 345.0885436450293 + vertex -158.05989642406126 -82.49459666616059 345.08857154398777 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.65723784913263 -99.58379092019429 345.0889063601591 + vertex -155.40785251969302 -93.08781478580076 345.0887668428438 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -153.6753957615695 -92.08758041013873 345.0887668428438 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -155.40785251969302 -93.08781478580076 345.0887668428438 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -153.6753957615695 -92.08758041013873 345.0887668428438 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -153.55939452029432 -90.28855625499315 345.088738943055 + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + vertex -153.6753957615695 -92.08758041013873 345.0887668428438 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.5102608450827 -90.83753777294577 345.0887668428211 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.4531409870984 -90.80451031753249 345.08876684202716 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.5102608450827 -90.83753777294577 345.0887668428211 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.36008352088763 -90.71139075632678 345.0887662074897 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.4531409870984 -90.80451031753249 345.08876684202716 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.29429802685587 -90.59735912268732 345.0887649824743 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.36008352088763 -90.71139075632678 345.0887662074897 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.260267677705 -90.47018648399975 345.08876325046356 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.29429802685587 -90.59735912268732 345.0887649824743 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.2603115854928 -90.33853944542805 345.0887611294912 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.260267677705 -90.47018648399975 345.08876325046356 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.2603115854928 -90.33853944542805 345.0887611294912 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -147.24721372819238 -87.22249296133373 345.088748257896 + vertex -142.99707681208244 -94.583629841553 345.0889063566995 + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -161.4080045675698 -82.69569297929348 345.0885436460672 + vertex -165.15767275912887 -76.20135612420364 345.08840416395947 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + vertex -165.15767275912887 -76.20135612420364 345.08840416395947 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -158.8098982636667 -81.19561117211109 345.0885436450293 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -158.9258902048422 -82.99465143480991 345.0885715451641 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + vertex -158.8098982636667 -81.19561117211109 345.0885436450293 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -157.45148242016668 -80.41190375226617 345.0885436542806 + vertex -158.8098982636667 -81.19561117211109 345.0885436450293 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -157.32424717414648 -80.3783537687353 345.08854429713796 + vertex -157.45148242016668 -80.41190375226617 345.0885436542806 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -157.19266398930475 -80.37887787804584 345.08854552929466 + vertex -157.32424717414648 -80.3783537687353 345.08854429713796 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -157.06570004223704 -80.41344036301373 345.08854726678123 + vertex -157.19266398930475 -80.37887787804584 345.08854552929466 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -156.95200771611852 -80.47968584740612 345.08854939119084 + vertex -157.06570004223704 -80.41344036301373 345.08854726678123 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -156.95200771611852 -80.47968584740612 345.08854939119084 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -152.68038285782123 -78.81233997971371 345.0885622594765 + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -152.68038285782123 -78.81233997971371 345.0885622594765 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -152.68038285782123 -78.81233997971371 345.0885622594765 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -151.3272608471192 -90.15452166723622 345.0887575427185 + vertex -156.8274380326731 -80.62834452812892 345.08855294426684 + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + vertex -156.8274380326731 -80.62834452812892 345.08855294426684 + endloop +endfacet +facet normal 9.299929622343787e-06 -1.610795061656111e-05 -0.9999999998270227 + outer loop + vertex -153.6753957615695 -92.08758041013873 345.0887668428438 + vertex -154.4253883010755 -90.78861102364229 345.0887389442313 + vertex -153.55939452029432 -90.28855625499315 345.088738943055 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595540321474196e-10 + outer loop + vertex -152.68038285782123 -78.81233997971371 345.0885622594765 + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595540321474196e-10 + outer loop + vertex -147.68052402775768 -87.4719775068708 377.58874825244726 + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801655e-05 + outer loop + vertex -152.68038285782123 -78.81233997971371 345.0885622594765 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801655e-05 + outer loop + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + vertex -152.68068510553405 -78.81181647131872 377.5885622538548 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801655e-05 + outer loop + vertex -147.24721372819238 -87.22249296133373 345.088748257896 + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + endloop +endfacet +facet normal -0.5000161077776379 0.8660161035552092 -1.8599859244801655e-05 + outer loop + vertex -147.68052402775768 -87.4719775068708 377.58874825244726 + vertex -147.2475159759052 -87.22196945293875 377.5887482522743 + vertex -147.68022178004483 -87.47250101526579 345.08874825806896 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + vertex -155.47711074836303 -72.99398026263177 351.7266685268376 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.47944509630995 -72.99491564782882 370.95021132737423 + vertex -155.47711074836303 -72.99398026263177 351.7266685268376 + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.40218638217274 -73.12374749719685 352.088442746322 + vertex -155.47711074836303 -72.99398026263177 351.7266685268376 + vertex -155.47944509630995 -72.99491564782882 370.95021132737423 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.40442961769435 -73.12464576820034 370.58844273702243 + vertex -155.40218638217274 -73.12374749719685 352.088442746322 + vertex -155.47944509630995 -72.99491564782882 370.95021132737423 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.2829964646033 -73.33018162258502 352.3991073518441 + vertex -155.40218638217274 -73.12374749719685 352.088442746322 + vertex -155.40442961769435 -73.12464576820034 370.58844273702243 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + vertex -155.2829964646033 -73.33018162258502 352.3991073518441 + vertex -155.40442961769435 -73.12464576820034 370.58844273702243 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.12766359156643 -73.5992144942996 352.6374910639352 + vertex -155.2829964646033 -73.33018162258502 352.3991073518441 + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.12962183754632 -73.59997162736029 370.03941493520085 + vertex -155.12766359156643 -73.5992144942996 352.6374910639352 + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.94677344165987 -73.91251196673105 352.78734842656394 + vertex -155.12766359156643 -73.5992144942996 352.6374910639352 + vertex -155.12962183754632 -73.59997162736029 370.03941493520085 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.94855723208974 -73.91317469436022 369.88957106111394 + vertex -154.94677344165987 -73.91251196673105 352.78734842656394 + vertex -155.12962183754632 -73.59997162736029 370.03941493520085 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.75265337966465 -74.24872333488173 352.8384669081182 + vertex -154.94677344165987 -73.91251196673105 352.78734842656394 + vertex -154.94855723208974 -73.91317469436022 369.88957106111394 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.75425685601658 -74.24928402468048 369.8384670391765 + vertex -154.75265337966465 -74.24872333488173 352.8384669081182 + vertex -154.94855723208974 -73.91317469436022 369.88957106111394 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + vertex -154.75265337966465 -74.24872333488173 352.8384669081182 + vertex -154.75425685601658 -74.24928402468048 369.8384670391765 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.5599619588598 -74.58539432290675 369.88958552403034 + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + vertex -154.75425685601658 -74.24928402468048 369.8384670391765 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.378913416773 -74.89860022766337 370.0394428754099 + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + vertex -154.5599619588598 -74.58539432290675 369.88958552403034 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.37763942989997 -74.89823864963242 352.63751896372406 + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + vertex -154.378913416773 -74.89860022766337 370.0394428754099 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.22344938870256 -75.16755727413847 370.27782656246967 + vertex -154.37763942989997 -74.89823864963242 352.63751896372406 + vertex -154.378913416773 -74.89860022766337 370.0394428754099 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + vertex -154.37763942989997 -74.89823864963242 352.63751896372406 + vertex -154.22344938870256 -75.16755727413847 370.27782656246967 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.1041644912451 -75.37393648408727 370.5884911308841 + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + vertex -154.22344938870256 -75.16755727413847 370.27782656246967 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.10310642726216 -75.37372333449257 352.08849107017386 + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + vertex -154.1041644912451 -75.37393648408727 370.5884911308841 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.0291877930347 -75.50367345540958 370.95026530371337 + vertex -154.10310642726216 -75.37372333449257 352.08849107017386 + vertex -154.1041644912451 -75.37393648408727 370.5884911308841 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.02817533217413 -75.50350222385038 351.7267224250909 + vertex -154.10310642726216 -75.37372333449257 352.08849107017386 + vertex -154.0291877930347 -75.50367345540958 370.95026530371337 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + vertex -154.02817533217413 -75.50350222385038 351.7267224250909 + vertex -154.0291877930347 -75.50367345540958 370.95026530371337 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + vertex -154.02817533217413 -75.50350222385038 351.7267224250909 + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.47710352736632 -72.99399276976496 350.9502113916644 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.4021724322783 -73.12377165912278 350.58844274658145 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + vertex -155.47710352736632 -72.99399276976496 350.9502113916644 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + vertex -155.4021724322783 -73.12377165912278 350.58844274658145 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -156.49751172207866 -71.20119504556237 345.0884041604999 + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.12763942964048 -73.5992563439829 350.03941485303125 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.94674649253326 -73.91255864398757 349.88957094819796 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -155.12763942964048 -73.5992563439829 350.03941485303125 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.7526254798758 -74.24877165873359 349.8384669086371 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.94674649253326 -73.91255864398757 349.88957094819796 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.55850541788058 -74.58498302688429 349.88958539019137 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.7526254798758 -74.24877165873359 349.8384669086371 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.37761526797402 -74.89828049931573 350.0394427528201 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.55850541788058 -74.58498302688429 349.88958539019137 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.22228239493717 -75.1673133710303 350.2778264649112 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.37761526797402 -74.89828049931573 350.0394427528201 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.1030924773677 -75.37374749641849 350.5884910704333 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.22228239493717 -75.1673133710303 350.2778264649112 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.02816811117742 -75.50351473098357 350.95026528991764 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.1030924773677 -75.37374749641849 350.5884910704333 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.02816811117742 -75.50351473098357 350.95026528991764 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + vertex -155.2852251171431 -73.33103918107577 372.3991070949903 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.4045100146006 -73.12465997112697 372.0884425265758 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -155.2852251171431 -73.33103918107577 372.3991070949903 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.47948671281097 -72.99492299980464 371.7266683537466 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -155.4045100146006 -73.12465997112697 372.0884425265758 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -155.47948671281097 -72.99492299980464 371.7266683537466 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + vertex -156.49781396979148 -71.2006715371674 377.5884041548783 + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -155.12976108907267 -73.59999622755086 372.63749078205 + vertex -155.2852251171431 -73.33103918107577 372.3991070949903 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.9487125469859 -73.91320213230748 372.7873481334296 + vertex -155.12976108907267 -73.59999622755086 372.63749078205 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.75441764982907 -74.24931243053375 372.83846661828346 + vertex -154.9487125469859 -73.91320213230748 372.7873481334296 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.5601172737559 -74.58542176085402 372.78736259634604 + vertex -154.75441764982907 -74.24931243053375 372.83846661828346 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.37905266829935 -74.89862482785394 372.63751872225913 + vertex -154.5601172737559 -74.58542176085402 372.78736259634604 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.22356308709774 -75.16757736010995 372.39914660841293 + vertex -154.37905266829935 -74.89862482785394 372.63751872225913 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.10424488815133 -75.37395068701389 372.08849092043755 + vertex -154.22356308709774 -75.16757736010995 372.39914660841293 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.02922940953573 -75.50368080738541 371.72672233008575 + vertex -154.10424488815133 -75.37395068701389 372.08849092043755 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + vertex -154.02922940953573 -75.50368080738541 371.72672233008575 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8657525189240949 0.5004723502463931 5.1141337947807905e-05 + outer loop + vertex -152.24737480596875 -78.56233192578165 345.0885622593035 + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + vertex -152.24767705368157 -78.56180841738669 377.5885622536818 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.96672800625674 -74.94978777293132 351.3384390099726 + vertex -158.9411751631831 -74.99404469408826 351.72666852822147 + vertex -158.94116794218635 -74.99405720122145 350.9502113930482 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.86623684709835 -75.12383609057927 350.58844274796525 + vertex -158.94116794218635 -74.99405720122145 350.9502113930482 + vertex -158.9411751631831 -74.99404469408826 351.72666852822147 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.86625079699277 -75.12381192865335 352.08844274770587 + vertex -158.86623684709835 -75.12383609057927 350.58844274796525 + vertex -158.9411751631831 -74.99404469408826 351.72666852822147 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.74704115129344 -75.33028022416484 350.2777870100352 + vertex -158.86623684709835 -75.12383609057927 350.58844274796525 + vertex -158.86625079699277 -75.12381192865335 352.08844274770587 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + vertex -158.74704115129344 -75.33028022416484 350.2777870100352 + vertex -158.86625079699277 -75.12381192865335 352.08844274770587 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.59170384446054 -75.5993207754394 350.03941485441504 + vertex -158.74704115129344 -75.33028022416484 350.2777870100352 + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.59172800638646 -75.59927892575608 352.637491065319 + vertex -158.59170384446054 -75.5993207754394 350.03941485441504 + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.4108109073533 -75.91262307544405 349.88957094958175 + vertex -158.59170384446054 -75.5993207754394 350.03941485441504 + vertex -158.59172800638646 -75.59927892575608 352.637491065319 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.41083785647993 -75.91257639818753 352.7873484279478 + vertex -158.4108109073533 -75.91262307544405 349.88957094958175 + vertex -158.59172800638646 -75.59927892575608 352.637491065319 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.21668989469583 -76.24883609019008 349.83846691002094 + vertex -158.4108109073533 -75.91262307544405 349.88957094958175 + vertex -158.41083785647993 -75.91257639818753 352.7873484279478 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.2167177944847 -76.24878776633824 352.8384669095021 + vertex -158.21668989469583 -76.24883609019008 349.83846691002094 + vertex -158.41083785647993 -75.91257639818753 352.7873484279478 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.02256983270064 -76.58504745834078 349.88958539157517 + vertex -158.21668989469583 -76.24883609019008 349.83846691002094 + vertex -158.2167177944847 -76.24878776633824 352.8384669095021 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -158.02259678182725 -76.58500078108426 352.7873628699412 + vertex -158.02256983270064 -76.58504745834078 349.88958539157517 + vertex -158.2167177944847 -76.24878776633824 352.8384669095021 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.84167968279408 -76.89834493077223 350.03944275420395 + vertex -158.02256983270064 -76.58504745834078 349.88958539157517 + vertex -158.02259678182725 -76.58500078108426 352.7873628699412 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.84170384472 -76.89830308108891 352.63751896510786 + vertex -157.84167968279408 -76.89834493077223 350.03944275420395 + vertex -158.02259678182725 -76.58500078108426 352.7873628699412 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + vertex -157.84167968279408 -76.89834493077223 350.03944275420395 + vertex -157.84170384472 -76.89830308108891 352.63751896510786 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.68636653788712 -77.16734363236347 352.3991468094877 + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + vertex -157.84170384472 -76.89830308108891 352.63751896510786 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.56715689218777 -77.37381192787498 350.5884910718171 + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + vertex -157.68636653788712 -77.16734363236347 352.3991468094877 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.5671708420822 -77.37378776594905 352.08849107155766 + vertex -157.56715689218777 -77.37381192787498 350.5884910718171 + vertex -157.68636653788712 -77.16734363236347 352.3991468094877 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.49223252599748 -77.50357916244005 350.95026529130143 + vertex -157.56715689218777 -77.37381192787498 350.5884910718171 + vertex -157.5671708420822 -77.37378776594905 352.08849107155766 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.4922397469942 -77.50356665530687 351.72672242647474 + vertex -157.49223252599748 -77.50357916244005 350.95026529130143 + vertex -157.5671708420822 -77.37378776594905 352.08849107155766 + endloop +endfacet +facet normal 0.8660161037050138 0.5000161078641236 -3.4595554199262004e-10 + outer loop + vertex -157.46667968292383 -77.54783608359699 351.33849480955035 + vertex -157.49223252599748 -77.50357916244005 350.95026529130143 + vertex -157.4922397469942 -77.50356665530687 351.72672242647474 + endloop +endfacet +facet normal -0.3966951107432722 0.6870665744005845 0.6087466726429225 + outer loop + vertex -154.22228239493717 -75.1673133710303 350.2778264649112 + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + vertex -154.1030924773677 -75.37374749641849 350.5884910704333 + endloop +endfacet +facet normal -0.3966951107432722 0.6870665744005845 0.6087466726429225 + outer loop + vertex -157.56715689218777 -77.37381192787498 350.5884910718171 + vertex -154.1030924773677 -75.37374749641849 350.5884910704333 + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + endloop +endfacet +facet normal -0.3043978984283068 0.5272099800412291 0.7933420172771369 + outer loop + vertex -157.84167968279408 -76.89834493077223 350.03944275420395 + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + vertex -154.37761526797402 -74.89828049931573 350.0394427528201 + endloop +endfacet +facet normal -0.3043978984283068 0.5272099800412291 0.7933420172771369 + outer loop + vertex -154.22228239493717 -75.1673133710303 350.2778264649112 + vertex -154.37761526797402 -74.89828049931573 350.0394427528201 + vertex -157.68634680975723 -77.1673778024868 350.277826466295 + endloop +endfacet +facet normal -0.19135647237682485 0.3314248967978557 0.9238724144934884 + outer loop + vertex -158.02256983270064 -76.58504745834078 349.88958539157517 + vertex -157.84167968279408 -76.89834493077223 350.03944275420395 + vertex -154.55850541788058 -74.58498302688429 349.88958539019137 + endloop +endfacet +facet normal -0.19135647237682485 0.3314248967978557 0.9238724144934884 + outer loop + vertex -154.37761526797402 -74.89828049931573 350.0394427528201 + vertex -154.55850541788058 -74.58498302688429 349.88958539019137 + vertex -157.84167968279408 -76.89834493077223 350.03944275420395 + endloop +endfacet +facet normal -0.06527441896433545 0.11305375454316116 0.9914424334335117 + outer loop + vertex -158.21668989469583 -76.24883609019008 349.83846691002094 + vertex -158.02256983270064 -76.58504745834078 349.88958539157517 + vertex -154.7526254798758 -74.24877165873359 349.8384669086371 + endloop +endfacet +facet normal -0.06527441896433545 0.11305375454316116 0.9914424334335117 + outer loop + vertex -154.55850541788058 -74.58498302688429 349.88958539019137 + vertex -154.7526254798758 -74.24877165873359 349.8384669086371 + vertex -158.02256983270064 -76.58504745834078 349.88958539157517 + endloop +endfacet +facet normal 0.06525597822946307 -0.11302181425343016 0.9914472889711177 + outer loop + vertex -158.4108109073533 -75.91262307544405 349.88957094958175 + vertex -158.21668989469583 -76.24883609019008 349.83846691002094 + vertex -154.94674649253326 -73.91255864398757 349.88957094819796 + endloop +endfacet +facet normal 0.06525597822946307 -0.11302181425343016 0.9914472889711177 + outer loop + vertex -154.7526254798758 -74.24877165873359 349.8384669086371 + vertex -154.94674649253326 -73.91255864398757 349.88957094819796 + vertex -158.21668989469583 -76.24883609019008 349.83846691002094 + endloop +endfacet +facet normal 0.19133928834755926 -0.33139513318608604 0.9238866502094432 + outer loop + vertex -158.59170384446054 -75.5993207754394 350.03941485441504 + vertex -158.4108109073533 -75.91262307544405 349.88957094958175 + vertex -155.12763942964048 -73.5992563439829 350.03941485303125 + endloop +endfacet +facet normal 0.19133928834755926 -0.33139513318608604 0.9238866502094432 + outer loop + vertex -154.94674649253326 -73.91255864398757 349.88957094819796 + vertex -155.12763942964048 -73.5992563439829 350.03941485303125 + vertex -158.4108109073533 -75.91262307544405 349.88957094958175 + endloop +endfacet +facet normal 0.3043831421678627 -0.5271844214484077 0.7933646630308955 + outer loop + vertex -158.74704115129344 -75.33028022416484 350.2777870100352 + vertex -158.59170384446054 -75.5993207754394 350.03941485441504 + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + endloop +endfacet +facet normal 0.3043831421678627 -0.5271844214484077 0.7933646630308955 + outer loop + vertex -155.12763942964048 -73.5992563439829 350.03941485303125 + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + vertex -158.59170384446054 -75.5993207754394 350.03941485441504 + endloop +endfacet +facet normal 0.396683787866367 -0.6870469626024952 0.6087761851638718 + outer loop + vertex -158.74704115129344 -75.33028022416484 350.2777870100352 + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + vertex -158.86623684709835 -75.12383609057927 350.58844274796525 + endloop +endfacet +facet normal 0.396683787866367 -0.6870469626024952 0.6087761851638718 + outer loop + vertex -155.4021724322783 -73.12377165912278 350.58844274658145 + vertex -158.86623684709835 -75.12383609057927 350.58844274796525 + vertex -155.2829767364734 -73.33021579270834 350.2777870086514 + endloop +endfacet +facet normal 0.46195108897273734 -0.8000883886540183 0.3827006163281142 + outer loop + vertex -158.86623684709835 -75.12383609057927 350.58844274796525 + vertex -155.4021724322783 -73.12377165912278 350.58844274658145 + vertex -158.94116794218635 -74.99405720122145 350.9502113930482 + endloop +endfacet +facet normal 0.46195108897273734 -0.8000883886540183 0.3827006163281142 + outer loop + vertex -155.47710352736632 -72.99399276976496 350.9502113916644 + vertex -158.94116794218635 -74.99405720122145 350.9502113930482 + vertex -155.4021724322783 -73.12377165912278 350.58844274658145 + endloop +endfacet +facet normal 0.4957371867758675 -0.8586051132273177 0.13054463293239457 + outer loop + vertex -158.94116794218635 -74.99405720122145 350.9502113930482 + vertex -155.47710352736632 -72.99399276976496 350.9502113916644 + vertex -158.96672800625674 -74.94978777293132 351.3384390099726 + endloop +endfacet +facet normal 0.4957371867758675 -0.8586051132273177 0.13054463293239457 + outer loop + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + vertex -158.96672800625674 -74.94978777293132 351.3384390099726 + vertex -155.47710352736632 -72.99399276976496 350.9502113916644 + endloop +endfacet +facet normal 0.4957396145446709 -0.8586093182462345 -0.13050775146265353 + outer loop + vertex -158.96672800625674 -74.94978777293132 351.3384390099726 + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + vertex -158.9411751631831 -74.99404469408826 351.72666852822147 + endloop +endfacet +facet normal 0.4957396145446709 -0.8586093182462345 -0.13050775146265353 + outer loop + vertex -155.47711074836303 -72.99398026263177 351.7266685268376 + vertex -158.9411751631831 -74.99404469408826 351.72666852822147 + vertex -155.5026635914367 -72.94972334147484 351.3384390085888 + endloop +endfacet +facet normal 0.46195820683071537 -0.8001007171456785 -0.38266624826958645 + outer loop + vertex -158.9411751631831 -74.99404469408826 351.72666852822147 + vertex -155.47711074836303 -72.99398026263177 351.7266685268376 + vertex -158.86625079699277 -75.12381192865335 352.08844274770587 + endloop +endfacet +facet normal 0.46195820683071537 -0.8001007171456785 -0.38266624826958645 + outer loop + vertex -155.40218638217274 -73.12374749719685 352.088442746322 + vertex -158.86625079699277 -75.12381192865335 352.08844274770587 + vertex -155.47711074836303 -72.99398026263177 351.7266685268376 + endloop +endfacet +facet normal 0.3966951107432722 -0.6870665744005845 -0.6087466726429225 + outer loop + vertex -158.86625079699277 -75.12381192865335 352.08844274770587 + vertex -155.40218638217274 -73.12374749719685 352.088442746322 + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + endloop +endfacet +facet normal 0.3966951107432722 -0.6870665744005845 -0.6087466726429225 + outer loop + vertex -155.2829964646033 -73.33018162258502 352.3991073518441 + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + vertex -155.40218638217274 -73.12374749719685 352.088442746322 + endloop +endfacet +facet normal 0.3043978984283068 -0.5272099800412291 -0.7933420172771369 + outer loop + vertex -158.59172800638646 -75.59927892575608 352.637491065319 + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + vertex -155.12766359156643 -73.5992144942996 352.6374910639352 + endloop +endfacet +facet normal 0.3043978984283068 -0.5272099800412291 -0.7933420172771369 + outer loop + vertex -155.2829964646033 -73.33018162258502 352.3991073518441 + vertex -155.12766359156643 -73.5992144942996 352.6374910639352 + vertex -158.74706087942334 -75.33024605404151 352.3991073532279 + endloop +endfacet +facet normal 0.19135647237682485 -0.3314248967978557 -0.9238724144934884 + outer loop + vertex -158.41083785647993 -75.91257639818753 352.7873484279478 + vertex -158.59172800638646 -75.59927892575608 352.637491065319 + vertex -154.94677344165987 -73.91251196673105 352.78734842656394 + endloop +endfacet +facet normal 0.19135647237682485 -0.3314248967978557 -0.9238724144934884 + outer loop + vertex -155.12766359156643 -73.5992144942996 352.6374910639352 + vertex -154.94677344165987 -73.91251196673105 352.78734842656394 + vertex -158.59172800638646 -75.59927892575608 352.637491065319 + endloop +endfacet +facet normal 0.06527441896433545 -0.11305375454316116 -0.9914424334335117 + outer loop + vertex -158.2167177944847 -76.24878776633824 352.8384669095021 + vertex -158.41083785647993 -75.91257639818753 352.7873484279478 + vertex -154.75265337966465 -74.24872333488173 352.8384669081182 + endloop +endfacet +facet normal 0.06527441896433545 -0.11305375454316116 -0.9914424334335117 + outer loop + vertex -154.94677344165987 -73.91251196673105 352.78734842656394 + vertex -154.75265337966465 -74.24872333488173 352.8384669081182 + vertex -158.41083785647993 -75.91257639818753 352.7873484279478 + endloop +endfacet +facet normal -0.06525597822946307 0.11302181425343016 -0.9914472889711177 + outer loop + vertex -158.02259678182725 -76.58500078108426 352.7873628699412 + vertex -158.2167177944847 -76.24878776633824 352.8384669095021 + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + endloop +endfacet +facet normal -0.06525597822946307 0.11302181425343016 -0.9914472889711177 + outer loop + vertex -154.75265337966465 -74.24872333488173 352.8384669081182 + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + vertex -158.2167177944847 -76.24878776633824 352.8384669095021 + endloop +endfacet +facet normal -0.19133928834755926 0.33139513318608604 -0.9238866502094432 + outer loop + vertex -157.84170384472 -76.89830308108891 352.63751896510786 + vertex -158.02259678182725 -76.58500078108426 352.7873628699412 + vertex -154.37763942989997 -74.89823864963242 352.63751896372406 + endloop +endfacet +facet normal -0.19133928834755926 0.33139513318608604 -0.9238866502094432 + outer loop + vertex -154.5585323670072 -74.58493634962777 352.7873628685574 + vertex -154.37763942989997 -74.89823864963242 352.63751896372406 + vertex -158.02259678182725 -76.58500078108426 352.7873628699412 + endloop +endfacet +facet normal -0.3043831421678627 0.5271844214484077 -0.7933646630308955 + outer loop + vertex -157.68636653788712 -77.16734363236347 352.3991468094877 + vertex -157.84170384472 -76.89830308108891 352.63751896510786 + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + endloop +endfacet +facet normal -0.3043831421678627 0.5271844214484077 -0.7933646630308955 + outer loop + vertex -154.37763942989997 -74.89823864963242 352.63751896372406 + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + vertex -157.84170384472 -76.89830308108891 352.63751896510786 + endloop +endfacet +facet normal -0.396683787866367 0.6870469626024952 -0.6087761851638718 + outer loop + vertex -154.10310642726216 -75.37372333449257 352.08849107017386 + vertex -157.5671708420822 -77.37378776594905 352.08849107155766 + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + endloop +endfacet +facet normal -0.396683787866367 0.6870469626024952 -0.6087761851638718 + outer loop + vertex -157.68636653788712 -77.16734363236347 352.3991468094877 + vertex -154.22230212306707 -75.16727920090698 352.39914680810386 + vertex -157.5671708420822 -77.37378776594905 352.08849107155766 + endloop +endfacet +facet normal -0.46195108897273734 0.8000883886540183 -0.3827006163281142 + outer loop + vertex -154.02817533217413 -75.50350222385038 351.7267224250909 + vertex -157.4922397469942 -77.50356665530687 351.72672242647474 + vertex -154.10310642726216 -75.37372333449257 352.08849107017386 + endloop +endfacet +facet normal -0.46195108897273734 0.8000883886540183 -0.3827006163281142 + outer loop + vertex -157.5671708420822 -77.37378776594905 352.08849107155766 + vertex -154.10310642726216 -75.37372333449257 352.08849107017386 + vertex -157.4922397469942 -77.50356665530687 351.72672242647474 + endloop +endfacet +facet normal -0.4957371867758675 0.8586051132273177 -0.13054463293239457 + outer loop + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + vertex -157.46667968292383 -77.54783608359699 351.33849480955035 + vertex -154.02817533217413 -75.50350222385038 351.7267224250909 + endloop +endfacet +facet normal -0.4957371867758675 0.8586051132273177 -0.13054463293239457 + outer loop + vertex -157.4922397469942 -77.50356665530687 351.72672242647474 + vertex -154.02817533217413 -75.50350222385038 351.7267224250909 + vertex -157.46667968292383 -77.54783608359699 351.33849480955035 + endloop +endfacet +facet normal -0.4957396145446709 0.8586093182462345 0.13050775146265353 + outer loop + vertex -154.02816811117742 -75.50351473098357 350.95026528991764 + vertex -157.49223252599748 -77.50357916244005 350.95026529130143 + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + endloop +endfacet +facet normal -0.4957396145446709 0.8586093182462345 0.13050775146265353 + outer loop + vertex -157.46667968292383 -77.54783608359699 351.33849480955035 + vertex -154.00261526810377 -75.5477716521405 351.3384948081665 + vertex -157.49223252599748 -77.50357916244005 350.95026529130143 + endloop +endfacet +facet normal -0.46195820683071537 0.8001007171456785 0.38266624826958645 + outer loop + vertex -154.1030924773677 -75.37374749641849 350.5884910704333 + vertex -157.56715689218777 -77.37381192787498 350.5884910718171 + vertex -154.02816811117742 -75.50351473098357 350.95026528991764 + endloop +endfacet +facet normal -0.46195820683071537 0.8001007171456785 0.38266624826958645 + outer loop + vertex -157.49223252599748 -77.50357916244005 350.95026529130143 + vertex -154.02816811117742 -75.50351473098357 350.95026528991764 + vertex -157.56715689218777 -77.37381192787498 350.5884910718171 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.96805574939242 -74.95255902828977 371.3382343231691 + vertex -158.94249678850724 -74.99681240079038 371.7264637883948 + vertex -158.94245517200622 -74.99680504881455 370.95000676202244 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.8674396933906 -75.12653516918607 370.58823817167064 + vertex -158.94245517200622 -74.99680504881455 370.95000676202244 + vertex -158.94249678850724 -74.99681240079038 371.7264637883948 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.86752009029684 -75.1265493721127 372.088237961224 + vertex -158.8674396933906 -75.12653516918607 370.58823817167064 + vertex -158.94249678850724 -74.99681240079038 371.7264637883948 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.74812149444418 -75.33290849609001 370.27758248369526 + vertex -158.8674396933906 -75.12653516918607 370.58823817167064 + vertex -158.86752009029684 -75.1265493721127 372.088237961224 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.74823519283936 -75.33292858206148 372.3989025296385 + vertex -158.74812149444418 -75.33290849609001 370.27758248369526 + vertex -158.86752009029684 -75.1265493721127 372.088237961224 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.59263191324257 -75.60186102834601 370.03921036984906 + vertex -158.74812149444418 -75.33290849609001 370.27758248369526 + vertex -158.74823519283936 -75.33292858206148 372.3989025296385 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.59277116476892 -75.60188562853658 372.6372862166982 + vertex -158.59263191324257 -75.60186102834601 370.03921036984906 + vertex -158.74823519283936 -75.33292858206148 372.3989025296385 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.41156730778602 -75.91506409534595 369.88936649576215 + vertex -158.59263191324257 -75.60186102834601 370.03921036984906 + vertex -158.59277116476892 -75.60188562853658 372.6372862166982 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.41172262268213 -75.91509153329321 372.7871435680778 + vertex -158.41156730778602 -75.91506409534595 369.88936649576215 + vertex -158.59277116476892 -75.60188562853658 372.6372862166982 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.21726693171286 -76.25117342566621 369.8382624738248 + vertex -158.41156730778602 -75.91506409534595 369.88936649576215 + vertex -158.41172262268213 -75.91509153329321 372.7871435680778 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.2174277255253 -76.25120183151947 372.8382620529316 + vertex -158.21726693171286 -76.25117342566621 369.8382624738248 + vertex -158.41172262268213 -75.91509153329321 372.7871435680778 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.02297203455603 -76.58728372389248 369.8893809586786 + vertex -158.21726693171286 -76.25117342566621 369.8382624738248 + vertex -158.2174277255253 -76.25120183151947 372.8382620529316 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -158.02312734945215 -76.58731116183975 372.7871580309943 + vertex -158.02297203455603 -76.58728372389248 369.8893809586786 + vertex -158.2174277255253 -76.25120183151947 372.8382620529316 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.84192349246928 -76.9004896286491 370.0392383100582 + vertex -158.02297203455603 -76.58728372389248 369.8893809586786 + vertex -158.02312734945215 -76.58731116183975 372.7871580309943 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.8420627439956 -76.90051422883967 372.6373141569074 + vertex -157.84192349246928 -76.9004896286491 370.0392383100582 + vertex -158.02312734945215 -76.58731116183975 372.7871580309943 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.6864594643988 -77.1694466751242 370.27762199711793 + vertex -157.84192349246928 -76.9004896286491 370.0392383100582 + vertex -157.8420627439956 -76.90051422883967 372.6373141569074 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + vertex -157.6864594643988 -77.1694466751242 370.27762199711793 + vertex -157.8420627439956 -76.90051422883967 372.6373141569074 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.56717456694133 -77.37582588507298 370.58828656553237 + vertex -157.6864594643988 -77.1694466751242 370.27762199711793 + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.5672549638476 -77.37584008799962 372.0882863550858 + vertex -157.56717456694133 -77.37582588507298 370.58828656553237 + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.49219786873095 -77.5055628563953 370.95006073836157 + vertex -157.56717456694133 -77.37582588507298 370.58828656553237 + vertex -157.5672549638476 -77.37584008799962 372.0882863550858 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.49223948523198 -77.50557020837114 371.726517764734 + vertex -157.49219786873095 -77.5055628563953 370.95006073836157 + vertex -157.5672549638476 -77.37584008799962 372.0882863550858 + endloop +endfacet +facet normal 0.8657525189240677 0.5004723502464403 5.1141337943045276e-05 + outer loop + vertex -157.46663890784578 -77.54981622889592 371.3382902035873 + vertex -157.49219786873095 -77.5055628563953 370.95006073836157 + vertex -157.49223948523198 -77.50557020837114 371.726517764734 + endloop +endfacet +facet normal -0.06527161074844998 0.11301276750418368 -0.9914472911916943 + outer loop + vertex -158.2174277255253 -76.25120183151947 372.8382620529316 + vertex -154.75441764982907 -74.24931243053375 372.83846661828346 + vertex -158.02312734945215 -76.58731116183975 372.7871580309943 + endloop +endfacet +facet normal -0.06527161074844998 0.11301276750418368 -0.9914472911916943 + outer loop + vertex -154.5601172737559 -74.58542176085402 372.78736259634604 + vertex -158.02312734945215 -76.58731116183975 372.7871580309943 + vertex -154.75441764982907 -74.24931243053375 372.83846661828346 + endloop +endfacet +facet normal -0.19147295865346278 0.3313178939421811 -0.9238866593139047 + outer loop + vertex -158.02312734945215 -76.58731116183975 372.7871580309943 + vertex -154.5601172737559 -74.58542176085402 372.78736259634604 + vertex -157.8420627439956 -76.90051422883967 372.6373141569074 + endloop +endfacet +facet normal -0.19147295865346278 0.3313178939421811 -0.9238866593139047 + outer loop + vertex -154.37905266829935 -74.89862482785394 372.63751872225913 + vertex -157.8420627439956 -76.90051422883967 372.6373141569074 + vertex -154.5601172737559 -74.58542176085402 372.78736259634604 + endloop +endfacet +facet normal -0.3046257408502599 0.5270442534367137 -0.7933646783987596 + outer loop + vertex -157.8420627439956 -76.90051422883967 372.6373141569074 + vertex -154.37905266829935 -74.89862482785394 372.63751872225913 + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + endloop +endfacet +facet normal -0.3046257408502599 0.5270442534367137 -0.7933646783987596 + outer loop + vertex -154.22356308709774 -75.16757736010995 372.39914660841293 + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + vertex -154.37905266829935 -74.89862482785394 372.63751872225913 + endloop +endfacet +facet normal -0.3970187822259422 0.6868534180413296 -0.6087762057478696 + outer loop + vertex -157.5672549638476 -77.37584008799962 372.0882863550858 + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + vertex -154.10424488815133 -75.37395068701389 372.08849092043755 + endloop +endfacet +facet normal -0.3970187822259422 0.6868534180413296 -0.6087762057478696 + outer loop + vertex -154.22356308709774 -75.16757736010995 372.39914660841293 + vertex -154.10424488815133 -75.37395068701389 372.08849092043755 + vertex -157.68657316279402 -77.16946676109566 372.3989420430612 + endloop +endfacet +facet normal -0.4623556496974689 0.799854657285341 -0.3827006407255952 + outer loop + vertex -157.49223948523198 -77.50557020837114 371.726517764734 + vertex -157.5672549638476 -77.37584008799962 372.0882863550858 + vertex -154.02922940953573 -75.50368080738541 371.72672233008575 + endloop +endfacet +facet normal -0.4623556496974689 0.799854657285341 -0.3827006407255952 + outer loop + vertex -154.10424488815133 -75.37395068701389 372.08849092043755 + vertex -154.02922940953573 -75.50368080738541 371.72672233008575 + vertex -157.5672549638476 -77.37584008799962 372.0882863550858 + endloop +endfacet +facet normal -0.4961837437209861 0.8583471234577362 -0.13054465948041144 + outer loop + vertex -157.46663890784578 -77.54981622889592 371.3382902035873 + vertex -157.49223948523198 -77.50557020837114 371.726517764734 + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + endloop +endfacet +facet normal -0.4961837437209861 0.8583471234577362 -0.13054465948041144 + outer loop + vertex -154.02922940953573 -75.50368080738541 371.72672233008575 + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + vertex -157.49223948523198 -77.50557020837114 371.726517764734 + endloop +endfacet +facet normal -0.4961977355923104 0.8583446516521516 0.13050772457295526 + outer loop + vertex -157.49219786873095 -77.5055628563953 370.95006073836157 + vertex -157.46663890784578 -77.54981622889592 371.3382902035873 + vertex -154.0291877930347 -75.50367345540958 370.95026530371337 + endloop +endfacet +facet normal -0.4961977355923104 0.8583446516521516 0.13050772457295526 + outer loop + vertex -154.0036288321495 -75.5479268279102 371.3384947689391 + vertex -154.0291877930347 -75.50367345540958 370.95026530371337 + vertex -157.46663890784578 -77.54981622889592 371.3382902035873 + endloop +endfacet +facet normal -0.4623966717885338 0.7998474103180533 0.3826662228710428 + outer loop + vertex -157.56717456694133 -77.37582588507298 370.58828656553237 + vertex -157.49219786873095 -77.5055628563953 370.95006073836157 + vertex -154.1041644912451 -75.37393648408727 370.5884911308841 + endloop +endfacet +facet normal -0.4623966717885338 0.7998474103180533 0.3826662228710428 + outer loop + vertex -154.0291877930347 -75.50367345540958 370.95026530371337 + vertex -154.1041644912451 -75.37393648408727 370.5884911308841 + vertex -157.49219786873095 -77.5055628563953 370.95006073836157 + endloop +endfacet +facet normal -0.39708403894903277 0.6868418897811813 0.608746650466135 + outer loop + vertex -157.6864594643988 -77.1694466751242 370.27762199711793 + vertex -157.56717456694133 -77.37582588507298 370.58828656553237 + vertex -154.22344938870256 -75.16755727413847 370.27782656246967 + endloop +endfacet +facet normal -0.39708403894903277 0.6868418897811813 0.608746650466135 + outer loop + vertex -154.1041644912451 -75.37393648408727 370.5884911308841 + vertex -154.22344938870256 -75.16755727413847 370.27782656246967 + vertex -157.56717456694133 -77.37582588507298 370.58828656553237 + endloop +endfacet +facet normal -0.30471078506751953 0.5270292295155485 0.7933419998334785 + outer loop + vertex -157.84192349246928 -76.9004896286491 370.0392383100582 + vertex -157.6864594643988 -77.1694466751242 370.27762199711793 + vertex -154.378913416773 -74.89860022766337 370.0394428754099 + endloop +endfacet +facet normal -0.30471078506751953 0.5270292295155485 0.7933419998334785 + outer loop + vertex -154.22344938870256 -75.16755727413847 370.27782656246967 + vertex -154.378913416773 -74.89860022766337 370.0394428754099 + vertex -157.6864594643988 -77.1694466751242 370.27762199711793 + endloop +endfacet +facet normal -0.19157199474207193 0.3313003982154749 0.9238724029717587 + outer loop + vertex -158.02297203455603 -76.58728372389248 369.8893809586786 + vertex -157.84192349246928 -76.9004896286491 370.0392383100582 + vertex -154.5599619588598 -74.58539432290675 369.88958552403034 + endloop +endfacet +facet normal -0.19157199474207193 0.3313003982154749 0.9238724029717587 + outer loop + vertex -154.378913416773 -74.89860022766337 370.0394428754099 + vertex -154.5599619588598 -74.58539432290675 369.88958552403034 + vertex -157.84192349246928 -76.9004896286491 370.0392383100582 + endloop +endfacet +facet normal -0.06537788956260604 0.11299399227674878 0.9914424286188793 + outer loop + vertex -158.21726693171286 -76.25117342566621 369.8382624738248 + vertex -158.02297203455603 -76.58728372389248 369.8893809586786 + vertex -154.75425685601658 -74.24928402468048 369.8384670391765 + endloop +endfacet +facet normal -0.06537788956260604 0.11299399227674878 0.9914424286188793 + outer loop + vertex -154.5599619588598 -74.58539432290675 369.88958552403034 + vertex -154.75425685601658 -74.24928402468048 369.8384670391765 + vertex -158.02297203455603 -76.58728372389248 369.8893809586786 + endloop +endfacet +facet normal 0.06527161074844998 -0.11301276750418368 0.9914472911916943 + outer loop + vertex -158.41156730778602 -75.91506409534595 369.88936649576215 + vertex -158.21726693171286 -76.25117342566621 369.8382624738248 + vertex -154.94855723208974 -73.91317469436022 369.88957106111394 + endloop +endfacet +facet normal 0.06527161074844998 -0.11301276750418368 0.9914472911916943 + outer loop + vertex -154.75425685601658 -74.24928402468048 369.8384670391765 + vertex -154.94855723208974 -73.91317469436022 369.88957106111394 + vertex -158.21726693171286 -76.25117342566621 369.8382624738248 + endloop +endfacet +facet normal 0.19147295865346278 -0.3313178939421811 0.9238866593139047 + outer loop + vertex -158.59263191324257 -75.60186102834601 370.03921036984906 + vertex -158.41156730778602 -75.91506409534595 369.88936649576215 + vertex -155.12962183754632 -73.59997162736029 370.03941493520085 + endloop +endfacet +facet normal 0.19147295865346278 -0.3313178939421811 0.9238866593139047 + outer loop + vertex -154.94855723208974 -73.91317469436022 369.88957106111394 + vertex -155.12962183754632 -73.59997162736029 370.03941493520085 + vertex -158.41156730778602 -75.91506409534595 369.88936649576215 + endloop +endfacet +facet normal 0.3046257408502599 -0.5270442534367137 0.7933646783987596 + outer loop + vertex -158.74812149444418 -75.33290849609001 370.27758248369526 + vertex -158.59263191324257 -75.60186102834601 370.03921036984906 + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + endloop +endfacet +facet normal 0.3046257408502599 -0.5270442534367137 0.7933646783987596 + outer loop + vertex -155.12962183754632 -73.59997162736029 370.03941493520085 + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + vertex -158.59263191324257 -75.60186102834601 370.03921036984906 + endloop +endfacet +facet normal 0.3970187822259422 -0.6868534180413296 0.6087762057478696 + outer loop + vertex -158.74812149444418 -75.33290849609001 370.27758248369526 + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + vertex -158.8674396933906 -75.12653516918607 370.58823817167064 + endloop +endfacet +facet normal 0.3970187822259422 -0.6868534180413296 0.6087762057478696 + outer loop + vertex -155.40442961769435 -73.12464576820034 370.58844273702243 + vertex -158.8674396933906 -75.12653516918607 370.58823817167064 + vertex -155.28511141874793 -73.33101909510428 370.27778704904705 + endloop +endfacet +facet normal 0.4623556496974689 -0.799854657285341 0.3827006407255952 + outer loop + vertex -158.8674396933906 -75.12653516918607 370.58823817167064 + vertex -155.40442961769435 -73.12464576820034 370.58844273702243 + vertex -158.94245517200622 -74.99680504881455 370.95000676202244 + endloop +endfacet +facet normal 0.4623556496974689 -0.799854657285341 0.3827006407255952 + outer loop + vertex -155.47944509630995 -72.99491564782882 370.95021132737423 + vertex -158.94245517200622 -74.99680504881455 370.95000676202244 + vertex -155.40442961769435 -73.12464576820034 370.58844273702243 + endloop +endfacet +facet normal 0.4961837437209861 -0.8583471234577362 0.13054465948041144 + outer loop + vertex -158.94245517200622 -74.99680504881455 370.95000676202244 + vertex -155.47944509630995 -72.99491564782882 370.95021132737423 + vertex -158.96805574939242 -74.95255902828977 371.3382343231691 + endloop +endfacet +facet normal 0.4961837437209861 -0.8583471234577362 0.13054465948041144 + outer loop + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + vertex -158.96805574939242 -74.95255902828977 371.3382343231691 + vertex -155.47944509630995 -72.99491564782882 370.95021132737423 + endloop +endfacet +facet normal 0.4961977355923104 -0.8583446516521516 -0.13050772457295526 + outer loop + vertex -158.96805574939242 -74.95255902828977 371.3382343231691 + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + vertex -158.94249678850724 -74.99681240079038 371.7264637883948 + endloop +endfacet +facet normal 0.4961977355923104 -0.8583446516521516 -0.13050772457295526 + outer loop + vertex -155.47948671281097 -72.99492299980464 371.7266683537466 + vertex -158.94249678850724 -74.99681240079038 371.7264637883948 + vertex -155.50504567369617 -72.95066962730404 371.3384388885209 + endloop +endfacet +facet normal 0.4623966717885338 -0.7998474103180533 -0.3826662228710428 + outer loop + vertex -158.94249678850724 -74.99681240079038 371.7264637883948 + vertex -155.47948671281097 -72.99492299980464 371.7266683537466 + vertex -158.86752009029684 -75.1265493721127 372.088237961224 + endloop +endfacet +facet normal 0.4623966717885338 -0.7998474103180533 -0.3826662228710428 + outer loop + vertex -155.4045100146006 -73.12465997112697 372.0884425265758 + vertex -158.86752009029684 -75.1265493721127 372.088237961224 + vertex -155.47948671281097 -72.99492299980464 371.7266683537466 + endloop +endfacet +facet normal 0.39708403894903277 -0.6868418897811813 -0.608746650466135 + outer loop + vertex -158.86752009029684 -75.1265493721127 372.088237961224 + vertex -155.4045100146006 -73.12465997112697 372.0884425265758 + vertex -158.74823519283936 -75.33292858206148 372.3989025296385 + endloop +endfacet +facet normal 0.39708403894903277 -0.6868418897811813 -0.608746650466135 + outer loop + vertex -155.2852251171431 -73.33103918107577 372.3991070949903 + vertex -158.74823519283936 -75.33292858206148 372.3989025296385 + vertex -155.4045100146006 -73.12465997112697 372.0884425265758 + endloop +endfacet +facet normal 0.3047107850675105 -0.5270292295155329 -0.7933419998334924 + outer loop + vertex -158.74823519283936 -75.33292858206148 372.3989025296385 + vertex -155.2852251171431 -73.33103918107577 372.3991070949903 + vertex -158.59277116476892 -75.60188562853658 372.6372862166982 + endloop +endfacet +facet normal 0.3047107850675105 -0.5270292295155329 -0.7933419998334924 + outer loop + vertex -155.12976108907267 -73.59999622755086 372.63749078205 + vertex -158.59277116476892 -75.60188562853658 372.6372862166982 + vertex -155.2852251171431 -73.33103918107577 372.3991070949903 + endloop +endfacet +facet normal 0.1915719947420842 -0.3313003982154961 -0.9238724029717483 + outer loop + vertex -158.59277116476892 -75.60188562853658 372.6372862166982 + vertex -155.12976108907267 -73.59999622755086 372.63749078205 + vertex -158.41172262268213 -75.91509153329321 372.7871435680778 + endloop +endfacet +facet normal 0.1915719947420842 -0.3313003982154961 -0.9238724029717483 + outer loop + vertex -154.9487125469859 -73.91320213230748 372.7873481334296 + vertex -158.41172262268213 -75.91509153329321 372.7871435680778 + vertex -155.12976108907267 -73.59999622755086 372.63749078205 + endloop +endfacet +facet normal 0.06537788956260604 -0.11299399227674878 -0.9914424286188793 + outer loop + vertex -158.41172262268213 -75.91509153329321 372.7871435680778 + vertex -154.9487125469859 -73.91320213230748 372.7873481334296 + vertex -158.2174277255253 -76.25120183151947 372.8382620529316 + endloop +endfacet +facet normal 0.06537788956260604 -0.11299399227674878 -0.9914424286188793 + outer loop + vertex -154.75441764982907 -74.24931243053375 372.83846661828346 + vertex -158.2174277255253 -76.25120183151947 372.8382620529316 + vertex -154.9487125469859 -73.91320213230748 372.7873481334296 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.96791622261702 -92.27178630909413 371.3386389550017 + vertex -148.94236601235505 -92.31604474615968 371.726868459627 + vertex -148.94232988128635 -92.31604056133739 370.9504113528749 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.86735065524127 -92.44579164873274 370.58864272275486 + vertex -148.94232988128635 -92.31604056133739 370.9504113528749 + vertex -148.94236601235505 -92.31604474615968 371.726868459627 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.8674204551061 -92.44579973318851 372.08864266759 + vertex -148.86735065524127 -92.44579164873274 370.58864272275486 + vertex -148.94236601235505 -92.31604474615968 371.726868459627 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.74808825482776 -92.65219724909795 370.2779869989335 + vertex -148.86735065524127 -92.44579164873274 370.58864272275486 + vertex -148.8674204551061 -92.44579973318851 372.08864266759 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.74818696674322 -92.65220868224496 372.39930726447824 + vertex -148.74808825482776 -92.65219724909795 370.2779869989335 + vertex -148.8674204551061 -92.44579973318851 372.08864266759 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.59267021554365 -92.92119116186954 370.03961485560626 + vertex -148.74808825482776 -92.65219724909795 370.2779869989335 + vertex -148.74818696674322 -92.65220868224496 372.39930726447824 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.59279111245573 -92.92120516455765 372.63769097141136 + vertex -148.59267021554365 -92.92119116186954 370.03961485560626 + vertex -148.74818696674322 -92.65220868224496 372.39930726447824 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.41168801992552 -93.2344418964256 369.8897709604125 + vertex -148.59267021554365 -92.92119116186954 370.03961485560626 + vertex -148.59279111245573 -92.92120516455765 372.63769097141136 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.41182286290956 -93.23445751439475 372.78754833270943 + vertex -148.41168801992552 -93.2344418964256 369.8897709604125 + vertex -148.59279111245573 -92.92120516455765 372.63769097141136 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.21747530551764 -93.57060193287734 369.8386669271807 + vertex -148.41168801992552 -93.2344418964256 369.8897709604125 + vertex -148.41182286290956 -93.23445751439475 372.78754833270943 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.2176149052471 -93.57061810178881 372.83866681685106 + vertex -148.21747530551764 -93.57060193287734 369.8386669271807 + vertex -148.41182286290956 -93.23445751439475 372.78754833270943 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.02326734785518 -93.9067625202714 369.88978541132235 + vertex -148.21747530551764 -93.57060193287734 369.8386669271807 + vertex -148.2176149052471 -93.57061810178881 372.83866681685106 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -148.02340219083922 -93.90677813824055 372.78756278361936 + vertex -148.02326734785518 -93.9067625202714 369.88978541132235 + vertex -148.2176149052471 -93.57061810178881 372.83866681685106 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.842299098309 -94.2200148701085 370.0396427726205 + vertex -148.02326734785518 -93.9067625202714 369.88978541132235 + vertex -148.02340219083922 -93.90677813824055 372.78756278361936 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.84241999522106 -94.2200288727966 372.63771888842547 + vertex -147.842299098309 -94.2200148701085 370.0396427726205 + vertex -148.02340219083922 -93.90677813824055 372.78756278361936 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.6869032440215 -94.48901135242119 370.27802647955355 + vertex -147.842299098309 -94.2200148701085 370.0396427726205 + vertex -147.84241999522106 -94.2200288727966 372.63771888842547 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + vertex -147.6869032440215 -94.48901135242119 370.27802647955355 + vertex -147.84241999522106 -94.2200288727966 372.63771888842547 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.56766975565864 -94.69542030147764 370.58869107644176 + vertex -147.6869032440215 -94.48901135242119 370.27802647955355 + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.56773955552347 -94.69542838593341 372.088691021277 + vertex -147.56766975565864 -94.69542030147764 370.58869107644176 + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.4927241984097 -94.8251752885065 370.9504652844048 + vertex -147.56766975565864 -94.69542030147764 370.58869107644176 + vertex -147.56773955552347 -94.69542838593341 372.088691021277 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.49276032947841 -94.82517947332876 371.72692239115696 + vertex -147.4927241984097 -94.8251752885065 370.9504652844048 + vertex -147.56773955552347 -94.69542838593341 372.088691021277 + endloop +endfacet +facet normal 0.8658825020030816 0.5002474296554404 4.2988474745472334e-05 + outer loop + vertex -147.46717398814772 -94.86943372557204 371.33869478903006 + vertex -147.4927241984097 -94.8251752885065 370.9504652844048 + vertex -147.49276032947841 -94.82517947332876 371.72692239115696 + endloop +endfacet +facet normal 0.49596166942562336 -0.8584754616946654 0.1305446441976069 + outer loop + vertex -148.94232988128635 -92.31604056133739 370.9504113528749 + vertex -145.47879987327406 -90.31505084271564 370.9505833067738 + vertex -148.96791622261702 -92.27178630909413 371.3386389550017 + endloop +endfacet +facet normal 0.49596166942562336 -0.8584754616946654 0.1305446441976069 + outer loop + vertex -145.5043862146047 -90.27079659047236 371.3388109089007 + vertex -148.96791622261702 -92.27178630909413 371.3386389550017 + vertex -145.47879987327406 -90.31505084271564 370.9505833067738 + endloop +endfacet +facet normal 0.4959738170401364 -0.8584740547169704 -0.1305077399560715 + outer loop + vertex -148.96791622261702 -92.27178630909413 371.3386389550017 + vertex -145.5043862146047 -90.27079659047236 371.3388109089007 + vertex -148.94236601235505 -92.31604474615968 371.726868459627 + endloop +endfacet +facet normal 0.4959738170401364 -0.8584740547169704 -0.1305077399560715 + outer loop + vertex -145.47883600434272 -90.31505502753791 371.72704041352597 + vertex -148.94236601235505 -92.31604474615968 371.726868459627 + vertex -145.5043862146047 -90.27079659047236 371.3388109089007 + endloop +endfacet +facet normal 0.46218616865887907 -0.799969059605817 -0.382666237305842 + outer loop + vertex -148.94236601235505 -92.31604474615968 371.726868459627 + vertex -145.47883600434272 -90.31505502753791 371.72704041352597 + vertex -148.8674204551061 -92.44579973318851 372.08864266759 + endloop +endfacet +facet normal 0.46218616865887907 -0.799969059605817 -0.382666237305842 + outer loop + vertex -145.4038904470938 -90.44481001456674 372.088814621489 + vertex -148.8674204551061 -92.44579973318851 372.08864266759 + vertex -145.47883600434272 -90.31505502753791 371.72704041352597 + endloop +endfacet +facet normal 0.39690129668221596 -0.6869474950938003 -0.6087466629693581 + outer loop + vertex -148.8674204551061 -92.44579973318851 372.08864266759 + vertex -145.4038904470938 -90.44481001456674 372.088814621489 + vertex -148.74818696674322 -92.65220868224496 372.39930726447824 + endloop +endfacet +facet normal 0.39690129668221596 -0.6869474950938003 -0.6087466629693581 + outer loop + vertex -145.28465695873095 -90.65121896362321 372.3994792183773 + vertex -148.74818696674322 -92.65220868224496 372.39930726447824 + vertex -145.4038904470938 -90.44481001456674 372.088814621489 + endloop +endfacet +facet normal 0.3045682572471265 -0.5271115940256584 -0.7933420095527386 + outer loop + vertex -148.74818696674322 -92.65220868224496 372.39930726447824 + vertex -145.28465695873095 -90.65121896362321 372.3994792183773 + vertex -148.59279111245573 -92.92120516455765 372.63769097141136 + endloop +endfacet +facet normal 0.3045682572471265 -0.5271115940256584 -0.7933420095527386 + outer loop + vertex -145.1292611044434 -90.92021544593588 372.63786292531034 + vertex -148.59279111245573 -92.92120516455765 372.63769097141136 + vertex -145.28465695873095 -90.65121896362321 372.3994792183773 + endloop +endfacet +facet normal 0.19147939440346326 -0.33135390891772065 -0.923872409244821 + outer loop + vertex -148.59279111245573 -92.92120516455765 372.63769097141136 + vertex -145.1292611044434 -90.92021544593588 372.63786292531034 + vertex -148.41182286290956 -93.23445751439475 372.78754833270943 + endloop +endfacet +facet normal 0.19147939440346326 -0.33135390891772065 -0.923872409244821 + outer loop + vertex -144.94829285489726 -91.23346779577298 372.7877202866084 + vertex -148.41182286290956 -93.23445751439475 372.78754833270943 + vertex -145.1292611044434 -90.92021544593588 372.63786292531034 + endloop +endfacet +facet normal 0.06534152726587612 -0.11301500250528489 -0.9914424310182075 + outer loop + vertex -148.41182286290956 -93.23445751439475 372.78754833270943 + vertex -144.94829285489726 -91.23346779577298 372.7877202866084 + vertex -148.2176149052471 -93.57061810178881 372.83866681685106 + endloop +endfacet +facet normal 0.06534152726587612 -0.11301500250528489 -0.9914424310182075 + outer loop + vertex -144.75408489723483 -91.56962838316704 372.8388387707501 + vertex -148.2176149052471 -93.57061810178881 372.83866681685106 + vertex -144.94829285489726 -91.23346779577298 372.7877202866084 + endloop +endfacet +facet normal -0.06524925697291986 0.11302568956179615 -0.9914472895537929 + outer loop + vertex -148.2176149052471 -93.57061810178881 372.83866681685106 + vertex -144.75408489723483 -91.56962838316704 372.8388387707501 + vertex -148.02340219083922 -93.90677813824055 372.78756278361936 + endloop +endfacet +facet normal -0.06524925697291986 0.11302568956179615 -0.9914472895537929 + outer loop + vertex -144.5598721828269 -91.9057884196188 372.7877347375183 + vertex -148.02340219083922 -93.90677813824055 372.78756278361936 + vertex -144.75408489723483 -91.56962838316704 372.8388387707501 + endloop +endfacet +facet normal -0.19139341217847589 0.3313638676689707 -0.9238866537504159 + outer loop + vertex -148.02340219083922 -93.90677813824055 372.78756278361936 + vertex -144.5598721828269 -91.9057884196188 372.7877347375183 + vertex -147.84241999522106 -94.2200288727966 372.63771888842547 + endloop +endfacet +facet normal -0.19139341217847589 0.3313638676689707 -0.9238866537504159 + outer loop + vertex -144.3788899872088 -92.21903915417484 372.6378908423245 + vertex -147.84241999522106 -94.2200288727966 372.63771888842547 + vertex -144.5598721828269 -91.9057884196188 372.7877347375183 + endloop +endfacet +facet normal -0.30449442263669624 0.5271201457992898 -0.7933646692887707 + outer loop + vertex -147.84241999522106 -94.2200288727966 372.63771888842547 + vertex -144.3788899872088 -92.21903915417484 372.6378908423245 + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + endloop +endfacet +facet normal -0.30449442263669624 0.5271201457992898 -0.7933646692887707 + outer loop + vertex -144.22347194792468 -92.48803306694643 372.39951869899727 + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + vertex -144.3788899872088 -92.21903915417484 372.6378908423245 + endloop +endfacet +facet normal -0.39684464139297676 0.6869540571004867 -0.6087761937123207 + outer loop + vertex -147.56773955552347 -94.69542838593341 372.088691021277 + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + vertex -144.10420954751118 -92.69443866731166 372.08886297517597 + endloop +endfacet +facet normal -0.39684464139297676 0.6869540571004867 -0.6087761937123207 + outer loop + vertex -144.22347194792468 -92.48803306694643 372.39951869899727 + vertex -144.10420954751118 -92.69443866731166 372.08886297517597 + vertex -147.68700195593698 -94.4890227855682 372.39934674509834 + endloop +endfacet +facet normal -0.46215055365515356 0.799973184655627 -0.38270062658450016 + outer loop + vertex -147.49276032947841 -94.82517947332876 371.72692239115696 + vertex -147.56773955552347 -94.69542838593341 372.088691021277 + vertex -144.02923032146612 -92.82418975470699 371.72709434505595 + endloop +endfacet +facet normal -0.46215055365515356 0.799973184655627 -0.38270062658450016 + outer loop + vertex -144.10420954751118 -92.69443866731166 372.08886297517597 + vertex -144.02923032146612 -92.82418975470699 371.72709434505595 + vertex -147.56773955552347 -94.69542838593341 372.088691021277 + endloop +endfacet +facet normal -0.49596166942562336 0.8584754616946654 -0.1305446441976069 + outer loop + vertex -147.46717398814772 -94.86943372557204 371.33869478903006 + vertex -147.49276032947841 -94.82517947332876 371.72692239115696 + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + endloop +endfacet +facet normal -0.49596166942562336 0.8584754616946654 -0.1305446441976069 + outer loop + vertex -144.02923032146612 -92.82418975470699 371.72709434505595 + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + vertex -147.49276032947841 -94.82517947332876 371.72692239115696 + endloop +endfacet +facet normal -0.49597381704014376 0.8584740547169832 0.13050773995595824 + outer loop + vertex -147.4927241984097 -94.8251752885065 370.9504652844048 + vertex -147.46717398814772 -94.86943372557204 371.33869478903006 + vertex -144.02919419039736 -92.82418556988475 370.9506372383038 + endloop +endfacet +facet normal -0.49597381704014376 0.8584740547169832 0.13050773995595824 + outer loop + vertex -144.00364398013542 -92.86844400695027 371.33886674292904 + vertex -144.02919419039736 -92.82418556988475 370.9506372383038 + vertex -147.46717398814772 -94.86943372557204 371.33869478903006 + endloop +endfacet +facet normal -0.4621861686588587 0.7999690596057817 0.38266623730594035 + outer loop + vertex -147.56766975565864 -94.69542030147764 370.58869107644176 + vertex -147.4927241984097 -94.8251752885065 370.9504652844048 + vertex -144.10413974764634 -92.69443058285587 370.58886303034075 + endloop +endfacet +facet normal -0.4621861686588587 0.7999690596057817 0.38266623730594035 + outer loop + vertex -144.02919419039736 -92.82418556988475 370.9506372383038 + vertex -144.10413974764634 -92.69443058285587 370.58886303034075 + vertex -147.4927241984097 -94.8251752885065 370.9504652844048 + endloop +endfacet +facet normal -0.39690129668221596 0.6869474950938003 0.6087466629693581 + outer loop + vertex -147.6869032440215 -94.48901135242119 370.27802647955355 + vertex -147.56766975565864 -94.69542030147764 370.58869107644176 + vertex -144.2233732360092 -92.48802163379942 370.27819843345253 + endloop +endfacet +facet normal -0.39690129668221596 0.6869474950938003 0.6087466629693581 + outer loop + vertex -144.10413974764634 -92.69443058285587 370.58886303034075 + vertex -144.2233732360092 -92.48802163379942 370.27819843345253 + vertex -147.56766975565864 -94.69542030147764 370.58869107644176 + endloop +endfacet +facet normal -0.3045682572471265 0.5271115940256584 0.7933420095527386 + outer loop + vertex -147.842299098309 -94.2200148701085 370.0396427726205 + vertex -147.6869032440215 -94.48901135242119 370.27802647955355 + vertex -144.37876909029671 -92.21902515148673 370.0398147265194 + endloop +endfacet +facet normal -0.3045682572471265 0.5271115940256584 0.7933420095527386 + outer loop + vertex -144.2233732360092 -92.48802163379942 370.27819843345253 + vertex -144.37876909029671 -92.21902515148673 370.0398147265194 + vertex -147.6869032440215 -94.48901135242119 370.27802647955355 + endloop +endfacet +facet normal -0.19147939440346326 0.33135390891772065 0.923872409244821 + outer loop + vertex -148.02326734785518 -93.9067625202714 369.88978541132235 + vertex -147.842299098309 -94.2200148701085 370.0396427726205 + vertex -144.55973733984285 -91.90577280164965 369.8899573652214 + endloop +endfacet +facet normal -0.19147939440346326 0.33135390891772065 0.923872409244821 + outer loop + vertex -144.37876909029671 -92.21902515148673 370.0398147265194 + vertex -144.55973733984285 -91.90577280164965 369.8899573652214 + vertex -147.842299098309 -94.2200148701085 370.0396427726205 + endloop +endfacet +facet normal -0.06534152726587612 0.11301500250528489 0.9914424310182075 + outer loop + vertex -148.21747530551764 -93.57060193287734 369.8386669271807 + vertex -148.02326734785518 -93.9067625202714 369.88978541132235 + vertex -144.7539452975053 -91.56961221425557 369.8388388810797 + endloop +endfacet +facet normal -0.06534152726587612 0.11301500250528489 0.9914424310182075 + outer loop + vertex -144.55973733984285 -91.90577280164965 369.8899573652214 + vertex -144.7539452975053 -91.56961221425557 369.8388388810797 + vertex -148.02326734785518 -93.9067625202714 369.88978541132235 + endloop +endfacet +facet normal 0.06524925697291986 -0.11302568956179615 0.9914472895537929 + outer loop + vertex -148.41168801992552 -93.2344418964256 369.8897709604125 + vertex -148.21747530551764 -93.57060193287734 369.8386669271807 + vertex -144.94815801191322 -91.23345217780383 369.88994291431146 + endloop +endfacet +facet normal 0.06524925697291986 -0.11302568956179615 0.9914472895537929 + outer loop + vertex -144.7539452975053 -91.56961221425557 369.8388388810797 + vertex -144.94815801191322 -91.23345217780383 369.88994291431146 + vertex -148.21747530551764 -93.57060193287734 369.8386669271807 + endloop +endfacet +facet normal 0.19139341217847589 -0.3313638676689707 0.9238866537504159 + outer loop + vertex -148.59267021554365 -92.92119116186954 370.03961485560626 + vertex -148.41168801992552 -93.2344418964256 369.8897709604125 + vertex -145.12914020753135 -90.92020144324778 370.03978680950524 + endloop +endfacet +facet normal 0.19139341217847589 -0.3313638676689707 0.9238866537504159 + outer loop + vertex -144.94815801191322 -91.23345217780383 369.88994291431146 + vertex -145.12914020753135 -90.92020144324778 370.03978680950524 + vertex -148.41168801992552 -93.2344418964256 369.8897709604125 + endloop +endfacet +facet normal 0.30449442263669624 -0.5271201457992898 0.7933646692887707 + outer loop + vertex -148.74808825482776 -92.65219724909795 370.2779869989335 + vertex -148.59267021554365 -92.92119116186954 370.03961485560626 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + endloop +endfacet +facet normal 0.30449442263669624 -0.5271201457992898 0.7933646692887707 + outer loop + vertex -145.12914020753135 -90.92020144324778 370.03978680950524 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + vertex -148.59267021554365 -92.92119116186954 370.03961485560626 + endloop +endfacet +facet normal 0.39684464139297676 -0.6869540571004867 0.6087761937123207 + outer loop + vertex -148.74808825482776 -92.65219724909795 370.2779869989335 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + vertex -148.86735065524127 -92.44579164873274 370.58864272275486 + endloop +endfacet +facet normal 0.39684464139297676 -0.6869540571004867 0.6087761937123207 + outer loop + vertex -145.40382064722897 -90.44480193011097 370.58881467665384 + vertex -148.86735065524127 -92.44579164873274 370.58864272275486 + vertex -145.28455824681546 -90.6512075304762 370.2781589528325 + endloop +endfacet +facet normal 0.46215055365515356 -0.799973184655627 0.38270062658450016 + outer loop + vertex -148.86735065524127 -92.44579164873274 370.58864272275486 + vertex -145.40382064722897 -90.44480193011097 370.58881467665384 + vertex -148.94232988128635 -92.31604056133739 370.9504113528749 + endloop +endfacet +facet normal 0.46215055365515356 -0.799973184655627 0.38270062658450016 + outer loop + vertex -145.47879987327406 -90.31505084271564 370.9505833067738 + vertex -148.94232988128635 -92.31604056133739 370.9504113528749 + vertex -145.40382064722897 -90.44480193011097 370.58881467665384 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.96825567255325 -92.26894639913682 351.33746435972216 + vertex -148.94283743369502 -92.31328095425953 351.7256938339748 + vertex -148.94260378879446 -92.31316287571259 350.94923678679373 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.86808128319237 -92.44314521441534 352.0874680124609 + vertex -148.94260378879446 -92.31316287571259 350.94923678679373 + vertex -148.94283743369502 -92.31328095425953 351.7256938339748 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.86762991590504 -92.44291710417929 350.58746818270816 + vertex -148.94260378879446 -92.31316287571259 350.94923678679373 + vertex -148.86808128319237 -92.44314521441534 352.0874680124609 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + vertex -148.86762991590504 -92.44291710417929 350.58746818270816 + vertex -148.86808128319237 -92.44314521441534 352.0874680124609 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.7484433994223 -92.64936654829602 350.27681247998305 + vertex -148.86762991590504 -92.44291710417929 350.58746818270816 + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.5939483945539 -92.91883711813851 352.63651626785247 + vertex -148.7484433994223 -92.64936654829602 350.27681247998305 + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.5931666034794 -92.91844201961995 350.03844035137615 + vertex -148.7484433994223 -92.64936654829602 350.27681247998305 + vertex -148.5939483945539 -92.91883711813851 352.63651626785247 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.41325335975284 -93.23224714458517 352.78637361349826 + vertex -148.5931666034794 -92.91844201961995 350.03844035137615 + vertex -148.5939483945539 -92.91883711813851 352.63651626785247 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.41238138511287 -93.23180646944866 349.88859646352364 + vertex -148.5931666034794 -92.91844201961995 350.03844035137615 + vertex -148.41325335975284 -93.23224714458517 352.78637361349826 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.2193106927674 -93.5685608488577 352.8374920892592 + vertex -148.41238138511287 -93.23180646944866 349.88859646352364 + vertex -148.41325335975284 -93.23224714458517 352.78637361349826 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.21840795819273 -93.56810462838558 349.8374924297538 + vertex -148.41238138511287 -93.23180646944866 349.88859646352364 + vertex -148.2193106927674 -93.5685608488577 352.8374920892592 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.02533726584724 -93.90485900779463 352.78638805548934 + vertex -148.21840795819273 -93.56810462838558 349.8374924297538 + vertex -148.2193106927674 -93.5685608488577 352.8374920892592 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -148.02446529120726 -93.9044183326581 349.8886109055147 + vertex -148.21840795819273 -93.56810462838558 349.8374924297538 + vertex -148.02533726584724 -93.90485900779463 352.78638805548934 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.8445520474807 -94.21822345762334 352.63654416763677 + vertex -148.02446529120726 -93.9044183326581 349.8886109055147 + vertex -148.02533726584724 -93.90485900779463 352.78638805548934 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.8437702564062 -94.21782835910477 350.0384682511605 + vertex -148.02446529120726 -93.9044183326581 349.8886109055147 + vertex -147.8445520474807 -94.21822345762334 352.63654416763677 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.68927525153782 -94.48729892894728 352.39817203902993 + vertex -147.8437702564062 -94.21782835910477 350.0384682511605 + vertex -147.8445520474807 -94.21822345762334 352.63654416763677 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.6886369217985 -94.48697633235771 350.27685193623637 + vertex -147.8437702564062 -94.21782835910477 350.0384682511605 + vertex -147.68927525153782 -94.48729892894728 352.39817203902993 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.5700887350551 -94.693748373064 352.08751633630476 + vertex -147.6886369217985 -94.48697633235771 350.27685193623637 + vertex -147.68927525153782 -94.48729892894728 352.39817203902993 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.56963736776774 -94.69352026282795 350.5875165065521 + vertex -147.6886369217985 -94.48697633235771 350.27685193623637 + vertex -147.5700887350551 -94.693748373064 352.08751633630476 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.49511486216568 -94.82350260153069 351.7257477322192 + vertex -147.56963736776774 -94.69352026282795 350.5875165065521 + vertex -147.5700887350551 -94.693748373064 352.08751633630476 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.49488121726512 -94.82338452298374 350.94929068503814 + vertex -147.56963736776774 -94.69352026282795 350.5875165065521 + vertex -147.49511486216568 -94.82350260153069 351.7257477322192 + endloop +endfacet +facet normal 0.8662575566756238 0.4995975702245037 0.0003366424669815009 + outer loop + vertex -147.46946297840685 -94.86771907810646 351.33752015929076 + vertex -147.49488121726512 -94.82338452298374 350.94929068503814 + vertex -147.49511486216568 -94.82350260153069 351.7257477322192 + endloop +endfacet +facet normal 0.06550890866160447 -0.1129185346609842 -0.9914423772544634 + outer loop + vertex -148.2193106927674 -93.5685608488577 352.8374920892592 + vertex -148.41325335975284 -93.23224714458517 352.78637361349826 + vertex -144.75428046606493 -91.57017056795969 352.8388386591271 + endloop +endfacet +facet normal 0.06550890866160447 -0.1129185346609842 -0.9914423772544634 + outer loop + vertex -144.9482231330504 -91.23385686368717 352.7877201833662 + vertex -144.75428046606493 -91.57017056795969 352.8388386591271 + vertex -148.41325335975284 -93.23224714458517 352.78637361349826 + endloop +endfacet +facet normal -0.06491223425765233 0.11322007963989937 -0.9914472327915463 + outer loop + vertex -148.02533726584724 -93.90485900779463 352.78638805548934 + vertex -148.2193106927674 -93.5685608488577 352.8374920892592 + vertex -144.5603070391448 -91.90646872689662 352.78773462535725 + endloop +endfacet +facet normal -0.06491223425765233 0.11322007963989937 -0.9914472327915463 + outer loop + vertex -144.75428046606493 -91.57017056795969 352.8388386591271 + vertex -144.5603070391448 -91.90646872689662 352.78773462535725 + vertex -148.2193106927674 -93.5685608488577 352.8374920892592 + endloop +endfacet +facet normal -0.19090971568477283 0.3316429326183235 -0.9238865978579175 + outer loop + vertex -147.8445520474807 -94.21822345762334 352.63654416763677 + vertex -148.02533726584724 -93.90485900779463 352.78638805548934 + vertex -144.37952182077825 -92.21983317672533 352.63789073750473 + endloop +endfacet +facet normal -0.19090971568477283 0.3316429326183235 -0.9238865978579175 + outer loop + vertex -144.5603070391448 -91.90646872689662 352.78773462535725 + vertex -144.37952182077825 -92.21983317672533 352.63789073750473 + vertex -148.02533726584724 -93.90485900779463 352.78638805548934 + endloop +endfacet +facet normal -0.30389701548123493 0.527464867804732 -0.7933646180750278 + outer loop + vertex -147.68927525153782 -94.48729892894728 352.39817203902993 + vertex -147.8445520474807 -94.21822345762334 352.63654416763677 + vertex -144.22424502483534 -92.48890864804926 352.39951860889784 + endloop +endfacet +facet normal -0.30389701548123493 0.527464867804732 -0.7933646180750278 + outer loop + vertex -144.37952182077825 -92.21983317672533 352.63789073750473 + vertex -144.22424502483534 -92.48890864804926 352.39951860889784 + vertex -147.8445520474807 -94.21822345762334 352.63654416763677 + endloop +endfacet +facet normal -0.3961742358861824 0.6873409439271011 -0.6087761506673871 + outer loop + vertex -147.5700887350551 -94.693748373064 352.08751633630476 + vertex -147.68927525153782 -94.48729892894728 352.39817203902993 + vertex -144.1050585083526 -92.69535809216599 352.08886290617266 + endloop +endfacet +facet normal -0.3961742358861824 0.6873409439271011 -0.6087761506673871 + outer loop + vertex -144.22424502483534 -92.48890864804926 352.39951860889784 + vertex -144.1050585083526 -92.69535809216599 352.08886290617266 + vertex -147.68927525153782 -94.48729892894728 352.39817203902993 + endloop +endfacet +facet normal -0.46145283682438104 0.8003758706054787 -0.38270059464188616 + outer loop + vertex -147.49511486216568 -94.82350260153069 351.7257477322192 + vertex -147.5700887350551 -94.693748373064 352.08751633630476 + vertex -144.03008463546323 -92.82511232063268 351.7270943020871 + endloop +endfacet +facet normal -0.46145283682438104 0.8003758706054787 -0.38270059464188616 + outer loop + vertex -144.1050585083526 -92.69535809216599 352.08886290617266 + vertex -144.03008463546323 -92.82511232063268 351.7270943020871 + vertex -147.5700887350551 -94.693748373064 352.08751633630476 + endloop +endfacet +facet normal -0.49528418951985603 0.8588665043857382 -0.1305446255342682 + outer loop + vertex -147.46946297840685 -94.86771907810646 351.33752015929076 + vertex -147.49511486216568 -94.82350260153069 351.7257477322192 + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + endloop +endfacet +facet normal -0.49528418951985603 0.8588665043857382 -0.1305446255342682 + outer loop + vertex -144.03008463546323 -92.82511232063268 351.7270943020871 + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + vertex -147.49511486216568 -94.82350260153069 351.7257477322192 + endloop +endfacet +facet normal -0.4953627431953809 0.8588268052361255 0.13050774406853188 + outer loop + vertex -147.49488121726512 -94.82338452298374 350.94929068503814 + vertex -147.46946297840685 -94.86771907810646 351.33752015929076 + vertex -144.02985099056264 -92.82499424208574 350.95063725490604 + endloop +endfacet +facet normal -0.4953627431953809 0.8588268052361255 0.13050774406853188 + outer loop + vertex -144.0044327517044 -92.86932879720845 351.33886672915867 + vertex -144.02985099056264 -92.82499424208574 350.95063725490604 + vertex -147.46946297840685 -94.86771907810646 351.33752015929076 + endloop +endfacet +facet normal -0.46168314454780157 0.8002594785881108 0.38266622658700744 + outer loop + vertex -147.56963736776774 -94.69352026282795 350.5875165065521 + vertex -147.49488121726512 -94.82338452298374 350.94929068503814 + vertex -144.10460714106532 -92.69512998192992 350.58886307642 + endloop +endfacet +facet normal -0.46168314454780157 0.8002594785881108 0.38266622658700744 + outer loop + vertex -144.02985099056264 -92.82499424208574 350.95063725490604 + vertex -144.10460714106532 -92.69512998192992 350.58886307642 + vertex -147.49488121726512 -94.82338452298374 350.94929068503814 + endloop +endfacet +facet normal -0.39654060256670753 0.6871557909655427 0.6087466381496921 + outer loop + vertex -147.6886369217985 -94.48697633235771 350.27685193623637 + vertex -147.56963736776774 -94.69352026282795 350.5875165065521 + vertex -144.22360669509604 -92.48858605145969 350.2781985061043 + endloop +endfacet +facet normal -0.39654060256670753 0.6871557909655427 0.6087466381496921 + outer loop + vertex -144.10460714106532 -92.69512998192992 350.58886307642 + vertex -144.22360669509604 -92.48858605145969 350.2781985061043 + vertex -147.56963736776774 -94.69352026282795 350.5875165065521 + endloop +endfacet +facet normal -0.30437447383508076 0.5272235717674104 0.7933419723236833 + outer loop + vertex -147.6886369217985 -94.48697633235771 350.27685193623637 + vertex -144.22360669509604 -92.48858605145969 350.2781985061043 + vertex -147.8437702564062 -94.21782835910477 350.0384682511605 + endloop +endfacet +facet normal -0.30437447383508076 0.5272235717674104 0.7933419723236833 + outer loop + vertex -144.37874002970375 -92.21943807820675 350.0398148210284 + vertex -147.8437702564062 -94.21782835910477 350.0384682511605 + vertex -144.22360669509604 -92.48858605145969 350.2781985061043 + endloop +endfacet +facet normal -0.19146572771418754 0.3313619374314657 0.9238723621434629 + outer loop + vertex -147.8437702564062 -94.21782835910477 350.0384682511605 + vertex -144.37874002970375 -92.21943807820675 350.0398148210284 + vertex -148.02446529120726 -93.9044183326581 349.8886109055147 + endloop +endfacet +facet normal -0.19146572771418754 0.3313619374314657 0.9238723621434629 + outer loop + vertex -144.5594350645048 -91.9060280517601 349.88995747538263 + vertex -148.02446529120726 -93.9044183326581 349.8886109055147 + vertex -144.37874002970375 -92.21943807820675 350.0398148210284 + endloop +endfacet +facet normal -0.06550890866159034 0.11291853466095969 0.9914423772544673 + outer loop + vertex -148.02446529120726 -93.9044183326581 349.8886109055147 + vertex -144.5594350645048 -91.9060280517601 349.88995747538263 + vertex -148.21840795819273 -93.56810462838558 349.8374924297538 + endloop +endfacet +facet normal -0.06550890866159034 0.11291853466095969 0.9914423772544673 + outer loop + vertex -144.75337773149027 -91.56971434748758 349.8388389996217 + vertex -148.21840795819273 -93.56810462838558 349.8374924297538 + vertex -144.5594350645048 -91.9060280517601 349.88995747538263 + endloop +endfacet +facet normal 0.06491223425763819 -0.11322007963987485 0.99144723279155 + outer loop + vertex -148.21840795819273 -93.56810462838558 349.8374924297538 + vertex -144.75337773149027 -91.56971434748758 349.8388389996217 + vertex -148.41238138511287 -93.23180646944866 349.88859646352364 + endloop +endfacet +facet normal 0.06491223425763819 -0.11322007963987485 0.99144723279155 + outer loop + vertex -144.9473511584104 -91.23341618855065 349.88994303339155 + vertex -148.41238138511287 -93.23180646944866 349.88859646352364 + vertex -144.75337773149027 -91.56971434748758 349.8388389996217 + endloop +endfacet +facet normal 0.19090971568478513 -0.3316429326183448 0.9238865978579074 + outer loop + vertex -148.41238138511287 -93.23180646944866 349.88859646352364 + vertex -144.9473511584104 -91.23341618855065 349.88994303339155 + vertex -148.5931666034794 -92.91844201961995 350.03844035137615 + endloop +endfacet +facet normal 0.19090971568478513 -0.3316429326183448 0.9238865978579074 + outer loop + vertex -145.12813637677695 -90.92005173872194 350.0397869212441 + vertex -148.5931666034794 -92.91844201961995 350.03844035137615 + vertex -144.9473511584104 -91.23341618855065 349.88994303339155 + endloop +endfacet +facet normal 0.30389701548123493 -0.527464867804732 0.7933646180750278 + outer loop + vertex -148.5931666034794 -92.91844201961995 350.03844035137615 + vertex -145.12813637677695 -90.92005173872194 350.0397869212441 + vertex -148.7484433994223 -92.64936654829602 350.27681247998305 + endloop +endfacet +facet normal 0.30389701548123493 -0.527464867804732 0.7933646180750278 + outer loop + vertex -145.28341317271986 -90.650976267398 350.27815904985096 + vertex -148.7484433994223 -92.64936654829602 350.27681247998305 + vertex -145.12813637677695 -90.92005173872194 350.0397869212441 + endloop +endfacet +facet normal 0.3961742358861824 -0.6873409439271011 0.6087761506673871 + outer loop + vertex -148.7484433994223 -92.64936654829602 350.27681247998305 + vertex -145.28341317271986 -90.650976267398 350.27815904985096 + vertex -148.86762991590504 -92.44291710417929 350.58746818270816 + endloop +endfacet +facet normal 0.3961742358861824 -0.6873409439271011 0.6087761506673871 + outer loop + vertex -145.4025996892026 -90.44452682328128 350.5888147525761 + vertex -148.86762991590504 -92.44291710417929 350.58746818270816 + vertex -145.28341317271986 -90.650976267398 350.27815904985096 + endloop +endfacet +facet normal 0.46145283682438104 -0.8003758706054787 0.38270059464188616 + outer loop + vertex -148.86762991590504 -92.44291710417929 350.58746818270816 + vertex -145.4025996892026 -90.44452682328128 350.5888147525761 + vertex -148.94260378879446 -92.31316287571259 350.94923678679373 + endloop +endfacet +facet normal 0.46145283682438104 -0.8003758706054787 0.38270059464188616 + outer loop + vertex -145.477573562092 -90.31477259481457 350.95058335666164 + vertex -148.94260378879446 -92.31316287571259 350.94923678679373 + vertex -145.4025996892026 -90.44452682328128 350.5888147525761 + endloop +endfacet +facet normal 0.49528418951985603 -0.8588665043857382 0.1305446255342682 + outer loop + vertex -148.94260378879446 -92.31316287571259 350.94923678679373 + vertex -145.477573562092 -90.31477259481457 350.95058335666164 + vertex -148.96825567255325 -92.26894639913682 351.33746435972216 + endloop +endfacet +facet normal 0.49528418951985603 -0.8588665043857382 0.1305446255342682 + outer loop + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + vertex -148.96825567255325 -92.26894639913682 351.33746435972216 + vertex -145.477573562092 -90.31477259481457 350.95058335666164 + endloop +endfacet +facet normal 0.4953627431953809 -0.8588268052361255 -0.13050774406853188 + outer loop + vertex -148.96825567255325 -92.26894639913682 351.33746435972216 + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + vertex -148.94283743369502 -92.31328095425953 351.7256938339748 + endloop +endfacet +facet normal 0.4953627431953809 -0.8588268052361255 -0.13050774406853188 + outer loop + vertex -145.47780720699257 -90.31489067336153 351.72704040384275 + vertex -148.94283743369502 -92.31328095425953 351.7256938339748 + vertex -145.5032254458508 -90.27055611823882 351.3388109295901 + endloop +endfacet +facet normal 0.46168314454780157 -0.8002594785881108 -0.38266622658700744 + outer loop + vertex -148.94283743369502 -92.31328095425953 351.7256938339748 + vertex -145.47780720699257 -90.31489067336153 351.72704040384275 + vertex -148.86808128319237 -92.44314521441534 352.0874680124609 + endloop +endfacet +facet normal 0.46168314454780157 -0.8002594785881108 -0.38266622658700744 + outer loop + vertex -145.40305105648991 -90.44475493351733 352.0888145823288 + vertex -148.86808128319237 -92.44314521441534 352.0874680124609 + vertex -145.47780720699257 -90.31489067336153 351.72704040384275 + endloop +endfacet +facet normal 0.39654060256670753 -0.6871557909655427 -0.6087466381496921 + outer loop + vertex -148.86808128319237 -92.44314521441534 352.0874680124609 + vertex -145.40305105648991 -90.44475493351733 352.0888145823288 + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + endloop +endfacet +facet normal 0.39654060256670753 -0.6871557909655427 -0.6087466381496921 + outer loop + vertex -145.28405150245916 -90.65129886398756 352.3994791526445 + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + vertex -145.40305105648991 -90.44475493351733 352.0888145823288 + endloop +endfacet +facet normal 0.30437447383508076 -0.5272235717674104 -0.7933419723236833 + outer loop + vertex -148.5939483945539 -92.91883711813851 352.63651626785247 + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + vertex -145.12891816785145 -90.9204468372405 352.63786283772043 + endloop +endfacet +facet normal 0.30437447383508076 -0.5272235717674104 -0.7933419723236833 + outer loop + vertex -145.28405150245916 -90.65129886398756 352.3994791526445 + vertex -145.12891816785145 -90.9204468372405 352.63786283772043 + vertex -148.74908172916165 -92.64968914488558 352.3981325827766 + endloop +endfacet +facet normal 0.19146572771417528 -0.3313619374314444 -0.9238723621434732 + outer loop + vertex -148.41325335975284 -93.23224714458517 352.78637361349826 + vertex -148.5939483945539 -92.91883711813851 352.63651626785247 + vertex -144.9482231330504 -91.23385686368717 352.7877201833662 + endloop +endfacet +facet normal 0.19146572771417528 -0.3313619374314444 -0.9238723621434732 + outer loop + vertex -145.12891816785145 -90.9204468372405 352.63786283772043 + vertex -144.9482231330504 -91.23385686368717 352.7877201833662 + vertex -148.5939483945539 -92.91883711813851 352.63651626785247 + endloop +endfacet +facet normal -0.4999999999135217 0.8660254036346299 -1.8599859248019025e-05 + outer loop + vertex -153.6753957615695 -92.08758041013873 345.0887668428438 + vertex -155.40785251969302 -93.08781478580076 345.0887668428438 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + endloop +endfacet +facet normal -0.4999999999135217 0.8660254036346299 -1.8599859248019025e-05 + outer loop + vertex -155.4081547674058 -93.08729127740574 377.5887668372221 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + vertex -155.40785251969302 -93.08781478580076 345.0887668428438 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.4595552671979233e-10 + outer loop + vertex -154.42569054878822 -90.78808751524727 377.5887389386096 + vertex -154.4253883010755 -90.78861102364229 345.0887389442313 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + endloop +endfacet +facet normal -0.8660161037049536 -0.5000161078642279 3.4595552671979233e-10 + outer loop + vertex -153.6753957615695 -92.08758041013873 345.0887668428438 + vertex -153.67569800928226 -92.08705690174371 377.5887668372221 + vertex -154.4253883010755 -90.78861102364229 345.0887389442313 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.859985921082138e-05 + outer loop + vertex -153.55939452029432 -90.28855625499315 345.088738943055 + vertex -154.4253883010755 -90.78861102364229 345.0887389442313 + vertex -153.5596967680071 -90.28803274659813 377.5887389374333 + endloop +endfacet +facet normal -0.5000547685625593 0.8659937806311837 -1.859985921082138e-05 + outer loop + vertex -154.42569054878822 -90.78808751524727 377.5887389386096 + vertex -153.5596967680071 -90.28803274659813 377.5887389374333 + vertex -154.4253883010755 -90.78861102364229 345.0887389442313 + endloop +endfacet +facet normal 0.8659937807808713 0.5000547686492476 -1.1763031656888842e-09 + outer loop + vertex -153.55939452029432 -90.28855625499315 345.088738943055 + vertex -153.5596967680071 -90.28803274659813 377.5887389374333 + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + endloop +endfacet +facet normal 0.8659937807808713 0.5000547686492476 -1.1763031656888842e-09 + outer loop + vertex -152.809614613663 -91.58702342014229 377.5887668372221 + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + vertex -153.5596967680071 -90.28803274659813 377.5887389374333 + endloop +endfacet +facet normal -0.5000007050694805 0.8660249965122645 -1.8599859248011436e-05 + outer loop + vertex -151.5102608450827 -90.83753777294577 345.0887668428211 + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + vertex -151.51056309279548 -90.83701426455075 377.58876683719944 + endloop +endfacet +facet normal -0.5000007050694805 0.8660249965122645 -1.8599859248011436e-05 + outer loop + vertex -152.809614613663 -91.58702342014229 377.5887668372221 + vertex -151.51056309279548 -90.83701426455075 377.58876683719944 + vertex -152.80931236595023 -91.58754692853732 345.0887668428438 + endloop +endfacet +facet normal -0.5005601706341583 0.8657017472713958 -1.859985535558106e-05 + outer loop + vertex -151.4531409870984 -90.80451031753249 345.08876684202716 + vertex -151.5102608450827 -90.83753777294577 345.0887668428211 + vertex -151.45344323481117 -90.80398680913747 377.58876683640545 + endloop +endfacet +facet normal -0.5005601706341583 0.8657017472713958 -1.859985535558106e-05 + outer loop + vertex -151.51056309279548 -90.83701426455075 377.58876683719944 + vertex -151.45344323481117 -90.80398680913747 377.58876683640545 + vertex -151.5102608450827 -90.83753777294577 345.0887668428211 + endloop +endfacet +facet normal -0.707342580726837 0.7068709027594612 -1.7964477816987433e-05 + outer loop + vertex -151.36008352088763 -90.71139075632678 345.0887662074897 + vertex -151.4531409870984 -90.80451031753249 345.08876684202716 + vertex -151.36038576860037 -90.71086724793176 377.58876620186805 + endloop +endfacet +facet normal -0.707342580726837 0.7068709027594612 -1.7964477816987433e-05 + outer loop + vertex -151.45344323481117 -90.80398680913747 377.58876683640545 + vertex -151.36038576860037 -90.71086724793176 377.58876620186805 + vertex -151.4531409870984 -90.80451031753249 345.08876684202716 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847944964898e-05 + outer loop + vertex -151.29429802685587 -90.59735912268732 345.0887649824743 + vertex -151.36008352088763 -90.71139075632678 345.0887662074897 + vertex -151.29460027456864 -90.5968356142923 377.5887649768526 + endloop +endfacet +facet normal -0.8661921188638244 0.49971112951267393 -1.6104847944964898e-05 + outer loop + vertex -151.36038576860037 -90.71086724793176 377.58876620186805 + vertex -151.29460027456864 -90.5968356142923 377.5887649768526 + vertex -151.36008352088763 -90.71139075632678 345.0887662074897 + endloop +endfacet +facet normal -0.9660120955503078 0.2584968686031633 -1.3147699300042008e-05 + outer loop + vertex -151.26056992541777 -90.46966297560473 377.58876324484186 + vertex -151.260267677705 -90.47018648399975 345.08876325046356 + vertex -151.29460027456864 -90.5968356142923 377.5887649768526 + endloop +endfacet +facet normal -0.9660120955503078 0.2584968686031633 -1.3147699300042008e-05 + outer loop + vertex -151.29429802685587 -90.59735912268732 345.0887649824743 + vertex -151.29460027456864 -90.5968356142923 377.5887649768526 + vertex -151.260267677705 -90.47018648399975 345.08876325046356 + endloop +endfacet +facet normal -0.9999999443367675 -0.00033352672056013993 -9.294556675349947e-06 + outer loop + vertex -151.26061383320555 -90.33801593703302 377.5887611238696 + vertex -151.2603115854928 -90.33853944542805 345.0887611294912 + vertex -151.26056992541777 -90.46966297560473 377.58876324484186 + endloop +endfacet +facet normal -0.9999999443367675 -0.00033352672056013993 -9.294556675349947e-06 + outer loop + vertex -151.260267677705 -90.47018648399975 345.08876325046356 + vertex -151.26056992541777 -90.46966297560473 377.58876324484186 + vertex -151.2603115854928 -90.33853944542805 345.0887611294912 + endloop +endfacet +facet normal -0.9658394494942373 -0.2591411927454837 -4.808005373273427e-06 + outer loop + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + vertex -151.26061383320555 -90.33801593703302 377.5887611238696 + endloop +endfacet +facet normal -0.9658394494942373 -0.2591411927454837 -4.808005373273427e-06 + outer loop + vertex -151.2603115854928 -90.33853944542805 345.0887611294912 + vertex -151.26061383320555 -90.33801593703302 377.5887611238696 + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + endloop +endfacet +facet normal -0.8660161037036396 -0.5000161078665039 3.4595557560199615e-10 + outer loop + vertex -151.32756309483193 -90.1539981588412 377.58875753709685 + vertex -151.3272608471192 -90.15452166723622 345.0887575427185 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + endloop +endfacet +facet normal -0.8660161037036396 -0.5000161078665039 3.4595557560199615e-10 + outer loop + vertex -151.29442675797551 -90.21138953509391 345.08875876409803 + vertex -151.29472900568828 -90.21086602669891 377.58875875847633 + vertex -151.3272608471192 -90.15452166723622 345.0887575427185 + endloop +endfacet +facet normal -0.8660161037050179 -0.5000161078641165 3.4595552432920484e-10 + outer loop + vertex -156.82774028038585 -80.62782101973391 377.58855293864514 + vertex -156.8274380326731 -80.62834452812892 345.08855294426684 + vertex -151.32756309483193 -90.1539981588412 377.58875753709685 + endloop +endfacet +facet normal -0.8660161037050179 -0.5000161078641165 3.4595552432920484e-10 + outer loop + vertex -151.3272608471192 -90.15452166723622 345.0887575427185 + vertex -151.32756309483193 -90.1539981588412 377.58875753709685 + vertex -156.8274380326731 -80.62834452812892 345.08855294426684 + endloop +endfacet +facet normal -0.8660161037057211 -0.5000161078628986 3.4595549817070225e-10 + outer loop + vertex -156.85963720280094 -80.5725763025423 377.5885517521269 + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -156.82774028038585 -80.62782101973391 377.58855293864514 + endloop +endfacet +facet normal -0.8660161037057211 -0.5000161078628986 3.4595549817070225e-10 + outer loop + vertex -156.8274380326731 -80.62834452812892 345.08855294426684 + vertex -156.82774028038585 -80.62782101973391 377.58855293864514 + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + endloop +endfacet +facet normal -0.709917628601528 -0.7042847155648722 4.7423994343577765e-06 + outer loop + vertex -156.95230996383125 -80.4791623390111 377.58854938556914 + vertex -156.95200771611852 -80.47968584740612 345.08854939119084 + vertex -156.85963720280094 -80.5725763025423 377.5885517521269 + endloop +endfacet +facet normal -0.709917628601528 -0.7042847155648722 4.7423994343577765e-06 + outer loop + vertex -156.8593349550882 -80.57309981093734 345.0885517577485 + vertex -156.85963720280094 -80.5725763025423 377.5885517521269 + vertex -156.95200771611852 -80.47968584740612 345.08854939119084 + endloop +endfacet +facet normal -0.5034454744536385 -0.8640269985173223 9.235696742973624e-06 + outer loop + vertex -157.0660022899498 -80.41291685461871 377.58854726115953 + vertex -157.06570004223704 -80.41344036301373 345.08854726678123 + vertex -156.95230996383125 -80.4791623390111 377.58854938556914 + endloop +endfacet +facet normal -0.5034454744536385 -0.8640269985173223 9.235696742973624e-06 + outer loop + vertex -156.95200771611852 -80.47968584740612 345.08854939119084 + vertex -156.95230996383125 -80.4791623390111 377.58854938556914 + vertex -157.06570004223704 -80.41344036301373 345.08854726678123 + endloop +endfacet +facet normal -0.2626643432022402 -0.9648872693939623 1.3099596581305774e-05 + outer loop + vertex -157.19296623701752 -80.37835436965082 377.58854552367296 + vertex -157.19266398930475 -80.37887787804584 345.08854552929466 + vertex -157.0660022899498 -80.41291685461871 377.58854726115953 + endloop +endfacet +facet normal -0.2626643432022402 -0.9648872693939623 1.3099596581305774e-05 + outer loop + vertex -157.06570004223704 -80.41344036301373 345.08854726678123 + vertex -157.0660022899498 -80.41291685461871 377.58854726115953 + vertex -157.19266398930475 -80.37887787804584 345.08854552929466 + endloop +endfacet +facet normal -0.003983071039397157 -0.9999920674119497 1.6070780560670505e-05 + outer loop + vertex -157.32424717414648 -80.3783537687353 345.08854429713796 + vertex -157.19266398930475 -80.37887787804584 345.08854552929466 + vertex -157.32454942185925 -80.37783026034028 377.58854429151626 + endloop +endfacet +facet normal -0.003983071039397157 -0.9999920674119497 1.6070780560670505e-05 + outer loop + vertex -157.19296623701752 -80.37835436965082 377.58854552367296 + vertex -157.32454942185925 -80.37783026034028 377.58854429151626 + vertex -157.19266398930475 -80.37887787804584 345.08854552929466 + endloop +endfacet +facet normal 0.254969640838129 -0.9669490586007048 1.794676740309682e-05 + outer loop + vertex -157.45148242016668 -80.41190375226617 345.0885436542806 + vertex -157.32424717414648 -80.3783537687353 345.08854429713796 + vertex -157.45178466787942 -80.41138024387115 377.5885436486589 + endloop +endfacet +facet normal 0.254969640838129 -0.9669490586007048 1.794676740309682e-05 + outer loop + vertex -157.32454942185925 -80.37783026034028 377.58854429151626 + vertex -157.45178466787942 -80.41138024387115 377.5885436486589 + vertex -157.32424717414648 -80.3783537687353 345.08854429713796 + endloop +endfacet +facet normal 0.49972531030155287 -0.8661839376818655 1.8599858312561852e-05 + outer loop + vertex -158.8098982636667 -81.19561117211109 345.0885436450293 + vertex -157.45148242016668 -80.41190375226617 345.0885436542806 + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + endloop +endfacet +facet normal 0.49972531030155287 -0.8661839376818655 1.8599858312561852e-05 + outer loop + vertex -157.45178466787942 -80.41138024387115 377.5885436486589 + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + vertex -157.45148242016668 -80.41190375226617 345.0885436542806 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.4595552560077707e-10 + outer loop + vertex -158.8098982636667 -81.19561117211109 345.0885436450293 + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + vertex -158.05989642406126 -82.49459666616059 345.08857154398777 + endloop +endfacet +facet normal 0.8660161037049837 0.5000161078641757 -3.4595552560077707e-10 + outer loop + vertex -158.06019867177403 -82.49407315776557 377.5885715383661 + vertex -158.05989642406126 -82.49459666616059 345.08857154398777 + vertex -158.81020051137943 -81.19508766371607 377.5885436394076 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310483 1.8599859210821377e-05 + outer loop + vertex -158.9258902048422 -82.99465143480991 345.0885715451641 + vertex -158.05989642406126 -82.49459666616059 345.08857154398777 + vertex -158.92619245255497 -82.99412792641489 377.58857153954244 + endloop +endfacet +facet normal 0.5000547685627937 -0.8659937806310483 1.8599859210821377e-05 + outer loop + vertex -158.06019867177403 -82.49407315776557 377.5885715383661 + vertex -158.92619245255497 -82.99412792641489 377.58857153954244 + vertex -158.05989642406126 -82.49459666616059 345.08857154398777 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.1763031620459855e-09 + outer loop + vertex -159.6762746061464 -81.69513725417359 377.5885436397536 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + vertex -158.92619245255497 -82.99412792641489 377.58857153954244 + endloop +endfacet +facet normal -0.8659937807809691 -0.5000547686490778 1.1763031620459855e-09 + outer loop + vertex -158.9258902048422 -82.99465143480991 345.0885715451641 + vertex -158.92619245255497 -82.99412792641489 377.58857153954244 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801655e-05 + outer loop + vertex -161.4080045675698 -82.69569297929348 345.0885436460672 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + vertex -161.40830681528254 -82.69516947089848 377.5885436404455 + endloop +endfacet +facet normal 0.5000161077776379 -0.8660161035552092 1.8599859244801655e-05 + outer loop + vertex -159.6762746061464 -81.69513725417359 377.5885436397536 + vertex -161.40830681528254 -82.69516947089848 377.5885436404455 + vertex -159.67597235843363 -81.69566076256861 345.0885436453753 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450973e-10 + outer loop + vertex -155.4081547674058 -93.08729127740574 377.5887668372221 + vertex -155.40785251969302 -93.08781478580076 345.0887668428438 + vertex -151.6575400968454 -99.58326741179927 377.5889063545374 + endloop +endfacet +facet normal -0.8660161037050258 -0.5000161078641028 3.459555415450973e-10 + outer loop + vertex -151.65723784913263 -99.58379092019429 345.0889063601591 + vertex -151.6575400968454 -99.58326741179927 377.5889063545374 + vertex -155.40785251969302 -93.08781478580076 345.0887668428438 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.961238550800757 186.73281865026806 76.8999141407756 + vertex -3.9950524216843983 186.47399897618763 76.89991962967026 + vertex -3.995182614498396 186.60563465350577 76.89991965080323 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.9951813993197236 186.54030197121796 76.89991965060597 + vertex -3.995182614498396 186.60563465350577 76.89991965080323 + vertex -3.9950524216843983 186.47399897618763 76.89991962967026 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 8.004819788799246 186.47642412596153 76.89797173010376 + vertex 8.00490228563008 182.04107707777706 76.89797171671222 + vertex 8.004818596528835 186.54052516952885 76.89797173029733 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + vertex 8.004818596528835 186.54052516952885 76.89797173029733 + vertex 8.00490228563008 182.04107707777706 76.89797171671222 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 8.004370825208392 186.60801783027892 76.8979718029818 + vertex 8.004818596528835 186.54052516952885 76.89797173029733 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.9698782027940425 186.73501138752812 76.89797740205503 + vertex 8.004370825208392 186.60801783027892 76.8979718029818 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.903692536771713 186.84875039664965 76.89798814575447 + vertex 7.9698782027940425 186.73501138752812 76.89797740205503 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.810324270904046 186.94148373213423 76.89800330191619 + vertex 7.903692536771713 186.84875039664965 76.89798814575447 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.696136298211437 187.00689177041784 76.89802183767291 + vertex 7.810324270904046 186.94148373213423 76.89800330191619 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.568910340328418 187.0405170617832 76.89804248984264 + vertex 7.696136298211437 187.00689177041784 76.89802183767291 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.504809296772143 187.0405158695128 76.89805289515232 + vertex 7.568910340328418 187.0405170617832 76.89804248984264 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.437316636033876 187.04006809819236 76.89806385101268 + vertex 7.504809296772143 187.0405158695128 76.89805289515232 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + vertex 7.437316636033876 187.04006809819236 76.89806385101268 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -2.4951156644872703 182.04041302993616 76.89967614989796 + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -2.4950524219440524 181.04041303193586 76.8996761396332 + vertex -2.4951156644872703 182.04041302993616 76.89967614989796 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + vertex -2.4951156644872703 182.04041302993616 76.89967614989796 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.4951906994403834 187.04029174271312 76.89983848876919 + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.5614936944412614 187.04018229342591 76.89984925151508 + vertex -3.4951906994403834 187.04029174271312 76.89983848876919 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.6886102984221987 187.00598671651966 76.89986988593301 + vertex -3.5614936944412614 187.04018229342591 76.89984925151508 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.802545042597342 186.94005612757638 76.89988838058402 + vertex -3.6886102984221987 187.00598671651966 76.89986988593301 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.895533462437352 186.846883587277 76.89990347508584 + vertex -3.802545042597342 186.94005612757638 76.89988838058402 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.961238550800757 186.73281865026806 76.8999141407756 + vertex -3.895533462437352 186.846883587277 76.89990347508584 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.9950524216843983 186.47399897618763 76.89991962967026 + vertex -3.961238550800757 186.73281865026806 76.8999141407756 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 8.004947609025319 179.6043169604712 76.89797170935657 + vertex 8.004948795543585 179.54052517073993 76.89797170916319 + vertex 8.004920886734789 181.0410101149205 76.8979717136939 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 8.004423499704865 179.47273377562388 76.89797179443275 + vertex 8.004920886734789 181.0410101149205 76.8979717136939 + vertex 8.004948795543585 179.54052517073993 76.89797170916319 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 8.004920886734789 181.0410101149205 76.8979717136939 + vertex 8.004423499704865 179.47273377562388 76.89797179443275 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.969861014728949 179.34576982854816 76.89797740484748 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 8.004423499704865 179.47273377562388 76.89797179443275 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.903615530330879 179.23207750241966 76.89798815825706 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.969861014728949 179.34576982854816 76.89797740484748 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.8102015667969376 179.1394047413783 76.89800332183769 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.903615530330879 179.23207750241966 76.89798815825706 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.695985131367816 179.0740670409404 76.89802186221303 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.8102015667969376 179.1394047413783 76.89800332183769 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.568749885366482 179.04051705741503 76.89804251589057 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.695985131367816 179.0740670409404 76.89802186221303 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.504958095646097 179.0405158708967 76.89805287100077 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.568749885366482 179.04051705741503 76.89804251589057 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 7.437166700541916 179.0410411667353 76.89806387535373 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.504958095646097 179.0405158708967 76.89805287100077 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.429060924777962 179.040353958863 76.8998277541441 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 7.437166700541916 179.0410411667353 76.89806387535373 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex -3.429060924777962 179.040353958863 76.8998277541441 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -2.4950524219440524 181.04041303193586 76.8996761396332 + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + vertex -3.429060924777962 179.040353958863 76.8998277541441 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -2.4950524219440524 181.04041303193586 76.8996761396332 + vertex -3.429060924777962 179.040353958863 76.8998277541441 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.495041900548237 179.040311272445 76.89983846461764 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.429060924777962 179.040353958863 76.8998277541441 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.560707963343993 179.04031005106543 76.89984912397246 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.495041900548237 179.040311272445 76.89983846461764 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.6878806020234753 179.074340400208 76.8998697674871 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.560707963343993 179.04031005106543 76.89984912397246 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.8019122356534525 179.1401258942342 76.89988827786495 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.6878806020234753 179.074340400208 76.8998697674871 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.895031796847954 179.23318336044213 76.89990339365369 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.8019122356534525 179.1401258942342 76.89988827786495 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.9608933413990166 179.34717108629414 76.8999140847412 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.895031796847954 179.23318336044213 76.89990339365369 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.995008513886932 179.47432099664724 76.89991962254427 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.9608933413990166 179.34717108629414 76.8999140847412 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.9950512003049288 179.54030197242892 76.89991962947417 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.995008513886932 179.47432099664724 76.89991962254427 + endloop +endfacet +facet normal -2.1312253621353532e-06 -4.140663892805014e-15 -0.9999999999977288 + outer loop + vertex -3.9950524216844774 179.60596803523603 76.89991962967161 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.9950512003049288 179.54030197242892 76.89991962947417 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 8.005970601283938 179.60431696047303 556.8998883596455 + vertex 8.005943878993453 181.04101011492233 556.899888363982 + vertex 8.005971787802203 179.54052517074172 556.8998883594513 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 6.505988522196304 181.04098221596362 556.900131846774 + vertex 8.005971787802203 179.54052517074172 556.8998883594513 + vertex 8.005943878993453 181.04101011492233 556.899888363982 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 8.005446491963482 179.4727337756257 556.8998884447209 + vertex 8.005971787802203 179.54052517074172 556.8998883594513 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.970884006987567 179.34576982854998 556.8998940551355 + vertex 8.005446491963482 179.4727337756257 556.8998884447209 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.904638522589498 179.23207750242145 556.8999048085452 + vertex 7.970884006987567 179.34576982854998 556.8998940551355 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.811224559055601 179.13940474138013 556.8999199721258 + vertex 7.904638522589498 179.23207750242145 556.8999048085452 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.697008123626435 179.07406704094223 556.8999385125012 + vertex 7.811224559055601 179.13940474138013 556.8999199721258 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.5697728776251 179.04051705741682 556.8999591661794 + vertex 7.697008123626435 179.07406704094223 556.8999385125012 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.505981087904783 179.04051587089853 556.8999695212889 + vertex 7.5697728776251 179.04051705741682 556.8999591661794 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.4381896928005355 179.0410411667371 556.8999805256426 + vertex 7.505981087904783 179.04051587089853 556.8999695212889 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex 7.4381896928005355 179.0410411667371 556.8999805256426 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex 6.505988522196304 181.04098221596362 556.900131846774 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -2.4940294296854337 181.04041303193765 556.9015927899221 + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex -2.4940294296854337 181.04041303193765 556.9015927899221 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.4940189082896183 179.0403112724468 556.9017551149075 + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.5596849710853746 179.04031005106725 556.9017657742614 + vertex -3.4940189082896183 179.0403112724468 556.9017551149075 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.6868576097648345 179.07434040020982 556.901786417776 + vertex -3.5596849710853746 179.04031005106725 556.9017657742614 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.800889243394811 179.14012589423604 556.9018049281539 + vertex -3.6868576097648345 179.07434040020982 556.901786417776 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.894008804589336 179.23318336044392 556.9018200439434 + vertex -3.800889243394811 179.14012589423604 556.9018049281539 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9598703491403984 179.34717108629593 556.9018307350301 + vertex -3.894008804589336 179.23318336044392 556.9018200439434 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.993985521628291 179.47432099664906 556.901836272834 + vertex -3.9598703491403984 179.34717108629593 556.9018307350301 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.994028208046288 179.54030197243074 556.9018362797632 + vertex -3.993985521628291 179.47432099664906 556.901836272834 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9940294294258365 179.60596803523782 556.9018362799613 + vertex -3.994028208046288 179.54030197243074 556.9018362797632 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 8.005925277888721 182.04107707777888 556.899888367001 + vertex 8.005842781057865 186.47642412596332 556.8998883803919 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 8.005841588787453 186.54052516953067 556.8998883805855 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 8.005842781057865 186.47642412596332 556.8998883803919 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 8.00539381746701 186.60801783028077 556.8998884532699 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 8.005841588787453 186.54052516953067 556.8998883805855 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.970901195052661 186.73501138752994 556.8998940523439 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 8.00539381746701 186.60801783028077 556.8998884532699 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.904715529030331 186.84875039665144 556.8999047960434 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.970901195052661 186.73501138752994 556.8998940523439 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.811347263162688 186.94148373213605 556.8999199522051 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.904715529030331 186.84875039665144 556.8999047960434 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.697159290470078 187.00689177041966 556.8999384879611 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.811347263162688 186.94148373213605 556.8999199522051 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.569933332587059 187.04051706178498 556.8999591401308 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.697159290470078 187.00689177041966 556.8999384879611 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.505832289030784 187.0405158695146 556.8999695454412 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.569933332587059 187.04051706178498 556.8999591401308 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex 7.43833962829254 187.04006809819415 556.8999805013008 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.505832289030784 187.0405158695146 556.8999695454412 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 7.43833962829254 187.04006809819415 556.8999805013008 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -2.4940294296854337 181.04041303193765 556.9015927899221 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.49416770718172 187.0402917427149 556.9017551390589 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.5604707021826427 187.0401822934277 556.901765901804 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.49416770718172 187.0402917427149 556.9017551390589 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.6875873061635125 187.00598671652142 556.9017865362227 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.5604707021826427 187.0401822934277 556.901765901804 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.8015220503386784 186.94005612757817 556.9018050308729 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.6875873061635125 187.00598671652142 556.9017865362227 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.894510470178711 186.8468835872788 556.9018201253748 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.8015220503386784 186.94005612757817 556.9018050308729 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9602155585421386 186.73281865026988 556.9018307910653 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.894510470178711 186.8468835872788 556.9018201253748 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9940294294257574 186.47399897618942 556.9018362799592 + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.9602155585421386 186.73281865026988 556.9018307910653 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9602155585421386 186.73281865026988 556.9018307910653 + vertex -3.9941596222397324 186.6056346535076 556.9018363010921 + vertex -3.9940294294257574 186.47399897618942 556.9018362799592 + endloop +endfacet +facet normal 2.1312253621353532e-06 4.140663892805014e-15 0.9999999999977288 + outer loop + vertex -3.9941584070610827 186.54030197121975 556.9018363008956 + vertex -3.9940294294257574 186.47399897618942 556.9018362799592 + vertex -3.9941596222397324 186.6056346535076 556.9018363010921 + endloop +endfacet +facet normal 0.9999999866520455 1.859985899909058e-05 -0.00016232669040715017 + outer loop + vertex 8.004819788799246 186.47642412596153 76.89797173010376 + vertex 8.005842781057865 186.47642412596332 556.8998883803919 + vertex 8.00490228563008 182.04107707777706 76.89797171671222 + endloop +endfacet +facet normal 0.9999999866520455 1.859985899909058e-05 -0.00016232669040715017 + outer loop + vertex 8.005925277888721 182.04107707777888 556.899888367001 + vertex 8.00490228563008 182.04107707777706 76.89797171671222 + vertex 8.005842781057865 186.47642412596332 556.8998883803919 + endloop +endfacet +facet normal 6.324254323268623e-05 -0.9999999980001903 -1.0265637493691884e-08 + outer loop + vertex 8.005925277888721 182.04107707777888 556.899888367001 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 8.00490228563008 182.04107707777706 76.89797171671222 + endloop +endfacet +facet normal 6.324254323268623e-05 -0.9999999980001903 -1.0265637493691884e-08 + outer loop + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + vertex 8.00490228563008 182.04107707777706 76.89797171671222 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + endloop +endfacet +facet normal 0.9999999848252131 6.32425423938018e-05 -0.0001623266901106206 + outer loop + vertex 6.5049022873944224 182.04098221396214 76.89821520675073 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + endloop +endfacet +facet normal 0.9999999848252131 6.32425423938018e-05 -0.0001623266901106206 + outer loop + vertex 6.505988522196304 181.04098221596362 556.900131846774 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 6.505925279653086 182.04098221396393 556.9001318570389 + endloop +endfacet +facet normal -1.859985936989869e-05 0.9999999998270226 3.0189382746239684e-09 + outer loop + vertex 6.505988522196304 181.04098221596362 556.900131846774 + vertex 8.005943878993453 181.04101011492233 556.899888363982 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + endloop +endfacet +facet normal -1.859985936989869e-05 0.9999999998270226 3.0189382746239684e-09 + outer loop + vertex 8.004920886734789 181.0410101149205 76.8979717136939 + vertex 6.50496552993764 181.04098221596183 76.89821519648596 + vertex 8.005943878993453 181.04101011492233 556.899888363982 + endloop +endfacet +facet normal 0.9999999866520453 1.8599859030495655e-05 -0.00016232669040715014 + outer loop + vertex 8.004920886734789 181.0410101149205 76.8979717136939 + vertex 8.005943878993453 181.04101011492233 556.899888363982 + vertex 8.004947609025319 179.6043169604712 76.89797170935657 + endloop +endfacet +facet normal 0.9999999866520453 1.8599859030495655e-05 -0.00016232669040715014 + outer loop + vertex 8.005970601283938 179.60431696047303 556.8998883596455 + vertex 8.004947609025319 179.6043169604712 76.89797170935657 + vertex 8.005943878993453 181.04101011492233 556.899888363982 + endloop +endfacet +facet normal 0.9999999866520455 1.859985829179794e-05 -0.00016232669040715017 + outer loop + vertex 8.004947609025319 179.6043169604712 76.89797170935657 + vertex 8.005970601283938 179.60431696047303 556.8998883596455 + vertex 8.004948795543585 179.54052517073993 76.89797170916319 + endloop +endfacet +facet normal 0.9999999866520455 1.859985829179794e-05 -0.00016232669040715017 + outer loop + vertex 8.005971787802203 179.54052517074172 556.8998883594513 + vertex 8.004948795543585 179.54052517073993 76.89797170916319 + vertex 8.005970601283938 179.60431696047303 556.8998883596455 + endloop +endfacet +facet normal 0.9999699669272771 -0.007748476952790789 -0.00016232181740206692 + outer loop + vertex 8.004948795543585 179.54052517073993 76.89797170916319 + vertex 8.005971787802203 179.54052517074172 556.8998883594513 + vertex 8.004423499704865 179.47273377562388 76.89797179443275 + endloop +endfacet +facet normal 0.9999699669272771 -0.007748476952790789 -0.00016232181740206692 + outer loop + vertex 8.005446491963482 179.4727337756257 556.8998884447209 + vertex 8.004423499704865 179.47273377562388 76.89797179443275 + vertex 8.005971787802203 179.54052517074172 556.8998883594513 + endloop +endfacet +facet normal 0.9648872576525398 -0.2626643399621609 -0.00015662695715857293 + outer loop + vertex 8.004423499704865 179.47273377562388 76.89797179443275 + vertex 8.005446491963482 179.4727337756257 556.8998884447209 + vertex 7.969861014728949 179.34576982854816 76.89797740484748 + endloop +endfacet +facet normal 0.9648872576525398 -0.2626643399621609 -0.00015662695715857293 + outer loop + vertex 7.970884006987567 179.34576982854998 556.8998940551355 + vertex 7.969861014728949 179.34576982854816 76.89797740484748 + vertex 8.005446491963482 179.4727337756257 556.8998884447209 + endloop +endfacet +facet normal 0.8640269900555478 -0.5034454695239448 -0.00014025464343150003 + outer loop + vertex 7.969861014728949 179.34576982854816 76.89797740484748 + vertex 7.970884006987567 179.34576982854998 556.8998940551355 + vertex 7.903615530330879 179.23207750241966 76.89798815825706 + endloop +endfacet +facet normal 0.8640269900555478 -0.5034454695239448 -0.00014025464343150003 + outer loop + vertex 7.904638522589498 179.23207750242145 556.8999048085452 + vertex 7.903615530330879 179.23207750241966 76.89798815825706 + vertex 7.970884006987567 179.34576982854998 556.8998940551355 + endloop +endfacet +facet normal 0.7042847109399935 -0.7099176240002394 -0.00011432420753334249 + outer loop + vertex 7.811224559055601 179.13940474138013 556.8999199721258 + vertex 7.8102015667969376 179.1394047413783 76.89800332183769 + vertex 7.904638522589498 179.23207750242145 556.8999048085452 + endloop +endfacet +facet normal 0.7042847109399935 -0.7099176240002394 -0.00011432420753334249 + outer loop + vertex 7.903615530330879 179.23207750241966 76.89798815825706 + vertex 7.904638522589498 179.23207750242145 556.8999048085452 + vertex 7.8102015667969376 179.1394047413783 76.89800332183769 + endloop +endfacet +facet normal 0.49654659145336605 -0.868010066772983 -8.060276562570304e-05 + outer loop + vertex 7.811224559055601 179.13940474138013 556.8999199721258 + vertex 7.697008123626435 179.07406704094223 556.8999385125012 + vertex 7.8102015667969376 179.1394047413783 76.89800332183769 + endloop +endfacet +facet normal 0.49654659145336605 -0.868010066772983 -8.060276562570304e-05 + outer loop + vertex 7.695985131367816 179.0740670409404 76.89802186221303 + vertex 7.8102015667969376 179.1394047413783 76.89800332183769 + vertex 7.697008123626435 179.07406704094223 556.8999385125012 + endloop +endfacet +facet normal 0.25496964065944644 -0.9669490579285939 -4.1388378170041334e-05 + outer loop + vertex 7.5697728776251 179.04051705741682 556.8999591661794 + vertex 7.568749885366482 179.04051705741503 76.89804251589057 + vertex 7.697008123626435 179.07406704094223 556.8999385125012 + endloop +endfacet +facet normal 0.25496964065944644 -0.9669490579285939 -4.1388378170041334e-05 + outer loop + vertex 7.695985131367816 179.0740670409404 76.89802186221303 + vertex 7.697008123626435 179.07406704094223 556.8999385125012 + vertex 7.568749885366482 179.04051705741503 76.89804251589057 + endloop +endfacet +facet normal 1.859985924957654e-05 -0.9999999998270226 -3.0189382550924715e-09 + outer loop + vertex 7.5697728776251 179.04051705741682 556.8999591661794 + vertex 7.505981087904783 179.04051587089853 556.8999695212889 + vertex 7.568749885366482 179.04051705741503 76.89804251589057 + endloop +endfacet +facet normal 1.859985924957654e-05 -0.9999999998270226 -3.0189382550924715e-09 + outer loop + vertex 7.504958095646097 179.0405158708967 76.89805287100077 + vertex 7.568749885366482 179.04051705741503 76.89804251589057 + vertex 7.505981087904783 179.04051587089853 556.8999695212889 + endloop +endfacet +facet normal -0.0077484770488550295 -0.9999699801003236 1.257784967194969e-06 + outer loop + vertex 7.4381896928005355 179.0410411667371 556.8999805256426 + vertex 7.437166700541916 179.0410411667353 76.89806387535373 + vertex 7.505981087904783 179.04051587089853 556.8999695212889 + endloop +endfacet +facet normal -0.0077484770488550295 -0.9999699801003236 1.257784967194969e-06 + outer loop + vertex 7.504958095646097 179.0405158708967 76.89805287100077 + vertex 7.505981087904783 179.04051587089853 556.8999695212889 + vertex 7.437166700541916 179.0410411667353 76.89806387535373 + endloop +endfacet +facet normal 6.324254327381863e-05 -0.9999999980001905 -1.0265637500368771e-08 + outer loop + vertex 7.4381896928005355 179.0410411667371 556.8999805256426 + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex 7.437166700541916 179.0410411667353 76.89806387535373 + endloop +endfacet +facet normal 6.324254327381863e-05 -0.9999999980001905 -1.0265637500368771e-08 + outer loop + vertex -3.429060924777962 179.040353958863 76.8998277541441 + vertex 7.437166700541916 179.0410411667353 76.89806387535373 + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + endloop +endfacet +facet normal 0.0006469502546810972 -0.9999997907276567 -1.0501697972304278e-07 + outer loop + vertex -3.4280379325193433 179.04035395886478 556.9017444044338 + vertex -3.4940189082896183 179.0403112724468 556.9017551149075 + vertex -3.429060924777962 179.040353958863 76.8998277541441 + endloop +endfacet +facet normal 0.0006469502546810972 -0.9999997907276567 -1.0501697972304278e-07 + outer loop + vertex -3.495041900548237 179.040311272445 76.89983846461764 + vertex -3.429060924777962 179.040353958863 76.8998277541441 + vertex -3.4940189082896183 179.0403112724468 556.9017551149075 + endloop +endfacet +facet normal 1.859985924957654e-05 -0.9999999998270226 -3.0189382550924715e-09 + outer loop + vertex -3.4940189082896183 179.0403112724468 556.9017551149075 + vertex -3.5596849710853746 179.04031005106725 556.9017657742614 + vertex -3.495041900548237 179.040311272445 76.89983846461764 + endloop +endfacet +facet normal 1.859985924957654e-05 -0.9999999998270226 -3.0189382550924715e-09 + outer loop + vertex -3.560707963343993 179.04031005106543 76.89984912397246 + vertex -3.495041900548237 179.040311272445 76.89983846461764 + vertex -3.5596849710853746 179.04031005106725 556.9017657742614 + endloop +endfacet +facet normal -0.2584968684381998 -0.966012094772588 4.196094199893686e-05 + outer loop + vertex -3.6868576097648345 179.07434040020982 556.901786417776 + vertex -3.6878806020234753 179.074340400208 76.8998697674871 + vertex -3.5596849710853746 179.04031005106725 556.9017657742614 + endloop +endfacet +facet normal -0.2584968684381998 -0.966012094772588 4.196094199893686e-05 + outer loop + vertex -3.560707963343993 179.04031005106543 76.89984912397246 + vertex -3.5596849710853746 179.04031005106725 556.9017657742614 + vertex -3.6878806020234753 179.074340400208 76.8998697674871 + endloop +endfacet +facet normal -0.4997111279331008 -0.8661921161266414 8.111645491291908e-05 + outer loop + vertex -3.6868576097648345 179.07434040020982 556.901786417776 + vertex -3.800889243394811 179.14012589423604 556.9018049281539 + vertex -3.6878806020234753 179.074340400208 76.8998697674871 + endloop +endfacet +facet normal -0.4997111279331008 -0.8661921161266414 8.111645491291908e-05 + outer loop + vertex -3.8019122356534525 179.1401258942342 76.89988827786495 + vertex -3.6878806020234753 179.074340400208 76.8998697674871 + vertex -3.800889243394811 179.14012589423604 556.9018049281539 + endloop +endfacet +facet normal -0.7068708981905478 -0.7073425762140287 0.00011474401520307611 + outer loop + vertex -3.800889243394811 179.14012589423604 556.9018049281539 + vertex -3.894008804589336 179.23318336044392 556.9018200439434 + vertex -3.8019122356534525 179.1401258942342 76.89988827786495 + endloop +endfacet +facet normal -0.7068708981905478 -0.7073425762140287 0.00011474401520307611 + outer loop + vertex -3.895031796847954 179.23318336044213 76.89990339365369 + vertex -3.8019122356534525 179.1401258942342 76.89988827786495 + vertex -3.894008804589336 179.23318336044392 556.9018200439434 + endloop +endfacet +facet normal -0.8658585837036067 -0.500288809860795 0.0001405519602870857 + outer loop + vertex -3.9608933413990166 179.34717108629414 76.8999140847412 + vertex -3.895031796847954 179.23318336044213 76.89990339365369 + vertex -3.9598703491403984 179.34717108629593 556.9018307350301 + endloop +endfacet +facet normal -0.8658585837036067 -0.500288809860795 0.0001405519602870857 + outer loop + vertex -3.894008804589336 179.23318336044392 556.9018200439434 + vertex -3.9598703491403984 179.34717108629593 556.9018307350301 + vertex -3.895031796847954 179.23318336044213 76.89990339365369 + endloop +endfacet +facet normal -0.9658394376347457 -0.2591411895645942 0.00015678152155038612 + outer loop + vertex -3.995008513886932 179.47432099664724 76.89991962254427 + vertex -3.9608933413990166 179.34717108629414 76.8999140847412 + vertex -3.993985521628291 179.47432099664906 556.901836272834 + endloop +endfacet +facet normal -0.9658394376347457 -0.2591411895645942 0.00015678152155038612 + outer loop + vertex -3.9598703491403984 179.34717108629593 556.9018307350301 + vertex -3.993985521628291 179.47432099664906 556.901836272834 + vertex -3.9608933413990166 179.34717108629414 76.8999140847412 + endloop +endfacet +facet normal -0.999999777552693 -0.0006469502463694973 0.00016232665646494202 + outer loop + vertex -3.9950512003049288 179.54030197242892 76.89991962947417 + vertex -3.995008513886932 179.47432099664724 76.89991962254427 + vertex -3.994028208046288 179.54030197243074 556.9018362797632 + endloop +endfacet +facet normal -0.999999777552693 -0.0006469502463694973 0.00016232665646494202 + outer loop + vertex -3.993985521628291 179.47432099664906 556.901836272834 + vertex -3.994028208046288 179.54030197243074 556.9018362797632 + vertex -3.995008513886932 179.47432099664724 76.89991962254427 + endloop +endfacet +facet normal -0.9999999866520455 -1.859985899909058e-05 0.00016232669040715017 + outer loop + vertex -3.9950524216844774 179.60596803523603 76.89991962967161 + vertex -3.9950512003049288 179.54030197242892 76.89991962947417 + vertex -3.9940294294258365 179.60596803523782 556.9018362799613 + endloop +endfacet +facet normal -0.9999999866520455 -1.859985899909058e-05 0.00016232669040715017 + outer loop + vertex -3.994028208046288 179.54030197243074 556.9018362797632 + vertex -3.9940294294258365 179.60596803523782 556.9018362799613 + vertex -3.9950512003049288 179.54030197242892 76.89991962947417 + endloop +endfacet +facet normal -0.9999999868250228 3.59775884415742e-15 0.00016232669043522314 + outer loop + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -3.9950524216844774 179.60596803523603 76.89991962967161 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + endloop +endfacet +facet normal -0.9999999868250228 3.59775884415742e-15 0.00016232669043522314 + outer loop + vertex -3.9940294294258365 179.60596803523782 556.9018362799613 + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + vertex -3.9950524216844774 179.60596803523603 76.89991962967161 + endloop +endfacet +facet normal -6.324254324805926e-05 0.9999999980001905 1.0265637496187337e-08 + outer loop + vertex -3.9940294294258263 181.0403181681226 556.9018362799609 + vertex -2.4940294296854337 181.04041303193765 556.9015927899221 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + endloop +endfacet +facet normal -6.324254324805926e-05 0.9999999980001905 1.0265637496187337e-08 + outer loop + vertex -2.4950524219440524 181.04041303193586 76.8996761396332 + vertex -3.9950524216844676 181.0403181681208 76.89991962967197 + vertex -2.4940294296854337 181.04041303193765 556.9015927899221 + endloop +endfacet +facet normal -0.9999999848252131 -6.32425423938018e-05 0.0001623266901106206 + outer loop + vertex -2.4951156644872703 182.04041302993616 76.89967614989796 + vertex -2.4950524219440524 181.04041303193586 76.8996761396332 + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + endloop +endfacet +facet normal -0.9999999848252131 -6.32425423938018e-05 0.0001623266901106206 + outer loop + vertex -2.4940294296854337 181.04041303193765 556.9015927899221 + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + vertex -2.4950524219440524 181.04041303193586 76.8996761396332 + endloop +endfacet +facet normal 1.859985924957654e-05 -0.9999999998270226 -3.0189382550924715e-09 + outer loop + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + endloop +endfacet +facet normal 1.859985924957654e-05 -0.9999999998270226 -3.0189382550924715e-09 + outer loop + vertex -2.4951156644872703 182.04041302993616 76.89967614989796 + vertex -2.4940926722286294 182.04041302993795 556.9015928001869 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -0.9999999868250228 7.0933722924676436e-15 0.00016232669043522314 + outer loop + vertex -3.9950524216843983 186.47399897618763 76.89991962967026 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + vertex -3.9940294294257574 186.47399897618942 556.9018362799592 + endloop +endfacet +facet normal -0.9999999868250228 7.0933722924676436e-15 0.00016232669043522314 + outer loop + vertex -3.994029429425735 182.0403851313254 556.9018362799605 + vertex -3.9940294294257574 186.47399897618942 556.9018362799592 + vertex -3.995052421684376 182.04038513132357 76.89991962967089 + endloop +endfacet +facet normal -0.9999980947808033 -0.0019452724511422393 0.0001623263833065563 + outer loop + vertex -3.9951813993197236 186.54030197121796 76.89991965060597 + vertex -3.9950524216843983 186.47399897618763 76.89991962967026 + vertex -3.9941584070610827 186.54030197121975 556.9018363008956 + endloop +endfacet +facet normal -0.9999980947808033 -0.0019452724511422393 0.0001623263833065563 + outer loop + vertex -3.9940294294257574 186.47399897618942 556.9018362799592 + vertex -3.9941584070610827 186.54030197121975 556.9018363008956 + vertex -3.9950524216843983 186.47399897618763 76.89991962967026 + endloop +endfacet +facet normal -0.9999999866520455 -1.859985830847967e-05 0.00016232669040715017 + outer loop + vertex -3.995182614498396 186.60563465350577 76.89991965080323 + vertex -3.9951813993197236 186.54030197121796 76.89991965060597 + vertex -3.9941596222397324 186.6056346535076 556.9018363010921 + endloop +endfacet +facet normal -0.9999999866520455 -1.859985830847967e-05 0.00016232669040715017 + outer loop + vertex -3.9941584070610827 186.54030197121975 556.9018363008956 + vertex -3.9941596222397324 186.6056346535076 556.9018363010921 + vertex -3.9951813993197236 186.54030197121796 76.89991965060597 + endloop +endfacet +facet normal -0.966181323956938 0.2578635775734292 0.00015683701866325123 + outer loop + vertex -3.961238550800757 186.73281865026806 76.8999141407756 + vertex -3.995182614498396 186.60563465350577 76.89991965080323 + vertex -3.9602155585421386 186.73281865026988 556.9018307910653 + endloop +endfacet +facet normal -0.966181323956938 0.2578635775734292 0.00015683701866325123 + outer loop + vertex -3.9941596222397324 186.6056346535076 556.9018363010921 + vertex -3.9602155585421386 186.73281865026988 556.9018307910653 + vertex -3.995182614498396 186.60563465350577 76.89991965080323 + endloop +endfacet +facet normal -0.8665194908436535 0.49914321812785634 0.0001406592428420278 + outer loop + vertex -3.895533462437352 186.846883587277 76.89990347508584 + vertex -3.961238550800757 186.73281865026806 76.8999141407756 + vertex -3.894510470178711 186.8468835872788 556.9018201253748 + endloop +endfacet +facet normal -0.8665194908436535 0.49914321812785634 0.0001406592428420278 + outer loop + vertex -3.9602155585421386 186.73281865026988 556.9018307910653 + vertex -3.894510470178711 186.8468835872788 556.9018201253748 + vertex -3.961238550800757 186.73281865026806 76.8999141407756 + endloop +endfacet +facet normal -0.7078057864252248 0.7064070749234684 0.00011489577207227019 + outer loop + vertex -3.802545042597342 186.94005612757638 76.89988838058402 + vertex -3.895533462437352 186.846883587277 76.89990347508584 + vertex -3.8015220503386784 186.94005612757817 556.9018050308729 + endloop +endfacet +facet normal -0.7078057864252248 0.7064070749234684 0.00011489577207227019 + outer loop + vertex -3.894510470178711 186.8468835872788 556.9018201253748 + vertex -3.8015220503386784 186.94005612757817 556.9018050308729 + vertex -3.895533462437352 186.846883587277 76.89990347508584 + endloop +endfacet +facet normal -0.5008562861794713 0.8655304581494729 8.130234411737678e-05 + outer loop + vertex -3.8015220503386784 186.94005612757817 556.9018050308729 + vertex -3.6875873061635125 187.00598671652142 556.9017865362227 + vertex -3.802545042597342 186.94005612757638 76.89988838058402 + endloop +endfacet +facet normal -0.5008562861794713 0.8655304581494729 8.130234411737678e-05 + outer loop + vertex -3.6886102984221987 187.00598671651966 76.89986988593301 + vertex -3.802545042597342 186.94005612757638 76.89988838058402 + vertex -3.6875873061635125 187.00598671652142 556.9017865362227 + endloop +endfacet +facet normal -0.25977425605297516 0.9656693710136809 4.216829549636597e-05 + outer loop + vertex -3.6875873061635125 187.00598671652142 556.9017865362227 + vertex -3.5604707021826427 187.0401822934277 556.901765901804 + vertex -3.6886102984221987 187.00598671651966 76.89986988593301 + endloop +endfacet +facet normal -0.25977425605297516 0.9656693710136809 4.216829549636597e-05 + outer loop + vertex -3.5614936944412614 187.04018229342591 76.89984925151508 + vertex -3.6886102984221987 187.00598671651966 76.89986988593301 + vertex -3.5604707021826427 187.0401822934277 556.901765901804 + endloop +endfacet +facet normal -0.001650741992056811 0.9999986375244738 2.679591724845885e-07 + outer loop + vertex -3.49416770718172 187.0402917427149 556.9017551390589 + vertex -3.4951906994403834 187.04029174271312 76.89983848876919 + vertex -3.5604707021826427 187.0401822934277 556.901765901804 + endloop +endfacet +facet normal -0.001650741992056811 0.9999986375244738 2.679591724845885e-07 + outer loop + vertex -3.5614936944412614 187.04018229342591 76.89984925151508 + vertex -3.5604707021826427 187.0401822934277 556.901765901804 + vertex -3.4951906994403834 187.04029174271312 76.89983848876919 + endloop +endfacet +facet normal -0.0003175061078407272 0.9999999495949331 5.1539400978573866e-08 + outer loop + vertex -3.49416770718172 187.0402917427149 556.9017551390589 + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + vertex -3.4951906994403834 187.04029174271312 76.89983848876919 + endloop +endfacet +facet normal -0.0003175061078407272 0.9999999495949331 5.1539400978573866e-08 + outer loop + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + vertex -3.4951906994403834 187.04029174271312 76.89983848876919 + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + endloop +endfacet +facet normal 2.2488646315319988e-05 0.9999999997471305 -3.6508229560603567e-09 + outer loop + vertex -3.4288350248871344 187.04031248624165 556.9017445338206 + vertex 7.43833962829254 187.04006809819415 556.8999805013008 + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + endloop +endfacet +facet normal 2.2488646315319988e-05 0.9999999997471305 -3.6508229560603567e-09 + outer loop + vertex 7.437316636033876 187.04006809819236 76.89806385101268 + vertex -3.429858017145821 187.04031248623983 76.89982788353092 + vertex 7.43833962829254 187.04006809819415 556.8999805013008 + endloop +endfacet +facet normal -0.006634224542750717 0.9999779932896307 1.0769114124448523e-06 + outer loop + vertex 7.505832289030784 187.0405158695146 556.8999695454412 + vertex 7.504809296772143 187.0405158695128 76.89805289515232 + vertex 7.43833962829254 187.04006809819415 556.8999805013008 + endloop +endfacet +facet normal -0.006634224542750717 0.9999779932896307 1.0769114124448523e-06 + outer loop + vertex 7.437316636033876 187.04006809819236 76.89806385101268 + vertex 7.43833962829254 187.04006809819415 556.8999805013008 + vertex 7.504809296772143 187.0405158695128 76.89805289515232 + endloop +endfacet +facet normal -1.859985924957654e-05 0.9999999998270226 3.0189382550924715e-09 + outer loop + vertex 7.505832289030784 187.0405158695146 556.8999695454412 + vertex 7.569933332587059 187.04051706178498 556.8999591401308 + vertex 7.504809296772143 187.0405158695128 76.89805289515232 + endloop +endfacet +facet normal -1.859985924957654e-05 0.9999999998270226 3.0189382550924715e-09 + outer loop + vertex 7.568910340328418 187.0405170617832 76.89804248984264 + vertex 7.504809296772143 187.0405158695128 76.89805289515232 + vertex 7.569933332587059 187.04051706178498 556.8999591401308 + endloop +endfacet +facet normal 0.2555220692993388 0.9668032221608257 -4.147805269390345e-05 + outer loop + vertex 7.569933332587059 187.04051706178498 556.8999591401308 + vertex 7.697159290470078 187.00689177041966 556.8999384879611 + vertex 7.568910340328418 187.0405170617832 76.89804248984264 + endloop +endfacet +facet normal 0.2555220692993388 0.9668032221608257 -4.147805269390345e-05 + outer loop + vertex 7.696136298211437 187.00689177041784 76.89802183767291 + vertex 7.568910340328418 187.0405170617832 76.89804248984264 + vertex 7.697159290470078 187.00689177041966 556.8999384879611 + endloop +endfacet +facet normal 0.4970424514673452 0.8677262211835849 -8.068325748916706e-05 + outer loop + vertex 7.697159290470078 187.00689177041966 556.8999384879611 + vertex 7.811347263162688 186.94148373213605 556.8999199522051 + vertex 7.696136298211437 187.00689177041784 76.89802183767291 + endloop +endfacet +facet normal 0.4970424514673452 0.8677262211835849 -8.068325748916706e-05 + outer loop + vertex 7.810324270904046 186.94148373213423 76.89800330191619 + vertex 7.696136298211437 187.00689177041784 76.89802183767291 + vertex 7.811347263162688 186.94148373213605 556.8999199522051 + endloop +endfacet +facet normal 0.7046902102864447 0.7095151122008374 -0.0001143900313487524 + outer loop + vertex 7.811347263162688 186.94148373213605 556.8999199522051 + vertex 7.904715529030331 186.84875039665144 556.8999047960434 + vertex 7.810324270904046 186.94148373213423 76.89800330191619 + endloop +endfacet +facet normal 0.7046902102864447 0.7095151122008374 -0.0001143900313487524 + outer loop + vertex 7.903692536771713 186.84875039664965 76.89798814575447 + vertex 7.810324270904046 186.94148373213423 76.89800330191619 + vertex 7.904715529030331 186.84875039665144 556.8999047960434 + endloop +endfacet +facet normal 0.8643144946279716 0.5029517220286015 -0.00014030131341523822 + outer loop + vertex 7.903692536771713 186.84875039664965 76.89798814575447 + vertex 7.904715529030331 186.84875039665144 556.8999047960434 + vertex 7.9698782027940425 186.73501138752812 76.89797740205503 + endloop +endfacet +facet normal 0.8643144946279716 0.5029517220286015 -0.00014030131341523822 + outer loop + vertex 7.970901195052661 186.73501138752994 556.8998940523439 + vertex 7.9698782027940425 186.73501138752812 76.89797740205503 + vertex 7.904715529030331 186.84875039665144 556.8999047960434 + endloop +endfacet +facet normal 0.9650371744909267 0.2621130048489408 -0.00015665129282861327 + outer loop + vertex 7.9698782027940425 186.73501138752812 76.89797740205503 + vertex 7.970901195052661 186.73501138752994 556.8998940523439 + vertex 8.004370825208392 186.60801783027892 76.8979718029818 + endloop +endfacet +facet normal 0.9650371744909267 0.2621130048489408 -0.00015665129282861327 + outer loop + vertex 8.00539381746701 186.60801783028077 556.8998884532699 + vertex 8.004370825208392 186.60801783027892 76.8979718029818 + vertex 7.970901195052661 186.73501138752994 556.8998940523439 + endloop +endfacet +facet normal 0.999977980116079 0.00663422445895507 -0.0001623231181610382 + outer loop + vertex 8.004370825208392 186.60801783027892 76.8979718029818 + vertex 8.00539381746701 186.60801783028077 556.8998884532699 + vertex 8.004818596528835 186.54052516952885 76.89797173029733 + endloop +endfacet +facet normal 0.999977980116079 0.00663422445895507 -0.0001623231181610382 + outer loop + vertex 8.005841588787453 186.54052516953067 556.8998883805855 + vertex 8.004818596528835 186.54052516952885 76.89797173029733 + vertex 8.00539381746701 186.60801783028077 556.8998884532699 + endloop +endfacet +facet normal 0.9999999866520455 1.859985899909058e-05 -0.00016232669040715017 + outer loop + vertex 8.004818596528835 186.54052516952885 76.89797173029733 + vertex 8.005841588787453 186.54052516953067 556.8998883805855 + vertex 8.004819788799246 186.47642412596153 76.89797173010376 + endloop +endfacet +facet normal 0.9999999866520455 1.859985899909058e-05 -0.00016232669040715017 + outer loop + vertex 8.005842781057865 186.47642412596332 556.8998883803919 + vertex 8.004819788799246 186.47642412596153 76.89797173010376 + vertex 8.005841588787453 186.54052516953067 556.8998883805855 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 6.5019856184532525 182.04098221396413 345.08857154516414 + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 8.001985616688955 182.04107707777897 345.0885436453753 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 6.5019856184532525 182.04098221396413 345.08857154516414 + vertex 6.502048860996644 181.04098221596382 345.0885715439878 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + vertex -3.9979690906254906 184.04085388264915 345.0887668428439 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -11.498799207510396 175.5689751214297 345.08890635722827 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 15.501200783148828 175.56947731762935 345.0884041610287 + vertex 15.501043209991312 184.0412165615337 345.0884041639595 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 15.501200783148828 175.56947731762935 345.0884041610287 + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 8.001506830763743 179.4727337756257 345.0885436542806 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 8.001506830763743 179.4727337756257 345.0885436542806 + vertex 7.96694434578794 179.34576982854998 345.08854429713796 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 7.96694434578794 179.34576982854998 345.08854429713796 + vertex 7.900698861389737 179.2320775024214 345.08854552929466 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 7.900698861389737 179.2320775024214 345.08854552929466 + vertex 7.807284897855816 179.13940474138005 345.08854726678123 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 7.807284897855816 179.13940474138005 345.08854726678123 + vertex 7.693068462426739 179.07406704094223 345.08854939119084 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 7.693068462426739 179.07406704094223 345.08854939119084 + vertex 7.565833216425362 179.04051705741682 345.0885517577485 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 7.565833216425362 179.04051705741682 345.0885517577485 + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 8.001985616688955 182.04107707777897 345.0885436453753 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex 7.565833216425362 179.04051705741682 345.0885517577485 + vertex -3.5636246322851024 179.0403100510672 345.08875876409803 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -3.5636246322851024 179.0403100510672 345.08875876409803 + vertex -3.690797270964721 179.07434040020973 345.0887611294913 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -3.690797270964721 179.07434040020973 345.0887611294913 + vertex -3.8048289045946544 179.14012589423606 345.08876325046356 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -3.8048289045946544 179.14012589423606 345.08876325046356 + vertex -3.897948465788975 179.23318336044414 345.0887649824743 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -3.897948465788975 179.23318336044414 345.0887649824743 + vertex -3.9638100103398974 179.34717108629587 345.08876620748975 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -3.9638100103398974 179.34717108629587 345.08876620748975 + vertex -3.9979251828279496 179.47432099664897 345.08876684202716 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + vertex -3.9979251828279496 179.47432099664897 345.08876684202716 + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -2.498032333428271 182.04041302993807 345.0887389442313 + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + vertex -2.497969090885153 181.0404130319377 345.088738943055 + endloop +endfacet +facet normal 1.8599859248019022e-05 -7.779675748010793e-16 0.9999999998270228 + outer loop + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + vertex -2.498032333428271 182.04041302993807 345.0887389442313 + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + endloop +endfacet +facet normal -1.8599859243795255e-05 0.9999999998270226 3.459555419907567e-10 + outer loop + vertex 15.500922310906201 184.04121656153373 338.5884041650839 + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + endloop +endfacet +facet normal -1.8599859243795255e-05 0.9999999998270226 3.459555419907567e-10 + outer loop + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + vertex 15.500922310906201 184.04121656153373 338.5884041650839 + vertex 8.001827517885317 184.04107707942603 338.58854364719156 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792857e-05 -1.859985924480164e-05 + outer loop + vertex 15.500922310906201 184.04121656153373 338.5884041650839 + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + vertex 15.501079884063715 175.56947731762938 338.58840416215304 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792857e-05 -1.859985924480164e-05 + outer loop + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + vertex 15.500922310906201 184.04121656153373 338.5884041650839 + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + endloop +endfacet +facet normal 1.8599859243795255e-05 -0.9999999998270226 -3.459555419907567e-10 + outer loop + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + endloop +endfacet +facet normal 1.8599859243795255e-05 -0.9999999998270226 -3.459555419907567e-10 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605105e-05 + outer loop + vertex -11.498799207510396 175.5689751214297 345.08890635722827 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -10.498780607997107 174.56899372146188 345.0888877570231 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605105e-05 + outer loop + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -11.498799207510396 175.5689751214297 345.08890635722827 + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + vertex -11.498799207510396 175.5689751214297 345.08890635722827 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624564e-05 + outer loop + vertex 15.501079884063715 175.56947731762938 338.58840416215304 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624564e-05 + outer loop + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 15.501079884063715 175.56947731762938 338.58840416215304 + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 6.501927961911531 181.04098221596382 338.5885715451122 + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + vertex 8.001883318708588 181.04101011492241 338.58854364615365 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + vertex 6.501927961911531 181.04098221596382 338.5885715451122 + vertex 6.50186471936814 182.04098221396413 338.58857154628845 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 15.500922310906201 184.04121656153373 338.5884041650839 + vertex 15.501079884063715 175.56947731762938 338.58840416215304 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 15.500922310906201 184.04121656153373 338.5884041650839 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 8.001827517885317 184.04107707942603 338.58854364719156 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 8.001827517885317 184.04107707942603 338.58854364719156 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 8.001883318708588 181.04101011492241 338.58854364615365 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 8.001827517885317 184.04107707942603 338.58854364719156 + vertex 8.001883318708588 181.04101011492241 338.58854364615365 + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -2.4981532325133835 182.0404130299381 338.58873894535566 + vertex -2.498089989970266 181.0404130319377 338.58873894417934 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -2.4981532325133835 182.0404130299381 338.58873894535566 + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -3.998089989710581 182.04038513132534 338.5887668439682 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 8.001385931678632 179.4727337756257 338.588543655405 + vertex 8.001883318708588 181.04101011492241 338.58854364615365 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 8.001385931678632 179.4727337756257 338.588543655405 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 7.966823446702828 179.34576982855 338.5885442982623 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 7.966823446702828 179.34576982855 338.5885442982623 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 7.900577962304624 179.2320775024214 338.588545530419 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 7.900577962304624 179.2320775024214 338.588545530419 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 7.807163998770703 179.13940474138005 338.5885472679056 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 7.807163998770703 179.13940474138005 338.5885472679056 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 7.692947563341627 179.07406704094223 338.5885493923152 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 7.692947563341627 179.07406704094223 338.5885493923152 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex 7.565712317340249 179.04051705741682 338.5885517588729 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 7.565712317340249 179.04051705741682 338.5885517588729 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex 7.565712317340249 179.04051705741682 338.5885517588729 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.563745531370215 179.0403100510672 338.5887587652224 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.563745531370215 179.0403100510672 338.5887587652224 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.690918170049834 179.07434040020973 338.5887611306156 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.690918170049834 179.07434040020973 338.5887611306156 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.8049498036797673 179.14012589423606 338.5887632515879 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.8049498036797673 179.14012589423606 338.5887632515879 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.8980693648740874 179.23318336044414 338.58876498359865 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.8980693648740874 179.23318336044414 338.58876498359865 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.96393090942501 179.34717108629587 338.5887662086141 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.96393090942501 179.34717108629587 338.5887662086141 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.998046081913062 179.47432099664897 338.5887668431515 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.998046081913062 179.47432099664897 338.5887668431515 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -3.998089989710581 182.04038513132534 338.5887668439682 + vertex -11.499077679753023 184.04071436533405 338.5889063612835 + vertex -3.9980899897106035 184.04085388264917 338.5887668439682 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -11.499077679753023 184.04071436533405 338.5889063612835 + vertex -3.998089989710581 182.04038513132534 338.5887668439682 + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -11.499077679753023 184.04071436533405 338.5889063612835 + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + endloop +endfacet +facet normal -1.859985924801725e-05 8.680403714123038e-16 -0.9999999998270228 + outer loop + vertex -11.499077679753023 184.04071436533405 338.5889063612835 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -11.498920106595508 175.5689751214297 338.58890635835263 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -11.498920106595508 175.5689751214297 338.58890635835263 + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex -11.498920106595508 175.5689751214297 338.58890635835263 + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -11.499077679753023 184.04071436533405 338.5889063612835 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605105e-05 + outer loop + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605105e-05 + outer loop + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + vertex -11.498920106595508 175.5689751214297 338.58890635835263 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792857e-05 -1.859985924480164e-05 + outer loop + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + vertex 15.501200783148828 175.56947731762935 345.0884041610287 + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792857e-05 -1.859985924480164e-05 + outer loop + vertex 15.501200783148828 175.56947731762935 345.0884041610287 + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + vertex 15.501043209991312 184.0412165615337 345.0884041639595 + endloop +endfacet +facet normal 1.8599859243795255e-05 -0.9999999998270226 -3.459555419907567e-10 + outer loop + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + endloop +endfacet +facet normal 1.8599859243795255e-05 -0.9999999998270226 -3.459555419907567e-10 + outer loop + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex -10.49890150708222 174.56899372146188 338.58888775814745 + vertex 14.501098484268915 174.56945871794306 338.5884227616663 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624564e-05 + outer loop + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624564e-05 + outer loop + vertex 14.501219383354027 174.56945871794306 345.08842276054196 + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + vertex 15.501200783148828 175.56947731762935 345.0884041610287 + endloop +endfacet +facet normal 0.9999999994339513 2.803823553304438e-05 -1.8599859240707918e-05 + outer loop + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -3.9979251828279496 179.47432099664897 345.08876684202716 + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + endloop +endfacet +facet normal 0.9999999994339513 2.803823553304438e-05 -1.8599859240707918e-05 + outer loop + vertex -3.9979251828279496 179.47432099664897 345.08876684202716 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + endloop +endfacet +facet normal 0.9658394493490201 0.2591411927086458 -1.7964477816981805e-05 + outer loop + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -3.9638100103398974 179.34717108629587 345.08876620748975 + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + endloop +endfacet +facet normal 0.9658394493490201 0.2591411927086458 -1.7964477816981805e-05 + outer loop + vertex -3.9638100103398974 179.34717108629587 345.08876620748975 + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -3.9979251828279496 179.47432099664897 345.08876684202716 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.610484794495736e-05 + outer loop + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + vertex -3.897948465788975 179.23318336044414 345.0887649824743 + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.610484794495736e-05 + outer loop + vertex -3.897948465788975 179.23318336044414 345.0887649824743 + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + vertex -3.9638100103398974 179.34717108629587 345.08876620748975 + endloop +endfacet +facet normal 0.7068709027842218 0.707342580808025 -1.3147699300030624e-05 + outer loop + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + vertex -3.897948465788975 179.23318336044414 345.0887649824743 + vertex -3.8048289045946544 179.14012589423606 345.08876325046356 + endloop +endfacet +facet normal 0.7068709027842218 0.707342580808025 -1.3147699300030624e-05 + outer loop + vertex -3.897948465788975 179.23318336044414 345.0887649824743 + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + endloop +endfacet +facet normal 0.4997111295562009 0.8661921189385627 -9.29455667534781e-06 + outer loop + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + vertex -3.8048289045946544 179.14012589423606 345.08876325046356 + vertex -3.690797270964721 179.07434040020973 345.0887611294913 + endloop +endfacet +facet normal 0.4997111295562009 0.8661921189385627 -9.29455667534781e-06 + outer loop + vertex -3.8048289045946544 179.14012589423606 345.08876325046356 + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + endloop +endfacet +facet normal 0.2584968686625305 0.9660120956119286 -4.808005373256877e-06 + outer loop + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + vertex -3.690797270964721 179.07434040020973 345.0887611294913 + vertex -3.5636246322851024 179.0403100510672 345.08875876409803 + endloop +endfacet +facet normal 0.2584968686625305 0.9660120956119286 -4.808005373256877e-06 + outer loop + vertex -3.690797270964721 179.07434040020973 345.0887611294913 + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + endloop +endfacet +facet normal -1.859985925190337e-05 0.9999999998270226 3.459555421415665e-10 + outer loop + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex -3.5636246322851024 179.0403100510672 345.08875876409803 + vertex 7.565833216425362 179.04051705741682 345.0885517577485 + endloop +endfacet +facet normal -1.859985925190337e-05 0.9999999998270226 3.459555421415665e-10 + outer loop + vertex -3.5636246322851024 179.0403100510672 345.08875876409803 + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + endloop +endfacet +facet normal -0.25496964087487123 0.9669490587459346 4.742399434363138e-06 + outer loop + vertex 7.693068462426739 179.07406704094223 345.08854939119084 + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex 7.565833216425362 179.04051705741682 345.0885517577485 + endloop +endfacet +facet normal -0.25496964087487123 0.9669490587459346 4.742399434363138e-06 + outer loop + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex 7.693068462426739 179.07406704094223 345.08854939119084 + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + endloop +endfacet +facet normal -0.4965465930448009 0.8680100695558219 9.235696742989518e-06 + outer loop + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + vertex 7.693068462426739 179.07406704094223 345.08854939119084 + vertex 7.807284897855816 179.13940474138005 345.08854726678123 + endloop +endfacet +facet normal -0.4965465930448009 0.8680100695558219 9.235696742989518e-06 + outer loop + vertex 7.693068462426739 179.07406704094223 345.08854939119084 + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + endloop +endfacet +facet normal -0.7042847154820756 0.7099176285786488 1.3099596581315947e-05 + outer loop + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + vertex 7.807284897855816 179.13940474138005 345.08854726678123 + vertex 7.900698861389737 179.2320775024214 345.08854552929466 + endloop +endfacet +facet normal -0.7042847154820756 0.7099176285786488 1.3099596581315947e-05 + outer loop + vertex 7.807284897855816 179.13940474138005 345.08854726678123 + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + endloop +endfacet +facet normal -0.8640269984419949 0.5034454744111291 1.607078056068099e-05 + outer loop + vertex 7.96694434578794 179.34576982854998 345.08854429713796 + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + vertex 7.900698861389737 179.2320775024214 345.08854552929466 + endloop +endfacet +facet normal -0.8640269984419949 0.5034454744111291 1.607078056068099e-05 + outer loop + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + vertex 7.96694434578794 179.34576982854998 345.08854429713796 + vertex 7.966842046562077 179.34576982855 339.58854429808935 + endloop +endfacet +facet normal -0.9648872693327225 0.2626643431407393 1.794676740310278e-05 + outer loop + vertex 8.001506830763743 179.4727337756257 345.0885436542806 + vertex 7.966842046562077 179.34576982855 339.58854429808935 + vertex 7.96694434578794 179.34576982854998 345.08854429713796 + endloop +endfacet +facet normal -0.9648872693327225 0.2626643431407393 1.794676740310278e-05 + outer loop + vertex 7.966842046562077 179.34576982855 339.58854429808935 + vertex 8.001506830763743 179.4727337756257 345.0885436542806 + vertex 8.00140453153788 179.4727337756257 339.588543655232 + endloop +endfacet +facet normal -0.9999999495333092 0.00031715520572741504 1.859985831256326e-05 + outer loop + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 8.00140453153788 179.4727337756257 339.588543655232 + vertex 8.001506830763743 179.4727337756257 345.0885436542806 + endloop +endfacet +facet normal -0.9999999495333092 0.00031715520572741504 1.859985831256326e-05 + outer loop + vertex 8.00140453153788 179.4727337756257 339.588543655232 + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + endloop +endfacet +facet normal 1.859985930395633e-05 -0.9999999998270226 -3.4595554310974425e-10 + outer loop + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 6.502048860996644 181.04098221596382 345.0885715439878 + endloop +endfacet +facet normal 1.859985930395633e-05 -0.9999999998270226 -3.4595554310974425e-10 + outer loop + vertex 8.0020042177937 181.04101011492241 345.0885436450293 + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242607e-05 1.8599859210822783e-05 + outer loop + vertex 6.5019856184532525 182.04098221396413 345.08857154516414 + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + vertex 6.502048860996644 181.04098221596382 345.0885715439878 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242607e-05 1.8599859210822783e-05 + outer loop + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + vertex 6.5019856184532525 182.04098221396413 345.08857154516414 + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550156e-09 + outer loop + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + vertex 6.5019856184532525 182.04098221396413 345.08857154516414 + vertex 8.001985616688955 182.04107707777897 345.0885436453753 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550156e-09 + outer loop + vertex 6.5019856184532525 182.04098221396413 345.08857154516414 + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + vertex 8.001985616688955 182.04107707777897 345.0885436453753 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + endloop +endfacet +facet normal 0.9999999998462391 4.649964825186193e-06 -1.6908566647105897e-05 + outer loop + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + endloop +endfacet +facet normal 0.9999999998462391 4.649964825186193e-06 -1.6908566647105897e-05 + outer loop + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + vertex -3.9979690906254906 184.04085388264915 345.0887668428439 + endloop +endfacet +facet normal -1.8599859364119643e-05 0.9999999998270226 3.4595554402526967e-10 + outer loop + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + vertex -2.498032333428271 182.04041302993807 345.0887389442313 + endloop +endfacet +facet normal -1.8599859364119643e-05 0.9999999998270226 3.4595554402526967e-10 + outer loop + vertex -3.997969090625468 182.04038513132534 345.0887668428438 + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.8599859210822783e-05 + outer loop + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + vertex -2.497969090885153 181.0404130319377 345.088738943055 + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.8599859210822783e-05 + outer loop + vertex -2.497969090885153 181.0404130319377 345.088738943055 + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + vertex -2.498032333428271 182.04041302993807 345.0887389442313 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.1763031831975013e-09 + outer loop + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -2.497969090885153 181.0404130319377 345.088738943055 + vertex -3.9979690906254963 181.04031816812244 345.0887668428438 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.1763031831975013e-09 + outer loop + vertex -2.497969090885153 181.0404130319377 345.088738943055 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + endloop +endfacet +facet normal -1.8599859219734708e-05 0.9999999998270226 3.4595554154323395e-10 + outer loop + vertex -3.9980899897106035 184.04085388264917 338.5887668439682 + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + endloop +endfacet +facet normal -1.8599859219734708e-05 0.9999999998270226 3.4595554154323395e-10 + outer loop + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -3.9980899897106035 184.04085388264917 338.5887668439682 + vertex -11.499077679753023 184.04071436533405 338.5889063612835 + endloop +endfacet +facet normal -1.8599859243795255e-05 0.9999999998270226 3.459555419907567e-10 + outer loop + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 15.501043209991312 184.0412165615337 345.0884041639595 + endloop +endfacet +facet normal -1.8599859243795255e-05 0.9999999998270226 3.459555419907567e-10 + outer loop + vertex 8.00194841697043 184.04107707942603 345.0885436460672 + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + endloop +endfacet +facet normal -1.8599859219734708e-05 0.9999999998270226 3.4595554154323395e-10 + outer loop + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -3.9979690906254906 184.04085388264915 345.0887668428439 + endloop +endfacet +facet normal -1.8599859219734708e-05 0.9999999998270226 3.4595554154323395e-10 + outer loop + vertex -11.49895678066791 184.04071436533403 345.08890636015917 + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + endloop +endfacet +facet normal 0.999999999599929 4.6499648249916704e-06 -2.7901968550393885e-05 + outer loop + vertex -3.9980899897106035 184.04085388264917 338.5887668439682 + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + vertex -3.998089989710581 182.04038513132534 338.5887668439682 + endloop +endfacet +facet normal 0.999999999599929 4.6499648249916704e-06 -2.7901968550393885e-05 + outer loop + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + vertex -3.9980899897106035 184.04085388264917 338.5887668439682 + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.8599859210822783e-05 + outer loop + vertex -2.4981532325133835 182.0404130299381 338.58873894535566 + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + vertex -2.498089989970266 181.0404130319377 338.58873894417934 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.8599859210822783e-05 + outer loop + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + vertex -2.4981532325133835 182.0404130299381 338.58873894535566 + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + endloop +endfacet +facet normal 0.9999999994339513 2.803823553304438e-05 -1.8599859240707918e-05 + outer loop + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -3.998046081913062 179.47432099664897 338.5887668431515 + endloop +endfacet +facet normal 0.9999999994339513 2.803823553304438e-05 -1.8599859240707918e-05 + outer loop + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + endloop +endfacet +facet normal -1.8599859364119643e-05 0.9999999998270226 3.45955545348044e-10 + outer loop + vertex -2.4981532325133835 182.0404130299381 338.58873894535566 + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + endloop +endfacet +facet normal -1.8599859364119643e-05 0.9999999998270226 3.45955545348044e-10 + outer loop + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + vertex -2.4981532325133835 182.0404130299381 338.58873894535566 + vertex -3.998089989710581 182.04038513132534 338.5887668439682 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.176303183197914e-09 + outer loop + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.176303183197914e-09 + outer loop + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + vertex -3.998089989710609 181.04031816812244 338.5887668439682 + vertex -2.498089989970266 181.0404130319377 338.58873894417934 + endloop +endfacet +facet normal 0.9658394493490858 0.2591411927084001 -1.796447778350219e-05 + outer loop + vertex -3.96393090942501 179.34717108629587 338.5887662086141 + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + endloop +endfacet +facet normal 0.9658394493490858 0.2591411927084001 -1.796447778350219e-05 + outer loop + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -3.96393090942501 179.34717108629587 338.5887662086141 + vertex -3.998046081913062 179.47432099664897 338.5887668431515 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.610484786074711e-05 + outer loop + vertex -3.8980693648740874 179.23318336044414 338.58876498359865 + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.610484786074711e-05 + outer loop + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + vertex -3.8980693648740874 179.23318336044414 338.58876498359865 + vertex -3.96393090942501 179.34717108629587 338.5887662086141 + endloop +endfacet +facet normal 0.7068709027839646 0.7073425808082822 -1.3147699252164228e-05 + outer loop + vertex -3.8049498036797673 179.14012589423606 338.5887632515879 + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + endloop +endfacet +facet normal 0.7068709027839646 0.7073425808082822 -1.3147699252164228e-05 + outer loop + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + vertex -3.8049498036797673 179.14012589423606 338.5887632515879 + vertex -3.8980693648740874 179.23318336044414 338.58876498359865 + endloop +endfacet +facet normal 0.4997111295562008 0.8661921189385627 -9.294556675347809e-06 + outer loop + vertex -3.690918170049834 179.07434040020973 338.5887611306156 + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + endloop +endfacet +facet normal 0.4997111295562008 0.8661921189385627 -9.294556675347809e-06 + outer loop + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + vertex -3.690918170049834 179.07434040020973 338.5887611306156 + vertex -3.8049498036797673 179.14012589423606 338.5887632515879 + endloop +endfacet +facet normal 0.25849686866253047 0.9660120956119286 -4.808005373256876e-06 + outer loop + vertex -3.563745531370215 179.0403100510672 338.5887587652224 + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + endloop +endfacet +facet normal 0.25849686866253047 0.9660120956119286 -4.808005373256876e-06 + outer loop + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + vertex -3.563745531370215 179.0403100510672 338.5887587652224 + vertex -3.690918170049834 179.07434040020973 338.5887611306156 + endloop +endfacet +facet normal -1.859985925190337e-05 0.9999999998270226 3.459555421415665e-10 + outer loop + vertex 7.565712317340249 179.04051705741682 338.5885517588729 + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + endloop +endfacet +facet normal -1.859985925190337e-05 0.9999999998270226 3.459555421415665e-10 + outer loop + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + vertex 7.565712317340249 179.04051705741682 338.5885517588729 + vertex -3.563745531370215 179.0403100510672 338.5887587652224 + endloop +endfacet +facet normal -0.254969640874829 0.9669490587459457 4.7423994401136805e-06 + outer loop + vertex 7.692947563341627 179.07406704094223 338.5885493923152 + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + endloop +endfacet +facet normal -0.254969640874829 0.9669490587459457 4.7423994401136805e-06 + outer loop + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex 7.692947563341627 179.07406704094223 338.5885493923152 + vertex 7.565712317340249 179.04051705741682 338.5885517588729 + endloop +endfacet +facet normal -0.4965465930448748 0.8680100695557798 9.235696754194307e-06 + outer loop + vertex 7.807163998770703 179.13940474138005 338.5885472679056 + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + endloop +endfacet +facet normal -0.4965465930448748 0.8680100695557798 9.235696754194307e-06 + outer loop + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + vertex 7.807163998770703 179.13940474138005 338.5885472679056 + vertex 7.692947563341627 179.07406704094223 338.5885493923152 + endloop +endfacet +facet normal -0.7042847154819899 0.7099176285787339 1.309959659720156e-05 + outer loop + vertex 7.900577962304624 179.2320775024214 338.588545530419 + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + endloop +endfacet +facet normal -0.7042847154819899 0.7099176285787339 1.309959659720156e-05 + outer loop + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + vertex 7.900577962304624 179.2320775024214 338.588545530419 + vertex 7.807163998770703 179.13940474138005 338.5885472679056 + endloop +endfacet +facet normal -0.8640269984420696 0.5034454744110011 1.6070780580175082e-05 + outer loop + vertex 7.966842046562077 179.34576982855 339.58854429808935 + vertex 7.900577962304624 179.2320775024214 338.588545530419 + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + endloop +endfacet +facet normal -0.8640269984420696 0.5034454744110011 1.6070780580175082e-05 + outer loop + vertex 7.900577962304624 179.2320775024214 338.588545530419 + vertex 7.966842046562077 179.34576982855 339.58854429808935 + vertex 7.966823446702828 179.34576982855 338.5885442982623 + endloop +endfacet +facet normal -0.9648872693327224 0.2626643431407392 1.7946767403102775e-05 + outer loop + vertex 8.00140453153788 179.4727337756257 339.588543655232 + vertex 7.966823446702828 179.34576982855 338.5885442982623 + vertex 7.966842046562077 179.34576982855 339.58854429808935 + endloop +endfacet +facet normal -0.9648872693327224 0.2626643431407392 1.7946767403102775e-05 + outer loop + vertex 7.966823446702828 179.34576982855 338.5885442982623 + vertex 8.00140453153788 179.4727337756257 339.588543655232 + vertex 8.001385931678632 179.4727337756257 338.588543655405 + endloop +endfacet +facet normal -0.9999999495333092 0.0003171552057274151 1.8599858312563265e-05 + outer loop + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + vertex 8.001385931678632 179.4727337756257 338.588543655405 + vertex 8.00140453153788 179.4727337756257 339.588543655232 + endloop +endfacet +facet normal -0.9999999495333092 0.0003171552057274151 1.8599858312563265e-05 + outer loop + vertex 8.001385931678632 179.4727337756257 338.588543655405 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + vertex 8.001883318708588 181.04101011492241 338.58854364615365 + endloop +endfacet +facet normal 1.859985930395633e-05 -0.9999999998270226 -3.4595554310974425e-10 + outer loop + vertex 6.501927961911531 181.04098221596382 338.5885715451122 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + endloop +endfacet +facet normal 1.859985930395633e-05 -0.9999999998270226 -3.4595554310974425e-10 + outer loop + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + vertex 6.501927961911531 181.04098221596382 338.5885715451122 + vertex 8.001883318708588 181.04101011492241 338.58854364615365 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242607e-05 1.8599859210822783e-05 + outer loop + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + vertex 6.501927961911531 181.04098221596382 338.5885715451122 + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242607e-05 1.8599859210822783e-05 + outer loop + vertex 6.501927961911531 181.04098221596382 338.5885715451122 + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + vertex 6.50186471936814 182.04098221396413 338.58857154628845 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550156e-09 + outer loop + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550156e-09 + outer loop + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + vertex 6.50186471936814 182.04098221396413 338.58857154628845 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792857e-05 1.859985924480164e-05 + outer loop + vertex 8.001864717603842 182.04107707777897 338.58854364649966 + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + vertex 8.001827517885317 184.04107707942603 338.58854364719156 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + vertex 6.50194656177078 181.04098221596382 339.5885715449392 + vertex 6.501883319227389 182.04098221396413 339.58857154611553 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + vertex -2.4980713901110168 181.0404130319377 339.58873894400637 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -2.4981346326541347 182.0404130299381 339.5887389451826 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 8.00140453153788 179.4727337756257 339.588543655232 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 8.00140453153788 179.4727337756257 339.588543655232 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 7.966842046562077 179.34576982855 339.58854429808935 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 7.966842046562077 179.34576982855 339.58854429808935 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 7.900596562163918 179.2320775024214 339.58854553024605 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 7.807182598629952 179.13940474138005 339.5885472677326 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 7.6929661632009205 179.07406704094223 339.5885493921422 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 7.565730917199498 179.04051705741682 339.5885517586999 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.563726931510966 179.0403100510672 339.5887587650494 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.690899570190585 179.07434040020973 339.5887611304426 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.804931203820518 179.14012589423606 339.58876325141495 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.8980507650148835 179.23318336044403 339.5887649834257 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.9639123095658064 179.3471710862958 339.58876620844114 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.9980274820538133 179.47432099664897 339.58876684297854 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -3.9980713898513542 184.04085388264917 339.5887668437952 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -3.998052785632725 182.04038513167137 339.5887668434492 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -3.99807138985136 181.04031816812244 339.5887668437952 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex -11.499059079893774 184.04071436533405 339.5889063611105 + vertex -10.49888290722297 174.56899372146188 339.5888877579745 + vertex -11.49890150673626 175.5689751214297 339.58890635817966 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + vertex 15.501098483922965 175.56947731762938 339.58840416198007 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 15.500940910765449 184.0412165615337 339.5884041649109 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + vertex 14.501117084128163 174.56945871794306 339.58842276149335 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + endloop +endfacet +facet normal -1.8599859248019022e-05 7.779675748010793e-16 -0.9999999998270228 + outer loop + vertex 8.001846117744567 184.04107707942603 339.5885436470185 + vertex 8.001901918567837 181.04101011492241 339.5885436459807 + vertex 8.001883317463092 182.04107707777897 339.5885436463266 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 8.00259011211447 182.04107707777894 377.5885436397538 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + vertex 6.502590113878768 182.04098221396407 377.58857153954267 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 6.502653356422159 181.0409822159638 377.58857153836635 + vertex 6.502590113878768 182.04098221396407 377.58857153954267 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.9973645951999752 184.04085388264912 377.5887668372224 + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -11.49819471208488 175.56897512142967 377.5889063516068 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 15.501647705416827 184.04121656153367 377.58840415833805 + vertex 15.501805278574343 175.56947731762932 377.5884041554072 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + vertex 15.501805278574343 175.56947731762932 377.5884041554072 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 8.00211132618926 179.47273377562567 377.58854364865914 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 7.967548841213456 179.34576982854995 377.5885442915165 + vertex 8.00211132618926 179.47273377562567 377.58854364865914 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 7.9013033568152515 179.23207750242136 377.5885455236732 + vertex 7.967548841213456 179.34576982854995 377.5885442915165 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 7.8078893932813305 179.13940474138002 377.58854726115976 + vertex 7.9013033568152515 179.23207750242136 377.5885455236732 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 7.693672957852255 179.0740670409422 377.5885493855694 + vertex 7.8078893932813305 179.13940474138002 377.58854726115976 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 7.5664377118508765 179.04051705741682 377.58855175212705 + vertex 7.693672957852255 179.0740670409422 377.5885493855694 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + vertex 7.5664377118508765 179.04051705741682 377.58855175212705 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex 8.00259011211447 182.04107707777894 377.5885436397538 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.5630201368595866 179.04031005106717 377.58875875847656 + vertex 7.5664377118508765 179.04051705741682 377.58855175212705 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.690192775539206 179.0743404002097 377.5887611238698 + vertex -3.5630201368595866 179.04031005106717 377.58875875847656 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.804224409169139 179.14012589423604 377.5887632448421 + vertex -3.690192775539206 179.0743404002097 377.5887611238698 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.897343970363459 179.23318336044412 377.5887649768528 + vertex -3.804224409169139 179.14012589423604 377.5887632448421 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.963205514914382 179.34717108629584 377.5887662018683 + vertex -3.897343970363459 179.23318336044412 377.5887649768528 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.9973206874024343 179.47432099664897 377.5887668364057 + vertex -3.963205514914382 179.34717108629584 377.5887662018683 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + vertex -3.9973206874024343 179.47432099664897 377.5887668364057 + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -2.4973645954596377 181.04041303193767 377.5887389374335 + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + vertex -2.4974278380027557 182.04041302993804 377.5887389386098 + endloop +endfacet +facet normal -1.859985924801902e-05 7.77967575122592e-16 -0.9999999998270228 + outer loop + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + vertex -2.4974278380027557 182.04041302993804 377.5887389386098 + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + endloop +endfacet +facet normal -1.859985924379526e-05 0.9999999998270226 3.459555419907571e-10 + outer loop + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + vertex 8.002655211621809 184.041077079426 383.08854363949433 + vertex 15.50176860450194 184.04121656153367 384.0884041572137 + endloop +endfacet +facet normal -1.859985924379526e-05 0.9999999998270226 3.459555419907571e-10 + outer loop + vertex 8.002673811481058 184.041077079426 384.08854363932136 + vertex 15.50176860450194 184.04121656153367 384.0884041572137 + vertex 8.002655211621809 184.041077079426 383.08854363949433 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792864e-05 -1.8599859244801638e-05 + outer loop + vertex 15.501926177659456 175.56947731762932 384.08840415428284 + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + vertex 15.50176860450194 184.04121656153367 384.0884041572137 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792864e-05 -1.8599859244801638e-05 + outer loop + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + vertex 15.50176860450194 184.04121656153367 384.0884041572137 + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + endloop +endfacet +facet normal 1.859985924379526e-05 -0.9999999998270226 -3.459555419907571e-10 + outer loop + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + endloop +endfacet +facet normal 1.859985924379526e-05 -0.9999999998270226 -3.459555419907571e-10 + outer loop + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605101e-05 + outer loop + vertex -10.498176112571592 174.56899372146185 377.5888877514016 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -11.49819471208488 175.56897512142967 377.5889063516068 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605101e-05 + outer loop + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + vertex -11.49819471208488 175.56897512142967 377.5889063516068 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex -11.49819471208488 175.56897512142967 377.5889063516068 + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex -11.498249986016532 184.040714365334 383.0889063535863 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624561e-05 + outer loop + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 15.501926177659456 175.56947731762932 384.08840415428284 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624561e-05 + outer loop + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + vertex 15.501926177659456 175.56947731762932 384.08840415428284 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 8.002729612304329 181.0410101149224 384.08854363828345 + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + vertex 6.502774255507272 181.04098221596377 384.088571537242 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 6.50271101296388 182.04098221396407 384.0885715384183 + vertex 6.502774255507272 181.04098221596377 384.088571537242 + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 15.501926177659456 175.56947731762932 384.08840415428284 + vertex 15.50176860450194 184.04121656153367 384.0884041572137 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 8.002673811481058 184.041077079426 384.08854363932136 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 15.50176860450194 184.04121656153367 384.0884041572137 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 8.002729612304329 181.0410101149224 384.08854363828345 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 8.002673811481058 184.041077079426 384.08854363932136 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + vertex 8.002729612304329 181.0410101149224 384.08854363828345 + vertex 8.002673811481058 184.041077079426 384.08854363932136 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -2.4972436963745253 181.04041303193765 384.0887389363092 + vertex -2.4973069389176428 182.04041302993804 384.08873893748546 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.99724369611484 182.0403851313253 384.08876683609805 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + vertex -2.4973069389176428 182.04041302993804 384.08873893748546 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 8.002729612304329 181.0410101149224 384.08854363828345 + vertex 8.002232225274373 179.47273377562567 384.0885436475348 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 7.967669740298569 179.34576982854995 384.0885442903922 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 8.002232225274373 179.47273377562567 384.0885436475348 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 7.9014242559003645 179.23207750242136 384.0885455225488 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 7.967669740298569 179.34576982854995 384.0885442903922 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 7.808010292366443 179.13940474138002 384.0885472600354 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 7.9014242559003645 179.23207750242136 384.0885455225488 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 7.693793856937368 179.0740670409422 384.08854938444506 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 7.808010292366443 179.13940474138002 384.0885472600354 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex 7.5665586109359895 179.04051705741682 384.0885517510027 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 7.693793856937368 179.0740670409422 384.08854938444506 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex 7.5665586109359895 179.04051705741682 384.0885517510027 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.562899237774474 179.04031005106717 384.08875875735225 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex 7.5665586109359895 179.04051705741682 384.0885517510027 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.6900718764540934 179.0743404002097 384.08876112274544 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.562899237774474 179.04031005106717 384.08875875735225 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.8041035100840266 179.14012589423604 384.0887632437177 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.6900718764540934 179.0743404002097 384.08876112274544 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.8972230712783467 179.2331833604441 384.08876497572845 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.8041035100840266 179.14012589423604 384.0887632437177 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.9630846158292696 179.34717108629582 384.0887662007439 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.8972230712783467 179.2331833604441 384.08876497572845 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.997199788317322 179.47432099664897 384.0887668352813 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.9630846158292696 179.34717108629582 384.0887662007439 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.997199788317322 179.47432099664897 384.0887668352813 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.9972436961148627 184.04085388264912 384.08876683609805 + vertex -11.498231386157283 184.040714365334 384.08890635341334 + vertex -3.99724369611484 182.0403851313253 384.08876683609805 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + vertex -3.99724369611484 182.0403851313253 384.08876683609805 + vertex -11.498231386157283 184.040714365334 384.08890635341334 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + vertex -11.498231386157283 184.040714365334 384.08890635341334 + endloop +endfacet +facet normal 1.859985924802079e-05 -6.878947785113675e-16 0.9999999998270228 + outer loop + vertex -11.498073812999769 175.56897512142965 384.0889063504825 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -11.498231386157283 184.040714365334 384.08890635341334 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + vertex -11.498073812999769 175.56897512142965 384.0889063504825 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex -11.498231386157283 184.040714365334 384.08890635341334 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + vertex -11.498073812999769 175.56897512142965 384.0889063504825 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605101e-05 + outer loop + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + endloop +endfacet +facet normal -0.7070936288553363 -0.7071199331508208 1.3151841973605101e-05 + outer loop + vertex -11.498073812999769 175.56897512142965 384.0889063504825 + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792864e-05 -1.8599859244801638e-05 + outer loop + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + vertex 15.501805278574343 175.56947731762932 377.5884041554072 + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792864e-05 -1.8599859244801638e-05 + outer loop + vertex 15.501647705416827 184.04121656153367 377.58840415833805 + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + vertex 15.501805278574343 175.56947731762932 377.5884041554072 + endloop +endfacet +facet normal 1.859985924379526e-05 -0.9999999998270226 -3.459555419907571e-10 + outer loop + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + endloop +endfacet +facet normal 1.859985924379526e-05 -0.9999999998270226 -3.459555419907571e-10 + outer loop + vertex 14.501944777864654 174.569458717943 384.0884227537961 + vertex -10.498055213486479 174.56899372146185 384.08888775027725 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624561e-05 + outer loop + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + endloop +endfacet +facet normal 0.7071199330285369 -0.7070936289776155 -1.3152331228624561e-05 + outer loop + vertex 15.501805278574343 175.56947731762932 377.5884041554072 + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + vertex 14.501823878779541 174.56945871794304 377.5884227549205 + endloop +endfacet +facet normal 0.9999999994339513 2.8038235533044387e-05 -1.8599859240707915e-05 + outer loop + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + vertex -3.9973206874024343 179.47432099664897 377.5887668364057 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + endloop +endfacet +facet normal 0.9999999994339513 2.8038235533044387e-05 -1.8599859240707915e-05 + outer loop + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -3.9973206874024343 179.47432099664897 377.5887668364057 + endloop +endfacet +facet normal 0.9658394493490201 0.2591411927086458 -1.79644778169818e-05 + outer loop + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + vertex -3.963205514914382 179.34717108629584 377.5887662018683 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + endloop +endfacet +facet normal 0.9658394493490201 0.2591411927086458 -1.79644778169818e-05 + outer loop + vertex -3.9973206874024343 179.47432099664897 377.5887668364057 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + vertex -3.963205514914382 179.34717108629584 377.5887662018683 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.6104847944957356e-05 + outer loop + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + vertex -3.897343970363459 179.23318336044412 377.5887649768528 + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.6104847944957356e-05 + outer loop + vertex -3.963205514914382 179.34717108629584 377.5887662018683 + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + vertex -3.897343970363459 179.23318336044412 377.5887649768528 + endloop +endfacet +facet normal 0.7068709027842218 0.707342580808025 -1.314769930003062e-05 + outer loop + vertex -3.804224409169139 179.14012589423604 377.5887632448421 + vertex -3.897343970363459 179.23318336044412 377.5887649768528 + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + endloop +endfacet +facet normal 0.7068709027842218 0.707342580808025 -1.314769930003062e-05 + outer loop + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + vertex -3.897343970363459 179.23318336044412 377.5887649768528 + endloop +endfacet +facet normal 0.4997111295562009 0.8661921189385627 -9.294556675347809e-06 + outer loop + vertex -3.690192775539206 179.0743404002097 377.5887611238698 + vertex -3.804224409169139 179.14012589423604 377.5887632448421 + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + endloop +endfacet +facet normal 0.4997111295562009 0.8661921189385627 -9.294556675347809e-06 + outer loop + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + vertex -3.804224409169139 179.14012589423604 377.5887632448421 + endloop +endfacet +facet normal 0.2584968686625305 0.9660120956119286 -4.808005373256876e-06 + outer loop + vertex -3.5630201368595866 179.04031005106717 377.58875875847656 + vertex -3.690192775539206 179.0743404002097 377.5887611238698 + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + endloop +endfacet +facet normal 0.2584968686625305 0.9660120956119286 -4.808005373256876e-06 + outer loop + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + vertex -3.690192775539206 179.0743404002097 377.5887611238698 + endloop +endfacet +facet normal -1.8599859251903376e-05 0.9999999998270226 3.4595554214156693e-10 + outer loop + vertex 7.5664377118508765 179.04051705741682 377.58855175212705 + vertex -3.5630201368595866 179.04031005106717 377.58875875847656 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + endloop +endfacet +facet normal -1.8599859251903376e-05 0.9999999998270226 3.4595554214156693e-10 + outer loop + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + vertex -3.5630201368595866 179.04031005106717 377.58875875847656 + endloop +endfacet +facet normal -0.25496964087487123 0.9669490587459346 4.742399434363137e-06 + outer loop + vertex 7.5664377118508765 179.04051705741682 377.58855175212705 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + vertex 7.693672957852255 179.0740670409422 377.5885493855694 + endloop +endfacet +facet normal -0.25496964087487123 0.9669490587459346 4.742399434363137e-06 + outer loop + vertex 7.693775257078164 179.0740670409422 383.088549384618 + vertex 7.693672957852255 179.0740670409422 377.5885493855694 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + endloop +endfacet +facet normal -0.4965465930448009 0.8680100695558219 9.235696742989516e-06 + outer loop + vertex 7.8078893932813305 179.13940474138002 377.58854726115976 + vertex 7.693672957852255 179.0740670409422 377.5885493855694 + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + endloop +endfacet +facet normal -0.4965465930448009 0.8680100695558219 9.235696742989516e-06 + outer loop + vertex 7.693775257078164 179.0740670409422 383.088549384618 + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + vertex 7.693672957852255 179.0740670409422 377.5885493855694 + endloop +endfacet +facet normal -0.7042847154820756 0.7099176285786488 1.3099596581315943e-05 + outer loop + vertex 7.9013033568152515 179.23207750242136 377.5885455236732 + vertex 7.8078893932813305 179.13940474138002 377.58854726115976 + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + endloop +endfacet +facet normal -0.7042847154820756 0.7099176285786488 1.3099596581315943e-05 + outer loop + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + vertex 7.8078893932813305 179.13940474138002 377.58854726115976 + endloop +endfacet +facet normal -0.8640269984419949 0.5034454744111291 1.6070780560680985e-05 + outer loop + vertex 7.9013033568152515 179.23207750242136 377.5885455236732 + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + vertex 7.967548841213456 179.34576982854995 377.5885442915165 + endloop +endfacet +facet normal -0.8640269984419949 0.5034454744111291 1.6070780560680985e-05 + outer loop + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + vertex 7.967548841213456 179.34576982854995 377.5885442915165 + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + endloop +endfacet +facet normal -0.9648872693327225 0.2626643431407393 1.7946767403102775e-05 + outer loop + vertex 7.967548841213456 179.34576982854995 377.5885442915165 + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + vertex 8.00211132618926 179.47273377562567 377.58854364865914 + endloop +endfacet +facet normal -0.9648872693327225 0.2626643431407393 1.7946767403102775e-05 + outer loop + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + vertex 8.00211132618926 179.47273377562567 377.58854364865914 + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + endloop +endfacet +facet normal -0.9999999495333092 0.00031715520572741504 1.8599858312563265e-05 + outer loop + vertex 8.00211132618926 179.47273377562567 377.58854364865914 + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + endloop +endfacet +facet normal -0.9999999495333092 0.00031715520572741504 1.8599858312563265e-05 + outer loop + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + endloop +endfacet +facet normal 1.8599859303956336e-05 -0.9999999998270226 -3.4595554310974467e-10 + outer loop + vertex 6.502653356422159 181.0409822159638 377.58857153836635 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + endloop +endfacet +facet normal 1.8599859303956336e-05 -0.9999999998270226 -3.4595554310974467e-10 + outer loop + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + vertex 8.002608713219216 181.0410101149224 377.5885436394078 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242609e-05 1.859985921082278e-05 + outer loop + vertex 6.502653356422159 181.0409822159638 377.58857153836635 + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + vertex 6.502590113878768 182.04098221396407 377.58857153954267 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242609e-05 1.859985921082278e-05 + outer loop + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + vertex 6.502590113878768 182.04098221396407 377.58857153954267 + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550158e-09 + outer loop + vertex 8.00259011211447 182.04107707777894 377.5885436397538 + vertex 6.502590113878768 182.04098221396407 377.58857153954267 + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550158e-09 + outer loop + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + vertex 6.502590113878768 182.04098221396407 377.58857153954267 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex 8.00259011211447 182.04107707777894 377.5885436397538 + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex 8.002655211621809 184.041077079426 383.08854363949433 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + endloop +endfacet +facet normal 0.9999999997833237 4.649964825186201e-06 -2.029115184847674e-05 + outer loop + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + endloop +endfacet +facet normal 0.9999999997833237 4.649964825186201e-06 -2.029115184847674e-05 + outer loop + vertex -3.9973645951999752 184.04085388264912 377.5887668372224 + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + endloop +endfacet +facet normal -1.859985936411965e-05 0.9999999998270226 3.459555444322776e-10 + outer loop + vertex -2.4974278380027557 182.04041302993804 377.5887389386098 + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + endloop +endfacet +facet normal -1.859985936411965e-05 0.9999999998270226 3.459555444322776e-10 + outer loop + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + vertex -3.9973645951999526 182.0403851313253 377.58876683722235 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170526e-05 -1.859985921082278e-05 + outer loop + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + vertex -2.4973645954596377 181.04041303193767 377.5887389374335 + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170526e-05 -1.859985921082278e-05 + outer loop + vertex -2.4974278380027557 182.04041302993804 377.5887389386098 + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + vertex -2.4973645954596377 181.04041303193767 377.5887389374335 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.1763031831983272e-09 + outer loop + vertex -3.997364595199981 181.0403181681224 377.58876683722235 + vertex -2.4973645954596377 181.04041303193767 377.5887389374335 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.1763031831983272e-09 + outer loop + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -2.4973645954596377 181.04041303193767 377.5887389374335 + endloop +endfacet +facet normal -1.8599859219734715e-05 0.9999999998270226 3.4595554154323437e-10 + outer loop + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + vertex -3.9972436961148627 184.04085388264912 384.08876683609805 + endloop +endfacet +facet normal -1.8599859219734715e-05 0.9999999998270226 3.4595554154323437e-10 + outer loop + vertex -11.498231386157283 184.040714365334 384.08890635341334 + vertex -3.9972436961148627 184.04085388264912 384.08876683609805 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + endloop +endfacet +facet normal -1.859985924379526e-05 0.9999999998270226 3.459555419907571e-10 + outer loop + vertex 15.501647705416827 184.04121656153367 377.58840415833805 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + endloop +endfacet +facet normal -1.859985924379526e-05 0.9999999998270226 3.459555419907571e-10 + outer loop + vertex 8.002655211621809 184.041077079426 383.08854363949433 + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + vertex 8.002552912395945 184.041077079426 377.5885436404457 + endloop +endfacet +facet normal -1.8599859219734715e-05 0.9999999998270226 3.4595554154323437e-10 + outer loop + vertex -3.9973645951999752 184.04085388264912 377.5887668372224 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + endloop +endfacet +facet normal -1.8599859219734715e-05 0.9999999998270226 3.4595554154323437e-10 + outer loop + vertex -11.498249986016532 184.040714365334 383.0889063535863 + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + vertex -11.498352285242396 184.040714365334 377.5889063545377 + endloop +endfacet +facet normal 0.9999999999459649 4.649964824991664e-06 -9.29774994363252e-06 + outer loop + vertex -3.99724369611484 182.0403851313253 384.08876683609805 + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + vertex -3.9972436961148627 184.04085388264912 384.08876683609805 + endloop +endfacet +facet normal 0.9999999999459649 4.649964824991664e-06 -9.29774994363252e-06 + outer loop + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + vertex -3.9972436961148627 184.04085388264912 384.08876683609805 + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.859985921082278e-05 + outer loop + vertex -2.4972436963745253 181.04041303193765 384.0887389363092 + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + vertex -2.4973069389176428 182.04041302993804 384.08873893748546 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.859985921082278e-05 + outer loop + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + vertex -2.4973069389176428 182.04041302993804 384.08873893748546 + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + endloop +endfacet +facet normal 0.9999999994339513 2.8038235533044387e-05 -1.8599859240707915e-05 + outer loop + vertex -3.997199788317322 179.47432099664897 384.0887668352813 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + endloop +endfacet +facet normal 0.9999999994339513 2.8038235533044387e-05 -1.8599859240707915e-05 + outer loop + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + endloop +endfacet +facet normal -1.859985936411965e-05 0.9999999998270226 3.459555431095032e-10 + outer loop + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + vertex -2.4973069389176428 182.04041302993804 384.08873893748546 + endloop +endfacet +facet normal -1.859985936411965e-05 0.9999999998270226 3.459555431095032e-10 + outer loop + vertex -3.99724369611484 182.0403851313253 384.08876683609805 + vertex -2.4973069389176428 182.04041302993804 384.08873893748546 + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.1763031831979144e-09 + outer loop + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + endloop +endfacet +facet normal 6.324254336259923e-05 -0.9999999980001905 -1.1763031831979144e-09 + outer loop + vertex -2.4972436963745253 181.04041303193765 384.0887389363092 + vertex -3.9972436961148685 181.0403181681224 384.08876683609805 + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + endloop +endfacet +facet normal 0.9658394493490858 0.2591411927084001 -1.7964477850463862e-05 + outer loop + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + vertex -3.9630846158292696 179.34717108629582 384.0887662007439 + endloop +endfacet +facet normal 0.9658394493490858 0.2591411927084001 -1.7964477850463862e-05 + outer loop + vertex -3.997199788317322 179.47432099664897 384.0887668352813 + vertex -3.9630846158292696 179.34717108629582 384.0887662007439 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.6104848029167607e-05 + outer loop + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + vertex -3.8972230712783467 179.2331833604441 384.08876497572845 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.6104848029167607e-05 + outer loop + vertex -3.9630846158292696 179.34717108629582 384.0887662007439 + vertex -3.8972230712783467 179.2331833604441 384.08876497572845 + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + endloop +endfacet +facet normal 0.7068709027839646 0.7073425808082822 -1.3147699347887446e-05 + outer loop + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + vertex -3.8041035100840266 179.14012589423604 384.0887632437177 + endloop +endfacet +facet normal 0.7068709027839646 0.7073425808082822 -1.3147699347887446e-05 + outer loop + vertex -3.8972230712783467 179.2331833604441 384.08876497572845 + vertex -3.8041035100840266 179.14012589423604 384.0887632437177 + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + endloop +endfacet +facet normal 0.4997111295562008 0.8661921189385627 -9.294556675347807e-06 + outer loop + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + vertex -3.6900718764540934 179.0743404002097 384.08876112274544 + endloop +endfacet +facet normal 0.4997111295562008 0.8661921189385627 -9.294556675347807e-06 + outer loop + vertex -3.8041035100840266 179.14012589423604 384.0887632437177 + vertex -3.6900718764540934 179.0743404002097 384.08876112274544 + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + endloop +endfacet +facet normal 0.25849686866253047 0.9660120956119286 -4.808005373256875e-06 + outer loop + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + vertex -3.562899237774474 179.04031005106717 384.08875875735225 + endloop +endfacet +facet normal 0.25849686866253047 0.9660120956119286 -4.808005373256875e-06 + outer loop + vertex -3.6900718764540934 179.0743404002097 384.08876112274544 + vertex -3.562899237774474 179.04031005106717 384.08875875735225 + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + endloop +endfacet +facet normal -1.8599859251903376e-05 0.9999999998270226 3.4595554214156693e-10 + outer loop + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + vertex 7.5665586109359895 179.04051705741682 384.0885517510027 + endloop +endfacet +facet normal -1.8599859251903376e-05 0.9999999998270226 3.4595554214156693e-10 + outer loop + vertex -3.562899237774474 179.04031005106717 384.08875875735225 + vertex 7.5665586109359895 179.04051705741682 384.0885517510027 + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + endloop +endfacet +facet normal -0.254969640874829 0.9669490587459457 4.742399428611023e-06 + outer loop + vertex 7.693775257078164 179.0740670409422 383.088549384618 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + vertex 7.693793856937368 179.0740670409422 384.08854938444506 + endloop +endfacet +facet normal -0.254969640874829 0.9669490587459457 4.742399428611023e-06 + outer loop + vertex 7.5665586109359895 179.04051705741682 384.0885517510027 + vertex 7.693793856937368 179.0740670409422 384.08854938444506 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + endloop +endfacet +facet normal -0.4965465930448748 0.8680100695557798 9.235696731787475e-06 + outer loop + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + vertex 7.693775257078164 179.0740670409422 383.088549384618 + vertex 7.808010292366443 179.13940474138002 384.0885472600354 + endloop +endfacet +facet normal -0.4965465930448748 0.8680100695557798 9.235696731787475e-06 + outer loop + vertex 7.693793856937368 179.0740670409422 384.08854938444506 + vertex 7.808010292366443 179.13940474138002 384.0885472600354 + vertex 7.693775257078164 179.0740670409422 383.088549384618 + endloop +endfacet +facet normal -0.7042847154819899 0.7099176285787339 1.3099596565427142e-05 + outer loop + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + vertex 7.9014242559003645 179.23207750242136 384.0885455225488 + endloop +endfacet +facet normal -0.7042847154819899 0.7099176285787339 1.3099596565427142e-05 + outer loop + vertex 7.808010292366443 179.13940474138002 384.0885472600354 + vertex 7.9014242559003645 179.23207750242136 384.0885455225488 + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + endloop +endfacet +facet normal -0.8640269984420696 0.5034454744110011 1.6070780541189673e-05 + outer loop + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + vertex 7.9014242559003645 179.23207750242136 384.0885455225488 + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + endloop +endfacet +facet normal -0.8640269984420696 0.5034454744110011 1.6070780541189673e-05 + outer loop + vertex 7.967669740298569 179.34576982854995 384.0885442903922 + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + vertex 7.9014242559003645 179.23207750242136 384.0885455225488 + endloop +endfacet +facet normal -0.9648872693327224 0.2626643431407392 1.794676740310277e-05 + outer loop + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + vertex 7.967669740298569 179.34576982854995 384.0885442903922 + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + endloop +endfacet +facet normal -0.9648872693327224 0.2626643431407392 1.794676740310277e-05 + outer loop + vertex 8.002232225274373 179.47273377562567 384.0885436475348 + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + vertex 7.967669740298569 179.34576982854995 384.0885442903922 + endloop +endfacet +facet normal -0.9999999495333092 0.0003171552057274151 1.859985831256326e-05 + outer loop + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + vertex 8.002232225274373 179.47273377562567 384.0885436475348 + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + endloop +endfacet +facet normal -0.9999999495333092 0.0003171552057274151 1.859985831256326e-05 + outer loop + vertex 8.002729612304329 181.0410101149224 384.08854363828345 + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 8.002232225274373 179.47273377562567 384.0885436475348 + endloop +endfacet +facet normal 1.8599859303956336e-05 -0.9999999998270226 -3.4595554310974467e-10 + outer loop + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 6.502774255507272 181.04098221596377 384.088571537242 + endloop +endfacet +facet normal 1.8599859303956336e-05 -0.9999999998270226 -3.4595554310974467e-10 + outer loop + vertex 8.002729612304329 181.0410101149224 384.08854363828345 + vertex 6.502774255507272 181.04098221596377 384.088571537242 + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242609e-05 1.859985921082278e-05 + outer loop + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + vertex 6.502774255507272 181.04098221596377 384.088571537242 + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + endloop +endfacet +facet normal -0.9999999978272129 -6.324254340242609e-05 1.859985921082278e-05 + outer loop + vertex 6.50271101296388 182.04098221396407 384.0885715384183 + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + vertex 6.502774255507272 181.04098221596377 384.088571537242 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550158e-09 + outer loop + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + endloop +endfacet +facet normal -6.324254316674299e-05 0.9999999980001905 1.1763031795550158e-09 + outer loop + vertex 6.50271101296388 182.04098221396407 384.0885715384183 + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + vertex 8.002655211621809 184.041077079426 383.08854363949433 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792864e-05 1.8599859244801638e-05 + outer loop + vertex 8.002673811481058 184.041077079426 384.08854363932136 + vertex 8.002655211621809 184.041077079426 383.08854363949433 + vertex 8.002711011199583 182.04107707777894 384.0885436386294 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 6.502692413104632 182.04098221396407 383.0885715385913 + vertex 6.502755655648023 181.04098221596377 383.08857153741496 + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -2.497262296233774 181.04041303193765 383.0887389364821 + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -2.497325538776892 182.04041302993804 383.08873893765843 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 8.002213625415123 179.47273377562567 383.0885436477078 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 7.96765114043932 179.34576982854995 383.0885442905651 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 7.9014056560411605 179.23207750242136 383.0885455227218 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 7.693775257078164 179.0740670409422 383.088549384618 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 7.807991692507194 179.13940474138002 383.0885472602084 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 7.693775257078164 179.0740670409422 383.088549384618 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex 7.56654001107674 179.04051705741682 383.0885517511757 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.562917837633723 179.04031005106717 383.08875875752517 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.690090476313342 179.0743404002097 383.0887611229184 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.8041221099432754 179.14012589423604 383.08876324389075 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.8972416711376408 179.233183360444 383.0887649759015 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.9631032156885637 179.34717108629573 383.08876620091695 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.9972183881765706 179.47432099664897 383.0887668354543 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.9972622959741115 184.04085388264912 383.088766836271 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -3.9972436917554823 182.04038513167131 383.08876683592496 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -3.9972622959741173 181.0403181681224 383.088766836271 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex -11.498092412859016 175.56897512142965 383.0889063506554 + vertex -10.498073813345728 174.56899372146185 383.0888877504502 + vertex -11.498249986016532 184.040714365334 383.0889063535863 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 15.501907577800207 175.56947731762932 383.0884041544559 + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 8.002655211621809 184.041077079426 383.08854363949433 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 15.501750004642695 184.04121656153367 383.08840415738666 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 14.501926178005409 174.569458717943 383.08842275396916 + vertex 8.002655211621809 184.041077079426 383.08854363949433 + endloop +endfacet +facet normal 1.859985924801902e-05 -7.77967575122592e-16 0.9999999998270228 + outer loop + vertex 8.002692411340334 182.04107707777894 383.08854363880243 + vertex 8.00271101244508 181.0410101149224 383.08854363845643 + vertex 8.002655211621809 184.041077079426 383.08854363949433 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -2.4974278380028263 182.04041302993787 377.5887389386096 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + vertex -2.4973645954597052 181.04041303193748 377.58873893743333 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 15.50164770541676 184.04121656153367 377.5884041583378 + vertex 8.002552912395876 184.041077079426 377.58854364044555 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 8.002590112114401 182.04107707777877 377.5885436397536 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 8.002552912395876 184.041077079426 377.58854364044555 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 8.002590112114401 182.04107707777877 377.5885436397536 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 6.502590113878699 182.0409822139639 377.58857153954244 + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + vertex 8.002590112114401 182.04107707777877 377.5885436397536 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 8.002111326189192 179.47273377562547 377.58854364865897 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.967548841213389 179.34576982854978 377.5885442915163 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 8.002111326189192 179.47273377562547 377.58854364865897 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.9013033568152276 179.23207750242128 377.588545523673 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 7.967548841213389 179.34576982854978 377.5885442915163 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.807889393281262 179.13940474137982 377.5885472611596 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 7.9013033568152276 179.23207750242128 377.588545523673 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.693672957852187 179.07406704094203 377.5885493855692 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 7.807889393281262 179.13940474137982 377.5885472611596 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.566437711850807 179.04051705741654 377.5885517521269 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 7.693672957852187 179.07406704094203 377.5885493855692 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 7.566437711850807 179.04051705741654 377.5885517521269 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -11.498352285242461 184.040714365334 377.58890635453747 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + vertex -3.997364595200043 184.04085388264912 377.5887668372222 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + vertex -3.997364595200043 184.04085388264912 377.5887668372222 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.9973645952000485 181.04031816812224 377.5887668372222 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -2.4973645954597052 181.04041303193748 377.58873893743333 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + vertex -3.9973645952000485 181.04031816812224 377.5887668372222 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.9973633738206127 179.54030197243037 377.5887668371995 + vertex -3.9973645952000485 181.04031816812224 377.5887668372222 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.997320687402502 179.47432099664877 377.5887668364055 + vertex -3.9973633738206127 179.54030197243037 377.5887668371995 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.9632055149144976 179.34717108629556 377.5887662018681 + vertex -3.997320687402502 179.47432099664877 377.5887668364055 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.897343970363572 179.2331833604438 377.5887649768526 + vertex -3.9632055149144976 179.34717108629556 377.5887662018681 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.804224409169252 179.14012589423575 377.5887632448419 + vertex -3.897343970363572 179.2331833604438 377.5887649768526 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.6901927755392765 179.07434040020954 377.58876112386963 + vertex -3.804224409169252 179.14012589423575 377.5887632448419 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex -3.6901927755392765 179.07434040020954 377.58876112386963 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -2.9981755895202524 174.5408724657809 377.58874825244726 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex -2.9981755895202524 174.5408724657809 377.58874825244726 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + vertex -2.9981755895202524 174.5408724657809 377.58874825244726 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex -3.4973540740639915 179.0403112724467 377.5887575370969 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex 7.502645922130445 179.0405158708983 377.5885529386452 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 7.566437711850807 179.04051705741654 377.5885517521269 + vertex 7.502645922130445 179.0405158708983 377.5885529386452 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + endloop +endfacet +facet normal 1.859985924805751e-05 -4.270842219112203e-15 0.9999999998270228 + outer loop + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + vertex 6.502590113878699 182.0409822139639 377.58857153954244 + vertex 6.5026533564220905 181.0409822159636 377.5885715383662 + endloop +endfacet +facet normal -1.8599859243795248e-05 0.9999999998270226 3.459555419907565e-10 + outer loop + vertex 15.50164770541676 184.04121656153367 377.5884041583378 + vertex 15.501043209991199 184.0412165615337 345.0884041639595 + vertex 8.002552912395876 184.041077079426 377.58854364044555 + endloop +endfacet +facet normal -1.8599859243795248e-05 0.9999999998270226 3.459555419907565e-10 + outer loop + vertex 8.001948416970317 184.04107707942603 345.0885436460672 + vertex 8.002552912395876 184.041077079426 377.58854364044555 + vertex 15.501043209991199 184.0412165615337 345.0884041639595 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792854e-05 -1.859985924480163e-05 + outer loop + vertex 15.501229208583638 174.0412165632634 345.0884041605 + vertex 15.501043209991199 184.0412165615337 345.0884041639595 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792854e-05 -1.859985924480163e-05 + outer loop + vertex 15.50164770541676 184.04121656153367 377.5884041583378 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 15.501043209991199 184.0412165615337 345.0884041639595 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + vertex -6.561583586266025 174.05445894320752 350.9505833566617 + vertex -2.998770785016191 174.04087246586732 345.088748257896 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.711440980811342 174.05440677889854 350.5888147525761 + vertex -2.998770785016191 174.04087246586732 345.088748257896 + vertex -6.561583586266025 174.05445894320752 350.9505833566617 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.949824702254958 174.05441294989427 350.278159049851 + vertex -2.998770785016191 174.04087246586732 345.088748257896 + vertex -6.711440980811342 174.05440677889854 350.5888147525761 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -2.998770785016191 174.04087246586732 345.088748257896 + vertex -6.949824702254958 174.05441294989427 350.278159049851 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + vertex -6.561583586266025 174.05445894320752 350.9505833566617 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.510092923092373 174.05569137925528 371.33881090890077 + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.260489293928211 174.05447703565144 350.0397869212441 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -6.949824702254958 174.05441294989427 350.278159049851 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.622263477306075 174.05459466883167 349.8899430333916 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -7.260489293928211 174.05447703565144 350.0397869212441 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.010492939651467 174.05475783292815 349.83883899962177 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -7.622263477306075 174.05459466883167 349.8899430333916 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.398720484685057 174.05495540857729 349.8899574753827 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -8.010492939651467 174.05475783292815 349.83883899962177 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.760489046789141 174.0551739313252 350.0398148210285 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -8.398720484685057 174.05495540857729 349.8899574753827 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.071144696307146 174.0553985092076 350.27819850610433 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -8.760489046789141 174.0551739313252 350.0398148210285 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.309516764107213 174.05561383761307 350.58886307642007 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -9.071144696307146 174.0553985092076 350.27819850610433 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.459360587697146 174.05580524226656 350.9506372549061 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -9.309516764107213 174.05561383761307 350.58886307642007 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -9.459360587697146 174.05580524226656 350.9506372549061 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + vertex -6.949412990345849 174.05561144828937 372.3994792183773 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.711040852713081 174.0556662036652 372.08881462148906 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + vertex -6.949412990345849 174.05561144828937 372.3994792183773 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.561196959053923 174.05569346662915 371.727040413526 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + vertex -6.711040852713081 174.0556662036652 372.08881462148906 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.510092923092373 174.05569137925528 371.33881090890077 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + vertex -6.561196959053923 174.05569346662915 371.727040413526 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.260068704701047 174.05553293198992 372.6378629253104 + vertex -6.949412990345849 174.05561144828937 372.3994792183773 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.621837322228213 174.05543600552312 372.7877202866084 + vertex -7.260068704701047 174.05553293198992 372.6378629253104 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.010064909493801 174.05532727426734 372.8388387707501 + vertex -7.621837322228213 174.05543600552312 372.7877202866084 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.398294398002074 174.05521414807805 372.78773473751835 + vertex -8.010064909493801 174.05532727426734 372.8388387707501 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.760068589690809 174.0551043363181 372.63789084232457 + vertex -8.398294398002074 174.05521414807805 372.78773473751835 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.070733171256427 174.05500532247748 372.3995186989973 + vertex -8.760068589690809 174.0551043363181 372.63789084232457 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.30911686486285 174.0549238541857 372.08886297517597 + vertex -9.070733171256427 174.05500532247748 372.3995186989973 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.458974215738403 174.05486548337223 371.72709434505595 + vertex -9.30911686486285 174.0549238541857 372.08886297517597 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + vertex -9.458974215738403 174.05486548337223 371.72709434505595 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.510092923092373 174.05569137925528 371.33881090890077 + vertex -6.561211400425863 174.05566008379466 370.95058330677386 + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.5615690228370385 174.05472032490036 351.72704040384275 + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + vertex -6.561211400425863 174.05566008379466 370.95058330677386 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.711068751301413 174.0556017129812 370.58881467665384 + vertex -6.5615690228370385 174.05472032490036 351.72704040384275 + vertex -6.561211400425863 174.05566008379466 370.95058330677386 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.71141284642697 174.05491172955382 352.08881458232884 + vertex -6.5615690228370385 174.05472032490036 351.72704040384275 + vertex -6.711068751301413 174.0556017129812 370.58881467665384 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + vertex -6.71141284642697 174.05491172955382 352.08881458232884 + vertex -6.711068751301413 174.0556017129812 370.58881467665384 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -6.94978491422704 174.0551270579593 352.3994791526446 + vertex -6.71141284642697 174.05491172955382 352.08881458232884 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.260440563745044 174.0553516358417 352.63786283772043 + vertex -6.94978491422704 174.0551270579593 352.3994791526446 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.2601170264734565 174.0554212308488 370.0397868095053 + vertex -7.260440563745044 174.0553516358417 352.63786283772043 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.622209125849128 174.0555701585896 352.7877201833663 + vertex -7.260440563745044 174.0553516358417 352.63786283772043 + vertex -7.2601170264734565 174.0554212308488 370.0397868095053 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -7.621891218162192 174.05531141908884 369.8899429143115 + vertex -7.622209125849128 174.0555701585896 352.7877201833663 + vertex -7.2601170264734565 174.0554212308488 370.0397868095053 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.01043667088272 174.05576773423874 352.83883865912713 + vertex -7.622209125849128 174.0555701585896 352.7877201833663 + vertex -7.621891218162192 174.05531141908884 369.8899429143115 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.010120706670465 174.05519829289952 369.83883888107977 + vertex -8.01043667088272 174.05576773423874 352.83883865912713 + vertex -7.621891218162192 174.05531141908884 369.8899429143115 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.398666133228108 174.05593089833525 352.7877346253573 + vertex -8.01043667088272 174.05576773423874 352.83883865912713 + vertex -8.010120706670465 174.05519829289952 369.83883888107977 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.398348293936047 174.05508956164377 369.88995736522145 + vertex -8.398666133228108 174.05593089833525 352.7877346253573 + vertex -8.010120706670465 174.05519829289952 369.83883888107977 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.76044031660597 174.05604853151547 352.6378907375048 + vertex -8.398666133228108 174.05593089833525 352.7877346253573 + vertex -8.398348293936047 174.05508956164377 369.88995736522145 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -8.760116911463216 174.05499263517694 370.03981472651947 + vertex -8.76044031660597 174.05604853151547 352.6378907375048 + vertex -8.398348293936047 174.05508956164377 369.88995736522145 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.071104908279224 174.05611261727262 352.3995186088979 + vertex -8.76044031660597 174.05604853151547 352.6378907375048 + vertex -8.760116911463216 174.05499263517694 370.03981472651947 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.070772625818417 174.05491411887752 370.2781984334526 + vertex -9.071104908279224 174.05611261727262 352.3995186088979 + vertex -8.760116911463216 174.05499263517694 370.03981472651947 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.309488629722841 174.05611878826838 352.0888629061727 + vertex -9.071104908279224 174.05611261727262 352.3995186088979 + vertex -9.070772625818417 174.05491411887752 370.2781984334526 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.309144763451181 174.0548593635017 370.5888630303408 + vertex -9.309488629722841 174.05611878826838 352.0888629061727 + vertex -9.070772625818417 174.05491411887752 370.2781984334526 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.45934602426816 174.05606662395937 351.72709430208715 + vertex -9.309488629722841 174.05611878826838 352.0888629061727 + vertex -9.309144763451181 174.0548593635017 370.5888630303408 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.458988657110387 174.05483210053774 370.9506372383038 + vertex -9.45934602426816 174.05606662395937 351.72709430208715 + vertex -9.309144763451181 174.0548593635017 370.5888630303408 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + vertex -9.45934602426816 174.05606662395937 351.72709430208715 + vertex -9.458988657110387 174.05483210053774 370.9506372383038 + endloop +endfacet +facet normal -0.00046459085439493953 -0.9999998354135803 0.00033664246695197877 + outer loop + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + vertex -9.458988657110387 174.05483210053774 370.9506372383038 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792854e-05 1.859985924480163e-05 + outer loop + vertex -11.498956780668024 184.04071436533403 345.08890636015917 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -11.498352285242461 184.040714365334 377.58890635453747 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792854e-05 1.859985924480163e-05 + outer loop + vertex -11.498166286650022 174.0407143670638 377.58890635107787 + vertex -11.498352285242461 184.040714365334 377.58890635453747 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 6.501985618453139 182.04098221396393 345.08857154516414 + vertex 8.002004217793587 181.04101011492224 345.08854364502935 + vertex 6.5020488609965295 181.04098221596362 345.0885715439878 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -11.498956780668024 184.04071436533403 345.08890636015917 + vertex -3.9979690906256034 184.04085388264915 345.0887668428439 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.997969090625584 182.04038513132514 345.0887668428439 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.9979690906256034 184.04085388264915 345.0887668428439 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.997969090625584 182.04038513132514 345.0887668428439 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -2.497969090885266 181.0404130319375 345.08873894305503 + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + vertex -3.997969090625584 182.04038513132514 345.0887668428439 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.9979678692461733 179.5403019724304 345.08876684282114 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.9979251828280624 179.4743209966488 345.0887668420272 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.9979678692461733 179.5403019724304 345.08876684282114 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.963810010340058 179.3471710862956 345.08876620748975 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.9979251828280624 179.4743209966488 345.0887668420272 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.8979484657891326 179.23318336044383 345.0887649824743 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.963810010340058 179.3471710862956 345.08876620748975 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.8048289045948125 179.14012589423578 345.08876325046356 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.8979484657891326 179.23318336044383 345.0887649824743 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.690797270964837 179.07434040020956 345.0887611294913 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.8048289045948125 179.14012589423578 345.08876325046356 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.690797270964837 179.07434040020956 345.0887611294913 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -2.998780084945813 174.5408724657808 345.088748258069 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -2.998770785016191 174.04087246586732 345.088748257896 + vertex -11.498770782075585 174.0407143670637 345.08890635669957 + vertex -2.998780084945813 174.5408724657808 345.088748258069 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 8.001948416970317 184.04107707942603 345.0885436460672 + vertex 15.501043209991199 184.0412165615337 345.0884041639595 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 15.501229208583638 174.0412165632634 345.0884041605 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + vertex 15.501043209991199 184.0412165615337 345.0884041639595 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 8.002004217793587 181.04101011492224 345.08854364502935 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 6.501985618453139 182.04098221396393 345.08857154516414 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + vertex 8.002004217793587 181.04101011492224 345.08854364502935 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 8.001506830763631 179.4727337756255 345.0885436542806 + vertex 8.002004217793587 181.04101011492224 345.08854364502935 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.9669443457878275 179.3457698285498 345.088544297138 + vertex 8.001506830763631 179.4727337756255 345.0885436542806 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.900698861389667 179.23207750242128 345.0885455292947 + vertex 7.9669443457878275 179.3457698285498 345.088544297138 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.807284897855701 179.13940474137985 345.0885472667813 + vertex 7.900698861389667 179.23207750242128 345.0885455292947 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.693068462426626 179.07406704094205 345.0885493911909 + vertex 7.807284897855701 179.13940474137985 345.0885472667813 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex 7.693068462426626 179.07406704094205 345.0885493911909 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.001219911594621 174.54105846437326 345.08856225947653 + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -2.998780084945813 174.5408724657808 345.088748258069 + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex 7.001219911594621 174.54105846437326 345.08856225947653 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 7.001219911594621 174.54105846437326 345.08856225947653 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.4979585694895516 179.04031127244673 345.08875754271855 + vertex 7.502041426704885 179.04051587089833 345.08855294426684 + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + vertex 7.502041426704885 179.04051587089833 345.08855294426684 + endloop +endfacet +facet normal -1.8599859248019008e-05 1.9234272811349932e-15 -0.9999999998270228 + outer loop + vertex -3.997969090625584 182.04038513132514 345.0887668428439 + vertex -2.4980323334283865 182.0404130299379 345.0887389442313 + vertex -2.497969090885266 181.0404130319375 345.08873894305503 + endloop +endfacet +facet normal 1.859985924379525e-05 -0.9999999998270226 -3.459554032128784e-10 + outer loop + vertex 7.001219911594621 174.54105846437326 345.08856225947653 + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + vertex -2.998780084945813 174.5408724657808 345.088748258069 + endloop +endfacet +facet normal 1.859985924379525e-05 -0.9999999998270226 -3.459554032128784e-10 + outer loop + vertex -2.9981755895202524 174.5408724657809 377.58874825244726 + vertex -2.998780084945813 174.5408724657808 345.088748258069 + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792854e-05 1.859985924480163e-05 + outer loop + vertex 7.001219911594621 174.54105846437326 345.08856225947653 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792854e-05 1.859985924480163e-05 + outer loop + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + vertex 7.001824407020182 174.54105846437338 377.58856225385483 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792854e-05 -1.859985924480163e-05 + outer loop + vertex -2.998770785016191 174.04087246586732 345.088748257896 + vertex -2.998780084945813 174.5408724657808 345.088748258069 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + endloop +endfacet +facet normal 0.9999999996540453 1.8599859246792854e-05 -1.859985924480163e-05 + outer loop + vertex -2.9981755895202524 174.5408724657809 377.58874825244726 + vertex -2.998166289590631 174.0408724658674 377.58874825227434 + vertex -2.998780084945813 174.5408724657808 345.088748258069 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + vertex 13.43843118021452 174.053916006514 351.72666852683767 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.438788286845012 174.05640530373583 370.9502113273743 + vertex 13.43843118021452 174.053916006514 351.72666852683767 + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.288587275407153 174.05391321931327 352.088442746322 + vertex 13.43843118021452 174.053916006514 351.72666852683767 + vertex 13.438788286845012 174.05640530373583 370.9502113273743 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.288930967659452 174.0563050537634 370.58844273702243 + vertex 13.288587275407153 174.05391321931327 352.088442746322 + vertex 13.438788286845012 174.05640530373583 370.9502113273743 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.050215119828266 174.05390878551725 352.3991073518442 + vertex 13.288587275407153 174.05391321931327 352.088442746322 + vertex 13.288930967659452 174.0563050537634 370.58844273702243 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + vertex 13.050215119828266 174.05390878551725 352.3991073518442 + vertex 13.288930967659452 174.0563050537634 370.58844273702243 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.73955938195192 174.0539030072818 352.6374910639353 + vertex 13.050215119828266 174.05390878551725 352.3991073518442 + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.739882808477267 174.0559774645776 370.0394149352009 + vertex 12.73955938195192 174.0539030072818 352.6374910639353 + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.377790736931564 174.05389627838406 352.787348426564 + vertex 12.73955938195192 174.0539030072818 352.6374910639353 + vertex 12.739882808477267 174.0559774645776 370.0394149352009 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.378108693183847 174.05577245002596 369.88957106111394 + vertex 12.377790736931564 174.05389627838406 352.787348426564 + vertex 12.739882808477267 174.0559774645776 370.0394149352009 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.989563120074324 174.05388905738735 352.8384669081183 + vertex 12.377790736931564 174.05389627838406 352.787348426564 + vertex 12.378108693183847 174.05577245002596 369.88957106111394 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.98987928664094 174.0555580535419 369.8384670391766 + vertex 11.989563120074324 174.05388905738735 352.8384669081183 + vertex 12.378108693183847 174.05577245002596 369.88957106111394 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + vertex 11.989563120074324 174.05388905738735 352.8384669081183 + vertex 11.98987928664094 174.0555580535419 369.8384670391766 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.601651781325016 174.0553488858915 369.8895855240304 + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + vertex 11.98987928664094 174.0555580535419 369.8384670391766 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.239883240147114 174.05515920150455 370.03944287541 + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + vertex 11.601651781325016 174.0553488858915 369.8895855240304 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.239559382470832 174.05387510749293 352.6375189637241 + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + vertex 11.239883240147114 174.05515920150455 370.03944287541 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.929227591337622 174.0550019270584 370.2778265624697 + vertex 11.239559382470832 174.05387510749293 352.6375189637241 + vertex 11.239883240147114 174.05515920150455 370.03944287541 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + vertex 11.239559382470832 174.05387510749293 352.6375189637241 + vertex 10.929227591337622 174.0550019270584 370.2778265624697 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.690855503980274 174.05488778054684 370.58849113088417 + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + vertex 10.929227591337622 174.0550019270584 370.2778265624697 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.690511064952624 174.05386489546143 352.0884910701739 + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + vertex 10.690855503980274 174.05488778054684 370.58849113088417 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.541011641899885 174.05482454086592 370.95026530371337 + vertex 10.690511064952624 174.05386489546143 352.0884910701739 + vertex 10.690855503980274 174.05488778054684 370.58849113088417 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.540653702349815 174.05386210826074 351.72672242509094 + vertex 10.690511064952624 174.05386489546143 352.0884910701739 + vertex 10.541011641899885 174.05482454086592 370.95026530371337 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + vertex 10.540653702349815 174.05386210826074 351.72672242509094 + vertex 10.541011641899885 174.05482454086592 370.95026530371337 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + vertex 10.540653702349815 174.05386210826074 351.72672242509094 + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.438416738221092 174.053916006514 350.9502113916644 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.288559375618282 174.05391321931327 350.5884427465815 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + vertex 13.438416738221092 174.053916006514 350.9502113916644 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + vertex 13.288559375618282 174.05391321931327 350.5884427465815 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 15.501229208583638 174.0412165632634 345.0884041605 + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.739511058100074 174.0539030072818 350.0394148530313 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.377736838678324 174.05389627838406 349.88957094819796 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 12.739511058100074 174.0539030072818 350.0394148530313 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.98950732049658 174.05388905738735 349.83846690863714 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 12.377736838678324 174.05389627838406 349.88957094819796 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.60127970363934 174.05388183639064 349.8895853901914 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 11.98950732049658 174.05388905738735 349.83846690863714 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.239511058618985 174.05387510749293 350.03944275282015 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 11.60127970363934 174.05388183639064 349.8895853901914 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.92885532074264 174.05386932925745 350.27782646491124 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 11.239511058618985 174.05387510749293 350.03944275282015 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.690483165163752 174.05386489546146 350.58849107043335 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 10.92885532074264 174.05386932925745 350.27782646491124 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.540639260356384 174.05386210826074 350.9502652899177 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 10.690483165163752 174.05386489546146 350.58849107043335 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 10.540639260356384 174.05386210826074 350.9502652899177 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + vertex 13.050586778659953 174.05626763447833 372.39910709499037 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.2889588660173 174.05638178098994 372.0884425265759 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 13.050586778659953 174.05626763447833 372.39910709499037 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.438802728097686 174.05644502067082 371.7266683537467 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 13.2889588660173 174.05638178098994 372.0884425265759 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 13.438802728097686 174.05644502067082 371.7266683537467 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + vertex 15.501833704009199 174.04121656326348 377.5884041548783 + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.739931129850461 174.05611036003222 372.63749078205007 + vertex 13.050586778659953 174.05626763447833 372.39910709499037 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 12.378162588672557 174.05592067564524 372.78734813342965 + vertex 12.739931129850461 174.05611036003222 372.63749078205007 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.989935083356634 174.05571150799486 372.83846661828346 + vertex 12.378162588672557 174.05592067564524 372.78734813342965 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.601705676813728 174.0554971115108 372.7873625963461 + vertex 11.989935083356634 174.05571150799486 372.83846661828346 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 11.239931561520306 174.05529209695916 372.6375187222592 + vertex 11.601705676813728 174.0554971115108 372.7873625963461 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.929267045573656 174.0551104357428 372.399146608413 + vertex 11.239931561520306 174.05529209695916 372.6375187222592 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.69088340233812 174.05496450777335 372.0884909204376 + vertex 10.929267045573656 174.0551104357428 372.399146608413 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.541026083152563 174.05486425780092 371.7267223300858 + vertex 10.69088340233812 174.05496450777335 372.0884909204376 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + vertex 10.541026083152563 174.05486425780092 371.7267223300858 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 0.0005455097430317843 -0.9999998499018307 5.1141337947807885e-05 + outer loop + vertex 7.001229211524243 174.04105846445978 345.08856225930356 + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + vertex 7.001833706949803 174.04105846445987 377.58856225368186 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 13.489460820329567 178.0539169564843 351.33843900997266 + vertex 13.438356780777545 178.05391600582206 351.7266685282215 + vertex 13.438342338784116 178.05391600582206 350.9502113930483 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 13.288484976181307 178.05391321862135 350.5884427479653 + vertex 13.438342338784116 178.05391600582206 350.9502113930483 + vertex 13.438356780777545 178.05391600582206 351.7266685282215 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 13.288512875970179 178.05391321862135 352.08844274770587 + vertex 13.288484976181307 178.05391321862135 350.5884427479653 + vertex 13.438356780777545 178.05391600582206 351.7266685282215 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 13.050101264131477 178.05390878482535 350.27778701003524 + vertex 13.288484976181307 178.05391321862135 350.5884427479653 + vertex 13.288512875970179 178.05391321862135 352.08844274770587 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 13.050140720391289 178.05390878482535 352.399107353228 + vertex 13.050101264131477 178.05390878482535 350.27778701003524 + vertex 13.288512875970179 178.05391321862135 352.08844274770587 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 12.739436658663099 178.05390300658988 350.0394148544151 + vertex 13.050101264131477 178.05390878482535 350.27778701003524 + vertex 13.050140720391289 178.05390878482535 352.399107353228 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 12.739484982514945 178.05390300658988 352.63749106531907 + vertex 12.739436658663099 178.05390300658988 350.0394148544151 + vertex 13.050140720391289 178.05390878482535 352.399107353228 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 12.37766243924135 178.05389627769216 349.8895709495818 + vertex 12.739436658663099 178.05390300658988 350.0394148544151 + vertex 12.739484982514945 178.05390300658988 352.63749106531907 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 12.377716337494588 178.05389627769216 352.78734842794785 + vertex 12.37766243924135 178.05389627769216 349.8895709495818 + vertex 12.739484982514945 178.05390300658988 352.63749106531907 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 11.989432921059606 178.05388905669545 349.838466910021 + vertex 12.37766243924135 178.05389627769216 349.8895709495818 + vertex 12.377716337494588 178.05389627769216 352.78734842794785 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 11.98948872063735 178.05388905669545 352.8384669095021 + vertex 11.989432921059606 178.05388905669545 349.838466910021 + vertex 12.377716337494588 178.05389627769216 352.78734842794785 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 11.601205304202367 178.05388183569872 349.8895853915752 + vertex 11.989432921059606 178.05388905669545 349.838466910021 + vertex 11.98948872063735 178.05388905669545 352.8384669095021 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 11.601259202455605 178.05388183569872 352.78736286994126 + vertex 11.601205304202367 178.05388183569872 349.8895853915752 + vertex 11.98948872063735 178.05388905669545 352.8384669095021 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 11.23943665918201 178.053875106801 350.03944275420395 + vertex 11.601205304202367 178.05388183569872 349.8895853915752 + vertex 11.601259202455605 178.05388183569872 352.78736286994126 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 11.239484983033856 178.053875106801 352.6375189651079 + vertex 11.23943665918201 178.053875106801 350.03944275420395 + vertex 11.601259202455605 178.05388183569872 352.78736286994126 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + vertex 11.23943665918201 178.053875106801 350.03944275420395 + vertex 11.239484983033856 178.053875106801 352.6375189651079 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.928820377565476 178.05386932856555 352.3991468094878 + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + vertex 11.239484983033856 178.053875106801 352.6375189651079 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.690408765726776 178.0538648947695 350.58849107181715 + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + vertex 10.928820377565476 178.05386932856555 352.3991468094878 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.690436665515648 178.0538648947695 352.0884910715577 + vertex 10.690408765726776 178.0538648947695 350.58849107181715 + vertex 10.928820377565476 178.05386932856555 352.3991468094878 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.540564860919412 178.05386210756882 350.9502652913015 + vertex 10.690408765726776 178.0538648947695 350.58849107181715 + vertex 10.690436665515648 178.0538648947695 352.0884910715577 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.540579302912839 178.05386210756882 351.72672242647474 + vertex 10.540564860919412 178.05386210756882 350.9502652913015 + vertex 10.690436665515648 178.0538648947695 352.0884910715577 + endloop +endfacet +facet normal 1.8599859243795248e-05 -0.9999999998270226 -3.459555419907565e-10 + outer loop + vertex 10.48946082136739 178.05386115690658 351.3384948095504 + vertex 10.540564860919412 178.05386210756882 350.9502652913015 + vertex 10.540579302912839 178.05386210756882 351.72672242647474 + endloop +endfacet +facet normal 0.7933646628936933 1.4756260461916838e-05 0.6087466726429224 + outer loop + vertex 10.92885532074264 174.05386932925745 350.27782646491124 + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + vertex 10.690483165163752 174.05386489546146 350.58849107043335 + endloop +endfacet +facet normal 0.7933646628936933 1.4756260461916838e-05 0.6087466726429224 + outer loop + vertex 10.690408765726776 178.0538648947695 350.58849107181715 + vertex 10.690483165163752 174.05386489546146 350.58849107043335 + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + endloop +endfacet +facet normal 0.6087761850585447 1.1322876893820822e-05 0.7933420172771368 + outer loop + vertex 11.23943665918201 178.053875106801 350.03944275420395 + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + vertex 11.239511058618985 174.05387510749293 350.03944275282015 + endloop +endfacet +facet normal 0.6087761850585447 1.1322876893820822e-05 0.7933420172771368 + outer loop + vertex 10.92885532074264 174.05386932925745 350.27782646491124 + vertex 11.239511058618985 174.05387510749293 350.03944275282015 + vertex 10.928780921305668 178.05386932856555 350.27782646629504 + endloop +endfacet +facet normal 0.38270061626199137 7.117857977351976e-06 0.9238724144934886 + outer loop + vertex 11.601205304202367 178.05388183569872 349.8895853915752 + vertex 11.23943665918201 178.053875106801 350.03944275420395 + vertex 11.60127970363934 174.05388183639064 349.8895853901914 + endloop +endfacet +facet normal 0.38270061626199137 7.117857977351976e-06 0.9238724144934886 + outer loop + vertex 11.239511058618985 174.05387510749293 350.03944275282015 + vertex 11.60127970363934 174.05388183639064 349.8895853901914 + vertex 11.23943665918201 178.053875106801 350.03944275420395 + endloop +endfacet +facet normal 0.13054463290975568 2.4277688025412252e-06 0.9914424334335116 + outer loop + vertex 11.989432921059606 178.05388905669545 349.838466910021 + vertex 11.601205304202367 178.05388183569872 349.8895853915752 + vertex 11.98950732049658 174.05388905738735 349.83846690863714 + endloop +endfacet +facet normal 0.13054463290975568 2.4277688025412252e-06 0.9914424334335116 + outer loop + vertex 11.60127970363934 174.05388183639064 349.8895853901914 + vertex 11.98950732049658 174.05388905738735 349.83846690863714 + vertex 11.601205304202367 178.05388183569872 349.8895853915752 + endloop +endfacet +facet normal -0.13050775144000823 -2.4277688040838493e-06 0.9914472889711178 + outer loop + vertex 12.37766243924135 178.05389627769216 349.8895709495818 + vertex 11.989432921059606 178.05388905669545 349.838466910021 + vertex 12.377736838678324 174.05389627838406 349.88957094819796 + endloop +endfacet +facet normal -0.13050775144000823 -2.4277688040838493e-06 0.9914472889711178 + outer loop + vertex 11.98950732049658 174.05388905738735 349.83846690863714 + vertex 12.377736838678324 174.05389627838406 349.88957094819796 + vertex 11.989432921059606 178.05388905669545 349.838466910021 + endloop +endfacet +facet normal -0.3826662482034576 -7.11785797878947e-06 0.923886650209443 + outer loop + vertex 12.739436658663099 178.05390300658988 350.0394148544151 + vertex 12.37766243924135 178.05389627769216 349.8895709495818 + vertex 12.739511058100074 174.0539030072818 350.0394148530313 + endloop +endfacet +facet normal -0.3826662482034576 -7.11785797878947e-06 0.923886650209443 + outer loop + vertex 12.377736838678324 174.05389627838406 349.88957094819796 + vertex 12.739511058100074 174.0539030072818 350.0394148530313 + vertex 12.37766243924135 178.05389627769216 349.8895709495818 + endloop +endfacet +facet normal -0.6087466725376544 -1.1322876895055904e-05 0.7933646630308954 + outer loop + vertex 13.050101264131477 178.05390878482535 350.27778701003524 + vertex 12.739436658663099 178.05390300658988 350.0394148544151 + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + endloop +endfacet +facet normal -0.6087466725376544 -1.1322876895055904e-05 0.7933646630308954 + outer loop + vertex 12.739511058100074 174.0539030072818 350.0394148530313 + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + vertex 12.739436658663099 178.05390300658988 350.0394148544151 + endloop +endfacet +facet normal -0.7933420171398816 -1.4756260462863634e-05 0.6087761851638718 + outer loop + vertex 13.050101264131477 178.05390878482535 350.27778701003524 + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + vertex 13.288484976181307 178.05391321862135 350.5884427479653 + endloop +endfacet +facet normal -0.7933420171398816 -1.4756260462863634e-05 0.6087761851638718 + outer loop + vertex 13.288559375618282 174.05391321931327 350.5884427465815 + vertex 13.288484976181307 178.05391321862135 350.5884427479653 + vertex 13.050175663568455 174.05390878551725 350.27778700865144 + endloop +endfacet +facet normal -0.9238724143337058 -1.7184029266000766e-05 0.38270061632811414 + outer loop + vertex 13.288484976181307 178.05391321862135 350.5884427479653 + vertex 13.288559375618282 174.05391321931327 350.5884427465815 + vertex 13.438342338784116 178.05391600582206 350.9502113930483 + endloop +endfacet +facet normal -0.9238724143337058 -1.7184029266000766e-05 0.38270061632811414 + outer loop + vertex 13.438416738221092 174.053916006514 350.9502113916644 + vertex 13.438342338784116 178.05391600582206 350.9502113930483 + vertex 13.288559375618282 174.05391321931327 350.5884427465815 + endloop +endfacet +facet normal -0.9914424332620053 -1.8440734872610345e-05 0.13054463293239457 + outer loop + vertex 13.438342338784116 178.05391600582206 350.9502113930483 + vertex 13.438416738221092 174.053916006514 350.9502113916644 + vertex 13.489460820329567 178.0539169564843 351.33843900997266 + endloop +endfacet +facet normal -0.9914424332620053 -1.8440734872610345e-05 0.13054463293239457 + outer loop + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + vertex 13.489460820329567 178.0539169564843 351.33843900997266 + vertex 13.438416738221092 174.053916006514 350.9502113916644 + endloop +endfacet +facet normal -0.9914472887996122 -1.844073487240726e-05 -0.1305077514626535 + outer loop + vertex 13.489460820329567 178.0539169564843 351.33843900997266 + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + vertex 13.438356780777545 178.05391600582206 351.7266685282215 + endloop +endfacet +facet normal -0.9914472887996122 -1.844073487240726e-05 -0.1305077514626535 + outer loop + vertex 13.43843118021452 174.053916006514 351.72666852683767 + vertex 13.438356780777545 178.05391600582206 351.7266685282215 + vertex 13.48953521976654 174.05391695717623 351.3384390085888 + endloop +endfacet +facet normal -0.923886650049663 -1.7184029265405336e-05 -0.3826662482695864 + outer loop + vertex 13.438356780777545 178.05391600582206 351.7266685282215 + vertex 13.43843118021452 174.053916006514 351.72666852683767 + vertex 13.288512875970179 178.05391321862135 352.08844274770587 + endloop +endfacet +facet normal -0.923886650049663 -1.7184029265405336e-05 -0.3826662482695864 + outer loop + vertex 13.288587275407153 174.05391321931327 352.088442746322 + vertex 13.288512875970179 178.05391321862135 352.08844274770587 + vertex 13.43843118021452 174.053916006514 351.72666852683767 + endloop +endfacet +facet normal -0.7933646628936933 -1.4756260461916838e-05 -0.6087466726429224 + outer loop + vertex 13.288512875970179 178.05391321862135 352.08844274770587 + vertex 13.288587275407153 174.05391321931327 352.088442746322 + vertex 13.050140720391289 178.05390878482535 352.399107353228 + endloop +endfacet +facet normal -0.7933646628936933 -1.4756260461916838e-05 -0.6087466726429224 + outer loop + vertex 13.050215119828266 174.05390878551725 352.3991073518442 + vertex 13.050140720391289 178.05390878482535 352.399107353228 + vertex 13.288587275407153 174.05391321931327 352.088442746322 + endloop +endfacet +facet normal -0.6087761850585447 -1.1322876893820822e-05 -0.7933420172771368 + outer loop + vertex 12.739484982514945 178.05390300658988 352.63749106531907 + vertex 13.050140720391289 178.05390878482535 352.399107353228 + vertex 12.73955938195192 174.0539030072818 352.6374910639353 + endloop +endfacet +facet normal -0.6087761850585447 -1.1322876893820822e-05 -0.7933420172771368 + outer loop + vertex 13.050215119828266 174.05390878551725 352.3991073518442 + vertex 12.73955938195192 174.0539030072818 352.6374910639353 + vertex 13.050140720391289 178.05390878482535 352.399107353228 + endloop +endfacet +facet normal -0.38270061626199137 -7.117857977351976e-06 -0.9238724144934886 + outer loop + vertex 12.377716337494588 178.05389627769216 352.78734842794785 + vertex 12.739484982514945 178.05390300658988 352.63749106531907 + vertex 12.377790736931564 174.05389627838406 352.787348426564 + endloop +endfacet +facet normal -0.38270061626199137 -7.117857977351976e-06 -0.9238724144934886 + outer loop + vertex 12.73955938195192 174.0539030072818 352.6374910639353 + vertex 12.377790736931564 174.05389627838406 352.787348426564 + vertex 12.739484982514945 178.05390300658988 352.63749106531907 + endloop +endfacet +facet normal -0.13054463290975568 -2.4277688025412252e-06 -0.9914424334335116 + outer loop + vertex 11.98948872063735 178.05388905669545 352.8384669095021 + vertex 12.377716337494588 178.05389627769216 352.78734842794785 + vertex 11.989563120074324 174.05388905738735 352.8384669081183 + endloop +endfacet +facet normal -0.13054463290975568 -2.4277688025412252e-06 -0.9914424334335116 + outer loop + vertex 12.377790736931564 174.05389627838406 352.787348426564 + vertex 11.989563120074324 174.05388905738735 352.8384669081183 + vertex 12.377716337494588 178.05389627769216 352.78734842794785 + endloop +endfacet +facet normal 0.13050775144000823 2.4277688040838493e-06 -0.9914472889711178 + outer loop + vertex 11.601259202455605 178.05388183569872 352.78736286994126 + vertex 11.98948872063735 178.05388905669545 352.8384669095021 + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + endloop +endfacet +facet normal 0.13050775144000823 2.4277688040838493e-06 -0.9914472889711178 + outer loop + vertex 11.989563120074324 174.05388905738735 352.8384669081183 + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + vertex 11.98948872063735 178.05388905669545 352.8384669095021 + endloop +endfacet +facet normal 0.3826662482034576 7.11785797878947e-06 -0.923886650209443 + outer loop + vertex 11.239484983033856 178.053875106801 352.6375189651079 + vertex 11.601259202455605 178.05388183569872 352.78736286994126 + vertex 11.239559382470832 174.05387510749293 352.6375189637241 + endloop +endfacet +facet normal 0.3826662482034576 7.11785797878947e-06 -0.923886650209443 + outer loop + vertex 11.60133360189258 174.05388183639064 352.7873628685574 + vertex 11.239559382470832 174.05387510749293 352.6375189637241 + vertex 11.601259202455605 178.05388183569872 352.78736286994126 + endloop +endfacet +facet normal 0.6087466725376544 1.1322876895055904e-05 -0.7933646630308954 + outer loop + vertex 10.928820377565476 178.05386932856555 352.3991468094878 + vertex 11.239484983033856 178.053875106801 352.6375189651079 + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + endloop +endfacet +facet normal 0.6087466725376544 1.1322876895055904e-05 -0.7933646630308954 + outer loop + vertex 11.239559382470832 174.05387510749293 352.6375189637241 + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + vertex 11.239484983033856 178.053875106801 352.6375189651079 + endloop +endfacet +facet normal 0.7933420171398816 1.4756260462863634e-05 -0.6087761851638718 + outer loop + vertex 10.690511064952624 174.05386489546143 352.0884910701739 + vertex 10.690436665515648 178.0538648947695 352.0884910715577 + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + endloop +endfacet +facet normal 0.7933420171398816 1.4756260462863634e-05 -0.6087761851638718 + outer loop + vertex 10.928820377565476 178.05386932856555 352.3991468094878 + vertex 10.928894777002451 174.05386932925745 352.3991468081039 + vertex 10.690436665515648 178.0538648947695 352.0884910715577 + endloop +endfacet +facet normal 0.9238724143337058 1.7184029266000766e-05 -0.38270061632811414 + outer loop + vertex 10.540653702349815 174.05386210826074 351.72672242509094 + vertex 10.540579302912839 178.05386210756882 351.72672242647474 + vertex 10.690511064952624 174.05386489546143 352.0884910701739 + endloop +endfacet +facet normal 0.9238724143337058 1.7184029266000766e-05 -0.38270061632811414 + outer loop + vertex 10.690436665515648 178.0538648947695 352.0884910715577 + vertex 10.690511064952624 174.05386489546143 352.0884910701739 + vertex 10.540579302912839 178.05386210756882 351.72672242647474 + endloop +endfacet +facet normal 0.9914424332620053 1.8440734872610345e-05 -0.13054463293239457 + outer loop + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + vertex 10.48946082136739 178.05386115690658 351.3384948095504 + vertex 10.540653702349815 174.05386210826074 351.72672242509094 + endloop +endfacet +facet normal 0.9914424332620053 1.8440734872610345e-05 -0.13054463293239457 + outer loop + vertex 10.540579302912839 178.05386210756882 351.72672242647474 + vertex 10.540653702349815 174.05386210826074 351.72672242509094 + vertex 10.48946082136739 178.05386115690658 351.3384948095504 + endloop +endfacet +facet normal 0.9914472887996122 1.844073487240726e-05 0.1305077514626535 + outer loop + vertex 10.540639260356384 174.05386210826074 350.9502652899177 + vertex 10.540564860919412 178.05386210756882 350.9502652913015 + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + endloop +endfacet +facet normal 0.9914472887996122 1.844073487240726e-05 0.1305077514626535 + outer loop + vertex 10.48946082136739 178.05386115690658 351.3384948095504 + vertex 10.489535220804365 174.05386115759848 351.33849480816656 + vertex 10.540564860919412 178.05386210756882 350.9502652913015 + endloop +endfacet +facet normal 0.923886650049663 1.7184029265405336e-05 0.3826662482695864 + outer loop + vertex 10.690483165163752 174.05386489546146 350.58849107043335 + vertex 10.690408765726776 178.0538648947695 350.58849107181715 + vertex 10.540639260356384 174.05386210826074 350.9502652899177 + endloop +endfacet +facet normal 0.923886650049663 1.7184029265405336e-05 0.3826662482695864 + outer loop + vertex 10.540564860919412 178.05386210756882 350.9502652913015 + vertex 10.540639260356384 174.05386210826074 350.9502652899177 + vertex 10.690408765726776 178.0538648947695 350.58849107181715 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 13.487724714356615 178.05645244344873 371.3382343231691 + vertex 13.436620689125364 178.05644442027813 371.7264637883949 + vertex 13.436606247872689 178.0564047033431 370.9500067620225 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 13.28674892868713 178.0563044533707 370.5882381716707 + vertex 13.436606247872689 178.0564047033431 370.9500067620225 + vertex 13.436620689125364 178.05644442027813 371.7264637883949 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 13.286776827044978 178.0563811805972 372.0882379612241 + vertex 13.28674892868713 178.0563044533707 370.5882381716707 + vertex 13.436620689125364 178.05644442027813 371.7264637883949 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 13.048365285451593 178.05615852540126 370.2775824836953 + vertex 13.28674892868713 178.0563044533707 370.5882381716707 + vertex 13.286776827044978 178.0563811805972 372.0882379612241 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 13.048404739687628 178.0562670340856 372.3989025296386 + vertex 13.048365285451593 178.05615852540126 370.2775824836953 + vertex 13.286776827044978 178.0563811805972 372.0882379612241 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 12.737700769504942 178.05597686418488 370.0392103698491 + vertex 13.048365285451593 178.05615852540126 370.2775824836953 + vertex 13.048404739687628 178.0562670340856 372.3989025296386 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 12.737749090878136 178.0561097596395 372.63728621669827 + vertex 12.737700769504942 178.05597686418488 370.0392103698491 + vertex 13.048404739687628 178.0562670340856 372.3989025296386 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 12.375926654211524 178.05577184963326 369.8893664957622 + vertex 12.737700769504942 178.05597686418488 370.0392103698491 + vertex 12.737749090878136 178.0561097596395 372.63728621669827 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 12.375980549700234 178.05592007525252 372.78714356807785 + vertex 12.375926654211524 178.05577184963326 369.8893664957622 + vertex 12.737749090878136 178.0561097596395 372.63728621669827 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 11.987697247668617 178.05555745314916 369.8382624738248 + vertex 12.375926654211524 178.05577184963326 369.8893664957622 + vertex 12.375980549700234 178.05592007525252 372.78714356807785 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 11.987753044384311 178.05571090760216 372.8382620529317 + vertex 11.987697247668617 178.05555745314916 369.8382624738248 + vertex 12.375980549700234 178.05592007525252 372.78714356807785 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 11.599469742352692 178.0553482854988 369.88938095867866 + vertex 11.987697247668617 178.05555745314916 369.8382624738248 + vertex 11.987753044384311 178.05571090760216 372.8382620529317 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 11.599523637841404 178.05549651111806 372.78715803099436 + vertex 11.599469742352692 178.0553482854988 369.88938095867866 + vertex 11.987753044384311 178.05571090760216 372.8382620529317 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 11.237701201174792 178.05515860111183 370.0392383100582 + vertex 11.599469742352692 178.0553482854988 369.88938095867866 + vertex 11.599523637841404 178.05549651111806 372.78715803099436 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 11.237749522547983 178.05529149656644 372.6373141569074 + vertex 11.237701201174792 178.05515860111183 370.0392383100582 + vertex 11.599523637841404 178.05549651111806 372.78715803099436 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.927045552365298 178.05500132666572 370.27762199711793 + vertex 11.237701201174792 178.05515860111183 370.0392383100582 + vertex 11.237749522547983 178.05529149656644 372.6373141569074 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + vertex 10.927045552365298 178.05500132666572 370.27762199711793 + vertex 11.237749522547983 178.05529149656644 372.6373141569074 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.68867346500795 178.0548871801541 370.58828656553237 + vertex 10.927045552365298 178.05500132666572 370.27762199711793 + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.688701363365798 178.05496390738062 372.08828635508587 + vertex 10.68867346500795 178.0548871801541 370.58828656553237 + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.538829602927564 178.0548239404732 370.9500607383616 + vertex 10.68867346500795 178.0548871801541 370.58828656553237 + vertex 10.688701363365798 178.05496390738062 372.08828635508587 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.53884404418024 178.05486365740822 371.726517764734 + vertex 10.538829602927564 178.0548239404732 370.9500607383616 + vertex 10.688701363365798 178.05496390738062 372.08828635508587 + endloop +endfacet +facet normal 0.0005455097430862471 -0.9999998499018307 5.114133794304526e-05 + outer loop + vertex 10.48772557769631 178.05481591730262 371.33829020358735 + vertex 10.538829602927564 178.0548239404732 370.9500607383616 + vertex 10.53884404418024 178.05486365740822 371.726517764734 + endloop +endfacet +facet normal 0.1305077329848326 2.0489301995151305e-05 -0.9914472911916944 + outer loop + vertex 11.987753044384311 178.05571090760216 372.8382620529317 + vertex 11.989935083356634 174.05571150799486 372.83846661828346 + vertex 11.599523637841404 178.05549651111806 372.78715803099436 + endloop +endfacet +facet normal 0.1305077329848326 2.0489301995151305e-05 -0.9914472911916944 + outer loop + vertex 11.601705676813728 174.0554971115108 372.7873625963461 + vertex 11.599523637841404 178.05549651111806 372.78715803099436 + vertex 11.989935083356634 174.05571150799486 372.83846661828346 + endloop +endfacet +facet normal 0.3826661922090187 0.00016149936057536487 -0.9238866593139048 + outer loop + vertex 11.599523637841404 178.05549651111806 372.78715803099436 + vertex 11.601705676813728 174.0554971115108 372.7873625963461 + vertex 11.237749522547983 178.05529149656644 372.6373141569074 + endloop +endfacet +facet normal 0.3826661922090187 0.00016149936057536487 -0.9238866593139048 + outer loop + vertex 11.239931561520306 174.05529209695916 372.6375187222592 + vertex 11.237749522547983 178.05529149656644 372.6373141569074 + vertex 11.601705676813728 174.0554971115108 372.7873625963461 + endloop +endfacet +facet normal 0.6087465828199281 0.00029150350462267197 -0.7933646783987597 + outer loop + vertex 11.237749522547983 178.05529149656644 372.6373141569074 + vertex 11.239931561520306 174.05529209695916 372.6375187222592 + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + endloop +endfacet +facet normal 0.6087465828199281 0.00029150350462267197 -0.7933646783987597 + outer loop + vertex 10.929267045573656 174.0551104357428 372.399146608413 + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + vertex 11.239931561520306 174.05529209695916 372.6375187222592 + endloop +endfacet +facet normal 0.7933418998129353 0.0004016421665622524 -0.6087762057478695 + outer loop + vertex 10.688701363365798 178.05496390738062 372.08828635508587 + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + vertex 10.69088340233812 174.05496450777335 372.0884909204376 + endloop +endfacet +facet normal 0.7933418998129353 0.0004016421665622524 -0.6087762057478695 + outer loop + vertex 10.929267045573656 174.0551104357428 372.399146608413 + vertex 10.69088340233812 174.05496450777335 372.0884909204376 + vertex 10.927085006601333 178.05510983535007 372.3989420430612 + endloop +endfacet +facet normal 0.9238722773931358 0.0004844095785956557 -0.3827006407255951 + outer loop + vertex 10.53884404418024 178.05486365740822 371.726517764734 + vertex 10.688701363365798 178.05496390738062 372.08828635508587 + vertex 10.541026083152563 174.05486425780092 371.7267223300858 + endloop +endfacet +facet normal 0.9238722773931358 0.0004844095785956557 -0.3827006407255951 + outer loop + vertex 10.69088340233812 174.05496450777335 372.0884909204376 + vertex 10.541026083152563 174.05486425780092 371.7267223300858 + vertex 10.688701363365798 178.05496390738062 372.08828635508587 + endloop +endfacet +facet normal 0.9914422860401905 0.0005341652783724907 -0.13054465948041144 + outer loop + vertex 10.48772557769631 178.05481591730262 371.33829020358735 + vertex 10.53884404418024 178.05486365740822 371.726517764734 + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + endloop +endfacet +facet normal 0.9914422860401905 0.0005341652783724907 -0.13054465948041144 + outer loop + vertex 10.541026083152563 174.05486425780092 371.7267223300858 + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + vertex 10.53884404418024 178.05486365740822 371.726517764734 + endloop +endfacet +facet normal 0.991447141329423 0.0005475184971780771 0.13050772457295523 + outer loop + vertex 10.538829602927564 178.0548239404732 370.9500607383616 + vertex 10.48772557769631 178.05481591730262 371.33829020358735 + vertex 10.541011641899885 174.05482454086592 370.95026530371337 + endloop +endfacet +facet normal 0.991447141329423 0.0005475184971780771 0.13050772457295523 + outer loop + vertex 10.489907616668633 174.05481651769531 371.33849476893914 + vertex 10.541011641899885 174.05482454086592 370.95026530371337 + vertex 10.48772557769631 178.05481591730262 371.33829020358735 + endloop +endfacet +facet normal 0.9238865123808966 0.000523559235218068 0.38266622287104274 + outer loop + vertex 10.68867346500795 178.0548871801541 370.58828656553237 + vertex 10.538829602927564 178.0548239404732 370.9500607383616 + vertex 10.690855503980274 174.05488778054684 370.58849113088417 + endloop +endfacet +facet normal 0.9238865123808966 0.000523559235218068 0.38266622287104274 + outer loop + vertex 10.541011641899885 174.05482454086592 370.95026530371337 + vertex 10.690855503980274 174.05488778054684 370.58849113088417 + vertex 10.538829602927564 178.0548239404732 370.9500607383616 + endloop +endfacet +facet normal 0.7933645444083308 0.00046392027660052134 0.6087466504661349 + outer loop + vertex 10.927045552365298 178.05500132666572 370.27762199711793 + vertex 10.68867346500795 178.0548871801541 370.58828656553237 + vertex 10.929227591337622 174.0550019270584 370.2778265624697 + endloop +endfacet +facet normal 0.7933645444083308 0.00046392027660052134 0.6087466504661349 + outer loop + vertex 10.690855503980274 174.05488778054684 370.58849113088417 + vertex 10.929227591337622 174.0550019270584 370.2778265624697 + vertex 10.68867346500795 178.0548871801541 370.58828656553237 + endloop +endfacet +facet normal 0.6087760938311644 0.00037266591779712096 0.7933419998334786 + outer loop + vertex 11.237701201174792 178.05515860111183 370.0392383100582 + vertex 10.927045552365298 178.05500132666572 370.27762199711793 + vertex 11.239883240147114 174.05515920150455 370.03944287541 + endloop +endfacet +facet normal 0.6087760938311644 0.00037266591779712096 0.7933419998334786 + outer loop + vertex 10.929227591337622 174.0550019270584 370.2778265624697 + vertex 11.239883240147114 174.05515920150455 370.03944287541 + vertex 10.927045552365298 178.05500132666572 370.27762199711793 + endloop +endfacet +facet normal 0.3827005585095379 0.00025601499255543085 0.9238724029717585 + outer loop + vertex 11.599469742352692 178.0553482854988 369.88938095867866 + vertex 11.237701201174792 178.05515860111183 370.0392383100582 + vertex 11.601651781325016 174.0553488858915 369.8895855240304 + endloop +endfacet +facet normal 0.3827005585095379 0.00025601499255543085 0.9238724029717585 + outer loop + vertex 11.239883240147114 174.05515920150455 370.03944287541 + vertex 11.601651781325016 174.0553488858915 369.8895855240304 + vertex 11.237701201174792 178.05515860111183 370.0392383100582 + endloop +endfacet +facet normal 0.13054461256799013 0.00012191706865582975 0.9914424286188794 + outer loop + vertex 11.987697247668617 178.05555745314916 369.8382624738248 + vertex 11.599469742352692 178.0553482854988 369.88938095867866 + vertex 11.98987928664094 174.0555580535419 369.8384670391766 + endloop +endfacet +facet normal 0.13054461256799013 0.00012191706865582975 0.9914424286188794 + outer loop + vertex 11.601651781325016 174.0553488858915 369.8895855240304 + vertex 11.98987928664094 174.0555580535419 369.8384670391766 + vertex 11.599469742352692 178.0553482854988 369.88938095867866 + endloop +endfacet +facet normal -0.1305077329848326 -2.0489301995151305e-05 0.9914472911916944 + outer loop + vertex 12.375926654211524 178.05577184963326 369.8893664957622 + vertex 11.987697247668617 178.05555745314916 369.8382624738248 + vertex 12.378108693183847 174.05577245002596 369.88957106111394 + endloop +endfacet +facet normal -0.1305077329848326 -2.0489301995151305e-05 0.9914472911916944 + outer loop + vertex 11.98987928664094 174.0555580535419 369.8384670391766 + vertex 12.378108693183847 174.05577245002596 369.88957106111394 + vertex 11.987697247668617 178.05555745314916 369.8382624738248 + endloop +endfacet +facet normal -0.3826661922090187 -0.00016149936057536487 0.9238866593139048 + outer loop + vertex 12.737700769504942 178.05597686418488 370.0392103698491 + vertex 12.375926654211524 178.05577184963326 369.8893664957622 + vertex 12.739882808477267 174.0559774645776 370.0394149352009 + endloop +endfacet +facet normal -0.3826661922090187 -0.00016149936057536487 0.9238866593139048 + outer loop + vertex 12.378108693183847 174.05577245002596 369.88957106111394 + vertex 12.739882808477267 174.0559774645776 370.0394149352009 + vertex 12.375926654211524 178.05577184963326 369.8893664957622 + endloop +endfacet +facet normal -0.6087465828199281 -0.00029150350462267197 0.7933646783987597 + outer loop + vertex 13.048365285451593 178.05615852540126 370.2775824836953 + vertex 12.737700769504942 178.05597686418488 370.0392103698491 + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + endloop +endfacet +facet normal -0.6087465828199281 -0.00029150350462267197 0.7933646783987597 + outer loop + vertex 12.739882808477267 174.0559774645776 370.0394149352009 + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + vertex 12.737700769504942 178.05597686418488 370.0392103698491 + endloop +endfacet +facet normal -0.7933418998129353 -0.0004016421665622524 0.6087762057478695 + outer loop + vertex 13.048365285451593 178.05615852540126 370.2775824836953 + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + vertex 13.28674892868713 178.0563044533707 370.5882381716707 + endloop +endfacet +facet normal -0.7933418998129353 -0.0004016421665622524 0.6087762057478695 + outer loop + vertex 13.288930967659452 174.0563050537634 370.58844273702243 + vertex 13.28674892868713 178.0563044533707 370.5882381716707 + vertex 13.050547324423915 174.05615912579395 370.27778704904705 + endloop +endfacet +facet normal -0.9238722773931358 -0.0004844095785956557 0.3827006407255951 + outer loop + vertex 13.28674892868713 178.0563044533707 370.5882381716707 + vertex 13.288930967659452 174.0563050537634 370.58844273702243 + vertex 13.436606247872689 178.0564047033431 370.9500067620225 + endloop +endfacet +facet normal -0.9238722773931358 -0.0004844095785956557 0.3827006407255951 + outer loop + vertex 13.438788286845012 174.05640530373583 370.9502113273743 + vertex 13.436606247872689 178.0564047033431 370.9500067620225 + vertex 13.288930967659452 174.0563050537634 370.58844273702243 + endloop +endfacet +facet normal -0.9914422860401905 -0.0005341652783724907 0.13054465948041144 + outer loop + vertex 13.436606247872689 178.0564047033431 370.9500067620225 + vertex 13.438788286845012 174.05640530373583 370.9502113273743 + vertex 13.487724714356615 178.05645244344873 371.3382343231691 + endloop +endfacet +facet normal -0.9914422860401905 -0.0005341652783724907 0.13054465948041144 + outer loop + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + vertex 13.487724714356615 178.05645244344873 371.3382343231691 + vertex 13.438788286845012 174.05640530373583 370.9502113273743 + endloop +endfacet +facet normal -0.991447141329423 -0.0005475184971780771 -0.13050772457295523 + outer loop + vertex 13.487724714356615 178.05645244344873 371.3382343231691 + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + vertex 13.436620689125364 178.05644442027813 371.7264637883949 + endloop +endfacet +facet normal -0.991447141329423 -0.0005475184971780771 -0.13050772457295523 + outer loop + vertex 13.438802728097686 174.05644502067082 371.7266683537467 + vertex 13.436620689125364 178.05644442027813 371.7264637883949 + vertex 13.48990675332894 174.05645304384143 371.33843888852095 + endloop +endfacet +facet normal -0.9238865123808966 -0.000523559235218068 -0.38266622287104274 + outer loop + vertex 13.436620689125364 178.05644442027813 371.7264637883949 + vertex 13.438802728097686 174.05644502067082 371.7266683537467 + vertex 13.286776827044978 178.0563811805972 372.0882379612241 + endloop +endfacet +facet normal -0.9238865123808966 -0.000523559235218068 -0.38266622287104274 + outer loop + vertex 13.2889588660173 174.05638178098994 372.0884425265759 + vertex 13.286776827044978 178.0563811805972 372.0882379612241 + vertex 13.438802728097686 174.05644502067082 371.7266683537467 + endloop +endfacet +facet normal -0.7933645444083308 -0.00046392027660052134 -0.6087466504661349 + outer loop + vertex 13.286776827044978 178.0563811805972 372.0882379612241 + vertex 13.2889588660173 174.05638178098994 372.0884425265759 + vertex 13.048404739687628 178.0562670340856 372.3989025296386 + endloop +endfacet +facet normal -0.7933645444083308 -0.00046392027660052134 -0.6087466504661349 + outer loop + vertex 13.050586778659953 174.05626763447833 372.39910709499037 + vertex 13.048404739687628 178.0562670340856 372.3989025296386 + vertex 13.2889588660173 174.05638178098994 372.0884425265759 + endloop +endfacet +facet normal -0.6087760938311463 -0.0003726659177971118 -0.7933419998334925 + outer loop + vertex 13.048404739687628 178.0562670340856 372.3989025296386 + vertex 13.050586778659953 174.05626763447833 372.39910709499037 + vertex 12.737749090878136 178.0561097596395 372.63728621669827 + endloop +endfacet +facet normal -0.6087760938311463 -0.0003726659177971118 -0.7933419998334925 + outer loop + vertex 12.739931129850461 174.05611036003222 372.63749078205007 + vertex 12.737749090878136 178.0561097596395 372.63728621669827 + vertex 13.050586778659953 174.05626763447833 372.39910709499037 + endloop +endfacet +facet normal -0.38270055850956247 -0.0002560149925554438 -0.9238724029717484 + outer loop + vertex 12.737749090878136 178.0561097596395 372.63728621669827 + vertex 12.739931129850461 174.05611036003222 372.63749078205007 + vertex 12.375980549700234 178.05592007525252 372.78714356807785 + endloop +endfacet +facet normal -0.38270055850956247 -0.0002560149925554438 -0.9238724029717484 + outer loop + vertex 12.378162588672557 174.05592067564524 372.78734813342965 + vertex 12.375980549700234 178.05592007525252 372.78714356807785 + vertex 12.739931129850461 174.05611036003222 372.63749078205007 + endloop +endfacet +facet normal -0.13054461256799013 -0.00012191706865582975 -0.9914424286188794 + outer loop + vertex 12.375980549700234 178.05592007525252 372.78714356807785 + vertex 12.378162588672557 174.05592067564524 372.78734813342965 + vertex 11.987753044384311 178.05571090760216 372.8382620529317 + endloop +endfacet +facet normal -0.13054461256799013 -0.00012191706865582975 -0.9914424286188794 + outer loop + vertex 11.989935083356634 174.05571150799486 372.83846661828346 + vertex 11.987753044384311 178.05571090760216 372.8382620529317 + vertex 12.378162588672557 174.05592067564524 372.78734813342965 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -6.511235848124144 178.05569121227452 371.3386389550018 + vertex -6.562339884085694 178.0556932996484 371.72686845962704 + vertex -6.562354325457634 178.05565991681388 370.9504113528749 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -6.712211676333184 178.05560154600045 370.5886427227549 + vertex -6.562354325457634 178.05565991681388 370.9504113528749 + vertex -6.562339884085694 178.0556932996484 371.72686845962704 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -6.712183777744852 178.05566603668444 372.08864266759 + vertex -6.712211676333184 178.05560154600045 370.5886427227549 + vertex -6.562339884085694 178.0556932996484 371.72686845962704 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -6.950595369939611 178.05552007770865 370.2779869989335 + vertex -6.712211676333184 178.05560154600045 370.5886427227549 + vertex -6.712183777744852 178.05566603668444 372.08864266759 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -6.9505559153776195 178.0556112813086 372.3993072644783 + vertex -6.950595369939611 178.05552007770865 370.2779869989335 + vertex -6.712183777744852 178.05566603668444 372.08864266759 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -7.261259951505227 178.05542106386804 370.0396148556063 + vertex -6.950595369939611 178.05552007770865 370.2779869989335 + vertex -6.9505559153776195 178.0556112813086 372.3993072644783 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -7.261211629732821 178.05553276500916 372.63769097141136 + vertex -7.261259951505227 178.05542106386804 370.0396148556063 + vertex -6.9505559153776195 178.0556112813086 372.3993072644783 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -7.623034143193963 178.05531125210805 369.88977096041253 + vertex -7.261259951505227 178.05542106386804 370.0396148556063 + vertex -7.261211629732821 178.05553276500916 372.63769097141136 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -7.622980247259987 178.05543583854237 372.78754833270943 + vertex -7.623034143193963 178.05531125210805 369.88977096041253 + vertex -7.261211629732821 178.05553276500916 372.63769097141136 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -8.011263631702235 178.05519812591876 369.8386669271808 + vertex -7.623034143193963 178.05531125210805 369.88977096041253 + vertex -7.622980247259987 178.05543583854237 372.78754833270943 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -8.011207834525573 178.05532710728662 372.8386668168511 + vertex -8.011263631702235 178.05519812591876 369.8386669271808 + vertex -7.622980247259987 178.05543583854237 372.78754833270943 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -8.399491218967821 178.05508939466304 369.8897854113224 + vertex -8.011263631702235 178.05519812591876 369.8386669271808 + vertex -8.011207834525573 178.05532710728662 372.8386668168511 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -8.399437323033844 178.05521398109732 372.78756278361936 + vertex -8.399491218967821 178.05508939466304 369.8897854113224 + vertex -8.011207834525573 178.05532710728662 372.8386668168511 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -8.761259836494986 178.0549924681962 370.0396427726205 + vertex -8.399491218967821 178.05508939466304 369.8897854113224 + vertex -8.399437323033844 178.05521398109732 372.78756278361936 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -8.761211514722577 178.05510416933737 372.6377188884255 + vertex -8.761259836494986 178.0549924681962 370.0396427726205 + vertex -8.399437323033844 178.05521398109732 372.78756278361936 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.071915550850187 178.05491395189676 370.27802647955355 + vertex -8.761259836494986 178.0549924681962 370.0396427726205 + vertex -8.761211514722577 178.05510416933737 372.6377188884255 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + vertex -9.071915550850187 178.05491395189676 370.27802647955355 + vertex -8.761211514722577 178.05510416933737 372.6377188884255 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.310287688482953 178.05485919652094 370.5886910764418 + vertex -9.071915550850187 178.05491395189676 370.27802647955355 + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.310259789894621 178.05492368720496 372.08869102127704 + vertex -9.310287688482953 178.05485919652094 370.5886910764418 + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.460131582142155 178.05483193355698 370.95046528440486 + vertex -9.310287688482953 178.05485919652094 370.5886910764418 + vertex -9.310259789894621 178.05492368720496 372.08869102127704 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.460117140770175 178.05486531639147 371.726922391157 + vertex -9.460131582142155 178.05483193355698 370.95046528440486 + vertex -9.310259789894621 178.05492368720496 372.08869102127704 + endloop +endfacet +facet normal 0.000285731257939247 -0.9999999582548189 4.298847474547233e-05 + outer loop + vertex -9.51123561810366 178.05483402093088 371.3386947890301 + vertex -9.460131582142155 178.05483193355698 370.95046528440486 + vertex -9.460117140770175 178.05486531639147 371.726922391157 + endloop +endfacet +facet normal -0.9914423930659667 -0.0002776741785961315 0.1305446441976069 + outer loop + vertex -6.562354325457634 178.05565991681388 370.9504113528749 + vertex -6.561211400425863 174.05566008379466 370.95058330677386 + vertex -6.511235848124144 178.05569121227452 371.3386389550018 + endloop +endfacet +facet normal -0.9914423930659667 -0.0002776741785961315 0.1305446441976069 + outer loop + vertex -6.510092923092373 174.05569137925528 371.33881090890077 + vertex -6.511235848124144 178.05569121227452 371.3386389550018 + vertex -6.561211400425863 174.05566008379466 370.95058330677386 + endloop +endfacet +facet normal -0.9914472483947967 -0.0002888978102073141 -0.1305077399560715 + outer loop + vertex -6.511235848124144 178.05569121227452 371.3386389550018 + vertex -6.510092923092373 174.05569137925528 371.33881090890077 + vertex -6.562339884085694 178.0556932996484 371.72686845962704 + endloop +endfacet +facet normal -0.9914472483947967 -0.0002888978102073141 -0.1305077399560715 + outer loop + vertex -6.561196959053923 174.05569346662915 371.727040413526 + vertex -6.562339884085694 178.0556932996484 371.72686845962704 + vertex -6.510092923092373 174.05569137925528 371.33881090890077 + endloop +endfacet +facet normal -0.923886612189625 -0.0002804335334790834 -0.3826662373058419 + outer loop + vertex -6.562339884085694 178.0556932996484 371.72686845962704 + vertex -6.561196959053923 174.05569346662915 371.727040413526 + vertex -6.712183777744852 178.05566603668444 372.08864266759 + endloop +endfacet +facet normal -0.923886612189625 -0.0002804335334790834 -0.3826662373058419 + outer loop + vertex -6.711040852713081 174.0556662036652 372.08881462148906 + vertex -6.712183777744852 178.05566603668444 372.08864266759 + vertex -6.561196959053923 174.05569346662915 371.727040413526 + endloop +endfacet +facet normal -0.793364630158425 -0.0002528581748825569 -0.608746662969358 + outer loop + vertex -6.712183777744852 178.05566603668444 372.08864266759 + vertex -6.711040852713081 174.0556662036652 372.08881462148906 + vertex -6.9505559153776195 178.0556112813086 372.3993072644783 + endloop +endfacet +facet normal -0.793364630158425 -0.0002528581748825569 -0.608746662969358 + outer loop + vertex -6.949412990345849 174.05561144828937 372.3994792183773 + vertex -6.9505559153776195 178.0556112813086 372.3993072644783 + vertex -6.711040852713081 174.0556662036652 372.08881462148906 + endloop +endfacet +facet normal -0.6087761596790934 -0.00020805094953570214 -0.7933420095527387 + outer loop + vertex -6.9505559153776195 178.0556112813086 372.3993072644783 + vertex -6.949412990345849 174.05561144828937 372.3994792183773 + vertex -7.261211629732821 178.05553276500916 372.63769097141136 + endloop +endfacet +facet normal -0.6087761596790934 -0.00020805094953570214 -0.7933420095527387 + outer loop + vertex -7.260068704701047 174.05553293198992 372.6378629253104 + vertex -7.261211629732821 178.05553276500916 372.63769097141136 + vertex -6.949412990345849 174.05561144828937 372.3994792183773 + endloop +endfacet +facet normal -0.38270059996775274 -0.00014906539579842803 -0.9238724092448208 + outer loop + vertex -7.261211629732821 178.05553276500916 372.63769097141136 + vertex -7.260068704701047 174.05553293198992 372.6378629253104 + vertex -7.622980247259987 178.05543583854237 372.78754833270943 + endloop +endfacet +facet normal -0.38270059996775274 -0.00014906539579842803 -0.9238724092448208 + outer loop + vertex -7.621837322228213 174.05543600552312 372.7877202866084 + vertex -7.622980247259987 178.05543583854237 372.78754833270943 + vertex -7.260068704701047 174.05553293198992 372.6378629253104 + endloop +endfacet +facet normal -0.13054462681127676 -7.992128167971128e-05 -0.9914424310182076 + outer loop + vertex -7.622980247259987 178.05543583854237 372.78754833270943 + vertex -7.621837322228213 174.05543600552312 372.7877202866084 + vertex -8.011207834525573 178.05532710728662 372.8386668168511 + endloop +endfacet +facet normal -0.13054462681127676 -7.992128167971128e-05 -0.9914424310182076 + outer loop + vertex -8.010064909493801 174.05532727426734 372.8388387707501 + vertex -8.011207834525573 178.05532710728662 372.8386668168511 + vertex -7.621837322228213 174.05543600552312 372.7877202866084 + endloop +endfacet +facet normal 0.13050774692722905 -5.330664290674419e-06 -0.9914472895537928 + outer loop + vertex -8.011207834525573 178.05532710728662 372.8386668168511 + vertex -8.010064909493801 174.05532727426734 372.8388387707501 + vertex -8.399437323033844 178.05521398109732 372.78756278361936 + endloop +endfacet +facet normal 0.13050774692722905 -5.330664290674419e-06 -0.9914472895537928 + outer loop + vertex -8.398294398002074 174.05521414807805 372.78773473751835 + vertex -8.399437323033844 178.05521398109732 372.78756278361936 + vertex -8.010064909493801 174.05532727426734 372.8388387707501 + endloop +endfacet +facet normal 0.3826662333868316 6.962322906041436e-05 -0.923886653750416 + outer loop + vertex -8.399437323033844 178.05521398109732 372.78756278361936 + vertex -8.398294398002074 174.05521414807805 372.78773473751835 + vertex -8.761211514722577 178.05510416933737 372.6377188884255 + endloop +endfacet +facet normal 0.3826662333868316 6.962322906041436e-05 -0.923886653750416 + outer loop + vertex -8.760068589690809 174.0551043363181 372.63789084232457 + vertex -8.761211514722577 178.05510416933737 372.6377188884255 + vertex -8.398294398002074 174.05521414807805 372.78773473751835 + endloop +endfacet +facet normal 0.6087466484270903 0.00013983241440889834 -0.7933646692887706 + outer loop + vertex -8.761211514722577 178.05510416933737 372.6377188884255 + vertex -8.760068589690809 174.0551043363181 372.63789084232457 + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + endloop +endfacet +facet normal 0.6087466484270903 0.00013983241440889834 -0.7933646692887706 + outer loop + vertex -9.070733171256427 174.05500532247748 372.3995186989973 + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + vertex -8.760068589690809 174.0551043363181 372.63789084232457 + endloop +endfacet +facet normal 0.7933419853782958 0.00020051225179935913 -0.6087761937123206 + outer loop + vertex -9.310259789894621 178.05492368720496 372.08869102127704 + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + vertex -9.30911686486285 174.0549238541857 372.08886297517597 + endloop +endfacet +facet normal 0.7933419853782958 0.00020051225179935913 -0.6087761937123206 + outer loop + vertex -9.070733171256427 174.05500532247748 372.3995186989973 + vertex -9.30911686486285 174.0549238541857 372.08886297517597 + vertex -9.071876096288197 178.05500515549676 372.39934674509834 + endloop +endfacet +facet normal 0.9238723770856896 0.00024752751059188983 -0.3827006265845001 + outer loop + vertex -9.460117140770175 178.05486531639147 371.726922391157 + vertex -9.310259789894621 178.05492368720496 372.08869102127704 + vertex -9.458974215738403 174.05486548337223 371.72709434505595 + endloop +endfacet +facet normal 0.9238723770856896 0.00024752751059188983 -0.3827006265845001 + outer loop + vertex -9.30911686486285 174.0549238541857 372.08886297517597 + vertex -9.458974215738403 174.05486548337223 371.72709434505595 + vertex -9.310259789894621 178.05492368720496 372.08869102127704 + endloop +endfacet +facet normal 0.9914423930659667 0.0002776741785961315 -0.1305446441976069 + outer loop + vertex -9.51123561810366 178.05483402093088 371.3386947890301 + vertex -9.460117140770175 178.05486531639147 371.726922391157 + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + endloop +endfacet +facet normal 0.9914423930659667 0.0002776741785961315 -0.1305446441976069 + outer loop + vertex -9.458974215738403 174.05486548337223 371.72709434505595 + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + vertex -9.460117140770175 178.05486531639147 371.726922391157 + endloop +endfacet +facet normal 0.9914472483948117 0.0002888978102073135 0.13050773995595827 + outer loop + vertex -9.460131582142155 178.05483193355698 370.95046528440486 + vertex -9.51123561810366 178.05483402093088 371.3386947890301 + vertex -9.458988657110387 174.05483210053774 370.9506372383038 + endloop +endfacet +facet normal 0.9914472483948117 0.0002888978102073135 0.13050773995595827 + outer loop + vertex -9.51009269307189 174.0548341879116 371.3388667429291 + vertex -9.458988657110387 174.05483210053774 370.9506372383038 + vertex -9.51123561810366 178.05483402093088 371.3386947890301 + endloop +endfacet +facet normal 0.9238866121895842 0.000280433533479076 0.3826662373059403 + outer loop + vertex -9.310287688482953 178.05485919652094 370.5886910764418 + vertex -9.460131582142155 178.05483193355698 370.95046528440486 + vertex -9.309144763451181 174.0548593635017 370.5888630303408 + endloop +endfacet +facet normal 0.9238866121895842 0.000280433533479076 0.3826662373059403 + outer loop + vertex -9.458988657110387 174.05483210053774 370.9506372383038 + vertex -9.309144763451181 174.0548593635017 370.5888630303408 + vertex -9.460131582142155 178.05483193355698 370.95046528440486 + endloop +endfacet +facet normal 0.793364630158425 0.0002528581748825569 0.608746662969358 + outer loop + vertex -9.071915550850187 178.05491395189676 370.27802647955355 + vertex -9.310287688482953 178.05485919652094 370.5886910764418 + vertex -9.070772625818417 174.05491411887752 370.2781984334526 + endloop +endfacet +facet normal 0.793364630158425 0.0002528581748825569 0.608746662969358 + outer loop + vertex -9.309144763451181 174.0548593635017 370.5888630303408 + vertex -9.070772625818417 174.05491411887752 370.2781984334526 + vertex -9.310287688482953 178.05485919652094 370.5886910764418 + endloop +endfacet +facet normal 0.6087761596790934 0.00020805094953570214 0.7933420095527387 + outer loop + vertex -8.761259836494986 178.0549924681962 370.0396427726205 + vertex -9.071915550850187 178.05491395189676 370.27802647955355 + vertex -8.760116911463216 174.05499263517694 370.03981472651947 + endloop +endfacet +facet normal 0.6087761596790934 0.00020805094953570214 0.7933420095527387 + outer loop + vertex -9.070772625818417 174.05491411887752 370.2781984334526 + vertex -8.760116911463216 174.05499263517694 370.03981472651947 + vertex -9.071915550850187 178.05491395189676 370.27802647955355 + endloop +endfacet +facet normal 0.38270059996775274 0.00014906539579842803 0.9238724092448208 + outer loop + vertex -8.399491218967821 178.05508939466304 369.8897854113224 + vertex -8.761259836494986 178.0549924681962 370.0396427726205 + vertex -8.398348293936047 174.05508956164377 369.88995736522145 + endloop +endfacet +facet normal 0.38270059996775274 0.00014906539579842803 0.9238724092448208 + outer loop + vertex -8.760116911463216 174.05499263517694 370.03981472651947 + vertex -8.398348293936047 174.05508956164377 369.88995736522145 + vertex -8.761259836494986 178.0549924681962 370.0396427726205 + endloop +endfacet +facet normal 0.13054462681127676 7.992128167971128e-05 0.9914424310182076 + outer loop + vertex -8.011263631702235 178.05519812591876 369.8386669271808 + vertex -8.399491218967821 178.05508939466304 369.8897854113224 + vertex -8.010120706670465 174.05519829289952 369.83883888107977 + endloop +endfacet +facet normal 0.13054462681127676 7.992128167971128e-05 0.9914424310182076 + outer loop + vertex -8.398348293936047 174.05508956164377 369.88995736522145 + vertex -8.010120706670465 174.05519829289952 369.83883888107977 + vertex -8.399491218967821 178.05508939466304 369.8897854113224 + endloop +endfacet +facet normal -0.13050774692722905 5.330664290674419e-06 0.9914472895537928 + outer loop + vertex -7.623034143193963 178.05531125210805 369.88977096041253 + vertex -8.011263631702235 178.05519812591876 369.8386669271808 + vertex -7.621891218162192 174.05531141908884 369.8899429143115 + endloop +endfacet +facet normal -0.13050774692722905 5.330664290674419e-06 0.9914472895537928 + outer loop + vertex -8.010120706670465 174.05519829289952 369.83883888107977 + vertex -7.621891218162192 174.05531141908884 369.8899429143115 + vertex -8.011263631702235 178.05519812591876 369.8386669271808 + endloop +endfacet +facet normal -0.3826662333868316 -6.962322906041436e-05 0.923886653750416 + outer loop + vertex -7.261259951505227 178.05542106386804 370.0396148556063 + vertex -7.623034143193963 178.05531125210805 369.88977096041253 + vertex -7.2601170264734565 174.0554212308488 370.0397868095053 + endloop +endfacet +facet normal -0.3826662333868316 -6.962322906041436e-05 0.923886653750416 + outer loop + vertex -7.621891218162192 174.05531141908884 369.8899429143115 + vertex -7.2601170264734565 174.0554212308488 370.0397868095053 + vertex -7.623034143193963 178.05531125210805 369.88977096041253 + endloop +endfacet +facet normal -0.6087466484270903 -0.00013983241440889834 0.7933646692887706 + outer loop + vertex -6.950595369939611 178.05552007770865 370.2779869989335 + vertex -7.261259951505227 178.05542106386804 370.0396148556063 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + endloop +endfacet +facet normal -0.6087466484270903 -0.00013983241440889834 0.7933646692887706 + outer loop + vertex -7.2601170264734565 174.0554212308488 370.0397868095053 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + vertex -7.261259951505227 178.05542106386804 370.0396148556063 + endloop +endfacet +facet normal -0.7933419853782958 -0.00020051225179935913 0.6087761937123206 + outer loop + vertex -6.950595369939611 178.05552007770865 370.2779869989335 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + vertex -6.712211676333184 178.05560154600045 370.5886427227549 + endloop +endfacet +facet normal -0.7933419853782958 -0.00020051225179935913 0.6087761937123206 + outer loop + vertex -6.711068751301413 174.0556017129812 370.58881467665384 + vertex -6.712211676333184 178.05560154600045 370.5886427227549 + vertex -6.94945244490784 174.0555202446894 370.2781589528325 + endloop +endfacet +facet normal -0.9238723770856896 -0.00024752751059188983 0.3827006265845001 + outer loop + vertex -6.712211676333184 178.05560154600045 370.5886427227549 + vertex -6.711068751301413 174.0556017129812 370.58881467665384 + vertex -6.562354325457634 178.05565991681388 370.9504113528749 + endloop +endfacet +facet normal -0.9238723770856896 -0.00024752751059188983 0.3827006265845001 + outer loop + vertex -6.561211400425863 174.05566008379466 370.95058330677386 + vertex -6.562354325457634 178.05565991681388 370.9504113528749 + vertex -6.711068751301413 174.0556017129812 370.58881467665384 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -6.508606688988532 178.054565229564 351.3374643597222 + vertex -6.559710659419408 178.05471966655466 351.72569383397484 + vertex -6.559725222848391 178.0544582848618 350.9492367867938 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -6.709554483009333 178.0549110712081 352.08746801246093 + vertex -6.559725222848391 178.0544582848618 350.9492367867938 + vertex -6.559710659419408 178.05471966655466 351.72569383397484 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -6.709582617393708 178.0544061205528 350.5874681827082 + vertex -6.559725222848391 178.0544582848618 350.9492367867938 + vertex -6.709554483009333 178.0549110712081 352.08746801246093 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + vertex -6.709582617393708 178.0544061205528 350.5874681827082 + vertex -6.709554483009333 178.0549110712081 352.08746801246093 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -6.947966338837327 178.05441229154857 350.27681247998305 + vertex -6.709582617393708 178.0544061205528 350.5874681827082 + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -7.258582200327414 178.055350977496 352.6365162678525 + vertex -6.947966338837327 178.05441229154857 350.27681247998305 + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -7.25863093051058 178.05447637730575 350.0384403513762 + vertex -6.947966338837327 178.05441229154857 350.27681247998305 + vertex -7.258582200327414 178.055350977496 352.6365162678525 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -7.620350762431494 178.0555695002439 352.7863736134983 + vertex -7.25863093051058 178.05447637730575 350.0384403513762 + vertex -7.258582200327414 178.055350977496 352.6365162678525 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -7.620405113888441 178.05459401048597 349.88859646352364 + vertex -7.25863093051058 178.05447637730575 350.0384403513762 + vertex -7.620350762431494 178.0555695002439 352.7863736134983 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -8.008578307465086 178.05576707589302 352.83749208925923 + vertex -7.620405113888441 178.05459401048597 349.88859646352364 + vertex -7.620350762431494 178.0555695002439 352.7863736134983 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -8.008634576233833 178.05475717458245 349.83749242975387 + vertex -7.620405113888441 178.05459401048597 349.88859646352364 + vertex -8.008578307465086 178.05576707589302 352.83749208925923 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -8.396807769810477 178.05593023998952 352.7863880554894 + vertex -8.008634576233833 178.05475717458245 349.83749242975387 + vertex -8.008578307465086 178.05576707589302 352.83749208925923 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -8.396862121267423 178.0549547502316 349.8886109055147 + vertex -8.008634576233833 178.05475717458245 349.83749242975387 + vertex -8.396807769810477 178.05593023998952 352.7863880554894 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -8.75858195318834 178.05604787316975 352.6365441676368 + vertex -8.396862121267423 178.0549547502316 349.8886109055147 + vertex -8.396807769810477 178.05593023998952 352.7863880554894 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -8.758630683371509 178.0551732729795 350.0384682511605 + vertex -8.396862121267423 178.0549547502316 349.8886109055147 + vertex -8.75858195318834 178.05604787316975 352.6365441676368 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.069246544861594 178.0561119589269 352.39817203902993 + vertex -8.758630683371509 178.0551732729795 350.0384682511605 + vertex -8.75858195318834 178.05604787316975 352.6365441676368 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.069286332889511 178.05539785086188 350.2768519362364 + vertex -8.758630683371509 178.0551732729795 350.0384682511605 + vertex -9.069246544861594 178.0561119589269 352.39817203902993 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.307630266305209 178.05611812992265 352.0875163363048 + vertex -9.069286332889511 178.05539785086188 350.2768519362364 + vertex -9.069246544861594 178.0561119589269 352.39817203902993 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.307658400689581 178.05561317926737 350.58751650655216 + vertex -9.069286332889511 178.05539785086188 350.2768519362364 + vertex -9.307630266305209 178.05611812992265 352.0875163363048 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.457487660850528 178.05606596561367 351.72574773221925 + vertex -9.307658400689581 178.05561317926737 350.58751650655216 + vertex -9.307630266305209 178.05611812992265 352.0875163363048 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.45750222427951 178.05580458392083 350.9492906850382 + vertex -9.307658400689581 178.05561317926737 350.58751650655216 + vertex -9.457487660850528 178.05606596561367 351.72574773221925 + endloop +endfacet +facet normal -0.000464590854411996 -0.9999998354135803 0.00033664246698150084 + outer loop + vertex -9.508606194710385 178.0559590209115 351.3375201592908 + vertex -9.45750222427951 178.05580458392083 350.9492906850382 + vertex -9.457487660850528 178.05606596561367 351.72574773221925 + endloop +endfacet +facet normal -0.1305447739053282 -0.0002731117446517049 -0.9914423772544635 + outer loop + vertex -8.008578307465086 178.05576707589302 352.83749208925923 + vertex -7.620350762431494 178.0555695002439 352.7863736134983 + vertex -8.01043667088272 174.05576773423874 352.83883865912713 + endloop +endfacet +facet normal -0.1305447739053282 -0.0002731117446517049 -0.9914423772544635 + outer loop + vertex -7.622209125849128 174.0555701585896 352.7877201833663 + vertex -8.01043667088272 174.05576773423874 352.83883865912713 + vertex -7.620350762431494 178.0555695002439 352.7863736134983 + endloop +endfacet +facet normal 0.13050758231547635 -0.00039439593641636363 -0.9914472327915465 + outer loop + vertex -8.396807769810477 178.05593023998952 352.7863880554894 + vertex -8.008578307465086 178.05576707589302 352.83749208925923 + vertex -8.398666133228108 174.05593089833525 352.7877346253573 + endloop +endfacet +facet normal 0.13050758231547635 -0.00039439593641636363 -0.9914472327915465 + outer loop + vertex -8.01043667088272 174.05576773423874 352.83883865912713 + vertex -8.398666133228108 174.05593089833525 352.7877346253573 + vertex -8.008578307465086 178.05576707589302 352.83749208925923 + endloop +endfacet +facet normal 0.38266606247542545 -0.0004888026968843372 -0.9238865978579174 + outer loop + vertex -8.75858195318834 178.05604787316975 352.6365441676368 + vertex -8.396807769810477 178.05593023998952 352.7863880554894 + vertex -8.76044031660597 174.05604853151547 352.6378907375048 + endloop +endfacet +facet normal 0.38266606247542545 -0.0004888026968843372 -0.9238865978579174 + outer loop + vertex -8.398666133228108 174.05593089833525 352.7877346253573 + vertex -8.76044031660597 174.05604853151547 352.6378907375048 + vertex -8.396807769810477 178.05593023998952 352.7863880554894 + endloop +endfacet +facet normal 0.6087464828633162 -0.0005498983613443156 -0.7933646180750277 + outer loop + vertex -9.069246544861594 178.0561119589269 352.39817203902993 + vertex -8.75858195318834 178.05604787316975 352.6365441676368 + vertex -9.071104908279224 174.05611261727262 352.3995186088979 + endloop +endfacet +facet normal 0.6087464828633162 -0.0005498983613443156 -0.7933646180750277 + outer loop + vertex -8.76044031660597 174.05604853151547 352.6378907375048 + vertex -9.071104908279224 174.05611261727262 352.3995186088979 + vertex -8.75858195318834 178.05604787316975 352.6365441676368 + endloop +endfacet +facet normal 0.7933418364451362 -0.0005735193612286716 -0.6087761506673871 + outer loop + vertex -9.307630266305209 178.05611812992265 352.0875163363048 + vertex -9.069246544861594 178.0561119589269 352.39817203902993 + vertex -9.309488629722841 174.05611878826838 352.0888629061727 + endloop +endfacet +facet normal 0.7933418364451362 -0.0005735193612286716 -0.6087761506673871 + outer loop + vertex -9.071104908279224 174.05611261727262 352.3995186088979 + vertex -9.309488629722841 174.05611878826838 352.0888629061727 + vertex -9.069246544861594 178.0561119589269 352.39817203902993 + endloop +endfacet +facet normal 0.9238722549326219 -0.0005580559644308524 -0.38270059464188616 + outer loop + vertex -9.457487660850528 178.05606596561367 351.72574773221925 + vertex -9.307630266305209 178.05611812992265 352.0875163363048 + vertex -9.45934602426816 174.05606662395937 351.72709430208715 + endloop +endfacet +facet normal 0.9238722549326219 -0.0005580559644308524 -0.38270059464188616 + outer loop + vertex -9.309488629722841 174.05611878826838 352.0888629061727 + vertex -9.45934602426816 174.05606662395937 351.72709430208715 + vertex -9.307630266305209 178.05611812992265 352.0875163363048 + endloop +endfacet +facet normal 0.9914423060175163 -0.0005045619758881765 -0.1305446255342682 + outer loop + vertex -9.508606194710385 178.0559590209115 351.3375201592908 + vertex -9.457487660850528 178.05606596561367 351.72574773221925 + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + endloop +endfacet +facet normal 0.9914423060175163 -0.0005045619758881765 -0.1305446255342682 + outer loop + vertex -9.45934602426816 174.05606662395937 351.72709430208715 + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + vertex -9.457487660850528 178.05606596561367 351.72574773221925 + endloop +endfacet +facet normal 0.9914472023832055 -0.0004166829225167438 0.13050774406853188 + outer loop + vertex -9.45750222427951 178.05580458392083 350.9492906850382 + vertex -9.508606194710385 178.0559590209115 351.3375201592908 + vertex -9.459360587697146 174.05580524226656 350.9506372549061 + endloop +endfacet +facet normal 0.9914472023832055 -0.0004166829225167438 0.13050774406853188 + outer loop + vertex -9.510464558128016 174.0559596792572 351.3388667291587 + vertex -9.459360587697146 174.05580524226656 350.9506372549061 + vertex -9.508606194710385 178.0559590209115 351.3375201592908 + endloop +endfacet +facet normal 0.9238866103504938 -0.0003004076165770036 0.3826662265870074 + outer loop + vertex -9.307658400689581 178.05561317926737 350.58751650655216 + vertex -9.45750222427951 178.05580458392083 350.9492906850382 + vertex -9.309516764107213 174.05561383761307 350.58886307642007 + endloop +endfacet +facet normal 0.9238866103504938 -0.0003004076165770036 0.3826662265870074 + outer loop + vertex -9.459360587697146 174.05580524226656 350.9506372549061 + vertex -9.309516764107213 174.05561383761307 350.58886307642007 + vertex -9.45750222427951 178.05580458392083 350.9492906850382 + endloop +endfacet +facet normal 0.7933646726171032 -0.00016366002801445844 0.608746638149692 + outer loop + vertex -9.069286332889511 178.05539785086188 350.2768519362364 + vertex -9.307658400689581 178.05561317926737 350.58751650655216 + vertex -9.071144696307146 174.0553985092076 350.27819850610433 + endloop +endfacet +facet normal 0.7933646726171032 -0.00016366002801445844 0.608746638149692 + outer loop + vertex -9.309516764107213 174.05561383761307 350.58886307642007 + vertex -9.071144696307146 174.0553985092076 350.27819850610433 + vertex -9.307658400689581 178.05561317926737 350.58751650655216 + endloop +endfacet +facet normal 0.608776243542086 -1.5759279003825668e-05 0.7933419723236834 + outer loop + vertex -9.069286332889511 178.05539785086188 350.2768519362364 + vertex -9.071144696307146 174.0553985092076 350.27819850610433 + vertex -8.758630683371509 178.0551732729795 350.0384682511605 + endloop +endfacet +facet normal 0.608776243542086 -1.5759279003825668e-05 0.7933419723236834 + outer loop + vertex -8.760489046789141 174.0551739313252 350.0398148210285 + vertex -8.758630683371509 178.0551732729795 350.0384682511605 + vertex -9.071144696307146 174.0553985092076 350.27819850610433 + endloop +endfacet +facet normal 0.38270071951997275 0.00013321543882750038 0.923872362143463 + outer loop + vertex -8.758630683371509 178.0551732729795 350.0384682511605 + vertex -8.760489046789141 174.0551739313252 350.0398148210285 + vertex -8.396862121267423 178.0549547502316 349.8886109055147 + endloop +endfacet +facet normal 0.38270071951997275 0.00013321543882750038 0.923872362143463 + outer loop + vertex -8.398720484685057 174.05495540857729 349.8899574753827 + vertex -8.396862121267423 178.0549547502316 349.8886109055147 + vertex -8.760489046789141 174.0551739313252 350.0398148210285 + endloop +endfacet +facet normal 0.1305447739052999 0.00027311174465171934 0.9914423772544672 + outer loop + vertex -8.396862121267423 178.0549547502316 349.8886109055147 + vertex -8.398720484685057 174.05495540857729 349.8899574753827 + vertex -8.008634576233833 178.05475717458245 349.83749242975387 + endloop +endfacet +facet normal 0.1305447739052999 0.00027311174465171934 0.9914423772544672 + outer loop + vertex -8.010492939651467 174.05475783292815 349.83883899962177 + vertex -8.008634576233833 178.05475717458245 349.83749242975387 + vertex -8.398720484685057 174.05495540857729 349.8899574753827 + endloop +endfacet +facet normal -0.13050758231544804 0.0003943959364163517 0.9914472327915501 + outer loop + vertex -8.008634576233833 178.05475717458245 349.83749242975387 + vertex -8.010492939651467 174.05475783292815 349.83883899962177 + vertex -7.620405113888441 178.05459401048597 349.88859646352364 + endloop +endfacet +facet normal -0.13050758231544804 0.0003943959364163517 0.9914472327915501 + outer loop + vertex -7.622263477306075 174.05459466883167 349.8899430333916 + vertex -7.620405113888441 178.05459401048597 349.88859646352364 + vertex -8.010492939651467 174.05475783292815 349.83883899962177 + endloop +endfacet +facet normal -0.3826660624754501 0.0004888026968843452 0.9238865978579073 + outer loop + vertex -7.620405113888441 178.05459401048597 349.88859646352364 + vertex -7.622263477306075 174.05459466883167 349.8899430333916 + vertex -7.25863093051058 178.05447637730575 350.0384403513762 + endloop +endfacet +facet normal -0.3826660624754501 0.0004888026968843452 0.9238865978579073 + outer loop + vertex -7.260489293928211 174.05447703565144 350.0397869212441 + vertex -7.25863093051058 178.05447637730575 350.0384403513762 + vertex -7.622263477306075 174.05459466883167 349.8899430333916 + endloop +endfacet +facet normal -0.6087464828633162 0.0005498983613443156 0.7933646180750277 + outer loop + vertex -7.25863093051058 178.05447637730575 350.0384403513762 + vertex -7.260489293928211 174.05447703565144 350.0397869212441 + vertex -6.947966338837327 178.05441229154857 350.27681247998305 + endloop +endfacet +facet normal -0.6087464828633162 0.0005498983613443156 0.7933646180750277 + outer loop + vertex -6.949824702254958 174.05441294989427 350.278159049851 + vertex -6.947966338837327 178.05441229154857 350.27681247998305 + vertex -7.260489293928211 174.05447703565144 350.0397869212441 + endloop +endfacet +facet normal -0.7933418364451362 0.0005735193612286716 0.6087761506673871 + outer loop + vertex -6.947966338837327 178.05441229154857 350.27681247998305 + vertex -6.949824702254958 174.05441294989427 350.278159049851 + vertex -6.709582617393708 178.0544061205528 350.5874681827082 + endloop +endfacet +facet normal -0.7933418364451362 0.0005735193612286716 0.6087761506673871 + outer loop + vertex -6.711440980811342 174.05440677889854 350.5888147525761 + vertex -6.709582617393708 178.0544061205528 350.5874681827082 + vertex -6.949824702254958 174.05441294989427 350.278159049851 + endloop +endfacet +facet normal -0.9238722549326219 0.0005580559644308524 0.38270059464188616 + outer loop + vertex -6.709582617393708 178.0544061205528 350.5874681827082 + vertex -6.711440980811342 174.05440677889854 350.5888147525761 + vertex -6.559725222848391 178.0544582848618 350.9492367867938 + endloop +endfacet +facet normal -0.9238722549326219 0.0005580559644308524 0.38270059464188616 + outer loop + vertex -6.561583586266025 174.05445894320752 350.9505833566617 + vertex -6.559725222848391 178.0544582848618 350.9492367867938 + vertex -6.711440980811342 174.05440677889854 350.5888147525761 + endloop +endfacet +facet normal -0.9914423060175163 0.0005045619758881765 0.1305446255342682 + outer loop + vertex -6.559725222848391 178.0544582848618 350.9492367867938 + vertex -6.561583586266025 174.05445894320752 350.9505833566617 + vertex -6.508606688988532 178.054565229564 351.3374643597222 + endloop +endfacet +facet normal -0.9914423060175163 0.0005045619758881765 0.1305446255342682 + outer loop + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + vertex -6.508606688988532 178.054565229564 351.3374643597222 + vertex -6.561583586266025 174.05445894320752 350.9505833566617 + endloop +endfacet +facet normal -0.9914472023832055 0.0004166829225167438 -0.13050774406853188 + outer loop + vertex -6.508606688988532 178.054565229564 351.3374643597222 + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + vertex -6.559710659419408 178.05471966655466 351.72569383397484 + endloop +endfacet +facet normal -0.9914472023832055 0.0004166829225167438 -0.13050774406853188 + outer loop + vertex -6.5615690228370385 174.05472032490036 351.72704040384275 + vertex -6.559710659419408 178.05471966655466 351.72569383397484 + vertex -6.510465052406163 174.05456588790972 351.3388109295902 + endloop +endfacet +facet normal -0.9238866103504938 0.0003004076165770036 -0.3826662265870074 + outer loop + vertex -6.559710659419408 178.05471966655466 351.72569383397484 + vertex -6.5615690228370385 174.05472032490036 351.72704040384275 + vertex -6.709554483009333 178.0549110712081 352.08746801246093 + endloop +endfacet +facet normal -0.9238866103504938 0.0003004076165770036 -0.3826662265870074 + outer loop + vertex -6.71141284642697 174.05491172955382 352.08881458232884 + vertex -6.709554483009333 178.0549110712081 352.08746801246093 + vertex -6.5615690228370385 174.05472032490036 351.72704040384275 + endloop +endfacet +facet normal -0.7933646726171032 0.00016366002801445844 -0.608746638149692 + outer loop + vertex -6.709554483009333 178.0549110712081 352.08746801246093 + vertex -6.71141284642697 174.05491172955382 352.08881458232884 + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + endloop +endfacet +facet normal -0.7933646726171032 0.00016366002801445844 -0.608746638149692 + outer loop + vertex -6.94978491422704 174.0551270579593 352.3994791526446 + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + vertex -6.71141284642697 174.05491172955382 352.08881458232884 + endloop +endfacet +facet normal -0.608776243542086 1.5759279003825668e-05 -0.7933419723236834 + outer loop + vertex -7.258582200327414 178.055350977496 352.6365162678525 + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + vertex -7.260440563745044 174.0553516358417 352.63786283772043 + endloop +endfacet +facet normal -0.608776243542086 1.5759279003825668e-05 -0.7933419723236834 + outer loop + vertex -6.94978491422704 174.0551270579593 352.3994791526446 + vertex -7.260440563745044 174.0553516358417 352.63786283772043 + vertex -6.9479265508094095 178.05512639961358 352.39813258277667 + endloop +endfacet +facet normal -0.3827007195199482 -0.00013321543882751526 -0.9238723621434733 + outer loop + vertex -7.620350762431494 178.0555695002439 352.7863736134983 + vertex -7.258582200327414 178.055350977496 352.6365162678525 + vertex -7.622209125849128 174.0555701585896 352.7877201833663 + endloop +endfacet +facet normal -0.3827007195199482 -0.00013321543882751526 -0.9238723621434733 + outer loop + vertex -7.260440563745044 174.0553516358417 352.63786283772043 + vertex -7.622209125849128 174.0555701585896 352.7877201833663 + vertex -7.258582200327414 178.055350977496 352.6365162678525 + endloop +endfacet +facet normal 0.9999999998270226 1.107962124282345e-14 -1.8599859248019e-05 + outer loop + vertex -3.997969090625584 182.04038513132514 345.0887668428439 + vertex -3.9979690906256034 184.04085388264915 345.0887668428439 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + endloop +endfacet +facet normal 0.9999999998270226 1.107962124282345e-14 -1.8599859248019e-05 + outer loop + vertex -3.997364595200043 184.04085388264912 377.5887668372222 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + vertex -3.9979690906256034 184.04085388264915 345.0887668428439 + endloop +endfacet +facet normal -1.859985936411889e-05 0.9999999998270226 3.459555267179288e-10 + outer loop + vertex -2.4974278380028263 182.04041302993787 377.5887389386096 + vertex -2.4980323334283865 182.0404130299379 345.0887389442313 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + endloop +endfacet +facet normal -1.859985936411889e-05 0.9999999998270226 3.459555267179288e-10 + outer loop + vertex -3.997969090625584 182.04038513132514 345.0887668428439 + vertex -3.997364595200023 182.04038513132514 377.5887668372222 + vertex -2.4980323334283865 182.0404130299379 345.0887389442313 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.8599859210821353e-05 + outer loop + vertex -2.497969090885266 181.0404130319375 345.08873894305503 + vertex -2.4980323334283865 182.0404130299379 345.0887389442313 + vertex -2.4973645954597052 181.04041303193748 377.58873893743333 + endloop +endfacet +facet normal 0.9999999978272129 6.324254313170525e-05 -1.8599859210821353e-05 + outer loop + vertex -2.4974278380028263 182.04041302993787 377.5887389386096 + vertex -2.4973645954597052 181.04041303193748 377.58873893743333 + vertex -2.4980323334283865 182.0404130299379 345.0887389442313 + endloop +endfacet +facet normal 6.324254336259922e-05 -0.9999999980001903 -1.1763031656870195e-09 + outer loop + vertex -2.497969090885266 181.0404130319375 345.08873894305503 + vertex -2.4973645954597052 181.04041303193748 377.58873893743333 + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + endloop +endfacet +facet normal 6.324254336259922e-05 -0.9999999980001903 -1.1763031656870195e-09 + outer loop + vertex -3.9973645952000485 181.04031816812224 377.5887668372222 + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + vertex -2.4973645954597052 181.04041303193748 377.58873893743333 + endloop +endfacet +facet normal 0.9999999998266912 8.142441676549828e-07 -1.8599859248011412e-05 + outer loop + vertex -3.9979678692461733 179.5403019724304 345.08876684282114 + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + vertex -3.9973633738206127 179.54030197243037 377.5887668371995 + endloop +endfacet +facet normal 0.9999999998266912 8.142441676549828e-07 -1.8599859248011412e-05 + outer loop + vertex -3.9973645952000485 181.04031816812224 377.5887668372222 + vertex -3.9973633738206127 179.54030197243037 377.5887668371995 + vertex -3.997969090625609 181.04031816812224 345.0887668428439 + endloop +endfacet +facet normal 0.9999997905546839 0.0006469502561555169 -1.8599855355581038e-05 + outer loop + vertex -3.9979251828280624 179.4743209966488 345.0887668420272 + vertex -3.9979678692461733 179.5403019724304 345.08876684282114 + vertex -3.997320687402502 179.47432099664877 377.5887668364055 + endloop +endfacet +facet normal 0.9999997905546839 0.0006469502561555169 -1.8599855355581038e-05 + outer loop + vertex -3.9973633738206127 179.54030197243037 377.5887668371995 + vertex -3.997320687402502 179.47432099664877 377.5887668364055 + vertex -3.9979678692461733 179.5403019724304 345.08876684282114 + endloop +endfacet +facet normal 0.9658394493491518 0.2591411927081545 -1.7964477816987412e-05 + outer loop + vertex -3.963810010340058 179.3471710862956 345.08876620748975 + vertex -3.9979251828280624 179.4743209966488 345.0887668420272 + vertex -3.9632055149144976 179.34717108629556 377.5887662018681 + endloop +endfacet +facet normal 0.9658394493491518 0.2591411927081545 -1.7964477816987412e-05 + outer loop + vertex -3.997320687402502 179.47432099664877 377.5887668364055 + vertex -3.9632055149144976 179.34717108629556 377.5887662018681 + vertex -3.9979251828280624 179.4743209966488 345.0887668420272 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.610484794496488e-05 + outer loop + vertex -3.8979484657891326 179.23318336044383 345.0887649824743 + vertex -3.963810010340058 179.3471710862956 345.08876620748975 + vertex -3.897343970363572 179.2331833604438 377.5887649768526 + endloop +endfacet +facet normal 0.865858592143704 0.5002888147376044 -1.610484794496488e-05 + outer loop + vertex -3.9632055149144976 179.34717108629556 377.5887662018681 + vertex -3.897343970363572 179.2331833604438 377.5887649768526 + vertex -3.963810010340058 179.3471710862956 345.08876620748975 + endloop +endfacet +facet normal 0.7068709027842218 0.707342580808025 -1.3147699300041998e-05 + outer loop + vertex -3.804224409169252 179.14012589423575 377.5887632448419 + vertex -3.8048289045948125 179.14012589423578 345.08876325046356 + vertex -3.897343970363572 179.2331833604438 377.5887649768526 + endloop +endfacet +facet normal 0.7068709027842218 0.707342580808025 -1.3147699300041998e-05 + outer loop + vertex -3.8979484657891326 179.23318336044383 345.0887649824743 + vertex -3.897343970363572 179.2331833604438 377.5887649768526 + vertex -3.8048289045948125 179.14012589423578 345.08876325046356 + endloop +endfacet +facet normal 0.49971112955553815 0.866192118938945 -9.294556675349937e-06 + outer loop + vertex -3.6901927755392765 179.07434040020954 377.58876112386963 + vertex -3.690797270964837 179.07434040020956 345.0887611294913 + vertex -3.804224409169252 179.14012589423575 377.5887632448419 + endloop +endfacet +facet normal 0.49971112955553815 0.866192118938945 -9.294556675349937e-06 + outer loop + vertex -3.8048289045948125 179.14012589423578 345.08876325046356 + vertex -3.804224409169252 179.14012589423575 377.5887632448419 + vertex -3.690797270964837 179.07434040020956 345.0887611294913 + endloop +endfacet +facet normal 0.2584968686625305 0.9660120956119286 -4.8080053732734225e-06 + outer loop + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + vertex -3.6901927755392765 179.07434040020954 377.58876112386963 + endloop +endfacet +facet normal 0.2584968686625305 0.9660120956119286 -4.8080053732734225e-06 + outer loop + vertex -3.690797270964837 179.07434040020956 345.0887611294913 + vertex -3.6901927755392765 179.07434040020954 377.58876112386963 + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + endloop +endfacet +facet normal -1.859986199221425e-05 0.9999999998270226 3.459555756001326e-10 + outer loop + vertex -3.4973540740639915 179.0403112724467 377.5887575370969 + vertex -3.4979585694895516 179.04031127244673 345.08875754271855 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + endloop +endfacet +facet normal -1.859986199221425e-05 0.9999999998270226 3.459555756001326e-10 + outer loop + vertex -3.563624632285218 179.04031005106702 345.0887587640981 + vertex -3.5630201368596572 179.040310051067 377.5887587584764 + vertex -3.4979585694895516 179.04031127244673 345.08875754271855 + endloop +endfacet +facet normal -1.859985923559171e-05 0.9999999998270226 3.459555243273413e-10 + outer loop + vertex 7.502645922130445 179.0405158708983 377.5885529386452 + vertex 7.502041426704885 179.04051587089833 345.08855294426684 + vertex -3.4973540740639915 179.0403112724467 377.5887575370969 + endloop +endfacet +facet normal -1.859985923559171e-05 0.9999999998270226 3.459555243273413e-10 + outer loop + vertex -3.4979585694895516 179.04031127244673 345.08875754271855 + vertex -3.4973540740639915 179.0403112724467 377.5887575370969 + vertex 7.502041426704885 179.04051587089833 345.08855294426684 + endloop +endfacet +facet normal -1.8599857829209958e-05 0.9999999998270226 3.459554981688387e-10 + outer loop + vertex 7.566437711850807 179.04051705741654 377.5885517521269 + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex 7.502645922130445 179.0405158708983 377.5885529386452 + endloop +endfacet +facet normal -1.8599857829209958e-05 0.9999999998270226 3.459554981688387e-10 + outer loop + vertex 7.502041426704885 179.04051587089833 345.08855294426684 + vertex 7.502645922130445 179.0405158708983 377.5885529386452 + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + endloop +endfacet +facet normal -0.25496964087551244 0.9669490587457654 4.742399434357767e-06 + outer loop + vertex 7.693672957852187 179.07406704094203 377.5885493855692 + vertex 7.693068462426626 179.07406704094205 345.0885493911909 + vertex 7.566437711850807 179.04051705741654 377.5885517521269 + endloop +endfacet +facet normal -0.25496964087551244 0.9669490587457654 4.742399434357767e-06 + outer loop + vertex 7.565833216425247 179.04051705741657 345.0885517577485 + vertex 7.566437711850807 179.04051705741654 377.5885517521269 + vertex 7.693068462426626 179.07406704094205 345.0885493911909 + endloop +endfacet +facet normal -0.4965465930448009 0.8680100695558219 9.235696742973609e-06 + outer loop + vertex 7.807889393281262 179.13940474137982 377.5885472611596 + vertex 7.807284897855701 179.13940474137985 345.0885472667813 + vertex 7.693672957852187 179.07406704094203 377.5885493855692 + endloop +endfacet +facet normal -0.4965465930448009 0.8680100695558219 9.235696742973609e-06 + outer loop + vertex 7.693068462426626 179.07406704094205 345.0885493911909 + vertex 7.693672957852187 179.07406704094203 377.5885493855692 + vertex 7.807284897855701 179.13940474137985 345.0885472667813 + endloop +endfacet +facet normal -0.7042847154822498 0.709917628578476 1.3099596581305747e-05 + outer loop + vertex 7.9013033568152276 179.23207750242128 377.588545523673 + vertex 7.900698861389667 179.23207750242128 345.0885455292947 + vertex 7.807889393281262 179.13940474137982 377.5885472611596 + endloop +endfacet +facet normal -0.7042847154822498 0.709917628578476 1.3099596581305747e-05 + outer loop + vertex 7.807284897855701 179.13940474137985 345.0885472667813 + vertex 7.807889393281262 179.13940474137982 377.5885472611596 + vertex 7.900698861389667 179.23207750242128 345.0885455292947 + endloop +endfacet +facet normal -0.8640269984419703 0.5034454744111715 1.607078056067048e-05 + outer loop + vertex 7.9669443457878275 179.3457698285498 345.088544297138 + vertex 7.900698861389667 179.23207750242128 345.0885455292947 + vertex 7.967548841213389 179.34576982854978 377.5885442915163 + endloop +endfacet +facet normal -0.8640269984419703 0.5034454744111715 1.607078056067048e-05 + outer loop + vertex 7.9013033568152276 179.23207750242128 377.588545523673 + vertex 7.967548841213389 179.34576982854978 377.5885442915163 + vertex 7.900698861389667 179.23207750242128 345.0885455292947 + endloop +endfacet +facet normal -0.9648872693327225 0.2626643431407393 1.7946767403096795e-05 + outer loop + vertex 8.001506830763631 179.4727337756255 345.0885436542806 + vertex 7.9669443457878275 179.3457698285498 345.088544297138 + vertex 8.002111326189192 179.47273377562547 377.58854364865897 + endloop +endfacet +facet normal -0.9648872693327225 0.2626643431407393 1.7946767403096795e-05 + outer loop + vertex 7.967548841213389 179.34576982854978 377.5885442915163 + vertex 8.002111326189192 179.47273377562547 377.58854364865897 + vertex 7.9669443457878275 179.3457698285498 345.088544297138 + endloop +endfacet +facet normal -0.9999999495333091 0.00031715520572741504 1.859985831256183e-05 + outer loop + vertex 8.002004217793587 181.04101011492224 345.08854364502935 + vertex 8.001506830763631 179.4727337756255 345.0885436542806 + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + endloop +endfacet +facet normal -0.9999999495333091 0.00031715520572741504 1.859985831256183e-05 + outer loop + vertex 8.002111326189192 179.47273377562547 377.58854364865897 + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + vertex 8.001506830763631 179.4727337756255 345.0885436542806 + endloop +endfacet +facet normal 1.8599859303956322e-05 -0.9999999998270226 -3.4595552559891354e-10 + outer loop + vertex 8.002004217793587 181.04101011492224 345.08854364502935 + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + vertex 6.5020488609965295 181.04098221596362 345.0885715439878 + endloop +endfacet +facet normal 1.8599859303956322e-05 -0.9999999998270226 -3.4595552559891354e-10 + outer loop + vertex 6.5026533564220905 181.0409822159636 377.5885715383662 + vertex 6.5020488609965295 181.04098221596362 345.0885715439878 + vertex 8.002608713219148 181.04101011492222 377.58854363940765 + endloop +endfacet +facet normal -0.999999997827213 -6.324254340242607e-05 1.8599859210821353e-05 + outer loop + vertex 6.501985618453139 182.04098221396393 345.08857154516414 + vertex 6.5020488609965295 181.04098221596362 345.0885715439878 + vertex 6.502590113878699 182.0409822139639 377.58857153954244 + endloop +endfacet +facet normal -0.999999997827213 -6.324254340242607e-05 1.8599859210821353e-05 + outer loop + vertex 6.5026533564220905 181.0409822159636 377.5885715383662 + vertex 6.502590113878699 182.0409822139639 377.58857153954244 + vertex 6.5020488609965295 181.04098221596362 345.0885715439878 + endloop +endfacet +facet normal -6.324254316674298e-05 0.9999999980001905 1.1763031620441208e-09 + outer loop + vertex 8.002590112114401 182.04107707777877 377.5885436397536 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + vertex 6.502590113878699 182.0409822139639 377.58857153954244 + endloop +endfacet +facet normal -6.324254316674298e-05 0.9999999980001905 1.1763031620441208e-09 + outer loop + vertex 6.501985618453139 182.04098221396393 345.08857154516414 + vertex 6.502590113878699 182.0409822139639 377.58857153954244 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792854e-05 1.859985924480163e-05 + outer loop + vertex 8.001948416970317 184.04107707942603 345.0885436460672 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + vertex 8.002552912395876 184.041077079426 377.58854364044555 + endloop +endfacet +facet normal -0.9999999996540453 -1.8599859246792854e-05 1.859985924480163e-05 + outer loop + vertex 8.002590112114401 182.04107707777877 377.5885436397536 + vertex 8.002552912395876 184.041077079426 377.58854364044555 + vertex 8.00198561668884 182.0410770777788 345.0885436453753 + endloop +endfacet +facet normal -1.85998592197347e-05 0.9999999998270226 3.4595554154323375e-10 + outer loop + vertex -3.997364595200043 184.04085388264912 377.5887668372222 + vertex -3.9979690906256034 184.04085388264915 345.0887668428439 + vertex -11.498352285242461 184.040714365334 377.58890635453747 + endloop +endfacet +facet normal -1.85998592197347e-05 0.9999999998270226 3.4595554154323375e-10 + outer loop + vertex -11.498956780668024 184.04071436533403 345.08890636015917 + vertex -11.498352285242461 184.040714365334 377.58890635453747 + vertex -3.9979690906256034 184.04085388264915 345.0887668428439 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 3.455069140308196 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 7.440958668144235 185.25206274411778 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 7.440958668144235 185.25206274411778 -62.60000000000005 + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + vertex 9.921094544092673 185.09754406618026 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.440958668144235 185.25206274411778 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 7.0550691403082455 185.41190342012518 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.0550691403082455 185.41190342012518 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 6.723698290409774 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.723698290409774 185.6661732162818 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 6.469428494253137 185.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.469428494253137 185.9975440661803 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 6.309587818245743 186.38343359401625 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.309587818245743 186.38343359401625 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 5.655069140308249 186.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.309587818245743 186.38343359401625 -62.60000000000005 + vertex 5.655069140308249 186.39754406618027 -62.60000000000005 + vertex 6.255069140308248 186.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.255069140308248 186.79754406618028 -62.60000000000005 + vertex 5.655069140308249 186.39754406618027 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.255069140308248 186.79754406618028 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 6.309587818245721 187.21165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.309587818245721 187.21165453834433 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 6.469428494253139 187.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.469428494253139 187.5975440661803 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 6.723698290409754 187.92891491607875 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.723698290409754 187.92891491607875 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 7.055069140308225 188.1831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.055069140308225 188.1831847122354 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 7.440958668144192 188.3430253882428 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.440958668144192 188.3430253882428 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.144930859691763 186.7975440661803 -62.60000000000005 + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + vertex -6.199449537629252 186.38343359401625 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + vertex -6.144930859691763 186.7975440661803 -62.60000000000005 + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -6.144930859691763 186.7975440661803 -62.60000000000005 + vertex -6.199449537629255 187.21165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -6.199449537629255 187.21165453834433 -62.60000000000005 + vertex -6.359290213636666 187.59754406618032 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -6.359290213636666 187.59754406618032 -62.60000000000005 + vertex -6.613560009793298 187.92891491607878 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -6.613560009793298 187.92891491607878 -62.60000000000005 + vertex -6.944930859691778 188.1831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -6.944930859691778 188.1831847122354 -62.60000000000005 + vertex -7.330820387527747 188.3430253882428 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -7.330820387527747 188.3430253882428 -62.60000000000005 + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.203749904794295 184.63161823989122 -62.60000000000005 + vertex -3.7449308596917725 184.59754406618026 -62.60000000000005 + vertex -8.944930859691771 184.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.7449308596917725 184.59754406618026 -62.60000000000005 + vertex -9.203749904794295 184.63161823989122 -62.60000000000005 + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + vertex -9.203749904794295 184.63161823989122 -62.60000000000005 + vertex -9.444930859691773 184.73151866239584 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + vertex -9.444930859691773 184.73151866239584 -62.600000000000065 + vertex -9.652037640878321 184.89043728499374 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + vertex -9.652037640878321 184.89043728499374 -62.600000000000065 + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + vertex -7.330820387527722 185.25206274411778 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -7.330820387527722 185.25206274411778 -62.60000000000005 + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + vertex -7.330820387527722 185.25206274411778 -62.60000000000005 + vertex -6.944930859691755 185.41190342012518 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + vertex -6.944930859691755 185.41190342012518 -62.60000000000005 + vertex -6.613560009793279 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + vertex -6.613560009793279 185.6661732162818 -62.60000000000005 + vertex -6.359290213636655 185.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + vertex -6.359290213636655 185.9975440661803 -62.60000000000005 + vertex -6.199449537629252 186.38343359401625 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + vertex -6.199449537629252 186.38343359401625 -62.60000000000005 + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.944930859691766 198.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.910856685980832 203.8563631112828 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + vertex -9.910856685980832 203.8563631112828 -62.600000000000044 + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + vertex -9.910856685980832 203.8563631112828 -62.600000000000044 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -3.744930859691761 204.1975440661803 -62.60000000000005 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.744930859691761 204.1975440661803 -62.60000000000005 + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -9.444930859691762 204.46356946996474 -62.60000000000002 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + vertex -9.444930859691762 204.46356946996474 -62.60000000000002 + vertex -9.203749904794282 204.56346989246933 -62.60000000000002 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + vertex -9.203749904794282 204.56346989246933 -62.60000000000002 + vertex -8.94493085969176 204.5975440661803 -62.60000000000002 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -3.344930859691773 202.79754406618025 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691773 202.79754406618025 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + vertex -3.744930859691761 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.189383715358996 190.89754406618025 -62.60000000000005 + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + vertex 3.189383715358996 190.89754406618025 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 3.189383715358996 190.89754406618025 -62.60000000000005 + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex 0.055069140308233296 191.89754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 0.055069140308233296 191.89754406618027 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex -0.6437422814685734 191.98954433519978 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -0.6437422814685734 191.98954433519978 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex -1.294930859691767 192.2592754759623 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -1.294930859691767 192.2592754759623 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex -1.854119168895446 192.6883557569766 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -1.854119168895446 192.6883557569766 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex -2.2831994499097514 193.24754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -2.2831994499097514 193.24754406618027 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex -2.552930590672251 193.89873264440348 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -2.552930590672251 193.89873264440348 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -2.552930590672251 193.89873264440348 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -2.644930859691766 194.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -2.644930859691766 194.59754406618026 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -2.5529305906722497 195.2963554879571 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -2.5529305906722497 195.2963554879571 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -2.28319944990975 195.94754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -2.28319944990975 195.94754406618028 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -1.8541191688954417 196.50673237538396 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -1.8541191688954417 196.50673237538396 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -1.2949308596917628 196.93581265639824 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -1.2949308596917628 196.93581265639824 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -0.6437422814685692 197.20554379716077 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -0.6437422814685692 197.20554379716077 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex 0.05506914030823612 197.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 9.055069140308234 184.59754406618026 -62.600000000000044 + vertex 3.855069140308194 184.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.055069140308234 184.59754406618026 -62.600000000000044 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 9.313888185410756 184.6316182398912 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.313888185410756 184.6316182398912 -62.600000000000044 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 9.555069140308234 184.73151866239584 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.555069140308234 184.73151866239584 -62.600000000000044 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 9.762175921494782 184.8904372849937 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.762175921494782 184.8904372849937 -62.600000000000044 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 9.921094544092673 185.09754406618026 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + vertex -8.159041331855791 185.25206274411775 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.159041331855791 185.25206274411775 -62.60000000000005 + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + vertex -8.54493085969176 185.41190342012518 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.54493085969176 185.41190342012518 -62.60000000000005 + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.54493085969176 185.41190342012518 -62.60000000000005 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + vertex -8.87630170959024 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.87630170959024 185.6661732162818 -62.60000000000005 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + vertex -9.130571505746875 185.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.130571505746875 185.99754406618027 -62.60000000000005 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + vertex -9.290412181754286 186.38343359401622 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.290412181754286 186.38343359401622 -62.60000000000005 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.290412181754286 186.38343359401622 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.344930859691782 186.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.344930859691782 186.79754406618028 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.290412181754292 187.2116545383443 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.290412181754292 187.2116545383443 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.130571505746886 187.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.130571505746886 187.5975440661803 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -8.87630170959026 187.92891491607875 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.87630170959026 187.92891491607875 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -8.544930859691787 188.1831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.544930859691787 188.1831847122354 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -8.159041331855816 188.34302538824278 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.159041331855816 188.34302538824278 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.544930859691773 190.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -9.544930859691773 190.79754406618028 -62.60000000000005 + vertex -8.14493085969177 191.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.14493085969177 191.19754406618028 -62.60000000000005 + vertex -9.544930859691773 190.79754406618028 -62.60000000000005 + vertex -9.544930859691773 191.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 2.6630688712887207 193.89873264440348 -62.60000000000005 + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 2.6630688712887207 193.89873264440348 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 2.39333773052622 193.24754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 2.39333773052622 193.24754406618027 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 1.9642574495119138 192.6883557569766 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 1.9642574495119138 192.6883557569766 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 1.4050691403082352 192.2592754759623 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 1.4050691403082352 192.2592754759623 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 0.75388056208504 191.98954433519978 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 0.75388056208504 191.98954433519978 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 0.055069140308233296 191.89754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 2.6630688712887207 193.89873264440348 -62.60000000000005 + vertex 2.755069140308237 194.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 2.755069140308237 194.59754406618026 -62.60000000000005 + vertex 2.663068871288722 195.29635548795707 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 2.663068871288722 195.29635548795707 -62.60000000000005 + vertex 2.393337730526221 195.94754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 2.393337730526221 195.94754406618028 -62.60000000000005 + vertex 1.964257449511918 196.50673237538396 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 1.964257449511918 196.50673237538396 -62.60000000000005 + vertex 1.4050691403082394 196.93581265639824 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 1.4050691403082394 196.93581265639824 -62.60000000000005 + vertex 0.7538805620850456 197.20554379716077 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 0.7538805620850456 197.20554379716077 -62.60000000000005 + vertex 0.05506914030823612 197.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 0.05506914030823612 197.29754406618028 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -9.544930859691767 197.99754406618032 -62.60000000000005 + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + vertex -8.144930859691767 197.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + vertex -9.544930859691767 197.99754406618032 -62.60000000000005 + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex 3.1893837153589675 198.29754406618028 -62.60000000000005 + vertex 6.220754565257503 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.1893837153589675 198.29754406618028 -62.60000000000005 + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.220754565257503 200.19754406618028 -62.60000000000005 + vertex 3.1893837153589675 198.29754406618028 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.220754565257503 200.19754406618028 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 3.4550691403082383 202.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 6.309587818245718 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.309587818245718 202.81165453834433 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 6.469428494253122 203.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.469428494253122 203.19754406618028 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 6.723698290409745 203.52891491607878 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.723698290409745 203.52891491607878 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 7.0550691403082215 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.0550691403082215 203.7831847122354 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 7.440958668144188 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.440958668144188 203.94302538824277 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 7.855069140308223 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.855069140308223 203.9975440661803 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 3.8550691403082737 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + vertex 3.8550691403082737 204.1975440661803 -62.60000000000005 + vertex 9.76217592149479 204.30465084736684 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.76217592149479 204.30465084736684 -62.600000000000065 + vertex 3.8550691403082737 204.1975440661803 -62.60000000000005 + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.76217592149479 204.30465084736684 -62.600000000000065 + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 9.555069140308243 204.46356946996474 -62.60000000000008 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.555069140308243 204.46356946996474 -62.60000000000008 + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 9.313888185410763 204.56346989246933 -62.60000000000008 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.313888185410763 204.56346989246933 -62.60000000000008 + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 9.055069140308243 204.5975440661803 -62.60000000000008 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.255069140308237 197.9975440661803 -62.60000000000005 + vertex 9.655069140308253 198.39754406618027 -62.60000000000005 + vertex 9.655069140308251 197.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.655069140308253 198.39754406618027 -62.60000000000005 + vertex 8.255069140308237 197.9975440661803 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.655069140308253 198.39754406618027 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 9.240709786363354 201.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + vertex 9.240709786363354 201.5975440661803 -62.60000000000005 + vertex 9.40055046237076 201.98343359401628 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + vertex 9.40055046237076 201.98343359401628 -62.60000000000005 + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.240709786363354 201.5975440661803 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 8.98643999020673 201.2661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.98643999020673 201.2661732162818 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 8.655069140308255 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.655069140308255 201.01190342012518 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 8.269179612472286 200.85206274411777 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.269179612472286 200.85206274411777 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 7.855069140308252 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.855069140308252 200.79754406618028 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 9.40055046237076 201.98343359401628 -62.60000000000005 + vertex 9.455069140308245 202.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 9.455069140308245 202.3975440661803 -62.60000000000005 + vertex 9.40055046237075 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 9.40055046237075 202.81165453834433 -62.60000000000005 + vertex 9.24070978636334 203.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 9.24070978636334 203.1975440661803 -62.60000000000005 + vertex 8.986439990206707 203.52891491607878 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 8.986439990206707 203.52891491607878 -62.60000000000005 + vertex 8.655069140308228 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 8.655069140308228 203.7831847122354 -62.60000000000005 + vertex 10.02099496659731 203.8563631112828 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.02099496659731 203.8563631112828 -62.60000000000005 + vertex 8.655069140308228 203.7831847122354 -62.60000000000005 + vertex 8.269179612472257 203.94302538824283 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.02099496659731 203.8563631112828 -62.60000000000005 + vertex 8.269179612472257 203.94302538824283 -62.60000000000005 + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + vertex 8.269179612472257 203.94302538824283 -62.60000000000005 + vertex 7.855069140308223 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + vertex 7.440958668144216 200.85206274411775 -62.60000000000005 + vertex 7.855069140308252 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.440958668144216 200.85206274411775 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + vertex 7.0550691403082455 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.0550691403082455 201.01190342012518 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + vertex 6.723698290409766 201.2661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.723698290409766 201.2661732162818 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + vertex 6.469428494253134 201.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.469428494253134 201.59754406618026 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.469428494253134 201.59754406618026 -62.60000000000005 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 6.309587818245723 201.98343359401622 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.309587818245723 201.98343359401622 -62.60000000000005 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 6.255069140308228 202.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 6.255069140308228 202.39754406618027 -62.60000000000005 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 6.309587818245718 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -6.1106162846410355 188.9975440661803 -62.60000000000005 + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -6.1106162846410355 188.9975440661803 -62.60000000000005 + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + vertex -6.1106162846410355 188.9975440661803 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.255069140308246 191.19754406618026 -62.60000000000005 + vertex 9.65506914030822 190.79754406618022 -62.60000000000005 + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 9.65506914030822 190.79754406618022 -62.60000000000005 + vertex 8.255069140308246 191.19754406618026 -62.60000000000005 + vertex 9.655069140308221 191.19754406618023 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + vertex 9.921094544092673 185.09754406618026 -62.600000000000044 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + vertex 8.2691796124723 185.25206274411778 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + vertex 8.2691796124723 185.25206274411778 -62.60000000000005 + vertex 8.655069140308266 185.4119034201252 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + vertex 8.655069140308266 185.4119034201252 -62.60000000000005 + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + vertex 8.655069140308266 185.4119034201252 -62.60000000000005 + vertex 8.986439990206739 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + vertex 8.986439990206739 185.6661732162818 -62.60000000000005 + vertex 9.240709786363354 185.99754406618032 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + vertex 9.240709786363354 185.99754406618032 -62.60000000000005 + vertex 9.40055046237077 186.38343359401628 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + vertex 9.40055046237077 186.38343359401628 -62.60000000000005 + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 9.40055046237077 186.38343359401628 -62.60000000000005 + vertex 9.455069140308243 186.7975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 9.455069140308243 186.7975440661803 -62.60000000000005 + vertex 9.400550462370747 187.21165453834433 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 9.400550462370747 187.21165453834433 -62.60000000000005 + vertex 9.240709786363354 187.59754406618032 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 9.240709786363354 187.59754406618032 -62.60000000000005 + vertex 8.986439990206716 187.92891491607878 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 8.986439990206716 187.92891491607878 -62.60000000000005 + vertex 8.655069140308244 188.18318471223543 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 8.655069140308244 188.18318471223543 -62.60000000000005 + vertex 8.269179612472279 188.3430253882428 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 8.269179612472279 188.3430253882428 -62.60000000000005 + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -3.3533729404294705e-19 2.2196452394793015e-19 -1.0 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + vertex 9.65506914030822 190.79754406618022 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex 3.855069140308194 184.59754406618026 617.3999999999999 + vertex 9.055069140308234 184.59754406618026 -62.600000000000044 + vertex 9.055069140308234 184.59754406618026 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex 9.055069140308234 184.59754406618026 -62.600000000000044 + vertex 3.855069140308194 184.59754406618026 617.3999999999999 + vertex 3.855069140308194 184.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222007258 -0.9914448613738076 -1.6369160198769266e-16 + outer loop + vertex 9.055069140308234 184.59754406618026 617.3999999999999 + vertex 9.313888185410756 184.6316182398912 -62.600000000000044 + vertex 9.313888185410756 184.6316182398912 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222007258 -0.9914448613738076 -1.6369160198769266e-16 + outer loop + vertex 9.313888185410756 184.6316182398912 -62.600000000000044 + vertex 9.055069140308234 184.59754406618026 617.3999999999999 + vertex 9.055069140308234 184.59754406618026 -62.600000000000044 + endloop +endfacet +facet normal -4.153941706314073e-15 -1.0 -1.3771336778111572e-16 + outer loop + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + vertex 3.189383715358996 190.89754406618025 -62.60000000000005 + vertex 3.189383715358996 190.89754406618025 617.3999999999999 + endloop +endfacet +facet normal -4.153941706314073e-15 -1.0 -1.3771336778111572e-16 + outer loop + vertex 3.189383715358996 190.89754406618025 -62.60000000000005 + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323650818 -0.9238795325112902 -2.0684907214262692e-16 + outer loop + vertex 9.313888185410756 184.6316182398912 617.3999999999999 + vertex 9.555069140308234 184.73151866239584 -62.600000000000044 + vertex 9.555069140308234 184.73151866239584 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650818 -0.9238795325112902 -2.0684907214262692e-16 + outer loop + vertex 9.555069140308234 184.73151866239584 -62.600000000000044 + vertex 9.313888185410756 184.6316182398912 617.3999999999999 + vertex 9.313888185410756 184.6316182398912 -62.600000000000044 + endloop +endfacet +facet normal 0.6087614290087039 -0.7933533402912479 -2.3591011986529993e-16 + outer loop + vertex 9.555069140308234 184.73151866239584 617.3999999999999 + vertex 9.762175921494782 184.8904372849937 -62.600000000000044 + vertex 9.762175921494782 184.8904372849937 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087039 -0.7933533402912479 -2.3591011986529993e-16 + outer loop + vertex 9.762175921494782 184.8904372849937 -62.600000000000044 + vertex 9.555069140308234 184.73151866239584 617.3999999999999 + vertex 9.555069140308234 184.73151866239584 -62.600000000000044 + endloop +endfacet +facet normal -1.0 6.169307489110241e-16 2.080531937439538e-16 + outer loop + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 8.255069140308246 191.19754406618026 -62.60000000000005 + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -1.0 6.169307489110241e-16 2.080531937439538e-16 + outer loop + vertex 8.255069140308246 191.19754406618026 -62.60000000000005 + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 8.255069140308246 191.19754406618026 617.3999999999999 + endloop +endfacet +facet normal -1.0 6.0645932720149255e-15 2.0805319374395453e-16 + outer loop + vertex 3.855069140308194 184.59754406618026 -62.60000000000005 + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -1.0 6.0645932720149255e-15 2.0805319374395453e-16 + outer loop + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + vertex 3.855069140308194 184.59754406618026 -62.60000000000005 + vertex 3.855069140308194 184.59754406618026 617.3999999999999 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 5.655069140308249 186.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -5.544930859691772 186.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.377133677811165e-16 + outer loop + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 8.255069140308246 188.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.377133677811165e-16 + outer loop + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + vertex 6.220754565257486 188.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + vertex 5.655069140308249 186.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -3.7449308596917725 184.59754406618026 -62.60000000000005 + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -3.7449308596917725 184.59754406618026 -62.60000000000005 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -3.7449308596917725 184.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112916 -0.3826834323650782 -2.449167116386772e-16 + outer loop + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + vertex 9.921094544092673 185.09754406618026 -62.600000000000044 + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + endloop +endfacet +facet normal 0.9238795325112916 -0.3826834323650782 -2.449167116386772e-16 + outer loop + vertex 9.921094544092673 185.09754406618026 -62.600000000000044 + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + endloop +endfacet +facet normal 0.7071067811865512 0.7071067811865439 -4.973776792580495e-17 + outer loop + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + endloop +endfacet +facet normal 0.7071067811865512 0.7071067811865439 -4.973776792580495e-17 + outer loop + vertex 6.220754565257486 188.99754406618027 -62.60000000000005 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 6.220754565257486 188.99754406618027 617.3999999999999 + endloop +endfacet +facet normal -0.707106781186548 -0.707106781186547 4.973776792580383e-17 + outer loop + vertex 3.189383715358996 190.89754406618025 617.3999999999999 + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + endloop +endfacet +facet normal -0.707106781186548 -0.707106781186547 4.973776792580383e-17 + outer loop + vertex 5.6550691403082505 188.431858641231 -62.60000000000005 + vertex 3.189383715358996 190.89754406618025 617.3999999999999 + vertex 3.189383715358996 190.89754406618025 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 9.65506914030822 190.79754406618022 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 9.65506914030822 190.79754406618022 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + vertex 9.65506914030822 190.79754406618022 -62.60000000000005 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -3.344930859691773 184.99754406618027 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -3.7449308596917725 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal 1.6669205698300858e-14 1.0 1.3771336778111316e-16 + outer loop + vertex 8.255069140308246 191.19754406618026 -62.60000000000005 + vertex 9.655069140308221 191.19754406618023 617.3999999999999 + vertex 9.655069140308221 191.19754406618023 -62.60000000000005 + endloop +endfacet +facet normal 1.6669205698300858e-14 1.0 1.3771336778111316e-16 + outer loop + vertex 9.655069140308221 191.19754406618023 617.3999999999999 + vertex 8.255069140308246 191.19754406618026 -62.60000000000005 + vertex 8.255069140308246 191.19754406618026 617.3999999999999 + endloop +endfacet +facet normal 0.7071067811865451 -0.70710678118655 -2.444938803619327e-16 + outer loop + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.7071067811865451 -0.70710678118655 -2.444938803619327e-16 + outer loop + vertex -3.079245434742501 190.89754406618027 -62.60000000000005 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 -62.60000000000005 + endloop +endfacet +facet normal -0.130526192220074 -0.9914448613738076 -1.0937881967044573e-16 + outer loop + vertex -9.203749904794295 184.63161823989122 617.3999999999999 + vertex -8.944930859691771 184.5975440661803 -62.60000000000005 + vertex -8.944930859691771 184.5975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.130526192220074 -0.9914448613738076 -1.0937881967044573e-16 + outer loop + vertex -8.944930859691771 184.5975440661803 -62.60000000000005 + vertex -9.203749904794295 184.63161823989122 617.3999999999999 + vertex -9.203749904794295 184.63161823989122 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650828 -0.9238795325112898 -4.761205154971957e-17 + outer loop + vertex -9.444930859691773 184.73151866239584 617.3999999999999 + vertex -9.203749904794295 184.63161823989122 -62.60000000000005 + vertex -9.203749904794295 184.63161823989122 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650828 -0.9238795325112898 -4.761205154971957e-17 + outer loop + vertex -9.203749904794295 184.63161823989122 -62.60000000000005 + vertex -9.444930859691773 184.73151866239584 617.3999999999999 + vertex -9.444930859691773 184.73151866239584 -62.600000000000065 + endloop +endfacet +facet normal 1.0 2.601634853062814e-15 -2.0805319374395335e-16 + outer loop + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + vertex 10.05506914030822 190.79754406618022 -62.60000000000005 + endloop +endfacet +facet normal 1.0 2.601634853062814e-15 -2.0805319374395335e-16 + outer loop + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex 3.855069140308196 184.99754406618027 -62.60000000000005 + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 3.455069140308196 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738098 -0.1305261922200571 -2.2424847134412203e-16 + outer loop + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + vertex 10.055069140308234 185.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738098 -0.1305261922200571 -2.2424847134412203e-16 + outer loop + vertex 10.020994966597302 185.33872502107775 -62.600000000000044 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -3.344930859691773 184.99754406618027 -62.60000000000005 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -3.344930859691773 184.99754406618027 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087049 -0.7933533402912473 1.7399399201488312e-17 + outer loop + vertex -9.652037640878321 184.89043728499374 617.3999999999999 + vertex -9.444930859691773 184.73151866239584 -62.600000000000065 + vertex -9.444930859691773 184.73151866239584 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087049 -0.7933533402912473 1.7399399201488312e-17 + outer loop + vertex -9.444930859691773 184.73151866239584 -62.600000000000065 + vertex -9.652037640878321 184.89043728499374 617.3999999999999 + vertex -9.652037640878321 184.89043728499374 -62.600000000000065 + endloop +endfacet +facet normal -0.7933533402912366 -0.6087614290087189 8.122510965098966e-17 + outer loop + vertex -9.652037640878321 184.89043728499374 -62.600000000000065 + vertex -9.810956263476214 185.0975440661803 617.3999999999999 + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + endloop +endfacet +facet normal -0.7933533402912366 -0.6087614290087189 8.122510965098966e-17 + outer loop + vertex -9.810956263476214 185.0975440661803 617.3999999999999 + vertex -9.652037640878321 184.89043728499374 -62.600000000000065 + vertex -9.652037640878321 184.89043728499374 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912388 -0.608761429008716 -2.4889428277906133e-16 + outer loop + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + vertex 9.762175921494782 184.8904372849937 -62.600000000000044 + vertex 9.921094544092673 185.09754406618026 -62.600000000000044 + endloop +endfacet +facet normal 0.7933533402912388 -0.608761429008716 -2.4889428277906133e-16 + outer loop + vertex 9.762175921494782 184.8904372849937 -62.600000000000044 + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + vertex 9.762175921494782 184.8904372849937 617.3999999999999 + endloop +endfacet +facet normal -1.0 4.1062391582207636e-14 2.0805319374395931e-16 + outer loop + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 3.455069140308196 184.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal -1.0 4.1062391582207636e-14 2.0805319374395931e-16 + outer loop + vertex 3.455069140308254 186.39754406618027 -62.60000000000005 + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 1.0 -5.844283390565871e-15 -2.0805319374395448e-16 + outer loop + vertex 9.655069140308221 191.19754406618023 617.3999999999999 + vertex 9.65506914030822 190.79754406618022 -62.60000000000005 + vertex 9.655069140308221 191.19754406618023 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -5.844283390565871e-15 -2.0805319374395448e-16 + outer loop + vertex 9.65506914030822 190.79754406618022 -62.60000000000005 + vertex 9.655069140308221 191.19754406618023 617.3999999999999 + vertex 9.65506914030822 190.79754406618022 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.377133677811165e-16 + outer loop + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.377133677811165e-16 + outer loop + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -5.544930859691772 186.3975440661803 -62.60000000000005 + vertex -5.544930859691772 186.3975440661803 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex -8.944930859691771 184.5975440661803 617.3999999999999 + vertex -3.7449308596917725 184.59754406618026 -62.60000000000005 + vertex -3.7449308596917725 184.59754406618026 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex -3.7449308596917725 184.59754406618026 -62.60000000000005 + vertex -8.944930859691771 184.5975440661803 617.3999999999999 + vertex -8.944930859691771 184.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006134 0.9914448613738092 1.6369160198769052e-16 + outer loop + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + vertex -7.330820387527722 185.25206274411778 617.3999999999999 + vertex -7.330820387527722 185.25206274411778 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006134 0.9914448613738092 1.6369160198769052e-16 + outer loop + vertex -7.330820387527722 185.25206274411778 617.3999999999999 + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738104 -0.13052619222005143 1.8829806831558401e-16 + outer loop + vertex 2.755069140308237 194.59754406618026 617.3999999999999 + vertex 2.663068871288722 195.29635548795707 -62.60000000000005 + vertex 2.755069140308237 194.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738104 -0.13052619222005143 1.8829806831558401e-16 + outer loop + vertex 2.663068871288722 195.29635548795707 -62.60000000000005 + vertex 2.755069140308237 194.59754406618026 617.3999999999999 + vertex 2.663068871288722 195.29635548795707 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087033 0.7933533402912485 2.359101198652999e-16 + outer loop + vertex 1.4050691403082352 192.2592754759623 -62.60000000000005 + vertex 1.9642574495119138 192.6883557569766 617.3999999999999 + vertex 1.9642574495119138 192.6883557569766 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087033 0.7933533402912485 2.359101198652999e-16 + outer loop + vertex 1.9642574495119138 192.6883557569766 617.3999999999999 + vertex 1.4050691403082352 192.2592754759623 -62.60000000000005 + vertex 1.4050691403082352 192.2592754759623 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112903 -0.38268343236508096 1.3951546310861238e-16 + outer loop + vertex 2.663068871288722 195.29635548795707 617.3999999999999 + vertex 2.393337730526221 195.94754406618028 -62.60000000000005 + vertex 2.663068871288722 195.29635548795707 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112903 -0.38268343236508096 1.3951546310861238e-16 + outer loop + vertex 2.393337730526221 195.94754406618028 -62.60000000000005 + vertex 2.663068871288722 195.29635548795707 617.3999999999999 + vertex 2.393337730526221 195.94754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112912 -0.382683432365079 1.3951546310861282e-16 + outer loop + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + endloop +endfacet +facet normal -0.9238795325112912 -0.382683432365079 1.3951546310861282e-16 + outer loop + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + vertex -9.810956263476214 185.0975440661803 -62.600000000000065 + vertex -9.810956263476214 185.0975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222004488 -0.9914448613738114 -1.0937881967045231e-16 + outer loop + vertex 0.05506914030823612 197.29754406618028 617.3999999999999 + vertex 0.7538805620850456 197.20554379716077 -62.60000000000005 + vertex 0.7538805620850456 197.20554379716077 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222004488 -0.9914448613738114 -1.0937881967045231e-16 + outer loop + vertex 0.7538805620850456 197.20554379716077 -62.60000000000005 + vertex 0.05506914030823612 197.29754406618028 617.3999999999999 + vertex 0.05506914030823612 197.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087033 -0.7933533402912485 -2.359101198652999e-16 + outer loop + vertex -1.8541191688954417 196.50673237538396 617.3999999999999 + vertex -1.2949308596917628 196.93581265639824 -62.60000000000005 + vertex -1.2949308596917628 196.93581265639824 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087033 -0.7933533402912485 -2.359101198652999e-16 + outer loop + vertex -1.2949308596917628 196.93581265639824 -62.60000000000005 + vertex -1.8541191688954417 196.50673237538396 617.3999999999999 + vertex -1.8541191688954417 196.50673237538396 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112905 0.3826834323650807 2.4491671163867733e-16 + outer loop + vertex 2.39333773052622 193.24754406618027 617.3999999999999 + vertex 2.6630688712887207 193.89873264440348 -62.60000000000005 + vertex 2.39333773052622 193.24754406618027 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112905 0.3826834323650807 2.4491671163867733e-16 + outer loop + vertex 2.6630688712887207 193.89873264440348 -62.60000000000005 + vertex 2.39333773052622 193.24754406618027 617.3999999999999 + vertex 2.6630688712887207 193.89873264440348 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651019 -0.9238795325112817 -4.761205154971449e-17 + outer loop + vertex 0.7538805620850456 197.20554379716077 617.3999999999999 + vertex 1.4050691403082394 196.93581265639824 -62.60000000000005 + vertex 1.4050691403082394 196.93581265639824 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651019 -0.9238795325112817 -4.761205154971449e-17 + outer loop + vertex 1.4050691403082394 196.93581265639824 -62.60000000000005 + vertex 0.7538805620850456 197.20554379716077 617.3999999999999 + vertex 0.7538805620850456 197.20554379716077 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222004513 0.9914448613738113 1.0937881967045226e-16 + outer loop + vertex -0.6437422814685734 191.98954433519978 -62.60000000000005 + vertex 0.055069140308233296 191.89754406618027 617.3999999999999 + vertex 0.055069140308233296 191.89754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222004513 0.9914448613738113 1.0937881967045226e-16 + outer loop + vertex 0.055069140308233296 191.89754406618027 617.3999999999999 + vertex -0.6437422814685734 191.98954433519978 -62.60000000000005 + vertex -0.6437422814685734 191.98954433519978 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112903 0.38268343236508096 -1.3951546310861238e-16 + outer loop + vertex -2.552930590672251 193.89873264440348 617.3999999999999 + vertex -2.2831994499097514 193.24754406618027 -62.60000000000005 + vertex -2.552930590672251 193.89873264440348 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112903 0.38268343236508096 -1.3951546310861238e-16 + outer loop + vertex -2.2831994499097514 193.24754406618027 -62.60000000000005 + vertex -2.552930590672251 193.89873264440348 617.3999999999999 + vertex -2.2831994499097514 193.24754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651008 -0.9238795325112822 -2.068490721426298e-16 + outer loop + vertex -1.2949308596917628 196.93581265639824 617.3999999999999 + vertex -0.6437422814685692 197.20554379716077 -62.60000000000005 + vertex -0.6437422814685692 197.20554379716077 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651008 -0.9238795325112822 -2.068490721426298e-16 + outer loop + vertex -0.6437422814685692 197.20554379716077 -62.60000000000005 + vertex -1.2949308596917628 196.93581265639824 617.3999999999999 + vertex -1.2949308596917628 196.93581265639824 -62.60000000000005 + endloop +endfacet +facet normal -0.793353340291237 -0.6087614290087182 8.122510965098985e-17 + outer loop + vertex 2.393337730526221 195.94754406618028 617.3999999999999 + vertex 1.964257449511918 196.50673237538396 -62.60000000000005 + vertex 2.393337730526221 195.94754406618028 -62.60000000000005 + endloop +endfacet +facet normal -0.793353340291237 -0.6087614290087182 8.122510965098985e-17 + outer loop + vertex 1.964257449511918 196.50673237538396 -62.60000000000005 + vertex 2.393337730526221 195.94754406618028 617.3999999999999 + vertex 1.964257449511918 196.50673237538396 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738099 0.130526192220055 2.2424847134412173e-16 + outer loop + vertex 2.6630688712887207 193.89873264440348 617.3999999999999 + vertex 2.755069140308237 194.59754406618026 -62.60000000000005 + vertex 2.6630688712887207 193.89873264440348 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738099 0.130526192220055 2.2424847134412173e-16 + outer loop + vertex 2.755069140308237 194.59754406618026 -62.60000000000005 + vertex 2.6630688712887207 193.89873264440348 617.3999999999999 + vertex 2.755069140308237 194.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112859 -0.382683432365092 -2.4491671163867793e-16 + outer loop + vertex -2.28319944990975 195.94754406618028 617.3999999999999 + vertex -2.5529305906722497 195.2963554879571 -62.60000000000005 + vertex -2.28319944990975 195.94754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112859 -0.382683432365092 -2.4491671163867793e-16 + outer loop + vertex -2.5529305906722497 195.2963554879571 -62.60000000000005 + vertex -2.28319944990975 195.94754406618028 617.3999999999999 + vertex -2.5529305906722497 195.2963554879571 617.3999999999999 + endloop +endfacet +facet normal 0.1305261922200094 0.9914448613738162 1.0937881967046036e-16 + outer loop + vertex -8.159041331855791 185.25206274411775 -62.60000000000005 + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + vertex -7.744930859691757 185.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.1305261922200094 0.9914448613738162 1.0937881967046036e-16 + outer loop + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + vertex -8.159041331855791 185.25206274411775 -62.60000000000005 + vertex -8.159041331855791 185.25206274411775 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912362 0.6087614290087194 -8.122510965098949e-17 + outer loop + vertex -2.2831994499097514 193.24754406618027 617.3999999999999 + vertex -1.854119168895446 192.6883557569766 -62.60000000000005 + vertex -2.2831994499097514 193.24754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912362 0.6087614290087194 -8.122510965098949e-17 + outer loop + vertex -1.854119168895446 192.6883557569766 -62.60000000000005 + vertex -2.2831994499097514 193.24754406618027 617.3999999999999 + vertex -1.854119168895446 192.6883557569766 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087043 -0.7933533402912478 1.7399399201488127e-17 + outer loop + vertex 1.4050691403082394 196.93581265639824 617.3999999999999 + vertex 1.964257449511918 196.50673237538396 -62.60000000000005 + vertex 1.964257449511918 196.50673237538396 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087043 -0.7933533402912478 1.7399399201488127e-17 + outer loop + vertex 1.964257449511918 196.50673237538396 -62.60000000000005 + vertex 1.4050691403082394 196.93581265639824 617.3999999999999 + vertex 1.4050691403082394 196.93581265639824 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004427 0.9914448613738115 1.6369160198768729e-16 + outer loop + vertex 0.055069140308233296 191.89754406618027 -62.60000000000005 + vertex 0.75388056208504 191.98954433519978 617.3999999999999 + vertex 0.75388056208504 191.98954433519978 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222004427 0.9914448613738115 1.6369160198768729e-16 + outer loop + vertex 0.75388056208504 191.98954433519978 617.3999999999999 + vertex 0.055069140308233296 191.89754406618027 -62.60000000000005 + vertex 0.055069140308233296 191.89754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912342 -0.6087614290087219 -2.488942827790612e-16 + outer loop + vertex -1.8541191688954417 196.50673237538396 617.3999999999999 + vertex -2.28319944990975 195.94754406618028 -62.60000000000005 + vertex -1.8541191688954417 196.50673237538396 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912342 -0.6087614290087219 -2.488942827790612e-16 + outer loop + vertex -2.28319944990975 195.94754406618028 -62.60000000000005 + vertex -1.8541191688954417 196.50673237538396 617.3999999999999 + vertex -2.28319944990975 195.94754406618028 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738105 -0.13052619222005082 -2.242484713441213e-16 + outer loop + vertex -2.5529305906722497 195.2963554879571 617.3999999999999 + vertex -2.644930859691766 194.59754406618026 -62.60000000000005 + vertex -2.5529305906722497 195.2963554879571 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738105 -0.13052619222005082 -2.242484713441213e-16 + outer loop + vertex -2.644930859691766 194.59754406618026 -62.60000000000005 + vertex -2.5529305906722497 195.2963554879571 617.3999999999999 + vertex -2.644930859691766 194.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004427 -0.9914448613738115 -1.6369160198768729e-16 + outer loop + vertex -0.6437422814685692 197.20554379716077 617.3999999999999 + vertex 0.05506914030823612 197.29754406618028 -62.60000000000005 + vertex 0.05506914030823612 197.29754406618028 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222004427 -0.9914448613738115 -1.6369160198768729e-16 + outer loop + vertex 0.05506914030823612 197.29754406618028 -62.60000000000005 + vertex -0.6437422814685692 197.20554379716077 617.3999999999999 + vertex -0.6437422814685692 197.20554379716077 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651081 0.9238795325112794 4.7612051549712884e-17 + outer loop + vertex -8.54493085969176 185.41190342012518 -62.60000000000005 + vertex -8.159041331855791 185.25206274411775 617.3999999999999 + vertex -8.159041331855791 185.25206274411775 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651081 0.9238795325112794 4.7612051549712884e-17 + outer loop + vertex -8.159041331855791 185.25206274411775 617.3999999999999 + vertex -8.54493085969176 185.41190342012518 -62.60000000000005 + vertex -8.54493085969176 185.41190342012518 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912353 0.6087614290087207 2.4889428277906123e-16 + outer loop + vertex 1.9642574495119138 192.6883557569766 617.3999999999999 + vertex 2.39333773052622 193.24754406618027 -62.60000000000005 + vertex 1.9642574495119138 192.6883557569766 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912353 0.6087614290087207 2.4889428277906123e-16 + outer loop + vertex 2.39333773052622 193.24754406618027 -62.60000000000005 + vertex 1.9642574495119138 192.6883557569766 617.3999999999999 + vertex 2.39333773052622 193.24754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087003 0.7933533402912508 -1.739939920148687e-17 + outer loop + vertex -8.87630170959024 185.6661732162818 -62.60000000000005 + vertex -8.54493085969176 185.41190342012518 617.3999999999999 + vertex -8.54493085969176 185.41190342012518 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087003 0.7933533402912508 -1.739939920148687e-17 + outer loop + vertex -8.54493085969176 185.41190342012518 617.3999999999999 + vertex -8.87630170959024 185.6661732162818 -62.60000000000005 + vertex -8.87630170959024 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650632 0.9238795325112977 2.0684907214262414e-16 + outer loop + vertex -7.330820387527722 185.25206274411778 -62.60000000000005 + vertex -6.944930859691755 185.41190342012518 617.3999999999999 + vertex -6.944930859691755 185.41190342012518 -62.60000000000005 + endloop +endfacet +facet normal -0.3826834323650632 0.9238795325112977 2.0684907214262414e-16 + outer loop + vertex -6.944930859691755 185.41190342012518 617.3999999999999 + vertex -7.330820387527722 185.25206274411778 -62.60000000000005 + vertex -7.330820387527722 185.25206274411778 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087043 0.7933533402912478 -1.7399399201488127e-17 + outer loop + vertex -1.854119168895446 192.6883557569766 -62.60000000000005 + vertex -1.294930859691767 192.2592754759623 617.3999999999999 + vertex -1.294930859691767 192.2592754759623 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087043 0.7933533402912478 -1.7399399201488127e-17 + outer loop + vertex -1.294930859691767 192.2592754759623 617.3999999999999 + vertex -1.854119168895446 192.6883557569766 -62.60000000000005 + vertex -1.854119168895446 192.6883557569766 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651019 0.9238795325112817 4.761205154971449e-17 + outer loop + vertex -1.294930859691767 192.2592754759623 -62.60000000000005 + vertex -0.6437422814685734 191.98954433519978 617.3999999999999 + vertex -0.6437422814685734 191.98954433519978 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651019 0.9238795325112817 4.761205154971449e-17 + outer loop + vertex -0.6437422814685734 191.98954433519978 617.3999999999999 + vertex -1.294930859691767 192.2592754759623 -62.60000000000005 + vertex -1.294930859691767 192.2592754759623 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738104 0.13052619222005143 -1.8829806831558401e-16 + outer loop + vertex -2.644930859691766 194.59754406618026 617.3999999999999 + vertex -2.552930590672251 193.89873264440348 -62.60000000000005 + vertex -2.644930859691766 194.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738104 0.13052619222005143 -1.8829806831558401e-16 + outer loop + vertex -2.552930590672251 193.89873264440348 -62.60000000000005 + vertex -2.644930859691766 194.59754406618026 617.3999999999999 + vertex -2.552930590672251 193.89873264440348 617.3999999999999 + endloop +endfacet +facet normal -0.99144486137381 -0.13052619222005554 1.8829806831558335e-16 + outer loop + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + endloop +endfacet +facet normal -0.99144486137381 -0.13052619222005554 1.8829806831558335e-16 + outer loop + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -9.910856685980843 185.33872502107778 -62.60000000000008 + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912247 0.6087614290087344 -8.122510965098507e-17 + outer loop + vertex -9.130571505746875 185.99754406618027 617.3999999999999 + vertex -8.87630170959024 185.6661732162818 -62.60000000000005 + vertex -9.130571505746875 185.99754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912247 0.6087614290087344 -8.122510965098507e-17 + outer loop + vertex -8.87630170959024 185.6661732162818 -62.60000000000005 + vertex -9.130571505746875 185.99754406618027 617.3999999999999 + vertex -8.87630170959024 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236510005 0.9238795325112825 2.0684907214262968e-16 + outer loop + vertex 0.75388056208504 191.98954433519978 -62.60000000000005 + vertex 1.4050691403082352 192.2592754759623 617.3999999999999 + vertex 1.4050691403082352 192.2592754759623 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510005 0.9238795325112825 2.0684907214262968e-16 + outer loop + vertex 1.4050691403082352 192.2592754759623 617.3999999999999 + vertex 0.75388056208504 191.98954433519978 -62.60000000000005 + vertex 0.75388056208504 191.98954433519978 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651081 -0.9238795325112794 -4.7612051549712884e-17 + outer loop + vertex -7.330820387527747 188.3430253882428 617.3999999999999 + vertex -6.944930859691778 188.1831847122354 -62.60000000000005 + vertex -6.944930859691778 188.1831847122354 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651081 -0.9238795325112794 -4.7612051549712884e-17 + outer loop + vertex -6.944930859691778 188.1831847122354 -62.60000000000005 + vertex -7.330820387527747 188.3430253882428 617.3999999999999 + vertex -7.330820387527747 188.3430253882428 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006226 -0.9914448613738092 -1.6369160198769074e-16 + outer loop + vertex -8.159041331855816 188.34302538824278 617.3999999999999 + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006226 -0.9914448613738092 -1.6369160198769074e-16 + outer loop + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + vertex -8.159041331855816 188.34302538824278 617.3999999999999 + vertex -8.159041331855816 188.34302538824278 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738115 -0.1305261922200436 -2.2424847134412055e-16 + outer loop + vertex -9.290412181754292 187.2116545383443 617.3999999999999 + vertex -9.344930859691782 186.79754406618028 -62.60000000000005 + vertex -9.290412181754292 187.2116545383443 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738115 -0.1305261922200436 -2.2424847134412055e-16 + outer loop + vertex -9.344930859691782 186.79754406618028 -62.60000000000005 + vertex -9.290412181754292 187.2116545383443 617.3999999999999 + vertex -9.344930859691782 186.79754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006198 1.882980683155823e-16 + outer loop + vertex -6.144930859691763 186.7975440661803 617.3999999999999 + vertex -6.199449537629255 187.21165453834433 -62.60000000000005 + vertex -6.144930859691763 186.7975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006198 1.882980683155823e-16 + outer loop + vertex -6.199449537629255 187.21165453834433 -62.60000000000005 + vertex -6.144930859691763 186.7975440661803 617.3999999999999 + vertex -6.199449537629255 187.21165453834433 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912336 0.6087614290087228 2.488942827790612e-16 + outer loop + vertex -6.613560009793279 185.6661732162818 617.3999999999999 + vertex -6.359290213636655 185.9975440661803 -62.60000000000005 + vertex -6.613560009793279 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912336 0.6087614290087228 2.488942827790612e-16 + outer loop + vertex -6.359290213636655 185.9975440661803 -62.60000000000005 + vertex -6.613560009793279 185.6661732162818 617.3999999999999 + vertex -6.359290213636655 185.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738159 -0.13052619222001044 -2.242484713441169e-16 + outer loop + vertex -9.290412181754292 202.81165453834433 617.3999999999999 + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738159 -0.13052619222001044 -2.242484713441169e-16 + outer loop + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + vertex -9.290412181754292 202.81165453834433 617.3999999999999 + vertex -9.344930859691765 202.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087399 -0.7933533402912204 -2.359101198653037e-16 + outer loop + vertex -8.87630170959026 187.92891491607875 617.3999999999999 + vertex -8.544930859691787 188.1831847122354 -62.60000000000005 + vertex -8.544930859691787 188.1831847122354 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087399 -0.7933533402912204 -2.359101198653037e-16 + outer loop + vertex -8.544930859691787 188.1831847122354 -62.60000000000005 + vertex -8.87630170959026 187.92891491607875 617.3999999999999 + vertex -8.87630170959026 187.92891491607875 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222000852 -0.9914448613738163 -1.0937881967046056e-16 + outer loop + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + vertex -7.330820387527747 188.3430253882428 -62.60000000000005 + vertex -7.330820387527747 188.3430253882428 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222000852 -0.9914448613738163 -1.0937881967046056e-16 + outer loop + vertex -7.330820387527747 188.3430253882428 -62.60000000000005 + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + vertex -7.7449308596917845 188.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex -9.344930859691782 186.79754406618028 617.3999999999999 + vertex -9.290412181754286 186.38343359401622 -62.60000000000005 + vertex -9.344930859691782 186.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex -9.290412181754286 186.38343359401622 -62.60000000000005 + vertex -9.344930859691782 186.79754406618028 617.3999999999999 + vertex -9.290412181754286 186.38343359401622 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236504526 -0.9238795325113054 -4.761205154972953e-17 + outer loop + vertex -7.330820387527756 203.94302538824277 617.3999999999999 + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + vertex -6.944930859691767 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236504526 -0.9238795325113054 -4.761205154972953e-17 + outer loop + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + vertex -7.330820387527756 203.94302538824277 617.3999999999999 + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912336 -0.6087614290087228 -2.488942827790612e-16 + outer loop + vertex -8.87630170959026 187.92891491607875 617.3999999999999 + vertex -9.130571505746886 187.5975440661803 -62.60000000000005 + vertex -8.87630170959026 187.92891491607875 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912336 -0.6087614290087228 -2.488942827790612e-16 + outer loop + vertex -9.130571505746886 187.5975440661803 -62.60000000000005 + vertex -8.87630170959026 187.92891491607875 617.3999999999999 + vertex -9.130571505746886 187.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912434 -0.6087614290087101 -2.4889428277906147e-16 + outer loop + vertex -8.876301709590258 203.52891491607872 617.3999999999999 + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912434 -0.6087614290087101 -2.4889428277906147e-16 + outer loop + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 617.3999999999999 + vertex -9.130571505746875 203.19754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006198 1.882980683155823e-16 + outer loop + vertex -6.144930859691768 202.3975440661803 617.3999999999999 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006198 1.882980683155823e-16 + outer loop + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + vertex -6.144930859691768 202.3975440661803 617.3999999999999 + vertex -6.199449537629263 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236510927 -0.9238795325112786 -2.0684907214263106e-16 + outer loop + vertex -8.544930859691787 203.7831847122354 617.3999999999999 + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + vertex -8.15904133185582 203.94302538824277 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236510927 -0.9238795325112786 -2.0684907214263106e-16 + outer loop + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + vertex -8.544930859691787 203.7831847122354 617.3999999999999 + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112783 -0.3826834323651104 -2.4491671163867886e-16 + outer loop + vertex -9.130571505746875 203.19754406618028 617.3999999999999 + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + vertex -9.130571505746875 203.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112783 -0.3826834323651104 -2.4491671163867886e-16 + outer loop + vertex -9.290412181754292 202.81165453834433 -62.60000000000005 + vertex -9.130571505746875 203.19754406618028 617.3999999999999 + vertex -9.290412181754292 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236506075 -0.9238795325112987 -2.0684907214262374e-16 + outer loop + vertex -8.544930859691787 188.1831847122354 617.3999999999999 + vertex -8.159041331855816 188.34302538824278 -62.60000000000005 + vertex -8.159041331855816 188.34302538824278 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236506075 -0.9238795325112987 -2.0684907214262374e-16 + outer loop + vertex -8.159041331855816 188.34302538824278 -62.60000000000005 + vertex -8.544930859691787 188.1831847122354 617.3999999999999 + vertex -8.544930859691787 188.1831847122354 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087003 -0.7933533402912508 1.739939920148687e-17 + outer loop + vertex -6.944930859691778 188.1831847122354 617.3999999999999 + vertex -6.613560009793298 187.92891491607878 -62.60000000000005 + vertex -6.613560009793298 187.92891491607878 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087003 -0.7933533402912508 1.739939920148687e-17 + outer loop + vertex -6.613560009793298 187.92891491607878 -62.60000000000005 + vertex -6.944930859691778 188.1831847122354 617.3999999999999 + vertex -6.944930859691778 188.1831847122354 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex -9.344930859691765 202.39754406618027 617.3999999999999 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + vertex -9.344930859691765 202.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + vertex -9.344930859691765 202.39754406618027 617.3999999999999 + vertex -9.290412181754272 201.98343359401625 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087101 -0.7933533402912433 1.739939920148994e-17 + outer loop + vertex -6.944930859691767 203.7831847122354 617.3999999999999 + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -6.613560009793296 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087101 -0.7933533402912433 1.739939920148994e-17 + outer loop + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -6.944930859691767 203.7831847122354 617.3999999999999 + vertex -6.944930859691767 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112978 -0.38268343236506286 1.3951546310861644e-16 + outer loop + vertex -6.199449537629263 202.81165453834433 617.3999999999999 + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112978 -0.38268343236506286 1.3951546310861644e-16 + outer loop + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + vertex -6.199449537629263 202.81165453834433 617.3999999999999 + vertex -6.359290213636658 203.1975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738116 0.13052619222004325 2.2424847134412045e-16 + outer loop + vertex -6.199449537629252 186.38343359401625 617.3999999999999 + vertex -6.144930859691763 186.7975440661803 -62.60000000000005 + vertex -6.199449537629252 186.38343359401625 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738116 0.13052619222004325 2.2424847134412045e-16 + outer loop + vertex -6.144930859691763 186.7975440661803 -62.60000000000005 + vertex -6.199449537629252 186.38343359401625 617.3999999999999 + vertex -6.144930859691763 186.7975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112836 -0.38268343236509744 1.3951546310860875e-16 + outer loop + vertex -6.199449537629255 187.21165453834433 617.3999999999999 + vertex -6.359290213636666 187.59754406618032 -62.60000000000005 + vertex -6.199449537629255 187.21165453834433 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112836 -0.38268343236509744 1.3951546310860875e-16 + outer loop + vertex -6.359290213636666 187.59754406618032 -62.60000000000005 + vertex -6.199449537629255 187.21165453834433 617.3999999999999 + vertex -6.359290213636666 187.59754406618032 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112956 -0.38268343236506824 -2.4491671163867664e-16 + outer loop + vertex -9.130571505746886 187.5975440661803 617.3999999999999 + vertex -9.290412181754292 187.2116545383443 -62.60000000000005 + vertex -9.130571505746886 187.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112956 -0.38268343236506824 -2.4491671163867664e-16 + outer loop + vertex -9.290412181754292 187.2116545383443 -62.60000000000005 + vertex -9.130571505746886 187.5975440661803 617.3999999999999 + vertex -9.290412181754292 187.2116545383443 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006337 -0.9914448613738089 -1.0937881967044814e-16 + outer loop + vertex -7.744930859691788 203.9975440661803 617.3999999999999 + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + vertex -7.330820387527756 203.94302538824277 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006337 -0.9914448613738089 -1.0937881967044814e-16 + outer loop + vertex -7.330820387527756 203.94302538824277 -62.60000000000005 + vertex -7.744930859691788 203.9975440661803 617.3999999999999 + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006226 -0.9914448613738092 -1.6369160198769074e-16 + outer loop + vertex -8.15904133185582 203.94302538824277 617.3999999999999 + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + vertex -7.744930859691788 203.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006226 -0.9914448613738092 -1.6369160198769074e-16 + outer loop + vertex -7.744930859691788 203.9975440661803 -62.60000000000005 + vertex -8.15904133185582 203.94302538824277 617.3999999999999 + vertex -8.15904133185582 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112902 0.38268343236508157 2.449167116386774e-16 + outer loop + vertex -6.359290213636655 185.9975440661803 617.3999999999999 + vertex -6.199449537629252 186.38343359401625 -62.60000000000005 + vertex -6.359290213636655 185.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112902 0.38268343236508157 2.449167116386774e-16 + outer loop + vertex -6.199449537629252 186.38343359401625 -62.60000000000005 + vertex -6.359290213636655 185.9975440661803 617.3999999999999 + vertex -6.199449537629252 186.38343359401625 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087366 0.793353340291223 2.3591011986530333e-16 + outer loop + vertex -6.944930859691755 185.41190342012518 -62.60000000000005 + vertex -6.613560009793279 185.6661732162818 617.3999999999999 + vertex -6.613560009793279 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087366 0.793353340291223 2.3591011986530333e-16 + outer loop + vertex -6.613560009793279 185.6661732162818 617.3999999999999 + vertex -6.944930859691755 185.41190342012518 -62.60000000000005 + vertex -6.944930859691755 185.41190342012518 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087431 -0.7933533402912178 -2.3591011986530397e-16 + outer loop + vertex -8.876301709590258 203.52891491607872 617.3999999999999 + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + vertex -8.544930859691787 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087431 -0.7933533402912178 -2.3591011986530397e-16 + outer loop + vertex -8.544930859691787 203.7831847122354 -62.60000000000005 + vertex -8.876301709590258 203.52891491607872 617.3999999999999 + vertex -8.876301709590258 203.52891491607872 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112836 0.38268343236509744 -1.3951546310860875e-16 + outer loop + vertex -9.290412181754286 186.38343359401622 617.3999999999999 + vertex -9.130571505746875 185.99754406618027 -62.60000000000005 + vertex -9.290412181754286 186.38343359401622 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112836 0.38268343236509744 -1.3951546310860875e-16 + outer loop + vertex -9.130571505746875 185.99754406618027 -62.60000000000005 + vertex -9.290412181754286 186.38343359401622 617.3999999999999 + vertex -9.130571505746875 185.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112978 0.38268343236506286 -1.3951546310861644e-16 + outer loop + vertex -9.290412181754272 201.98343359401625 617.3999999999999 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112978 0.38268343236506286 -1.3951546310861644e-16 + outer loop + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + vertex -9.290412181754272 201.98343359401625 617.3999999999999 + vertex -9.130571505746877 201.5975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912383 -0.6087614290087168 8.122510965099029e-17 + outer loop + vertex -6.359290213636658 203.1975440661803 617.3999999999999 + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -6.359290213636658 203.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912383 -0.6087614290087168 8.122510965099029e-17 + outer loop + vertex -6.613560009793296 203.52891491607878 -62.60000000000005 + vertex -6.359290213636658 203.1975440661803 617.3999999999999 + vertex -6.613560009793296 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912247 -0.6087614290087344 8.122510965098507e-17 + outer loop + vertex -6.359290213636666 187.59754406618032 617.3999999999999 + vertex -6.613560009793298 187.92891491607878 -62.60000000000005 + vertex -6.359290213636666 187.59754406618032 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912247 -0.6087614290087344 8.122510965098507e-17 + outer loop + vertex -6.613560009793298 187.92891491607878 -62.60000000000005 + vertex -6.359290213636666 187.59754406618032 617.3999999999999 + vertex -6.613560009793298 187.92891491607878 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006198 1.882980683155823e-16 + outer loop + vertex 9.455069140308245 202.3975440661803 617.3999999999999 + vertex 9.40055046237075 202.81165453834433 -62.60000000000005 + vertex 9.455069140308245 202.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006198 1.882980683155823e-16 + outer loop + vertex 9.40055046237075 202.81165453834433 -62.60000000000005 + vertex 9.455069140308245 202.3975440661803 617.3999999999999 + vertex 9.40055046237075 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087366 -0.793353340291223 -2.3591011986530333e-16 + outer loop + vertex 6.723698290409745 203.52891491607878 617.3999999999999 + vertex 7.0550691403082215 203.7831847122354 -62.60000000000005 + vertex 7.0550691403082215 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087366 -0.793353340291223 -2.3591011986530333e-16 + outer loop + vertex 7.0550691403082215 203.7831847122354 -62.60000000000005 + vertex 6.723698290409745 203.52891491607878 617.3999999999999 + vertex 6.723698290409745 203.52891491607878 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510927 0.9238795325112786 2.0684907214263106e-16 + outer loop + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + vertex -6.9449308596917465 201.0119034201252 617.3999999999999 + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510927 0.9238795325112786 2.0684907214263106e-16 + outer loop + vertex -6.9449308596917465 201.0119034201252 617.3999999999999 + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + vertex -7.330820387527713 200.85206274411777 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290086999 0.7933533402912512 -1.739939920148675e-17 + outer loop + vertex 6.723698290409766 201.2661732162818 -62.60000000000005 + vertex 7.0550691403082455 201.01190342012518 617.3999999999999 + vertex 7.0550691403082455 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290086999 0.7933533402912512 -1.739939920148675e-17 + outer loop + vertex 7.0550691403082455 201.01190342012518 617.3999999999999 + vertex 6.723698290409766 201.2661732162818 -62.60000000000005 + vertex 6.723698290409766 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087441 0.7933533402912172 -1.7399399201500614e-17 + outer loop + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 617.3999999999999 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087441 0.7933533402912172 -1.7399399201500614e-17 + outer loop + vertex -8.544930859691766 201.01190342012518 617.3999999999999 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -8.876301709590237 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912434 0.6087614290087101 2.4889428277906147e-16 + outer loop + vertex -6.613560009793275 201.26617321628183 617.3999999999999 + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912434 0.6087614290087101 2.4889428277906147e-16 + outer loop + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + vertex -6.613560009793275 201.26617321628183 617.3999999999999 + vertex -6.359290213636661 201.59754406618032 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651081 -0.9238795325112794 -4.7612051549712884e-17 + outer loop + vertex 8.269179612472257 203.94302538824283 617.3999999999999 + vertex 8.655069140308228 203.7831847122354 -62.60000000000005 + vertex 8.655069140308228 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323651081 -0.9238795325112794 -4.7612051549712884e-17 + outer loop + vertex 8.655069140308228 203.7831847122354 -62.60000000000005 + vertex 8.269179612472257 203.94302538824283 617.3999999999999 + vertex 8.269179612472257 203.94302538824283 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912247 -0.6087614290087344 8.122510965098507e-17 + outer loop + vertex 9.24070978636334 203.1975440661803 617.3999999999999 + vertex 8.986439990206707 203.52891491607878 -62.60000000000005 + vertex 9.24070978636334 203.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912247 -0.6087614290087344 8.122510965098507e-17 + outer loop + vertex 8.986439990206707 203.52891491607878 -62.60000000000005 + vertex 9.24070978636334 203.1975440661803 617.3999999999999 + vertex 8.986439990206707 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650632 -0.9238795325112977 -2.0684907214262414e-16 + outer loop + vertex 7.0550691403082215 203.7831847122354 617.3999999999999 + vertex 7.440958668144188 203.94302538824277 -62.60000000000005 + vertex 7.440958668144188 203.94302538824277 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650632 -0.9238795325112977 -2.0684907214262414e-16 + outer loop + vertex 7.440958668144188 203.94302538824277 -62.60000000000005 + vertex 7.0550691403082215 203.7831847122354 617.3999999999999 + vertex 7.0550691403082215 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222005638 0.9914448613738099 1.0937881967044973e-16 + outer loop + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + vertex -7.744930859691745 200.79754406618028 617.3999999999999 + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222005638 0.9914448613738099 1.0937881967044973e-16 + outer loop + vertex -7.744930859691745 200.79754406618028 617.3999999999999 + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + vertex -8.1590413318558 200.85206274411777 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912336 -0.6087614290087228 -2.488942827790612e-16 + outer loop + vertex 6.723698290409745 203.52891491607878 617.3999999999999 + vertex 6.469428494253122 203.19754406618028 -62.60000000000005 + vertex 6.723698290409745 203.52891491607878 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912336 -0.6087614290087228 -2.488942827790612e-16 + outer loop + vertex 6.469428494253122 203.19754406618028 -62.60000000000005 + vertex 6.723698290409745 203.52891491607878 617.3999999999999 + vertex 6.469428494253122 203.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112902 -0.38268343236508157 -2.449167116386774e-16 + outer loop + vertex 6.469428494253122 203.19754406618028 617.3999999999999 + vertex 6.309587818245718 202.81165453834433 -62.60000000000005 + vertex 6.469428494253122 203.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112902 -0.38268343236508157 -2.449167116386774e-16 + outer loop + vertex 6.309587818245718 202.81165453834433 -62.60000000000005 + vertex 6.469428494253122 203.19754406618028 617.3999999999999 + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738116 -0.13052619222004325 -2.2424847134412045e-16 + outer loop + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + vertex 6.255069140308228 202.39754406618027 -62.60000000000005 + vertex 6.309587818245718 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738116 -0.13052619222004325 -2.2424847134412045e-16 + outer loop + vertex 6.255069140308228 202.39754406618027 -62.60000000000005 + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + vertex 6.255069140308228 202.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912182 0.6087614290087429 -8.122510965098253e-17 + outer loop + vertex -9.130571505746877 201.5975440661803 617.3999999999999 + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912182 0.6087614290087429 -8.122510965098253e-17 + outer loop + vertex -8.876301709590237 201.2661732162818 -62.60000000000005 + vertex -9.130571505746877 201.5975440661803 617.3999999999999 + vertex -8.876301709590237 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738159 0.13052619222001044 2.242484713441169e-16 + outer loop + vertex -6.199449537629244 201.98343359401625 617.3999999999999 + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738159 0.13052619222001044 2.242484713441169e-16 + outer loop + vertex -6.144930859691768 202.3975440661803 -62.60000000000005 + vertex -6.199449537629244 201.98343359401625 617.3999999999999 + vertex -6.144930859691768 202.3975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236506075 0.9238795325112987 2.0684907214262374e-16 + outer loop + vertex 8.269179612472286 200.85206274411777 -62.60000000000005 + vertex 8.655069140308255 201.01190342012518 617.3999999999999 + vertex 8.655069140308255 201.01190342012518 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236506075 0.9238795325112987 2.0684907214262374e-16 + outer loop + vertex 8.655069140308255 201.01190342012518 617.3999999999999 + vertex 8.269179612472286 200.85206274411777 -62.60000000000005 + vertex 8.269179612472286 200.85206274411777 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912336 0.6087614290087228 2.488942827790612e-16 + outer loop + vertex 8.98643999020673 201.2661732162818 617.3999999999999 + vertex 9.240709786363354 201.5975440661803 -62.60000000000005 + vertex 8.98643999020673 201.2661732162818 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912336 0.6087614290087228 2.488942827790612e-16 + outer loop + vertex 9.240709786363354 201.5975440661803 -62.60000000000005 + vertex 8.98643999020673 201.2661732162818 617.3999999999999 + vertex 9.240709786363354 201.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006134 -0.9914448613738092 -1.6369160198769052e-16 + outer loop + vertex 7.440958668144188 203.94302538824277 617.3999999999999 + vertex 7.855069140308223 203.9975440661803 -62.60000000000005 + vertex 7.855069140308223 203.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006134 -0.9914448613738092 -1.6369160198769052e-16 + outer loop + vertex 7.855069140308223 203.9975440661803 -62.60000000000005 + vertex 7.440958668144188 203.94302538824277 617.3999999999999 + vertex 7.440958668144188 203.94302538824277 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912247 0.6087614290087344 -8.122510965098507e-17 + outer loop + vertex 6.469428494253134 201.59754406618026 617.3999999999999 + vertex 6.723698290409766 201.2661732162818 -62.60000000000005 + vertex 6.469428494253134 201.59754406618026 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912247 0.6087614290087344 -8.122510965098507e-17 + outer loop + vertex 6.723698290409766 201.2661732162818 -62.60000000000005 + vertex 6.469428494253134 201.59754406618026 617.3999999999999 + vertex 6.723698290409766 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087399 0.7933533402912204 2.359101198653037e-16 + outer loop + vertex 8.655069140308255 201.01190342012518 -62.60000000000005 + vertex 8.98643999020673 201.2661732162818 617.3999999999999 + vertex 8.98643999020673 201.2661732162818 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087399 0.7933533402912204 2.359101198653037e-16 + outer loop + vertex 8.98643999020673 201.2661732162818 617.3999999999999 + vertex 8.655069140308255 201.01190342012518 -62.60000000000005 + vertex 8.655069140308255 201.01190342012518 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650643 0.9238795325112973 4.761205154972445e-17 + outer loop + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + vertex -8.1590413318558 200.85206274411777 617.3999999999999 + vertex -8.1590413318558 200.85206274411777 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323650643 0.9238795325112973 4.761205154972445e-17 + outer loop + vertex -8.1590413318558 200.85206274411777 617.3999999999999 + vertex -8.544930859691766 201.01190342012518 -62.60000000000005 + vertex -8.544930859691766 201.01190342012518 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087431 0.7933533402912178 2.3591011986530397e-16 + outer loop + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + vertex -6.613560009793275 201.26617321628183 617.3999999999999 + vertex -6.613560009793275 201.26617321628183 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087431 0.7933533402912178 2.3591011986530397e-16 + outer loop + vertex -6.613560009793275 201.26617321628183 617.3999999999999 + vertex -6.9449308596917465 201.0119034201252 -62.60000000000005 + vertex -6.9449308596917465 201.0119034201252 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112836 -0.38268343236509744 1.3951546310860875e-16 + outer loop + vertex 9.40055046237075 202.81165453834433 617.3999999999999 + vertex 9.24070978636334 203.1975440661803 -62.60000000000005 + vertex 9.40055046237075 202.81165453834433 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112836 -0.38268343236509744 1.3951546310860875e-16 + outer loop + vertex 9.24070978636334 203.1975440661803 -62.60000000000005 + vertex 9.40055046237075 202.81165453834433 617.3999999999999 + vertex 9.24070978636334 203.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex 6.255069140308228 202.39754406618027 617.3999999999999 + vertex 6.309587818245723 201.98343359401622 -62.60000000000005 + vertex 6.255069140308228 202.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex 6.309587818245723 201.98343359401622 -62.60000000000005 + vertex 6.255069140308228 202.39754406618027 617.3999999999999 + vertex 6.309587818245723 201.98343359401622 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087003 -0.7933533402912508 1.739939920148687e-17 + outer loop + vertex 8.655069140308228 203.7831847122354 617.3999999999999 + vertex 8.986439990206707 203.52891491607878 -62.60000000000005 + vertex 8.986439990206707 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087003 -0.7933533402912508 1.739939920148687e-17 + outer loop + vertex 8.986439990206707 203.52891491607878 -62.60000000000005 + vertex 8.655069140308228 203.7831847122354 617.3999999999999 + vertex 8.655069140308228 203.7831847122354 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006226 0.9914448613738092 1.6369160198769074e-16 + outer loop + vertex 7.855069140308252 200.79754406618028 -62.60000000000005 + vertex 8.269179612472286 200.85206274411777 617.3999999999999 + vertex 8.269179612472286 200.85206274411777 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006226 0.9914448613738092 1.6369160198769074e-16 + outer loop + vertex 8.269179612472286 200.85206274411777 617.3999999999999 + vertex 7.855069140308252 200.79754406618028 -62.60000000000005 + vertex 7.855069140308252 200.79754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738115 0.13052619222004277 2.242484713441204e-16 + outer loop + vertex 9.40055046237076 201.98343359401628 617.3999999999999 + vertex 9.455069140308245 202.3975440661803 -62.60000000000005 + vertex 9.40055046237076 201.98343359401628 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738115 0.13052619222004277 2.242484713441204e-16 + outer loop + vertex 9.455069140308245 202.3975440661803 -62.60000000000005 + vertex 9.40055046237076 201.98343359401628 617.3999999999999 + vertex 9.455069140308245 202.3975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112783 0.3826834323651104 2.4491671163867886e-16 + outer loop + vertex -6.359290213636661 201.59754406618032 617.3999999999999 + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + vertex -6.359290213636661 201.59754406618032 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112783 0.3826834323651104 2.4491671163867886e-16 + outer loop + vertex -6.199449537629244 201.98343359401625 -62.60000000000005 + vertex -6.359290213636661 201.59754406618032 617.3999999999999 + vertex -6.199449537629244 201.98343359401625 617.3999999999999 + endloop +endfacet +facet normal -0.1305261922200094 -0.9914448613738162 -1.0937881967046036e-16 + outer loop + vertex 7.855069140308223 203.9975440661803 617.3999999999999 + vertex 8.269179612472257 203.94302538824283 -62.60000000000005 + vertex 8.269179612472257 203.94302538824283 617.3999999999999 + endloop +endfacet +facet normal -0.1305261922200094 -0.9914448613738162 -1.0937881967046036e-16 + outer loop + vertex 8.269179612472257 203.94302538824283 -62.60000000000005 + vertex 7.855069140308223 203.9975440661803 617.3999999999999 + vertex 7.855069140308223 203.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112956 0.38268343236506824 2.4491671163867664e-16 + outer loop + vertex 9.240709786363354 201.5975440661803 617.3999999999999 + vertex 9.40055046237076 201.98343359401628 -62.60000000000005 + vertex 9.240709786363354 201.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112956 0.38268343236506824 2.4491671163867664e-16 + outer loop + vertex 9.40055046237076 201.98343359401628 -62.60000000000005 + vertex 9.240709786363354 201.5975440661803 617.3999999999999 + vertex 9.40055046237076 201.98343359401628 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112836 0.38268343236509744 -1.3951546310860875e-16 + outer loop + vertex 6.309587818245723 201.98343359401622 617.3999999999999 + vertex 6.469428494253134 201.59754406618026 -62.60000000000005 + vertex 6.309587818245723 201.98343359401622 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112836 0.38268343236509744 -1.3951546310860875e-16 + outer loop + vertex 6.469428494253134 201.59754406618026 -62.60000000000005 + vertex 6.309587818245723 201.98343359401622 617.3999999999999 + vertex 6.469428494253134 201.59754406618026 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006226 0.9914448613738092 1.6369160198769074e-16 + outer loop + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + vertex -7.330820387527713 200.85206274411777 617.3999999999999 + vertex -7.330820387527713 200.85206274411777 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006226 0.9914448613738092 1.6369160198769074e-16 + outer loop + vertex -7.330820387527713 200.85206274411777 617.3999999999999 + vertex -7.744930859691745 200.79754406618028 -62.60000000000005 + vertex -7.744930859691745 200.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112783 -0.3826834323651104 -2.4491671163867886e-16 + outer loop + vertex 6.469428494253139 187.5975440661803 617.3999999999999 + vertex 6.309587818245721 187.21165453834433 -62.60000000000005 + vertex 6.469428494253139 187.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112783 -0.3826834323651104 -2.4491671163867886e-16 + outer loop + vertex 6.309587818245721 187.21165453834433 -62.60000000000005 + vertex 6.469428494253139 187.5975440661803 617.3999999999999 + vertex 6.309587818245721 187.21165453834433 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738159 -0.13052619222001044 -2.242484713441169e-16 + outer loop + vertex 6.309587818245721 187.21165453834433 617.3999999999999 + vertex 6.255069140308248 186.79754406618028 -62.60000000000005 + vertex 6.309587818245721 187.21165453834433 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738159 -0.13052619222001044 -2.242484713441169e-16 + outer loop + vertex 6.255069140308248 186.79754406618028 -62.60000000000005 + vertex 6.309587818245721 187.21165453834433 617.3999999999999 + vertex 6.255069140308248 186.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 0.9238795325112978 0.38268343236506286 -1.3951546310861644e-16 + outer loop + vertex 6.309587818245743 186.38343359401625 617.3999999999999 + vertex 6.469428494253137 185.9975440661803 -62.60000000000005 + vertex 6.309587818245743 186.38343359401625 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112978 0.38268343236506286 -1.3951546310861644e-16 + outer loop + vertex 6.469428494253137 185.9975440661803 -62.60000000000005 + vertex 6.309587818245743 186.38343359401625 617.3999999999999 + vertex 6.469428494253137 185.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex 6.255069140308248 186.79754406618028 617.3999999999999 + vertex 6.309587818245743 186.38343359401625 -62.60000000000005 + vertex 6.255069140308248 186.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.9914448613738092 0.13052619222006198 -1.882980683155823e-16 + outer loop + vertex 6.309587818245743 186.38343359401625 -62.60000000000005 + vertex 6.255069140308248 186.79754406618028 617.3999999999999 + vertex 6.309587818245743 186.38343359401625 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222000852 0.9914448613738163 1.0937881967046056e-16 + outer loop + vertex 7.440958668144216 200.85206274411775 -62.60000000000005 + vertex 7.855069140308252 200.79754406618028 617.3999999999999 + vertex 7.855069140308252 200.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222000852 0.9914448613738163 1.0937881967046056e-16 + outer loop + vertex 7.855069140308252 200.79754406618028 617.3999999999999 + vertex 7.440958668144216 200.85206274411775 -62.60000000000005 + vertex 7.440958668144216 200.85206274411775 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006337 0.9914448613738089 1.0937881967044814e-16 + outer loop + vertex 7.440958668144235 185.25206274411778 -62.60000000000005 + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.13052619222006337 0.9914448613738089 1.0937881967044814e-16 + outer loop + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + vertex 7.440958668144235 185.25206274411778 -62.60000000000005 + vertex 7.440958668144235 185.25206274411778 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738159 0.13052619222001022 2.242484713441169e-16 + outer loop + vertex 9.40055046237077 186.38343359401628 617.3999999999999 + vertex 9.455069140308243 186.7975440661803 -62.60000000000005 + vertex 9.40055046237077 186.38343359401628 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738159 0.13052619222001022 2.242484713441169e-16 + outer loop + vertex 9.455069140308243 186.7975440661803 -62.60000000000005 + vertex 9.40055046237077 186.38343359401628 617.3999999999999 + vertex 9.455069140308243 186.7975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.793353340291218 -0.6087614290087431 8.122510965098245e-17 + outer loop + vertex 9.240709786363354 187.59754406618032 617.3999999999999 + vertex 8.986439990206716 187.92891491607878 -62.60000000000005 + vertex 9.240709786363354 187.59754406618032 -62.60000000000005 + endloop +endfacet +facet normal -0.793353340291218 -0.6087614290087431 8.122510965098245e-17 + outer loop + vertex 8.986439990206716 187.92891491607878 -62.60000000000005 + vertex 9.240709786363354 187.59754406618032 617.3999999999999 + vertex 8.986439990206716 187.92891491607878 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236504526 0.9238795325113054 4.761205154972953e-17 + outer loop + vertex 7.0550691403082455 185.41190342012518 -62.60000000000005 + vertex 7.440958668144235 185.25206274411778 617.3999999999999 + vertex 7.440958668144235 185.25206274411778 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236504526 0.9238795325113054 4.761205154972953e-17 + outer loop + vertex 7.440958668144235 185.25206274411778 617.3999999999999 + vertex 7.0550691403082455 185.41190342012518 -62.60000000000005 + vertex 7.0550691403082455 185.41190342012518 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087441 -0.7933533402912172 1.7399399201500614e-17 + outer loop + vertex 8.655069140308244 188.18318471223543 617.3999999999999 + vertex 8.986439990206716 187.92891491607878 -62.60000000000005 + vertex 8.986439990206716 187.92891491607878 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087441 -0.7933533402912172 1.7399399201500614e-17 + outer loop + vertex 8.986439990206716 187.92891491607878 -62.60000000000005 + vertex 8.655069140308244 188.18318471223543 617.3999999999999 + vertex 8.655069140308244 188.18318471223543 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087091 0.7933533402912439 2.359101198653005e-16 + outer loop + vertex 8.655069140308266 185.4119034201252 -62.60000000000005 + vertex 8.986439990206739 185.6661732162818 617.3999999999999 + vertex 8.986439990206739 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -0.6087614290087091 0.7933533402912439 2.359101198653005e-16 + outer loop + vertex 8.986439990206739 185.6661732162818 617.3999999999999 + vertex 8.655069140308266 185.4119034201252 -62.60000000000005 + vertex 8.655069140308266 185.4119034201252 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222005638 -0.9914448613738099 -1.0937881967044973e-16 + outer loop + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + vertex 8.269179612472279 188.3430253882428 -62.60000000000005 + vertex 8.269179612472279 188.3430253882428 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222005638 -0.9914448613738099 -1.0937881967044973e-16 + outer loop + vertex 8.269179612472279 188.3430253882428 -62.60000000000005 + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087431 -0.7933533402912178 -2.3591011986530397e-16 + outer loop + vertex 6.723698290409754 187.92891491607875 617.3999999999999 + vertex 7.055069140308225 188.1831847122354 -62.60000000000005 + vertex 7.055069140308225 188.1831847122354 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087431 -0.7933533402912178 -2.3591011986530397e-16 + outer loop + vertex 7.055069140308225 188.1831847122354 -62.60000000000005 + vertex 6.723698290409754 187.92891491607875 617.3999999999999 + vertex 6.723698290409754 187.92891491607875 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912434 -0.6087614290087101 -2.4889428277906147e-16 + outer loop + vertex 6.723698290409754 187.92891491607875 617.3999999999999 + vertex 6.469428494253139 187.5975440661803 -62.60000000000005 + vertex 6.723698290409754 187.92891491607875 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912434 -0.6087614290087101 -2.4889428277906147e-16 + outer loop + vertex 6.469428494253139 187.5975440661803 -62.60000000000005 + vertex 6.723698290409754 187.92891491607875 617.3999999999999 + vertex 6.469428494253139 187.5975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912635 0.6087614290086838 2.48894282779062e-16 + outer loop + vertex 8.986439990206739 185.6661732162818 617.3999999999999 + vertex 9.240709786363354 185.99754406618032 -62.60000000000005 + vertex 8.986439990206739 185.6661732162818 -62.60000000000005 + endloop +endfacet +facet normal -0.7933533402912635 0.6087614290086838 2.48894282779062e-16 + outer loop + vertex 9.240709786363354 185.99754406618032 -62.60000000000005 + vertex 8.986439990206739 185.6661732162818 617.3999999999999 + vertex 9.240709786363354 185.99754406618032 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236510943 0.9238795325112785 2.0684907214263106e-16 + outer loop + vertex 8.2691796124723 185.25206274411778 -62.60000000000005 + vertex 8.655069140308266 185.4119034201252 617.3999999999999 + vertex 8.655069140308266 185.4119034201252 -62.60000000000005 + endloop +endfacet +facet normal -0.38268343236510943 0.9238795325112785 2.0684907214263106e-16 + outer loop + vertex 8.655069140308266 185.4119034201252 617.3999999999999 + vertex 8.2691796124723 185.25206274411778 -62.60000000000005 + vertex 8.2691796124723 185.25206274411778 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087093 0.7933533402912439 -1.739939920148968e-17 + outer loop + vertex 6.723698290409774 185.6661732162818 -62.60000000000005 + vertex 7.0550691403082455 185.41190342012518 617.3999999999999 + vertex 7.0550691403082455 185.41190342012518 -62.60000000000005 + endloop +endfacet +facet normal 0.6087614290087093 0.7933533402912439 -1.739939920148968e-17 + outer loop + vertex 7.0550691403082455 185.41190342012518 617.3999999999999 + vertex 6.723698290409774 185.6661732162818 -62.60000000000005 + vertex 6.723698290409774 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112783 0.3826834323651102 2.449167116386788e-16 + outer loop + vertex 9.240709786363354 185.99754406618032 617.3999999999999 + vertex 9.40055046237077 186.38343359401628 -62.60000000000005 + vertex 9.240709786363354 185.99754406618032 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112783 0.3826834323651102 2.449167116386788e-16 + outer loop + vertex 9.40055046237077 186.38343359401628 -62.60000000000005 + vertex 9.240709786363354 185.99754406618032 617.3999999999999 + vertex 9.40055046237077 186.38343359401628 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112978 -0.38268343236506286 1.3951546310861644e-16 + outer loop + vertex 9.400550462370747 187.21165453834433 617.3999999999999 + vertex 9.240709786363354 187.59754406618032 -62.60000000000005 + vertex 9.400550462370747 187.21165453834433 -62.60000000000005 + endloop +endfacet +facet normal -0.9238795325112978 -0.38268343236506286 1.3951546310861644e-16 + outer loop + vertex 9.240709786363354 187.59754406618032 -62.60000000000005 + vertex 9.400550462370747 187.21165453834433 617.3999999999999 + vertex 9.240709786363354 187.59754406618032 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323651081 0.9238795325112794 4.7612051549712884e-17 + outer loop + vertex 7.0550691403082455 201.01190342012518 -62.60000000000005 + vertex 7.440958668144216 200.85206274411775 617.3999999999999 + vertex 7.440958668144216 200.85206274411775 -62.60000000000005 + endloop +endfacet +facet normal 0.3826834323651081 0.9238795325112794 4.7612051549712884e-17 + outer loop + vertex 7.440958668144216 200.85206274411775 617.3999999999999 + vertex 7.0550691403082455 201.01190342012518 -62.60000000000005 + vertex 7.0550691403082455 201.01190342012518 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912383 0.6087614290087168 -8.122510965099029e-17 + outer loop + vertex 6.469428494253137 185.9975440661803 617.3999999999999 + vertex 6.723698290409774 185.6661732162818 -62.60000000000005 + vertex 6.469428494253137 185.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal 0.7933533402912383 0.6087614290087168 -8.122510965099029e-17 + outer loop + vertex 6.723698290409774 185.6661732162818 -62.60000000000005 + vertex 6.469428494253137 185.9975440661803 617.3999999999999 + vertex 6.723698290409774 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222006226 0.9914448613738092 1.6369160198769074e-16 + outer loop + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + vertex 8.2691796124723 185.25206274411778 617.3999999999999 + vertex 8.2691796124723 185.25206274411778 -62.60000000000005 + endloop +endfacet +facet normal -0.13052619222006226 0.9914448613738092 1.6369160198769074e-16 + outer loop + vertex 8.2691796124723 185.25206274411778 617.3999999999999 + vertex 7.855069140308268 185.19754406618028 -62.60000000000005 + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650643 -0.9238795325112973 -4.761205154972445e-17 + outer loop + vertex 8.269179612472279 188.3430253882428 617.3999999999999 + vertex 8.655069140308244 188.18318471223543 -62.60000000000005 + vertex 8.655069140308244 188.18318471223543 617.3999999999999 + endloop +endfacet +facet normal -0.3826834323650643 -0.9238795325112973 -4.761205154972445e-17 + outer loop + vertex 8.655069140308244 188.18318471223543 -62.60000000000005 + vertex 8.269179612472279 188.3430253882428 617.3999999999999 + vertex 8.269179612472279 188.3430253882428 -62.60000000000005 + endloop +endfacet +facet normal 0.38268343236510927 -0.9238795325112786 -2.0684907214263106e-16 + outer loop + vertex 7.055069140308225 188.1831847122354 617.3999999999999 + vertex 7.440958668144192 188.3430253882428 -62.60000000000005 + vertex 7.440958668144192 188.3430253882428 617.3999999999999 + endloop +endfacet +facet normal 0.38268343236510927 -0.9238795325112786 -2.0684907214263106e-16 + outer loop + vertex 7.440958668144192 188.3430253882428 -62.60000000000005 + vertex 7.055069140308225 188.1831847122354 617.3999999999999 + vertex 7.055069140308225 188.1831847122354 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006218 1.8829806831558229e-16 + outer loop + vertex 9.455069140308243 186.7975440661803 617.3999999999999 + vertex 9.400550462370747 187.21165453834433 -62.60000000000005 + vertex 9.455069140308243 186.7975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738092 -0.13052619222006218 1.8829806831558229e-16 + outer loop + vertex 9.400550462370747 187.21165453834433 -62.60000000000005 + vertex 9.455069140308243 186.7975440661803 617.3999999999999 + vertex 9.400550462370747 187.21165453834433 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006226 -0.9914448613738092 -1.6369160198769074e-16 + outer loop + vertex 7.440958668144192 188.3430253882428 617.3999999999999 + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222006226 -0.9914448613738092 -1.6369160198769074e-16 + outer loop + vertex 7.855069140308223 188.3975440661803 -62.60000000000005 + vertex 7.440958668144192 188.3430253882428 617.3999999999999 + vertex 7.440958668144192 188.3430253882428 -62.60000000000005 + endloop +endfacet +facet normal 0.99144486137381 0.13052619222005554 -1.8829806831558335e-16 + outer loop + vertex 10.02099496659731 203.8563631112828 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 10.02099496659731 203.8563631112828 -62.60000000000005 + endloop +endfacet +facet normal 0.99144486137381 0.13052619222005554 -1.8829806831558335e-16 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 10.02099496659731 203.8563631112828 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 1.0 1.6631994926596031e-15 -2.080531937439535e-16 + outer loop + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 10.055069140308252 198.39754406618027 617.3999999999999 + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 1.0 1.6631994926596031e-15 -2.080531937439535e-16 + outer loop + vertex 10.055069140308252 198.39754406618027 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 -62.60000000000005 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 1.0 -4.302114220422487e-15 -2.080531937439543e-16 + outer loop + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 9.655069140308251 197.99754406618027 -62.60000000000005 + vertex 9.655069140308253 198.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -4.302114220422487e-15 -2.080531937439543e-16 + outer loop + vertex 9.655069140308251 197.99754406618027 -62.60000000000005 + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 9.655069140308251 197.99754406618027 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + vertex 6.220754565257503 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.9238795325112917 0.38268343236507796 -1.395154631086131e-16 + outer loop + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + vertex 10.02099496659731 203.8563631112828 -62.60000000000005 + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + endloop +endfacet +facet normal 0.9238795325112917 0.38268343236507796 -1.395154631086131e-16 + outer loop + vertex 10.02099496659731 203.8563631112828 -62.60000000000005 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + vertex 10.02099496659731 203.8563631112828 617.3999999999999 + endloop +endfacet +facet normal 0.7071067811865456 -0.7071067811865497 -2.4449388036193273e-16 + outer loop + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 6.220754565257503 200.19754406618028 -62.60000000000005 + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 0.7071067811865456 -0.7071067811865497 -2.4449388036193273e-16 + outer loop + vertex 6.220754565257503 200.19754406618028 -62.60000000000005 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + endloop +endfacet +facet normal -1.666920569830041e-14 -1.0 -1.3771336778111313e-16 + outer loop + vertex 8.255069140308237 197.9975440661803 617.3999999999999 + vertex 9.655069140308251 197.99754406618027 -62.60000000000005 + vertex 9.655069140308251 197.99754406618027 617.3999999999999 + endloop +endfacet +facet normal -1.666920569830041e-14 -1.0 -1.3771336778111313e-16 + outer loop + vertex 9.655069140308251 197.99754406618027 -62.60000000000005 + vertex 8.255069140308237 197.9975440661803 617.3999999999999 + vertex 8.255069140308237 197.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + vertex 10.055069140308252 198.39754406618027 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex 10.055069140308252 198.39754406618027 -62.60000000000005 + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 9.655069140308253 198.39754406618027 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex 8.255069140308237 197.9975440661803 617.3999999999999 + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 8.255069140308237 197.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex 8.255069140308239 200.19754406618028 -62.60000000000005 + vertex 8.255069140308237 197.9975440661803 617.3999999999999 + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 1.0 -8.896195608001561e-16 -2.080531937439538e-16 + outer loop + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 3.7550691403082355 197.73185864123104 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -8.896195608001561e-16 -2.080531937439538e-16 + outer loop + vertex 3.7550691403082315 191.46322949112954 -62.60000000000005 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.0805319374395384e-16 + outer loop + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.944930859691775 185.5975440661803 -62.60000000000008 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.0805319374395384e-16 + outer loop + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + vertex -9.544930859691773 190.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + vertex -9.944930859691773 190.79754406618028 -62.60000000000005 + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + endloop +endfacet +facet normal -1.0 2.576571214238363e-15 2.0805319374395406e-16 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + endloop +endfacet +facet normal -1.0 2.576571214238363e-15 2.0805319374395406e-16 + outer loop + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -9.544930859691773 191.19754406618028 -62.60000000000005 + vertex -8.14493085969177 191.19754406618028 617.3999999999999 + vertex -8.14493085969177 191.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -8.14493085969177 191.19754406618028 617.3999999999999 + vertex -9.544930859691773 191.19754406618028 -62.60000000000005 + vertex -9.544930859691773 191.19754406618028 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -6.110616284641007 200.19754406618026 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -8.144930859691767 197.9975440661803 -62.60000000000005 + vertex -8.144930859691767 200.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -8.144930859691767 197.9975440661803 -62.60000000000005 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -8.144930859691767 197.9975440661803 617.3999999999999 + endloop +endfacet +facet normal -1.6669205698300596e-14 -1.0 -1.3771336778111313e-16 + outer loop + vertex -9.544930859691767 197.99754406618032 617.3999999999999 + vertex -8.144930859691767 197.9975440661803 -62.60000000000005 + vertex -8.144930859691767 197.9975440661803 617.3999999999999 + endloop +endfacet +facet normal -1.6669205698300596e-14 -1.0 -1.3771336778111313e-16 + outer loop + vertex -8.144930859691767 197.9975440661803 -62.60000000000005 + vertex -9.544930859691767 197.99754406618032 617.3999999999999 + vertex -9.544930859691767 197.99754406618032 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -6.1106162846410355 188.9975440661803 617.3999999999999 + vertex -6.1106162846410355 188.9975440661803 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -6.1106162846410355 188.9975440661803 617.3999999999999 + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.7071067811865456 0.7071067811865497 2.4449388036193273e-16 + outer loop + vertex -6.1106162846410355 188.9975440661803 -62.60000000000005 + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -3.6449308596917698 191.4632294911295 -62.60000000000005 + endloop +endfacet +facet normal -0.7071067811865456 0.7071067811865497 2.4449388036193273e-16 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -6.1106162846410355 188.9975440661803 -62.60000000000005 + vertex -6.1106162846410355 188.9975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.7071067811865513 -0.7071067811865438 4.9737767925805e-17 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 -62.60000000000005 + endloop +endfacet +facet normal -0.7071067811865513 -0.7071067811865438 4.9737767925805e-17 + outer loop + vertex -6.110616284641007 200.19754406618026 -62.60000000000005 + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -6.110616284641007 200.19754406618026 617.3999999999999 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex -9.544930859691767 197.99754406618032 617.3999999999999 + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.544930859691767 197.99754406618032 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.544930859691767 197.99754406618032 617.3999999999999 + vertex -9.544930859691767 198.3975440661803 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.544930859691767 198.3975440661803 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.3771336778111648e-16 + outer loop + vertex -9.544930859691767 198.3975440661803 -62.60000000000005 + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -9.944930859691766 198.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + vertex -9.544930859691773 191.19754406618028 -62.60000000000005 + vertex -9.544930859691773 190.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex -9.544930859691773 191.19754406618028 -62.60000000000005 + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + vertex -9.544930859691773 191.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -8.14493085969177 191.19754406618028 617.3999999999999 + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -8.14493085969177 191.19754406618028 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -8.14493085969177 188.9975440661803 -62.60000000000005 + vertex -8.14493085969177 191.19754406618028 617.3999999999999 + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.7933533402912357 0.6087614290087201 2.488942827790613e-16 + outer loop + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + endloop +endfacet +facet normal -0.7933533402912357 0.6087614290087201 2.488942827790613e-16 + outer loop + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + vertex -9.652037640878309 204.30465084736684 617.3999999999999 + endloop +endfacet +facet normal -0.38268343236508157 0.9238795325112901 2.068490721426269e-16 + outer loop + vertex -9.444930859691762 204.46356946996474 -62.60000000000002 + vertex -9.203749904794282 204.56346989246933 617.3999999999999 + vertex -9.203749904794282 204.56346989246933 -62.60000000000002 + endloop +endfacet +facet normal -0.38268343236508157 0.9238795325112901 2.068490721426269e-16 + outer loop + vertex -9.203749904794282 204.56346989246933 617.3999999999999 + vertex -9.444930859691762 204.46356946996474 -62.60000000000002 + vertex -9.444930859691762 204.46356946996474 617.3999999999999 + endloop +endfacet +facet normal -0.13052619222007286 0.9914448613738076 1.6369160198769274e-16 + outer loop + vertex -9.203749904794282 204.56346989246933 -62.60000000000002 + vertex -8.94493085969176 204.5975440661803 617.3999999999999 + vertex -8.94493085969176 204.5975440661803 -62.60000000000002 + endloop +endfacet +facet normal -0.13052619222007286 0.9914448613738076 1.6369160198769274e-16 + outer loop + vertex -8.94493085969176 204.5975440661803 617.3999999999999 + vertex -9.203749904794282 204.56346989246933 -62.60000000000002 + vertex -9.203749904794282 204.56346989246933 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.377133677811165e-16 + outer loop + vertex -8.94493085969176 204.5975440661803 -62.60000000000002 + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.377133677811165e-16 + outer loop + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + vertex -8.94493085969176 204.5975440661803 -62.60000000000002 + vertex -8.94493085969176 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.6087614290087039 0.7933533402912479 2.3591011986529993e-16 + outer loop + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -9.444930859691762 204.46356946996474 617.3999999999999 + vertex -9.444930859691762 204.46356946996474 -62.60000000000002 + endloop +endfacet +facet normal -0.6087614290087039 0.7933533402912479 2.3591011986529993e-16 + outer loop + vertex -9.444930859691762 204.46356946996474 617.3999999999999 + vertex -9.652037640878309 204.30465084736684 -62.60000000000003 + vertex -9.652037640878309 204.30465084736684 617.3999999999999 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.0805319374395384e-16 + outer loop + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.944930859691766 198.3975440661803 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.0805319374395384e-16 + outer loop + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.9238795325112907 0.38268343236508046 2.4491671163867733e-16 + outer loop + vertex -9.910856685980832 203.8563631112828 617.3999999999999 + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + vertex -9.910856685980832 203.8563631112828 -62.600000000000044 + endloop +endfacet +facet normal -0.9238795325112907 0.38268343236508046 2.4491671163867733e-16 + outer loop + vertex -9.810956263476202 204.0975440661803 -62.60000000000003 + vertex -9.910856685980832 203.8563631112828 617.3999999999999 + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal -0.9914448613738098 0.1305261922200571 2.2424847134412203e-16 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -9.910856685980832 203.8563631112828 -62.600000000000044 + vertex -9.944930859691764 203.5975440661803 -62.60000000000005 + endloop +endfacet +facet normal -0.9914448613738098 0.1305261922200571 2.2424847134412203e-16 + outer loop + vertex -9.910856685980832 203.8563631112828 -62.600000000000044 + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -9.910856685980832 203.8563631112828 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -3.744930859691761 204.1975440661803 -62.60000000000005 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -3.744930859691761 204.1975440661803 -62.60000000000005 + vertex -3.744930859691761 204.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + vertex -3.744930859691761 204.1975440661803 617.3999999999999 + vertex -3.744930859691761 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 -2.080531937439538e-16 + outer loop + vertex -3.744930859691761 204.1975440661803 617.3999999999999 + vertex -3.744930859691761 204.5975440661803 -62.60000000000005 + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -3.344930859691773 202.79754406618025 -62.60000000000005 + vertex -3.344930859691773 202.79754406618025 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex -3.344930859691773 202.79754406618025 -62.60000000000005 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -5.544930859691769 202.79754406618025 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + vertex 3.1893837153589675 198.29754406618028 617.3999999999999 + vertex 3.1893837153589675 198.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 3.1893837153589675 198.29754406618028 617.3999999999999 + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + endloop +endfacet +facet normal 1.0 -8.834203210231486e-15 -2.0805319374395488e-16 + outer loop + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -3.344930859691773 202.79754406618025 -62.60000000000005 + vertex -3.344930859691762 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal 1.0 -8.834203210231486e-15 -2.0805319374395488e-16 + outer loop + vertex -3.344930859691773 202.79754406618025 -62.60000000000005 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -3.344930859691773 202.79754406618025 617.3999999999999 + endloop +endfacet +facet normal 0.7071067811865481 0.707106781186547 -4.9737767925803873e-17 + outer loop + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + vertex -3.0792454347425178 198.29754406618028 -62.60000000000005 + endloop +endfacet +facet normal 0.7071067811865481 0.707106781186547 -4.9737767925803873e-17 + outer loop + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 -62.60000000000005 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + endloop +endfacet +facet normal -0.7071067811865454 0.7071067811865499 2.4449388036193273e-16 + outer loop + vertex 3.1893837153589675 198.29754406618028 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + endloop +endfacet +facet normal -0.7071067811865454 0.7071067811865499 2.4449388036193273e-16 + outer loop + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 3.1893837153589675 198.29754406618028 -62.60000000000005 + vertex 3.1893837153589675 198.29754406618028 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex 3.4550691403082383 202.79754406618028 617.3999999999999 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 -1.377133677811165e-16 + outer loop + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 3.4550691403082383 202.79754406618028 617.3999999999999 + vertex 3.4550691403082383 202.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -1.0 2.5955428282843875e-14 2.080531937439573e-16 + outer loop + vertex 3.4550691403082383 202.79754406618028 617.3999999999999 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 3.4550691403082383 202.79754406618028 -62.60000000000005 + endloop +endfacet +facet normal -1.0 2.5955428282843875e-14 2.080531937439573e-16 + outer loop + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 3.4550691403082383 202.79754406618028 617.3999999999999 + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 -62.60000000000005 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 2.080531937439538e-16 + outer loop + vertex 5.655069140308238 202.79754406618028 -62.60000000000005 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + vertex 3.8550691403082737 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + vertex 3.455069140308275 204.1975440661803 -62.60000000000005 + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + endloop +endfacet +facet normal -1.0 4.302114220422487e-15 2.080531937439543e-16 + outer loop + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 3.8550691403082737 204.1975440661803 -62.60000000000005 + endloop +endfacet +facet normal -1.0 4.302114220422487e-15 2.080531937439543e-16 + outer loop + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + vertex 3.8550691403082755 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 9.055069140308243 204.5975440661803 617.3999999999999 + vertex 9.055069140308243 204.5975440661803 -62.60000000000008 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 1.3771336778111648e-16 + outer loop + vertex 9.055069140308243 204.5975440661803 617.3999999999999 + vertex 3.8550691403082755 204.5975440661803 -62.60000000000005 + vertex 3.8550691403082755 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.13052619222007356 0.9914448613738077 1.0937881967044586e-16 + outer loop + vertex 9.055069140308243 204.5975440661803 -62.60000000000008 + vertex 9.313888185410763 204.56346989246933 617.3999999999999 + vertex 9.313888185410763 204.56346989246933 -62.60000000000008 + endloop +endfacet +facet normal 0.13052619222007356 0.9914448613738077 1.0937881967044586e-16 + outer loop + vertex 9.313888185410763 204.56346989246933 617.3999999999999 + vertex 9.055069140308243 204.5975440661803 -62.60000000000008 + vertex 9.055069140308243 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 0.3826834323650824 0.9238795325112898 4.7612051549719663e-17 + outer loop + vertex 9.313888185410763 204.56346989246933 -62.60000000000008 + vertex 9.555069140308243 204.46356946996474 617.3999999999999 + vertex 9.555069140308243 204.46356946996474 -62.60000000000008 + endloop +endfacet +facet normal 0.3826834323650824 0.9238795325112898 4.7612051549719663e-17 + outer loop + vertex 9.555069140308243 204.46356946996474 617.3999999999999 + vertex 9.313888185410763 204.56346989246933 -62.60000000000008 + vertex 9.313888185410763 204.56346989246933 617.3999999999999 + endloop +endfacet +facet normal 0.6087614290087043 0.7933533402912479 -1.7399399201488106e-17 + outer loop + vertex 9.555069140308243 204.46356946996474 -62.60000000000008 + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 9.76217592149479 204.30465084736684 -62.600000000000065 + endloop +endfacet +facet normal 0.6087614290087043 0.7933533402912479 -1.7399399201488106e-17 + outer loop + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 9.555069140308243 204.46356946996474 -62.60000000000008 + vertex 9.555069140308243 204.46356946996474 617.3999999999999 + endloop +endfacet +facet normal 0.7933533402912394 0.6087614290087152 -8.122510965099075e-17 + outer loop + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + vertex 9.76217592149479 204.30465084736684 -62.600000000000065 + endloop +endfacet +facet normal 0.7933533402912394 0.6087614290087152 -8.122510965099075e-17 + outer loop + vertex 9.921094544092682 204.0975440661803 -62.600000000000065 + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 10.055069140308252 198.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 9.40055046237076 201.98343359401628 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 9.40055046237076 201.98343359401628 617.3999999999999 + vertex 9.240709786363354 201.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 9.240709786363354 201.5975440661803 617.3999999999999 + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + vertex 9.240709786363354 201.5975440661803 617.3999999999999 + vertex 8.98643999020673 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + vertex 8.98643999020673 201.2661732162818 617.3999999999999 + vertex 8.655069140308255 201.01190342012518 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + vertex 8.655069140308255 201.01190342012518 617.3999999999999 + vertex 8.269179612472286 200.85206274411777 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + vertex 8.269179612472286 200.85206274411777 617.3999999999999 + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + vertex 8.269179612472286 200.85206274411777 617.3999999999999 + vertex 7.855069140308252 200.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + vertex 7.855069140308252 200.79754406618028 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.40055046237076 201.98343359401628 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 9.455069140308245 202.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.455069140308245 202.3975440661803 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 9.40055046237075 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.40055046237075 202.81165453834433 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 9.24070978636334 203.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.24070978636334 203.1975440661803 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 8.986439990206707 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.986439990206707 203.52891491607878 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 8.655069140308228 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.655069140308228 203.7831847122354 617.3999999999999 + vertex 10.055069140308241 203.59754406618026 617.3999999999999 + vertex 10.02099496659731 203.8563631112828 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.655069140308228 203.7831847122354 617.3999999999999 + vertex 10.02099496659731 203.8563631112828 617.3999999999999 + vertex 8.269179612472257 203.94302538824283 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.269179612472257 203.94302538824283 617.3999999999999 + vertex 10.02099496659731 203.8563631112828 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.269179612472257 203.94302538824283 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + vertex 7.855069140308223 203.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 3.8550691403082755 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.8550691403082755 204.5975440661803 617.3999999999999 + vertex 9.76217592149479 204.30465084736684 617.3999999999999 + vertex 9.555069140308243 204.46356946996474 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.8550691403082755 204.5975440661803 617.3999999999999 + vertex 9.555069140308243 204.46356946996474 617.3999999999999 + vertex 9.313888185410763 204.56346989246933 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.8550691403082755 204.5975440661803 617.3999999999999 + vertex 9.313888185410763 204.56346989246933 617.3999999999999 + vertex 9.055069140308243 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 6.469428494253134 201.59754406618026 617.3999999999999 + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.469428494253134 201.59754406618026 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 6.723698290409766 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.723698290409766 201.2661732162818 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 7.0550691403082455 201.01190342012518 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 7.0550691403082455 201.01190342012518 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 7.440958668144216 200.85206274411775 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 7.440958668144216 200.85206274411775 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + vertex 7.855069140308252 200.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + vertex 6.469428494253134 201.59754406618026 617.3999999999999 + vertex 6.309587818245723 201.98343359401622 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + vertex 6.309587818245723 201.98343359401622 617.3999999999999 + vertex 6.255069140308228 202.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + vertex 6.255069140308228 202.39754406618027 617.3999999999999 + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.655069140308238 202.79754406618028 617.3999999999999 + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + vertex 3.4550691403082383 202.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.4550691403082383 202.79754406618028 617.3999999999999 + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 6.309587818245718 202.81165453834433 617.3999999999999 + vertex 6.469428494253122 203.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 6.469428494253122 203.19754406618028 617.3999999999999 + vertex 6.723698290409745 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 6.723698290409745 203.52891491607878 617.3999999999999 + vertex 7.0550691403082215 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 7.0550691403082215 203.7831847122354 617.3999999999999 + vertex 7.440958668144188 203.94302538824277 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 7.440958668144188 203.94302538824277 617.3999999999999 + vertex 7.855069140308223 203.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 7.855069140308223 203.9975440661803 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308275 204.1975440661803 617.3999999999999 + vertex 9.921094544092682 204.0975440661803 617.3999999999999 + vertex 3.8550691403082737 204.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -3.344930859691773 184.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -7.330820387527722 185.25206274411778 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -7.330820387527722 185.25206274411778 617.3999999999999 + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + vertex -9.810956263476214 185.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.330820387527722 185.25206274411778 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -6.944930859691755 185.41190342012518 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.944930859691755 185.41190342012518 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -6.613560009793279 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.613560009793279 185.6661732162818 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -6.359290213636655 185.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.359290213636655 185.9975440661803 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -6.199449537629252 186.38343359401625 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.199449537629252 186.38343359401625 617.3999999999999 + vertex -3.344930859691773 186.39754406618027 617.3999999999999 + vertex -5.544930859691772 186.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.199449537629252 186.38343359401625 617.3999999999999 + vertex -5.544930859691772 186.3975440661803 617.3999999999999 + vertex -6.144930859691763 186.7975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.144930859691763 186.7975440661803 617.3999999999999 + vertex -5.544930859691772 186.3975440661803 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.144930859691763 186.7975440661803 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -6.199449537629255 187.21165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.199449537629255 187.21165453834433 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -6.359290213636666 187.59754406618032 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.359290213636666 187.59754406618032 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -6.613560009793298 187.92891491607878 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.613560009793298 187.92891491607878 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -6.944930859691778 188.1831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.944930859691778 188.1831847122354 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -7.330820387527747 188.3430253882428 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.330820387527747 188.3430253882428 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.255069140308248 186.79754406618028 617.3999999999999 + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + vertex 6.309587818245743 186.38343359401625 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + vertex 6.255069140308248 186.79754406618028 617.3999999999999 + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 6.255069140308248 186.79754406618028 617.3999999999999 + vertex 6.309587818245721 187.21165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 6.309587818245721 187.21165453834433 617.3999999999999 + vertex 6.469428494253139 187.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 6.469428494253139 187.5975440661803 617.3999999999999 + vertex 6.723698290409754 187.92891491607875 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 6.723698290409754 187.92891491607875 617.3999999999999 + vertex 7.055069140308225 188.1831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 7.055069140308225 188.1831847122354 617.3999999999999 + vertex 7.440958668144192 188.3430253882428 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 7.440958668144192 188.3430253882428 617.3999999999999 + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.313888185410756 184.6316182398912 617.3999999999999 + vertex 3.855069140308194 184.59754406618026 617.3999999999999 + vertex 9.055069140308234 184.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.855069140308194 184.59754406618026 617.3999999999999 + vertex 9.313888185410756 184.6316182398912 617.3999999999999 + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + vertex 9.313888185410756 184.6316182398912 617.3999999999999 + vertex 9.555069140308234 184.73151866239584 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + vertex 9.555069140308234 184.73151866239584 617.3999999999999 + vertex 9.762175921494782 184.8904372849937 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + vertex 9.762175921494782 184.8904372849937 617.3999999999999 + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.855069140308196 184.99754406618027 617.3999999999999 + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + vertex 7.440958668144235 185.25206274411778 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308196 184.99754406618027 617.3999999999999 + vertex 7.440958668144235 185.25206274411778 617.3999999999999 + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + vertex 7.440958668144235 185.25206274411778 617.3999999999999 + vertex 7.0550691403082455 185.41190342012518 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + vertex 7.0550691403082455 185.41190342012518 617.3999999999999 + vertex 6.723698290409774 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + vertex 6.723698290409774 185.6661732162818 617.3999999999999 + vertex 6.469428494253137 185.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + vertex 6.469428494253137 185.9975440661803 617.3999999999999 + vertex 6.309587818245743 186.38343359401625 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.455069140308254 186.39754406618027 617.3999999999999 + vertex 6.309587818245743 186.38343359401625 617.3999999999999 + vertex 5.655069140308249 186.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -8.944930859691771 184.5975440661803 617.3999999999999 + vertex -3.7449308596917725 184.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.944930859691771 184.5975440661803 617.3999999999999 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -9.203749904794295 184.63161823989122 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.203749904794295 184.63161823989122 617.3999999999999 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -9.444930859691773 184.73151866239584 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.444930859691773 184.73151866239584 617.3999999999999 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -9.652037640878321 184.89043728499374 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.652037640878321 184.89043728499374 617.3999999999999 + vertex -3.7449308596917725 184.99754406618027 617.3999999999999 + vertex -9.810956263476214 185.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + vertex 9.921094544092673 185.09754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 7.855069140308268 185.19754406618028 617.3999999999999 + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + vertex 8.2691796124723 185.25206274411778 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.2691796124723 185.25206274411778 617.3999999999999 + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + vertex 8.655069140308266 185.4119034201252 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.655069140308266 185.4119034201252 617.3999999999999 + vertex 10.020994966597302 185.33872502107775 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.655069140308266 185.4119034201252 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + vertex 8.986439990206739 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.986439990206739 185.6661732162818 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + vertex 9.240709786363354 185.99754406618032 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.240709786363354 185.99754406618032 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + vertex 9.40055046237077 186.38343359401628 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.40055046237077 186.38343359401628 617.3999999999999 + vertex 10.055069140308234 185.59754406618026 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.40055046237077 186.38343359401628 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 9.455069140308243 186.7975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.455069140308243 186.7975440661803 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 9.400550462370747 187.21165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.400550462370747 187.21165453834433 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 9.240709786363354 187.59754406618032 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.240709786363354 187.59754406618032 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 8.986439990206716 187.92891491607878 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.986439990206716 187.92891491607878 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 8.655069140308244 188.18318471223543 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.655069140308244 188.18318471223543 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 8.269179612472279 188.3430253882428 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.269179612472279 188.3430253882428 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 7.855069140308223 188.3975440661803 617.3999999999999 + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 10.05506914030822 190.79754406618022 617.3999999999999 + vertex 9.65506914030822 190.79754406618022 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + vertex 9.65506914030822 190.79754406618022 617.3999999999999 + vertex 8.255069140308246 191.19754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308246 191.19754406618026 617.3999999999999 + vertex 9.65506914030822 190.79754406618022 617.3999999999999 + vertex 9.655069140308221 191.19754406618023 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + vertex 3.1893837153589675 198.29754406618028 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.1893837153589675 198.29754406618028 617.3999999999999 + vertex 6.220754565257503 200.19754406618028 617.3999999999999 + vertex 5.655069140308237 200.76322949112952 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 8.255069140308237 197.9975440661803 617.3999999999999 + vertex 9.655069140308251 197.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 8.255069140308237 197.9975440661803 617.3999999999999 + vertex 9.655069140308253 198.39754406618027 617.3999999999999 + vertex 8.255069140308239 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 0.75388056208504 191.98954433519978 617.3999999999999 + vertex 0.055069140308233296 191.89754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 0.75388056208504 191.98954433519978 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 1.4050691403082352 192.2592754759623 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 1.4050691403082352 192.2592754759623 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 1.9642574495119138 192.6883557569766 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 1.9642574495119138 192.6883557569766 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 2.39333773052622 193.24754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 2.39333773052622 193.24754406618027 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 2.6630688712887207 193.89873264440348 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 2.6630688712887207 193.89873264440348 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 2.6630688712887207 193.89873264440348 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 2.755069140308237 194.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 2.755069140308237 194.59754406618026 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 2.663068871288722 195.29635548795707 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 2.663068871288722 195.29635548795707 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 2.393337730526221 195.94754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 2.393337730526221 195.94754406618028 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 1.964257449511918 196.50673237538396 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 1.964257449511918 196.50673237538396 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 1.4050691403082394 196.93581265639824 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 1.4050691403082394 196.93581265639824 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 0.7538805620850456 197.20554379716077 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 0.7538805620850456 197.20554379716077 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 0.05506914030823612 197.29754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 0.05506914030823612 197.29754406618028 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + vertex -6.110616284641007 200.19754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + vertex 3.7550691403082355 197.73185864123104 617.3999999999999 + vertex 3.1893837153589675 198.29754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.110616284641007 200.19754406618026 617.3999999999999 + vertex -3.0792454347425178 198.29754406618028 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.110616284641007 200.19754406618026 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -3.344930859691773 202.79754406618025 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -6.199449537629263 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.199449537629263 202.81165453834433 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -6.359290213636658 203.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.359290213636658 203.1975440661803 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -6.613560009793296 203.52891491607878 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.613560009793296 203.52891491607878 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -6.944930859691767 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.944930859691767 203.7831847122354 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -7.330820387527756 203.94302538824277 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.330820387527756 203.94302538824277 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -7.744930859691788 203.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.744930859691788 203.9975440661803 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + vertex -3.344930859691762 204.1975440661803 617.3999999999999 + vertex -3.744930859691761 204.1975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + vertex -3.744930859691761 204.1975440661803 617.3999999999999 + vertex -9.652037640878309 204.30465084736684 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.652037640878309 204.30465084736684 617.3999999999999 + vertex -3.744930859691761 204.1975440661803 617.3999999999999 + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.652037640878309 204.30465084736684 617.3999999999999 + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + vertex -9.444930859691762 204.46356946996474 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.444930859691762 204.46356946996474 617.3999999999999 + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + vertex -9.203749904794282 204.56346989246933 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.203749904794282 204.56346989246933 617.3999999999999 + vertex -3.744930859691761 204.5975440661803 617.3999999999999 + vertex -8.94493085969176 204.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -9.544930859691767 197.99754406618032 617.3999999999999 + vertex -8.144930859691767 197.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.544930859691767 197.99754406618032 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -9.544930859691767 198.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.544930859691767 198.3975440661803 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -9.130571505746877 201.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -9.130571505746877 201.5975440661803 617.3999999999999 + vertex -9.290412181754272 201.98343359401625 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691766 198.3975440661803 617.3999999999999 + vertex -9.290412181754272 201.98343359401625 617.3999999999999 + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.130571505746877 201.5975440661803 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -8.876301709590237 201.2661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.876301709590237 201.2661732162818 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -8.544930859691766 201.01190342012518 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.544930859691766 201.01190342012518 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -8.1590413318558 200.85206274411777 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.1590413318558 200.85206274411777 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -7.744930859691745 200.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.744930859691745 200.79754406618028 617.3999999999999 + vertex -8.144930859691767 200.19754406618028 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -9.290412181754272 201.98343359401625 617.3999999999999 + vertex -9.344930859691765 202.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -9.344930859691765 202.39754406618027 617.3999999999999 + vertex -9.290412181754292 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -9.290412181754292 202.81165453834433 617.3999999999999 + vertex -9.130571505746875 203.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -9.130571505746875 203.19754406618028 617.3999999999999 + vertex -8.876301709590258 203.52891491607872 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -8.876301709590258 203.52891491607872 617.3999999999999 + vertex -8.544930859691787 203.7831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691764 203.5975440661803 617.3999999999999 + vertex -8.544930859691787 203.7831847122354 617.3999999999999 + vertex -9.910856685980832 203.8563631112828 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.910856685980832 203.8563631112828 617.3999999999999 + vertex -8.544930859691787 203.7831847122354 617.3999999999999 + vertex -8.15904133185582 203.94302538824277 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.910856685980832 203.8563631112828 617.3999999999999 + vertex -8.15904133185582 203.94302538824277 617.3999999999999 + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.810956263476202 204.0975440661803 617.3999999999999 + vertex -8.15904133185582 203.94302538824277 617.3999999999999 + vertex -7.744930859691788 203.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + vertex -7.330820387527713 200.85206274411777 617.3999999999999 + vertex -7.744930859691745 200.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.330820387527713 200.85206274411777 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + vertex -6.9449308596917465 201.0119034201252 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.9449308596917465 201.0119034201252 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + vertex -6.613560009793275 201.26617321628183 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.613560009793275 201.26617321628183 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + vertex -6.359290213636661 201.59754406618032 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.359290213636661 201.59754406618032 617.3999999999999 + vertex -5.544930859691772 200.76322949112952 617.3999999999999 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.359290213636661 201.59754406618032 617.3999999999999 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -6.199449537629244 201.98343359401625 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.199449537629244 201.98343359401625 617.3999999999999 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -6.144930859691768 202.3975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.144930859691768 202.3975440661803 617.3999999999999 + vertex -5.544930859691769 202.79754406618025 617.3999999999999 + vertex -6.199449537629263 202.81165453834433 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 6.220754565257486 188.99754406618027 617.3999999999999 + vertex 3.189383715358996 190.89754406618025 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 6.220754565257486 188.99754406618027 617.3999999999999 + vertex 5.6550691403082505 188.431858641231 617.3999999999999 + vertex 8.255069140308246 188.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.189383715358996 190.89754406618025 617.3999999999999 + vertex 6.220754565257486 188.99754406618027 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex 3.189383715358996 190.89754406618025 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex 3.7550691403082315 191.46322949112954 617.3999999999999 + vertex 0.055069140308233296 191.89754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex 0.055069140308233296 191.89754406618027 617.3999999999999 + vertex -0.6437422814685734 191.98954433519978 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -0.6437422814685734 191.98954433519978 617.3999999999999 + vertex -1.294930859691767 192.2592754759623 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -1.294930859691767 192.2592754759623 617.3999999999999 + vertex -1.854119168895446 192.6883557569766 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -1.854119168895446 192.6883557569766 617.3999999999999 + vertex -2.2831994499097514 193.24754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -2.2831994499097514 193.24754406618027 617.3999999999999 + vertex -2.552930590672251 193.89873264440348 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + vertex -2.552930590672251 193.89873264440348 617.3999999999999 + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -2.552930590672251 193.89873264440348 617.3999999999999 + vertex -2.644930859691766 194.59754406618026 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -2.644930859691766 194.59754406618026 617.3999999999999 + vertex -2.5529305906722497 195.2963554879571 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -2.5529305906722497 195.2963554879571 617.3999999999999 + vertex -2.28319944990975 195.94754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -2.28319944990975 195.94754406618028 617.3999999999999 + vertex -1.8541191688954417 196.50673237538396 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -1.8541191688954417 196.50673237538396 617.3999999999999 + vertex -1.2949308596917628 196.93581265639824 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -1.2949308596917628 196.93581265639824 617.3999999999999 + vertex -0.6437422814685692 197.20554379716077 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.644930859691753 197.73185864123099 617.3999999999999 + vertex -0.6437422814685692 197.20554379716077 617.3999999999999 + vertex 0.05506914030823612 197.29754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + vertex -6.1106162846410355 188.9975440661803 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -6.1106162846410355 188.9975440661803 617.3999999999999 + vertex -3.079245434742501 190.89754406618027 617.3999999999999 + vertex -3.6449308596917698 191.4632294911295 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.14493085969177 191.19754406618028 617.3999999999999 + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + vertex -8.14493085969177 191.19754406618028 617.3999999999999 + vertex -9.544930859691773 191.19754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + vertex -9.810956263476214 185.0975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + vertex -7.744930859691757 185.19754406618028 617.3999999999999 + vertex -8.159041331855791 185.25206274411775 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + vertex -8.159041331855791 185.25206274411775 617.3999999999999 + vertex -8.54493085969176 185.41190342012518 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.910856685980843 185.33872502107778 617.3999999999999 + vertex -8.54493085969176 185.41190342012518 617.3999999999999 + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -8.54493085969176 185.41190342012518 617.3999999999999 + vertex -8.87630170959024 185.6661732162818 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -8.87630170959024 185.6661732162818 617.3999999999999 + vertex -9.130571505746875 185.99754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -9.130571505746875 185.99754406618027 617.3999999999999 + vertex -9.290412181754286 186.38343359401622 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691775 185.5975440661803 617.3999999999999 + vertex -9.290412181754286 186.38343359401622 617.3999999999999 + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -9.290412181754286 186.38343359401622 617.3999999999999 + vertex -9.344930859691782 186.79754406618028 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -9.344930859691782 186.79754406618028 617.3999999999999 + vertex -9.290412181754292 187.2116545383443 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -9.290412181754292 187.2116545383443 617.3999999999999 + vertex -9.130571505746886 187.5975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -9.130571505746886 187.5975440661803 617.3999999999999 + vertex -8.87630170959026 187.92891491607875 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -8.87630170959026 187.92891491607875 617.3999999999999 + vertex -8.544930859691787 188.1831847122354 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -8.544930859691787 188.1831847122354 617.3999999999999 + vertex -8.159041331855816 188.34302538824278 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -8.159041331855816 188.34302538824278 617.3999999999999 + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + vertex -7.7449308596917845 188.39754406618027 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + vertex -5.544930859691769 188.43185864123106 617.3999999999999 + vertex -6.1106162846410355 188.9975440661803 617.3999999999999 + endloop +endfacet +facet normal 3.3533729404294705e-19 -2.2196452394793015e-19 1.0 + outer loop + vertex -9.944930859691773 190.79754406618028 617.3999999999999 + vertex -8.14493085969177 188.9975440661803 617.3999999999999 + vertex -9.544930859691773 190.79754406618028 617.3999999999999 + endloop +endfacet +facet normal -0.5352237960733263 -0.8447102983371629 1.045809941340471e-16 + outer loop + vertex 18.436158735513036 201.68385752189488 -3.000000000000062 + vertex 19.691403178850077 200.88851183085106 -62.600000000000065 + vertex 19.691403178850077 200.8885118308511 -3.000000000000062 + endloop +endfacet +facet normal -0.5352237960733263 -0.8447102983371629 1.045809941340471e-16 + outer loop + vertex 19.691403178850077 200.88851183085106 -62.600000000000065 + vertex 18.436158735513036 201.68385752189488 -3.000000000000062 + vertex 18.436158735513036 201.68385752189488 -62.600000000000065 + endloop +endfacet +facet normal -0.6684424840618564 -0.7437638371830234 7.69044552122959e-17 + outer loop + vertex 23.24248336816515 198.19768080857895 -3.000000000000062 + vertex 24.347720779875264 197.20437136809883 -62.600000000000065 + vertex 24.347720779875264 197.20437136809886 -3.000000000000062 + endloop +endfacet +facet normal -0.6684424840618564 -0.7437638371830234 7.69044552122959e-17 + outer loop + vertex 24.347720779875264 197.20437136809883 -62.600000000000065 + vertex 23.24248336816515 198.19768080857895 -3.000000000000062 + vertex 23.24248336816515 198.19768080857895 -62.600000000000065 + endloop +endfacet +facet normal 0.6367513322442926 -0.7710692192566881 1.820889389375274e-16 + outer loop + vertex -23.132345087548707 198.19768080857898 -3.000000000000062 + vertex -21.986531718390673 199.14389701212295 -62.600000000000065 + vertex -21.986531718390673 199.14389701212298 -3.000000000000062 + endloop +endfacet +facet normal 0.6367513322442926 -0.7710692192566881 1.820889389375274e-16 + outer loop + vertex -21.986531718390673 199.14389701212295 -62.600000000000065 + vertex -23.132345087548707 198.19768080857898 -3.000000000000062 + vertex -23.132345087548707 198.19768080857895 -62.600000000000065 + endloop +endfacet +facet normal -0.34815064323678235 -0.9374386004500854 1.3498487096513963e-16 + outer loop + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 13.116314124512934 204.32079473497333 -62.600000000000065 + vertex 13.116314124512934 204.32079473497333 -3.000000000000062 + endloop +endfacet +facet normal -0.34815064323678235 -0.9374386004500854 1.3498487096513963e-16 + outer loop + vertex 13.116314124512934 204.32079473497333 -62.600000000000065 + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + endloop +endfacet +facet normal 0.8660254037844397 0.49999999999999806 -1.962553415389866e-17 + outer loop + vertex 12.80506914030825 186.78502419417032 -3.0000000000000733 + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 12.80506914030825 186.78502419417032 -62.60000000000008 + endloop +endfacet +facet normal 0.8660254037844397 0.49999999999999806 -1.962553415389866e-17 + outer loop + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 12.80506914030825 186.78502419417032 -3.0000000000000733 + vertex 13.997857139629506 184.71905477668747 -3.0000000000000733 + endloop +endfacet +facet normal -0.7562861433211046 -0.6542409872672988 5.469233483307166e-17 + outer loop + vertex 27.40101177575885 193.95965933221277 -3.000000000000062 + vertex 26.428805842568213 195.08350496407658 -62.600000000000065 + vertex 27.40101177575885 193.95965933221274 -62.600000000000065 + endloop +endfacet +facet normal -0.7562861433211046 -0.6542409872672988 5.469233483307166e-17 + outer loop + vertex 26.428805842568213 195.08350496407658 -62.600000000000065 + vertex 27.40101177575885 193.95965933221277 -3.000000000000062 + vertex 26.428805842568213 195.08350496407658 -3.000000000000062 + endloop +endfacet +facet normal -0.7282622292749885 -0.6852985666199982 6.220955760198371e-17 + outer loop + vertex 26.428805842568213 195.08350496407658 -3.000000000000062 + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + vertex 26.428805842568213 195.08350496407658 -62.600000000000065 + endloop +endfacet +facet normal -0.7282622292749885 -0.6852985666199982 6.220955760198371e-17 + outer loop + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + vertex 26.428805842568213 195.08350496407658 -3.000000000000062 + vertex 25.410448164829532 196.1657068957793 -3.000000000000062 + endloop +endfacet +facet normal 0.3870523431386321 -0.9220577442171909 1.889253497189432e-16 + outer loop + vertex -14.376359044152096 203.74563268952207 -3.000000000000062 + vertex -13.00617584389643 204.32079473497333 -62.600000000000065 + vertex -13.00617584389643 204.32079473497333 -3.000000000000062 + endloop +endfacet +facet normal 0.3870523431386321 -0.9220577442171909 1.889253497189432e-16 + outer loop + vertex -13.00617584389643 204.32079473497333 -62.600000000000065 + vertex -14.376359044152096 203.74563268952207 -3.000000000000062 + vertex -14.376359044152096 203.74563268952207 -62.600000000000065 + endloop +endfacet +facet normal 0.462756929808682 -0.8864852079499369 1.8861380718886254e-16 + outer loop + vertex -17.038610704038266 202.4260094700736 -3.000000000000062 + vertex -15.721288500709916 203.11366897404972 -62.600000000000065 + vertex -15.721288500709916 203.11366897404974 -3.000000000000062 + endloop +endfacet +facet normal 0.462756929808682 -0.8864852079499369 1.8861380718886254e-16 + outer loop + vertex -15.721288500709916 203.11366897404972 -62.600000000000065 + vertex -17.038610704038266 202.4260094700736 -3.000000000000062 + vertex -17.038610704038266 202.42600947007358 -62.600000000000065 + endloop +endfacet +facet normal 0.6039459209966634 -0.7970252972845291 1.8404317463084559e-16 + outer loop + vertex -21.986531718390673 199.14389701212298 -3.000000000000062 + vertex -20.80214746548775 200.04136418270141 -62.600000000000065 + vertex -20.80214746548775 200.04136418270141 -3.000000000000062 + endloop +endfacet +facet normal 0.6039459209966634 -0.7970252972845291 1.8404317463084559e-16 + outer loop + vertex -20.80214746548775 200.04136418270141 -62.600000000000065 + vertex -21.986531718390673 199.14389701212298 -3.000000000000062 + vertex -21.986531718390673 199.14389701212295 -62.600000000000065 + endloop +endfacet +facet normal -0.6039459209966644 -0.7970252972845284 9.106128389727631e-17 + outer loop + vertex 20.912285746104196 200.04136418270141 -3.000000000000062 + vertex 22.09666999900712 199.14389701212292 -62.600000000000065 + vertex 22.09666999900712 199.14389701212295 -3.000000000000062 + endloop +endfacet +facet normal -0.6039459209966644 -0.7970252972845284 9.106128389727631e-17 + outer loop + vertex 22.09666999900712 199.14389701212292 -62.600000000000065 + vertex 20.912285746104196 200.04136418270141 -3.000000000000062 + vertex 20.912285746104196 200.04136418270141 -62.600000000000065 + endloop +endfacet +facet normal -0.6989639196910222 -0.7151569331064074 6.96179190577177e-17 + outer loop + vertex 24.347720779875264 197.20437136809886 -3.000000000000062 + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + vertex 25.410448164829532 196.1657068957793 -3.000000000000062 + endloop +endfacet +facet normal -0.6989639196910222 -0.7151569331064074 6.96179190577177e-17 + outer loop + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + vertex 24.347720779875264 197.20437136809886 -3.000000000000062 + vertex 24.347720779875264 197.20437136809883 -62.600000000000065 + endloop +endfacet +facet normal 0.5700836569343717 -0.8215866503883409 1.8567535078147348e-16 + outer loop + vertex -20.80214746548775 200.04136418270141 -3.000000000000062 + vertex -19.58126489823363 200.8885118308511 -62.600000000000065 + vertex -19.58126489823363 200.8885118308511 -3.000000000000062 + endloop +endfacet +facet normal 0.5700836569343717 -0.8215866503883409 1.8567535078147348e-16 + outer loop + vertex -19.58126489823363 200.8885118308511 -62.600000000000065 + vertex -20.80214746548775 200.04136418270141 -3.000000000000062 + vertex -20.80214746548775 200.04136418270141 -62.600000000000065 + endloop +endfacet +facet normal -0.4627569298086952 -0.8864852079499299 1.1736899405614529e-16 + outer loop + vertex 15.831426781326385 203.11366897404974 -3.000000000000062 + vertex 17.148748984654713 202.42600947007355 -62.600000000000065 + vertex 17.148748984654713 202.42600947007358 -3.000000000000062 + endloop +endfacet +facet normal -0.4627569298086952 -0.8864852079499299 1.1736899405614529e-16 + outer loop + vertex 17.148748984654713 202.42600947007355 -62.600000000000065 + vertex 15.831426781326385 203.11366897404974 -3.000000000000062 + vertex 15.831426781326385 203.11366897404972 -62.600000000000065 + endloop +endfacet +facet normal 0.7282622292749873 -0.6852985666199997 1.743308530253973e-16 + outer loop + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + vertex -26.318667561951766 195.08350496407658 -62.600000000000065 + vertex -25.300309884213064 196.16570689577932 -62.600000000000065 + endloop +endfacet +facet normal 0.7282622292749873 -0.6852985666199997 1.743308530253973e-16 + outer loop + vertex -26.318667561951766 195.08350496407658 -62.600000000000065 + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + vertex -26.318667561951766 195.08350496407658 -3.000000000000062 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -7.697865611885053e-17 + outer loop + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + vertex 10.30506914030826 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -7.697865611885053e-17 + outer loop + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + vertex 10.305069140308266 204.87612362680997 -3.000000000000062 + endloop +endfacet +facet normal 1.0 -7.771561172376093e-16 7.697865611885053e-17 + outer loop + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 12.80506914030825 186.78502419417032 -62.60000000000008 + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + endloop +endfacet +facet normal 1.0 -7.771561172376093e-16 7.697865611885053e-17 + outer loop + vertex 12.80506914030825 186.78502419417032 -62.60000000000008 + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 12.80506914030825 186.78502419417032 -3.0000000000000733 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -7.697865611885053e-17 + outer loop + vertex -12.694930859691725 186.78502419417035 -3.000000000000062 + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -12.694930859691725 186.78502419417032 -62.600000000000065 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -7.697865611885053e-17 + outer loop + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -12.694930859691725 186.78502419417035 -3.000000000000062 + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + endloop +endfacet +facet normal -0.49942734013696766 -0.8663557767590137 1.1107217741834915e-16 + outer loop + vertex 17.148748984654713 202.42600947007358 -3.000000000000062 + vertex 18.436158735513036 201.68385752189488 -62.600000000000065 + vertex 18.436158735513036 201.68385752189488 -3.000000000000062 + endloop +endfacet +facet normal -0.49942734013696766 -0.8663557767590137 1.1107217741834915e-16 + outer loop + vertex 18.436158735513036 201.68385752189488 -62.600000000000065 + vertex 17.148748984654713 202.42600947007358 -3.000000000000062 + vertex 17.148748984654713 202.42600947007355 -62.600000000000065 + endloop +endfacet +facet normal 0.4994273401369732 -0.8663557767590104 1.8796266836386054e-16 + outer loop + vertex -18.326020454896568 201.68385752189488 -3.000000000000062 + vertex -17.038610704038266 202.42600947007358 -62.600000000000065 + vertex -17.038610704038266 202.4260094700736 -3.000000000000062 + endloop +endfacet +facet normal 0.4994273401369732 -0.8663557767590104 1.8796266836386054e-16 + outer loop + vertex -17.038610704038266 202.42600947007358 -62.600000000000065 + vertex -18.326020454896568 201.68385752189488 -3.000000000000062 + vertex -18.326020454896568 201.68385752189488 -62.600000000000065 + endloop +endfacet +facet normal -0.42527673511601083 -0.9050633671567236 1.2346042516618483e-16 + outer loop + vertex 14.486497324768576 203.74563268952207 -3.000000000000062 + vertex 15.831426781326385 203.11366897404972 -62.600000000000065 + vertex 15.831426781326385 203.11366897404974 -3.000000000000062 + endloop +endfacet +facet normal -0.42527673511601083 -0.9050633671567236 1.2346042516618483e-16 + outer loop + vertex 15.831426781326385 203.11366897404972 -62.600000000000065 + vertex 14.486497324768576 203.74563268952207 -3.000000000000062 + vertex 14.486497324768576 203.74563268952207 -62.600000000000065 + endloop +endfacet +facet normal -0.636751332244289 -0.7710692192566911 8.405641526142167e-17 + outer loop + vertex 22.09666999900712 199.14389701212295 -3.000000000000062 + vertex 23.24248336816515 198.19768080857895 -62.600000000000065 + vertex 23.24248336816515 198.19768080857895 -3.000000000000062 + endloop +endfacet +facet normal -0.636751332244289 -0.7710692192566911 8.405641526142167e-17 + outer loop + vertex 23.24248336816515 198.19768080857895 -62.600000000000065 + vertex 22.09666999900712 199.14389701212295 -3.000000000000062 + vertex 22.09666999900712 199.14389701212292 -62.600000000000065 + endloop +endfacet +facet normal 0.3481506432367668 -0.9374386004500911 1.8858520825170114e-16 + outer loop + vertex -13.00617584389643 204.32079473497333 -3.000000000000062 + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + endloop +endfacet +facet normal 0.3481506432367668 -0.9374386004500911 1.8858520825170114e-16 + outer loop + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -13.00617584389643 204.32079473497333 -3.000000000000062 + vertex -13.00617584389643 204.32079473497333 -62.600000000000065 + endloop +endfacet +facet normal 0.42527673511602226 -0.9050633671567184 1.8893488826187048e-16 + outer loop + vertex -15.721288500709916 203.11366897404974 -3.000000000000062 + vertex -14.376359044152096 203.74563268952207 -62.600000000000065 + vertex -14.376359044152096 203.74563268952207 -3.000000000000062 + endloop +endfacet +facet normal 0.42527673511602226 -0.9050633671567184 1.8893488826187048e-16 + outer loop + vertex -14.376359044152096 203.74563268952207 -62.600000000000065 + vertex -15.721288500709916 203.11366897404974 -3.000000000000062 + vertex -15.721288500709916 203.11366897404972 -62.600000000000065 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 7.697865611885053e-17 + outer loop + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex -10.194930859691729 191.96896450555056 -62.600000000000065 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 7.697865611885053e-17 + outer loop + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -10.194930859691729 184.37612362681003 -3.000000000000062 + endloop +endfacet +facet normal 0.7562861433211037 -0.6542409872672998 1.711281167414056e-16 + outer loop + vertex -26.318667561951766 195.08350496407658 -3.000000000000062 + vertex -27.290873495142403 193.95965933221274 -62.600000000000065 + vertex -26.318667561951766 195.08350496407658 -62.600000000000065 + endloop +endfacet +facet normal 0.7562861433211037 -0.6542409872672998 1.711281167414056e-16 + outer loop + vertex -27.290873495142403 193.95965933221274 -62.600000000000065 + vertex -26.318667561951766 195.08350496407658 -3.000000000000062 + vertex -27.290873495142403 193.95965933221277 -3.000000000000062 + endloop +endfacet +facet normal -0.7829866224180543 -0.6220385431099646 4.7079405236779684e-17 + outer loop + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 27.40101177575885 193.95965933221274 -62.600000000000065 + vertex 28.325364688606378 192.79613663226192 -62.600000000000065 + endloop +endfacet +facet normal -0.7829866224180543 -0.6220385431099646 4.7079405236779684e-17 + outer loop + vertex 27.40101177575885 193.95965933221274 -62.600000000000065 + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 27.40101177575885 193.95965933221277 -3.000000000000062 + endloop +endfacet +facet normal 0.6684424840618629 -0.7437638371830175 1.798160634439509e-16 + outer loop + vertex -24.237582499258796 197.2043713680989 -3.000000000000062 + vertex -23.132345087548707 198.19768080857895 -62.600000000000065 + vertex -23.132345087548707 198.19768080857898 -3.000000000000062 + endloop +endfacet +facet normal 0.6684424840618629 -0.7437638371830175 1.798160634439509e-16 + outer loop + vertex -23.132345087548707 198.19768080857895 -62.600000000000065 + vertex -24.237582499258796 197.2043713680989 -3.000000000000062 + vertex -24.237582499258796 197.20437136809886 -62.600000000000065 + endloop +endfacet +facet normal 0.6989639196910173 -0.7151569331064122 1.7722852548447606e-16 + outer loop + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + vertex -24.237582499258796 197.20437136809886 -62.600000000000065 + vertex -24.237582499258796 197.2043713680989 -3.000000000000062 + endloop +endfacet +facet normal 0.6989639196910173 -0.7151569331064122 1.7722852548447606e-16 + outer loop + vertex -24.237582499258796 197.20437136809886 -62.600000000000065 + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + vertex -25.300309884213064 196.16570689577932 -62.600000000000065 + endloop +endfacet +facet normal -0.5700836569343625 -0.8215866503883473 9.790680320921995e-17 + outer loop + vertex 19.691403178850077 200.8885118308511 -3.000000000000062 + vertex 20.912285746104196 200.04136418270141 -62.600000000000065 + vertex 20.912285746104196 200.04136418270141 -3.000000000000062 + endloop +endfacet +facet normal -0.5700836569343625 -0.8215866503883473 9.790680320921995e-17 + outer loop + vertex 20.912285746104196 200.04136418270141 -62.600000000000065 + vertex 19.691403178850077 200.8885118308511 -3.000000000000062 + vertex 19.691403178850077 200.88851183085106 -62.600000000000065 + endloop +endfacet +facet normal -0.38705234313864506 -0.9220577442171854 1.293358112740132e-16 + outer loop + vertex 13.116314124512934 204.32079473497333 -3.000000000000062 + vertex 14.486497324768576 203.74563268952207 -62.600000000000065 + vertex 14.486497324768576 203.74563268952207 -3.000000000000062 + endloop +endfacet +facet normal -0.38705234313864506 -0.9220577442171854 1.293358112740132e-16 + outer loop + vertex 14.486497324768576 203.74563268952207 -62.600000000000065 + vertex 13.116314124512934 204.32079473497333 -3.000000000000062 + vertex 13.116314124512934 204.32079473497333 -62.600000000000065 + endloop +endfacet +facet normal 0.08715574274765935 0.9961946980917455 -1.652161531954166e-16 + outer loop + vertex -21.53658740175749 152.53246326263664 -62.600000000000065 + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + endloop +endfacet +facet normal 0.08715574274765935 0.9961946980917455 -1.652161531954166e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -21.53658740175749 152.53246326263664 -62.600000000000065 + vertex -21.53658740175749 152.53246326263667 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -8.194930859691734 191.96896450555056 -62.600000000000065 + vertex -8.194930859691734 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -8.194930859691734 191.96896450555056 -62.600000000000065 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -10.194930859691729 191.96896450555056 -62.600000000000065 + endloop +endfacet +facet normal -1.0 7.771561172376093e-16 -7.697865611885055e-17 + outer loop + vertex 8.305069140308264 191.96896450555053 -62.600000000000065 + vertex 8.305069140308264 197.22612362681 -3.000000000000062 + vertex 8.305069140308264 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal -1.0 7.771561172376093e-16 -7.697865611885055e-17 + outer loop + vertex 8.305069140308264 197.22612362681 -3.000000000000062 + vertex 8.305069140308264 191.96896450555053 -62.600000000000065 + vertex 8.305069140308264 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 7.697865611885055e-17 + outer loop + vertex -8.194930859691734 197.22612362681 -3.000000000000062 + vertex -8.194930859691734 191.96896450555056 -62.600000000000065 + vertex -8.194930859691734 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 7.697865611885055e-17 + outer loop + vertex -8.194930859691734 191.96896450555056 -62.600000000000065 + vertex -8.194930859691734 197.22612362681 -3.000000000000062 + vertex -8.194930859691734 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -0.5000000000000008 -0.8660254037844383 1.6298684457213916e-16 + outer loop + vertex -29.842081742052876 190.46620886682183 -3.000000000000062 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + endloop +endfacet +facet normal -0.5000000000000008 -0.8660254037844383 1.6298684457213916e-16 + outer loop + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -29.842081742052876 190.46620886682183 -3.000000000000062 + vertex -29.842081742052876 190.4662088668218 -62.600000000000065 + endloop +endfacet +facet normal -0.5000000000000008 -0.8660254037844383 1.6298684457213916e-16 + outer loop + vertex -29.842081742052876 190.4662088668218 -62.600000000000065 + vertex -29.842081742052876 190.46620886682183 -3.000000000000062 + vertex -32.44493085969176 191.9689645055506 -3.000000000000062 + endloop +endfacet +facet normal -0.5000000000000008 -0.8660254037844383 1.6298684457213916e-16 + outer loop + vertex -29.842081742052876 190.4662088668218 -62.600000000000065 + vertex -32.44493085969176 191.9689645055506 -3.000000000000062 + vertex -32.44493085969176 191.9689645055506 -62.600000000000065 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -1.7258201180401984e-16 + outer loop + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + vertex -8.194930859691734 197.22612362681 -3.000000000000062 + vertex -8.194930859691734 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -1.7258201180401984e-16 + outer loop + vertex -8.194930859691734 197.22612362681 -3.000000000000062 + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + vertex -10.194930859691729 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -7.697865611885053e-17 + outer loop + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 10.305069140308255 184.37612362681 -62.600000000000065 + endloop +endfacet +facet normal -1.0 7.771561172376094e-16 -7.697865611885053e-17 + outer loop + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex 10.30506914030826 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -1.7258201180401987e-16 + outer loop + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex 10.305069140308255 184.37612362681 -62.600000000000065 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -1.7258201180401987e-16 + outer loop + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex -10.194930859691729 184.37612362681003 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.7258201180401987e-16 + outer loop + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + vertex 10.305069140308266 204.87612362680997 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.7258201180401987e-16 + outer loop + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + vertex -10.194930859691718 204.87612362681003 -62.600000000000065 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + vertex 20.939051234375828 152.47054977096982 -62.600000000000044 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 11.646179055777065 152.47054977096985 -35.9058285412303 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 11.646179055777065 152.47054977096985 -35.9058285412303 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 11.141623530443681 152.47054977096985 -37.39220118838113 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 11.141623530443681 152.47054977096985 -37.39220118838113 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 10.447373985721516 152.47054977096985 -38.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 10.447373985721516 152.47054977096985 -38.800000000000054 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 9.575309223803076 152.47054977096985 -40.105137148104696 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 9.575309223803076 152.47054977096985 -40.105137148104696 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 8.540350514546814 152.47054977096985 -41.28528137423862 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 8.540350514546814 152.47054977096985 -41.28528137423862 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 7.360206288412901 152.47054977096985 -42.32024008349487 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 7.360206288412901 152.47054977096985 -42.32024008349487 + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 11.646179055777065 152.47054977096985 -35.9058285412303 + vertex 11.952407476793969 152.47054977096985 -34.36631430664067 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 11.952407476793969 152.47054977096985 -34.36631430664067 + vertex 12.055069140308246 152.47054977096985 -32.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 7.360206288412901 152.47054977096985 -42.32024008349487 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex 6.055069140308252 152.47054977096985 -43.19230484541332 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 6.055069140308252 152.47054977096985 -43.19230484541332 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex 4.6472703286893084 152.47054977096985 -43.8865543901355 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 4.6472703286893084 152.47054977096985 -43.8865543901355 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex 3.160897681538491 152.47054977096985 -44.391109915468874 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 3.160897681538491 152.47054977096985 -44.391109915468874 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex 1.621383446948867 152.47054977096985 -44.69733833648578 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 1.621383446948867 152.47054977096985 -44.69733833648578 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex 0.055069140308240346 152.47054977096985 -44.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 0.055069140308240346 152.47054977096985 -44.800000000000054 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -1.5112451663323863 152.47054977096985 -44.69733833648578 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -1.5112451663323863 152.47054977096985 -44.69733833648578 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -3.0507594009220105 152.47054977096985 -44.391109915468874 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -3.0507594009220105 152.47054977096985 -44.391109915468874 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -4.537132048072828 152.47054977096985 -43.8865543901355 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -4.537132048072828 152.47054977096985 -43.8865543901355 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -5.944930859691748 152.47054977096985 -43.192304845413325 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -5.944930859691748 152.47054977096985 -43.192304845413325 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -7.250068007796415 152.47054977096985 -42.32024008349488 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -7.250068007796415 152.47054977096985 -42.32024008349488 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -8.430212233930328 152.47054977096985 -41.285281374238636 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -8.430212233930328 152.47054977096985 -41.285281374238636 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -9.465170943186568 152.47054977096985 -40.10513714810471 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -9.465170943186568 152.47054977096985 -40.10513714810471 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -10.33723570510503 152.47054977096985 -38.80000000000006 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -10.33723570510503 152.47054977096985 -38.80000000000006 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -11.031485249827195 152.47054977096985 -37.392201188381144 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -11.031485249827195 152.47054977096985 -37.392201188381144 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -11.53604077516058 152.47054977096985 -35.905828541230306 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -11.53604077516058 152.47054977096985 -35.905828541230306 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -11.842269196177483 152.47054977096985 -34.36631430664068 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -11.842269196177483 152.47054977096985 -34.36631430664068 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex -11.94493085969176 152.47054977096985 -32.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 7.360206288412901 152.47054977096985 -23.279759916505228 + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 7.360206288412901 152.47054977096985 -23.279759916505228 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 8.540350514546814 152.47054977096985 -24.314718625761483 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 8.540350514546814 152.47054977096985 -24.314718625761483 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 9.575309223803076 152.47054977096985 -25.4948628518954 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 9.575309223803076 152.47054977096985 -25.4948628518954 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 10.447373985721516 152.47054977096985 -26.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 10.447373985721516 152.47054977096985 -26.800000000000054 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 11.141623530443681 152.47054977096985 -28.207798811618975 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 11.141623530443681 152.47054977096985 -28.207798811618975 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 11.646179055777065 152.47054977096985 -29.6941714587698 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 11.646179055777065 152.47054977096985 -29.6941714587698 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 11.952407476793969 152.47054977096985 -31.233685693359433 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex 11.952407476793969 152.47054977096985 -31.233685693359433 + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex 12.055069140308246 152.47054977096985 -32.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 7.360206288412901 152.47054977096985 -23.279759916505228 + vertex 6.0550691403082295 152.47054977096985 -22.40769515458679 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 6.0550691403082295 152.47054977096985 -22.40769515458679 + vertex 4.6472703286893084 152.47054977096985 -21.71344560986461 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 4.6472703286893084 152.47054977096985 -21.71344560986461 + vertex 3.160897681538491 152.47054977096985 -21.208890084531234 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 3.160897681538491 152.47054977096985 -21.208890084531234 + vertex 1.621383446948867 152.47054977096985 -20.90266166351433 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 1.621383446948867 152.47054977096985 -20.90266166351433 + vertex 0.055069140308240346 152.47054977096985 -20.80000000000005 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 0.055069140308240346 152.47054977096985 -20.80000000000005 + vertex -1.5112451663323863 152.47054977096985 -20.90266166351433 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -1.5112451663323863 152.47054977096985 -20.90266166351433 + vertex -3.0507594009220105 152.47054977096985 -21.208890084531237 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -3.0507594009220105 152.47054977096985 -21.208890084531237 + vertex -4.53713204807285 152.47054977096985 -21.71344560986461 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -4.53713204807285 152.47054977096985 -21.71344560986461 + vertex -5.944930859691771 152.47054977096985 -22.407695154586794 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -5.944930859691771 152.47054977096985 -22.407695154586794 + vertex -7.250068007796415 152.47054977096985 -23.279759916505235 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -7.250068007796415 152.47054977096985 -23.279759916505235 + vertex -8.430212233930328 152.47054977096985 -24.314718625761483 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -8.430212233930328 152.47054977096985 -24.314718625761483 + vertex -9.46517094318659 152.47054977096985 -25.494862851895416 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -9.46517094318659 152.47054977096985 -25.494862851895416 + vertex -10.33723570510503 152.47054977096985 -26.800000000000058 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -10.33723570510503 152.47054977096985 -26.800000000000058 + vertex -11.031485249827195 152.47054977096985 -28.207798811618986 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -11.031485249827195 152.47054977096985 -28.207798811618986 + vertex -11.53604077516058 152.47054977096985 -29.69417145876981 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -11.53604077516058 152.47054977096985 -29.69417145876981 + vertex -11.842269196177483 152.47054977096985 -31.233685693359437 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -11.842269196177483 152.47054977096985 -31.233685693359437 + vertex -11.94493085969176 152.47054977096985 -32.800000000000054 + endloop +endfacet +facet normal 2.8514088728101677e-16 1.0 -1.8925949547301336e-16 + outer loop + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex -11.94493085969176 152.47054977096985 -32.800000000000054 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 8.305069140308264 191.96896450555056 -3.000000000000062 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 10.30506914030826 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 8.305069140308264 191.96896450555056 -3.000000000000062 + vertex 8.305069140308264 191.96896450555053 -62.600000000000065 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 7.697865611885053e-17 + outer loop + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + vertex -10.194930859691718 204.87612362681003 -62.600000000000065 + endloop +endfacet +facet normal 1.0 -7.771561172376094e-16 7.697865611885053e-17 + outer loop + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + vertex -10.194930859691729 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -1.7258201180401984e-16 + outer loop + vertex 8.305069140308264 197.22612362681 -62.600000000000065 + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + vertex 10.30506914030826 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 5.551115123125783e-16 1.0 -1.7258201180401984e-16 + outer loop + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + vertex 8.305069140308264 197.22612362681 -62.600000000000065 + vertex 8.305069140308264 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal 0.5352237960733128 -0.8447102983371713 1.869826112231561e-16 + outer loop + vertex -19.58126489823363 200.8885118308511 -3.000000000000062 + vertex -18.326020454896568 201.68385752189488 -62.600000000000065 + vertex -18.326020454896568 201.68385752189488 -3.000000000000062 + endloop +endfacet +facet normal 0.5352237960733128 -0.8447102983371713 1.869826112231561e-16 + outer loop + vertex -18.326020454896568 201.68385752189488 -62.600000000000065 + vertex -19.58126489823363 200.8885118308511 -3.000000000000062 + vertex -19.58126489823363 200.8885118308511 -62.600000000000065 + endloop +endfacet +facet normal -0.4910858544031766 0.8711111775227673 -1.8814124863278186e-16 + outer loop + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 28.325364688606378 192.79613663226192 -62.600000000000065 + endloop +endfacet +facet normal -0.4910858544031766 0.8711111775227673 -1.8814124863278186e-16 + outer loop + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 13.997857139629506 184.71905477668747 -3.0000000000000733 + endloop +endfacet +facet normal 0.5735764363510477 0.8191520442889909 -9.721776452502665e-17 + outer loop + vertex -23.448487618904775 153.42399697552065 -62.600000000000065 + vertex -22.866580315162654 153.01654109490113 -3.000000000000062 + vertex -22.866580315162654 153.01654109490113 -62.600000000000065 + endloop +endfacet +facet normal 0.5735764363510477 0.8191520442889909 -9.721776452502665e-17 + outer loop + vertex -22.866580315162654 153.01654109490113 -3.000000000000062 + vertex -23.448487618904775 153.42399697552065 -62.600000000000065 + vertex -23.448487618904775 153.42399697552065 -3.000000000000062 + endloop +endfacet +facet normal 0.2685886841253404 0.9632549604127758 -1.4556488299553925e-16 + outer loop + vertex 9.623562304152413 208.60189949091347 -62.600000000000065 + vertex 11.17584934154037 208.16906836115925 -3.000000000000062 + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + endloop +endfacet +facet normal 0.2685886841253404 0.9632549604127758 -1.4556488299553925e-16 + outer loop + vertex 11.17584934154037 208.16906836115925 -3.000000000000062 + vertex 9.623562304152413 208.60189949091347 -62.600000000000065 + vertex 9.623562304152413 208.60189949091352 -3.000000000000062 + endloop +endfacet +facet normal 0.30863971000050494 0.9511790206952655 -1.403977188766158e-16 + outer loop + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + vertex 12.708675981153974 207.67169493382528 -3.000000000000062 + vertex 12.708675981153974 207.67169493382528 -62.600000000000065 + endloop +endfacet +facet normal 0.30863971000050494 0.9511790206952655 -1.403977188766158e-16 + outer loop + vertex 12.708675981153974 207.67169493382528 -3.000000000000062 + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + vertex 11.17584934154037 208.16906836115925 -3.000000000000062 + endloop +endfacet +facet normal 0.4910858544031737 0.8711111775227689 -1.125349904109144e-16 + outer loop + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -13.88771885901298 184.7190547766875 -62.600000000000065 + endloop +endfacet +facet normal 0.4910858544031737 0.8711111775227689 -1.125349904109144e-16 + outer loop + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -28.21522640798993 192.79613663226195 -3.000000000000062 + endloop +endfacet +facet normal 0.7829866224180636 0.6220385431099531 -4.707940523677698e-17 + outer loop + vertex 29.71042613890401 195.87449752362707 -3.000000000000062 + vertex 30.712842328706454 194.6127132252032 -62.600000000000065 + vertex 29.71042613890401 195.87449752362707 -62.600000000000065 + endloop +endfacet +facet normal 0.7829866224180636 0.6220385431099531 -4.707940523677698e-17 + outer loop + vertex 30.712842328706454 194.6127132252032 -62.600000000000065 + vertex 29.71042613890401 195.87449752362707 -3.000000000000062 + vertex 30.712842328706454 194.61271322520324 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125782e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + vertex 11.770977400728352 180.57612362681 -62.600000000000065 + vertex 11.770977400728352 180.57612362681 -3.0000000000000733 + endloop +endfacet +facet normal -5.551115123125782e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 11.770977400728352 180.57612362681 -62.600000000000065 + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + vertex -11.660839120111838 180.57612362681 -62.600000000000065 + endloop +endfacet +facet normal -0.06271134093823419 0.9980317067697442 -1.7706975454735845e-16 + outer loop + vertex -3.1644098793779976 209.67437328084148 -62.600000000000065 + vertex -1.5560800549907094 209.77543271540065 -3.000000000000062 + vertex -1.5560800549907094 209.77543271540065 -62.600000000000065 + endloop +endfacet +facet normal -0.06271134093823419 0.9980317067697442 -1.7706975454735845e-16 + outer loop + vertex -1.5560800549907094 209.77543271540065 -3.000000000000062 + vertex -3.1644098793779976 209.67437328084148 -62.600000000000065 + vertex -3.1644098793779976 209.67437328084154 -3.000000000000062 + endloop +endfacet +facet normal 0.9961946980917462 0.08715574274765149 6.164421566816321e-17 + outer loop + vertex -24.90424767656597 156.5458844937765 -3.000000000000062 + vertex -24.84233418489917 155.83821004577834 -62.600000000000065 + vertex -24.90424767656597 156.54588449377647 -62.600000000000065 + endloop +endfacet +facet normal 0.9961946980917462 0.08715574274765149 6.164421566816321e-17 + outer loop + vertex -24.84233418489917 155.83821004577834 -62.600000000000065 + vertex -24.90424767656597 156.5458844937765 -3.000000000000062 + vertex -24.84233418489917 155.83821004577834 -3.000000000000062 + endloop +endfacet +facet normal -0.34815064323675166 0.9374386004500969 -1.88585208251701e-16 + outer loop + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + vertex -12.598537700537447 207.6716949338253 -3.000000000000062 + vertex -12.598537700537447 207.67169493382528 -62.600000000000065 + endloop +endfacet +facet normal -0.34815064323675166 0.9374386004500969 -1.88585208251701e-16 + outer loop + vertex -12.598537700537447 207.6716949338253 -3.000000000000062 + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + vertex -14.10922162912293 207.1106495691348 -3.000000000000062 + endloop +endfacet +facet normal 0.9659258262890669 0.2588190451025263 2.968816052123315e-17 + outer loop + vertex -24.84233418489917 155.83821004577834 -3.000000000000062 + vertex -24.658474920013315 155.15203792778206 -62.600000000000065 + vertex -24.84233418489917 155.83821004577834 -62.600000000000065 + endloop +endfacet +facet normal 0.9659258262890669 0.2588190451025263 2.968816052123315e-17 + outer loop + vertex -24.658474920013315 155.15203792778206 -62.600000000000065 + vertex -24.84233418489917 155.83821004577834 -3.000000000000062 + vertex -24.658474920013315 155.1520379277821 -3.000000000000062 + endloop +endfacet +facet normal -0.3086397100005016 0.9511790206952665 -1.879150590781169e-16 + outer loop + vertex -12.598537700537447 207.67169493382528 -62.600000000000065 + vertex -11.065711060923867 208.16906836115928 -3.000000000000062 + vertex -11.065711060923867 208.16906836115925 -62.600000000000065 + endloop +endfacet +facet normal -0.3086397100005016 0.9511790206952665 -1.879150590781169e-16 + outer loop + vertex -11.065711060923867 208.16906836115928 -3.000000000000062 + vertex -12.598537700537447 207.67169493382528 -62.600000000000065 + vertex -12.598537700537447 207.6716949338253 -3.000000000000062 + endloop +endfacet +facet normal 0.8083169430505359 0.588747585623446 -3.9384090777526184e-17 + outer loop + vertex 30.712842328706454 194.61271322520324 -3.000000000000062 + vertex 31.66161008284822 193.31010907119943 -62.600000000000065 + vertex 30.712842328706454 194.6127132252032 -62.600000000000065 + endloop +endfacet +facet normal 0.8083169430505359 0.588747585623446 -3.9384090777526184e-17 + outer loop + vertex 31.66161008284822 193.31010907119943 -62.600000000000065 + vertex 30.712842328706454 194.61271322520324 -3.000000000000062 + vertex 31.66161008284822 193.31010907119946 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 36.22198409214549 138.22573774106883 -42.69777747886726 + vertex 35.833755524491714 138.89816934519487 -42.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 36.22198409214549 138.22573774106883 -42.69777747886726 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 36.58375552449172 137.5991312395182 -42.39807621135338 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 36.58375552449172 137.5991312395182 -42.39807621135338 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 36.89441569627156 137.06105203810748 -41.9213203435597 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 36.89441569627156 137.06105203810748 -41.9213203435597 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 37.132793630168386 136.64816934519487 -41.30000000000006 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.132793630168386 136.64816934519487 -41.30000000000006 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 37.28264426392534 136.38862043398146 -40.57645713530762 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.28264426392534 136.38862043398146 -40.57645713530762 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 37.333755524491714 136.30009313384156 -25.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.333755524491714 136.30009313384156 -25.800000000000054 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 37.28264426392531 136.38862043398143 -25.02354286469249 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.28264426392531 136.38862043398143 -25.02354286469249 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 37.132793630168365 136.64816934519487 -24.300000000000058 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 37.132793630168365 136.64816934519487 -24.300000000000058 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 36.89441569627154 137.06105203810748 -23.678679656440412 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 36.89441569627154 137.06105203810748 -23.678679656440412 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 36.58375552449172 137.5991312395182 -23.201923788646738 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 36.58375552449172 137.5991312395182 -23.201923788646738 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 36.22198409214552 138.22573774106883 -22.902222521132845 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 36.22198409214552 138.22573774106883 -22.902222521132845 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 35.833755524491714 138.89816934519484 -22.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 35.833755524491714 138.89816934519484 -22.800000000000054 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 34.38486678505814 141.4077182564083 -40.576457135307614 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 34.38486678505814 141.4077182564083 -40.576457135307614 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 34.534717418815084 141.14816934519484 -41.300000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 34.534717418815084 141.14816934519484 -41.300000000000054 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 34.534717418815084 141.14816934519484 -41.300000000000054 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 34.77309535271191 140.73528665228224 -41.9213203435597 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 34.77309535271191 140.73528665228224 -41.9213203435597 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 35.08375552449173 140.19720745087153 -42.39807621135337 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 35.08375552449173 140.19720745087153 -42.39807621135337 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 35.44552695683794 139.57060094932092 -42.69777747886726 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 35.44552695683794 139.57060094932092 -42.69777747886726 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + vertex 35.833755524491714 138.89816934519487 -42.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 34.38486678505814 141.4077182564083 -40.576457135307614 + vertex 34.33375552449175 141.49624555654816 -39.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 34.33375552449175 141.49624555654816 -39.800000000000054 + vertex 34.33375552449175 141.49624555654816 -25.800000000000047 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 34.33375552449175 141.49624555654816 -25.800000000000047 + vertex 34.38486678505814 141.4077182564083 -25.02354286469249 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 34.38486678505814 141.4077182564083 -25.02354286469249 + vertex 34.534717418815084 141.14816934519484 -24.30000000000005 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 34.534717418815084 141.14816934519484 -24.30000000000005 + vertex 34.77309535271191 140.73528665228224 -23.678679656440412 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 34.77309535271191 140.73528665228224 -23.678679656440412 + vertex 35.08375552449173 140.19720745087153 -23.201923788646738 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 35.08375552449173 140.19720745087153 -23.201923788646738 + vertex 35.44552695683796 139.5706009493209 -22.902222521132845 + endloop +endfacet +facet normal -0.8660254037844394 -0.49999999999999856 1.962553415389877e-17 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 35.44552695683796 139.5706009493209 -22.902222521132845 + vertex 35.833755524491714 138.89816934519484 -22.800000000000054 + endloop +endfacet +facet normal -0.8660254037844394 -0.4999999999999988 1.962553415389881e-17 + outer loop + vertex 24.468394633251194 158.58355185517976 -62.60000000000005 + vertex 11.770977400728352 180.57612362681 -3.0000000000000733 + vertex 11.770977400728352 180.57612362681 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844394 -0.4999999999999988 1.962553415389881e-17 + outer loop + vertex 11.770977400728352 180.57612362681 -3.0000000000000733 + vertex 24.468394633251194 158.58355185517976 -62.60000000000005 + vertex 24.468394633251194 158.58355185517976 -3.000000000000051 + endloop +endfacet +facet normal 0.6989639196910199 0.7151569331064095 -6.961791905771825e-17 + outer loop + vertex 26.399279190685665 199.39323136522816 -62.600000000000065 + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 27.551755827279884 198.2668497978046 -62.600000000000065 + endloop +endfacet +facet normal 0.6989639196910199 0.7151569331064095 -6.961791905771825e-17 + outer loop + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 26.399279190685665 199.39323136522816 -62.600000000000065 + vertex 26.399279190685665 199.3932313652282 -3.000000000000062 + endloop +endfacet +facet normal 0.5700836569343793 0.8215866503883357 -9.79068032092166e-17 + outer loop + vertex 21.349727138373666 203.3885041598933 -62.600000000000065 + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + endloop +endfacet +facet normal 0.5700836569343793 0.8215866503883357 -9.79068032092166e-17 + outer loop + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + vertex 21.349727138373666 203.3885041598933 -62.600000000000065 + vertex 21.349727138373666 203.38850415989336 -3.000000000000062 + endloop +endfacet +facet normal 0.9659258262890671 -0.25881904510252585 1.1902318351521178e-16 + outer loop + vertex -24.658474920013315 157.93973105977088 -3.000000000000062 + vertex -24.84233418489917 157.2535589417746 -62.600000000000065 + vertex -24.658474920013315 157.93973105977085 -62.600000000000065 + endloop +endfacet +facet normal 0.9659258262890671 -0.25881904510252585 1.1902318351521178e-16 + outer loop + vertex -24.84233418489917 157.2535589417746 -62.600000000000065 + vertex -24.658474920013315 157.93973105977088 -3.000000000000062 + vertex -24.84233418489917 157.2535589417746 -3.000000000000062 + endloop +endfacet +facet normal 0.3481506432367572 0.9374386004500948 -1.3498487096514323e-16 + outer loop + vertex 12.708675981153974 207.67169493382528 -62.600000000000065 + vertex 14.219359909739431 207.1106495691348 -3.000000000000062 + vertex 14.219359909739431 207.1106495691348 -62.600000000000065 + endloop +endfacet +facet normal 0.3481506432367572 0.9374386004500948 -1.3498487096514323e-16 + outer loop + vertex 14.219359909739431 207.1106495691348 -3.000000000000062 + vertex 12.708675981153974 207.67169493382528 -62.600000000000065 + vertex 12.708675981153974 207.67169493382528 -3.000000000000062 + endloop +endfacet +facet normal -0.10439696179122616 0.994535707940525 -1.796753111088905e-16 + outer loop + vertex -4.767105895595756 209.50613739606416 -62.600000000000065 + vertex -3.1644098793779976 209.67437328084154 -3.000000000000062 + vertex -3.1644098793779976 209.67437328084148 -62.600000000000065 + endloop +endfacet +facet normal -0.10439696179122616 0.994535707940525 -1.796753111088905e-16 + outer loop + vertex -3.1644098793779976 209.67437328084154 -3.000000000000062 + vertex -4.767105895595756 209.50613739606416 -62.600000000000065 + vertex -4.767105895595756 209.50613739606416 -3.000000000000062 + endloop +endfacet +facet normal 0.7829866224180505 -0.6220385431099694 1.6762592114233934e-16 + outer loop + vertex -27.290873495142403 193.95965933221277 -3.000000000000062 + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -27.290873495142403 193.95965933221274 -62.600000000000065 + endloop +endfacet +facet normal 0.7829866224180505 -0.6220385431099694 1.6762592114233934e-16 + outer loop + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -27.290873495142403 193.95965933221277 -3.000000000000062 + vertex -28.21522640798993 192.79613663226195 -3.000000000000062 + endloop +endfacet +facet normal 0.832232779361344 0.554426371086813 -3.161985758607227e-17 + outer loop + vertex 31.66161008284822 193.31010907119946 -3.000000000000062 + vertex 32.55506914030826 191.9689645055505 -62.600000000000065 + vertex 31.66161008284822 193.31010907119943 -62.600000000000065 + endloop +endfacet +facet normal 0.832232779361344 0.554426371086813 -3.161985758607227e-17 + outer loop + vertex 32.55506914030826 191.9689645055505 -62.600000000000065 + vertex 31.66161008284822 193.31010907119946 -3.000000000000062 + vertex 32.55506914030826 191.9689645055505 -3.000000000000062 + endloop +endfacet +facet normal 0.8191520442889927 0.5735764363510447 -3.593175178246798e-17 + outer loop + vertex -24.358256352634704 154.50821713237318 -3.000000000000062 + vertex -23.95080047201519 153.92630982863105 -62.600000000000065 + vertex -24.358256352634704 154.50821713237315 -62.600000000000065 + endloop +endfacet +facet normal 0.8191520442889927 0.5735764363510447 -3.593175178246798e-17 + outer loop + vertex -23.95080047201519 153.92630982863105 -62.600000000000065 + vertex -24.358256352634704 154.50821713237318 -3.000000000000062 + vertex -23.95080047201519 153.92630982863105 -3.000000000000062 + endloop +endfacet +facet normal 0.7562861433211006 0.6542409872673034 -5.469233483307277e-17 + outer loop + vertex 28.65611565455649 197.09325395373196 -3.000000000000062 + vertex 29.71042613890401 195.87449752362707 -62.600000000000065 + vertex 28.65611565455649 197.09325395373193 -62.600000000000065 + endloop +endfacet +facet normal 0.7562861433211006 0.6542409872673034 -5.469233483307277e-17 + outer loop + vertex 29.71042613890401 195.87449752362707 -62.600000000000065 + vertex 28.65611565455649 197.09325395373196 -3.000000000000062 + vertex 29.71042613890401 195.87449752362707 -3.000000000000062 + endloop +endfacet +facet normal 0.4252767351160268 0.9050633671567163 -1.234604251661823e-16 + outer loop + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + vertex 17.163768745909092 205.80157985229923 -3.000000000000062 + vertex 17.163768745909092 205.80157985229917 -62.600000000000065 + endloop +endfacet +facet normal 0.4252767351160268 0.9050633671567163 -1.234604251661823e-16 + outer loop + vertex 17.163768745909092 205.80157985229923 -3.000000000000062 + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + vertex 15.705257561860751 206.48691404766154 -3.000000000000062 + endloop +endfacet +facet normal -0.38705234313864256 0.9220577442171864 -1.8892534971894325e-16 + outer loop + vertex -15.595119281244203 206.48691404766154 -62.600000000000065 + vertex -14.10922162912293 207.1106495691348 -3.000000000000062 + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + endloop +endfacet +facet normal -0.38705234313864256 0.9220577442171864 -1.8892534971894325e-16 + outer loop + vertex -14.10922162912293 207.1106495691348 -3.000000000000062 + vertex -15.595119281244203 206.48691404766154 -62.600000000000065 + vertex -15.595119281244203 206.4869140476616 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.892594954730134e-16 + outer loop + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 41.98845606287095 132.23791530735045 -62.60000000000003 + vertex 41.98845606287095 132.23791530735048 -3.0000000000000284 + endloop +endfacet +facet normal -5.551115123125783e-16 -1.0 1.892594954730134e-16 + outer loop + vertex 41.98845606287095 132.23791530735045 -62.60000000000003 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 0.6039459209966543 0.7970252972845361 -9.106128389727839e-17 + outer loop + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + vertex 23.958123096030832 201.4965534612419 -3.000000000000062 + vertex 23.958123096030832 201.4965534612419 -62.600000000000065 + endloop +endfacet +facet normal 0.6039459209966543 0.7970252972845361 -9.106128389727839e-17 + outer loop + vertex 23.958123096030832 201.4965534612419 -3.000000000000062 + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + endloop +endfacet +facet normal 0.3870523431386278 0.9220577442171928 -1.2933581127401577e-16 + outer loop + vertex 14.219359909739431 207.1106495691348 -62.600000000000065 + vertex 15.705257561860751 206.48691404766154 -3.000000000000062 + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + endloop +endfacet +facet normal 0.3870523431386278 0.9220577442171928 -1.2933581127401577e-16 + outer loop + vertex 15.705257561860751 206.48691404766154 -3.000000000000062 + vertex 14.219359909739431 207.1106495691348 -62.600000000000065 + vertex 14.219359909739431 207.1106495691348 -3.000000000000062 + endloop +endfacet +facet normal 0.4999999999999992 -0.8660254037844392 1.6454656576428208e-16 + outer loop + vertex 29.952220022669408 190.46620886682177 -3.0000000000000733 + vertex 32.55506914030826 191.9689645055505 -62.600000000000065 + vertex 32.55506914030826 191.9689645055505 -3.000000000000062 + endloop +endfacet +facet normal 0.4999999999999992 -0.8660254037844392 1.6454656576428208e-16 + outer loop + vertex 32.55506914030826 191.9689645055505 -62.600000000000065 + vertex 29.952220022669408 190.46620886682177 -3.0000000000000733 + vertex 29.952220022669408 190.46620886682177 -62.60000000000008 + endloop +endfacet +facet normal 0.4999999999999992 -0.8660254037844392 1.6454656576428208e-16 + outer loop + vertex 29.952220022669408 190.46620886682177 -62.60000000000008 + vertex 29.952220022669408 190.46620886682177 -3.0000000000000733 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + endloop +endfacet +facet normal 0.4999999999999992 -0.8660254037844392 1.6454656576428208e-16 + outer loop + vertex 29.952220022669408 190.46620886682177 -62.60000000000008 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844392 0.4999999999999993 -1.5295647765012072e-16 + outer loop + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -12.694930859691725 186.78502419417032 -62.600000000000065 + vertex -13.88771885901298 184.7190547766875 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844392 0.4999999999999993 -1.5295647765012072e-16 + outer loop + vertex -12.694930859691725 186.78502419417032 -62.600000000000065 + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -12.694930859691725 186.78502419417035 -3.000000000000062 + endloop +endfacet +facet normal 0.020915980694884383 0.9997812369471489 -1.7093417315095045e-16 + outer loop + vertex 0.05506914030825163 209.809138854524 -62.600000000000065 + vertex 1.6662183356072127 209.77543271540065 -3.000000000000062 + vertex 1.6662183356072127 209.77543271540065 -62.600000000000065 + endloop +endfacet +facet normal 0.020915980694884383 0.9997812369471489 -1.7093417315095045e-16 + outer loop + vertex 1.6662183356072127 209.77543271540065 -3.000000000000062 + vertex 0.05506914030825163 209.809138854524 -62.600000000000065 + vertex 0.05506914030825163 209.80913885452406 -3.000000000000062 + endloop +endfacet +facet normal -0.26858868412533565 0.9632549604127771 -1.8691607490093737e-16 + outer loop + vertex -11.065711060923867 208.16906836115925 -62.600000000000065 + vertex -9.513424023535883 208.60189949091352 -3.000000000000062 + vertex -9.513424023535883 208.60189949091352 -62.600000000000065 + endloop +endfacet +facet normal -0.26858868412533565 0.9632549604127771 -1.8691607490093737e-16 + outer loop + vertex -9.513424023535883 208.60189949091352 -3.000000000000062 + vertex -11.065711060923867 208.16906836115925 -62.600000000000065 + vertex -11.065711060923867 208.16906836115928 -3.000000000000062 + endloop +endfacet +facet normal 0.7282622292749887 0.685298566619998 -6.220955760198365e-17 + outer loop + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 28.65611565455649 197.09325395373193 -62.600000000000065 + vertex 27.551755827279884 198.2668497978046 -62.600000000000065 + endloop +endfacet +facet normal 0.7282622292749887 0.685298566619998 -6.220955760198365e-17 + outer loop + vertex 28.65611565455649 197.09325395373193 -62.600000000000065 + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 28.65611565455649 197.09325395373196 -3.000000000000062 + endloop +endfacet +facet normal -0.4252767351160145 0.9050633671567219 -1.8893488826187048e-16 + outer loop + vertex -17.053630465292567 205.80157985229923 -62.600000000000065 + vertex -15.595119281244203 206.4869140476616 -3.000000000000062 + vertex -15.595119281244203 206.48691404766154 -62.600000000000065 + endloop +endfacet +facet normal -0.4252767351160145 0.9050633671567219 -1.8893488826187048e-16 + outer loop + vertex -15.595119281244203 206.4869140476616 -3.000000000000062 + vertex -17.053630465292567 205.80157985229923 -62.600000000000065 + vertex -17.053630465292567 205.80157985229926 -3.000000000000062 + endloop +endfacet +facet normal -0.7071067811865392 0.707106781186556 -1.7646604060570652e-16 + outer loop + vertex 23.55862589952126 153.4239969755206 -62.60000000000005 + vertex 24.060938752631678 153.92630982863102 -3.000000000000051 + vertex 24.060938752631678 153.92630982863102 -62.60000000000005 + endloop +endfacet +facet normal -0.7071067811865392 0.707106781186556 -1.7646604060570652e-16 + outer loop + vertex 24.060938752631678 153.92630982863102 -3.000000000000051 + vertex 23.55862589952126 153.4239969755206 -62.60000000000005 + vertex 23.55862589952126 153.42399697552062 -3.000000000000051 + endloop +endfacet +facet normal 0.9063077870366554 0.4226182617406877 -3.1699543601947416e-18 + outer loop + vertex -24.658474920013315 155.1520379277821 -3.000000000000062 + vertex -24.358256352634704 154.50821713237315 -62.600000000000065 + vertex -24.658474920013315 155.15203792778206 -62.600000000000065 + endloop +endfacet +facet normal 0.9063077870366554 0.4226182617406877 -3.1699543601947416e-18 + outer loop + vertex -24.358256352634704 154.50821713237315 -62.600000000000065 + vertex -24.658474920013315 155.1520379277821 -3.000000000000062 + vertex -24.358256352634704 154.50821713237318 -3.000000000000062 + endloop +endfacet +facet normal -0.425088184824243 0.9051519403519114 -1.889356600540168e-16 + outer loop + vertex 22.373300682659444 152.73315682100917 -62.600000000000065 + vertex 22.976718595779143 153.01654109490107 -3.000000000000051 + vertex 22.976718595779143 153.01654109490107 -62.60000000000005 + endloop +endfacet +facet normal -0.425088184824243 0.9051519403519114 -1.889356600540168e-16 + outer loop + vertex 22.976718595779143 153.01654109490107 -3.000000000000051 + vertex 22.373300682659444 152.73315682100917 -62.600000000000065 + vertex 22.373300682659444 152.73315682100917 -3.000000000000062 + endloop +endfacet +facet normal -0.9063077870366547 0.42261826174068906 -1.4270266531245688e-16 + outer loop + vertex 24.46839463325119 154.50821713237312 -62.60000000000005 + vertex 24.768613200629805 155.15203792778206 -3.000000000000051 + vertex 24.768613200629805 155.15203792778206 -62.60000000000005 + endloop +endfacet +facet normal -0.9063077870366547 0.42261826174068906 -1.4270266531245688e-16 + outer loop + vertex 24.768613200629805 155.15203792778206 -3.000000000000051 + vertex 24.46839463325119 154.50821713237312 -62.60000000000005 + vertex 24.46839463325119 154.50821713237312 -3.000000000000051 + endloop +endfacet +facet normal 0.42261826174069567 0.9063077870366518 -1.2387983536035123e-16 + outer loop + vertex -22.866580315162654 153.01654109490113 -62.600000000000065 + vertex -22.22275951975374 152.71632252752252 -3.000000000000062 + vertex -22.22275951975374 152.7163225275225 -62.600000000000065 + endloop +endfacet +facet normal 0.42261826174069567 0.9063077870366518 -1.2387983536035123e-16 + outer loop + vertex -22.22275951975374 152.71632252752252 -3.000000000000062 + vertex -22.866580315162654 153.01654109490113 -62.600000000000065 + vertex -22.866580315162654 153.01654109490113 -3.000000000000062 + endloop +endfacet +facet normal -0.8191520442889946 0.5735764363510423 -1.6204619883521905e-16 + outer loop + vertex 24.060938752631678 153.92630982863102 -62.60000000000005 + vertex 24.46839463325119 154.50821713237312 -3.000000000000051 + vertex 24.46839463325119 154.50821713237312 -62.60000000000005 + endloop +endfacet +facet normal -0.8191520442889946 0.5735764363510423 -1.6204619883521905e-16 + outer loop + vertex 24.46839463325119 154.50821713237312 -3.000000000000051 + vertex 24.060938752631678 153.92630982863102 -62.60000000000005 + vertex 24.060938752631678 153.92630982863102 -3.000000000000051 + endloop +endfacet +facet normal -0.09394352563205821 0.9955775278660216 -1.790504190202133e-16 + outer loop + vertex 20.939051234375828 152.47054977096982 -62.600000000000044 + vertex 21.640128958283878 152.5367040495494 -3.000000000000062 + vertex 21.640128958283878 152.5367040495494 -62.600000000000065 + endloop +endfacet +facet normal -0.09394352563205821 0.9955775278660216 -1.790504190202133e-16 + outer loop + vertex 21.640128958283878 152.5367040495494 -3.000000000000062 + vertex 20.939051234375828 152.47054977096982 -62.600000000000044 + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + endloop +endfacet +facet normal -0.9659258262890669 -0.2588190451025263 -2.968816052123315e-17 + outer loop + vertex 24.95247246551566 157.25355894177457 -62.60000000000005 + vertex 24.768613200629805 157.93973105977085 -3.000000000000051 + vertex 24.768613200629805 157.93973105977085 -62.60000000000005 + endloop +endfacet +facet normal -0.9659258262890669 -0.2588190451025263 -2.968816052123315e-17 + outer loop + vertex 24.768613200629805 157.93973105977085 -3.000000000000051 + vertex 24.95247246551566 157.25355894177457 -62.60000000000005 + vertex 24.95247246551566 157.2535589417746 -3.000000000000051 + endloop +endfacet +facet normal 0.996194698091746 -0.08715574274765302 9.172724251549008e-17 + outer loop + vertex -24.84233418489917 157.2535589417746 -3.000000000000062 + vertex -24.90424767656597 156.54588449377647 -62.600000000000065 + vertex -24.84233418489917 157.2535589417746 -62.600000000000065 + endloop +endfacet +facet normal 0.996194698091746 -0.08715574274765302 9.172724251549008e-17 + outer loop + vertex -24.90424767656597 156.54588449377647 -62.600000000000065 + vertex -24.84233418489917 157.2535589417746 -3.000000000000062 + vertex -24.90424767656597 156.5458844937765 -3.000000000000062 + endloop +endfacet +facet normal -0.25097753115913946 0.9679929126048719 -1.8637807733403903e-16 + outer loop + vertex 21.640128958283878 152.5367040495494 -62.600000000000065 + vertex 22.332897800370226 152.71632252752246 -3.000000000000051 + vertex 22.332897800370226 152.71632252752246 -62.600000000000044 + endloop +endfacet +facet normal -0.25097753115913946 0.9679929126048719 -1.8637807733403903e-16 + outer loop + vertex 22.332897800370226 152.71632252752246 -3.000000000000051 + vertex 21.640128958283878 152.5367040495494 -62.600000000000065 + vertex 21.640128958283878 152.5367040495494 -3.000000000000062 + endloop +endfacet +facet normal -0.9961946980917462 -0.08715574274765149 -6.164421566816321e-17 + outer loop + vertex 25.01438595718246 156.54588449377644 -62.60000000000005 + vertex 24.95247246551566 157.2535589417746 -3.000000000000051 + vertex 24.95247246551566 157.25355894177457 -62.60000000000005 + endloop +endfacet +facet normal -0.9961946980917462 -0.08715574274765149 -6.164421566816321e-17 + outer loop + vertex 24.95247246551566 157.2535589417746 -3.000000000000051 + vertex 25.01438595718246 156.54588449377644 -62.60000000000005 + vertex 25.01438595718246 156.54588449377644 -3.000000000000051 + endloop +endfacet +facet normal 0.8660254037844388 -0.5 1.5295647765012081e-16 + outer loop + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + vertex -24.358256352634704 158.5835518551798 -62.600000000000065 + vertex -11.660839120111838 180.57612362681 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844388 -0.5 1.5295647765012081e-16 + outer loop + vertex -24.358256352634704 158.5835518551798 -62.600000000000065 + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + vertex -24.358256352634704 158.5835518551798 -3.000000000000062 + endloop +endfacet +facet normal -0.9659258262890664 0.2588190451025278 -1.1902318351521207e-16 + outer loop + vertex 24.768613200629805 155.15203792778206 -62.60000000000005 + vertex 24.95247246551566 155.8382100457783 -3.000000000000051 + vertex 24.95247246551566 155.8382100457783 -62.60000000000005 + endloop +endfacet +facet normal -0.9659258262890664 0.2588190451025278 -1.1902318351521207e-16 + outer loop + vertex 24.95247246551566 155.8382100457783 -3.000000000000051 + vertex 24.768613200629805 155.15203792778206 -62.60000000000005 + vertex 24.768613200629805 155.15203792778206 -3.000000000000051 + endloop +endfacet +facet normal -0.3846106969126948 0.9230788762724078 -1.8891362409815978e-16 + outer loop + vertex 22.332897800370226 152.71632252752246 -62.600000000000044 + vertex 22.373300682659444 152.73315682100917 -3.000000000000062 + vertex 22.373300682659444 152.73315682100917 -62.600000000000065 + endloop +endfacet +facet normal -0.3846106969126948 0.9230788762724078 -1.8891362409815978e-16 + outer loop + vertex 22.373300682659444 152.73315682100917 -3.000000000000062 + vertex 22.332897800370226 152.71632252752246 -62.600000000000044 + vertex 22.332897800370226 152.71632252752246 -3.000000000000051 + endloop +endfacet +facet normal 0.7071067811865441 0.707106781186551 -6.760178110917366e-17 + outer loop + vertex -23.95080047201519 153.92630982863105 -62.600000000000065 + vertex -23.448487618904775 153.42399697552065 -3.000000000000062 + vertex -23.448487618904775 153.42399697552065 -62.600000000000065 + endloop +endfacet +facet normal 0.7071067811865441 0.707106781186551 -6.760178110917366e-17 + outer loop + vertex -23.448487618904775 153.42399697552065 -3.000000000000062 + vertex -23.95080047201519 153.92630982863105 -62.600000000000065 + vertex -23.95080047201519 153.92630982863105 -3.000000000000062 + endloop +endfacet +facet normal 0.25881904510252435 0.9659258262890675 -1.4677788008447106e-16 + outer loop + vertex -22.22275951975374 152.7163225275225 -62.600000000000065 + vertex -21.53658740175749 152.53246326263667 -3.000000000000062 + vertex -21.53658740175749 152.53246326263664 -62.600000000000065 + endloop +endfacet +facet normal 0.25881904510252435 0.9659258262890675 -1.4677788008447106e-16 + outer loop + vertex -21.53658740175749 152.53246326263667 -3.000000000000062 + vertex -22.22275951975374 152.7163225275225 -62.600000000000065 + vertex -22.22275951975374 152.71632252752252 -3.000000000000062 + endloop +endfacet +facet normal -0.996194698091746 0.08715574274765302 -9.172724251549008e-17 + outer loop + vertex 24.95247246551566 155.8382100457783 -62.60000000000005 + vertex 25.01438595718246 156.54588449377644 -3.000000000000051 + vertex 25.01438595718246 156.54588449377644 -62.60000000000005 + endloop +endfacet +facet normal -0.996194698091746 0.08715574274765302 -9.172724251549008e-17 + outer loop + vertex 25.01438595718246 156.54588449377644 -3.000000000000051 + vertex 24.95247246551566 155.8382100457783 -62.60000000000005 + vertex 24.95247246551566 155.8382100457783 -3.000000000000051 + endloop +endfacet +facet normal -0.596902427405206 0.8023138364491621 -1.8441368268833016e-16 + outer loop + vertex 23.06122021535224 153.05393896729822 -62.600000000000065 + vertex 23.55862589952126 153.42399697552062 -3.000000000000051 + vertex 23.55862589952126 153.4239969755206 -62.60000000000005 + endloop +endfacet +facet normal -0.596902427405206 0.8023138364491621 -1.8441368268833016e-16 + outer loop + vertex 23.55862589952126 153.42399697552062 -3.000000000000051 + vertex 23.06122021535224 153.05393896729822 -62.600000000000065 + vertex 23.06122021535224 153.05393896729822 -3.000000000000062 + endloop +endfacet +facet normal -0.9063077870366554 -0.4226182617406877 3.1699543601947416e-18 + outer loop + vertex 24.768613200629805 157.93973105977085 -62.60000000000005 + vertex 24.468394633251194 158.58355185517976 -3.000000000000051 + vertex 24.468394633251194 158.58355185517976 -62.60000000000005 + endloop +endfacet +facet normal -0.9063077870366554 -0.4226182617406877 3.1699543601947416e-18 + outer loop + vertex 24.468394633251194 158.58355185517976 -3.000000000000051 + vertex 24.768613200629805 157.93973105977085 -62.60000000000005 + vertex 24.768613200629805 157.93973105977085 -3.000000000000051 + endloop +endfacet +facet normal -0.40470653839706777 0.9144466183319083 -1.8897080252742166e-16 + outer loop + vertex 22.976718595779143 153.01654109490107 -62.60000000000005 + vertex 23.06122021535224 153.05393896729822 -3.000000000000062 + vertex 23.06122021535224 153.05393896729822 -62.600000000000065 + endloop +endfacet +facet normal -0.40470653839706777 0.9144466183319083 -1.8897080252742166e-16 + outer loop + vertex 23.06122021535224 153.05393896729822 -3.000000000000062 + vertex 22.976718595779143 153.01654109490107 -62.60000000000005 + vertex 22.976718595779143 153.01654109490107 -3.000000000000051 + endloop +endfacet +facet normal 0.9063077870366547 -0.42261826174068906 1.4270266531245688e-16 + outer loop + vertex -24.358256352634704 158.5835518551798 -3.000000000000062 + vertex -24.658474920013315 157.93973105977085 -62.600000000000065 + vertex -24.358256352634704 158.5835518551798 -62.600000000000065 + endloop +endfacet +facet normal 0.9063077870366547 -0.42261826174068906 1.4270266531245688e-16 + outer loop + vertex -24.658474920013315 157.93973105977085 -62.600000000000065 + vertex -24.358256352634704 158.5835518551798 -3.000000000000062 + vertex -24.658474920013315 157.93973105977088 -3.000000000000062 + endloop +endfacet +facet normal -0.6684424840618581 0.743763837183022 -1.7981606344395133e-16 + outer loop + vertex -26.28914091006915 199.39323136522827 -62.600000000000065 + vertex -25.09056419799865 200.470427586262 -3.000000000000062 + vertex -25.09056419799865 200.470427586262 -62.600000000000065 + endloop +endfacet +facet normal -0.6684424840618581 0.743763837183022 -1.7981606344395133e-16 + outer loop + vertex -25.09056419799865 200.470427586262 -3.000000000000062 + vertex -26.28914091006915 199.39323136522827 -62.600000000000065 + vertex -26.28914091006915 199.39323136522827 -3.000000000000062 + endloop +endfacet +facet normal -0.78298662241806 0.6220385431099575 -1.67625921142338e-16 + outer loop + vertex -30.60270404808994 194.6127132252033 -3.000000000000062 + vertex -29.600287858287494 195.87449752362713 -62.600000000000065 + vertex -30.60270404808994 194.61271322520327 -62.600000000000065 + endloop +endfacet +facet normal -0.78298662241806 0.6220385431099575 -1.67625921142338e-16 + outer loop + vertex -29.600287858287494 195.87449752362713 -62.600000000000065 + vertex -30.60270404808994 194.6127132252033 -3.000000000000062 + vertex -29.600287858287494 195.87449752362716 -3.000000000000062 + endloop +endfacet +facet normal -0.6989639196910225 0.715156933106407 -1.7722852548447556e-16 + outer loop + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -26.28914091006915 199.39323136522827 -3.000000000000062 + vertex -26.28914091006915 199.39323136522827 -62.600000000000065 + endloop +endfacet +facet normal -0.6989639196910225 0.715156933106407 -1.7722852548447556e-16 + outer loop + vertex -26.28914091006915 199.39323136522827 -3.000000000000062 + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -27.44161754666337 198.26684979780472 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -34.42457913819862 141.14816934519493 -41.30000000000007 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.42457913819862 141.14816934519493 -41.30000000000007 + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -34.27472850444166 141.40771825640834 -40.57645713530763 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.27472850444166 141.40771825640834 -40.57645713530763 + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -34.42457913819862 141.14816934519493 -41.30000000000007 + vertex -34.662957072095445 140.7352866522823 -41.921320343559714 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -34.662957072095445 140.7352866522823 -41.921320343559714 + vertex -34.97361724387526 140.19720745087156 -42.398076211353384 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -34.97361724387526 140.19720745087156 -42.398076211353384 + vertex -35.33538867622146 139.57060094932095 -42.69777747886727 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -35.33538867622146 139.57060094932095 -42.69777747886727 + vertex -35.72361724387527 138.8981693451949 -42.80000000000007 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.27472850444166 141.40771825640834 -40.57645713530763 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -34.22361724387527 141.49624555654825 -39.80000000000007 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.22361724387527 141.49624555654825 -39.80000000000007 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -34.22361724387527 141.49624555654825 -25.800000000000065 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.22361724387527 141.49624555654825 -25.800000000000065 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -34.27472850444166 141.40771825640834 -25.0235428646925 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.27472850444166 141.40771825640834 -25.0235428646925 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -34.42457913819862 141.14816934519493 -24.30000000000006 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.42457913819862 141.14816934519493 -24.30000000000006 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -34.662957072095445 140.7352866522823 -23.678679656440423 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.662957072095445 140.7352866522823 -23.678679656440423 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -34.97361724387526 140.19720745087156 -23.20192378864675 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -34.97361724387526 140.19720745087156 -23.20192378864675 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -35.33538867622149 139.57060094932095 -22.90222252113286 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -35.33538867622149 139.57060094932095 -22.90222252113286 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -35.72361724387527 138.89816934519493 -22.800000000000065 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -37.172505983308895 136.3886204339815 -40.57645713530763 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -37.172505983308895 136.3886204339815 -40.57645713530763 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -37.02265534955194 136.6481693451949 -41.30000000000007 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -37.02265534955194 136.6481693451949 -41.30000000000007 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -36.78427741565511 137.06105203810753 -41.921320343559714 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -36.78427741565511 137.06105203810753 -41.921320343559714 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -36.473617243875275 137.59913123951824 -42.398076211353384 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -36.473617243875275 137.59913123951824 -42.398076211353384 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -36.111845811529044 138.22573774106888 -42.69777747886727 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -36.111845811529044 138.22573774106888 -42.69777747886727 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -35.72361724387527 138.8981693451949 -42.80000000000007 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -37.22361724387527 136.30009313384159 -25.800000000000065 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -37.22361724387527 136.30009313384159 -25.800000000000065 + vertex -37.17250598330887 136.3886204339815 -25.0235428646925 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -37.17250598330887 136.3886204339815 -25.0235428646925 + vertex -37.02265534955192 136.6481693451949 -24.300000000000068 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -37.02265534955192 136.6481693451949 -24.300000000000068 + vertex -36.78427741565509 137.06105203810753 -23.678679656440423 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -36.78427741565509 137.06105203810753 -23.678679656440423 + vertex -36.473617243875275 137.59913123951827 -23.20192378864675 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -36.473617243875275 137.59913123951827 -23.20192378864675 + vertex -36.111845811529065 138.22573774106888 -22.90222252113286 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -36.111845811529065 138.22573774106888 -22.90222252113286 + vertex -35.72361724387527 138.89816934519493 -22.800000000000065 + endloop +endfacet +facet normal 0.8660254037844388 -0.4999999999999997 1.5295647765012074e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + vertex -35.72361724387527 138.89816934519493 -22.800000000000065 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 10.447373985721516 148.1705497709698 -26.800000000000054 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 10.447373985721516 148.1705497709698 -26.800000000000054 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 9.575309223803076 148.1705497709698 -25.4948628518954 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 9.575309223803076 148.1705497709698 -25.4948628518954 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 8.540350514546814 148.1705497709698 -24.314718625761483 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 8.540350514546814 148.1705497709698 -24.314718625761483 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 7.360206288412901 148.1705497709698 -23.279759916505228 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 7.360206288412901 148.1705497709698 -23.279759916505228 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 6.0550691403082295 148.1705497709698 -22.40769515458679 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 6.0550691403082295 148.1705497709698 -22.40769515458679 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 10.447373985721516 148.1705497709698 -26.800000000000054 + vertex 11.141623530443681 148.1705497709698 -28.207798811618975 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 11.141623530443681 148.1705497709698 -28.207798811618975 + vertex 11.646179055777065 148.1705497709698 -29.6941714587698 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 11.646179055777065 148.1705497709698 -29.6941714587698 + vertex 11.952407476793969 148.1705497709698 -31.233685693359433 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 11.952407476793969 148.1705497709698 -31.233685693359433 + vertex 12.055069140308246 148.1705497709698 -32.800000000000054 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 6.0550691403082295 148.1705497709698 -22.40769515458679 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex 4.6472703286893084 148.1705497709698 -21.71344560986461 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 4.6472703286893084 148.1705497709698 -21.71344560986461 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex 3.160897681538491 148.1705497709698 -21.208890084531234 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 3.160897681538491 148.1705497709698 -21.208890084531234 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex 1.621383446948867 148.1705497709698 -20.90266166351433 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 1.621383446948867 148.1705497709698 -20.90266166351433 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex 0.055069140308240346 148.1705497709698 -20.80000000000005 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 0.055069140308240346 148.1705497709698 -20.80000000000005 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -1.5112451663323863 148.17054977096984 -20.90266166351433 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -1.5112451663323863 148.17054977096984 -20.90266166351433 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -3.0507594009220105 148.17054977096984 -21.208890084531237 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -3.0507594009220105 148.17054977096984 -21.208890084531237 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -4.53713204807285 148.17054977096984 -21.71344560986461 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -4.53713204807285 148.17054977096984 -21.71344560986461 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -5.944930859691771 148.17054977096984 -22.407695154586794 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -5.944930859691771 148.17054977096984 -22.407695154586794 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -7.250068007796415 148.17054977096984 -23.279759916505235 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -7.250068007796415 148.17054977096984 -23.279759916505235 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -8.430212233930328 148.17054977096984 -24.314718625761483 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -8.430212233930328 148.17054977096984 -24.314718625761483 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -9.46517094318659 148.17054977096984 -25.494862851895416 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -9.46517094318659 148.17054977096984 -25.494862851895416 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -10.33723570510503 148.17054977096984 -26.800000000000058 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -10.33723570510503 148.17054977096984 -26.800000000000058 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -11.031485249827195 148.17054977096984 -28.207798811618986 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -11.031485249827195 148.17054977096984 -28.207798811618986 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -11.53604077516058 148.17054977096984 -29.69417145876981 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -11.53604077516058 148.17054977096984 -29.69417145876981 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -11.842269196177483 148.17054977096984 -31.233685693359437 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -11.842269196177483 148.17054977096984 -31.233685693359437 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -11.94493085969176 148.17054977096984 -32.800000000000054 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 6.055069140308252 148.1705497709698 -43.19230484541332 + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 6.055069140308252 148.1705497709698 -43.19230484541332 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 7.360206288412901 148.1705497709698 -42.32024008349487 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 7.360206288412901 148.1705497709698 -42.32024008349487 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 8.540350514546814 148.1705497709698 -41.28528137423862 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 8.540350514546814 148.1705497709698 -41.28528137423862 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 9.575309223803076 148.1705497709698 -40.105137148104696 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 9.575309223803076 148.1705497709698 -40.105137148104696 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 10.447373985721516 148.1705497709698 -38.800000000000054 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 10.447373985721516 148.1705497709698 -38.800000000000054 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 11.141623530443681 148.1705497709698 -37.39220118838113 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 11.141623530443681 148.1705497709698 -37.39220118838113 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 11.646179055777065 148.1705497709698 -35.9058285412303 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 11.646179055777065 148.1705497709698 -35.9058285412303 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 11.952407476793969 148.1705497709698 -34.36631430664067 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex 11.952407476793969 148.1705497709698 -34.36631430664067 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 12.055069140308246 148.1705497709698 -32.800000000000054 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex 6.055069140308252 148.1705497709698 -43.19230484541332 + vertex 4.6472703286893084 148.1705497709698 -43.8865543901355 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex 4.6472703286893084 148.1705497709698 -43.8865543901355 + vertex 3.160897681538491 148.1705497709698 -44.391109915468874 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex 3.160897681538491 148.1705497709698 -44.391109915468874 + vertex 1.621383446948867 148.1705497709698 -44.69733833648578 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex 1.621383446948867 148.1705497709698 -44.69733833648578 + vertex 0.055069140308240346 148.1705497709698 -44.800000000000054 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex 0.055069140308240346 148.1705497709698 -44.800000000000054 + vertex -1.5112451663323863 148.17054977096984 -44.69733833648578 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -1.5112451663323863 148.17054977096984 -44.69733833648578 + vertex -3.0507594009220105 148.17054977096984 -44.391109915468874 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -3.0507594009220105 148.17054977096984 -44.391109915468874 + vertex -4.537132048072828 148.17054977096984 -43.8865543901355 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -4.537132048072828 148.17054977096984 -43.8865543901355 + vertex -5.944930859691748 148.17054977096984 -43.192304845413325 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -5.944930859691748 148.17054977096984 -43.192304845413325 + vertex -7.250068007796415 148.17054977096984 -42.32024008349488 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -7.250068007796415 148.17054977096984 -42.32024008349488 + vertex -8.430212233930328 148.17054977096984 -41.285281374238636 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -8.430212233930328 148.17054977096984 -41.285281374238636 + vertex -9.465170943186568 148.17054977096984 -40.10513714810471 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -9.465170943186568 148.17054977096984 -40.10513714810471 + vertex -10.33723570510503 148.17054977096984 -38.80000000000006 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -10.33723570510503 148.17054977096984 -38.80000000000006 + vertex -11.031485249827195 148.17054977096984 -37.392201188381144 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -11.031485249827195 148.17054977096984 -37.392201188381144 + vertex -11.53604077516058 148.17054977096984 -35.905828541230306 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -11.53604077516058 148.17054977096984 -35.905828541230306 + vertex -11.842269196177483 148.17054977096984 -34.36631430664068 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -11.842269196177483 148.17054977096984 -34.36631430664068 + vertex -11.94493085969176 148.17054977096984 -32.800000000000054 + endloop +endfacet +facet normal -5.551115123125784e-16 -1.0 1.7258201180401984e-16 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -11.94493085969176 148.17054977096984 -32.800000000000054 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + endloop +endfacet +facet normal -0.7282622292749814 0.685298566620006 -1.7433085302539796e-16 + outer loop + vertex -28.545977373939976 197.09325395373202 -3.000000000000062 + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -28.545977373939976 197.09325395373202 -62.600000000000065 + endloop +endfacet +facet normal -0.7282622292749814 0.685298566620006 -1.7433085302539796e-16 + outer loop + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -28.545977373939976 197.09325395373202 -3.000000000000062 + vertex -27.44161754666337 198.26684979780472 -3.000000000000062 + endloop +endfacet +facet normal -0.6367513322442928 0.7710692192566879 -1.8208893893752738e-16 + outer loop + vertex -25.09056419799865 200.470427586262 -62.600000000000065 + vertex -23.847984815414293 201.49655346124194 -3.000000000000062 + vertex -23.847984815414293 201.49655346124194 -62.600000000000065 + endloop +endfacet +facet normal -0.6367513322442928 0.7710692192566879 -1.8208893893752738e-16 + outer loop + vertex -23.847984815414293 201.49655346124194 -3.000000000000062 + vertex -25.09056419799865 200.470427586262 -62.600000000000065 + vertex -25.09056419799865 200.470427586262 -3.000000000000062 + endloop +endfacet +facet normal -0.570083656934367 0.821586650388344 -1.8567535078147368e-16 + outer loop + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + vertex -21.23958885775712 203.38850415989336 -3.000000000000062 + vertex -21.23958885775712 203.38850415989336 -62.600000000000065 + endloop +endfacet +facet normal -0.570083656934367 0.821586650388344 -1.8567535078147368e-16 + outer loop + vertex -21.23958885775712 203.38850415989336 -3.000000000000062 + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + endloop +endfacet +facet normal -0.7562861433211027 0.654240987267301 -1.711281167414057e-16 + outer loop + vertex -29.600287858287494 195.87449752362716 -3.000000000000062 + vertex -28.545977373939976 197.09325395373202 -62.600000000000065 + vertex -29.600287858287494 195.87449752362713 -62.600000000000065 + endloop +endfacet +facet normal -0.7562861433211027 0.654240987267301 -1.711281167414057e-16 + outer loop + vertex -28.545977373939976 197.09325395373202 -62.600000000000065 + vertex -29.600287858287494 195.87449752362716 -3.000000000000062 + vertex -28.545977373939976 197.09325395373202 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -35.79653790411557 146.77186705673725 -55.53185165257819 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -35.79653790411557 146.77186705673725 -55.53185165257819 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -36.03771885901303 146.35412938903684 -55.332050807568926 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.03771885901303 146.35412938903684 -55.332050807568926 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -36.2448256401996 145.9954099214297 -55.01421356237315 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.2448256401996 145.9954099214297 -55.01421356237315 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -36.40374426279749 145.72015479282126 -54.600000000000044 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.40374426279749 145.72015479282126 -54.600000000000044 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -40.6366075984466 138.3886204339815 -40.57645713530763 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.6366075984466 138.3886204339815 -40.57645713530763 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -40.687718859012996 138.30009313384159 -39.80000000000006 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.687718859012996 138.30009313384159 -39.80000000000006 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -35.79653790411557 146.77186705673725 -55.53185165257819 + vertex -35.537718859013054 147.22015479282126 -55.60000000000006 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -35.537718859013054 147.22015479282126 -55.60000000000006 + vertex -23.13771885901301 168.69758480667537 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.40374426279749 145.72015479282126 -54.600000000000044 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -36.50364468530211 145.54712218534567 -54.11763809020509 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.50364468530211 145.54712218534567 -54.11763809020509 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -36.537718859013054 145.4881039852524 -53.60000000000005 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.537718859013054 145.4881039852524 -53.60000000000005 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -36.537718859013054 145.4881039852524 -51.600000000000044 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.537718859013054 145.4881039852524 -51.600000000000044 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.537718859013054 145.4881039852524 -51.600000000000044 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -36.50364468530209 145.54712218534567 -51.082361909795 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.50364468530209 145.54712218534567 -51.082361909795 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -36.40374426279749 145.72015479282126 -50.60000000000003 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.40374426279749 145.72015479282126 -50.60000000000003 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -36.2448256401996 145.9954099214297 -50.185786437626945 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.2448256401996 145.9954099214297 -50.185786437626945 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -36.03771885901303 146.35412938903687 -49.86794919243116 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.03771885901303 146.35412938903687 -49.86794919243116 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -35.79653790411557 146.77186705673725 -49.6681483474219 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -35.79653790411557 146.77186705673725 -49.6681483474219 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -39.93771885901299 139.59913123951824 -42.398076211353384 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -39.93771885901299 139.59913123951824 -42.398076211353384 + vertex -39.57594742666676 140.22573774106885 -42.697777478867266 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -39.57594742666676 140.22573774106885 -42.697777478867266 + vertex -39.18771885901298 140.8981693451949 -42.80000000000007 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.687718859012996 138.30009313384159 -39.80000000000006 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -40.687718859012975 138.30009313384159 -25.800000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.687718859012975 138.30009313384159 -25.800000000000065 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -40.63660759844658 138.38862043398146 -25.0235428646925 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.63660759844658 138.38862043398146 -25.0235428646925 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -40.486756964689626 138.6481693451949 -24.300000000000068 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.486756964689626 138.6481693451949 -24.300000000000068 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -40.248379030792805 139.0610520381075 -23.678679656440423 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -40.248379030792805 139.0610520381075 -23.678679656440423 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -39.93771885901299 139.59913123951824 -23.20192378864675 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.93771885901299 139.59913123951824 -23.20192378864675 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -39.57594742666678 140.22573774106885 -22.90222252113286 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.57594742666678 140.22573774106885 -22.90222252113286 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.244825640199736 145.99540992142974 -15.41421356237314 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -36.244825640199736 145.99540992142974 -15.41421356237314 + vertex -36.03771885901319 146.3541293890369 -15.732050807568926 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -36.03771885901319 146.3541293890369 -15.732050807568926 + vertex -35.79653790411572 146.7718670567373 -15.931851652578185 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -35.79653790411572 146.7718670567373 -15.931851652578185 + vertex -35.53771885901319 147.22015479282135 -16.00000000000005 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -35.53771885901319 147.22015479282135 -16.00000000000005 + vertex -23.137718859013145 168.6975848066754 -16.000000000000068 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.244825640199736 145.99540992142974 -15.41421356237314 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.40374426279762 145.72015479282135 -15.000000000000046 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.40374426279762 145.72015479282135 -15.000000000000046 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.50364468530227 145.54712218534573 -14.517638090205088 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.50364468530227 145.54712218534573 -14.517638090205088 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.53771885901319 145.48810398525248 -14.000000000000048 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.53771885901319 145.48810398525248 -14.000000000000048 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.53771885901319 145.48810398525248 -12.000000000000034 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.53771885901319 145.48810398525248 -12.000000000000034 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.50364468530225 145.54712218534573 -11.482361909795 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.50364468530225 145.54712218534573 -11.482361909795 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.40374426279762 145.72015479282135 -11.000000000000036 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.40374426279762 145.72015479282135 -11.000000000000036 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.244825640199736 145.99540992142974 -10.585786437626947 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.244825640199736 145.99540992142974 -10.585786437626947 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -36.03771885901319 146.3541293890369 -10.267949192431168 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -36.03771885901319 146.3541293890369 -10.267949192431168 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -35.79653790411572 146.77186705673734 -10.068148347421902 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -35.79653790411572 146.77186705673734 -10.068148347421902 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -35.53771885901319 147.22015479282135 -10.000000000000037 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -22.171793032723926 170.37061741415096 -54.117638090205105 + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.171793032723926 170.37061741415096 -54.117638090205105 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -22.271693455228576 170.19758480667537 -54.60000000000007 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.271693455228576 170.19758480667537 -54.60000000000007 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -22.43061207782646 169.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.43061207782646 169.92232967806692 -55.01421356237316 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -22.63771885901299 169.56361021045976 -55.33205080756895 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.63771885901299 169.56361021045976 -55.33205080756895 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -22.878899813910476 169.14587254275938 -55.531851652578204 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910476 169.14587254275938 -55.531851652578204 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -23.13771885901301 168.69758480667537 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.171793032723926 170.37061741415096 -54.117638090205105 + vertex -22.13771885901301 170.42963561424423 -53.60000000000007 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.13771885901301 170.42963561424423 -53.60000000000007 + vertex -22.13771885901301 170.42963561424423 -51.600000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.13771885901301 170.42963561424423 -51.600000000000065 + vertex -22.171793032723926 170.37061741415096 -51.08236190979502 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.171793032723926 170.37061741415096 -51.08236190979502 + vertex -22.271693455228576 170.19758480667537 -50.60000000000005 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.271693455228576 170.19758480667537 -50.60000000000005 + vertex -22.43061207782646 169.92232967806694 -50.185786437626966 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.43061207782646 169.92232967806694 -50.185786437626966 + vertex -22.63771885901299 169.5636102104598 -49.86794919243118 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.63771885901299 169.5636102104598 -49.86794919243118 + vertex -22.878899813910476 169.14587254275938 -49.66814834742192 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.878899813910476 169.14587254275938 -49.66814834742192 + vertex -23.13771885901301 168.69758480667537 -49.60000000000006 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -23.13771885901301 168.69758480667537 -49.60000000000006 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -38.127058687233145 142.7352866522823 -41.921320343559714 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -38.127058687233145 142.7352866522823 -41.921320343559714 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -38.43771885901297 142.19720745087156 -42.39807621135338 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -38.43771885901297 142.19720745087156 -42.39807621135338 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -38.79949029135918 141.57060094932095 -42.697777478867266 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -38.79949029135918 141.57060094932095 -42.697777478867266 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -39.18771885901298 140.8981693451949 -42.80000000000007 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -38.127058687233145 142.7352866522823 -41.921320343559714 + vertex -37.88868075333632 143.1481693451949 -41.30000000000007 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -37.88868075333632 143.1481693451949 -41.30000000000007 + vertex -37.73883011957936 143.40771825640834 -40.57645713530763 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -37.73883011957936 143.40771825640834 -40.57645713530763 + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + vertex -22.637718859013166 169.56361021045984 -15.732050807568942 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.637718859013166 169.56361021045984 -15.732050807568942 + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + vertex -37.68771885901297 143.49624555654825 -25.800000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -37.68771885901297 143.49624555654825 -25.800000000000065 + vertex -37.73883011957936 143.40771825640834 -25.0235428646925 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -37.73883011957936 143.40771825640834 -25.0235428646925 + vertex -37.88868075333632 143.1481693451949 -24.30000000000006 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -37.88868075333632 143.1481693451949 -24.30000000000006 + vertex -38.127058687233145 142.7352866522823 -23.678679656440423 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -38.127058687233145 142.7352866522823 -23.678679656440423 + vertex -38.43771885901297 142.19720745087156 -23.20192378864675 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -38.43771885901297 142.19720745087156 -23.20192378864675 + vertex -38.7994902913592 141.57060094932095 -22.90222252113286 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -38.7994902913592 141.57060094932095 -22.90222252113286 + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -23.137718859013145 168.6975848066754 -16.000000000000068 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -22.27169345522871 170.19758480667542 -15.000000000000062 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.27169345522871 170.19758480667542 -15.000000000000062 + vertex -22.171793032724107 170.37061741415104 -14.517638090205104 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.171793032724107 170.37061741415104 -14.517638090205104 + vertex -22.137718859013145 170.4296356142443 -14.000000000000064 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.137718859013145 170.4296356142443 -14.000000000000064 + vertex -22.137718859013145 170.4296356142443 -12.000000000000052 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.137718859013145 170.4296356142443 -12.000000000000052 + vertex -22.171793032724107 170.37061741415104 -11.482361909795022 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.171793032724107 170.37061741415104 -11.482361909795022 + vertex -22.27169345522871 170.19758480667542 -11.000000000000048 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.27169345522871 170.19758480667542 -11.000000000000048 + vertex -22.430612077826595 169.92232967806703 -10.58578643762697 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.430612077826595 169.92232967806703 -10.58578643762697 + vertex -22.637718859013166 169.56361021045984 -10.267949192431178 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.637718859013166 169.56361021045984 -10.267949192431178 + vertex -22.878899813910653 169.14587254275943 -10.068148347421925 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -22.878899813910653 169.14587254275943 -10.068148347421925 + vertex -23.137718859013145 168.6975848066754 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -23.137718859013145 168.6975848066754 -10.00000000000005 + vertex -35.53771885901319 147.22015479282135 -10.000000000000037 + endloop +endfacet +facet normal -0.8660254037844387 0.4999999999999999 -8.06575702183646e-17 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -35.53771885901319 147.22015479282135 -10.000000000000037 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal -0.8322327793613368 0.5544263710868239 -1.5974817945265758e-16 + outer loop + vertex -32.44493085969176 191.9689645055506 -3.000000000000062 + vertex -31.55147180223168 193.3101090711995 -62.600000000000065 + vertex -32.44493085969176 191.9689645055506 -62.600000000000065 + endloop +endfacet +facet normal -0.8322327793613368 0.5544263710868239 -1.5974817945265758e-16 + outer loop + vertex -31.55147180223168 193.3101090711995 -62.600000000000065 + vertex -32.44493085969176 191.9689645055506 -3.000000000000062 + vertex -31.55147180223168 193.31010907119952 -3.000000000000062 + endloop +endfacet +facet normal -0.6039459209966601 0.7970252972845316 -1.8404317463084578e-16 + outer loop + vertex -23.847984815414293 201.49655346124194 -62.600000000000065 + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + endloop +endfacet +facet normal -0.6039459209966601 0.7970252972845316 -1.8404317463084578e-16 + outer loop + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + vertex -23.847984815414293 201.49655346124194 -62.600000000000065 + vertex -23.847984815414293 201.49655346124194 -3.000000000000062 + endloop +endfacet +facet normal -0.8083169430505417 0.588747585623438 -1.638303947657804e-16 + outer loop + vertex -31.55147180223168 193.31010907119952 -3.000000000000062 + vertex -30.60270404808994 194.61271322520327 -62.600000000000065 + vertex -31.55147180223168 193.3101090711995 -62.600000000000065 + endloop +endfacet +facet normal -0.8083169430505417 0.588747585623438 -1.638303947657804e-16 + outer loop + vertex -30.60270404808994 194.61271322520327 -62.600000000000065 + vertex -31.55147180223168 193.31010907119952 -3.000000000000062 + vertex -30.60270404808994 194.6127132252033 -3.000000000000062 + endloop +endfacet +facet normal 0.46275692980869365 0.8864852079499307 -1.1736899405614553e-16 + outer loop + vertex 17.163768745909092 205.80157985229917 -62.600000000000065 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + endloop +endfacet +facet normal 0.46275692980869365 0.8864852079499307 -1.1736899405614553e-16 + outer loop + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + vertex 17.163768745909092 205.80157985229917 -62.600000000000065 + vertex 17.163768745909092 205.80157985229923 -3.000000000000062 + endloop +endfacet +facet normal 0.14589989704428336 0.9892993581532677 -1.5950409550416897e-16 + outer loop + vertex 4.877244176212259 209.50613739606416 -62.600000000000065 + vertex 6.471501805676724 209.27101945922942 -3.000000000000062 + vertex 6.471501805676724 209.27101945922942 -62.600000000000065 + endloop +endfacet +facet normal 0.14589989704428336 0.9892993581532677 -1.5950409550416897e-16 + outer loop + vertex 6.471501805676724 209.27101945922942 -3.000000000000062 + vertex 4.877244176212259 209.50613739606416 -62.600000000000065 + vertex 4.877244176212259 209.50613739606416 -3.000000000000062 + endloop +endfacet +facet normal 0.5352237960733169 0.8447102983371686 -1.0458099413404883e-16 + outer loop + vertex 19.988475029279908 204.2510182344538 -62.600000000000065 + vertex 21.349727138373666 203.38850415989336 -3.000000000000062 + vertex 21.349727138373666 203.3885041598933 -62.600000000000065 + endloop +endfacet +facet normal 0.5352237960733169 0.8447102983371686 -1.0458099413404883e-16 + outer loop + vertex 21.349727138373666 203.38850415989336 -3.000000000000062 + vertex 19.988475029279908 204.2510182344538 -62.600000000000065 + vertex 19.988475029279908 204.2510182344538 -3.000000000000062 + endloop +endfacet +facet normal -0.020915980694883277 0.9997812369471492 -1.7415434132155044e-16 + outer loop + vertex -1.5560800549907094 209.77543271540065 -62.600000000000065 + vertex 0.05506914030825163 209.80913885452406 -3.000000000000062 + vertex 0.05506914030825163 209.809138854524 -62.600000000000065 + endloop +endfacet +facet normal -0.020915980694883277 0.9997812369471492 -1.7415434132155044e-16 + outer loop + vertex 0.05506914030825163 209.80913885452406 -3.000000000000062 + vertex -1.5560800549907094 209.77543271540065 -62.600000000000065 + vertex -1.5560800549907094 209.77543271540065 -3.000000000000062 + endloop +endfacet +facet normal -0.49942734013696766 0.8663557767590135 -1.8796266836386066e-16 + outer loop + vertex -19.87833674866336 204.2510182344538 -62.600000000000065 + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + endloop +endfacet +facet normal -0.49942734013696766 0.8663557767590135 -1.8796266836386066e-16 + outer loop + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex -19.87833674866336 204.2510182344538 -62.600000000000065 + vertex -19.87833674866336 204.2510182344538 -3.000000000000062 + endloop +endfacet +facet normal -0.46275692980869254 0.8864852079499311 -1.886138071888624e-16 + outer loop + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex -17.053630465292567 205.80157985229926 -3.000000000000062 + vertex -17.053630465292567 205.80157985229923 -62.600000000000065 + endloop +endfacet +facet normal -0.46275692980869254 0.8864852079499311 -1.886138071888624e-16 + outer loop + vertex -17.053630465292567 205.80157985229926 -3.000000000000062 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + endloop +endfacet +facet normal -0.18714752017171726 0.9823318205645061 -1.8393916645092217e-16 + outer loop + vertex -7.944392955630252 208.96943090627002 -62.600000000000065 + vertex -6.361363525060216 209.27101945922942 -3.000000000000062 + vertex -6.361363525060216 209.27101945922942 -62.600000000000065 + endloop +endfacet +facet normal -0.18714752017171726 0.9823318205645061 -1.8393916645092217e-16 + outer loop + vertex -6.361363525060216 209.27101945922942 -3.000000000000062 + vertex -7.944392955630252 208.96943090627002 -62.600000000000065 + vertex -7.944392955630252 208.96943090627002 -3.000000000000062 + endloop +endfacet +facet normal -0.5352237960733159 0.8447102983371693 -1.86982611223156e-16 + outer loop + vertex -21.23958885775712 203.38850415989336 -62.600000000000065 + vertex -19.87833674866336 204.2510182344538 -3.000000000000062 + vertex -19.87833674866336 204.2510182344538 -62.600000000000065 + endloop +endfacet +facet normal -0.5352237960733159 0.8447102983371693 -1.86982611223156e-16 + outer loop + vertex -19.87833674866336 204.2510182344538 -3.000000000000062 + vertex -21.23958885775712 203.38850415989336 -62.600000000000065 + vertex -21.23958885775712 203.38850415989336 -3.000000000000062 + endloop +endfacet +facet normal -0.14589989704428225 0.989299358153268 -1.8196645150886406e-16 + outer loop + vertex -6.361363525060216 209.27101945922942 -62.600000000000065 + vertex -4.767105895595756 209.50613739606416 -3.000000000000062 + vertex -4.767105895595756 209.50613739606416 -62.600000000000065 + endloop +endfacet +facet normal -0.14589989704428225 0.989299358153268 -1.8196645150886406e-16 + outer loop + vertex -4.767105895595756 209.50613739606416 -3.000000000000062 + vertex -6.361363525060216 209.27101945922942 -62.600000000000065 + vertex -6.361363525060216 209.27101945922942 -3.000000000000062 + endloop +endfacet +facet normal 0.668442484061863 0.7437638371830175 -7.690445521229434e-17 + outer loop + vertex 25.20070247861516 200.47042758626193 -62.600000000000065 + vertex 26.399279190685665 199.3932313652282 -3.000000000000062 + vertex 26.399279190685665 199.39323136522816 -62.600000000000065 + endloop +endfacet +facet normal 0.668442484061863 0.7437638371830175 -7.690445521229434e-17 + outer loop + vertex 26.399279190685665 199.3932313652282 -3.000000000000062 + vertex 25.20070247861516 200.47042758626193 -62.600000000000065 + vertex 25.20070247861516 200.47042758626193 -3.000000000000062 + endloop +endfacet +facet normal 0.4994273401369627 0.8663557767590164 -1.1107217741835e-16 + outer loop + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + vertex 19.988475029279908 204.2510182344538 -3.000000000000062 + vertex 19.988475029279908 204.2510182344538 -62.600000000000065 + endloop +endfacet +facet normal 0.4994273401369627 0.8663557767590164 -1.1107217741835e-16 + outer loop + vertex 19.988475029279908 204.2510182344538 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + endloop +endfacet +facet normal 0.10439696179123423 0.9945357079405243 -1.6360263546573064e-16 + outer loop + vertex 3.274548159994501 209.67437328084154 -62.600000000000065 + vertex 4.877244176212259 209.50613739606416 -3.000000000000062 + vertex 4.877244176212259 209.50613739606416 -62.600000000000065 + endloop +endfacet +facet normal 0.10439696179123423 0.9945357079405243 -1.6360263546573064e-16 + outer loop + vertex 4.877244176212259 209.50613739606416 -3.000000000000062 + vertex 3.274548159994501 209.67437328084154 -62.600000000000065 + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + endloop +endfacet +facet normal 0.06271134093822832 0.9980317067697445 -1.6741488504968628e-16 + outer loop + vertex 1.6662183356072127 209.77543271540065 -62.600000000000065 + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + vertex 3.274548159994501 209.67437328084154 -62.600000000000065 + endloop +endfacet +facet normal 0.06271134093822832 0.9980317067697445 -1.6741488504968628e-16 + outer loop + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + vertex 1.6662183356072127 209.77543271540065 -62.600000000000065 + vertex 1.6662183356072127 209.77543271540065 -3.000000000000062 + endloop +endfacet +facet normal 0.6367513322442965 0.771069219256685 -8.405641526142003e-17 + outer loop + vertex 23.958123096030832 201.4965534612419 -62.600000000000065 + vertex 25.20070247861516 200.47042758626193 -3.000000000000062 + vertex 25.20070247861516 200.47042758626193 -62.600000000000065 + endloop +endfacet +facet normal 0.6367513322442965 0.771069219256685 -8.405641526142003e-17 + outer loop + vertex 25.20070247861516 200.47042758626193 -3.000000000000062 + vertex 23.958123096030832 201.4965534612419 -62.600000000000065 + vertex 23.958123096030832 201.4965534612419 -3.000000000000062 + endloop +endfacet +facet normal 0.22806765142186164 0.9736452877588 -1.5047732123428022e-16 + outer loop + vertex 8.05453123624676 208.96943090626996 -62.600000000000065 + vertex 9.623562304152413 208.60189949091352 -3.000000000000062 + vertex 9.623562304152413 208.60189949091347 -62.600000000000065 + endloop +endfacet +facet normal 0.22806765142186164 0.9736452877588 -1.5047732123428022e-16 + outer loop + vertex 9.623562304152413 208.60189949091352 -3.000000000000062 + vertex 8.05453123624676 208.96943090626996 -62.600000000000065 + vertex 8.05453123624676 208.96943090627002 -3.000000000000062 + endloop +endfacet +facet normal 0.18714752017171837 0.9823318205645059 -1.5512643725333354e-16 + outer loop + vertex 6.471501805676724 209.27101945922942 -62.600000000000065 + vertex 8.05453123624676 208.96943090627002 -3.000000000000062 + vertex 8.05453123624676 208.96943090626996 -62.600000000000065 + endloop +endfacet +facet normal 0.18714752017171837 0.9823318205645059 -1.5512643725333354e-16 + outer loop + vertex 8.05453123624676 208.96943090627002 -3.000000000000062 + vertex 6.471501805676724 209.27101945922942 -62.600000000000065 + vertex 6.471501805676724 209.27101945922942 -3.000000000000062 + endloop +endfacet +facet normal -0.2280676514218636 0.9736452877587994 -1.8559000385555494e-16 + outer loop + vertex -9.513424023535883 208.60189949091352 -62.600000000000065 + vertex -7.944392955630252 208.96943090627002 -3.000000000000062 + vertex -7.944392955630252 208.96943090627002 -62.600000000000065 + endloop +endfacet +facet normal -0.2280676514218636 0.9736452877587994 -1.8559000385555494e-16 + outer loop + vertex -7.944392955630252 208.96943090627002 -3.000000000000062 + vertex -9.513424023535883 208.60189949091352 -62.600000000000065 + vertex -9.513424023535883 208.60189949091352 -3.000000000000062 + endloop +endfacet +facet normal -0.3966766701456137 -0.6870641468694428 -0.6087614290087314 + outer loop + vertex -36.40374426279749 145.72015479282126 -54.600000000000044 + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + vertex -36.2448256401996 145.9954099214297 -55.01421356237315 + endloop +endfacet +facet normal -0.3966766701456137 -0.6870641468694428 -0.6087614290087314 + outer loop + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + vertex -36.40374426279749 145.72015479282126 -54.600000000000044 + vertex -38.13579507036633 146.72015479282126 -54.600000000000044 + endloop +endfacet +facet normal 0.3043807145043631 0.5272028623656725 -0.793353340291232 + outer loop + vertex -24.36976966658183 170.56361021045976 -55.33205080756895 + vertex -22.43061207782646 169.92232967806692 -55.01421356237316 + vertex -22.63771885901299 169.56361021045976 -55.33205080756895 + endloop +endfacet +facet normal 0.3043807145043631 0.5272028623656725 -0.793353340291232 + outer loop + vertex -22.43061207782646 169.92232967806692 -55.01421356237316 + vertex -24.36976966658183 170.56361021045976 -55.33205080756895 + vertex -24.162662885395303 170.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal 0.19134171618254017 0.3314135740355839 0.9238795325112906 + outer loop + vertex -22.63771885901299 169.5636102104598 -49.86794919243118 + vertex -24.61095062147932 170.14587254275938 -49.66814834742192 + vertex -22.878899813910476 169.14587254275938 -49.66814834742192 + endloop +endfacet +facet normal 0.19134171618254017 0.3314135740355839 0.9238795325112906 + outer loop + vertex -24.61095062147932 170.14587254275938 -49.66814834742192 + vertex -22.63771885901299 169.5636102104598 -49.86794919243118 + vertex -24.36976966658183 170.5636102104598 -49.86794919243118 + endloop +endfacet +facet normal -0.19134171618255047 -0.33141357403560173 -0.9238795325112822 + outer loop + vertex -37.76976966658187 147.35412938903687 -55.332050807568926 + vertex -35.79653790411557 146.77186705673725 -55.53185165257819 + vertex -36.03771885901303 146.35412938903684 -55.332050807568926 + endloop +endfacet +facet normal -0.19134171618255047 -0.33141357403560173 -0.9238795325112822 + outer loop + vertex -35.79653790411557 146.77186705673725 -55.53185165257819 + vertex -37.76976966658187 147.35412938903687 -55.332050807568926 + vertex -37.52858871168441 147.77186705673725 -55.53185165257819 + endloop +endfacet +facet normal 0.5000000000000006 0.8660254037844384 -1.525901372395458e-31 + outer loop + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + vertex -22.13771885901301 170.42963561424423 -51.600000000000065 + vertex -22.13771885901301 170.42963561424423 -53.60000000000007 + endloop +endfacet +facet normal 0.5000000000000006 0.8660254037844384 -1.525901372395458e-31 + outer loop + vertex -22.13771885901301 170.42963561424423 -51.600000000000065 + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + vertex -23.869769666581856 171.42963561424423 -51.600000000000065 + endloop +endfacet +facet normal 0.4619397662556413 0.8001031451912602 -0.3826834323651031 + outer loop + vertex -22.271693455228576 170.19758480667537 -54.60000000000007 + vertex -23.90384384029277 171.37061741415096 -54.117638090205105 + vertex -22.171793032723926 170.37061741415096 -54.117638090205105 + endloop +endfacet +facet normal 0.4619397662556413 0.8001031451912602 -0.3826834323651031 + outer loop + vertex -23.90384384029277 171.37061741415096 -54.117638090205105 + vertex -22.271693455228576 170.19758480667537 -54.60000000000007 + vertex -24.00374426279742 171.19758480667534 -54.60000000000007 + endloop +endfacet +facet normal 0.461939766255642 0.8001031451912624 0.3826834323650984 + outer loop + vertex -23.90384384029277 171.37061741415096 -51.08236190979502 + vertex -22.271693455228576 170.19758480667537 -50.60000000000005 + vertex -22.171793032723926 170.37061741415096 -51.08236190979502 + endloop +endfacet +facet normal 0.461939766255642 0.8001031451912624 0.3826834323650984 + outer loop + vertex -22.271693455228576 170.19758480667537 -50.60000000000005 + vertex -23.90384384029277 171.37061741415096 -51.08236190979502 + vertex -24.00374426279742 171.19758480667534 -50.60000000000005 + endloop +endfacet +facet normal 8.187369750874694e-17 -8.35064192169492e-16 -1.0 + outer loop + vertex -37.2697696665819 148.22015479282126 -55.60000000000006 + vertex -23.13771885901301 168.69758480667537 -55.600000000000065 + vertex -35.537718859013054 147.22015479282126 -55.60000000000006 + endloop +endfacet +facet normal 8.187369750874694e-17 -8.35064192169492e-16 -1.0 + outer loop + vertex -23.13771885901301 168.69758480667537 -55.600000000000065 + vertex -37.2697696665819 148.22015479282126 -55.60000000000006 + vertex -24.869769666581853 169.69758480667537 -55.600000000000065 + endloop +endfacet +facet normal 0.30438071450436976 0.5272028623656856 0.7933533402912207 + outer loop + vertex -22.43061207782646 169.92232967806694 -50.185786437626966 + vertex -24.36976966658183 170.5636102104598 -49.86794919243118 + vertex -22.63771885901299 169.5636102104598 -49.86794919243118 + endloop +endfacet +facet normal 0.30438071450436976 0.5272028623656856 0.7933533402912207 + outer loop + vertex -24.36976966658183 170.5636102104598 -49.86794919243118 + vertex -22.43061207782646 169.92232967806694 -50.185786437626966 + vertex -24.162662885395303 170.92232967806694 -50.185786437626966 + endloop +endfacet +facet normal -0.30438071450435433 -0.5272028623656587 -0.7933533402912446 + outer loop + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + vertex -36.03771885901303 146.35412938903684 -55.332050807568926 + vertex -36.2448256401996 145.9954099214297 -55.01421356237315 + endloop +endfacet +facet normal -0.30438071450435433 -0.5272028623656587 -0.7933533402912446 + outer loop + vertex -36.03771885901303 146.35412938903684 -55.332050807568926 + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + vertex -37.76976966658187 147.35412938903687 -55.332050807568926 + endloop +endfacet +facet normal -0.46193976625565 -0.8001031451912763 -0.38268343236505975 + outer loop + vertex -36.50364468530211 145.54712218534567 -54.11763809020509 + vertex -38.13579507036633 146.72015479282126 -54.600000000000044 + vertex -36.40374426279749 145.72015479282126 -54.600000000000044 + endloop +endfacet +facet normal -0.46193976625565 -0.8001031451912763 -0.38268343236505975 + outer loop + vertex -38.13579507036633 146.72015479282126 -54.600000000000044 + vertex -36.50364468530211 145.54712218534567 -54.11763809020509 + vertex -38.23569549287096 146.54712218534567 -54.11763809020509 + endloop +endfacet +facet normal 0.06526309611002556 0.1130389983218139 -0.9914448613738106 + outer loop + vertex -24.869769666581853 169.69758480667537 -55.600000000000065 + vertex -22.878899813910476 169.14587254275938 -55.531851652578204 + vertex -23.13771885901301 168.69758480667537 -55.600000000000065 + endloop +endfacet +facet normal 0.06526309611002556 0.1130389983218139 -0.9914448613738106 + outer loop + vertex -22.878899813910476 169.14587254275938 -55.531851652578204 + vertex -24.869769666581853 169.69758480667537 -55.600000000000065 + vertex -24.61095062147932 170.14587254275938 -55.531851652578204 + endloop +endfacet +facet normal -0.4619397662556533 -0.800103145191281 0.38268343236504554 + outer loop + vertex -38.13579507036633 146.72015479282126 -50.60000000000003 + vertex -36.50364468530209 145.54712218534567 -51.082361909795 + vertex -36.40374426279749 145.72015479282126 -50.60000000000003 + endloop +endfacet +facet normal -0.4619397662556533 -0.800103145191281 0.38268343236504554 + outer loop + vertex -36.50364468530209 145.54712218534567 -51.082361909795 + vertex -38.13579507036633 146.72015479282126 -50.60000000000003 + vertex -38.23569549287094 146.54712218534567 -51.082361909795 + endloop +endfacet +facet normal -0.5000000000000006 -0.8660254037844384 2.44216261170711e-15 + outer loop + vertex -38.269769666581894 146.48810398525242 -51.600000000000044 + vertex -36.537718859013054 145.4881039852524 -53.60000000000005 + vertex -36.537718859013054 145.4881039852524 -51.600000000000044 + endloop +endfacet +facet normal -0.5000000000000006 -0.8660254037844384 2.44216261170711e-15 + outer loop + vertex -36.537718859013054 145.4881039852524 -53.60000000000005 + vertex -38.269769666581894 146.48810398525242 -51.600000000000044 + vertex -38.269769666581894 146.4881039852524 -53.60000000000005 + endloop +endfacet +facet normal -0.39667667014561225 -0.6870641468694391 0.6087614290087366 + outer loop + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + vertex -36.40374426279749 145.72015479282126 -50.60000000000003 + vertex -36.2448256401996 145.9954099214297 -50.185786437626945 + endloop +endfacet +facet normal -0.39667667014561225 -0.6870641468694391 0.6087614290087366 + outer loop + vertex -36.40374426279749 145.72015479282126 -50.60000000000003 + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + vertex -38.13579507036633 146.72015479282126 -50.60000000000003 + endloop +endfacet +facet normal 0.06526309611002595 0.11303899832181648 0.9914448613738104 + outer loop + vertex -22.878899813910476 169.14587254275938 -49.66814834742192 + vertex -24.869769666581853 169.69758480667537 -49.60000000000006 + vertex -23.13771885901301 168.69758480667537 -49.60000000000006 + endloop +endfacet +facet normal 0.06526309611002595 0.11303899832181648 0.9914448613738104 + outer loop + vertex -24.869769666581853 169.69758480667537 -49.60000000000006 + vertex -22.878899813910476 169.14587254275938 -49.66814834742192 + vertex -24.61095062147932 170.14587254275938 -49.66814834742192 + endloop +endfacet +facet normal 0.49572243068690497 0.8586164364012591 -0.13052619222006556 + outer loop + vertex -22.171793032723926 170.37061741415096 -54.117638090205105 + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + vertex -22.13771885901301 170.42963561424423 -53.60000000000007 + endloop +endfacet +facet normal 0.49572243068690497 0.8586164364012591 -0.13052619222006556 + outer loop + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + vertex -22.171793032723926 170.37061741415096 -54.117638090205105 + vertex -23.90384384029277 171.37061741415096 -54.117638090205105 + endloop +endfacet +facet normal 0.39667667014562535 0.6870641468694629 0.6087614290087013 + outer loop + vertex -24.00374426279742 171.19758480667534 -50.60000000000005 + vertex -22.43061207782646 169.92232967806694 -50.185786437626966 + vertex -22.271693455228576 170.19758480667537 -50.60000000000005 + endloop +endfacet +facet normal 0.39667667014562535 0.6870641468694629 0.6087614290087013 + outer loop + vertex -22.43061207782646 169.92232967806694 -50.185786437626966 + vertex -24.00374426279742 171.19758480667534 -50.60000000000005 + vertex -24.162662885395303 170.92232967806694 -50.185786437626966 + endloop +endfacet +facet normal -0.4957224306869045 -0.8586164364012583 0.13052619222007125 + outer loop + vertex -38.23569549287094 146.54712218534567 -51.082361909795 + vertex -36.537718859013054 145.4881039852524 -51.600000000000044 + vertex -36.50364468530209 145.54712218534567 -51.082361909795 + endloop +endfacet +facet normal -0.4957224306869045 -0.8586164364012583 0.13052619222007125 + outer loop + vertex -36.537718859013054 145.4881039852524 -51.600000000000044 + vertex -38.23569549287094 146.54712218534567 -51.082361909795 + vertex -38.269769666581894 146.48810398525242 -51.600000000000044 + endloop +endfacet +facet normal -0.30438071450435156 -0.5272028623656525 0.7933533402912498 + outer loop + vertex -36.03771885901303 146.35412938903687 -49.86794919243116 + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + vertex -36.2448256401996 145.9954099214297 -50.185786437626945 + endloop +endfacet +facet normal -0.30438071450435156 -0.5272028623656525 0.7933533402912498 + outer loop + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + vertex -36.03771885901303 146.35412938903687 -49.86794919243116 + vertex -37.76976966658187 147.35412938903687 -49.86794919243116 + endloop +endfacet +facet normal -0.06526309611002613 -0.11303899832181678 -0.9914448613738103 + outer loop + vertex -37.52858871168441 147.77186705673725 -55.53185165257819 + vertex -35.537718859013054 147.22015479282126 -55.60000000000006 + vertex -35.79653790411557 146.77186705673725 -55.53185165257819 + endloop +endfacet +facet normal -0.06526309611002613 -0.11303899832181678 -0.9914448613738103 + outer loop + vertex -35.537718859013054 147.22015479282126 -55.60000000000006 + vertex -37.52858871168441 147.77186705673725 -55.53185165257819 + vertex -37.2697696665819 148.22015479282126 -55.60000000000006 + endloop +endfacet +facet normal -0.19134171618255466 -0.3314135740356073 0.9238795325112792 + outer loop + vertex -35.79653790411557 146.77186705673725 -49.6681483474219 + vertex -37.76976966658187 147.35412938903687 -49.86794919243116 + vertex -36.03771885901303 146.35412938903687 -49.86794919243116 + endloop +endfacet +facet normal -0.19134171618255466 -0.3314135740356073 0.9238795325112792 + outer loop + vertex -37.76976966658187 147.35412938903687 -49.86794919243116 + vertex -35.79653790411557 146.77186705673725 -49.6681483474219 + vertex -37.52858871168441 147.77186705673725 -49.6681483474219 + endloop +endfacet +facet normal 0.3966766701456188 0.6870641468694504 -0.6087614290087198 + outer loop + vertex -22.43061207782646 169.92232967806692 -55.01421356237316 + vertex -24.00374426279742 171.19758480667534 -54.60000000000007 + vertex -22.271693455228576 170.19758480667537 -54.60000000000007 + endloop +endfacet +facet normal 0.3966766701456188 0.6870641468694504 -0.6087614290087198 + outer loop + vertex -24.00374426279742 171.19758480667534 -54.60000000000007 + vertex -22.43061207782646 169.92232967806692 -55.01421356237316 + vertex -24.162662885395303 170.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal -8.187369750874702e-17 8.350641921694918e-16 1.0 + outer loop + vertex -23.13771885901301 168.69758480667537 -49.60000000000006 + vertex -37.2697696665819 148.2201547928213 -49.60000000000003 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + endloop +endfacet +facet normal -8.187369750874702e-17 8.350641921694918e-16 1.0 + outer loop + vertex -37.2697696665819 148.2201547928213 -49.60000000000003 + vertex -23.13771885901301 168.69758480667537 -49.60000000000006 + vertex -24.869769666581853 169.69758480667537 -49.60000000000006 + endloop +endfacet +facet normal 0.1913417161825495 0.33141357403559835 -0.9238795325112834 + outer loop + vertex -24.61095062147932 170.14587254275938 -55.531851652578204 + vertex -22.63771885901299 169.56361021045976 -55.33205080756895 + vertex -22.878899813910476 169.14587254275938 -55.531851652578204 + endloop +endfacet +facet normal 0.1913417161825495 0.33141357403559835 -0.9238795325112834 + outer loop + vertex -22.63771885901299 169.56361021045976 -55.33205080756895 + vertex -24.61095062147932 170.14587254275938 -55.531851652578204 + vertex -24.36976966658183 170.56361021045976 -55.33205080756895 + endloop +endfacet +facet normal -0.49572243068690525 -0.8586164364012598 -0.13052619222005923 + outer loop + vertex -36.537718859013054 145.4881039852524 -53.60000000000005 + vertex -38.23569549287096 146.54712218534567 -54.11763809020509 + vertex -36.50364468530211 145.54712218534567 -54.11763809020509 + endloop +endfacet +facet normal -0.49572243068690525 -0.8586164364012598 -0.13052619222005923 + outer loop + vertex -38.23569549287096 146.54712218534567 -54.11763809020509 + vertex -36.537718859013054 145.4881039852524 -53.60000000000005 + vertex -38.269769666581894 146.4881039852524 -53.60000000000005 + endloop +endfacet +facet normal 0.4957224306869049 0.8586164364012593 0.1305261922200656 + outer loop + vertex -23.869769666581856 171.42963561424423 -51.600000000000065 + vertex -22.171793032723926 170.37061741415096 -51.08236190979502 + vertex -22.13771885901301 170.42963561424423 -51.600000000000065 + endloop +endfacet +facet normal 0.4957224306869049 0.8586164364012593 0.1305261922200656 + outer loop + vertex -22.171793032723926 170.37061741415096 -51.08236190979502 + vertex -23.869769666581856 171.42963561424423 -51.600000000000065 + vertex -23.90384384029277 171.37061741415096 -51.08236190979502 + endloop +endfacet +facet normal -0.06526309611002697 -0.11303899832181633 0.9914448613738103 + outer loop + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -37.52858871168441 147.77186705673725 -49.6681483474219 + vertex -35.79653790411557 146.77186705673725 -49.6681483474219 + endloop +endfacet +facet normal -0.06526309611002697 -0.11303899832181633 0.9914448613738103 + outer loop + vertex -37.52858871168441 147.77186705673725 -49.6681483474219 + vertex -35.537718859013054 147.2201547928213 -49.60000000000003 + vertex -37.2697696665819 148.2201547928213 -49.60000000000003 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -37.2697696665819 148.22015479282132 -16.00000000000005 + vertex -24.610950621479365 170.1458725427594 -15.931851652578203 + vertex -24.869769666581853 169.6975848066754 -16.000000000000068 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.610950621479365 170.1458725427594 -15.931851652578203 + vertex -37.2697696665819 148.22015479282132 -16.00000000000005 + vertex -37.528588711684435 147.7718670567373 -15.931851652578185 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.610950621479365 170.1458725427594 -15.931851652578203 + vertex -37.528588711684435 147.7718670567373 -15.931851652578185 + vertex -24.369769666581877 170.5636102104598 -15.732050807568942 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.369769666581877 170.5636102104598 -15.732050807568942 + vertex -37.528588711684435 147.7718670567373 -15.931851652578185 + vertex -37.769769666581894 147.35412938903687 -15.732050807568926 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.369769666581877 170.5636102104598 -15.732050807568942 + vertex -37.769769666581894 147.35412938903687 -15.732050807568926 + vertex -24.162662885395303 170.92232967806697 -15.414213562373158 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.92232967806697 -15.414213562373158 + vertex -37.769769666581894 147.35412938903687 -15.732050807568926 + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.92232967806697 -15.414213562373158 + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + vertex -24.00374426279742 171.1975848066754 -15.000000000000062 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.1975848066754 -15.000000000000062 + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + vertex -38.13579507036633 146.72015479282132 -15.000000000000046 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.1975848066754 -15.000000000000062 + vertex -38.13579507036633 146.72015479282132 -15.000000000000046 + vertex -23.903843840292815 171.370617414151 -14.517638090205104 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.903843840292815 171.370617414151 -14.517638090205104 + vertex -38.13579507036633 146.72015479282132 -15.000000000000046 + vertex -38.23569549287098 146.5471221853457 -14.517638090205088 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.903843840292815 171.370617414151 -14.517638090205104 + vertex -38.23569549287098 146.5471221853457 -14.517638090205088 + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + vertex -38.23569549287098 146.5471221853457 -14.517638090205088 + vertex -38.269769666581894 146.48810398525245 -14.000000000000048 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + vertex -38.269769666581894 146.48810398525245 -14.000000000000048 + vertex -23.869769666581856 171.42963561424426 -12.000000000000052 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424426 -12.000000000000052 + vertex -38.269769666581894 146.48810398525245 -14.000000000000048 + vertex -38.269769666581894 146.48810398525245 -12.000000000000034 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424426 -12.000000000000052 + vertex -38.269769666581894 146.48810398525245 -12.000000000000034 + vertex -23.903843840292815 171.370617414151 -11.482361909795022 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.903843840292815 171.370617414151 -11.482361909795022 + vertex -38.269769666581894 146.48810398525245 -12.000000000000034 + vertex -38.23569549287096 146.5471221853457 -11.482361909795 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.903843840292815 171.370617414151 -11.482361909795022 + vertex -38.23569549287096 146.5471221853457 -11.482361909795 + vertex -24.00374426279742 171.1975848066754 -11.000000000000048 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.1975848066754 -11.000000000000048 + vertex -38.23569549287096 146.5471221853457 -11.482361909795 + vertex -38.13579507036633 146.72015479282132 -11.000000000000036 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.1975848066754 -11.000000000000048 + vertex -38.13579507036633 146.72015479282132 -11.000000000000036 + vertex -24.162662885395303 170.922329678067 -10.58578643762697 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.922329678067 -10.58578643762697 + vertex -38.13579507036633 146.72015479282132 -11.000000000000036 + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.922329678067 -10.58578643762697 + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + vertex -24.369769666581877 170.56361021045984 -10.267949192431178 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.369769666581877 170.56361021045984 -10.267949192431178 + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + vertex -37.769769666581894 147.3541293890369 -10.267949192431168 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.369769666581877 170.56361021045984 -10.267949192431178 + vertex -37.769769666581894 147.3541293890369 -10.267949192431168 + vertex -24.610950621479365 170.1458725427594 -10.068148347421925 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.610950621479365 170.1458725427594 -10.068148347421925 + vertex -37.769769666581894 147.3541293890369 -10.267949192431168 + vertex -37.528588711684435 147.7718670567373 -10.068148347421902 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.610950621479365 170.1458725427594 -10.068148347421925 + vertex -37.528588711684435 147.7718670567373 -10.068148347421902 + vertex -24.869769666581853 169.6975848066754 -10.00000000000005 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.869769666581853 169.6975848066754 -10.00000000000005 + vertex -37.528588711684435 147.7718670567373 -10.068148347421902 + vertex -37.2697696665819 148.22015479282132 -10.000000000000037 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -37.2697696665819 148.22015479282126 -55.60000000000006 + vertex -24.61095062147932 170.14587254275938 -55.531851652578204 + vertex -24.869769666581853 169.69758480667537 -55.600000000000065 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.61095062147932 170.14587254275938 -55.531851652578204 + vertex -37.2697696665819 148.22015479282126 -55.60000000000006 + vertex -37.52858871168441 147.77186705673725 -55.53185165257819 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.61095062147932 170.14587254275938 -55.531851652578204 + vertex -37.52858871168441 147.77186705673725 -55.53185165257819 + vertex -24.36976966658183 170.56361021045976 -55.33205080756895 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.36976966658183 170.56361021045976 -55.33205080756895 + vertex -37.52858871168441 147.77186705673725 -55.53185165257819 + vertex -37.76976966658187 147.35412938903687 -55.332050807568926 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.36976966658183 170.56361021045976 -55.33205080756895 + vertex -37.76976966658187 147.35412938903687 -55.332050807568926 + vertex -24.162662885395303 170.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.92232967806692 -55.01421356237316 + vertex -37.76976966658187 147.35412938903687 -55.332050807568926 + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.92232967806692 -55.01421356237316 + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + vertex -24.00374426279742 171.19758480667534 -54.60000000000007 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.19758480667534 -54.60000000000007 + vertex -37.97687644776845 146.9954099214297 -55.01421356237315 + vertex -38.13579507036633 146.72015479282126 -54.600000000000044 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.19758480667534 -54.60000000000007 + vertex -38.13579507036633 146.72015479282126 -54.600000000000044 + vertex -23.90384384029277 171.37061741415096 -54.117638090205105 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.90384384029277 171.37061741415096 -54.117638090205105 + vertex -38.13579507036633 146.72015479282126 -54.600000000000044 + vertex -38.23569549287096 146.54712218534567 -54.11763809020509 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.90384384029277 171.37061741415096 -54.117638090205105 + vertex -38.23569549287096 146.54712218534567 -54.11763809020509 + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + vertex -38.23569549287096 146.54712218534567 -54.11763809020509 + vertex -38.269769666581894 146.4881039852524 -53.60000000000005 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424423 -53.60000000000007 + vertex -38.269769666581894 146.4881039852524 -53.60000000000005 + vertex -23.869769666581856 171.42963561424423 -51.600000000000065 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424423 -51.600000000000065 + vertex -38.269769666581894 146.4881039852524 -53.60000000000005 + vertex -38.269769666581894 146.48810398525242 -51.600000000000044 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.869769666581856 171.42963561424423 -51.600000000000065 + vertex -38.269769666581894 146.48810398525242 -51.600000000000044 + vertex -23.90384384029277 171.37061741415096 -51.08236190979502 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.90384384029277 171.37061741415096 -51.08236190979502 + vertex -38.269769666581894 146.48810398525242 -51.600000000000044 + vertex -38.23569549287094 146.54712218534567 -51.082361909795 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -23.90384384029277 171.37061741415096 -51.08236190979502 + vertex -38.23569549287094 146.54712218534567 -51.082361909795 + vertex -24.00374426279742 171.19758480667534 -50.60000000000005 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.19758480667534 -50.60000000000005 + vertex -38.23569549287094 146.54712218534567 -51.082361909795 + vertex -38.13579507036633 146.72015479282126 -50.60000000000003 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.00374426279742 171.19758480667534 -50.60000000000005 + vertex -38.13579507036633 146.72015479282126 -50.60000000000003 + vertex -24.162662885395303 170.92232967806694 -50.185786437626966 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.92232967806694 -50.185786437626966 + vertex -38.13579507036633 146.72015479282126 -50.60000000000003 + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.162662885395303 170.92232967806694 -50.185786437626966 + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + vertex -24.36976966658183 170.5636102104598 -49.86794919243118 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.36976966658183 170.5636102104598 -49.86794919243118 + vertex -37.97687644776845 146.9954099214297 -50.185786437626945 + vertex -37.76976966658187 147.35412938903687 -49.86794919243116 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.36976966658183 170.5636102104598 -49.86794919243118 + vertex -37.76976966658187 147.35412938903687 -49.86794919243116 + vertex -24.61095062147932 170.14587254275938 -49.66814834742192 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.61095062147932 170.14587254275938 -49.66814834742192 + vertex -37.76976966658187 147.35412938903687 -49.86794919243116 + vertex -37.52858871168441 147.77186705673725 -49.6681483474219 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.61095062147932 170.14587254275938 -49.66814834742192 + vertex -37.52858871168441 147.77186705673725 -49.6681483474219 + vertex -24.869769666581853 169.69758480667537 -49.60000000000006 + endloop +endfacet +facet normal -0.8660254037844384 0.5000000000000006 -4.884367980290838e-16 + outer loop + vertex -24.869769666581853 169.69758480667537 -49.60000000000006 + vertex -37.52858871168441 147.77186705673725 -49.6681483474219 + vertex -37.2697696665819 148.2201547928213 -49.60000000000003 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 24.721088902095826 170.14587254275935 -55.531851652578204 + vertex 37.37990794719835 148.22015479282123 -55.600000000000065 + vertex 24.97990794719836 169.69758480667534 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.37990794719835 148.22015479282123 -55.600000000000065 + vertex 24.721088902095826 170.14587254275935 -55.531851652578204 + vertex 37.638726992300874 147.77186705673722 -55.531851652578204 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.638726992300874 147.77186705673722 -55.531851652578204 + vertex 24.721088902095826 170.14587254275935 -55.531851652578204 + vertex 24.47990794719834 170.56361021045973 -55.33205080756894 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.638726992300874 147.77186705673722 -55.531851652578204 + vertex 24.47990794719834 170.56361021045973 -55.33205080756894 + vertex 37.87990794719835 147.35412938903679 -55.33205080756894 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.87990794719835 147.35412938903679 -55.33205080756894 + vertex 24.47990794719834 170.56361021045973 -55.33205080756894 + vertex 24.272801166011813 170.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.87990794719835 147.35412938903679 -55.33205080756894 + vertex 24.272801166011813 170.92232967806692 -55.01421356237316 + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + vertex 24.272801166011813 170.92232967806692 -55.01421356237316 + vertex 24.113882543413904 171.19758480667534 -54.60000000000006 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + vertex 24.113882543413904 171.19758480667534 -54.60000000000006 + vertex 38.24593335098278 146.72015479282123 -54.60000000000006 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.24593335098278 146.72015479282123 -54.60000000000006 + vertex 24.113882543413904 171.19758480667534 -54.60000000000006 + vertex 24.01398212090928 171.37061741415093 -54.117638090205105 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.24593335098278 146.72015479282123 -54.60000000000006 + vertex 24.01398212090928 171.37061741415093 -54.117638090205105 + vertex 38.34583377348742 146.54712218534561 -54.117638090205105 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.34583377348742 146.54712218534561 -54.117638090205105 + vertex 24.01398212090928 171.37061741415093 -54.117638090205105 + vertex 23.979907947198342 171.42963561424423 -53.60000000000006 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.34583377348742 146.54712218534561 -54.117638090205105 + vertex 23.979907947198342 171.42963561424423 -53.60000000000006 + vertex 38.37990794719835 146.48810398525237 -53.60000000000006 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.37990794719835 146.48810398525237 -53.60000000000006 + vertex 23.979907947198342 171.42963561424423 -53.60000000000006 + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.37990794719835 146.48810398525237 -53.60000000000006 + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + vertex 38.37990794719835 146.48810398525237 -51.60000000000005 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.37990794719835 146.48810398525237 -51.60000000000005 + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + vertex 24.01398212090928 171.37061741415093 -51.082361909795004 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.37990794719835 146.48810398525237 -51.60000000000005 + vertex 24.01398212090928 171.37061741415093 -51.082361909795004 + vertex 38.34583377348741 146.54712218534561 -51.082361909795004 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.34583377348741 146.54712218534561 -51.082361909795004 + vertex 24.01398212090928 171.37061741415093 -51.082361909795004 + vertex 24.113882543413904 171.19758480667534 -50.600000000000044 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.34583377348741 146.54712218534561 -51.082361909795004 + vertex 24.113882543413904 171.19758480667534 -50.600000000000044 + vertex 38.24593335098278 146.72015479282123 -50.600000000000044 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.24593335098278 146.72015479282123 -50.600000000000044 + vertex 24.113882543413904 171.19758480667534 -50.600000000000044 + vertex 24.27280116601179 170.92232967806692 -50.18578643762695 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.24593335098278 146.72015479282123 -50.600000000000044 + vertex 24.27280116601179 170.92232967806692 -50.18578643762695 + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + vertex 24.27280116601179 170.92232967806692 -50.18578643762695 + vertex 24.47990794719834 170.56361021045979 -49.867949192431176 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + vertex 24.47990794719834 170.56361021045979 -49.867949192431176 + vertex 37.87990794719835 147.35412938903679 -49.867949192431176 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.87990794719835 147.35412938903679 -49.867949192431176 + vertex 24.47990794719834 170.56361021045979 -49.867949192431176 + vertex 24.721088902095826 170.14587254275935 -49.668148347421905 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.87990794719835 147.35412938903679 -49.867949192431176 + vertex 24.721088902095826 170.14587254275935 -49.668148347421905 + vertex 37.638726992300874 147.77186705673722 -49.668148347421905 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.638726992300874 147.77186705673722 -49.668148347421905 + vertex 24.721088902095826 170.14587254275935 -49.668148347421905 + vertex 24.97990794719836 169.69758480667534 -49.600000000000044 + endloop +endfacet +facet normal 0.8660254037844388 0.49999999999999956 -1.2429902774456655e-16 + outer loop + vertex 37.638726992300874 147.77186705673722 -49.668148347421905 + vertex 24.97990794719836 169.69758480667534 -49.600000000000044 + vertex 37.37990794719835 148.22015479282123 -49.600000000000044 + endloop +endfacet +facet normal -1.955820234179363e-16 6.381155944511759e-16 1.0 + outer loop + vertex -23.137718859013145 168.6975848066754 -10.00000000000005 + vertex -37.2697696665819 148.22015479282132 -10.000000000000037 + vertex -35.53771885901319 147.22015479282135 -10.000000000000037 + endloop +endfacet +facet normal -1.955820234179363e-16 6.381155944511759e-16 1.0 + outer loop + vertex -37.2697696665819 148.22015479282132 -10.000000000000037 + vertex -23.137718859013145 168.6975848066754 -10.00000000000005 + vertex -24.869769666581853 169.6975848066754 -10.00000000000005 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 24.721088902095847 170.14587254275938 -15.931851652578198 + vertex 37.37990794719836 148.22015479282126 -16.00000000000006 + vertex 24.97990794719836 169.69758480667534 -16.00000000000006 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.37990794719836 148.22015479282126 -16.00000000000006 + vertex 24.721088902095847 170.14587254275938 -15.931851652578198 + vertex 37.63872699230088 147.77186705673722 -15.931851652578198 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.63872699230088 147.77186705673722 -15.931851652578198 + vertex 24.721088902095847 170.14587254275938 -15.931851652578198 + vertex 24.479907947198363 170.56361021045976 -15.732050807568937 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.63872699230088 147.77186705673722 -15.931851652578198 + vertex 24.479907947198363 170.56361021045976 -15.732050807568937 + vertex 37.87990794719836 147.3541293890368 -15.732050807568937 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.87990794719836 147.3541293890368 -15.732050807568937 + vertex 24.479907947198363 170.56361021045976 -15.732050807568937 + vertex 24.272801166011813 170.92232967806692 -15.414213562373153 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.87990794719836 147.3541293890368 -15.732050807568937 + vertex 24.272801166011813 170.92232967806692 -15.414213562373153 + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + vertex 24.272801166011813 170.92232967806692 -15.414213562373153 + vertex 24.11388254341393 171.19758480667534 -15.000000000000057 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + vertex 24.11388254341393 171.19758480667534 -15.000000000000057 + vertex 38.245933350982796 146.72015479282123 -15.000000000000057 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.245933350982796 146.72015479282123 -15.000000000000057 + vertex 24.11388254341393 171.19758480667534 -15.000000000000057 + vertex 24.0139821209093 171.37061741415096 -14.517638090205098 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.245933350982796 146.72015479282123 -15.000000000000057 + vertex 24.0139821209093 171.37061741415096 -14.517638090205098 + vertex 38.345833773487435 146.54712218534564 -14.517638090205098 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.345833773487435 146.54712218534564 -14.517638090205098 + vertex 24.0139821209093 171.37061741415096 -14.517638090205098 + vertex 23.979907947198363 171.42963561424423 -14.000000000000059 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.345833773487435 146.54712218534564 -14.517638090205098 + vertex 23.979907947198363 171.42963561424423 -14.000000000000059 + vertex 38.37990794719836 146.4881039852524 -14.000000000000059 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.37990794719836 146.4881039852524 -14.000000000000059 + vertex 23.979907947198363 171.42963561424423 -14.000000000000059 + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.37990794719836 146.4881039852524 -14.000000000000059 + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + vertex 38.37990794719836 146.4881039852524 -12.000000000000046 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.37990794719836 146.4881039852524 -12.000000000000046 + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + vertex 24.0139821209093 171.37061741415096 -11.482361909795012 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.37990794719836 146.4881039852524 -12.000000000000046 + vertex 24.0139821209093 171.37061741415096 -11.482361909795012 + vertex 38.34583377348742 146.54712218534564 -11.482361909795012 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.34583377348742 146.54712218534564 -11.482361909795012 + vertex 24.0139821209093 171.37061741415096 -11.482361909795012 + vertex 24.11388254341393 171.19758480667534 -11.000000000000048 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.34583377348742 146.54712218534564 -11.482361909795012 + vertex 24.11388254341393 171.19758480667534 -11.000000000000048 + vertex 38.245933350982796 146.72015479282123 -11.000000000000048 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.245933350982796 146.72015479282123 -11.000000000000048 + vertex 24.11388254341393 171.19758480667534 -11.000000000000048 + vertex 24.272801166011813 170.92232967806694 -10.58578643762696 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.245933350982796 146.72015479282123 -11.000000000000048 + vertex 24.272801166011813 170.92232967806694 -10.58578643762696 + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + vertex 24.272801166011813 170.92232967806694 -10.58578643762696 + vertex 24.479907947198363 170.56361021045979 -10.267949192431178 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + vertex 24.479907947198363 170.56361021045979 -10.267949192431178 + vertex 37.87990794719836 147.3541293890368 -10.267949192431178 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.87990794719836 147.3541293890368 -10.267949192431178 + vertex 24.479907947198363 170.56361021045979 -10.267949192431178 + vertex 24.721088902095847 170.14587254275938 -10.068148347421912 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.87990794719836 147.3541293890368 -10.267949192431178 + vertex 24.721088902095847 170.14587254275938 -10.068148347421912 + vertex 37.63872699230088 147.77186705673722 -10.068148347421912 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.63872699230088 147.77186705673722 -10.068148347421912 + vertex 24.721088902095847 170.14587254275938 -10.068148347421912 + vertex 24.97990794719836 169.69758480667534 -10.00000000000005 + endloop +endfacet +facet normal 0.866025403784439 0.49999999999999956 -2.0134478754370044e-16 + outer loop + vertex 37.63872699230088 147.77186705673722 -10.068148347421912 + vertex 24.97990794719836 169.69758480667534 -10.00000000000005 + vertex 37.37990794719836 148.22015479282126 -10.00000000000005 + endloop +endfacet +facet normal -0.46193976625564453 -0.8001031451912668 -0.38268343236508623 + outer loop + vertex -36.50364468530227 145.54712218534573 -14.517638090205088 + vertex -38.13579507036633 146.72015479282132 -15.000000000000046 + vertex -36.40374426279762 145.72015479282135 -15.000000000000046 + endloop +endfacet +facet normal -0.46193976625564453 -0.8001031451912668 -0.38268343236508623 + outer loop + vertex -38.13579507036633 146.72015479282132 -15.000000000000046 + vertex -36.50364468530227 145.54712218534573 -14.517638090205088 + vertex -38.23569549287098 146.5471221853457 -14.517638090205088 + endloop +endfacet +facet normal 0.06526309611002716 0.11303899832181666 -0.9914448613738102 + outer loop + vertex -24.869769666581853 169.6975848066754 -16.000000000000068 + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -23.137718859013145 168.6975848066754 -16.000000000000068 + endloop +endfacet +facet normal 0.06526309611002716 0.11303899832181666 -0.9914448613738102 + outer loop + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + vertex -24.869769666581853 169.6975848066754 -16.000000000000068 + vertex -24.610950621479365 170.1458725427594 -15.931851652578203 + endloop +endfacet +facet normal 0.19134171618253754 0.3314135740355793 0.9238795325112927 + outer loop + vertex -22.637718859013166 169.56361021045984 -10.267949192431178 + vertex -24.610950621479365 170.1458725427594 -10.068148347421925 + vertex -22.878899813910653 169.14587254275943 -10.068148347421925 + endloop +endfacet +facet normal 0.19134171618253754 0.3314135740355793 0.9238795325112927 + outer loop + vertex -24.610950621479365 170.1458725427594 -10.068148347421925 + vertex -22.637718859013166 169.56361021045984 -10.267949192431178 + vertex -24.369769666581877 170.56361021045984 -10.267949192431178 + endloop +endfacet +facet normal 0.3966766701456142 0.6870641468694425 -0.6087614290087314 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -24.00374426279742 171.1975848066754 -15.000000000000062 + vertex -22.27169345522871 170.19758480667542 -15.000000000000062 + endloop +endfacet +facet normal 0.3966766701456142 0.6870641468694425 -0.6087614290087314 + outer loop + vertex -24.00374426279742 171.1975848066754 -15.000000000000062 + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -24.162662885395303 170.92232967806697 -15.414213562373158 + endloop +endfacet +facet normal 8.187369750874685e-17 -8.350641921694922e-16 -1.0 + outer loop + vertex -37.2697696665819 148.22015479282132 -16.00000000000005 + vertex -23.137718859013145 168.6975848066754 -16.000000000000068 + vertex -35.53771885901319 147.22015479282135 -16.00000000000005 + endloop +endfacet +facet normal 8.187369750874685e-17 -8.350641921694922e-16 -1.0 + outer loop + vertex -23.137718859013145 168.6975848066754 -16.000000000000068 + vertex -37.2697696665819 148.22015479282132 -16.00000000000005 + vertex -24.869769666581853 169.6975848066754 -16.000000000000068 + endloop +endfacet +facet normal -0.46193976625564787 -0.8001031451912716 0.38268343236507196 + outer loop + vertex -38.13579507036633 146.72015479282132 -11.000000000000036 + vertex -36.50364468530225 145.54712218534573 -11.482361909795 + vertex -36.40374426279762 145.72015479282135 -11.000000000000036 + endloop +endfacet +facet normal -0.46193976625564787 -0.8001031451912716 0.38268343236507196 + outer loop + vertex -36.50364468530225 145.54712218534573 -11.482361909795 + vertex -38.13579507036633 146.72015479282132 -11.000000000000036 + vertex -38.23569549287096 146.5471221853457 -11.482361909795 + endloop +endfacet +facet normal -0.4957224306869066 -0.8586164364012622 -0.130526192220038 + outer loop + vertex -36.53771885901319 145.48810398525248 -14.000000000000048 + vertex -38.23569549287098 146.5471221853457 -14.517638090205088 + vertex -36.50364468530227 145.54712218534573 -14.517638090205088 + endloop +endfacet +facet normal -0.4957224306869066 -0.8586164364012622 -0.130526192220038 + outer loop + vertex -38.23569549287098 146.5471221853457 -14.517638090205088 + vertex -36.53771885901319 145.48810398525248 -14.000000000000048 + vertex -38.269769666581894 146.48810398525245 -14.000000000000048 + endloop +endfacet +facet normal -0.39667667014561453 -0.687064146869443 0.6087614290087309 + outer loop + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + vertex -36.40374426279762 145.72015479282135 -11.000000000000036 + vertex -36.244825640199736 145.99540992142974 -10.585786437626947 + endloop +endfacet +facet normal -0.39667667014561453 -0.687064146869443 0.6087614290087309 + outer loop + vertex -36.40374426279762 145.72015479282135 -11.000000000000036 + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + vertex -38.13579507036633 146.72015479282132 -11.000000000000036 + endloop +endfacet +facet normal -0.3043807145043568 -0.5272028623656615 0.7933533402912416 + outer loop + vertex -36.03771885901319 146.3541293890369 -10.267949192431168 + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + vertex -36.244825640199736 145.99540992142974 -10.585786437626947 + endloop +endfacet +facet normal -0.3043807145043568 -0.5272028623656615 0.7933533402912416 + outer loop + vertex -37.97687644776845 146.99540992142974 -10.585786437626947 + vertex -36.03771885901319 146.3541293890369 -10.267949192431168 + vertex -37.769769666581894 147.3541293890369 -10.267949192431168 + endloop +endfacet +facet normal 0.1913417161825495 0.33141357403559835 -0.9238795325112834 + outer loop + vertex -24.610950621479365 170.1458725427594 -15.931851652578203 + vertex -22.637718859013166 169.56361021045984 -15.732050807568942 + vertex -22.878899813910653 169.14587254275943 -15.931851652578203 + endloop +endfacet +facet normal 0.1913417161825495 0.33141357403559835 -0.9238795325112834 + outer loop + vertex -22.637718859013166 169.56361021045984 -15.732050807568942 + vertex -24.610950621479365 170.1458725427594 -15.931851652578203 + vertex -24.369769666581877 170.5636102104598 -15.732050807568942 + endloop +endfacet +facet normal -0.19134171618255466 -0.3314135740356073 0.9238795325112792 + outer loop + vertex -35.79653790411572 146.77186705673734 -10.068148347421902 + vertex -37.769769666581894 147.3541293890369 -10.267949192431168 + vertex -36.03771885901319 146.3541293890369 -10.267949192431168 + endloop +endfacet +facet normal -0.19134171618255466 -0.3314135740356073 0.9238795325112792 + outer loop + vertex -37.769769666581894 147.3541293890369 -10.267949192431168 + vertex -35.79653790411572 146.77186705673734 -10.068148347421902 + vertex -37.528588711684435 147.7718670567373 -10.068148347421902 + endloop +endfacet +facet normal -0.06526309611002556 -0.1130389983218139 0.9914448613738106 + outer loop + vertex -35.53771885901319 147.22015479282135 -10.000000000000037 + vertex -37.528588711684435 147.7718670567373 -10.068148347421902 + vertex -35.79653790411572 146.77186705673734 -10.068148347421902 + endloop +endfacet +facet normal -0.06526309611002556 -0.1130389983218139 0.9914448613738106 + outer loop + vertex -37.528588711684435 147.7718670567373 -10.068148347421902 + vertex -35.53771885901319 147.22015479282135 -10.000000000000037 + vertex -37.2697696665819 148.22015479282132 -10.000000000000037 + endloop +endfacet +facet normal -0.1913417161825493 -0.33141357403559973 -0.9238795325112831 + outer loop + vertex -37.769769666581894 147.35412938903687 -15.732050807568926 + vertex -35.79653790411572 146.7718670567373 -15.931851652578185 + vertex -36.03771885901319 146.3541293890369 -15.732050807568926 + endloop +endfacet +facet normal -0.1913417161825493 -0.33141357403559973 -0.9238795325112831 + outer loop + vertex -35.79653790411572 146.7718670567373 -15.931851652578185 + vertex -37.769769666581894 147.35412938903687 -15.732050807568926 + vertex -37.528588711684435 147.7718670567373 -15.931851652578185 + endloop +endfacet +facet normal -0.5000000000000006 -0.8660254037844384 1.525901372395458e-31 + outer loop + vertex -38.269769666581894 146.48810398525245 -12.000000000000034 + vertex -36.53771885901319 145.48810398525248 -14.000000000000048 + vertex -36.53771885901319 145.48810398525248 -12.000000000000034 + endloop +endfacet +facet normal -0.5000000000000006 -0.8660254037844384 1.525901372395458e-31 + outer loop + vertex -36.53771885901319 145.48810398525248 -14.000000000000048 + vertex -38.269769666581894 146.48810398525245 -12.000000000000034 + vertex -38.269769666581894 146.48810398525245 -14.000000000000048 + endloop +endfacet +facet normal 0.3966766701456168 0.6870641468694481 0.6087614290087235 + outer loop + vertex -24.00374426279742 171.1975848066754 -11.000000000000048 + vertex -22.430612077826595 169.92232967806703 -10.58578643762697 + vertex -22.27169345522871 170.19758480667542 -11.000000000000048 + endloop +endfacet +facet normal 0.3966766701456168 0.6870641468694481 0.6087614290087235 + outer loop + vertex -22.430612077826595 169.92232967806703 -10.58578643762697 + vertex -24.00374426279742 171.1975848066754 -11.000000000000048 + vertex -24.162662885395303 170.922329678067 -10.58578643762697 + endloop +endfacet +facet normal -0.3043807145043595 -0.5272028623656677 -0.7933533402912364 + outer loop + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + vertex -36.03771885901319 146.3541293890369 -15.732050807568926 + vertex -36.244825640199736 145.99540992142974 -15.41421356237314 + endloop +endfacet +facet normal -0.3043807145043595 -0.5272028623656677 -0.7933533402912364 + outer loop + vertex -36.03771885901319 146.3541293890369 -15.732050807568926 + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + vertex -37.769769666581894 147.35412938903687 -15.732050807568926 + endloop +endfacet +facet normal 0.3043807145043554 0.5272028623656606 0.7933533402912427 + outer loop + vertex -22.430612077826595 169.92232967806703 -10.58578643762697 + vertex -24.369769666581877 170.56361021045984 -10.267949192431178 + vertex -22.637718859013166 169.56361021045984 -10.267949192431178 + endloop +endfacet +facet normal 0.3043807145043554 0.5272028623656606 0.7933533402912427 + outer loop + vertex -24.369769666581877 170.56361021045984 -10.267949192431178 + vertex -22.430612077826595 169.92232967806703 -10.58578643762697 + vertex -24.162662885395303 170.922329678067 -10.58578643762697 + endloop +endfacet +facet normal 0.4619397662556512 0.8001031451912782 0.3826834323650538 + outer loop + vertex -23.903843840292815 171.370617414151 -11.482361909795022 + vertex -22.27169345522871 170.19758480667542 -11.000000000000048 + vertex -22.171793032724107 170.37061741415104 -11.482361909795022 + endloop +endfacet +facet normal 0.4619397662556512 0.8001031451912782 0.3826834323650538 + outer loop + vertex -22.27169345522871 170.19758480667542 -11.000000000000048 + vertex -23.903843840292815 171.370617414151 -11.482361909795022 + vertex -24.00374426279742 171.1975848066754 -11.000000000000048 + endloop +endfacet +facet normal 0.46193976625564925 0.8001031451912741 -0.38268343236506536 + outer loop + vertex -22.27169345522871 170.19758480667542 -15.000000000000062 + vertex -23.903843840292815 171.370617414151 -14.517638090205104 + vertex -22.171793032724107 170.37061741415104 -14.517638090205104 + endloop +endfacet +facet normal 0.46193976625564925 0.8001031451912741 -0.38268343236506536 + outer loop + vertex -23.903843840292815 171.370617414151 -14.517638090205104 + vertex -22.27169345522871 170.19758480667542 -15.000000000000062 + vertex -24.00374426279742 171.1975848066754 -15.000000000000062 + endloop +endfacet +facet normal 0.4957224306869045 0.8586164364012583 -0.13052619222007125 + outer loop + vertex -22.171793032724107 170.37061741415104 -14.517638090205104 + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + vertex -22.137718859013145 170.4296356142443 -14.000000000000064 + endloop +endfacet +facet normal 0.4957224306869045 0.8586164364012583 -0.13052619222007125 + outer loop + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + vertex -22.171793032724107 170.37061741415104 -14.517638090205104 + vertex -23.903843840292815 171.370617414151 -14.517638090205104 + endloop +endfacet +facet normal -0.49572243068690597 -0.8586164364012608 0.13052619222005002 + outer loop + vertex -38.23569549287096 146.5471221853457 -11.482361909795 + vertex -36.53771885901319 145.48810398525248 -12.000000000000034 + vertex -36.50364468530225 145.54712218534573 -11.482361909795 + endloop +endfacet +facet normal -0.49572243068690597 -0.8586164364012608 0.13052619222005002 + outer loop + vertex -36.53771885901319 145.48810398525248 -12.000000000000034 + vertex -38.23569549287096 146.5471221853457 -11.482361909795 + vertex -38.269769666581894 146.48810398525245 -12.000000000000034 + endloop +endfacet +facet normal -0.3966766701456182 -0.6870641468694506 -0.6087614290087197 + outer loop + vertex -36.40374426279762 145.72015479282135 -15.000000000000046 + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + vertex -36.244825640199736 145.99540992142974 -15.41421356237314 + endloop +endfacet +facet normal -0.3966766701456182 -0.6870641468694506 -0.6087614290087197 + outer loop + vertex -37.97687644776845 146.9954099214297 -15.41421356237314 + vertex -36.40374426279762 145.72015479282135 -15.000000000000046 + vertex -38.13579507036633 146.72015479282132 -15.000000000000046 + endloop +endfacet +facet normal 0.30438071450435267 0.5272028623656544 -0.7933533402912479 + outer loop + vertex -24.369769666581877 170.5636102104598 -15.732050807568942 + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -22.637718859013166 169.56361021045984 -15.732050807568942 + endloop +endfacet +facet normal 0.30438071450435267 0.5272028623656544 -0.7933533402912479 + outer loop + vertex -22.430612077826595 169.922329678067 -15.414213562373158 + vertex -24.369769666581877 170.5636102104598 -15.732050807568942 + vertex -24.162662885395303 170.92232967806697 -15.414213562373158 + endloop +endfacet +facet normal -0.06526309611002473 -0.11303899832181435 -0.9914448613738106 + outer loop + vertex -37.528588711684435 147.7718670567373 -15.931851652578185 + vertex -35.53771885901319 147.22015479282135 -16.00000000000005 + vertex -35.79653790411572 146.7718670567373 -15.931851652578185 + endloop +endfacet +facet normal -0.06526309611002473 -0.11303899832181435 -0.9914448613738106 + outer loop + vertex -35.53771885901319 147.22015479282135 -16.00000000000005 + vertex -37.528588711684435 147.7718670567373 -15.931851652578185 + vertex -37.2697696665819 148.22015479282132 -16.00000000000005 + endloop +endfacet +facet normal 0.06526309611003694 0.11303899832183552 0.9914448613738074 + outer loop + vertex -22.878899813910653 169.14587254275943 -10.068148347421925 + vertex -24.869769666581853 169.6975848066754 -10.00000000000005 + vertex -23.137718859013145 168.6975848066754 -10.00000000000005 + endloop +endfacet +facet normal 0.06526309611003694 0.11303899832183552 0.9914448613738074 + outer loop + vertex -24.869769666581853 169.6975848066754 -10.00000000000005 + vertex -22.878899813910653 169.14587254275943 -10.068148347421925 + vertex -24.610950621479365 170.1458725427594 -10.068148347421925 + endloop +endfacet +facet normal 0.5000000000000006 0.8660254037844384 -1.525901372395458e-31 + outer loop + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + vertex -22.137718859013145 170.4296356142443 -12.000000000000052 + vertex -22.137718859013145 170.4296356142443 -14.000000000000064 + endloop +endfacet +facet normal 0.5000000000000006 0.8660254037844384 -1.525901372395458e-31 + outer loop + vertex -22.137718859013145 170.4296356142443 -12.000000000000052 + vertex -23.869769666581856 171.42963561424426 -14.000000000000064 + vertex -23.869769666581856 171.42963561424426 -12.000000000000052 + endloop +endfacet +facet normal 0.4957224306869044 0.8586164364012585 0.13052619222007267 + outer loop + vertex -23.869769666581856 171.42963561424426 -12.000000000000052 + vertex -22.171793032724107 170.37061741415104 -11.482361909795022 + vertex -22.137718859013145 170.4296356142443 -12.000000000000052 + endloop +endfacet +facet normal 0.4957224306869044 0.8586164364012585 0.13052619222007267 + outer loop + vertex -22.171793032724107 170.37061741415104 -11.482361909795022 + vertex -23.869769666581856 171.42963561424426 -12.000000000000052 + vertex -23.903843840292815 171.370617414151 -11.482361909795022 + endloop +endfacet +facet normal -0.3966766701456202 0.6870641468694442 0.6087614290087258 + outer loop + vertex 24.113882543413904 171.19758480667534 -50.600000000000044 + vertex 22.540750358442942 169.92232967806692 -50.18578643762695 + vertex 24.27280116601179 170.92232967806692 -50.18578643762695 + endloop +endfacet +facet normal -0.3966766701456202 0.6870641468694442 0.6087614290087258 + outer loop + vertex 22.540750358442942 169.92232967806692 -50.18578643762695 + vertex 24.113882543413904 171.19758480667534 -50.600000000000044 + vertex 22.381831735845036 170.19758480667534 -50.600000000000044 + endloop +endfacet +facet normal -0.5000000000000143 0.8660254037844303 -9.325056343474193e-32 + outer loop + vertex 22.247857139629495 170.4296356142442 -53.60000000000006 + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + vertex 23.979907947198342 171.42963561424423 -53.60000000000006 + endloop +endfacet +facet normal -0.5000000000000143 0.8660254037844303 -9.325056343474193e-32 + outer loop + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + vertex 22.247857139629495 170.4296356142442 -53.60000000000006 + vertex 22.247857139629495 170.4296356142442 -51.60000000000005 + endloop +endfacet +facet normal -0.0652630961100252 0.11303899832181412 0.9914448613738107 + outer loop + vertex 24.97990794719836 169.69758480667534 -49.600000000000044 + vertex 22.989038094526958 169.14587254275935 -49.668148347421905 + vertex 23.24785713962949 168.69758480667534 -49.600000000000044 + endloop +endfacet +facet normal -0.0652630961100252 0.11303899832181412 0.9914448613738107 + outer loop + vertex 22.989038094526958 169.14587254275935 -49.668148347421905 + vertex 24.97990794719836 169.69758480667534 -49.600000000000044 + vertex 24.721088902095826 170.14587254275935 -49.668148347421905 + endloop +endfacet +facet normal -0.4619397662556454 0.8001031451912711 -0.3826834323650756 + outer loop + vertex 22.381831735845036 170.19758480667534 -54.60000000000006 + vertex 24.01398212090928 171.37061741415093 -54.117638090205105 + vertex 24.113882543413904 171.19758480667534 -54.60000000000006 + endloop +endfacet +facet normal -0.4619397662556454 0.8001031451912711 -0.3826834323650756 + outer loop + vertex 24.01398212090928 171.37061741415093 -54.117638090205105 + vertex 22.381831735845036 170.19758480667534 -54.60000000000006 + vertex 22.28193131334041 170.37061741415096 -54.117638090205105 + endloop +endfacet +facet normal -0.4619397662556462 0.8001031451912726 0.3826834323650719 + outer loop + vertex 24.01398212090928 171.37061741415093 -51.082361909795004 + vertex 22.381831735845036 170.19758480667534 -50.600000000000044 + vertex 24.113882543413904 171.19758480667534 -50.600000000000044 + endloop +endfacet +facet normal -0.4619397662556462 0.8001031451912726 0.3826834323650719 + outer loop + vertex 22.381831735845036 170.19758480667534 -50.600000000000044 + vertex 24.01398212090928 171.37061741415093 -51.082361909795004 + vertex 22.28193131334041 170.37061741415096 -51.082361909795004 + endloop +endfacet +facet normal -0.4957224306869124 0.8586164364012558 0.13052619222005787 + outer loop + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + vertex 22.28193131334041 170.37061741415096 -51.082361909795004 + vertex 24.01398212090928 171.37061741415093 -51.082361909795004 + endloop +endfacet +facet normal -0.4957224306869124 0.8586164364012558 0.13052619222005787 + outer loop + vertex 22.28193131334041 170.37061741415096 -51.082361909795004 + vertex 23.979907947198342 171.42963561424423 -51.60000000000005 + vertex 22.247857139629495 170.4296356142442 -51.60000000000005 + endloop +endfacet +facet normal -0.06526309611002525 0.11303899832181417 -0.9914448613738107 + outer loop + vertex 22.989038094526958 169.14587254275935 -55.531851652578204 + vertex 24.97990794719836 169.69758480667534 -55.600000000000065 + vertex 23.24785713962949 168.69758480667534 -55.600000000000065 + endloop +endfacet +facet normal -0.06526309611002525 0.11303899832181417 -0.9914448613738107 + outer loop + vertex 24.97990794719836 169.69758480667534 -55.600000000000065 + vertex 22.989038094526958 169.14587254275935 -55.531851652578204 + vertex 24.721088902095826 170.14587254275935 -55.531851652578204 + endloop +endfacet +facet normal -0.3043807145043695 0.5272028623656716 0.7933533402912301 + outer loop + vertex 24.47990794719834 170.56361021045979 -49.867949192431176 + vertex 22.540750358442942 169.92232967806692 -50.18578643762695 + vertex 22.74785713962945 169.56361021045976 -49.867949192431176 + endloop +endfacet +facet normal -0.3043807145043695 0.5272028623656716 0.7933533402912301 + outer loop + vertex 22.540750358442942 169.92232967806692 -50.18578643762695 + vertex 24.47990794719834 170.56361021045979 -49.867949192431176 + vertex 24.27280116601179 170.92232967806692 -50.18578643762695 + endloop +endfacet +facet normal 0.06526309611002598 -0.11303899832181545 -0.9914448613738105 + outer loop + vertex 35.647857139629494 147.22015479282126 -16.00000000000006 + vertex 37.63872699230088 147.77186705673722 -15.931851652578198 + vertex 35.906676184732014 146.77186705673722 -15.931851652578198 + endloop +endfacet +facet normal 0.06526309611002598 -0.11303899832181545 -0.9914448613738105 + outer loop + vertex 37.63872699230088 147.77186705673722 -15.931851652578198 + vertex 35.647857139629494 147.22015479282126 -16.00000000000006 + vertex 37.37990794719836 148.22015479282126 -16.00000000000006 + endloop +endfacet +facet normal 0.3043807145043602 -0.5272028623656676 -0.7933533402912363 + outer loop + vertex 36.14785713962948 146.3541293890368 -15.732050807568937 + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + vertex 36.35496392081605 145.99540992142965 -15.414213562373153 + endloop +endfacet +facet normal 0.3043807145043602 -0.5272028623656676 -0.7933533402912363 + outer loop + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + vertex 36.14785713962948 146.3541293890368 -15.732050807568937 + vertex 37.87990794719836 147.3541293890368 -15.732050807568937 + endloop +endfacet +facet normal -0.49572243068690736 0.8586164364012631 -0.13052619222003028 + outer loop + vertex 22.28193131334041 170.37061741415096 -14.517638090205098 + vertex 23.979907947198363 171.42963561424423 -14.000000000000059 + vertex 24.0139821209093 171.37061741415096 -14.517638090205098 + endloop +endfacet +facet normal -0.49572243068690736 0.8586164364012631 -0.13052619222003028 + outer loop + vertex 23.979907947198363 171.42963561424423 -14.000000000000059 + vertex 22.28193131334041 170.37061741415096 -14.517638090205098 + vertex 22.247857139629495 170.4296356142442 -14.000000000000059 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 37.37990794719836 148.22015479282126 -10.00000000000005 + vertex 23.24785713962949 168.69758480667534 -10.00000000000005 + vertex 35.647857139629494 147.22015479282126 -10.00000000000005 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 23.24785713962949 168.69758480667534 -10.00000000000005 + vertex 37.37990794719836 148.22015479282126 -10.00000000000005 + vertex 24.97990794719836 169.69758480667534 -10.00000000000005 + endloop +endfacet +facet normal 0.46193976625564237 -0.800103145191271 0.3826834323650798 + outer loop + vertex 38.245933350982796 146.72015479282123 -11.000000000000048 + vertex 36.613782965918546 145.54712218534564 -11.482361909795012 + vertex 38.34583377348742 146.54712218534564 -11.482361909795012 + endloop +endfacet +facet normal 0.46193976625564237 -0.800103145191271 0.3826834323650798 + outer loop + vertex 36.613782965918546 145.54712218534564 -11.482361909795012 + vertex 38.245933350982796 146.72015479282123 -11.000000000000048 + vertex 36.513882543413914 145.72015479282126 -11.000000000000048 + endloop +endfacet +facet normal 0.5000000000000011 -0.8660254037844379 9.32505634347438e-32 + outer loop + vertex 36.647857139629494 145.4881039852524 -12.000000000000046 + vertex 38.37990794719836 146.4881039852524 -14.000000000000059 + vertex 38.37990794719836 146.4881039852524 -12.000000000000046 + endloop +endfacet +facet normal 0.5000000000000011 -0.8660254037844379 9.32505634347438e-32 + outer loop + vertex 38.37990794719836 146.4881039852524 -14.000000000000059 + vertex 36.647857139629494 145.4881039852524 -12.000000000000046 + vertex 36.647857139629494 145.4881039852524 -14.000000000000059 + endloop +endfacet +facet normal 0.1913417161825481 -0.33141357403559657 -0.9238795325112844 + outer loop + vertex 35.906676184732014 146.77186705673722 -15.931851652578198 + vertex 37.87990794719836 147.3541293890368 -15.732050807568937 + vertex 36.14785713962948 146.3541293890368 -15.732050807568937 + endloop +endfacet +facet normal 0.1913417161825481 -0.33141357403559657 -0.9238795325112844 + outer loop + vertex 37.87990794719836 147.3541293890368 -15.732050807568937 + vertex 35.906676184732014 146.77186705673722 -15.931851652578198 + vertex 37.63872699230088 147.77186705673722 -15.931851652578198 + endloop +endfacet +facet normal -0.3966766701456144 0.6870641468694425 -0.6087614290087313 + outer loop + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 24.11388254341393 171.19758480667534 -15.000000000000057 + vertex 24.272801166011813 170.92232967806692 -15.414213562373153 + endloop +endfacet +facet normal -0.3966766701456144 0.6870641468694425 -0.6087614290087313 + outer loop + vertex 24.11388254341393 171.19758480667534 -15.000000000000057 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 22.381831735845058 170.19758480667537 -15.000000000000057 + endloop +endfacet +facet normal 0.46193976625564126 -0.8001031451912691 -0.38268343236508495 + outer loop + vertex 36.61378296591855 145.54712218534564 -14.517638090205098 + vertex 38.245933350982796 146.72015479282123 -15.000000000000057 + vertex 38.345833773487435 146.54712218534564 -14.517638090205098 + endloop +endfacet +facet normal 0.46193976625564126 -0.8001031451912691 -0.38268343236508495 + outer loop + vertex 38.245933350982796 146.72015479282123 -15.000000000000057 + vertex 36.61378296591855 145.54712218534564 -14.517638090205098 + vertex 36.513882543413914 145.72015479282126 -15.000000000000057 + endloop +endfacet +facet normal 0.3043807145043565 -0.5272028623656612 0.793353340291242 + outer loop + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + vertex 36.14785713962948 146.3541293890368 -10.267949192431178 + vertex 36.35496392081605 145.99540992142965 -10.58578643762696 + endloop +endfacet +facet normal 0.3043807145043565 -0.5272028623656612 0.793353340291242 + outer loop + vertex 36.14785713962948 146.3541293890368 -10.267949192431178 + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + vertex 37.87990794719836 147.3541293890368 -10.267949192431178 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 23.24785713962949 168.69758480667534 -16.00000000000006 + vertex 37.37990794719836 148.22015479282126 -16.00000000000006 + vertex 35.647857139629494 147.22015479282126 -16.00000000000006 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 37.37990794719836 148.22015479282126 -16.00000000000006 + vertex 23.24785713962949 168.69758480667534 -16.00000000000006 + vertex 24.97990794719836 169.69758480667534 -16.00000000000006 + endloop +endfacet +facet normal 0.39667667014561553 -0.6870641468694507 0.6087614290087214 + outer loop + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + vertex 36.513882543413914 145.72015479282126 -11.000000000000048 + vertex 38.245933350982796 146.72015479282123 -11.000000000000048 + endloop +endfacet +facet normal 0.39667667014561553 -0.6870641468694507 0.6087614290087214 + outer loop + vertex 36.513882543413914 145.72015479282126 -11.000000000000048 + vertex 38.08701472838491 146.99540992142965 -10.58578643762696 + vertex 36.35496392081605 145.99540992142965 -10.58578643762696 + endloop +endfacet +facet normal 0.49572243068690486 -0.8586164364012606 0.13052619222005532 + outer loop + vertex 38.34583377348742 146.54712218534564 -11.482361909795012 + vertex 36.647857139629494 145.4881039852524 -12.000000000000046 + vertex 38.37990794719836 146.4881039852524 -12.000000000000046 + endloop +endfacet +facet normal 0.49572243068690486 -0.8586164364012606 0.13052619222005532 + outer loop + vertex 36.647857139629494 145.4881039852524 -12.000000000000046 + vertex 38.34583377348742 146.54712218534564 -11.482361909795012 + vertex 36.613782965918546 145.54712218534564 -11.482361909795012 + endloop +endfacet +facet normal 0.39667667014561764 -0.6870641468694542 -0.6087614290087162 + outer loop + vertex 36.513882543413914 145.72015479282126 -15.000000000000057 + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + vertex 38.245933350982796 146.72015479282123 -15.000000000000057 + endloop +endfacet +facet normal 0.39667667014561764 -0.6870641468694542 -0.6087614290087162 + outer loop + vertex 38.08701472838491 146.99540992142965 -15.414213562373153 + vertex 36.513882543413914 145.72015479282126 -15.000000000000057 + vertex 36.35496392081605 145.99540992142965 -15.414213562373153 + endloop +endfacet +facet normal -0.30438071450435933 0.5272028623656688 -0.7933533402912359 + outer loop + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 24.479907947198363 170.56361021045976 -15.732050807568937 + vertex 22.74785713962949 169.56361021045976 -15.732050807568937 + endloop +endfacet +facet normal -0.30438071450435933 0.5272028623656688 -0.7933533402912359 + outer loop + vertex 24.479907947198363 170.56361021045976 -15.732050807568937 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 24.272801166011813 170.92232967806692 -15.414213562373153 + endloop +endfacet +facet normal 0.06526309611002587 -0.11303899832181528 0.9914448613738105 + outer loop + vertex 37.63872699230088 147.77186705673722 -10.068148347421912 + vertex 35.647857139629494 147.22015479282126 -10.00000000000005 + vertex 35.906676184732014 146.77186705673722 -10.068148347421912 + endloop +endfacet +facet normal 0.06526309611002587 -0.11303899832181528 0.9914448613738105 + outer loop + vertex 35.647857139629494 147.22015479282126 -10.00000000000005 + vertex 37.63872699230088 147.77186705673722 -10.068148347421912 + vertex 37.37990794719836 148.22015479282126 -10.00000000000005 + endloop +endfacet +facet normal 0.4957224306869051 -0.8586164364012607 -0.13052619222005396 + outer loop + vertex 36.647857139629494 145.4881039852524 -14.000000000000059 + vertex 38.345833773487435 146.54712218534564 -14.517638090205098 + vertex 38.37990794719836 146.4881039852524 -14.000000000000059 + endloop +endfacet +facet normal 0.4957224306869051 -0.8586164364012607 -0.13052619222005396 + outer loop + vertex 38.345833773487435 146.54712218534564 -14.517638090205098 + vertex 36.647857139629494 145.4881039852524 -14.000000000000059 + vertex 36.61378296591855 145.54712218534564 -14.517638090205098 + endloop +endfacet +facet normal 0.19134171618255252 -0.33141357403560423 0.9238795325112809 + outer loop + vertex 37.87990794719836 147.3541293890368 -10.267949192431178 + vertex 35.906676184732014 146.77186705673722 -10.068148347421912 + vertex 36.14785713962948 146.3541293890368 -10.267949192431178 + endloop +endfacet +facet normal 0.19134171618255252 -0.33141357403560423 0.9238795325112809 + outer loop + vertex 35.906676184732014 146.77186705673722 -10.068148347421912 + vertex 37.87990794719836 147.3541293890368 -10.267949192431178 + vertex 37.63872699230088 147.77186705673722 -10.068148347421912 + endloop +endfacet +facet normal -0.1913417161825453 0.33141357403559596 0.9238795325112852 + outer loop + vertex 24.721088902095847 170.14587254275938 -10.068148347421912 + vertex 22.74785713962947 169.56361021045979 -10.267949192431178 + vertex 22.989038094526958 169.14587254275938 -10.068148347421912 + endloop +endfacet +facet normal -0.1913417161825453 0.33141357403559596 0.9238795325112852 + outer loop + vertex 22.74785713962947 169.56361021045979 -10.267949192431178 + vertex 24.721088902095847 170.14587254275938 -10.068148347421912 + vertex 24.479907947198363 170.56361021045979 -10.267949192431178 + endloop +endfacet +facet normal -0.19134171618254786 0.33141357403560007 -0.9238795325112833 + outer loop + vertex 22.74785713962949 169.56361021045976 -15.732050807568937 + vertex 24.721088902095847 170.14587254275938 -15.931851652578198 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + endloop +endfacet +facet normal -0.19134171618254786 0.33141357403560007 -0.9238795325112833 + outer loop + vertex 24.721088902095847 170.14587254275938 -15.931851652578198 + vertex 22.74785713962949 169.56361021045976 -15.732050807568937 + vertex 24.479907947198363 170.56361021045976 -15.732050807568937 + endloop +endfacet +facet normal -0.30438071450436305 0.5272028623656698 0.7933533402912337 + outer loop + vertex 24.479907947198363 170.56361021045979 -10.267949192431178 + vertex 22.540750358442942 169.92232967806692 -10.58578643762696 + vertex 22.74785713962947 169.56361021045979 -10.267949192431178 + endloop +endfacet +facet normal -0.30438071450436305 0.5272028623656698 0.7933533402912337 + outer loop + vertex 22.540750358442942 169.92232967806692 -10.58578643762696 + vertex 24.479907947198363 170.56361021045979 -10.267949192431178 + vertex 24.272801166011813 170.92232967806694 -10.58578643762696 + endloop +endfacet +facet normal -0.06526309611002444 0.11303899832181351 -0.9914448613738107 + outer loop + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 24.97990794719836 169.69758480667534 -16.00000000000006 + vertex 23.24785713962949 168.69758480667534 -16.00000000000006 + endloop +endfacet +facet normal -0.06526309611002444 0.11303899832181351 -0.9914448613738107 + outer loop + vertex 24.97990794719836 169.69758480667534 -16.00000000000006 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 24.721088902095847 170.14587254275938 -15.931851652578198 + endloop +endfacet +facet normal -0.3966766701456202 0.6870641468694451 0.6087614290087248 + outer loop + vertex 24.11388254341393 171.19758480667534 -11.000000000000048 + vertex 22.540750358442942 169.92232967806692 -10.58578643762696 + vertex 24.272801166011813 170.92232967806694 -10.58578643762696 + endloop +endfacet +facet normal -0.3966766701456202 0.6870641468694451 0.6087614290087248 + outer loop + vertex 22.540750358442942 169.92232967806692 -10.58578643762696 + vertex 24.11388254341393 171.19758480667534 -11.000000000000048 + vertex 22.381831735845058 170.19758480667537 -11.000000000000048 + endloop +endfacet +facet normal -0.49572243068690736 0.8586164364012631 0.13052619222003028 + outer loop + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + vertex 22.28193131334041 170.37061741415096 -11.482361909795012 + vertex 24.0139821209093 171.37061741415096 -11.482361909795012 + endloop +endfacet +facet normal -0.49572243068690736 0.8586164364012631 0.13052619222003028 + outer loop + vertex 22.28193131334041 170.37061741415096 -11.482361909795012 + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + vertex 22.247857139629495 170.4296356142442 -12.000000000000046 + endloop +endfacet +facet normal -0.06526309611002441 0.11303899832181347 0.9914448613738107 + outer loop + vertex 24.97990794719836 169.69758480667534 -10.00000000000005 + vertex 22.989038094526958 169.14587254275938 -10.068148347421912 + vertex 23.24785713962949 168.69758480667534 -10.00000000000005 + endloop +endfacet +facet normal -0.06526309611002441 0.11303899832181347 0.9914448613738107 + outer loop + vertex 22.989038094526958 169.14587254275938 -10.068148347421912 + vertex 24.97990794719836 169.69758480667534 -10.00000000000005 + vertex 24.721088902095847 170.14587254275938 -10.068148347421912 + endloop +endfacet +facet normal -0.4619397662556415 0.8001031451912651 -0.3826834323650928 + outer loop + vertex 22.381831735845058 170.19758480667537 -15.000000000000057 + vertex 24.0139821209093 171.37061741415096 -14.517638090205098 + vertex 24.11388254341393 171.19758480667534 -15.000000000000057 + endloop +endfacet +facet normal -0.4619397662556415 0.8001031451912651 -0.3826834323650928 + outer loop + vertex 24.0139821209093 171.37061741415096 -14.517638090205098 + vertex 22.381831735845058 170.19758480667537 -15.000000000000057 + vertex 22.28193131334041 170.37061741415096 -14.517638090205098 + endloop +endfacet +facet normal -0.5000000000000053 0.8660254037844356 1.3680382856456483e-29 + outer loop + vertex 22.247857139629495 170.4296356142442 -14.000000000000059 + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + vertex 23.979907947198363 171.42963561424423 -14.000000000000059 + endloop +endfacet +facet normal -0.5000000000000053 0.8660254037844356 1.3680382856456483e-29 + outer loop + vertex 23.979907947198363 171.42963561424423 -12.000000000000046 + vertex 22.247857139629495 170.4296356142442 -14.000000000000059 + vertex 22.247857139629495 170.4296356142442 -12.000000000000046 + endloop +endfacet +facet normal -0.46193976625564237 0.8001031451912665 0.3826834323650891 + outer loop + vertex 24.0139821209093 171.37061741415096 -11.482361909795012 + vertex 22.381831735845058 170.19758480667537 -11.000000000000048 + vertex 24.11388254341393 171.19758480667534 -11.000000000000048 + endloop +endfacet +facet normal -0.46193976625564237 0.8001031451912665 0.3826834323650891 + outer loop + vertex 22.381831735845058 170.19758480667537 -11.000000000000048 + vertex 24.0139821209093 171.37061741415096 -11.482361909795012 + vertex 22.28193131334041 170.37061741415096 -11.482361909795012 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 37.37990794719835 148.22015479282123 -49.600000000000044 + vertex 23.24785713962949 168.69758480667534 -49.600000000000044 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + endloop +endfacet +facet normal 5.933957380480184e-32 1.4193619471206742e-31 1.0 + outer loop + vertex 23.24785713962949 168.69758480667534 -49.600000000000044 + vertex 37.37990794719835 148.22015479282123 -49.600000000000044 + vertex 24.97990794719836 169.69758480667534 -49.600000000000044 + endloop +endfacet +facet normal 0.3043807145043599 -0.527202862365667 -0.7933533402912368 + outer loop + vertex 36.14785713962947 146.35412938903679 -55.33205080756894 + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + vertex 36.35496392081603 145.99540992142965 -55.01421356237316 + endloop +endfacet +facet normal 0.3043807145043599 -0.527202862365667 -0.7933533402912368 + outer loop + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + vertex 36.14785713962947 146.35412938903679 -55.33205080756894 + vertex 37.87990794719835 147.35412938903679 -55.33205080756894 + endloop +endfacet +facet normal -0.4957224306869123 0.8586164364012558 -0.13052619222005787 + outer loop + vertex 22.28193131334041 170.37061741415096 -54.117638090205105 + vertex 23.979907947198342 171.42963561424423 -53.60000000000006 + vertex 24.01398212090928 171.37061741415093 -54.117638090205105 + endloop +endfacet +facet normal -0.4957224306869123 0.8586164364012558 -0.13052619222005787 + outer loop + vertex 23.979907947198342 171.42963561424423 -53.60000000000006 + vertex 22.28193131334041 170.37061741415096 -54.117638090205105 + vertex 22.247857139629495 170.4296356142442 -53.60000000000006 + endloop +endfacet +facet normal 0.06526309611002591 -0.1130389983218153 -0.9914448613738105 + outer loop + vertex 35.64785713962948 147.22015479282123 -55.600000000000065 + vertex 37.638726992300874 147.77186705673722 -55.531851652578204 + vertex 35.906676184732014 146.77186705673722 -55.531851652578204 + endloop +endfacet +facet normal 0.06526309611002591 -0.1130389983218153 -0.9914448613738105 + outer loop + vertex 37.638726992300874 147.77186705673722 -55.531851652578204 + vertex 35.64785713962948 147.22015479282123 -55.600000000000065 + vertex 37.37990794719835 148.22015479282123 -55.600000000000065 + endloop +endfacet +facet normal 0.5000000000000011 -0.8660254037844379 9.32505634347438e-32 + outer loop + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + vertex 38.37990794719835 146.48810398525237 -53.60000000000006 + vertex 38.37990794719835 146.48810398525237 -51.60000000000005 + endloop +endfacet +facet normal 0.5000000000000011 -0.8660254037844379 9.32505634347438e-32 + outer loop + vertex 38.37990794719835 146.48810398525237 -53.60000000000006 + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + vertex 36.64785713962948 145.48810398525237 -53.60000000000006 + endloop +endfacet +facet normal 0.3966766701456135 -0.6870641468694493 0.6087614290087243 + outer loop + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + vertex 36.51388254341391 145.72015479282123 -50.600000000000044 + vertex 38.24593335098278 146.72015479282123 -50.600000000000044 + endloop +endfacet +facet normal 0.3966766701456135 -0.6870641468694493 0.6087614290087243 + outer loop + vertex 36.51388254341391 145.72015479282123 -50.600000000000044 + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + vertex 36.35496392081603 145.99540992142965 -50.18578643762695 + endloop +endfacet +facet normal -0.39667667014560976 0.6870641468694383 -0.6087614290087392 + outer loop + vertex 22.540750358442942 169.92232967806692 -55.01421356237316 + vertex 24.113882543413904 171.19758480667534 -54.60000000000006 + vertex 24.272801166011813 170.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal -0.39667667014560976 0.6870641468694383 -0.6087614290087392 + outer loop + vertex 24.113882543413904 171.19758480667534 -54.60000000000006 + vertex 22.540750358442942 169.92232967806692 -55.01421356237316 + vertex 22.381831735845036 170.19758480667534 -54.60000000000006 + endloop +endfacet +facet normal 0.3043807145043562 -0.5272028623656608 0.7933533402912423 + outer loop + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + vertex 36.14785713962947 146.35412938903679 -49.867949192431176 + vertex 36.35496392081603 145.99540992142965 -50.18578643762695 + endloop +endfacet +facet normal 0.3043807145043562 -0.5272028623656608 0.7933533402912423 + outer loop + vertex 36.14785713962947 146.35412938903679 -49.867949192431176 + vertex 38.0870147283849 146.99540992142965 -50.18578643762695 + vertex 37.87990794719835 147.35412938903679 -49.867949192431176 + endloop +endfacet +facet normal 0.19134171618254817 -0.33141357403559657 -0.9238795325112844 + outer loop + vertex 35.906676184732014 146.77186705673722 -55.531851652578204 + vertex 37.87990794719835 147.35412938903679 -55.33205080756894 + vertex 36.14785713962947 146.35412938903679 -55.33205080756894 + endloop +endfacet +facet normal 0.19134171618254817 -0.33141357403559657 -0.9238795325112844 + outer loop + vertex 37.87990794719835 147.35412938903679 -55.33205080756894 + vertex 35.906676184732014 146.77186705673722 -55.531851652578204 + vertex 37.638726992300874 147.77186705673722 -55.531851652578204 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 23.24785713962949 168.69758480667534 -55.600000000000065 + vertex 37.37990794719835 148.22015479282123 -55.600000000000065 + vertex 35.64785713962948 147.22015479282123 -55.600000000000065 + endloop +endfacet +facet normal -5.933957380480184e-32 -1.4193619471206742e-31 -1.0 + outer loop + vertex 37.37990794719835 148.22015479282123 -55.600000000000065 + vertex 23.24785713962949 168.69758480667534 -55.600000000000065 + vertex 24.97990794719836 169.69758480667534 -55.600000000000065 + endloop +endfacet +facet normal 0.46193976625564215 -0.800103145191273 0.38268343236507585 + outer loop + vertex 38.24593335098278 146.72015479282123 -50.600000000000044 + vertex 36.61378296591853 145.54712218534561 -51.082361909795004 + vertex 38.34583377348741 146.54712218534561 -51.082361909795004 + endloop +endfacet +facet normal 0.46193976625564215 -0.800103145191273 0.38268343236507585 + outer loop + vertex 36.61378296591853 145.54712218534561 -51.082361909795004 + vertex 38.24593335098278 146.72015479282123 -50.600000000000044 + vertex 36.51388254341391 145.72015479282123 -50.600000000000044 + endloop +endfacet +facet normal 0.49572243068690486 -0.8586164364012606 0.13052619222005538 + outer loop + vertex 38.34583377348741 146.54712218534561 -51.082361909795004 + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + vertex 38.37990794719835 146.48810398525237 -51.60000000000005 + endloop +endfacet +facet normal 0.49572243068690486 -0.8586164364012606 0.13052619222005538 + outer loop + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + vertex 38.34583377348741 146.54712218534561 -51.082361909795004 + vertex 36.61378296591853 145.54712218534561 -51.082361909795004 + endloop +endfacet +facet normal 0.3966766701456156 -0.6870641468694526 -0.6087614290087192 + outer loop + vertex 36.51388254341391 145.72015479282123 -54.60000000000006 + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + vertex 38.24593335098278 146.72015479282123 -54.60000000000006 + endloop +endfacet +facet normal 0.3966766701456156 -0.6870641468694526 -0.6087614290087192 + outer loop + vertex 38.0870147283849 146.99540992142965 -55.01421356237316 + vertex 36.51388254341391 145.72015479282123 -54.60000000000006 + vertex 36.35496392081603 145.99540992142965 -55.01421356237316 + endloop +endfacet +facet normal 0.06526309611002586 -0.1130389983218152 0.9914448613738105 + outer loop + vertex 37.638726992300874 147.77186705673722 -49.668148347421905 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 35.906676184732014 146.77186705673722 -49.668148347421905 + endloop +endfacet +facet normal 0.06526309611002586 -0.1130389983218152 0.9914448613738105 + outer loop + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 37.638726992300874 147.77186705673722 -49.668148347421905 + vertex 37.37990794719835 148.22015479282123 -49.600000000000044 + endloop +endfacet +facet normal 0.4957224306869051 -0.8586164364012607 -0.13052619222005396 + outer loop + vertex 36.64785713962948 145.48810398525237 -53.60000000000006 + vertex 38.34583377348742 146.54712218534561 -54.117638090205105 + vertex 38.37990794719835 146.48810398525237 -53.60000000000006 + endloop +endfacet +facet normal 0.4957224306869051 -0.8586164364012607 -0.13052619222005396 + outer loop + vertex 38.34583377348742 146.54712218534561 -54.117638090205105 + vertex 36.64785713962948 145.48810398525237 -53.60000000000006 + vertex 36.613782965918546 145.54712218534561 -54.117638090205105 + endloop +endfacet +facet normal -0.19134171618254614 0.3314135740355915 0.9238795325112867 + outer loop + vertex 24.721088902095826 170.14587254275935 -49.668148347421905 + vertex 22.74785713962945 169.56361021045976 -49.867949192431176 + vertex 22.989038094526958 169.14587254275935 -49.668148347421905 + endloop +endfacet +facet normal -0.19134171618254614 0.3314135740355915 0.9238795325112867 + outer loop + vertex 22.74785713962945 169.56361021045976 -49.867949192431176 + vertex 24.721088902095826 170.14587254275935 -49.668148347421905 + vertex 24.47990794719834 170.56361021045979 -49.867949192431176 + endloop +endfacet +facet normal 0.461939766255641 -0.8001031451912712 -0.3826834323650809 + outer loop + vertex 36.613782965918546 145.54712218534561 -54.117638090205105 + vertex 38.24593335098278 146.72015479282123 -54.60000000000006 + vertex 38.34583377348742 146.54712218534561 -54.117638090205105 + endloop +endfacet +facet normal 0.461939766255641 -0.8001031451912712 -0.3826834323650809 + outer loop + vertex 38.24593335098278 146.72015479282123 -54.60000000000006 + vertex 36.613782965918546 145.54712218534561 -54.117638090205105 + vertex 36.51388254341391 145.72015479282123 -54.60000000000006 + endloop +endfacet +facet normal -0.30438071450436416 0.5272028623656773 -0.7933533402912286 + outer loop + vertex 22.540750358442942 169.92232967806692 -55.01421356237316 + vertex 24.47990794719834 170.56361021045973 -55.33205080756894 + vertex 22.74785713962947 169.56361021045976 -55.33205080756894 + endloop +endfacet +facet normal -0.30438071450436416 0.5272028623656773 -0.7933533402912286 + outer loop + vertex 24.47990794719834 170.56361021045973 -55.33205080756894 + vertex 22.540750358442942 169.92232967806692 -55.01421356237316 + vertex 24.272801166011813 170.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal 0.19134171618255263 -0.33141357403560434 0.9238795325112809 + outer loop + vertex 37.87990794719835 147.35412938903679 -49.867949192431176 + vertex 35.906676184732014 146.77186705673722 -49.668148347421905 + vertex 36.14785713962947 146.35412938903679 -49.867949192431176 + endloop +endfacet +facet normal 0.19134171618255263 -0.33141357403560434 0.9238795325112809 + outer loop + vertex 35.906676184732014 146.77186705673722 -49.668148347421905 + vertex 37.87990794719835 147.35412938903679 -49.867949192431176 + vertex 37.638726992300874 147.77186705673722 -49.668148347421905 + endloop +endfacet +facet normal -0.1913417161825468 0.33141357403559607 -0.9238795325112849 + outer loop + vertex 22.74785713962947 169.56361021045976 -55.33205080756894 + vertex 24.721088902095826 170.14587254275935 -55.531851652578204 + vertex 22.989038094526958 169.14587254275935 -55.531851652578204 + endloop +endfacet +facet normal -0.1913417161825468 0.33141357403559607 -0.9238795325112849 + outer loop + vertex 24.721088902095826 170.14587254275935 -55.531851652578204 + vertex 22.74785713962947 169.56361021045976 -55.33205080756894 + vertex 24.47990794719834 170.56361021045973 -55.33205080756894 + endloop +endfacet +facet normal 0.5000000000000014 0.8660254037844379 -2.823841496478741e-16 + outer loop + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -40.687718859012975 138.30009313384159 -25.800000000000065 + vertex -37.22361724387527 136.30009313384159 -25.800000000000065 + endloop +endfacet +facet normal 0.5000000000000014 0.8660254037844379 -2.823841496478741e-16 + outer loop + vertex -40.687718859012975 138.30009313384159 -25.800000000000065 + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -40.687718859012996 138.30009313384159 -39.80000000000006 + endloop +endfacet +facet normal 0.49572243068690686 0.8586164364012605 -0.13052619222004863 + outer loop + vertex -37.22361724387527 136.30009313384159 -25.800000000000065 + vertex -40.63660759844658 138.38862043398146 -25.0235428646925 + vertex -37.17250598330887 136.3886204339815 -25.0235428646925 + endloop +endfacet +facet normal 0.49572243068690686 0.8586164364012605 -0.13052619222004863 + outer loop + vertex -40.63660759844658 138.38862043398146 -25.0235428646925 + vertex -37.22361724387527 136.30009313384159 -25.800000000000065 + vertex -40.687718859012975 138.30009313384159 -25.800000000000065 + endloop +endfacet +facet normal 0.46193976625564326 0.8001031451912624 -0.38268343236509644 + outer loop + vertex -37.17250598330887 136.3886204339815 -25.0235428646925 + vertex -40.486756964689626 138.6481693451949 -24.300000000000068 + vertex -37.02265534955192 136.6481693451949 -24.300000000000068 + endloop +endfacet +facet normal 0.46193976625564326 0.8001031451912624 -0.38268343236509644 + outer loop + vertex -40.486756964689626 138.6481693451949 -24.300000000000068 + vertex -37.17250598330887 136.3886204339815 -25.0235428646925 + vertex -40.63660759844658 138.38862043398146 -25.0235428646925 + endloop +endfacet +facet normal 0.3966766701456205 0.6870641468694526 -0.608761429008716 + outer loop + vertex -37.02265534955192 136.6481693451949 -24.300000000000068 + vertex -40.248379030792805 139.0610520381075 -23.678679656440423 + vertex -36.78427741565509 137.06105203810753 -23.678679656440423 + endloop +endfacet +facet normal 0.3966766701456205 0.6870641468694526 -0.608761429008716 + outer loop + vertex -40.248379030792805 139.0610520381075 -23.678679656440423 + vertex -37.02265534955192 136.6481693451949 -24.300000000000068 + vertex -40.486756964689626 138.6481693451949 -24.300000000000068 + endloop +endfacet +facet normal 0.3043807145043616 0.5272028623656696 -0.7933533402912344 + outer loop + vertex -40.248379030792805 139.0610520381075 -23.678679656440423 + vertex -36.473617243875275 137.59913123951827 -23.20192378864675 + vertex -36.78427741565509 137.06105203810753 -23.678679656440423 + endloop +endfacet +facet normal 0.3043807145043616 0.5272028623656696 -0.7933533402912344 + outer loop + vertex -36.473617243875275 137.59913123951827 -23.20192378864675 + vertex -40.248379030792805 139.0610520381075 -23.678679656440423 + vertex -39.93771885901299 139.59913123951824 -23.20192378864675 + endloop +endfacet +facet normal 0.19134171618254497 0.3314135740355907 -0.9238795325112873 + outer loop + vertex -39.93771885901299 139.59913123951824 -23.20192378864675 + vertex -36.111845811529065 138.22573774106888 -22.90222252113286 + vertex -36.473617243875275 137.59913123951827 -23.20192378864675 + endloop +endfacet +facet normal 0.19134171618254497 0.3314135740355907 -0.9238795325112873 + outer loop + vertex -36.111845811529065 138.22573774106888 -22.90222252113286 + vertex -39.93771885901299 139.59913123951824 -23.20192378864675 + vertex -39.57594742666678 140.22573774106885 -22.90222252113286 + endloop +endfacet +facet normal 0.0652630961100252 0.1130389983218141 -0.9914448613738106 + outer loop + vertex -39.57594742666678 140.22573774106885 -22.90222252113286 + vertex -35.72361724387527 138.89816934519493 -22.800000000000065 + vertex -36.111845811529065 138.22573774106888 -22.90222252113286 + endloop +endfacet +facet normal 0.0652630961100252 0.1130389983218141 -0.9914448613738106 + outer loop + vertex -35.72361724387527 138.89816934519493 -22.800000000000065 + vertex -39.57594742666678 140.22573774106885 -22.90222252113286 + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + endloop +endfacet +facet normal -0.06526309611002605 -0.11303899832181531 -0.9914448613738105 + outer loop + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -35.33538867622149 139.57060094932095 -22.90222252113286 + vertex -35.72361724387527 138.89816934519493 -22.800000000000065 + endloop +endfacet +facet normal -0.06526309611002605 -0.11303899832181531 -0.9914448613738105 + outer loop + vertex -35.33538867622149 139.57060094932095 -22.90222252113286 + vertex -39.18771885901298 140.8981693451949 -22.800000000000065 + vertex -38.7994902913592 141.57060094932095 -22.90222252113286 + endloop +endfacet +facet normal -0.1913417161825436 -0.331413574035588 -0.9238795325112884 + outer loop + vertex -38.7994902913592 141.57060094932095 -22.90222252113286 + vertex -34.97361724387526 140.19720745087156 -23.20192378864675 + vertex -35.33538867622149 139.57060094932095 -22.90222252113286 + endloop +endfacet +facet normal -0.1913417161825436 -0.331413574035588 -0.9238795325112884 + outer loop + vertex -34.97361724387526 140.19720745087156 -23.20192378864675 + vertex -38.7994902913592 141.57060094932095 -22.90222252113286 + vertex -38.43771885901297 142.19720745087156 -23.20192378864675 + endloop +endfacet +facet normal -0.30438071450436244 -0.5272028623656708 -0.7933533402912333 + outer loop + vertex -38.43771885901297 142.19720745087156 -23.20192378864675 + vertex -34.662957072095445 140.7352866522823 -23.678679656440423 + vertex -34.97361724387526 140.19720745087156 -23.20192378864675 + endloop +endfacet +facet normal -0.30438071450436244 -0.5272028623656708 -0.7933533402912333 + outer loop + vertex -34.662957072095445 140.7352866522823 -23.678679656440423 + vertex -38.43771885901297 142.19720745087156 -23.20192378864675 + vertex -38.127058687233145 142.7352866522823 -23.678679656440423 + endloop +endfacet +facet normal -0.3966766701456201 -0.6870641468694516 -0.6087614290087174 + outer loop + vertex -34.662957072095445 140.7352866522823 -23.678679656440423 + vertex -37.88868075333632 143.1481693451949 -24.30000000000006 + vertex -34.42457913819862 141.14816934519493 -24.30000000000006 + endloop +endfacet +facet normal -0.3966766701456201 -0.6870641468694516 -0.6087614290087174 + outer loop + vertex -37.88868075333632 143.1481693451949 -24.30000000000006 + vertex -34.662957072095445 140.7352866522823 -23.678679656440423 + vertex -38.127058687233145 142.7352866522823 -23.678679656440423 + endloop +endfacet +facet normal -0.46193976625564387 -0.8001031451912634 -0.38268343236509395 + outer loop + vertex -34.42457913819862 141.14816934519493 -24.30000000000006 + vertex -37.73883011957936 143.40771825640834 -25.0235428646925 + vertex -34.27472850444166 141.40771825640834 -25.0235428646925 + endloop +endfacet +facet normal -0.46193976625564387 -0.8001031451912634 -0.38268343236509395 + outer loop + vertex -37.73883011957936 143.40771825640834 -25.0235428646925 + vertex -34.42457913819862 141.14816934519493 -24.30000000000006 + vertex -37.88868075333632 143.1481693451949 -24.30000000000006 + endloop +endfacet +facet normal -0.4957224306869065 -0.85861643640126 -0.13052619222005477 + outer loop + vertex -34.27472850444166 141.40771825640834 -25.0235428646925 + vertex -37.68771885901297 143.49624555654825 -25.800000000000065 + vertex -34.22361724387527 141.49624555654825 -25.800000000000065 + endloop +endfacet +facet normal -0.4957224306869065 -0.85861643640126 -0.13052619222005477 + outer loop + vertex -37.68771885901297 143.49624555654825 -25.800000000000065 + vertex -34.27472850444166 141.40771825640834 -25.0235428646925 + vertex -37.73883011957936 143.40771825640834 -25.0235428646925 + endloop +endfacet +facet normal -0.5000000000000014 -0.8660254037844379 3.4888037310101813e-16 + outer loop + vertex -37.68771885901297 143.49624555654825 -25.800000000000065 + vertex -34.22361724387527 141.49624555654825 -39.80000000000007 + vertex -34.22361724387527 141.49624555654825 -25.800000000000065 + endloop +endfacet +facet normal -0.5000000000000014 -0.8660254037844379 3.4888037310101813e-16 + outer loop + vertex -34.22361724387527 141.49624555654825 -39.80000000000007 + vertex -37.68771885901297 143.49624555654825 -25.800000000000065 + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + endloop +endfacet +facet normal -0.4957224306869068 -0.8586164364012605 0.13052619222004908 + outer loop + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + vertex -34.27472850444166 141.40771825640834 -40.57645713530763 + vertex -34.22361724387527 141.49624555654825 -39.80000000000007 + endloop +endfacet +facet normal -0.4957224306869068 -0.8586164364012605 0.13052619222004908 + outer loop + vertex -34.27472850444166 141.40771825640834 -40.57645713530763 + vertex -37.68771885901297 143.49624555654822 -39.80000000000006 + vertex -37.73883011957936 143.40771825640834 -40.57645713530763 + endloop +endfacet +facet normal -0.46193976625564387 -0.8001031451912634 0.38268343236509395 + outer loop + vertex -37.73883011957936 143.40771825640834 -40.57645713530763 + vertex -34.42457913819862 141.14816934519493 -41.30000000000007 + vertex -34.27472850444166 141.40771825640834 -40.57645713530763 + endloop +endfacet +facet normal -0.46193976625564387 -0.8001031451912634 0.38268343236509395 + outer loop + vertex -34.42457913819862 141.14816934519493 -41.30000000000007 + vertex -37.73883011957936 143.40771825640834 -40.57645713530763 + vertex -37.88868075333632 143.1481693451949 -41.30000000000007 + endloop +endfacet +facet normal -0.39667667014561997 -0.6870641468694515 0.6087614290087178 + outer loop + vertex -37.88868075333632 143.1481693451949 -41.30000000000007 + vertex -34.662957072095445 140.7352866522823 -41.921320343559714 + vertex -34.42457913819862 141.14816934519493 -41.30000000000007 + endloop +endfacet +facet normal -0.39667667014561997 -0.6870641468694515 0.6087614290087178 + outer loop + vertex -34.662957072095445 140.7352866522823 -41.921320343559714 + vertex -37.88868075333632 143.1481693451949 -41.30000000000007 + vertex -38.127058687233145 142.7352866522823 -41.921320343559714 + endloop +endfacet +facet normal -0.3043807145043612 -0.5272028623656689 0.7933533402912349 + outer loop + vertex -34.662957072095445 140.7352866522823 -41.921320343559714 + vertex -38.43771885901297 142.19720745087156 -42.39807621135338 + vertex -34.97361724387526 140.19720745087156 -42.398076211353384 + endloop +endfacet +facet normal -0.3043807145043612 -0.5272028623656689 0.7933533402912349 + outer loop + vertex -38.43771885901297 142.19720745087156 -42.39807621135338 + vertex -34.662957072095445 140.7352866522823 -41.921320343559714 + vertex -38.127058687233145 142.7352866522823 -41.921320343559714 + endloop +endfacet +facet normal -0.19134171618254645 -0.33141357403559335 0.9238795325112859 + outer loop + vertex -34.97361724387526 140.19720745087156 -42.398076211353384 + vertex -38.79949029135918 141.57060094932095 -42.697777478867266 + vertex -35.33538867622146 139.57060094932095 -42.69777747886727 + endloop +endfacet +facet normal -0.19134171618254645 -0.33141357403559335 0.9238795325112859 + outer loop + vertex -38.79949029135918 141.57060094932095 -42.697777478867266 + vertex -34.97361724387526 140.19720745087156 -42.398076211353384 + vertex -38.43771885901297 142.19720745087156 -42.39807621135338 + endloop +endfacet +facet normal -0.06526309611002482 -0.11303899832181341 0.9914448613738108 + outer loop + vertex -35.33538867622146 139.57060094932095 -42.69777747886727 + vertex -39.18771885901298 140.8981693451949 -42.80000000000007 + vertex -35.72361724387527 138.8981693451949 -42.80000000000007 + endloop +endfacet +facet normal -0.06526309611002482 -0.11303899832181341 0.9914448613738108 + outer loop + vertex -39.18771885901298 140.8981693451949 -42.80000000000007 + vertex -35.33538867622146 139.57060094932095 -42.69777747886727 + vertex -38.79949029135918 141.57060094932095 -42.697777478867266 + endloop +endfacet +facet normal 0.06526309611002645 0.113038998321816 0.9914448613738105 + outer loop + vertex -35.72361724387527 138.8981693451949 -42.80000000000007 + vertex -39.57594742666676 140.22573774106885 -42.697777478867266 + vertex -36.111845811529044 138.22573774106888 -42.69777747886727 + endloop +endfacet +facet normal 0.06526309611002645 0.113038998321816 0.9914448613738105 + outer loop + vertex -39.57594742666676 140.22573774106885 -42.697777478867266 + vertex -35.72361724387527 138.8981693451949 -42.80000000000007 + vertex -39.18771885901298 140.8981693451949 -42.80000000000007 + endloop +endfacet +facet normal 0.1913417161825436 0.331413574035588 0.9238795325112884 + outer loop + vertex -36.111845811529044 138.22573774106888 -42.69777747886727 + vertex -39.93771885901299 139.59913123951824 -42.398076211353384 + vertex -36.473617243875275 137.59913123951824 -42.398076211353384 + endloop +endfacet +facet normal 0.1913417161825436 0.331413574035588 0.9238795325112884 + outer loop + vertex -39.93771885901299 139.59913123951824 -42.398076211353384 + vertex -36.111845811529044 138.22573774106888 -42.69777747886727 + vertex -39.57594742666676 140.22573774106885 -42.697777478867266 + endloop +endfacet +facet normal 0.3043807145043597 0.5272028623656662 0.7933533402912374 + outer loop + vertex -36.473617243875275 137.59913123951824 -42.398076211353384 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -36.78427741565511 137.06105203810753 -41.921320343559714 + endloop +endfacet +facet normal 0.3043807145043597 0.5272028623656662 0.7933533402912374 + outer loop + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -36.473617243875275 137.59913123951824 -42.398076211353384 + vertex -39.93771885901299 139.59913123951824 -42.398076211353384 + endloop +endfacet +facet normal 0.39667667014562064 0.6870641468694527 0.6087614290087157 + outer loop + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -37.02265534955194 136.6481693451949 -41.30000000000007 + vertex -36.78427741565511 137.06105203810753 -41.921320343559714 + endloop +endfacet +facet normal 0.39667667014562064 0.6870641468694527 0.6087614290087157 + outer loop + vertex -37.02265534955194 136.6481693451949 -41.30000000000007 + vertex -40.248379030792826 139.0610520381075 -41.921320343559714 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + endloop +endfacet +facet normal 0.4619397662556442 0.8001031451912639 0.38268343236509256 + outer loop + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -37.172505983308895 136.3886204339815 -40.57645713530763 + vertex -37.02265534955194 136.6481693451949 -41.30000000000007 + endloop +endfacet +facet normal 0.4619397662556442 0.8001031451912639 0.38268343236509256 + outer loop + vertex -37.172505983308895 136.3886204339815 -40.57645713530763 + vertex -40.486756964689654 138.6481693451949 -41.30000000000007 + vertex -40.6366075984466 138.3886204339815 -40.57645713530763 + endloop +endfacet +facet normal 0.49572243068690686 0.8586164364012605 0.13052619222004863 + outer loop + vertex -40.6366075984466 138.3886204339815 -40.57645713530763 + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -37.172505983308895 136.3886204339815 -40.57645713530763 + endloop +endfacet +facet normal 0.49572243068690686 0.8586164364012605 0.13052619222004863 + outer loop + vertex -37.22361724387529 136.30009313384159 -39.80000000000007 + vertex -40.6366075984466 138.3886204339815 -40.57645713530763 + vertex -40.687718859012996 138.30009313384159 -39.80000000000006 + endloop +endfacet +facet normal -0.4957224306869056 0.8586164364012612 -0.13052619222004863 + outer loop + vertex 37.333755524491714 136.30009313384156 -25.800000000000054 + vertex 40.74674587906303 138.3886204339814 -25.0235428646925 + vertex 40.79785713962942 138.30009313384153 -25.800000000000065 + endloop +endfacet +facet normal -0.4957224306869056 0.8586164364012612 -0.13052619222004863 + outer loop + vertex 40.74674587906303 138.3886204339814 -25.0235428646925 + vertex 37.333755524491714 136.30009313384156 -25.800000000000054 + vertex 37.28264426392531 136.38862043398143 -25.02354286469249 + endloop +endfacet +facet normal -0.5000000000000002 0.8660254037844385 4.153765965541621e-16 + outer loop + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + vertex 40.79785713962942 138.30009313384153 -25.800000000000065 + vertex 40.79785713962944 138.30009313384156 -39.80000000000006 + endloop +endfacet +facet normal -0.5000000000000002 0.8660254037844385 4.153765965541621e-16 + outer loop + vertex 40.79785713962942 138.30009313384153 -25.800000000000065 + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + vertex 37.333755524491714 136.30009313384156 -25.800000000000054 + endloop +endfacet +facet normal -0.4957224306869057 0.8586164364012612 0.13052619222004863 + outer loop + vertex 40.74674587906305 138.38862043398143 -40.57645713530763 + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + vertex 40.79785713962944 138.30009313384156 -39.80000000000006 + endloop +endfacet +facet normal -0.4957224306869057 0.8586164364012612 0.13052619222004863 + outer loop + vertex 37.333755524491735 136.30009313384156 -39.800000000000054 + vertex 40.74674587906305 138.38862043398143 -40.57645713530763 + vertex 37.28264426392534 136.38862043398146 -40.57645713530762 + endloop +endfacet +facet normal -0.46193976625564265 0.8001031451912635 0.3826834323650951 + outer loop + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 37.28264426392534 136.38862043398146 -40.57645713530762 + vertex 40.74674587906305 138.38862043398143 -40.57645713530763 + endloop +endfacet +facet normal -0.46193976625564265 0.8001031451912635 0.3826834323650951 + outer loop + vertex 37.28264426392534 136.38862043398146 -40.57645713530762 + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 37.132793630168386 136.64816934519487 -41.30000000000006 + endloop +endfacet +facet normal -0.39667667014561986 0.6870641468694533 0.6087614290087157 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 37.132793630168386 136.64816934519487 -41.30000000000006 + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + endloop +endfacet +facet normal -0.39667667014561986 0.6870641468694533 0.6087614290087157 + outer loop + vertex 37.132793630168386 136.64816934519487 -41.30000000000006 + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.89441569627156 137.06105203810748 -41.9213203435597 + endloop +endfacet +facet normal -0.3043807145043594 0.5272028623656665 0.7933533402912374 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.58375552449172 137.5991312395182 -42.39807621135338 + vertex 36.89441569627156 137.06105203810748 -41.9213203435597 + endloop +endfacet +facet normal -0.3043807145043594 0.5272028623656665 0.7933533402912374 + outer loop + vertex 36.58375552449172 137.5991312395182 -42.39807621135338 + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 40.04785713962944 139.5991312395182 -42.398076211353384 + endloop +endfacet +facet normal -0.19134171618254192 0.33141357403558563 0.9238795325112897 + outer loop + vertex 40.04785713962944 139.5991312395182 -42.398076211353384 + vertex 36.22198409214549 138.22573774106883 -42.69777747886726 + vertex 36.58375552449172 137.5991312395182 -42.39807621135338 + endloop +endfacet +facet normal -0.19134171618254192 0.33141357403558563 0.9238795325112897 + outer loop + vertex 36.22198409214549 138.22573774106883 -42.69777747886726 + vertex 40.04785713962944 139.5991312395182 -42.398076211353384 + vertex 39.68608570728321 140.2257377410688 -42.697777478867266 + endloop +endfacet +facet normal -0.06526309611002662 0.11303899832181592 0.9914448613738103 + outer loop + vertex 39.68608570728321 140.2257377410688 -42.697777478867266 + vertex 35.833755524491714 138.89816934519487 -42.800000000000054 + vertex 36.22198409214549 138.22573774106883 -42.69777747886726 + endloop +endfacet +facet normal -0.06526309611002662 0.11303899832181592 0.9914448613738103 + outer loop + vertex 35.833755524491714 138.89816934519487 -42.800000000000054 + vertex 39.68608570728321 140.2257377410688 -42.697777478867266 + vertex 39.29785713962943 140.89816934519484 -42.80000000000006 + endloop +endfacet +facet normal 0.06526309611002429 -0.1130389983218137 0.9914448613738107 + outer loop + vertex 39.29785713962943 140.89816934519484 -42.80000000000006 + vertex 35.44552695683794 139.57060094932092 -42.69777747886726 + vertex 35.833755524491714 138.89816934519487 -42.800000000000054 + endloop +endfacet +facet normal 0.06526309611002429 -0.1130389983218137 0.9914448613738107 + outer loop + vertex 35.44552695683794 139.57060094932092 -42.69777747886726 + vertex 39.29785713962943 140.89816934519484 -42.80000000000006 + vertex 38.90962857197563 141.5706009493209 -42.697777478867266 + endloop +endfacet +facet normal 0.19134171618254567 -0.33141357403559385 0.923879532511286 + outer loop + vertex 38.90962857197563 141.5706009493209 -42.697777478867266 + vertex 35.08375552449173 140.19720745087153 -42.39807621135337 + vertex 35.44552695683794 139.57060094932092 -42.69777747886726 + endloop +endfacet +facet normal 0.19134171618254567 -0.33141357403559385 0.923879532511286 + outer loop + vertex 35.08375552449173 140.19720745087153 -42.39807621135337 + vertex 38.90962857197563 141.5706009493209 -42.697777478867266 + vertex 38.54785713962942 142.19720745087153 -42.39807621135338 + endloop +endfacet +facet normal 0.30438071450436033 -0.5272028623656697 0.793353340291235 + outer loop + vertex 38.54785713962942 142.19720745087153 -42.39807621135338 + vertex 34.77309535271191 140.73528665228224 -41.9213203435597 + vertex 35.08375552449173 140.19720745087153 -42.39807621135337 + endloop +endfacet +facet normal 0.30438071450436033 -0.5272028623656697 0.793353340291235 + outer loop + vertex 34.77309535271191 140.73528665228224 -41.9213203435597 + vertex 38.54785713962942 142.19720745087153 -42.39807621135338 + vertex 38.237196967849606 142.73528665228224 -41.92132034355971 + endloop +endfacet +facet normal 0.3966766701456194 -0.6870641468694535 0.6087614290087157 + outer loop + vertex 37.99881903395278 143.14816934519484 -41.30000000000006 + vertex 34.77309535271191 140.73528665228224 -41.9213203435597 + vertex 38.237196967849606 142.73528665228224 -41.92132034355971 + endloop +endfacet +facet normal 0.3966766701456194 -0.6870641468694535 0.6087614290087157 + outer loop + vertex 34.77309535271191 140.73528665228224 -41.9213203435597 + vertex 37.99881903395278 143.14816934519484 -41.30000000000006 + vertex 34.534717418815084 141.14816934519484 -41.300000000000054 + endloop +endfacet +facet normal 0.46193976625564254 -0.800103145191264 0.38268343236509383 + outer loop + vertex 37.84896840019583 143.40771825640826 -40.57645713530762 + vertex 34.534717418815084 141.14816934519484 -41.300000000000054 + vertex 37.99881903395278 143.14816934519484 -41.30000000000006 + endloop +endfacet +facet normal 0.46193976625564254 -0.800103145191264 0.38268343236509383 + outer loop + vertex 34.534717418815084 141.14816934519484 -41.300000000000054 + vertex 37.84896840019583 143.40771825640826 -40.57645713530762 + vertex 34.38486678505814 141.4077182564083 -40.576457135307614 + endloop +endfacet +facet normal 0.4957224306869055 -0.8586164364012612 0.13052619222004908 + outer loop + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 34.38486678505814 141.4077182564083 -40.576457135307614 + vertex 37.84896840019583 143.40771825640826 -40.57645713530762 + endloop +endfacet +facet normal 0.4957224306869055 -0.8586164364012612 0.13052619222004908 + outer loop + vertex 34.38486678505814 141.4077182564083 -40.576457135307614 + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 34.33375552449175 141.49624555654816 -39.800000000000054 + endloop +endfacet +facet normal 0.5000000000000002 -0.8660254037844386 -3.4888037310101773e-16 + outer loop + vertex 34.33375552449175 141.49624555654816 -25.800000000000047 + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 37.797857139629436 143.49624555654816 -25.80000000000006 + endloop +endfacet +facet normal 0.5000000000000002 -0.8660254037844386 -3.4888037310101773e-16 + outer loop + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 34.33375552449175 141.49624555654816 -25.800000000000047 + vertex 34.33375552449175 141.49624555654816 -39.800000000000054 + endloop +endfacet +facet normal 0.49572243068690514 -0.8586164364012603 -0.13052619222005565 + outer loop + vertex 34.38486678505814 141.4077182564083 -25.02354286469249 + vertex 37.797857139629436 143.49624555654816 -25.80000000000006 + vertex 37.84896840019583 143.40771825640826 -25.0235428646925 + endloop +endfacet +facet normal 0.49572243068690514 -0.8586164364012603 -0.13052619222005565 + outer loop + vertex 37.797857139629436 143.49624555654816 -25.80000000000006 + vertex 34.38486678505814 141.4077182564083 -25.02354286469249 + vertex 34.33375552449175 141.49624555654816 -25.800000000000047 + endloop +endfacet +facet normal 0.4619397662556429 -0.8001031451912638 -0.38268343236509383 + outer loop + vertex 34.534717418815084 141.14816934519484 -24.30000000000005 + vertex 37.84896840019583 143.40771825640826 -25.0235428646925 + vertex 37.99881903395278 143.14816934519484 -24.30000000000006 + endloop +endfacet +facet normal 0.4619397662556429 -0.8001031451912638 -0.38268343236509383 + outer loop + vertex 37.84896840019583 143.40771825640826 -25.0235428646925 + vertex 34.534717418815084 141.14816934519484 -24.30000000000005 + vertex 34.38486678505814 141.4077182564083 -25.02354286469249 + endloop +endfacet +facet normal 0.39667667014561914 -0.6870641468694522 -0.6087614290087173 + outer loop + vertex 34.77309535271191 140.73528665228224 -23.678679656440412 + vertex 37.99881903395278 143.14816934519484 -24.30000000000006 + vertex 38.237196967849606 142.7352866522822 -23.678679656440423 + endloop +endfacet +facet normal 0.39667667014561914 -0.6870641468694522 -0.6087614290087173 + outer loop + vertex 37.99881903395278 143.14816934519484 -24.30000000000006 + vertex 34.77309535271191 140.73528665228224 -23.678679656440412 + vertex 34.534717418815084 141.14816934519484 -24.30000000000005 + endloop +endfacet +facet normal 0.3043807145043621 -0.5272028623656712 -0.7933533402912333 + outer loop + vertex 34.77309535271191 140.73528665228224 -23.678679656440412 + vertex 38.54785713962942 142.1972074508715 -23.20192378864675 + vertex 35.08375552449173 140.19720745087153 -23.201923788646738 + endloop +endfacet +facet normal 0.3043807145043621 -0.5272028623656712 -0.7933533402912333 + outer loop + vertex 38.54785713962942 142.1972074508715 -23.20192378864675 + vertex 34.77309535271191 140.73528665228224 -23.678679656440412 + vertex 38.237196967849606 142.7352866522822 -23.678679656440423 + endloop +endfacet +facet normal 0.19134171618254592 -0.33141357403559263 -0.9238795325112863 + outer loop + vertex 35.08375552449173 140.19720745087153 -23.201923788646738 + vertex 38.90962857197565 141.5706009493209 -22.902222521132856 + vertex 35.44552695683796 139.5706009493209 -22.902222521132845 + endloop +endfacet +facet normal 0.19134171618254592 -0.33141357403559263 -0.9238795325112863 + outer loop + vertex 38.90962857197565 141.5706009493209 -22.902222521132856 + vertex 35.08375552449173 140.19720745087153 -23.201923788646738 + vertex 38.54785713962942 142.1972074508715 -23.20192378864675 + endloop +endfacet +facet normal 0.06526309611002287 -0.11303899832180944 -0.9914448613738113 + outer loop + vertex 35.44552695683796 139.5706009493209 -22.902222521132845 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 35.833755524491714 138.89816934519484 -22.800000000000054 + endloop +endfacet +facet normal 0.06526309611002287 -0.11303899832180944 -0.9914448613738113 + outer loop + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 35.44552695683796 139.5706009493209 -22.902222521132845 + vertex 38.90962857197565 141.5706009493209 -22.902222521132856 + endloop +endfacet +facet normal -0.06526309611002117 0.11303899832180829 -0.9914448613738115 + outer loop + vertex 35.833755524491714 138.89816934519484 -22.800000000000054 + vertex 39.68608570728323 140.2257377410688 -22.902222521132856 + vertex 36.22198409214552 138.22573774106883 -22.902222521132845 + endloop +endfacet +facet normal -0.06526309611002117 0.11303899832180829 -0.9914448613738115 + outer loop + vertex 39.68608570728323 140.2257377410688 -22.902222521132856 + vertex 35.833755524491714 138.89816934519484 -22.800000000000054 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + endloop +endfacet +facet normal -0.19134171618254714 0.3314135740355965 -0.9238795325112845 + outer loop + vertex 36.22198409214552 138.22573774106883 -22.902222521132845 + vertex 40.04785713962944 139.59913123951816 -23.20192378864675 + vertex 36.58375552449172 137.5991312395182 -23.201923788646738 + endloop +endfacet +facet normal -0.19134171618254714 0.3314135740355965 -0.9238795325112845 + outer loop + vertex 40.04785713962944 139.59913123951816 -23.20192378864675 + vertex 36.22198409214552 138.22573774106883 -22.902222521132845 + vertex 39.68608570728323 140.2257377410688 -22.902222521132856 + endloop +endfacet +facet normal -0.30438071450436066 0.5272028623656703 -0.7933533402912343 + outer loop + vertex 36.58375552449172 137.5991312395182 -23.201923788646738 + vertex 40.35851731140925 139.06105203810745 -23.678679656440423 + vertex 36.89441569627154 137.06105203810748 -23.678679656440412 + endloop +endfacet +facet normal -0.30438071450436066 0.5272028623656703 -0.7933533402912343 + outer loop + vertex 40.35851731140925 139.06105203810745 -23.678679656440423 + vertex 36.58375552449172 137.5991312395182 -23.201923788646738 + vertex 40.04785713962944 139.59913123951816 -23.20192378864675 + endloop +endfacet +facet normal -0.39667667014561925 0.6870641468694533 -0.6087614290087159 + outer loop + vertex 37.132793630168365 136.64816934519487 -24.300000000000058 + vertex 40.35851731140925 139.06105203810745 -23.678679656440423 + vertex 40.59689524530608 138.64816934519484 -24.300000000000068 + endloop +endfacet +facet normal -0.39667667014561925 0.6870641468694533 -0.6087614290087159 + outer loop + vertex 40.35851731140925 139.06105203810745 -23.678679656440423 + vertex 37.132793630168365 136.64816934519487 -24.300000000000058 + vertex 36.89441569627154 137.06105203810748 -23.678679656440412 + endloop +endfacet +facet normal -0.461939766255642 0.8001031451912631 -0.38268343236509633 + outer loop + vertex 37.28264426392531 136.38862043398143 -25.02354286469249 + vertex 40.59689524530608 138.64816934519484 -24.300000000000068 + vertex 40.74674587906303 138.3886204339814 -25.0235428646925 + endloop +endfacet +facet normal -0.461939766255642 0.8001031451912631 -0.38268343236509633 + outer loop + vertex 40.59689524530608 138.64816934519484 -24.300000000000068 + vertex 37.28264426392531 136.38862043398143 -25.02354286469249 + vertex 37.132793630168365 136.64816934519487 -24.300000000000058 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 22.989038094526958 169.14587254275935 -55.531851652578204 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.989038094526958 169.14587254275935 -55.531851652578204 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 22.74785713962947 169.56361021045976 -55.33205080756894 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.74785713962947 169.56361021045976 -55.33205080756894 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 22.540750358442942 169.92232967806692 -55.01421356237316 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.540750358442942 169.92232967806692 -55.01421356237316 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 22.381831735845036 170.19758480667534 -54.60000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.381831735845036 170.19758480667534 -54.60000000000006 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 22.28193131334041 170.37061741415096 -54.117638090205105 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.28193131334041 170.37061741415096 -54.117638090205105 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 22.989038094526958 169.14587254275935 -55.531851652578204 + vertex 23.24785713962949 168.69758480667534 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.28193131334041 170.37061741415096 -54.117638090205105 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.247857139629495 170.4296356142442 -53.60000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.247857139629495 170.4296356142442 -53.60000000000006 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.247857139629495 170.4296356142442 -51.60000000000005 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.247857139629495 170.4296356142442 -51.60000000000005 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.28193131334041 170.37061741415096 -51.082361909795004 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.28193131334041 170.37061741415096 -51.082361909795004 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.381831735845036 170.19758480667534 -50.600000000000044 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.381831735845036 170.19758480667534 -50.600000000000044 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.540750358442942 169.92232967806692 -50.18578643762695 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.540750358442942 169.92232967806692 -50.18578643762695 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.74785713962945 169.56361021045976 -49.867949192431176 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.74785713962945 169.56361021045976 -49.867949192431176 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.989038094526958 169.14587254275935 -49.668148347421905 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.989038094526958 169.14587254275935 -49.668148347421905 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 23.24785713962949 168.69758480667534 -49.600000000000044 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 23.24785713962949 168.69758480667534 -49.600000000000044 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 38.237196967849606 142.73528665228224 -41.92132034355971 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 38.237196967849606 142.73528665228224 -41.92132034355971 + vertex 38.54785713962942 142.19720745087153 -42.39807621135338 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 38.54785713962942 142.19720745087153 -42.39807621135338 + vertex 38.90962857197563 141.5706009493209 -42.697777478867266 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 38.90962857197563 141.5706009493209 -42.697777478867266 + vertex 39.29785713962943 140.89816934519484 -42.80000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 38.237196967849606 142.73528665228224 -41.92132034355971 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 37.99881903395278 143.14816934519484 -41.30000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.99881903395278 143.14816934519484 -41.30000000000006 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 37.84896840019583 143.40771825640826 -40.57645713530762 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.84896840019583 143.40771825640826 -40.57645713530762 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 22.74785713962949 169.56361021045976 -15.732050807568937 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 22.74785713962949 169.56361021045976 -15.732050807568937 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.797857139629436 143.49624555654816 -39.80000000000006 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 37.797857139629436 143.49624555654816 -25.80000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.797857139629436 143.49624555654816 -25.80000000000006 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 37.84896840019583 143.40771825640826 -25.0235428646925 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.84896840019583 143.40771825640826 -25.0235428646925 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 37.99881903395278 143.14816934519484 -24.30000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 37.99881903395278 143.14816934519484 -24.30000000000006 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 38.237196967849606 142.7352866522822 -23.678679656440423 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 38.237196967849606 142.7352866522822 -23.678679656440423 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 38.54785713962942 142.1972074508715 -23.20192378864675 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 38.54785713962942 142.1972074508715 -23.20192378864675 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 38.90962857197565 141.5706009493209 -22.902222521132856 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 38.90962857197565 141.5706009493209 -22.902222521132856 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 22.989038094526958 169.14587254275938 -15.931851652578198 + vertex 23.24785713962949 168.69758480667534 -16.00000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.540750358442942 169.92232967806692 -15.414213562373153 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.381831735845058 170.19758480667537 -15.000000000000057 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.381831735845058 170.19758480667537 -15.000000000000057 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.28193131334041 170.37061741415096 -14.517638090205098 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.28193131334041 170.37061741415096 -14.517638090205098 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.247857139629495 170.4296356142442 -14.000000000000059 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.247857139629495 170.4296356142442 -14.000000000000059 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.247857139629495 170.4296356142442 -12.000000000000046 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.247857139629495 170.4296356142442 -12.000000000000046 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.28193131334041 170.37061741415096 -11.482361909795012 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.28193131334041 170.37061741415096 -11.482361909795012 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.381831735845058 170.19758480667537 -11.000000000000048 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.381831735845058 170.19758480667537 -11.000000000000048 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.540750358442942 169.92232967806692 -10.58578643762696 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.540750358442942 169.92232967806692 -10.58578643762696 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.74785713962947 169.56361021045979 -10.267949192431178 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.74785713962947 169.56361021045979 -10.267949192431178 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 22.989038094526958 169.14587254275938 -10.068148347421912 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 22.989038094526958 169.14587254275938 -10.068148347421912 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 23.24785713962949 168.69758480667534 -10.00000000000005 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 23.24785713962949 168.69758480667534 -10.00000000000005 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 35.647857139629494 147.22015479282126 -10.00000000000005 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 40.79785713962944 138.30009313384156 -39.80000000000006 + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.79785713962944 138.30009313384156 -39.80000000000006 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 40.74674587906305 138.38862043398143 -40.57645713530763 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.74674587906305 138.38862043398143 -40.57645713530763 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 36.51388254341391 145.72015479282123 -54.60000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 36.51388254341391 145.72015479282123 -54.60000000000006 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 36.35496392081603 145.99540992142965 -55.01421356237316 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 36.35496392081603 145.99540992142965 -55.01421356237316 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 36.14785713962947 146.35412938903679 -55.33205080756894 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 36.14785713962947 146.35412938903679 -55.33205080756894 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 35.906676184732014 146.77186705673722 -55.531851652578204 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.906676184732014 146.77186705673722 -55.531851652578204 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 35.64785713962948 147.22015479282123 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.64785713962948 147.22015479282123 -55.600000000000065 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 23.24785713962949 168.69758480667534 -55.600000000000065 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 36.51388254341391 145.72015479282123 -54.60000000000006 + vertex 36.613782965918546 145.54712218534561 -54.117638090205105 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 36.613782965918546 145.54712218534561 -54.117638090205105 + vertex 36.64785713962948 145.48810398525237 -53.60000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 36.64785713962948 145.48810398525237 -53.60000000000006 + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.5968952453061 138.64816934519487 -41.30000000000007 + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.64785713962948 145.48810398525237 -51.60000000000005 + vertex 36.61378296591853 145.54712218534561 -51.082361909795004 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.61378296591853 145.54712218534561 -51.082361909795004 + vertex 36.51388254341391 145.72015479282123 -50.600000000000044 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.51388254341391 145.72015479282123 -50.600000000000044 + vertex 36.35496392081603 145.99540992142965 -50.18578643762695 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.35496392081603 145.99540992142965 -50.18578643762695 + vertex 36.14785713962947 146.35412938903679 -49.867949192431176 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 36.14785713962947 146.35412938903679 -49.867949192431176 + vertex 35.906676184732014 146.77186705673722 -49.668148347421905 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 35.906676184732014 146.77186705673722 -49.668148347421905 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.35851731140927 139.06105203810748 -41.921320343559714 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 40.04785713962944 139.5991312395182 -42.398076211353384 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 40.04785713962944 139.5991312395182 -42.398076211353384 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 39.68608570728321 140.2257377410688 -42.697777478867266 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 39.68608570728321 140.2257377410688 -42.697777478867266 + vertex 35.64785713962948 147.22015479282123 -49.600000000000044 + vertex 39.29785713962943 140.89816934519484 -42.80000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 40.79785713962944 138.30009313384156 -39.80000000000006 + vertex 40.79785713962942 138.30009313384153 -25.800000000000065 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 40.79785713962942 138.30009313384153 -25.800000000000065 + vertex 40.74674587906303 138.3886204339814 -25.0235428646925 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 40.74674587906303 138.3886204339814 -25.0235428646925 + vertex 40.59689524530608 138.64816934519484 -24.300000000000068 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 40.59689524530608 138.64816934519484 -24.300000000000068 + vertex 40.35851731140925 139.06105203810745 -23.678679656440423 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 40.35851731140925 139.06105203810745 -23.678679656440423 + vertex 40.04785713962944 139.59913123951816 -23.20192378864675 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 40.04785713962944 139.59913123951816 -23.20192378864675 + vertex 39.68608570728323 140.2257377410688 -22.902222521132856 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 39.68608570728323 140.2257377410688 -22.902222521132856 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 36.35496392081605 145.99540992142965 -15.414213562373153 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 36.35496392081605 145.99540992142965 -15.414213562373153 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 36.14785713962948 146.3541293890368 -15.732050807568937 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 36.14785713962948 146.3541293890368 -15.732050807568937 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 35.906676184732014 146.77186705673722 -15.931851652578198 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.906676184732014 146.77186705673722 -15.931851652578198 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 35.647857139629494 147.22015479282126 -16.00000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 35.647857139629494 147.22015479282126 -16.00000000000006 + vertex 39.29785713962943 140.89816934519484 -22.800000000000065 + vertex 23.24785713962949 168.69758480667534 -16.00000000000006 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.35496392081605 145.99540992142965 -15.414213562373153 + vertex 36.513882543413914 145.72015479282126 -15.000000000000057 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.513882543413914 145.72015479282126 -15.000000000000057 + vertex 36.61378296591855 145.54712218534564 -14.517638090205098 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.61378296591855 145.54712218534564 -14.517638090205098 + vertex 36.647857139629494 145.4881039852524 -14.000000000000059 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.647857139629494 145.4881039852524 -14.000000000000059 + vertex 36.647857139629494 145.4881039852524 -12.000000000000046 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.647857139629494 145.4881039852524 -12.000000000000046 + vertex 36.613782965918546 145.54712218534564 -11.482361909795012 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.613782965918546 145.54712218534564 -11.482361909795012 + vertex 36.513882543413914 145.72015479282126 -11.000000000000048 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.513882543413914 145.72015479282126 -11.000000000000048 + vertex 36.35496392081605 145.99540992142965 -10.58578643762696 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.35496392081605 145.99540992142965 -10.58578643762696 + vertex 36.14785713962948 146.3541293890368 -10.267949192431178 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 36.14785713962948 146.3541293890368 -10.267949192431178 + vertex 35.906676184732014 146.77186705673722 -10.068148347421912 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 35.906676184732014 146.77186705673722 -10.068148347421912 + vertex 35.647857139629494 147.22015479282126 -10.00000000000005 + endloop +endfacet +facet normal 0.8660254037844393 0.49999999999999883 -9.792648627520377e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 35.647857139629494 147.22015479282126 -10.00000000000005 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + endloop +endfacet +facet normal -1.7761928181661448e-15 -1.0 1.892594954730134e-16 + outer loop + vertex -41.8783177822545 132.23791530735053 -3.000000000000062 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + endloop +endfacet +facet normal -1.7761928181661448e-15 -1.0 1.892594954730134e-16 + outer loop + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + vertex -41.8783177822545 132.23791530735053 -3.000000000000062 + vertex -41.8783177822545 132.2379153073505 -62.600000000000065 + endloop +endfacet +facet normal -0.1211494213554586 -0.9926342819514333 1.878833171115841e-16 + outer loop + vertex -42.436689296971025 132.30606365477237 -3.000000000000062 + vertex -41.8783177822545 132.2379153073505 -62.600000000000065 + vertex -41.8783177822545 132.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal -0.1211494213554586 -0.9926342819514333 1.878833171115841e-16 + outer loop + vertex -41.8783177822545 132.2379153073505 -62.600000000000065 + vertex -42.436689296971025 132.30606365477237 -3.000000000000062 + vertex -42.436689296971025 132.30606365477237 -62.600000000000065 + endloop +endfacet +facet normal -0.9555126440105993 -0.2949501434749163 4.897386689705105e-17 + outer loop + vertex -43.173106986658425 132.82370174497743 -3.000000000000062 + vertex -43.30096751306486 133.2379153073505 -62.600000000000065 + vertex -43.173106986658425 132.82370174497743 -62.600000000000065 + endloop +endfacet +facet normal -0.9555126440105993 -0.2949501434749163 4.897386689705105e-17 + outer loop + vertex -43.30096751306486 133.2379153073505 -62.600000000000065 + vertex -43.173106986658425 132.82370174497743 -3.000000000000062 + vertex -43.30096751306486 133.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal -0.41219617871317576 -0.9110951159205364 1.7252155348074176e-16 + outer loop + vertex -42.87831778225449 132.50586449978164 -3.000000000000062 + vertex -42.436689296971025 132.30606365477237 -62.600000000000065 + vertex -42.436689296971025 132.30606365477237 -3.000000000000062 + endloop +endfacet +facet normal -0.41219617871317576 -0.9110951159205364 1.7252155348074176e-16 + outer loop + vertex -42.436689296971025 132.30606365477237 -62.600000000000065 + vertex -42.87831778225449 132.50586449978164 -3.000000000000062 + vertex -42.87831778225449 132.50586449978164 -62.600000000000065 + endloop +endfacet +facet normal 0.12114942135545749 -0.9926342819514336 1.878442236207161e-16 + outer loop + vertex 41.98845606287095 132.23791530735048 -3.0000000000000284 + vertex 42.546827577587486 132.30606365477232 -62.60000000000003 + vertex 42.546827577587486 132.30606365477232 -3.0000000000000284 + endloop +endfacet +facet normal 0.12114942135545749 -0.9926342819514336 1.878442236207161e-16 + outer loop + vertex 42.546827577587486 132.30606365477232 -62.60000000000003 + vertex 41.98845606287095 132.23791530735048 -3.0000000000000284 + vertex 41.98845606287095 132.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 0.9202212155149997 0.39139866442809484 -7.411378289433389e-17 + outer loop + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 43.3633241585152 133.72027721714542 -62.60000000000003 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 0.9202212155149997 0.39139866442809484 -7.411378289433389e-17 + outer loop + vertex 43.3633241585152 133.72027721714542 -62.60000000000003 + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 43.3633241585152 133.72027721714542 -3.0000000000000284 + endloop +endfacet +facet normal 0.9555126440105912 -0.29495014347494236 5.601884531566134e-17 + outer loop + vertex 43.41110579368132 133.23791530735048 -3.0000000000000284 + vertex 43.28324526727487 132.82370174497737 -62.60000000000003 + vertex 43.41110579368132 133.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 0.9555126440105912 -0.29495014347494236 5.601884531566134e-17 + outer loop + vertex 43.28324526727487 132.82370174497737 -62.60000000000003 + vertex 43.41110579368132 133.23791530735048 -3.0000000000000284 + vertex 43.28324526727487 132.82370174497737 -3.0000000000000284 + endloop +endfacet +facet normal -0.9951296050076995 0.09857519585179557 -1.1646732101374746e-17 + outer loop + vertex -43.30096751306486 133.23791530735053 -3.000000000000062 + vertex -43.253185877898744 133.72027721714548 -62.600000000000065 + vertex -43.30096751306486 133.2379153073505 -62.600000000000065 + endloop +endfacet +facet normal -0.9951296050076995 0.09857519585179557 -1.1646732101374746e-17 + outer loop + vertex -43.253185877898744 133.72027721714548 -62.600000000000065 + vertex -43.30096751306486 133.23791530735053 -3.000000000000062 + vertex -43.253185877898744 133.72027721714548 -3.000000000000062 + endloop +endfacet +facet normal 0.9951296050076998 0.09857519585179428 -1.8665829314470085e-17 + outer loop + vertex 43.3633241585152 133.72027721714542 -3.0000000000000284 + vertex 43.41110579368132 133.23791530735045 -62.60000000000003 + vertex 43.3633241585152 133.72027721714542 -62.60000000000003 + endloop +endfacet +facet normal 0.9951296050076998 0.09857519585179428 -1.8665829314470085e-17 + outer loop + vertex 43.41110579368132 133.23791530735045 -62.60000000000003 + vertex 43.3633241585152 133.72027721714542 -3.0000000000000284 + vertex 43.41110579368132 133.23791530735048 -3.0000000000000284 + endloop +endfacet +facet normal 0.733190639104467 -0.680023151612931 1.2888213579542975e-16 + outer loop + vertex 43.28324526727487 132.82370174497737 -3.0000000000000284 + vertex 42.98845606287095 132.50586449978158 -62.60000000000003 + vertex 43.28324526727487 132.82370174497737 -62.60000000000003 + endloop +endfacet +facet normal 0.733190639104467 -0.680023151612931 1.2888213579542975e-16 + outer loop + vertex 42.98845606287095 132.50586449978158 -62.60000000000003 + vertex 43.28324526727487 132.82370174497737 -3.0000000000000284 + vertex 42.98845606287095 132.50586449978158 -3.0000000000000284 + endloop +endfacet +facet normal 0.41219617871317477 -0.9110951159205368 1.725215534807417e-16 + outer loop + vertex 42.546827577587486 132.30606365477232 -3.0000000000000284 + vertex 42.98845606287095 132.50586449978158 -62.60000000000003 + vertex 42.98845606287095 132.50586449978158 -3.0000000000000284 + endloop +endfacet +facet normal 0.41219617871317477 -0.9110951159205368 1.725215534807417e-16 + outer loop + vertex 42.98845606287095 132.50586449978158 -62.60000000000003 + vertex 42.546827577587486 132.30606365477232 -3.0000000000000284 + vertex 42.546827577587486 132.30606365477232 -62.60000000000003 + endloop +endfacet +facet normal -0.7331906391044548 -0.6800231516129441 1.2865950612637326e-16 + outer loop + vertex -42.87831778225449 132.50586449978164 -3.000000000000062 + vertex -43.173106986658425 132.82370174497743 -62.600000000000065 + vertex -42.87831778225449 132.50586449978164 -62.600000000000065 + endloop +endfacet +facet normal -0.7331906391044548 -0.6800231516129441 1.2865950612637326e-16 + outer loop + vertex -43.173106986658425 132.82370174497743 -62.600000000000065 + vertex -42.87831778225449 132.50586449978164 -3.000000000000062 + vertex -43.173106986658425 132.82370174497743 -3.000000000000062 + endloop +endfacet +facet normal -0.9202212155149919 0.39139866442811333 -3.711855016837844e-17 + outer loop + vertex -43.253185877898744 133.72027721714548 -3.000000000000062 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -43.253185877898744 133.72027721714548 -62.600000000000065 + endloop +endfacet +facet normal -0.9202212155149919 0.39139866442811333 -3.711855016837844e-17 + outer loop + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -43.253185877898744 133.72027721714548 -3.000000000000062 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 8.305069140308264 197.22612362681 -62.600000000000065 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 8.305069140308264 191.96896450555053 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 10.305069140308255 184.37612362681 -62.600000000000065 + vertex 12.80506914030825 186.78502419417032 -62.60000000000008 + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 12.80506914030825 186.78502419417032 -62.60000000000008 + vertex 10.305069140308255 184.37612362681 -62.600000000000065 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 12.80506914030825 186.78502419417032 -62.60000000000008 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 10.30506914030826 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 10.30506914030826 197.22612362681 -62.600000000000065 + vertex 10.30506914030826 191.96896450555053 -62.600000000000065 + vertex 8.305069140308264 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + vertex 10.30506914030826 197.22612362681 -62.600000000000065 + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 41.98845606287095 132.23791530735045 -62.60000000000003 + vertex 39.679054986112455 132.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 41.98845606287095 132.23791530735045 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 42.546827577587486 132.30606365477232 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 42.546827577587486 132.30606365477232 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 42.98845606287095 132.50586449978158 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 42.98845606287095 132.50586449978158 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 43.28324526727487 132.82370174497737 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 43.28324526727487 132.82370174497737 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 43.41110579368132 133.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 43.41110579368132 133.23791530735045 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 43.3633241585152 133.72027721714542 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 43.3633241585152 133.72027721714542 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 43.143156601250205 134.23791530735045 -62.60000000000003 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 24.768613200629805 157.93973105977085 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 24.768613200629805 157.93973105977085 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 24.95247246551566 157.25355894177457 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 24.95247246551566 157.25355894177457 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 25.01438595718246 156.54588449377644 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 25.01438595718246 156.54588449377644 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 24.95247246551566 155.8382100457783 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 24.95247246551566 155.8382100457783 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 24.768613200629805 155.15203792778206 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 24.768613200629805 155.15203792778206 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 24.46839463325119 154.50821713237312 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 24.46839463325119 154.50821713237312 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 24.060938752631678 153.92630982863102 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 24.060938752631678 153.92630982863102 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 23.55862589952126 153.4239969755206 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 23.55862589952126 153.4239969755206 -62.60000000000005 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 23.06122021535224 153.05393896729822 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 23.06122021535224 153.05393896729822 -62.600000000000065 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 22.373300682659444 152.73315682100917 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 22.373300682659444 152.73315682100917 -62.600000000000065 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 22.332897800370226 152.71632252752246 -62.600000000000044 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 22.332897800370226 152.71632252752246 -62.600000000000044 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 21.640128958283878 152.5367040495494 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 21.640128958283878 152.5367040495494 -62.600000000000065 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex 20.939051234375828 152.47054977096982 -62.600000000000044 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 20.939051234375828 152.47054977096982 -62.600000000000044 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 23.06122021535224 153.05393896729822 -62.600000000000065 + vertex 22.373300682659444 152.73315682100917 -62.600000000000065 + vertex 22.976718595779143 153.01654109490107 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 24.768613200629805 157.93973105977085 -62.60000000000005 + vertex 24.468394633251194 158.58355185517976 -62.60000000000005 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 24.468394633251194 158.58355185517976 -62.60000000000005 + vertex 11.770977400728352 180.57612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 11.770977400728352 180.57612362681 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -13.88771885901298 184.7190547766875 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -13.88771885901298 184.7190547766875 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -29.842081742052876 190.4662088668218 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -13.88771885901298 184.7190547766875 -62.600000000000065 + vertex -29.842081742052876 190.4662088668218 -62.600000000000065 + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -29.842081742052876 190.4662088668218 -62.600000000000065 + vertex -32.44493085969176 191.9689645055506 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -32.44493085969176 191.9689645055506 -62.600000000000065 + vertex -31.55147180223168 193.3101090711995 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -28.21522640798993 192.79613663226192 -62.600000000000065 + vertex -31.55147180223168 193.3101090711995 -62.600000000000065 + vertex -27.290873495142403 193.95965933221274 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -27.290873495142403 193.95965933221274 -62.600000000000065 + vertex -31.55147180223168 193.3101090711995 -62.600000000000065 + vertex -30.60270404808994 194.61271322520327 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -27.290873495142403 193.95965933221274 -62.600000000000065 + vertex -30.60270404808994 194.61271322520327 -62.600000000000065 + vertex -26.318667561951766 195.08350496407658 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -26.318667561951766 195.08350496407658 -62.600000000000065 + vertex -30.60270404808994 194.61271322520327 -62.600000000000065 + vertex -29.600287858287494 195.87449752362713 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -26.318667561951766 195.08350496407658 -62.600000000000065 + vertex -29.600287858287494 195.87449752362713 -62.600000000000065 + vertex -25.300309884213064 196.16570689577932 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -25.300309884213064 196.16570689577932 -62.600000000000065 + vertex -29.600287858287494 195.87449752362713 -62.600000000000065 + vertex -28.545977373939976 197.09325395373202 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -25.300309884213064 196.16570689577932 -62.600000000000065 + vertex -28.545977373939976 197.09325395373202 -62.600000000000065 + vertex -24.237582499258796 197.20437136809886 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -24.237582499258796 197.20437136809886 -62.600000000000065 + vertex -28.545977373939976 197.09325395373202 -62.600000000000065 + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -24.237582499258796 197.20437136809886 -62.600000000000065 + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -23.132345087548707 198.19768080857895 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -23.132345087548707 198.19768080857895 -62.600000000000065 + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -21.986531718390673 199.14389701212295 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -21.986531718390673 199.14389701212295 -62.600000000000065 + vertex -27.44161754666337 198.2668497978047 -62.600000000000065 + vertex -26.28914091006915 199.39323136522827 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -21.986531718390673 199.14389701212295 -62.600000000000065 + vertex -26.28914091006915 199.39323136522827 -62.600000000000065 + vertex -20.80214746548775 200.04136418270141 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -20.80214746548775 200.04136418270141 -62.600000000000065 + vertex -26.28914091006915 199.39323136522827 -62.600000000000065 + vertex -25.09056419799865 200.470427586262 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -20.80214746548775 200.04136418270141 -62.600000000000065 + vertex -25.09056419799865 200.470427586262 -62.600000000000065 + vertex -19.58126489823363 200.8885118308511 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -19.58126489823363 200.8885118308511 -62.600000000000065 + vertex -25.09056419799865 200.470427586262 -62.600000000000065 + vertex -23.847984815414293 201.49655346124194 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -19.58126489823363 200.8885118308511 -62.600000000000065 + vertex -23.847984815414293 201.49655346124194 -62.600000000000065 + vertex -18.326020454896568 201.68385752189488 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -18.326020454896568 201.68385752189488 -62.600000000000065 + vertex -23.847984815414293 201.49655346124194 -62.600000000000065 + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -18.326020454896568 201.68385752189488 -62.600000000000065 + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + vertex -17.038610704038266 202.42600947007358 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -17.038610704038266 202.42600947007358 -62.600000000000065 + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + vertex -15.721288500709916 203.11366897404972 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -15.721288500709916 203.11366897404972 -62.600000000000065 + vertex -22.563577168123395 202.46981335916627 -62.600000000000065 + vertex -21.23958885775712 203.38850415989336 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -15.721288500709916 203.11366897404972 -62.600000000000065 + vertex -21.23958885775712 203.38850415989336 -62.600000000000065 + vertex -14.376359044152096 203.74563268952207 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -14.376359044152096 203.74563268952207 -62.600000000000065 + vertex -21.23958885775712 203.38850415989336 -62.600000000000065 + vertex -19.87833674866336 204.2510182344538 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -14.376359044152096 203.74563268952207 -62.600000000000065 + vertex -19.87833674866336 204.2510182344538 -62.600000000000065 + vertex -13.00617584389643 204.32079473497333 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -13.00617584389643 204.32079473497333 -62.600000000000065 + vertex -19.87833674866336 204.2510182344538 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -13.00617584389643 204.32079473497333 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex -10.194930859691718 204.87612362681003 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691718 204.87612362681003 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex 17.163768745909092 205.80157985229917 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 17.163768745909092 205.80157985229917 -62.600000000000065 + vertex -18.48220291359554 205.05584625826125 -62.600000000000065 + vertex -17.053630465292567 205.80157985229923 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 17.163768745909092 205.80157985229917 -62.600000000000065 + vertex -17.053630465292567 205.80157985229923 -62.600000000000065 + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + vertex -17.053630465292567 205.80157985229923 -62.600000000000065 + vertex -15.595119281244203 206.48691404766154 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + vertex -15.595119281244203 206.48691404766154 -62.600000000000065 + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.705257561860751 206.48691404766154 -62.600000000000065 + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + vertex 14.219359909739431 207.1106495691348 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 14.219359909739431 207.1106495691348 -62.600000000000065 + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + vertex 12.708675981153974 207.67169493382528 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 12.708675981153974 207.67169493382528 -62.600000000000065 + vertex -14.10922162912293 207.1106495691348 -62.600000000000065 + vertex -12.598537700537447 207.67169493382528 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 12.708675981153974 207.67169493382528 -62.600000000000065 + vertex -12.598537700537447 207.67169493382528 -62.600000000000065 + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + vertex -12.598537700537447 207.67169493382528 -62.600000000000065 + vertex -11.065711060923867 208.16906836115925 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + vertex -11.065711060923867 208.16906836115925 -62.600000000000065 + vertex -9.513424023535883 208.60189949091352 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 11.17584934154037 208.16906836115925 -62.600000000000065 + vertex -9.513424023535883 208.60189949091352 -62.600000000000065 + vertex 9.623562304152413 208.60189949091347 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 9.623562304152413 208.60189949091347 -62.600000000000065 + vertex -9.513424023535883 208.60189949091352 -62.600000000000065 + vertex -7.944392955630252 208.96943090627002 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 9.623562304152413 208.60189949091347 -62.600000000000065 + vertex -7.944392955630252 208.96943090627002 -62.600000000000065 + vertex 8.05453123624676 208.96943090626996 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 8.05453123624676 208.96943090626996 -62.600000000000065 + vertex -7.944392955630252 208.96943090627002 -62.600000000000065 + vertex -6.361363525060216 209.27101945922942 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 8.05453123624676 208.96943090626996 -62.600000000000065 + vertex -6.361363525060216 209.27101945922942 -62.600000000000065 + vertex 6.471501805676724 209.27101945922942 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 6.471501805676724 209.27101945922942 -62.600000000000065 + vertex -6.361363525060216 209.27101945922942 -62.600000000000065 + vertex -4.767105895595756 209.50613739606416 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 6.471501805676724 209.27101945922942 -62.600000000000065 + vertex -4.767105895595756 209.50613739606416 -62.600000000000065 + vertex 4.877244176212259 209.50613739606416 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 4.877244176212259 209.50613739606416 -62.600000000000065 + vertex -4.767105895595756 209.50613739606416 -62.600000000000065 + vertex -3.1644098793779976 209.67437328084148 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 4.877244176212259 209.50613739606416 -62.600000000000065 + vertex -3.1644098793779976 209.67437328084148 -62.600000000000065 + vertex 3.274548159994501 209.67437328084154 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 3.274548159994501 209.67437328084154 -62.600000000000065 + vertex -3.1644098793779976 209.67437328084148 -62.600000000000065 + vertex -1.5560800549907094 209.77543271540065 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 3.274548159994501 209.67437328084154 -62.600000000000065 + vertex -1.5560800549907094 209.77543271540065 -62.600000000000065 + vertex 1.6662183356072127 209.77543271540065 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 1.6662183356072127 209.77543271540065 -62.600000000000065 + vertex -1.5560800549907094 209.77543271540065 -62.600000000000065 + vertex 0.05506914030825163 209.809138854524 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 29.952220022669408 190.46620886682177 -62.60000000000008 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex 10.305069140308255 184.37612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 10.305069140308255 184.37612362681 -62.600000000000065 + vertex 15.497857139629502 182.12097856533416 -62.600000000000065 + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 29.952220022669408 190.46620886682177 -62.60000000000008 + vertex 13.997857139629506 184.71905477668744 -62.60000000000008 + vertex 28.325364688606378 192.79613663226192 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 29.952220022669408 190.46620886682177 -62.60000000000008 + vertex 28.325364688606378 192.79613663226192 -62.600000000000065 + vertex 32.55506914030826 191.9689645055505 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 32.55506914030826 191.9689645055505 -62.600000000000065 + vertex 28.325364688606378 192.79613663226192 -62.600000000000065 + vertex 31.66161008284822 193.31010907119943 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 31.66161008284822 193.31010907119943 -62.600000000000065 + vertex 28.325364688606378 192.79613663226192 -62.600000000000065 + vertex 27.40101177575885 193.95965933221274 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 31.66161008284822 193.31010907119943 -62.600000000000065 + vertex 27.40101177575885 193.95965933221274 -62.600000000000065 + vertex 30.712842328706454 194.6127132252032 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 30.712842328706454 194.6127132252032 -62.600000000000065 + vertex 27.40101177575885 193.95965933221274 -62.600000000000065 + vertex 26.428805842568213 195.08350496407658 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 30.712842328706454 194.6127132252032 -62.600000000000065 + vertex 26.428805842568213 195.08350496407658 -62.600000000000065 + vertex 29.71042613890401 195.87449752362707 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 29.71042613890401 195.87449752362707 -62.600000000000065 + vertex 26.428805842568213 195.08350496407658 -62.600000000000065 + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 29.71042613890401 195.87449752362707 -62.600000000000065 + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + vertex 28.65611565455649 197.09325395373193 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 28.65611565455649 197.09325395373193 -62.600000000000065 + vertex 25.410448164829532 196.1657068957793 -62.600000000000065 + vertex 24.347720779875264 197.20437136809883 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 28.65611565455649 197.09325395373193 -62.600000000000065 + vertex 24.347720779875264 197.20437136809883 -62.600000000000065 + vertex 27.551755827279884 198.2668497978046 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 27.551755827279884 198.2668497978046 -62.600000000000065 + vertex 24.347720779875264 197.20437136809883 -62.600000000000065 + vertex 23.24248336816515 198.19768080857895 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 27.551755827279884 198.2668497978046 -62.600000000000065 + vertex 23.24248336816515 198.19768080857895 -62.600000000000065 + vertex 22.09666999900712 199.14389701212292 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 27.551755827279884 198.2668497978046 -62.600000000000065 + vertex 22.09666999900712 199.14389701212292 -62.600000000000065 + vertex 26.399279190685665 199.39323136522816 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 26.399279190685665 199.39323136522816 -62.600000000000065 + vertex 22.09666999900712 199.14389701212292 -62.600000000000065 + vertex 20.912285746104196 200.04136418270141 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 26.399279190685665 199.39323136522816 -62.600000000000065 + vertex 20.912285746104196 200.04136418270141 -62.600000000000065 + vertex 25.20070247861516 200.47042758626193 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 25.20070247861516 200.47042758626193 -62.600000000000065 + vertex 20.912285746104196 200.04136418270141 -62.600000000000065 + vertex 19.691403178850077 200.88851183085106 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 25.20070247861516 200.47042758626193 -62.600000000000065 + vertex 19.691403178850077 200.88851183085106 -62.600000000000065 + vertex 23.958123096030832 201.4965534612419 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 23.958123096030832 201.4965534612419 -62.600000000000065 + vertex 19.691403178850077 200.88851183085106 -62.600000000000065 + vertex 18.436158735513036 201.68385752189488 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 23.958123096030832 201.4965534612419 -62.600000000000065 + vertex 18.436158735513036 201.68385752189488 -62.600000000000065 + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + vertex 18.436158735513036 201.68385752189488 -62.600000000000065 + vertex 17.148748984654713 202.42600947007355 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + vertex 17.148748984654713 202.42600947007355 -62.600000000000065 + vertex 15.831426781326385 203.11366897404972 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 22.67371544873991 202.4698133591662 -62.600000000000065 + vertex 15.831426781326385 203.11366897404972 -62.600000000000065 + vertex 21.349727138373666 203.3885041598933 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 21.349727138373666 203.3885041598933 -62.600000000000065 + vertex 15.831426781326385 203.11366897404972 -62.600000000000065 + vertex 14.486497324768576 203.74563268952207 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 21.349727138373666 203.3885041598933 -62.600000000000065 + vertex 14.486497324768576 203.74563268952207 -62.600000000000065 + vertex 19.988475029279908 204.2510182344538 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 19.988475029279908 204.2510182344538 -62.600000000000065 + vertex 14.486497324768576 203.74563268952207 -62.600000000000065 + vertex 13.116314124512934 204.32079473497333 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 19.988475029279908 204.2510182344538 -62.600000000000065 + vertex 13.116314124512934 204.32079473497333 -62.600000000000065 + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + vertex 13.116314124512934 204.32079473497333 -62.600000000000065 + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 18.592341194212068 205.05584625826125 -62.600000000000065 + vertex 12.805069140308262 204.43638645629036 -62.60000000000009 + vertex 10.305069140308266 204.87612362680997 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex -12.694930859691725 186.78502419417032 -62.600000000000065 + vertex -10.194930859691729 191.96896450555056 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -12.694930859691725 186.78502419417032 -62.600000000000065 + vertex -10.194930859691729 184.37612362681 -62.600000000000065 + vertex -13.88771885901298 184.7190547766875 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691729 191.96896450555056 -62.600000000000065 + vertex -12.694930859691725 186.78502419417032 -62.600000000000065 + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691729 191.96896450555056 -62.600000000000065 + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691729 191.96896450555056 -62.600000000000065 + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + vertex -8.194930859691734 191.96896450555056 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + vertex -12.694930859691715 204.43638645629042 -62.600000000000065 + vertex -10.194930859691718 204.87612362681003 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -8.194930859691734 197.22612362681 -62.600000000000065 + vertex -8.194930859691734 191.96896450555056 -62.600000000000065 + vertex -10.194930859691729 197.22612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex 20.88398209406786 152.47054977096982 -62.600000000000065 + vertex 20.939051234375828 152.47054977096982 -62.600000000000044 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -41.8783177822545 132.2379153073505 -62.600000000000065 + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -39.568916705496 132.2379153073505 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -41.8783177822545 132.2379153073505 -62.600000000000065 + vertex -42.436689296971025 132.30606365477237 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -42.436689296971025 132.30606365477237 -62.600000000000065 + vertex -42.87831778225449 132.50586449978164 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -42.87831778225449 132.50586449978164 -62.600000000000065 + vertex -43.173106986658425 132.82370174497743 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -43.173106986658425 132.82370174497743 -62.600000000000065 + vertex -43.30096751306486 133.2379153073505 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -43.30096751306486 133.2379153073505 -62.600000000000065 + vertex -43.253185877898744 133.72027721714548 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -43.253185877898744 133.72027721714548 -62.600000000000065 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -43.03301832063373 134.23791530735053 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -24.658474920013315 157.93973105977085 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -24.658474920013315 157.93973105977085 -62.600000000000065 + vertex -24.84233418489917 157.2535589417746 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -24.84233418489917 157.2535589417746 -62.600000000000065 + vertex -24.90424767656597 156.54588449377647 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -24.90424767656597 156.54588449377647 -62.600000000000065 + vertex -24.84233418489917 155.83821004577834 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -24.84233418489917 155.83821004577834 -62.600000000000065 + vertex -24.658474920013315 155.15203792778206 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -24.658474920013315 155.15203792778206 -62.600000000000065 + vertex -24.358256352634704 154.50821713237315 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -24.358256352634704 154.50821713237315 -62.600000000000065 + vertex -23.95080047201519 153.92630982863105 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -23.95080047201519 153.92630982863105 -62.600000000000065 + vertex -23.448487618904775 153.42399697552065 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -23.448487618904775 153.42399697552065 -62.600000000000065 + vertex -22.866580315162654 153.01654109490113 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -22.866580315162654 153.01654109490113 -62.600000000000065 + vertex -22.22275951975374 152.7163225275225 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -22.22275951975374 152.7163225275225 -62.600000000000065 + vertex -21.53658740175749 152.53246326263664 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -21.53658740175749 152.53246326263664 -62.600000000000065 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -30.37020590902545 148.17054977096984 -62.600000000000065 + vertex -20.828912953759342 152.47054977096985 -62.600000000000065 + vertex 30.48034418964194 148.1705497709698 -62.600000000000044 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -24.658474920013315 157.93973105977085 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -24.358256352634704 158.5835518551798 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -24.358256352634704 158.5835518551798 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex -11.660839120111838 180.57612362681 -62.600000000000065 + endloop +endfacet +facet normal 1.8248340924346468e-16 -1.983130373426281e-16 -1.0 + outer loop + vertex -11.660839120111838 180.57612362681 -62.600000000000065 + vertex -15.387718859012988 182.12097856533416 -62.600000000000065 + vertex 11.770977400728352 180.57612362681 -62.600000000000065 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -8.194930859691734 197.22612362681 -3.000000000000062 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -8.194930859691734 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -10.194930859691729 184.37612362681003 -3.000000000000062 + vertex -12.694930859691725 186.78502419417035 -3.000000000000062 + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691725 186.78502419417035 -3.000000000000062 + vertex -10.194930859691729 184.37612362681003 -3.000000000000062 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691725 186.78502419417035 -3.000000000000062 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -10.194930859691729 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -10.194930859691729 197.22612362681 -3.000000000000062 + vertex -10.194930859691729 191.96896450555056 -3.000000000000062 + vertex -8.194930859691734 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + vertex -10.194930859691729 197.22612362681 -3.000000000000062 + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -41.8783177822545 132.23791530735053 -3.000000000000062 + vertex -39.568916705496 132.2379153073505 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -41.8783177822545 132.23791530735053 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -42.436689296971025 132.30606365477237 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -42.436689296971025 132.30606365477237 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -42.87831778225449 132.50586449978164 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -42.87831778225449 132.50586449978164 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -43.173106986658425 132.82370174497743 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.173106986658425 132.82370174497743 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -43.30096751306486 133.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.30096751306486 133.23791530735053 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -43.253185877898744 133.72027721714548 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.253185877898744 133.72027721714548 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -43.03301832063373 134.23791530735053 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -24.658474920013315 157.93973105977088 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.658474920013315 157.93973105977088 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -24.84233418489917 157.2535589417746 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.84233418489917 157.2535589417746 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -24.90424767656597 156.5458844937765 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.90424767656597 156.5458844937765 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -24.84233418489917 155.83821004577834 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.84233418489917 155.83821004577834 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -24.658474920013315 155.1520379277821 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.658474920013315 155.1520379277821 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -24.358256352634704 154.50821713237318 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -24.358256352634704 154.50821713237318 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -23.95080047201519 153.92630982863105 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.95080047201519 153.92630982863105 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -23.448487618904775 153.42399697552065 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.448487618904775 153.42399697552065 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -22.866580315162654 153.01654109490113 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.866580315162654 153.01654109490113 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -22.22275951975374 152.71632252752252 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.22275951975374 152.71632252752252 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -21.53658740175749 152.53246326263667 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -21.53658740175749 152.53246326263667 -3.000000000000062 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -24.658474920013315 157.93973105977088 -3.000000000000062 + vertex -24.358256352634704 158.5835518551798 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -24.358256352634704 158.5835518551798 -3.000000000000062 + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 13.997857139629506 184.71905477668747 -3.0000000000000733 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.997857139629506 184.71905477668747 -3.0000000000000733 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 29.952220022669408 190.46620886682177 -3.0000000000000733 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.997857139629506 184.71905477668747 -3.0000000000000733 + vertex 29.952220022669408 190.46620886682177 -3.0000000000000733 + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 29.952220022669408 190.46620886682177 -3.0000000000000733 + vertex 32.55506914030826 191.9689645055505 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 32.55506914030826 191.9689645055505 -3.000000000000062 + vertex 31.66161008284822 193.31010907119946 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 28.325364688606378 192.79613663226192 -3.000000000000062 + vertex 31.66161008284822 193.31010907119946 -3.000000000000062 + vertex 27.40101177575885 193.95965933221277 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 27.40101177575885 193.95965933221277 -3.000000000000062 + vertex 31.66161008284822 193.31010907119946 -3.000000000000062 + vertex 30.712842328706454 194.61271322520324 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 27.40101177575885 193.95965933221277 -3.000000000000062 + vertex 30.712842328706454 194.61271322520324 -3.000000000000062 + vertex 26.428805842568213 195.08350496407658 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 26.428805842568213 195.08350496407658 -3.000000000000062 + vertex 30.712842328706454 194.61271322520324 -3.000000000000062 + vertex 29.71042613890401 195.87449752362707 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 26.428805842568213 195.08350496407658 -3.000000000000062 + vertex 29.71042613890401 195.87449752362707 -3.000000000000062 + vertex 25.410448164829532 196.1657068957793 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 25.410448164829532 196.1657068957793 -3.000000000000062 + vertex 29.71042613890401 195.87449752362707 -3.000000000000062 + vertex 28.65611565455649 197.09325395373196 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 25.410448164829532 196.1657068957793 -3.000000000000062 + vertex 28.65611565455649 197.09325395373196 -3.000000000000062 + vertex 24.347720779875264 197.20437136809886 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.347720779875264 197.20437136809886 -3.000000000000062 + vertex 28.65611565455649 197.09325395373196 -3.000000000000062 + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.347720779875264 197.20437136809886 -3.000000000000062 + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 23.24248336816515 198.19768080857895 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 23.24248336816515 198.19768080857895 -3.000000000000062 + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 22.09666999900712 199.14389701212295 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 22.09666999900712 199.14389701212295 -3.000000000000062 + vertex 27.551755827279884 198.26684979780464 -3.000000000000062 + vertex 26.399279190685665 199.3932313652282 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 22.09666999900712 199.14389701212295 -3.000000000000062 + vertex 26.399279190685665 199.3932313652282 -3.000000000000062 + vertex 20.912285746104196 200.04136418270141 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 20.912285746104196 200.04136418270141 -3.000000000000062 + vertex 26.399279190685665 199.3932313652282 -3.000000000000062 + vertex 25.20070247861516 200.47042758626193 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 20.912285746104196 200.04136418270141 -3.000000000000062 + vertex 25.20070247861516 200.47042758626193 -3.000000000000062 + vertex 19.691403178850077 200.8885118308511 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 19.691403178850077 200.8885118308511 -3.000000000000062 + vertex 25.20070247861516 200.47042758626193 -3.000000000000062 + vertex 23.958123096030832 201.4965534612419 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 19.691403178850077 200.8885118308511 -3.000000000000062 + vertex 23.958123096030832 201.4965534612419 -3.000000000000062 + vertex 18.436158735513036 201.68385752189488 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 18.436158735513036 201.68385752189488 -3.000000000000062 + vertex 23.958123096030832 201.4965534612419 -3.000000000000062 + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 18.436158735513036 201.68385752189488 -3.000000000000062 + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + vertex 17.148748984654713 202.42600947007358 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 17.148748984654713 202.42600947007358 -3.000000000000062 + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + vertex 15.831426781326385 203.11366897404974 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 15.831426781326385 203.11366897404974 -3.000000000000062 + vertex 22.67371544873991 202.4698133591662 -3.000000000000062 + vertex 21.349727138373666 203.38850415989336 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 15.831426781326385 203.11366897404974 -3.000000000000062 + vertex 21.349727138373666 203.38850415989336 -3.000000000000062 + vertex 14.486497324768576 203.74563268952207 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 14.486497324768576 203.74563268952207 -3.000000000000062 + vertex 21.349727138373666 203.38850415989336 -3.000000000000062 + vertex 19.988475029279908 204.2510182344538 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 14.486497324768576 203.74563268952207 -3.000000000000062 + vertex 19.988475029279908 204.2510182344538 -3.000000000000062 + vertex 13.116314124512934 204.32079473497333 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.116314124512934 204.32079473497333 -3.000000000000062 + vertex 19.988475029279908 204.2510182344538 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 13.116314124512934 204.32079473497333 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + vertex 10.305069140308266 204.87612362680997 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.305069140308266 204.87612362680997 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -29.842081742052876 190.46620886682183 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex -10.194930859691729 184.37612362681003 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -10.194930859691729 184.37612362681003 -3.000000000000062 + vertex -15.387718859012988 182.12097856533418 -3.000000000000062 + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.842081742052876 190.46620886682183 -3.000000000000062 + vertex -13.88771885901298 184.7190547766875 -3.000000000000062 + vertex -28.21522640798993 192.79613663226195 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.842081742052876 190.46620886682183 -3.000000000000062 + vertex -28.21522640798993 192.79613663226195 -3.000000000000062 + vertex -32.44493085969176 191.9689645055506 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -32.44493085969176 191.9689645055506 -3.000000000000062 + vertex -28.21522640798993 192.79613663226195 -3.000000000000062 + vertex -31.55147180223168 193.31010907119952 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -31.55147180223168 193.31010907119952 -3.000000000000062 + vertex -28.21522640798993 192.79613663226195 -3.000000000000062 + vertex -27.290873495142403 193.95965933221277 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -31.55147180223168 193.31010907119952 -3.000000000000062 + vertex -27.290873495142403 193.95965933221277 -3.000000000000062 + vertex -30.60270404808994 194.6127132252033 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.60270404808994 194.6127132252033 -3.000000000000062 + vertex -27.290873495142403 193.95965933221277 -3.000000000000062 + vertex -26.318667561951766 195.08350496407658 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.60270404808994 194.6127132252033 -3.000000000000062 + vertex -26.318667561951766 195.08350496407658 -3.000000000000062 + vertex -29.600287858287494 195.87449752362716 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.600287858287494 195.87449752362716 -3.000000000000062 + vertex -26.318667561951766 195.08350496407658 -3.000000000000062 + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -29.600287858287494 195.87449752362716 -3.000000000000062 + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + vertex -28.545977373939976 197.09325395373202 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -28.545977373939976 197.09325395373202 -3.000000000000062 + vertex -25.300309884213064 196.16570689577935 -3.000000000000062 + vertex -24.237582499258796 197.2043713680989 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -28.545977373939976 197.09325395373202 -3.000000000000062 + vertex -24.237582499258796 197.2043713680989 -3.000000000000062 + vertex -27.44161754666337 198.26684979780472 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -27.44161754666337 198.26684979780472 -3.000000000000062 + vertex -24.237582499258796 197.2043713680989 -3.000000000000062 + vertex -23.132345087548707 198.19768080857898 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -27.44161754666337 198.26684979780472 -3.000000000000062 + vertex -23.132345087548707 198.19768080857898 -3.000000000000062 + vertex -21.986531718390673 199.14389701212298 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -27.44161754666337 198.26684979780472 -3.000000000000062 + vertex -21.986531718390673 199.14389701212298 -3.000000000000062 + vertex -26.28914091006915 199.39323136522827 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -26.28914091006915 199.39323136522827 -3.000000000000062 + vertex -21.986531718390673 199.14389701212298 -3.000000000000062 + vertex -20.80214746548775 200.04136418270141 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -26.28914091006915 199.39323136522827 -3.000000000000062 + vertex -20.80214746548775 200.04136418270141 -3.000000000000062 + vertex -25.09056419799865 200.470427586262 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -25.09056419799865 200.470427586262 -3.000000000000062 + vertex -20.80214746548775 200.04136418270141 -3.000000000000062 + vertex -19.58126489823363 200.8885118308511 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -25.09056419799865 200.470427586262 -3.000000000000062 + vertex -19.58126489823363 200.8885118308511 -3.000000000000062 + vertex -23.847984815414293 201.49655346124194 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.847984815414293 201.49655346124194 -3.000000000000062 + vertex -19.58126489823363 200.8885118308511 -3.000000000000062 + vertex -18.326020454896568 201.68385752189488 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -23.847984815414293 201.49655346124194 -3.000000000000062 + vertex -18.326020454896568 201.68385752189488 -3.000000000000062 + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + vertex -18.326020454896568 201.68385752189488 -3.000000000000062 + vertex -17.038610704038266 202.4260094700736 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + vertex -17.038610704038266 202.4260094700736 -3.000000000000062 + vertex -15.721288500709916 203.11366897404974 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -22.563577168123395 202.4698133591663 -3.000000000000062 + vertex -15.721288500709916 203.11366897404974 -3.000000000000062 + vertex -21.23958885775712 203.38850415989336 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -21.23958885775712 203.38850415989336 -3.000000000000062 + vertex -15.721288500709916 203.11366897404974 -3.000000000000062 + vertex -14.376359044152096 203.74563268952207 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -21.23958885775712 203.38850415989336 -3.000000000000062 + vertex -14.376359044152096 203.74563268952207 -3.000000000000062 + vertex -19.87833674866336 204.2510182344538 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -19.87833674866336 204.2510182344538 -3.000000000000062 + vertex -14.376359044152096 203.74563268952207 -3.000000000000062 + vertex -13.00617584389643 204.32079473497333 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -19.87833674866336 204.2510182344538 -3.000000000000062 + vertex -13.00617584389643 204.32079473497333 -3.000000000000062 + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex -13.00617584389643 204.32079473497333 -3.000000000000062 + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex -12.694930859691715 204.43638645629042 -3.000000000000062 + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex -10.194930859691718 204.87612362681003 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex 18.592341194212068 205.05584625826125 -3.000000000000062 + vertex 17.163768745909092 205.80157985229923 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -18.48220291359554 205.0558462582613 -3.000000000000062 + vertex 17.163768745909092 205.80157985229923 -3.000000000000062 + vertex -17.053630465292567 205.80157985229926 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -17.053630465292567 205.80157985229926 -3.000000000000062 + vertex 17.163768745909092 205.80157985229923 -3.000000000000062 + vertex 15.705257561860751 206.48691404766154 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -17.053630465292567 205.80157985229926 -3.000000000000062 + vertex 15.705257561860751 206.48691404766154 -3.000000000000062 + vertex -15.595119281244203 206.4869140476616 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.595119281244203 206.4869140476616 -3.000000000000062 + vertex 15.705257561860751 206.48691404766154 -3.000000000000062 + vertex 14.219359909739431 207.1106495691348 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -15.595119281244203 206.4869140476616 -3.000000000000062 + vertex 14.219359909739431 207.1106495691348 -3.000000000000062 + vertex -14.10922162912293 207.1106495691348 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -14.10922162912293 207.1106495691348 -3.000000000000062 + vertex 14.219359909739431 207.1106495691348 -3.000000000000062 + vertex 12.708675981153974 207.67169493382528 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -14.10922162912293 207.1106495691348 -3.000000000000062 + vertex 12.708675981153974 207.67169493382528 -3.000000000000062 + vertex -12.598537700537447 207.6716949338253 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.598537700537447 207.6716949338253 -3.000000000000062 + vertex 12.708675981153974 207.67169493382528 -3.000000000000062 + vertex 11.17584934154037 208.16906836115925 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -12.598537700537447 207.6716949338253 -3.000000000000062 + vertex 11.17584934154037 208.16906836115925 -3.000000000000062 + vertex -11.065711060923867 208.16906836115928 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -11.065711060923867 208.16906836115928 -3.000000000000062 + vertex 11.17584934154037 208.16906836115925 -3.000000000000062 + vertex 9.623562304152413 208.60189949091352 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -11.065711060923867 208.16906836115928 -3.000000000000062 + vertex 9.623562304152413 208.60189949091352 -3.000000000000062 + vertex -9.513424023535883 208.60189949091352 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -9.513424023535883 208.60189949091352 -3.000000000000062 + vertex 9.623562304152413 208.60189949091352 -3.000000000000062 + vertex 8.05453123624676 208.96943090627002 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -9.513424023535883 208.60189949091352 -3.000000000000062 + vertex 8.05453123624676 208.96943090627002 -3.000000000000062 + vertex -7.944392955630252 208.96943090627002 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -7.944392955630252 208.96943090627002 -3.000000000000062 + vertex 8.05453123624676 208.96943090627002 -3.000000000000062 + vertex 6.471501805676724 209.27101945922942 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -7.944392955630252 208.96943090627002 -3.000000000000062 + vertex 6.471501805676724 209.27101945922942 -3.000000000000062 + vertex -6.361363525060216 209.27101945922942 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -6.361363525060216 209.27101945922942 -3.000000000000062 + vertex 6.471501805676724 209.27101945922942 -3.000000000000062 + vertex 4.877244176212259 209.50613739606416 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -6.361363525060216 209.27101945922942 -3.000000000000062 + vertex 4.877244176212259 209.50613739606416 -3.000000000000062 + vertex -4.767105895595756 209.50613739606416 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -4.767105895595756 209.50613739606416 -3.000000000000062 + vertex 4.877244176212259 209.50613739606416 -3.000000000000062 + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -4.767105895595756 209.50613739606416 -3.000000000000062 + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + vertex -3.1644098793779976 209.67437328084154 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -3.1644098793779976 209.67437328084154 -3.000000000000062 + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + vertex -1.5560800549907094 209.77543271540065 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -1.5560800549907094 209.77543271540065 -3.000000000000062 + vertex 3.274548159994501 209.67437328084154 -3.000000000000062 + vertex 1.6662183356072127 209.77543271540065 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -1.5560800549907094 209.77543271540065 -3.000000000000062 + vertex 1.6662183356072127 209.77543271540065 -3.000000000000062 + vertex 0.05506914030825163 209.80913885452406 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex 12.80506914030825 186.78502419417032 -3.0000000000000733 + vertex 10.30506914030826 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 12.80506914030825 186.78502419417032 -3.0000000000000733 + vertex 10.305069140308255 184.37612362681 -3.000000000000062 + vertex 13.997857139629506 184.71905477668747 -3.0000000000000733 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 191.96896450555056 -3.000000000000062 + vertex 12.80506914030825 186.78502419417032 -3.0000000000000733 + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 191.96896450555056 -3.000000000000062 + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 191.96896450555056 -3.000000000000062 + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + vertex 8.305069140308264 191.96896450555056 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + vertex 12.805069140308262 204.43638645629042 -3.000000000000085 + vertex 10.305069140308266 204.87612362680997 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 8.305069140308264 197.22612362681 -3.000000000000062 + vertex 8.305069140308264 191.96896450555056 -3.000000000000062 + vertex 10.30506914030826 197.22612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 42.546827577587486 132.30606365477232 -3.0000000000000284 + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 41.98845606287095 132.23791530735048 -3.0000000000000284 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 39.679054986112455 132.23791530735048 -3.0000000000000284 + vertex 42.546827577587486 132.30606365477232 -3.0000000000000284 + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 42.546827577587486 132.30606365477232 -3.0000000000000284 + vertex 42.98845606287095 132.50586449978158 -3.0000000000000284 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 42.98845606287095 132.50586449978158 -3.0000000000000284 + vertex 43.28324526727487 132.82370174497737 -3.0000000000000284 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 43.28324526727487 132.82370174497737 -3.0000000000000284 + vertex 43.41110579368132 133.23791530735048 -3.0000000000000284 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 43.41110579368132 133.23791530735048 -3.0000000000000284 + vertex 43.3633241585152 133.72027721714542 -3.0000000000000284 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 43.3633241585152 133.72027721714542 -3.0000000000000284 + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 43.143156601250205 134.23791530735045 -3.0000000000000284 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 24.768613200629805 157.93973105977085 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 24.768613200629805 157.93973105977085 -3.000000000000051 + vertex 24.95247246551566 157.2535589417746 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 24.95247246551566 157.2535589417746 -3.000000000000051 + vertex 25.01438595718246 156.54588449377644 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 25.01438595718246 156.54588449377644 -3.000000000000051 + vertex 24.95247246551566 155.8382100457783 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 24.95247246551566 155.8382100457783 -3.000000000000051 + vertex 24.768613200629805 155.15203792778206 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 24.768613200629805 155.15203792778206 -3.000000000000051 + vertex 24.46839463325119 154.50821713237312 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 24.46839463325119 154.50821713237312 -3.000000000000051 + vertex 24.060938752631678 153.92630982863102 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 24.060938752631678 153.92630982863102 -3.000000000000051 + vertex 23.55862589952126 153.42399697552062 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 23.55862589952126 153.42399697552062 -3.000000000000051 + vertex 23.06122021535224 153.05393896729822 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 23.06122021535224 153.05393896729822 -3.000000000000062 + vertex 22.373300682659444 152.73315682100917 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 22.373300682659444 152.73315682100917 -3.000000000000062 + vertex 22.332897800370226 152.71632252752246 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 22.332897800370226 152.71632252752246 -3.000000000000051 + vertex 21.640128958283878 152.5367040495494 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 21.640128958283878 152.5367040495494 -3.000000000000062 + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 30.48034418964194 148.1705497709698 -3.0000000000000395 + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex -30.37020590902545 148.17054977096987 -3.000000000000062 + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 22.373300682659444 152.73315682100917 -3.000000000000062 + vertex 23.06122021535224 153.05393896729822 -3.000000000000062 + vertex 22.976718595779143 153.01654109490107 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.768613200629805 157.93973105977085 -3.000000000000051 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 24.468394633251194 158.58355185517976 -3.000000000000051 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 24.468394633251194 158.58355185517976 -3.000000000000051 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex 11.770977400728352 180.57612362681 -3.0000000000000733 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 11.770977400728352 180.57612362681 -3.0000000000000733 + vertex 15.497857139629502 182.12097856533416 -3.0000000000000733 + vertex -11.660839120111838 180.57612362681 -3.000000000000062 + endloop +endfacet +facet normal -2.1770599857004374e-16 2.325189473563784e-16 1.0 + outer loop + vertex 20.88398209406786 152.47054977096985 -3.000000000000062 + vertex -20.828912953759342 152.47054977096985 -3.000000000000062 + vertex 20.939051234375828 152.47054977096982 -3.000000000000051 + endloop +endfacet +facet normal -0.9978589232386035 7.754921663350148e-16 -0.06540312923014449 + outer loop + vertex 11.952407476793969 148.1705497709698 -31.233685693359433 + vertex 12.055069140308246 152.47054977096985 -32.800000000000054 + vertex 12.055069140308246 148.1705497709698 -32.800000000000054 + endloop +endfacet +facet normal -0.9978589232386035 7.754921663350148e-16 -0.06540312923014449 + outer loop + vertex 12.055069140308246 152.47054977096985 -32.800000000000054 + vertex 11.952407476793969 148.1705497709698 -31.233685693359433 + vertex 11.952407476793969 152.47054977096985 -31.233685693359433 + endloop +endfacet +facet normal -0.9807852804032308 7.622232803619748e-16 -0.1950903220161271 + outer loop + vertex 11.646179055777065 148.1705497709698 -29.6941714587698 + vertex 11.952407476793969 152.47054977096985 -31.233685693359433 + vertex 11.952407476793969 148.1705497709698 -31.233685693359433 + endloop +endfacet +facet normal -0.9807852804032308 7.622232803619748e-16 -0.1950903220161271 + outer loop + vertex 11.952407476793969 152.47054977096985 -31.233685693359433 + vertex 11.646179055777065 148.1705497709698 -29.6941714587698 + vertex 11.646179055777065 152.47054977096985 -29.6941714587698 + endloop +endfacet +facet normal -0.9469301294951047 7.359125427337222e-16 -0.3214394653031649 + outer loop + vertex 11.141623530443681 148.1705497709698 -28.207798811618975 + vertex 11.646179055777065 152.47054977096985 -29.6941714587698 + vertex 11.646179055777065 148.1705497709698 -29.6941714587698 + endloop +endfacet +facet normal -0.9469301294951047 7.359125427337222e-16 -0.3214394653031649 + outer loop + vertex 11.646179055777065 152.47054977096985 -29.6941714587698 + vertex 11.141623530443681 148.1705497709698 -28.207798811618975 + vertex 11.141623530443681 152.47054977096985 -28.207798811618975 + endloop +endfacet +facet normal -0.8968727415326913 6.970101374657962e-16 -0.44228869021899536 + outer loop + vertex 10.447373985721516 148.1705497709698 -26.800000000000054 + vertex 11.141623530443681 152.47054977096985 -28.207798811618975 + vertex 11.141623530443681 148.1705497709698 -28.207798811618975 + endloop +endfacet +facet normal -0.8968727415326913 6.970101374657962e-16 -0.44228869021899536 + outer loop + vertex 11.141623530443681 152.47054977096985 -28.207798811618975 + vertex 10.447373985721516 148.1705497709698 -26.800000000000054 + vertex 10.447373985721516 152.47054977096985 -26.800000000000054 + endloop +endfacet +facet normal -0.8314696123025465 6.461816954981074e-16 -0.5555702330196005 + outer loop + vertex 9.575309223803076 148.1705497709698 -25.4948628518954 + vertex 10.447373985721516 152.47054977096985 -26.800000000000054 + vertex 10.447373985721516 148.1705497709698 -26.800000000000054 + endloop +endfacet +facet normal -0.8314696123025465 6.461816954981074e-16 -0.5555702330196005 + outer loop + vertex 10.447373985721516 152.47054977096985 -26.800000000000054 + vertex 9.575309223803076 148.1705497709698 -25.4948628518954 + vertex 9.575309223803076 152.47054977096985 -25.4948628518954 + endloop +endfacet +facet normal -0.7518398074789734 5.842969055650306e-16 -0.6593458151000736 + outer loop + vertex 8.540350514546814 148.1705497709698 -24.314718625761483 + vertex 9.575309223803076 152.47054977096985 -25.4948628518954 + vertex 9.575309223803076 148.1705497709698 -25.4948628518954 + endloop +endfacet +facet normal -0.7518398074789734 5.842969055650306e-16 -0.6593458151000736 + outer loop + vertex 9.575309223803076 152.47054977096985 -25.4948628518954 + vertex 8.540350514546814 148.1705497709698 -24.314718625761483 + vertex 8.540350514546814 152.47054977096985 -24.314718625761483 + endloop +endfacet +facet normal -0.6593458151000735 5.124146335800398e-16 -0.7518398074789733 + outer loop + vertex 7.360206288412901 152.47054977096985 -23.279759916505228 + vertex 8.540350514546814 148.1705497709698 -24.314718625761483 + vertex 7.360206288412901 148.1705497709698 -23.279759916505228 + endloop +endfacet +facet normal -0.6593458151000735 5.124146335800398e-16 -0.7518398074789733 + outer loop + vertex 8.540350514546814 148.1705497709698 -24.314718625761483 + vertex 7.360206288412901 152.47054977096985 -23.279759916505228 + vertex 8.540350514546814 152.47054977096985 -24.314718625761483 + endloop +endfacet +facet normal -0.5555702330195956 4.317648051463027e-16 -0.8314696123025496 + outer loop + vertex 6.0550691403082295 152.47054977096985 -22.40769515458679 + vertex 7.360206288412901 148.1705497709698 -23.279759916505228 + vertex 6.0550691403082295 148.1705497709698 -22.40769515458679 + endloop +endfacet +facet normal -0.5555702330195956 4.317648051463027e-16 -0.8314696123025496 + outer loop + vertex 7.360206288412901 148.1705497709698 -23.279759916505228 + vertex 6.0550691403082295 152.47054977096985 -22.40769515458679 + vertex 7.360206288412901 152.47054977096985 -23.279759916505228 + endloop +endfacet +facet normal -0.4422886902190014 3.437273611887068e-16 -0.8968727415326885 + outer loop + vertex 4.6472703286893084 152.47054977096985 -21.71344560986461 + vertex 6.0550691403082295 148.1705497709698 -22.40769515458679 + vertex 4.6472703286893084 148.1705497709698 -21.71344560986461 + endloop +endfacet +facet normal -0.4422886902190014 3.437273611887068e-16 -0.8968727415326885 + outer loop + vertex 6.0550691403082295 148.1705497709698 -22.40769515458679 + vertex 4.6472703286893084 152.47054977096985 -21.71344560986461 + vertex 6.0550691403082295 152.47054977096985 -22.40769515458679 + endloop +endfacet +facet normal -0.32143946530316403 2.4980864678194006e-16 -0.9469301294951049 + outer loop + vertex 3.160897681538491 152.47054977096985 -21.208890084531234 + vertex 4.6472703286893084 148.1705497709698 -21.71344560986461 + vertex 3.160897681538491 148.1705497709698 -21.208890084531234 + endloop +endfacet +facet normal -0.32143946530316403 2.4980864678194006e-16 -0.9469301294951049 + outer loop + vertex 4.6472703286893084 148.1705497709698 -21.71344560986461 + vertex 3.160897681538491 152.47054977096985 -21.208890084531234 + vertex 4.6472703286893084 152.47054977096985 -21.71344560986461 + endloop +endfacet +facet normal -0.1950903220161279 1.5161563716868863e-16 -0.9807852804032307 + outer loop + vertex 1.621383446948867 152.47054977096985 -20.90266166351433 + vertex 3.160897681538491 148.1705497709698 -21.208890084531234 + vertex 1.621383446948867 148.1705497709698 -20.90266166351433 + endloop +endfacet +facet normal -0.1950903220161279 1.5161563716868863e-16 -0.9807852804032307 + outer loop + vertex 3.160897681538491 148.1705497709698 -21.208890084531234 + vertex 1.621383446948867 152.47054977096985 -20.90266166351433 + vertex 3.160897681538491 152.47054977096985 -21.208890084531234 + endloop +endfacet +facet normal -0.0654031292301443 5.0828441967688317e-17 -0.9978589232386036 + outer loop + vertex 0.055069140308240346 152.47054977096985 -20.80000000000005 + vertex 1.621383446948867 148.1705497709698 -20.90266166351433 + vertex 0.055069140308240346 148.1705497709698 -20.80000000000005 + endloop +endfacet +facet normal -0.0654031292301443 5.0828441967688317e-17 -0.9978589232386036 + outer loop + vertex 1.621383446948867 148.1705497709698 -20.90266166351433 + vertex 0.055069140308240346 152.47054977096985 -20.80000000000005 + vertex 1.621383446948867 152.47054977096985 -20.90266166351433 + endloop +endfacet +facet normal 0.0654031292301443 -5.0828441967688767e-17 -0.9978589232386036 + outer loop + vertex -1.5112451663323863 152.47054977096985 -20.90266166351433 + vertex 0.055069140308240346 148.1705497709698 -20.80000000000005 + vertex -1.5112451663323863 148.17054977096984 -20.90266166351433 + endloop +endfacet +facet normal 0.0654031292301443 -5.0828441967688767e-17 -0.9978589232386036 + outer loop + vertex 0.055069140308240346 148.1705497709698 -20.80000000000005 + vertex -1.5112451663323863 152.47054977096985 -20.90266166351433 + vertex 0.055069140308240346 152.47054977096985 -20.80000000000005 + endloop +endfacet +facet normal 0.19509032201613138 -1.5161563716869181e-16 -0.98078528040323 + outer loop + vertex -3.0507594009220105 152.47054977096985 -21.208890084531237 + vertex -1.5112451663323863 148.17054977096984 -20.90266166351433 + vertex -3.0507594009220105 148.17054977096984 -21.208890084531237 + endloop +endfacet +facet normal 0.19509032201613138 -1.5161563716869181e-16 -0.98078528040323 + outer loop + vertex -1.5112451663323863 148.17054977096984 -20.90266166351433 + vertex -3.0507594009220105 152.47054977096985 -21.208890084531237 + vertex -1.5112451663323863 152.47054977096985 -20.90266166351433 + endloop +endfacet +facet normal 0.32143946530315637 -2.4980864678193454e-16 -0.9469301294951075 + outer loop + vertex -4.53713204807285 152.47054977096985 -21.71344560986461 + vertex -3.0507594009220105 148.17054977096984 -21.208890084531237 + vertex -4.53713204807285 148.17054977096984 -21.71344560986461 + endloop +endfacet +facet normal 0.32143946530315637 -2.4980864678193454e-16 -0.9469301294951075 + outer loop + vertex -3.0507594009220105 148.17054977096984 -21.208890084531237 + vertex -4.53713204807285 152.47054977096985 -21.71344560986461 + vertex -3.0507594009220105 152.47054977096985 -21.208890084531237 + endloop +endfacet +facet normal 0.44228869021900424 -3.437273611887094e-16 -0.8968727415326869 + outer loop + vertex -5.944930859691771 152.47054977096985 -22.407695154586794 + vertex -4.53713204807285 148.17054977096984 -21.71344560986461 + vertex -5.944930859691771 148.17054977096984 -22.407695154586794 + endloop +endfacet +facet normal 0.44228869021900424 -3.437273611887094e-16 -0.8968727415326869 + outer loop + vertex -4.53713204807285 148.17054977096984 -21.71344560986461 + vertex -5.944930859691771 152.47054977096985 -22.407695154586794 + vertex -4.53713204807285 152.47054977096985 -21.71344560986461 + endloop +endfacet +facet normal 0.5555702330196023 -4.317648051463082e-16 -0.8314696123025452 + outer loop + vertex -7.250068007796415 152.47054977096985 -23.279759916505235 + vertex -5.944930859691771 148.17054977096984 -22.407695154586794 + vertex -7.250068007796415 148.17054977096984 -23.279759916505235 + endloop +endfacet +facet normal 0.5555702330196023 -4.317648051463082e-16 -0.8314696123025452 + outer loop + vertex -5.944930859691771 148.17054977096984 -22.407695154586794 + vertex -7.250068007796415 152.47054977096985 -23.279759916505235 + vertex -5.944930859691771 152.47054977096985 -22.407695154586794 + endloop +endfacet +facet normal 0.6593458151000714 -5.124146335800385e-16 -0.7518398074789752 + outer loop + vertex -8.430212233930328 152.47054977096985 -24.314718625761483 + vertex -7.250068007796415 148.17054977096984 -23.279759916505235 + vertex -8.430212233930328 148.17054977096984 -24.314718625761483 + endloop +endfacet +facet normal 0.6593458151000714 -5.124146335800385e-16 -0.7518398074789752 + outer loop + vertex -7.250068007796415 148.17054977096984 -23.279759916505235 + vertex -8.430212233930328 152.47054977096985 -24.314718625761483 + vertex -7.250068007796415 152.47054977096985 -23.279759916505235 + endloop +endfacet +facet normal 0.7518398074789764 -5.842969055650333e-16 -0.65934581510007 + outer loop + vertex -8.430212233930328 152.47054977096985 -24.314718625761483 + vertex -9.46517094318659 148.17054977096984 -25.494862851895416 + vertex -9.46517094318659 152.47054977096985 -25.494862851895416 + endloop +endfacet +facet normal 0.7518398074789764 -5.842969055650333e-16 -0.65934581510007 + outer loop + vertex -9.46517094318659 148.17054977096984 -25.494862851895416 + vertex -8.430212233930328 152.47054977096985 -24.314718625761483 + vertex -8.430212233930328 148.17054977096984 -24.314718625761483 + endloop +endfacet +facet normal 0.8314696123025452 -6.461816954981068e-16 -0.5555702330196021 + outer loop + vertex -9.46517094318659 152.47054977096985 -25.494862851895416 + vertex -10.33723570510503 148.17054977096984 -26.800000000000058 + vertex -10.33723570510503 152.47054977096985 -26.800000000000058 + endloop +endfacet +facet normal 0.8314696123025452 -6.461816954981068e-16 -0.5555702330196021 + outer loop + vertex -10.33723570510503 148.17054977096984 -26.800000000000058 + vertex -9.46517094318659 152.47054977096985 -25.494862851895416 + vertex -9.46517094318659 148.17054977096984 -25.494862851895416 + endloop +endfacet +facet normal 0.8968727415326919 -6.97010137465797e-16 -0.4422886902189939 + outer loop + vertex -10.33723570510503 152.47054977096985 -26.800000000000058 + vertex -11.031485249827195 148.17054977096984 -28.207798811618986 + vertex -11.031485249827195 152.47054977096985 -28.207798811618986 + endloop +endfacet +facet normal 0.8968727415326919 -6.97010137465797e-16 -0.4422886902189939 + outer loop + vertex -11.031485249827195 148.17054977096984 -28.207798811618986 + vertex -10.33723570510503 152.47054977096985 -26.800000000000058 + vertex -10.33723570510503 148.17054977096984 -26.800000000000058 + endloop +endfacet +facet normal 0.9469301294951041 -7.359125427337218e-16 -0.321439465303166 + outer loop + vertex -11.031485249827195 152.47054977096985 -28.207798811618986 + vertex -11.53604077516058 148.17054977096984 -29.69417145876981 + vertex -11.53604077516058 152.47054977096985 -29.69417145876981 + endloop +endfacet +facet normal 0.9469301294951041 -7.359125427337218e-16 -0.321439465303166 + outer loop + vertex -11.53604077516058 148.17054977096984 -29.69417145876981 + vertex -11.031485249827195 152.47054977096985 -28.207798811618986 + vertex -11.031485249827195 148.17054977096984 -28.207798811618986 + endloop +endfacet +facet normal 0.9807852804032308 -7.622232803619749e-16 -0.1950903220161271 + outer loop + vertex -11.53604077516058 152.47054977096985 -29.69417145876981 + vertex -11.842269196177483 148.17054977096984 -31.233685693359437 + vertex -11.842269196177483 152.47054977096985 -31.233685693359437 + endloop +endfacet +facet normal 0.9807852804032308 -7.622232803619749e-16 -0.1950903220161271 + outer loop + vertex -11.842269196177483 148.17054977096984 -31.233685693359437 + vertex -11.53604077516058 152.47054977096985 -29.69417145876981 + vertex -11.53604077516058 148.17054977096984 -29.69417145876981 + endloop +endfacet +facet normal 0.9978589232386034 -7.754921663350147e-16 -0.06540312923014473 + outer loop + vertex -11.842269196177483 152.47054977096985 -31.233685693359437 + vertex -11.94493085969176 148.17054977096984 -32.800000000000054 + vertex -11.94493085969176 152.47054977096985 -32.800000000000054 + endloop +endfacet +facet normal 0.9978589232386034 -7.754921663350147e-16 -0.06540312923014473 + outer loop + vertex -11.94493085969176 148.17054977096984 -32.800000000000054 + vertex -11.842269196177483 152.47054977096985 -31.233685693359437 + vertex -11.842269196177483 148.17054977096984 -31.233685693359437 + endloop +endfacet +facet normal 0.9978589232386035 -7.754921663350148e-16 0.06540312923014402 + outer loop + vertex -11.94493085969176 152.47054977096985 -32.800000000000054 + vertex -11.842269196177483 148.17054977096984 -34.36631430664068 + vertex -11.842269196177483 152.47054977096985 -34.36631430664068 + endloop +endfacet +facet normal 0.9978589232386035 -7.754921663350148e-16 0.06540312923014402 + outer loop + vertex -11.842269196177483 148.17054977096984 -34.36631430664068 + vertex -11.94493085969176 152.47054977096985 -32.800000000000054 + vertex -11.94493085969176 148.17054977096984 -32.800000000000054 + endloop +endfacet +facet normal 0.9807852804032307 -7.622232803619747e-16 0.19509032201612778 + outer loop + vertex -11.842269196177483 152.47054977096985 -34.36631430664068 + vertex -11.53604077516058 148.17054977096984 -35.905828541230306 + vertex -11.53604077516058 152.47054977096985 -35.905828541230306 + endloop +endfacet +facet normal 0.9807852804032307 -7.622232803619747e-16 0.19509032201612778 + outer loop + vertex -11.53604077516058 148.17054977096984 -35.905828541230306 + vertex -11.842269196177483 152.47054977096985 -34.36631430664068 + vertex -11.842269196177483 148.17054977096984 -34.36631430664068 + endloop +endfacet +facet normal 0.9469301294951047 -7.359125427337222e-16 0.3214394653031649 + outer loop + vertex -11.53604077516058 152.47054977096985 -35.905828541230306 + vertex -11.031485249827195 148.17054977096984 -37.392201188381144 + vertex -11.031485249827195 152.47054977096985 -37.392201188381144 + endloop +endfacet +facet normal 0.9469301294951047 -7.359125427337222e-16 0.3214394653031649 + outer loop + vertex -11.031485249827195 148.17054977096984 -37.392201188381144 + vertex -11.53604077516058 152.47054977096985 -35.905828541230306 + vertex -11.53604077516058 148.17054977096984 -35.905828541230306 + endloop +endfacet +facet normal 0.8968727415326913 -6.970101374657962e-16 0.44228869021899536 + outer loop + vertex -11.031485249827195 152.47054977096985 -37.392201188381144 + vertex -10.33723570510503 148.17054977096984 -38.80000000000006 + vertex -10.33723570510503 152.47054977096985 -38.80000000000006 + endloop +endfacet +facet normal 0.8968727415326913 -6.970101374657962e-16 0.44228869021899536 + outer loop + vertex -10.33723570510503 148.17054977096984 -38.80000000000006 + vertex -11.031485249827195 152.47054977096985 -37.392201188381144 + vertex -11.031485249827195 148.17054977096984 -37.392201188381144 + endloop +endfacet +facet normal 0.8314696123025387 -6.461816954981013e-16 0.5555702330196121 + outer loop + vertex -10.33723570510503 152.47054977096985 -38.80000000000006 + vertex -9.465170943186568 148.17054977096984 -40.10513714810471 + vertex -9.465170943186568 152.47054977096985 -40.10513714810471 + endloop +endfacet +facet normal 0.8314696123025387 -6.461816954981013e-16 0.5555702330196121 + outer loop + vertex -9.465170943186568 148.17054977096984 -40.10513714810471 + vertex -10.33723570510503 152.47054977096985 -38.80000000000006 + vertex -10.33723570510503 148.17054977096984 -38.80000000000006 + endloop +endfacet +facet normal 0.751839807478982 -5.842969055650374e-16 0.6593458151000637 + outer loop + vertex -9.465170943186568 152.47054977096985 -40.10513714810471 + vertex -8.430212233930328 148.17054977096984 -41.285281374238636 + vertex -8.430212233930328 152.47054977096985 -41.285281374238636 + endloop +endfacet +facet normal 0.751839807478982 -5.842969055650374e-16 0.6593458151000637 + outer loop + vertex -8.430212233930328 148.17054977096984 -41.285281374238636 + vertex -9.465170943186568 152.47054977096985 -40.10513714810471 + vertex -9.465170943186568 148.17054977096984 -40.10513714810471 + endloop +endfacet +facet normal 0.6593458151000714 -5.124146335800382e-16 0.7518398074789752 + outer loop + vertex -7.250068007796415 152.47054977096985 -42.32024008349488 + vertex -8.430212233930328 148.17054977096984 -41.285281374238636 + vertex -7.250068007796415 148.17054977096984 -42.32024008349488 + endloop +endfacet +facet normal 0.6593458151000714 -5.124146335800382e-16 0.7518398074789752 + outer loop + vertex -8.430212233930328 148.17054977096984 -41.285281374238636 + vertex -7.250068007796415 152.47054977096985 -42.32024008349488 + vertex -8.430212233930328 152.47054977096985 -41.285281374238636 + endloop +endfacet +facet normal 0.5555702330195956 -4.317648051463027e-16 0.8314696123025496 + outer loop + vertex -5.944930859691748 152.47054977096985 -43.192304845413325 + vertex -7.250068007796415 148.17054977096984 -42.32024008349488 + vertex -5.944930859691748 148.17054977096984 -43.192304845413325 + endloop +endfacet +facet normal 0.5555702330195956 -4.317648051463027e-16 0.8314696123025496 + outer loop + vertex -7.250068007796415 148.17054977096984 -42.32024008349488 + vertex -5.944930859691748 152.47054977096985 -43.192304845413325 + vertex -7.250068007796415 152.47054977096985 -42.32024008349488 + endloop +endfacet +facet normal 0.4422886902190014 -3.437273611887068e-16 0.8968727415326885 + outer loop + vertex -4.537132048072828 152.47054977096985 -43.8865543901355 + vertex -5.944930859691748 148.17054977096984 -43.192304845413325 + vertex -4.537132048072828 148.17054977096984 -43.8865543901355 + endloop +endfacet +facet normal 0.4422886902190014 -3.437273611887068e-16 0.8968727415326885 + outer loop + vertex -5.944930859691748 148.17054977096984 -43.192304845413325 + vertex -4.537132048072828 152.47054977096985 -43.8865543901355 + vertex -5.944930859691748 152.47054977096985 -43.192304845413325 + endloop +endfacet +facet normal 0.32143946530316403 -2.4980864678194006e-16 0.9469301294951049 + outer loop + vertex -3.0507594009220105 152.47054977096985 -44.391109915468874 + vertex -4.537132048072828 148.17054977096984 -43.8865543901355 + vertex -3.0507594009220105 148.17054977096984 -44.391109915468874 + endloop +endfacet +facet normal 0.32143946530316403 -2.4980864678194006e-16 0.9469301294951049 + outer loop + vertex -4.537132048072828 148.17054977096984 -43.8865543901355 + vertex -3.0507594009220105 152.47054977096985 -44.391109915468874 + vertex -4.537132048072828 152.47054977096985 -43.8865543901355 + endloop +endfacet +facet normal 0.1950903220161279 -1.5161563716868863e-16 0.9807852804032307 + outer loop + vertex -1.5112451663323863 152.47054977096985 -44.69733833648578 + vertex -3.0507594009220105 148.17054977096984 -44.391109915468874 + vertex -1.5112451663323863 148.17054977096984 -44.69733833648578 + endloop +endfacet +facet normal 0.1950903220161279 -1.5161563716868863e-16 0.9807852804032307 + outer loop + vertex -3.0507594009220105 148.17054977096984 -44.391109915468874 + vertex -1.5112451663323863 152.47054977096985 -44.69733833648578 + vertex -3.0507594009220105 152.47054977096985 -44.391109915468874 + endloop +endfacet +facet normal 0.0654031292301443 -5.0828441967688317e-17 0.9978589232386036 + outer loop + vertex 0.055069140308240346 152.47054977096985 -44.800000000000054 + vertex -1.5112451663323863 148.17054977096984 -44.69733833648578 + vertex 0.055069140308240346 148.1705497709698 -44.800000000000054 + endloop +endfacet +facet normal 0.0654031292301443 -5.0828441967688317e-17 0.9978589232386036 + outer loop + vertex -1.5112451663323863 148.17054977096984 -44.69733833648578 + vertex 0.055069140308240346 152.47054977096985 -44.800000000000054 + vertex -1.5112451663323863 152.47054977096985 -44.69733833648578 + endloop +endfacet +facet normal -0.0654031292301443 5.0828441967688767e-17 0.9978589232386036 + outer loop + vertex 1.621383446948867 152.47054977096985 -44.69733833648578 + vertex 0.055069140308240346 148.1705497709698 -44.800000000000054 + vertex 1.621383446948867 148.1705497709698 -44.69733833648578 + endloop +endfacet +facet normal -0.0654031292301443 5.0828441967688767e-17 0.9978589232386036 + outer loop + vertex 0.055069140308240346 148.1705497709698 -44.800000000000054 + vertex 1.621383446948867 152.47054977096985 -44.69733833648578 + vertex 0.055069140308240346 152.47054977096985 -44.800000000000054 + endloop +endfacet +facet normal -0.1950903220161279 1.516156371686891e-16 0.9807852804032307 + outer loop + vertex 3.160897681538491 152.47054977096985 -44.391109915468874 + vertex 1.621383446948867 148.1705497709698 -44.69733833648578 + vertex 3.160897681538491 148.1705497709698 -44.391109915468874 + endloop +endfacet +facet normal -0.1950903220161279 1.516156371686891e-16 0.9807852804032307 + outer loop + vertex 1.621383446948867 148.1705497709698 -44.69733833648578 + vertex 3.160897681538491 152.47054977096985 -44.391109915468874 + vertex 1.621383446948867 152.47054977096985 -44.69733833648578 + endloop +endfacet +facet normal -0.32143946530316403 2.498086467819405e-16 0.9469301294951049 + outer loop + vertex 4.6472703286893084 152.47054977096985 -43.8865543901355 + vertex 3.160897681538491 148.1705497709698 -44.391109915468874 + vertex 4.6472703286893084 148.1705497709698 -43.8865543901355 + endloop +endfacet +facet normal -0.32143946530316403 2.498086467819405e-16 0.9469301294951049 + outer loop + vertex 3.160897681538491 148.1705497709698 -44.391109915468874 + vertex 4.6472703286893084 152.47054977096985 -43.8865543901355 + vertex 3.160897681538491 152.47054977096985 -44.391109915468874 + endloop +endfacet +facet normal -0.4422886902189971 3.4372736118870383e-16 0.8968727415326905 + outer loop + vertex 6.055069140308252 152.47054977096985 -43.19230484541332 + vertex 4.6472703286893084 148.1705497709698 -43.8865543901355 + vertex 6.055069140308252 148.1705497709698 -43.19230484541332 + endloop +endfacet +facet normal -0.4422886902189971 3.4372736118870383e-16 0.8968727415326905 + outer loop + vertex 4.6472703286893084 148.1705497709698 -43.8865543901355 + vertex 6.055069140308252 152.47054977096985 -43.19230484541332 + vertex 4.6472703286893084 152.47054977096985 -43.8865543901355 + endloop +endfacet +facet normal -0.5555702330196036 4.3176480514630925e-16 0.8314696123025446 + outer loop + vertex 7.360206288412901 152.47054977096985 -42.32024008349487 + vertex 6.055069140308252 148.1705497709698 -43.19230484541332 + vertex 7.360206288412901 148.1705497709698 -42.32024008349487 + endloop +endfacet +facet normal -0.5555702330196036 4.3176480514630925e-16 0.8314696123025446 + outer loop + vertex 6.055069140308252 148.1705497709698 -43.19230484541332 + vertex 7.360206288412901 152.47054977096985 -42.32024008349487 + vertex 6.055069140308252 152.47054977096985 -43.19230484541332 + endloop +endfacet +facet normal -0.6593458151000714 5.124146335800385e-16 0.7518398074789752 + outer loop + vertex 8.540350514546814 152.47054977096985 -41.28528137423862 + vertex 7.360206288412901 148.1705497709698 -42.32024008349487 + vertex 8.540350514546814 148.1705497709698 -41.28528137423862 + endloop +endfacet +facet normal -0.6593458151000714 5.124146335800385e-16 0.7518398074789752 + outer loop + vertex 7.360206288412901 148.1705497709698 -42.32024008349487 + vertex 8.540350514546814 152.47054977096985 -41.28528137423862 + vertex 7.360206288412901 152.47054977096985 -42.32024008349487 + endloop +endfacet +facet normal -0.7518398074789749 5.842969055650321e-16 0.6593458151000718 + outer loop + vertex 9.575309223803076 148.1705497709698 -40.105137148104696 + vertex 8.540350514546814 152.47054977096985 -41.28528137423862 + vertex 8.540350514546814 148.1705497709698 -41.28528137423862 + endloop +endfacet +facet normal -0.7518398074789749 5.842969055650321e-16 0.6593458151000718 + outer loop + vertex 8.540350514546814 152.47054977096985 -41.28528137423862 + vertex 9.575309223803076 148.1705497709698 -40.105137148104696 + vertex 9.575309223803076 152.47054977096985 -40.105137148104696 + endloop +endfacet +facet normal -0.8314696123025458 6.461816954981072e-16 0.5555702330196013 + outer loop + vertex 10.447373985721516 148.1705497709698 -38.800000000000054 + vertex 9.575309223803076 152.47054977096985 -40.105137148104696 + vertex 9.575309223803076 148.1705497709698 -40.105137148104696 + endloop +endfacet +facet normal -0.8314696123025458 6.461816954981072e-16 0.5555702330196013 + outer loop + vertex 9.575309223803076 152.47054977096985 -40.105137148104696 + vertex 10.447373985721516 148.1705497709698 -38.800000000000054 + vertex 10.447373985721516 152.47054977096985 -38.800000000000054 + endloop +endfacet +facet normal -0.8968727415326917 6.970101374657969e-16 0.4422886902189947 + outer loop + vertex 11.141623530443681 148.1705497709698 -37.39220118838113 + vertex 10.447373985721516 152.47054977096985 -38.800000000000054 + vertex 10.447373985721516 148.1705497709698 -38.800000000000054 + endloop +endfacet +facet normal -0.8968727415326917 6.970101374657969e-16 0.4422886902189947 + outer loop + vertex 10.447373985721516 152.47054977096985 -38.800000000000054 + vertex 11.141623530443681 148.1705497709698 -37.39220118838113 + vertex 11.141623530443681 152.47054977096985 -37.39220118838113 + endloop +endfacet +facet normal -0.9469301294951047 7.359125427337223e-16 0.3214394653031649 + outer loop + vertex 11.646179055777065 148.1705497709698 -35.9058285412303 + vertex 11.141623530443681 152.47054977096985 -37.39220118838113 + vertex 11.141623530443681 148.1705497709698 -37.39220118838113 + endloop +endfacet +facet normal -0.9469301294951047 7.359125427337223e-16 0.3214394653031649 + outer loop + vertex 11.141623530443681 152.47054977096985 -37.39220118838113 + vertex 11.646179055777065 148.1705497709698 -35.9058285412303 + vertex 11.646179055777065 152.47054977096985 -35.9058285412303 + endloop +endfacet +facet normal -0.9807852804032308 7.622232803619749e-16 0.1950903220161271 + outer loop + vertex 11.952407476793969 148.1705497709698 -34.36631430664067 + vertex 11.646179055777065 152.47054977096985 -35.9058285412303 + vertex 11.646179055777065 148.1705497709698 -35.9058285412303 + endloop +endfacet +facet normal -0.9807852804032308 7.622232803619749e-16 0.1950903220161271 + outer loop + vertex 11.646179055777065 152.47054977096985 -35.9058285412303 + vertex 11.952407476793969 148.1705497709698 -34.36631430664067 + vertex 11.952407476793969 152.47054977096985 -34.36631430664067 + endloop +endfacet +facet normal -0.9978589232386034 7.754921663350147e-16 0.06540312923014473 + outer loop + vertex 12.055069140308246 148.1705497709698 -32.800000000000054 + vertex 11.952407476793969 152.47054977096985 -34.36631430664067 + vertex 11.952407476793969 148.1705497709698 -34.36631430664067 + endloop +endfacet +facet normal -0.9978589232386034 7.754921663350147e-16 0.06540312923014473 + outer loop + vertex 11.952407476793969 152.47054977096985 -34.36631430664067 + vertex 12.055069140308246 148.1705497709698 -32.800000000000054 + vertex 12.055069140308246 152.47054977096985 -32.800000000000054 + endloop +endfacet +endsolid Anycubic lineal plus cerramiento diff --git a/resources/profiles/Anycubic/AKLP_thumbnail.png b/resources/profiles/Anycubic/AKLP_thumbnail.png new file mode 100644 index 0000000000..92cac32b56 Binary files /dev/null and b/resources/profiles/Anycubic/AKLP_thumbnail.png differ diff --git a/resources/profiles/Anycubic/AK_Bed.stl b/resources/profiles/Anycubic/AK_Bed.stl new file mode 100644 index 0000000000..31daa1150e Binary files /dev/null and b/resources/profiles/Anycubic/AK_Bed.stl differ diff --git a/resources/profiles/Anycubic/AK_thumbnail.png b/resources/profiles/Anycubic/AK_thumbnail.png new file mode 100644 index 0000000000..7f995890eb Binary files /dev/null and b/resources/profiles/Anycubic/AK_thumbnail.png differ diff --git a/resources/profiles/Anycubic/I3MEGAS_thumbnail.png b/resources/profiles/Anycubic/I3MEGAS_thumbnail.png new file mode 100644 index 0000000000..d383d53725 Binary files /dev/null and b/resources/profiles/Anycubic/I3MEGAS_thumbnail.png differ diff --git a/resources/profiles/Anycubic/I3MEGA_thumbnail.png b/resources/profiles/Anycubic/I3MEGA_thumbnail.png new file mode 100644 index 0000000000..cfba1fcc5d Binary files /dev/null and b/resources/profiles/Anycubic/I3MEGA_thumbnail.png differ diff --git a/resources/profiles/Anycubic/MEGA0_thumbnail.png b/resources/profiles/Anycubic/MEGA0_thumbnail.png new file mode 100644 index 0000000000..cbf4482640 Binary files /dev/null and b/resources/profiles/Anycubic/MEGA0_thumbnail.png differ diff --git a/resources/profiles/Anycubic/mega0.svg b/resources/profiles/Anycubic/mega0.svg new file mode 100644 index 0000000000..09d018a443 --- /dev/null +++ b/resources/profiles/Anycubic/mega0.svg @@ -0,0 +1,32 @@ + + + + + + ender3_bed_texture + + + + + + + + + + + + + + + + + + + + + + + + + MEGA ZERO + \ No newline at end of file diff --git a/resources/profiles/Anycubic/mega0_bed.stl b/resources/profiles/Anycubic/mega0_bed.stl new file mode 100644 index 0000000000..fb8f86d094 Binary files /dev/null and b/resources/profiles/Anycubic/mega0_bed.stl differ diff --git a/resources/profiles/BIBO.idx b/resources/profiles/BIBO.idx index f8ad05323b..8b2c163909 100644 --- a/resources/profiles/BIBO.idx +++ b/resources/profiles/BIBO.idx @@ -1,4 +1,5 @@ min_slic3r_version = 2.2.0-alpha3 +0.0.2 General print quality improvements 0.0.1 Multiple Print models were unified into a single one. 0.0.1-beta2 Bed model and textures added. Materials all use the BOBO2 identifier. deretract speed set to 0 to use retract speed. 0.0.1-beta1 Added new printer profiles for ditto printing. New retraction settings, new materials. Removed some settings which do not apply. More start gcode improvements. diff --git a/resources/profiles/BIBO.ini b/resources/profiles/BIBO.ini index 4a10de3cbc..59a8bbc74e 100644 --- a/resources/profiles/BIBO.ini +++ b/resources/profiles/BIBO.ini @@ -5,9 +5,9 @@ name = BIBO # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 0.0.1 +config_version = 0.0.2 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/ +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/ # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. @@ -856,4 +856,4 @@ bed_shape = -33x-93,0x-93,0x93,-33x93 #bed_texture = BIBO2.svg before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nM104 S{temperature[0]} T0 ; set 1st nozzle heater to print temperature\n start_gcode = ;Start code PrusaSlicer BIBO 2 printers E2 only (i.e. T1)\nM420 S1 ; Turn on Ditto Printing\nG21 ; set units to metric\nG90 ; absolute positioning\nM107 ; start with the fan off\nM140 S{first_layer_bed_temperature[0] - 5} ; set bed temp\nM105 ; Report Temperatures\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp\nM104 S{first_layer_temperature[0]} T0 ; set 1st nozzle heater to ditto print temperature\nM104 S{first_layer_temperature[0]} T1 ; set 2nd nozzle heater to first layer temperature\nM105 ; Report Temperatures\nM109 S{first_layer_temperature[0]} T0 ; set 1st nozzle heater to ditto printing temperature\nM109 S{first_layer_temperature[0]} T1 ; Wait for 2nd nozzle heater to first layer temperature\nM105 ; Report Temperatures\nG28 X0 Y0 ; move X/Y to min endstops\nG28 Z0 ; move Z to min endstops\nG1 Z2 F400 ; move the print bed down 2mm\nT0 ; switch to tool position T0\nG90 ; absolute positioning\nG92 E0.0 ; zero the current extruder coordinate\nG28 ; Home all axis\nG1 Y0 F1200 E0 ; move Y to min endstop and reset extruder\nG92 E0.0 ; zero the current extruder coordinate\nT1 ; switch to tool position T1\nG92 E0.0 ; zero the current extruder coordinate\nM117 E2 nozzle wipe... ; Put Nozzle wipe message on screen, Attempt Nozzle Wipe (for ooze free startup)\nG1 X-15.0 Y-92.9 Z0.3 F2400.0 ; move to start-line position\nG1 X15.0 Y-92.9 Z0.3 F1000.0 E2 ; draw 1st line\nG1 X15.0 Y-92.6 Z0.3 F3000.0 ; move to side a little\nG1 X-15.0 Y-92.6 Z0.3 F1000.0 E4 ; draw 2nd line\nG1 X-15.0 Y-92.3 Z0.3 F3000.0 ; move to side a little\nG1 X15.0 Y-92.3 Z0.3 F1000.0 E6 ; draw 3rd line\nG1 X15.0 Y-92 Z0.3 F3000.0 ; move to side a little\nG1 X-15.0 Y-92 Z0.3 F1000.0 E8 ; draw 4th line\nG92 E0.0 ; reset extruder coordinate to zero before printing\nM117 BIBO Now Printing from E2... ; Put now printing message on screen -end_gcode = ;BIBO End GCode\nM107 ; turn fans off\nG91 ; Relative positioning\nG1 Z1 F100\nM140 S0 ; Disable heated bed\nM104 T0 S0 ; extruder T0 heater off\nM104 T1 S0 ; extruder T1 heater off\nG1 Z+0.5 X-20 Y-20 F300 ; move Z down then move print head a bit out of the way\nG28 X0 Y0 ; move X/Y to min endstops, so the head is out of the way\nG90 ; Absolute positioning\nG92 E0.0 ; Reset extruder position\nM84 ; Turn steppers off\nM420 S0 ; Turn off Ditto Printing function\nM117 BIBO Print complete ; Put print complete message on screen \ No newline at end of file +end_gcode = ;BIBO End GCode\nM107 ; turn fans off\nG91 ; Relative positioning\nG1 Z1 F100\nM140 S0 ; Disable heated bed\nM104 T0 S0 ; extruder T0 heater off\nM104 T1 S0 ; extruder T1 heater off\nG1 Z+0.5 X-20 Y-20 F300 ; move Z down then move print head a bit out of the way\nG28 X0 Y0 ; move X/Y to min endstops, so the head is out of the way\nG90 ; Absolute positioning\nG92 E0.0 ; Reset extruder position\nM84 ; Turn steppers off\nM420 S0 ; Turn off Ditto Printing function\nM117 BIBO Print complete ; Put print complete message on screen diff --git a/resources/profiles/Creality.idx b/resources/profiles/Creality.idx index 6db20df5be..a0e91e7c75 100644 --- a/resources/profiles/Creality.idx +++ b/resources/profiles/Creality.idx @@ -1,3 +1,5 @@ +min_slic3r_version = 2.3.0-alpha0 +0.0.3 Added Ender-2, Ender-3 BLTouch, updated Ender-3 bed texture. min_slic3r_version = 2.2.0-alpha3 0.0.2 Updated for PrusaSlicer 2.2.0-rc 0.0.2-beta Update for PrusaSlicer 2.2.0-beta diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index c8d8d9bfbe..a51e1369e8 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -5,10 +5,10 @@ name = Creality # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 0.0.2 +config_version = 0.0.3 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ -# changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ +# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. @@ -18,15 +18,28 @@ config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/Prusa name = Creality Ender-3 variants = 0.4 technology = FFF +family = ENDER bed_model = ender3_bed.stl bed_texture = ender3.svg -default_materials = Generic PLA @ENDER3; Generic PETG @ENDER3; Generic ABS @ENDER3; Prusament PLA @ENDER3; Prusament PETG @ENDER3 +default_materials = Creality PLA @ENDER3; Generic PLA @ENDER3; Generic PETG @ENDER3; Generic ABS @ENDER3; Prusament PLA @ENDER3; Prusament PETG @ENDER3 + +[printer_model:ENDER3BLTOUCH] +name = Creality Ender-3 BLTouch +variants = 0.4 +technology = FFF +family = ENDER +bed_model = ender3_bed.stl +bed_texture = ender3.svg +default_materials = Creality PLA @ENDER3; Generic PLA @ENDER3; Generic PETG @ENDER3; Generic ABS @ENDER3; Prusament PLA @ENDER3; Prusament PETG @ENDER3 [printer_model:ENDER2] name = Creality Ender-2 variants = 0.4 technology = FFF -default_materials = Generic PLA @ENDER3; Generic PETG @ENDER3; Generic ABS @ENDER3; Prusament PLA @ENDER3; Prusament PETG @ENDER3 +family = ENDER +bed_model = ender2_bed.stl +bed_texture = ender2.svg +default_materials = Creality PLA @ENDER3; Generic PLA @ENDER3; Generic PETG @ENDER3; Generic ABS @ENDER3; Prusament PLA @ENDER3; Prusament PETG @ENDER3 # All presets starting with asterisk, for example *common*, are intermediate and they will # not make it into the user interface. @@ -47,6 +60,7 @@ ensure_vertical_shell_thickness = 1 external_fill_pattern = rectilinear external_perimeters_first = 0 external_perimeter_extrusion_width = 0.45 +external_perimeter_speed = 25 extra_perimeters = 0 extruder_clearance_height = 25 extruder_clearance_radius = 45 @@ -65,6 +79,7 @@ infill_extrusion_width = 0.45 infill_first = 0 infill_only_where_needed = 0 infill_overlap = 25% +infill_speed = 50 interface_shells = 0 max_print_speed = 100 max_volumetric_extrusion_rate_slope_negative = 0 @@ -79,6 +94,7 @@ output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0 perimeters = 2 perimeter_extruder = 1 perimeter_extrusion_width = 0.45 +perimeter_speed = 40 post_process = print_settings_id = raft_layers = 0 @@ -93,11 +109,12 @@ solid_infill_below_area = 0 solid_infill_every_layers = 0 solid_infill_extruder = 1 solid_infill_extrusion_width = 0.45 +solid_infill_speed = 40 spiral_vase = 0 standby_temperature_delta = -5 support_material = 0 support_material_extruder = 0 -support_material_extrusion_width = 0.4 +support_material_extrusion_width = 0.38 support_material_interface_extruder = 0 support_material_angle = 0 support_material_buildplate_only = 0 @@ -115,9 +132,9 @@ support_material_threshold = 45 support_material_with_sheath = 0 support_material_xy_spacing = 60% thin_walls = 0 -top_infill_extrusion_width = 0.45 -top_solid_infill_speed = 40 -travel_speed = 100 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 30 +travel_speed = 150 wipe_tower = 0 wipe_tower_bridging = 10 wipe_tower_rotation_angle = 0 @@ -126,69 +143,63 @@ wipe_tower_x = 170 wipe_tower_y = 140 xy_size_compensation = 0 +[print:*0.10mm*] +inherits = *common* +layer_height = 0.1 +perimeters = 3 +bottom_solid_layers = 7 +top_solid_layers = 9 + [print:*0.12mm*] inherits = *common* -perimeter_speed = 40 -external_perimeter_speed = 25 -infill_speed = 50 -solid_infill_speed = 40 layer_height = 0.12 perimeters = 3 -top_infill_extrusion_width = 0.4 bottom_solid_layers = 6 top_solid_layers = 7 +[print:*0.15mm*] +inherits = *common* +layer_height = 0.15 +bottom_solid_layers = 5 +top_solid_layers = 7 + [print:*0.20mm*] inherits = *common* -perimeter_speed = 40 -external_perimeter_speed = 25 -infill_speed = 50 -solid_infill_speed = 40 layer_height = 0.20 -top_infill_extrusion_width = 0.4 bottom_solid_layers = 4 top_solid_layers = 5 [print:*0.24mm*] inherits = *common* -perimeter_speed = 40 -external_perimeter_speed = 25 -infill_speed = 50 -solid_infill_speed = 40 layer_height = 0.24 top_infill_extrusion_width = 0.45 bottom_solid_layers = 3 top_solid_layers = 4 +[print:0.10mm HIGHDETAIL @ENDER3] +inherits = *0.10mm* +# alias = 0.10mm HIGHDETAIL +compatible_printers_condition = printer_model=~/ENDER.*/ and nozzle_diameter[0]==0.4 + [print:0.12mm DETAIL @ENDER3] inherits = *0.12mm* # alias = 0.12mm DETAIL -travel_speed = 150 -infill_speed = 50 -solid_infill_speed = 40 -top_solid_infill_speed = 30 -support_material_extrusion_width = 0.38 -compatible_printers_condition = printer_model=="ENDER3" and nozzle_diameter[0]==0.4 +compatible_printers_condition = printer_model=~/ENDER.*/ and nozzle_diameter[0]==0.4 + +[print:0.15mm OPTIMAL @ENDER3] +inherits = *0.15mm* +# alias = 0.15mm OPTIMAL +compatible_printers_condition = printer_model=~/ENDER.*/ and nozzle_diameter[0]==0.4 [print:0.20mm NORMAL @ENDER3] inherits = *0.20mm* # alias = 0.20mm NORMAL -travel_speed = 150 -infill_speed = 50 -solid_infill_speed = 40 -top_solid_infill_speed = 30 -support_material_extrusion_width = 0.38 -compatible_printers_condition = printer_model=="ENDER3" and nozzle_diameter[0]==0.4 +compatible_printers_condition = printer_model=~/ENDER.*/ and nozzle_diameter[0]==0.4 [print:0.24mm DRAFT @ENDER3] inherits = *0.24mm* # alias = 0.24mm DRAFT -travel_speed = 150 -infill_speed = 50 -solid_infill_speed = 40 -top_solid_infill_speed = 30 -support_material_extrusion_width = 0.38 -compatible_printers_condition = printer_model=="ENDER3" and nozzle_diameter[0]==0.4 +compatible_printers_condition = printer_model=~/ENDER.*/ and nozzle_diameter[0]==0.4 # Common filament preset [filament:*common*] @@ -333,8 +344,7 @@ filament_density = 1.27 # Common printer preset [printer:*common*] printer_technology = FFF -bed_shape = 0x0,200x0,200x200,0x200 -before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n +before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n between_objects_gcode = deretract_speed = 0 extruder_colour = #FFFF00 @@ -381,8 +391,6 @@ retract_speed = 35 serial_port = serial_speed = 250000 single_extruder_multi_material = 0 -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG92 E0.0\nG1 Z0.15 F240\nG1 X60.0 E9.0 F800.0 ; intro line\nG1 X100.0 E12.5 F800 ; intro line\nG92 E0.0 -end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 F3000 ; home X axis\nM84 ; disable motors toolchange_gcode = use_firmware_retraction = 0 use_relative_e_distances = 1 @@ -394,13 +402,13 @@ printer_model = default_print_profile = default_filament_profile = -[printer:Creality ENDER-3] +[printer:Creality Ender-3] inherits = *common* printer_model = ENDER3 printer_variant = 0.4 max_layer_height = 0.25 min_layer_height = 0.1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3\nPRINTER_HAS_BOWDEN bed_shape = 0x0,220x0,220x220,0x220 max_print_height = 250 machine_max_acceleration_e = 5000 @@ -425,13 +433,23 @@ retract_length = 5 retract_speed = 60 deretract_speed = 40 retract_before_wipe = 70% -default_print_profile = 0.20mm NORMAL -default_filament_profile = Creality PLA -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E30 F1200.0 ; intro line\nG92 E0.0 +default_print_profile = 0.15mm OPTIMAL @ENDER3 +default_filament_profile = Creality PLA @ENDER3 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0 end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+10, max_print_height)} F600{endif} ; Move print head up\nG1 X0 Y200 F3000 ; present print\nM84 X Y E ; disable motors -[printer:Creality ENDER-2] -inherits = Creality ENDER-3 +[printer:*abl*] +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set extruder temp for auto bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set extruder temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0 + +[printer:Creality Ender-3 BLTouch] +inherits = Creality Ender-3; *abl* +printer_model = ENDER3BLTOUCH + +[printer:Creality Ender-2] +inherits = Creality Ender-3 bed_shape = 0x0,150x0,150x150,0x150 printer_model = ENDER2 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER2\nPRINTER_HAS_BOWDEN max_print_height = 200 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0.0\nG1 X15 Y135 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0 +end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+10, max_print_height)} F600{endif} ; Move print head up\nG1 X0 Y140 F3000 ; present print\nM84 X Y E ; disable motors diff --git a/resources/profiles/Creality/ENDER3BLTOUCH_thumbnail.png b/resources/profiles/Creality/ENDER3BLTOUCH_thumbnail.png new file mode 100644 index 0000000000..8b1ca5889a Binary files /dev/null and b/resources/profiles/Creality/ENDER3BLTOUCH_thumbnail.png differ diff --git a/resources/profiles/Creality/ender2.svg b/resources/profiles/Creality/ender2.svg new file mode 100644 index 0000000000..7a5e63cb26 --- /dev/null +++ b/resources/profiles/Creality/ender2.svg @@ -0,0 +1,560 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Creality/ender2_bed.stl b/resources/profiles/Creality/ender2_bed.stl new file mode 100644 index 0000000000..3cf022ed0b Binary files /dev/null and b/resources/profiles/Creality/ender2_bed.stl differ diff --git a/resources/profiles/Creality/ender3.svg b/resources/profiles/Creality/ender3.svg index 06910afdf8..9dac7a62e6 100644 --- a/resources/profiles/Creality/ender3.svg +++ b/resources/profiles/Creality/ender3.svg @@ -1,13 +1,5 @@ ender3_bed_texture - - - - - - - - diff --git a/resources/profiles/LulzBot.ini b/resources/profiles/LulzBot.ini index 53151d8195..fdd673d256 100644 --- a/resources/profiles/LulzBot.ini +++ b/resources/profiles/LulzBot.ini @@ -4,7 +4,7 @@ # Vendor name will be shown by the Config Wizard. name = LulzBot config_version = 0.0.1 -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ [printer_model:MINI_AERO] name = Mini Aero diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index cc22d50939..d279e7dda3 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -7,8 +7,8 @@ name = Prusa Research # This means, the server may force the PrusaSlicer configuration to be downgraded. config_version = 1.1.2 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ -changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ +changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. diff --git a/resources/profiles/TriLAB.idx b/resources/profiles/TriLAB.idx new file mode 100644 index 0000000000..a43bf4e004 --- /dev/null +++ b/resources/profiles/TriLAB.idx @@ -0,0 +1,2 @@ +min_slic3r_version = 2.3.0-alpha0 +0.0.1 Initial TriLAB bundle diff --git a/resources/profiles/TriLAB.ini b/resources/profiles/TriLAB.ini new file mode 100644 index 0000000000..2412cf1159 --- /dev/null +++ b/resources/profiles/TriLAB.ini @@ -0,0 +1,343 @@ +# DeltiQ presets for PrusaSlicer +# https://github.com/prusa3d/PrusaSlicer-settings/pull/100 +# based on https://github.com/trilab3d/Slicer-profiles/tree/deltiq/Slic3r_PE_1_41_3 + +[vendor] +# Vendor name will be shown by the Config Wizard. +name = TRILAB +# Configuration version of this file. Config file will only be installed, if the config_version differs. +# This means, the server may force the PrusaSlicer configuration to be downgraded. +config_version = 0.0.1 +# Where to get the updates from? +config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/TriLAB/ +# changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% + +# The printer models will be shown by the Configuration Wizard in this order, +# also the first model installed & the first nozzle installed will be activated after install. +# Printer model name will be shown by the installation wizard. + +[printer_model:DQM] +name = TRILAB DeltiQ M +variants = 0.4 +technology = FFF +bed_model = +bed_texture = +default_materials = DeltiQ PLA; DeltiQ ASA; DeltiQ PET; DeltiQ ABS; DeltiQ CPE + +[printer_model:DQL] +name = TRILAB DeltiQ L +variants = 0.4 +technology = FFF +bed_model = +bed_texture = +default_materials = DeltiQ PLA; DeltiQ ASA; DeltiQ PET; DeltiQ ABS; DeltiQ CPE + +[printer_model:DQXL] +name = TRILAB DeltiQ XL +variants = 0.4 +technology = FFF +bed_model = +bed_texture = +default_materials = DeltiQ PLA; DeltiQ ASA; DeltiQ PET; DeltiQ ABS; DeltiQ CPE + + +# All presets starting with asterisk, for example *common*, are intermediate and they will +# not make it into the user interface. + +[print:DeltiQ 0.2mm] +avoid_crossing_perimeters = 0 +bottom_solid_layers = 3 +bridge_acceleration = 1000 +bridge_angle = 0 +bridge_flow_ratio = 0.95 +bridge_speed = 20 +brim_width = 0 +clip_multipart_objects = 0 +compatible_printers_condition = printer_notes=~/.*TRILAB.*/ +complete_objects = 0 +default_acceleration = 2000 +dont_support_bridges = 1 +elefant_foot_compensation = 0 +ensure_vertical_shell_thickness = 1 +external_fill_pattern = rectilinear +external_perimeter_extrusion_width = 0.4 +external_perimeter_speed = 30 +external_perimeters_first = 0 +extra_perimeters = 0 +extruder_clearance_height = 20 +extruder_clearance_radius = 20 +extrusion_width = 0.4 +fill_angle = 45 +fill_density = 15% +fill_pattern = gyroid +first_layer_acceleration = 1000 +first_layer_extrusion_width = 0.4 +first_layer_height = 0.3 +first_layer_speed = 20 +gap_fill_speed = 50 +gcode_comments = 0 +infill_acceleration = 2000 +infill_every_layers = 1 +infill_extruder = 1 +infill_extrusion_width = 0.55 +infill_first = 0 +infill_only_where_needed = 0 +infill_overlap = 25% +infill_speed = 50 +inherits = +interface_shells = 0 +layer_height = 0.2 +max_print_speed = 100 +max_volumetric_extrusion_rate_slope_negative = 0 +max_volumetric_extrusion_rate_slope_positive = 0 +max_volumetric_speed = 10 +min_skirt_length = 4 +notes = +only_retract_when_crossing_perimeters = 1 +ooze_prevention = 0 +output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}.gcode +overhangs = 0 +perimeter_acceleration = 1500 +perimeter_extruder = 1 +perimeter_extrusion_width = 0.4 +perimeter_speed = 40 +perimeters = 2 +post_process = +print_settings_id = +raft_layers = 0 +resolution = 0 +seam_position = nearest +single_extruder_multi_material_priming = 1 +skirt_distance = 2 +skirt_height = 1 +skirts = 1 +small_perimeter_speed = 20 +solid_infill_below_area = 15 +solid_infill_every_layers = 0 +solid_infill_extruder = 1 +solid_infill_extrusion_width = 0.4 +solid_infill_speed = 50 +spiral_vase = 0 +standby_temperature_delta = -5 +support_material = 0 +support_material_angle = 0 +support_material_auto = 1 +support_material_buildplate_only = 0 +support_material_contact_distance = 0.15 +support_material_enforce_layers = 0 +support_material_extruder = 1 +support_material_extrusion_width = 0 +support_material_interface_contact_loops = 0 +support_material_interface_extruder = 1 +support_material_interface_layers = 3 +support_material_interface_spacing = 0 +support_material_interface_speed = 100% +support_material_pattern = rectilinear +support_material_spacing = 2.5 +support_material_speed = 50 +support_material_synchronize_layers = 0 +support_material_threshold = 55 +support_material_with_sheath = 1 +support_material_xy_spacing = 100% +thin_walls = 0 +threads = 4 +top_infill_extrusion_width = 0.4 +top_solid_infill_speed = 30 +top_solid_layers = 4 +travel_speed = 150 +wipe_tower = 0 +wipe_tower_bridging = 10 +wipe_tower_rotation_angle = 0 +wipe_tower_width = 60 +wipe_tower_x = 180 +wipe_tower_y = 140 +xy_size_compensation = 0 + +[filament:*DeltiQ common*] +bed_temperature = 90 +bridge_fan_speed = 50 +compatible_printers_condition = printer_notes=~/.*TRILAB.*/ +cooling = 1 +filament_vendor = Generic +disable_fan_first_layers = 3 +end_filament_gcode = "" +extrusion_multiplier = 1 +fan_always_on = 1 +fan_below_layer_time = 60 +filament_colour = #FF3232 +filament_cooling_final_speed = 3.4 +filament_cooling_initial_speed = 2.2 +filament_cooling_moves = 4 +filament_cost = 0 +filament_density = 1.25 +filament_diameter = 1.75 +filament_load_time = 0 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_volumetric_speed = 10 +filament_minimal_purge_on_wipe_tower = 15 +filament_notes = "" +filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_settings_id = "" +filament_soluble = 0 +filament_toolchange_delay = 0 +filament_type = PET +filament_unload_time = 0 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +first_layer_bed_temperature = 90 +first_layer_temperature = 240 +max_fan_speed = 50 +min_fan_speed = 30 +min_print_speed = 10 +slowdown_below_layer_time = 5 +start_filament_gcode = "" +temperature = 245 + +[filament:DeltiQ PET] +inherits = *DeltiQ common* + +[filament:DeltiQ PLA] +inherits = *DeltiQ common* +bed_temperature = 55 +bridge_fan_speed = 100 +disable_fan_first_layers = 1 +filament_type = PLA +first_layer_bed_temperature = 55 +first_layer_temperature = 215 +max_fan_speed = 100 +min_fan_speed = 85 +slowdown_below_layer_time = 4 +temperature = 210 + +[filament:DeltiQ ABS] +inherits = *DeltiQ common* +bed_temperature = 100 +bridge_fan_speed = 20 +filament_density = 1.04 +filament_type = ABS +first_layer_bed_temperature = 100 +first_layer_temperature = 255 +max_fan_speed = 20 +min_fan_speed = 5 +slowdown_below_layer_time = 15 +temperature = 255 + +[filament:DeltiQ ASA] +inherits = DeltiQ ABS +filament_density = 1.07 +filament_type = ASA +first_layer_temperature = 265 +temperature = 265 + +[filament:DeltiQ CPE] +inherits = *DeltiQ common* +bed_temperature = 85 +filament_type = CPE +first_layer_bed_temperature = 85 +first_layer_temperature = 260 +temperature = 265 + + +[printer:*DeltiQ*] +inherits = +bed_shape = 124.315x13.0661,122.268x25.989,118.882x38.6271,114.193x50.8421,108.253x62.5,101.127x73.4732,92.8931x83.6413,83.6413x92.8931,73.4732x101.127,62.5x108.253,50.8421x114.193,38.6271x118.882,25.989x122.268,13.0661x124.315,3.54096e-014x125,-13.0661x124.315,-25.989x122.268,-38.6271x118.882,-50.8421x114.193,-62.5x108.253,-73.4732x101.127,-83.6413x92.8931,-92.8931x83.6413,-101.127x73.4732,-108.253x62.5,-114.193x50.8421,-118.882x38.6271,-122.268x25.989,-124.315x13.0661,-125x7.08192e-014,-124.315x-13.0661,-122.268x-25.989,-118.882x-38.6271,-114.193x-50.8421,-108.253x-62.5,-101.127x-73.4732,-92.8931x-83.6413,-83.6413x-92.8931,-73.4732x-101.127,-62.5x-108.253,-50.8421x-114.193,-38.6271x-118.882,-25.989x-122.268,-13.0661x-124.315,-2.29621e-014x-125,13.0661x-124.315,25.989x-122.268,38.6271x-118.882,50.8421x-114.193,62.5x-108.253,73.4732x-101.127,83.6413x-92.8931,92.8931x-83.6413,101.127x-73.4732,108.253x-62.5,114.193x-50.8421,118.882x-38.6271,122.268x-25.989,124.315x-13.0661,125x-1.41638e-013 +before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z] +between_objects_gcode = +cooling_tube_length = 5 +cooling_tube_retraction = 91.5 +default_filament_profile = "" +default_print_profile = +deretract_speed = 25 +end_gcode = ;END\nM104 S0 ; Turn extruder heater off\nM140 S0 ; Turn bed heater off\nG28 ; Home all axes\nM84 S5 ; Stop all axes and hold inidle for 5 seconds\nG90 ; Absolute positioning +extra_loading_move = -2 +extruder_colour = "" +extruder_offset = 0x0 +gcode_flavor = repetier +host_type = octoprint +layer_gcode = ;AFTER_LAYER_CHANGE\nM117 layer [layer_num] at [layer_z]mm\n;[layer_z]\n +machine_max_acceleration_e = 10000,5000 +machine_max_acceleration_extruding = 1500,1250 +machine_max_acceleration_retracting = 1500,1250 +machine_max_acceleration_x = 9000,1000 +machine_max_acceleration_y = 9000,1000 +machine_max_acceleration_z = 500,200 +machine_max_feedrate_e = 120,120 +machine_max_feedrate_x = 500,200 +machine_max_feedrate_y = 500,200 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 2.5,2.5 +machine_max_jerk_x = 10,10 +machine_max_jerk_y = 10,10 +machine_max_jerk_z = 0.2,0.4 +machine_min_extruding_rate = 0,0 +machine_min_travel_rate = 0,0 +max_layer_height = 0.25 +max_print_height = 320 +min_layer_height = 0.15 +nozzle_diameter = 0.4 +parking_pos_retraction = 92 +print_host = +printer_model = +printer_notes = TRILAB +printer_settings_id = +printer_variant = +printer_vendor = +printhost_apikey = +printhost_cafile = +remaining_times = 0 +retract_before_travel = 2 +retract_before_wipe = 100% +retract_layer_change = 1 +retract_length = 4.1 +retract_length_toolchange = 10 +retract_lift = 0.3 +retract_lift_above = 0 +retract_lift_below = 0 +retract_restart_extra = 0 +retract_restart_extra_toolchange = 0 +retract_speed = 33 +serial_port = +serial_speed = 250000 +silent_mode = 1 +single_extruder_multi_material = 0 +start_gcode = ;START\nM220 S100 ; Set feedmultiply back to 100percent\nG90 ; Absolute positioning\nM83 ; Relative extruder\nM107 ; Layer fan OFF\nM190 S[first_layer_bed_temperature] ; Set bed temperature and wait\nM104 S[first_layer_temperature] ; Set extruder temperature\nG28 ; Home all axes\nG33 ; auto leveling rutine\nG1 X-62 Y-108 Z0.3 F6000 ; Go to purge position start\nG92 E0 ; Zero extruder\nM109 S[first_layer_temperature] ; Set and wait - hotend temperature\nG3 X62 Y-108 I62 J108 E10 F200 ; Go ARC to purge end\nG92 E0 ; Zero extruder +toolchange_gcode = +use_firmware_retraction = 0 +use_relative_e_distances = 1 +use_volumetric_e = 0 +variable_layer_height = 0 +wipe = 0 +z_offset = 0 + +[printer:DeltiQ L] +inherits = *DeltiQ* +printer_model = DQL +printer_variant = 0.4 +bed_shape = 124.315x13.0661,122.268x25.989,118.882x38.6271,114.193x50.8421,108.253x62.5,101.127x73.4732,92.8931x83.6413,83.6413x92.8931,73.4732x101.127,62.5x108.253,50.8421x114.193,38.6271x118.882,25.989x122.268,13.0661x124.315,3.54096e-014x125,-13.0661x124.315,-25.989x122.268,-38.6271x118.882,-50.8421x114.193,-62.5x108.253,-73.4732x101.127,-83.6413x92.8931,-92.8931x83.6413,-101.127x73.4732,-108.253x62.5,-114.193x50.8421,-118.882x38.6271,-122.268x25.989,-124.315x13.0661,-125x7.08192e-014,-124.315x-13.0661,-122.268x-25.989,-118.882x-38.6271,-114.193x-50.8421,-108.253x-62.5,-101.127x-73.4732,-92.8931x-83.6413,-83.6413x-92.8931,-73.4732x-101.127,-62.5x-108.253,-50.8421x-114.193,-38.6271x-118.882,-25.989x-122.268,-13.0661x-124.315,-2.29621e-014x-125,13.0661x-124.315,25.989x-122.268,38.6271x-118.882,50.8421x-114.193,62.5x-108.253,73.4732x-101.127,83.6413x-92.8931,92.8931x-83.6413,101.127x-73.4732,108.253x-62.5,114.193x-50.8421,118.882x-38.6271,122.268x-25.989,124.315x-13.0661,125x-1.41638e-013 +max_print_height = 320 + +[printer:DeltiQ M] +inherits = *DeltiQ* +printer_variant = 0.4 +bed_shape = 89.507x9.40756,88.0333x18.7121,85.5951x27.8115,82.2191x36.6063,77.9423x45,72.8115x52.9007,66.883x60.2218,60.2218x66.883,52.9007x72.8115,45x77.9423,36.6063x82.2191,27.8115x85.5951,18.7121x88.0333,9.40756x89.507,2.54949e-014x90,-9.40756x89.507,-18.7121x88.0333,-27.8115x85.5951,-36.6063x82.2191,-45x77.9423,-52.9007x72.8115,-60.2218x66.883,-66.883x60.2218,-72.8115x52.9007,-77.9423x45,-82.2191x36.6063,-85.5951x27.8115,-88.0333x18.7121,-89.507x9.40756,-90x5.09899e-014,-89.507x-9.40756,-88.0333x-18.7121,-85.5951x-27.8115,-82.2191x-36.6063,-77.9423x-45,-72.8115x-52.9007,-66.883x-60.2218,-60.2218x-66.883,-52.9007x-72.8115,-45x-77.9423,-36.6063x-82.2191,-27.8115x-85.5951,-18.7121x-88.0333,-9.40756x-89.507,-1.65327e-014x-90,9.40756x-89.507,18.7121x-88.0333,27.8115x-85.5951,36.6063x-82.2191,45x-77.9423,52.9007x-72.8115,60.2218x-66.883,66.883x-60.2218,72.8115x-52.9007,77.9423x-45,82.2191x-36.6063,85.5951x-27.8115,88.0333x-18.7121,89.507x-9.40756,90x-1.0198e-013 +max_print_height = 230 +printer_model = DQM +retract_length = 3.7 +retract_length_toolchange = 10 +retract_speed = 30 +start_gcode = ;START\nM220 S100 ; Set feedmultiply back to 100percent\nG90 ; Absolute positioning\nM83 ; Relative extruder\nM107 ; Layer fan OFF\nM190 S[first_layer_bed_temperature] ; Set bed temperature and wait\nM104 S[first_layer_temperature] ; Set extruder temperature\nG28 ; Home all axes\nG33 ; auto leveling rutine\nG1 X-45 Y-77 Z0.3 F6000 ; Go to purge position start\nG92 E0 ; Zero extruder\nM109 S[first_layer_temperature] ; Set Extruder Temperature and Wait\nG3 X45 Y-77 I45 J77 E10 F200 ; Go ARC to purge end\nG92 E0 ; Zero extruder + +[printer:DeltiQ XL] +inherits = *DeltiQ* +printer_model = DQXL +printer_variant = 0.4 +bed_shape = 124.315x13.0661,122.268x25.989,118.882x38.6271,114.193x50.8421,108.253x62.5,101.127x73.4732,92.8931x83.6413,83.6413x92.8931,73.4732x101.127,62.5x108.253,50.8421x114.193,38.6271x118.882,25.989x122.268,13.0661x124.315,3.54096e-014x125,-13.0661x124.315,-25.989x122.268,-38.6271x118.882,-50.8421x114.193,-62.5x108.253,-73.4732x101.127,-83.6413x92.8931,-92.8931x83.6413,-101.127x73.4732,-108.253x62.5,-114.193x50.8421,-118.882x38.6271,-122.268x25.989,-124.315x13.0661,-125x7.08192e-014,-124.315x-13.0661,-122.268x-25.989,-118.882x-38.6271,-114.193x-50.8421,-108.253x-62.5,-101.127x-73.4732,-92.8931x-83.6413,-83.6413x-92.8931,-73.4732x-101.127,-62.5x-108.253,-50.8421x-114.193,-38.6271x-118.882,-25.989x-122.268,-13.0661x-124.315,-2.29621e-014x-125,13.0661x-124.315,25.989x-122.268,38.6271x-118.882,50.8421x-114.193,62.5x-108.253,73.4732x-101.127,83.6413x-92.8931,92.8931x-83.6413,101.127x-73.4732,108.253x-62.5,114.193x-50.8421,118.882x-38.6271,122.268x-25.989,124.315x-13.0661,125x-1.41638e-013 +max_print_height = 500 +retract_length = 4.5 +retract_speed = 35 + +[presets] +print = DeltiQ 0.2mm +printer = DeltiQ L +filament = DeltiQ PLA diff --git a/resources/profiles/TriLAB/DQL_thumbnail.png b/resources/profiles/TriLAB/DQL_thumbnail.png new file mode 100644 index 0000000000..97769279da Binary files /dev/null and b/resources/profiles/TriLAB/DQL_thumbnail.png differ diff --git a/resources/profiles/TriLAB/DQM_thumbnail.png b/resources/profiles/TriLAB/DQM_thumbnail.png new file mode 100644 index 0000000000..0046090c8a Binary files /dev/null and b/resources/profiles/TriLAB/DQM_thumbnail.png differ diff --git a/resources/profiles/TriLAB/DQXL_thumbnail.png b/resources/profiles/TriLAB/DQXL_thumbnail.png new file mode 100644 index 0000000000..46fa300c41 Binary files /dev/null and b/resources/profiles/TriLAB/DQXL_thumbnail.png differ diff --git a/resources/shaders/gouraud.fs b/resources/shaders/gouraud.fs index 45175acc21..b1a8d6ac28 100644 --- a/resources/shaders/gouraud.fs +++ b/resources/shaders/gouraud.fs @@ -9,8 +9,7 @@ const float EPSILON = 0.0001; struct SlopeDetection { bool actived; - // x = yellow, y = red - vec2 z_range; + float normal_z; mat3 volume_world_normal_matrix; }; @@ -33,8 +32,7 @@ varying vec3 eye_normal; vec3 slope_color() { - float gradient_range = slope.z_range.x - slope.z_range.y; - return (world_normal_z > slope.z_range.x - EPSILON) ? GREEN : ((gradient_range == 0.0) ? RED : mix(RED, YELLOW, clamp((world_normal_z - slope.z_range.y) / gradient_range, 0.0, 1.0))); + return (world_normal_z > slope.normal_z - EPSILON) ? GREEN : RED; } void main() diff --git a/resources/shaders/gouraud.vs b/resources/shaders/gouraud.vs index d60f6eae8a..ed7e3f56ba 100644 --- a/resources/shaders/gouraud.vs +++ b/resources/shaders/gouraud.vs @@ -29,8 +29,7 @@ struct PrintBoxDetection struct SlopeDetection { bool actived; - // x = yellow, y = red - vec2 z_range; + float normal_z; mat3 volume_world_normal_matrix; }; diff --git a/resources/shaders/gouraud_light.fs b/resources/shaders/gouraud_light.fs new file mode 100644 index 0000000000..1a58abc852 --- /dev/null +++ b/resources/shaders/gouraud_light.fs @@ -0,0 +1,11 @@ +#version 110 + +uniform vec4 uniform_color; + +// x = tainted, y = specular; +varying vec2 intensity; + +void main() +{ + gl_FragColor = vec4(vec3(intensity.y, intensity.y, intensity.y) + uniform_color.rgb * intensity.x, uniform_color.a); +} diff --git a/resources/shaders/gouraud_light.vs b/resources/shaders/gouraud_light.vs new file mode 100644 index 0000000000..d4f71938a9 --- /dev/null +++ b/resources/shaders/gouraud_light.vs @@ -0,0 +1,38 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +// x = tainted, y = specular; +varying vec2 intensity; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(gl_NormalMatrix * gl_Normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_Position = ftransform(); +} diff --git a/resources/shaders/options_110.fs b/resources/shaders/options_110.fs new file mode 100644 index 0000000000..ab656998df --- /dev/null +++ b/resources/shaders/options_110.fs @@ -0,0 +1,8 @@ +#version 110 + +uniform vec4 uniform_color; + +void main() +{ + gl_FragColor = uniform_color; +} diff --git a/resources/shaders/options_110.vs b/resources/shaders/options_110.vs new file mode 100644 index 0000000000..7592f86a42 --- /dev/null +++ b/resources/shaders/options_110.vs @@ -0,0 +1,11 @@ +#version 110 + +uniform float zoom; +uniform float point_size; +uniform float near_plane_height; + +void main() +{ + gl_Position = ftransform(); + gl_PointSize = (gl_Position.w == 1.0) ? zoom * near_plane_height * point_size : near_plane_height * point_size / gl_Position.w; +} diff --git a/resources/shaders/options_120.fs b/resources/shaders/options_120.fs new file mode 100644 index 0000000000..e9b61304f2 --- /dev/null +++ b/resources/shaders/options_120.fs @@ -0,0 +1,22 @@ +// version 120 is needed for gl_PointCoord +#version 120 + +uniform vec4 uniform_color; +uniform float percent_outline_radius; +uniform float percent_center_radius; + +vec4 calc_color(float radius, vec4 color) +{ + return ((radius < percent_center_radius) || (radius > 1.0 - percent_outline_radius)) ? + vec4(0.5 * color.rgb, color.a) : color; +} + +void main() +{ + vec2 pos = (gl_PointCoord - 0.5) * 2.0; + float radius = length(pos); + if (radius > 1.0) + discard; + + gl_FragColor = calc_color(radius, uniform_color); +} diff --git a/resources/shaders/options_120.vs b/resources/shaders/options_120.vs new file mode 100644 index 0000000000..baf3cd3a7f --- /dev/null +++ b/resources/shaders/options_120.vs @@ -0,0 +1,11 @@ +#version 120 + +uniform float zoom; +uniform float point_size; +uniform float near_plane_height; + +void main() +{ + gl_Position = ftransform(); + gl_PointSize = (gl_Position.w == 1.0) ? zoom * near_plane_height * point_size : near_plane_height * point_size / gl_Position.w; +} diff --git a/resources/shaders/toolpaths_lines.fs b/resources/shaders/toolpaths_lines.fs new file mode 100644 index 0000000000..31151cdc17 --- /dev/null +++ b/resources/shaders/toolpaths_lines.fs @@ -0,0 +1,28 @@ +#version 110 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +const vec3 LIGHT_FRONT_DIR = vec3(0.0, 0.0, 1.0); + +// x = ambient, y = top diffuse, z = front diffuse, w = global +uniform vec4 light_intensity; +uniform vec4 uniform_color; + +varying vec3 eye_normal; + +void main() +{ + vec3 normal = normalize(eye_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. Take the abs value to light the lines no matter in which direction the normal points. + float NdotL = abs(dot(normal, LIGHT_TOP_DIR)); + + float intensity = light_intensity.x + NdotL * light_intensity.y; + + // Perform the same lighting calculation for the 2nd light source. + NdotL = abs(dot(normal, LIGHT_FRONT_DIR)); + intensity += NdotL * light_intensity.z; + + gl_FragColor = vec4(uniform_color.rgb * light_intensity.w * intensity, uniform_color.a); +} diff --git a/resources/shaders/toolpaths_lines.vs b/resources/shaders/toolpaths_lines.vs new file mode 100644 index 0000000000..85d5c641f3 --- /dev/null +++ b/resources/shaders/toolpaths_lines.vs @@ -0,0 +1,19 @@ +#version 110 + +varying vec3 eye_normal; + +vec3 world_normal() +{ + // the world normal is always parallel to the world XY plane + // the x component is stored into gl_Vertex.w + float x = gl_Vertex.w; + float y = sqrt(1.0 - x * x); + return vec3(x, y, 0.0); +} + +void main() +{ + vec4 world_position = vec4(gl_Vertex.xyz, 1.0); + gl_Position = gl_ModelViewProjectionMatrix * world_position; + eye_normal = gl_NormalMatrix * world_normal(); +} diff --git a/sandboxes/opencsg/CMakeLists.txt b/sandboxes/opencsg/CMakeLists.txt index ec1f4cae91..ace8f4d539 100644 --- a/sandboxes/opencsg/CMakeLists.txt +++ b/sandboxes/opencsg/CMakeLists.txt @@ -6,6 +6,7 @@ add_executable(opencsg_example WIN32 main.cpp Engine.hpp Engine.cpp ShaderCSGDisplay.hpp ShaderCSGDisplay.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../../src/slic3r/GUI/Jobs/Job.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../src/slic3r/GUI/ProgressStatusBar.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../src/slic3r/GUI/I18N.hpp ${CMAKE_CURRENT_SOURCE_DIR}/../../src/slic3r/GUI/I18N.cpp) diff --git a/sandboxes/opencsg/main.cpp b/sandboxes/opencsg/main.cpp index adf9cc457f..f5fb124935 100644 --- a/sandboxes/opencsg/main.cpp +++ b/sandboxes/opencsg/main.cpp @@ -26,7 +26,7 @@ #include "libslic3r/Format/3mf.hpp" #include "libslic3r/SLAPrint.hpp" -#include "slic3r/GUI/Job.hpp" +#include "slic3r/GUI/Jobs/Job.hpp" #include "slic3r/GUI/ProgressStatusBar.hpp" using namespace Slic3r::GL; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e170ea8d32..c93d95946c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.13) project(PrusaSlicer-native) add_subdirectory(build-utils) @@ -92,6 +92,7 @@ endif() # Create a slic3r executable # Process mainfests for various platforms. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/PrusaSlicer.rc.in ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/PrusaSlicer-gcodeviewer.rc.in ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer-gcodeviewer.rc @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/msw/PrusaSlicer.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.manifest @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/osx/Info.plist.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist @ONLY) if (WIN32) @@ -105,9 +106,9 @@ if (MINGW) set_target_properties(PrusaSlicer PROPERTIES PREFIX "") endif (MINGW) -if (NOT WIN32) - # Binary name on unix like systems (OSX, Linux) - set_target_properties(PrusaSlicer PROPERTIES OUTPUT_NAME "prusa-slicer") +if (NOT WIN32 AND NOT APPLE) + # Binary name on unix like systems (Linux, Unix) + set_target_properties(PrusaSlicer PROPERTIES OUTPUT_NAME "prusa-slicer") endif () target_link_libraries(PrusaSlicer libslic3r cereal) @@ -161,12 +162,22 @@ if (WIN32) add_executable(PrusaSlicer_app_console PrusaSlicer_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer.rc) # Generate debug symbols even in release mode. if (MSVC) - target_link_options(PrusaSlicer_app_console PUBLIC "$<$:/DEBUG>") + target_link_options(PrusaSlicer_app_console PUBLIC "$<$:/DEBUG>") endif () target_compile_definitions(PrusaSlicer_app_console PRIVATE -DSLIC3R_WRAPPER_CONSOLE) add_dependencies(PrusaSlicer_app_console PrusaSlicer) set_target_properties(PrusaSlicer_app_console PROPERTIES OUTPUT_NAME "prusa-slicer-console") target_link_libraries(PrusaSlicer_app_console PRIVATE boost_headeronly) + + add_executable(PrusaSlicer_app_gcodeviewer WIN32 PrusaSlicer_app_msvc.cpp ${CMAKE_CURRENT_BINARY_DIR}/PrusaSlicer-gcodeviewer.rc) + # Generate debug symbols even in release mode. + if (MSVC) + target_link_options(PrusaSlicer_app_gcodeviewer PUBLIC "$<$:/DEBUG>") + endif () + target_compile_definitions(PrusaSlicer_app_gcodeviewer PRIVATE -DSLIC3R_WRAPPER_NOCONSOLE -DSLIC3R_WRAPPER_GCODEVIEWER) + add_dependencies(PrusaSlicer_app_gcodeviewer PrusaSlicer) + set_target_properties(PrusaSlicer_app_gcodeviewer PROPERTIES OUTPUT_NAME "prusa-gcodeviewer") + target_link_libraries(PrusaSlicer_app_gcodeviewer PRIVATE boost_headeronly) endif () # Link the resources dir to where Slic3r GUI expects it @@ -193,25 +204,39 @@ if (WIN32) VERBATIM ) endif () - + # This has to be a separate target due to the windows command line lenght limits add_custom_target(PrusaSlicerDllsCopy ALL DEPENDS PrusaSlicer) prusaslicer_copy_dlls(PrusaSlicerDllsCopy) - -elseif (XCODE) - # Because of Debug/Release/etc. configurations (similar to MSVC) the slic3r binary is located in an extra level - add_custom_command(TARGET PrusaSlicer POST_BUILD - COMMAND ln -sfn "${SLIC3R_RESOURCES_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/resources" - COMMENT "Symlinking the resources directory into the build tree" - VERBATIM - ) + else () + if (APPLE) + # On OSX, the name of the binary matches the name of the Application. + add_custom_command(TARGET PrusaSlicer POST_BUILD + COMMAND ln -sf PrusaSlicer prusa-slicer + COMMAND ln -sf PrusaSlicer prusa-gcodeviewer + COMMAND ln -sf PrusaSlicer PrusaGCodeViewer + WORKING_DIRECTORY "$" + COMMENT "Symlinking the G-code viewer to PrusaSlicer, symlinking to prusa-slicer and prusa-gcodeviewer" + VERBATIM) + else () + add_custom_command(TARGET PrusaSlicer POST_BUILD + COMMAND ln -sf prusa-slicer prusa-gcodeviewer + WORKING_DIRECTORY "$" + COMMENT "Symlinking the G-code viewer to PrusaSlicer" + VERBATIM) + endif () + if (XCODE) + # Because of Debug/Release/etc. configurations (similar to MSVC) the slic3r binary is located in an extra level + set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/resources") + else () + set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/../resources") + endif () add_custom_command(TARGET PrusaSlicer POST_BUILD - COMMAND ln -sfn "${SLIC3R_RESOURCES_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/../resources" + COMMAND ln -sfn "${SLIC3R_RESOURCES_DIR}" "${BIN_RESOURCES_DIR}" COMMENT "Symlinking the resources directory into the build tree" - VERBATIM - ) -endif() + VERBATIM) +endif () # Slic3r binary install target if (WIN32) @@ -222,4 +247,7 @@ if (WIN32) endif () else () install(TARGETS PrusaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + + # Install the symlink for gcodeviewer + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink prusa-slicer prusa-gcodeviewer WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})") endif () diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index a0422f5fa0..0ed719c993 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -44,23 +45,21 @@ #include "libslic3r/Format/OBJ.hpp" #include "libslic3r/Format/SL1.hpp" #include "libslic3r/Utils.hpp" +#include "libslic3r/Thread.hpp" #include "PrusaSlicer.hpp" #ifdef SLIC3R_GUI - #include "slic3r/GUI/GUI.hpp" - #include "slic3r/GUI/GUI_App.hpp" - #include "slic3r/GUI/3DScene.hpp" - #include "slic3r/GUI/InstanceCheck.hpp" - #include "slic3r/GUI/AppConfig.hpp" - #include "slic3r/GUI/MainFrame.hpp" - #include "slic3r/GUI/Plater.hpp" + #include "slic3r/GUI/GUI_Init.hpp" #endif /* SLIC3R_GUI */ using namespace Slic3r; int CLI::run(int argc, char **argv) { + // Mark the main thread for the debugger and for runtime checks. + set_current_thread_name("slic3r_main"); + #ifdef __WXGTK__ // On Linux, wxGTK has no support for Wayland, and the app crashes on // startup if gtk3 is used. This env var has to be set explicitly to @@ -92,7 +91,7 @@ int CLI::run(int argc, char **argv) return 1; m_extra_config.apply(m_config, true); - m_extra_config.normalize(); + m_extra_config.normalize_fdm(); PrinterTechnology printer_technology = Slic3r::printer_technology(m_config); @@ -101,7 +100,14 @@ int CLI::run(int argc, char **argv) std::find(m_transforms.begin(), m_transforms.end(), "cut") == m_transforms.end() && std::find(m_transforms.begin(), m_transforms.end(), "cut_x") == m_transforms.end() && std::find(m_transforms.begin(), m_transforms.end(), "cut_y") == m_transforms.end(); - + bool start_as_gcodeviewer = +#ifdef _WIN32 + false; +#else + // On Unix systems, the prusa-slicer binary may be symlinked to give the application a different meaning. + boost::algorithm::iends_with(boost::filesystem::path(argv[0]).filename().string(), "gcodeviewer"); +#endif // _WIN32 + const std::vector &load_configs = m_config.option("load", true)->values; // load config files supplied via --load @@ -121,7 +127,7 @@ int CLI::run(int argc, char **argv) boost::nowide::cerr << "Error while reading config file: " << ex.what() << std::endl; return 1; } - config.normalize(); + config.normalize_fdm(); PrinterTechnology other_printer_technology = Slic3r::printer_technology(config); if (printer_technology == ptUnknown) { printer_technology = other_printer_technology; @@ -132,43 +138,72 @@ int CLI::run(int argc, char **argv) m_print_config.apply(config); } - // Read input file(s) if any. - for (const std::string &file : m_input_files) { - if (! boost::filesystem::exists(file)) { - boost::nowide::cerr << "No such file: " << file << std::endl; - exit(1); +#if ENABLE_GCODE_VIEWER + // are we starting as gcodeviewer ? + for (auto it = m_actions.begin(); it != m_actions.end(); ++it) { + if (*it == "gcodeviewer") { + start_gui = true; + start_as_gcodeviewer = true; + m_actions.erase(it); + break; } - Model model; - try { - // When loading an AMF or 3MF, config is imported as well, including the printer technology. - DynamicPrintConfig config; - model = Model::read_from_file(file, &config, true); - PrinterTechnology other_printer_technology = Slic3r::printer_technology(config); - if (printer_technology == ptUnknown) { - printer_technology = other_printer_technology; - } else if (printer_technology != other_printer_technology && other_printer_technology != ptUnknown) { - boost::nowide::cerr << "Mixing configurations for FFF and SLA technologies" << std::endl; + } +#endif // ENABLE_GCODE_VIEWER + + // Read input file(s) if any. +#if ENABLE_GCODE_VIEWER + for (const std::string& file : m_input_files) { + std::string ext = boost::filesystem::path(file).extension().string(); + if (ext == ".gcode" || ext == ".g") { + if (boost::filesystem::exists(file)) { + start_as_gcodeviewer = true; + break; + } + } + } + if (!start_as_gcodeviewer) { +#endif // ENABLE_GCODE_VIEWER + for (const std::string& file : m_input_files) { + if (!boost::filesystem::exists(file)) { + boost::nowide::cerr << "No such file: " << file << std::endl; + exit(1); + } + Model model; + try { + // When loading an AMF or 3MF, config is imported as well, including the printer technology. + DynamicPrintConfig config; + model = Model::read_from_file(file, &config, true); + PrinterTechnology other_printer_technology = Slic3r::printer_technology(config); + if (printer_technology == ptUnknown) { + printer_technology = other_printer_technology; + } + else if (printer_technology != other_printer_technology && other_printer_technology != ptUnknown) { + boost::nowide::cerr << "Mixing configurations for FFF and SLA technologies" << std::endl; + return 1; + } + // config is applied to m_print_config before the current m_config values. + config += std::move(m_print_config); + m_print_config = std::move(config); + } + catch (std::exception& e) { + boost::nowide::cerr << file << ": " << e.what() << std::endl; return 1; } - // config is applied to m_print_config before the current m_config values. - config += std::move(m_print_config); - m_print_config = std::move(config); - } catch (std::exception &e) { - boost::nowide::cerr << file << ": " << e.what() << std::endl; - return 1; + if (model.objects.empty()) { + boost::nowide::cerr << "Error: file is empty: " << file << std::endl; + continue; + } + m_models.push_back(model); } - if (model.objects.empty()) { - boost::nowide::cerr << "Error: file is empty: " << file << std::endl; - continue; - } - m_models.push_back(model); +#if ENABLE_GCODE_VIEWER } +#endif // ENABLE_GCODE_VIEWER // Apply command line options to a more specific DynamicPrintConfig which provides normalize() // (command line options override --load files) m_print_config.apply(m_extra_config, true); // Normalizing after importing the 3MFs / AMFs - m_print_config.normalize(); + m_print_config.normalize_fdm(); // Initialize full print configs for both the FFF and SLA technologies. FullPrintConfig fff_print_config; @@ -469,7 +504,11 @@ int CLI::run(int argc, char **argv) print->process(); if (printer_technology == ptFFF) { // The outfile is processed by a PlaceholderParser. +#if ENABLE_GCODE_VIEWER + outfile = fff_print.export_gcode(outfile, nullptr, nullptr); +#else outfile = fff_print.export_gcode(outfile, nullptr); +#endif // ENABLE_GCODE_VIEWER outfile_final = fff_print.print_statistics().finalize_output_path(outfile); } else { outfile = sla_print.output_filepath(outfile); @@ -477,9 +516,12 @@ int CLI::run(int argc, char **argv) outfile_final = sla_print.print_statistics().finalize_output_path(outfile); sla_archive.export_print(outfile_final, sla_print); } - if (outfile != outfile_final && Slic3r::rename_file(outfile, outfile_final)) { - boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl; - return 1; + if (outfile != outfile_final) { + if (Slic3r::rename_file(outfile, outfile_final)) { + boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl; + return 1; + } + outfile = outfile_final; } boost::nowide::cout << "Slicing result exported to " << outfile << std::endl; } catch (const std::exception &ex) { @@ -517,6 +559,11 @@ int CLI::run(int argc, char **argv) << " (" << print.total_extruded_volume()/1000 << "cm3)" << std::endl; */ } +#if !ENABLE_GCODE_VIEWER + } else if (opt_key == "gcodeviewer") { + start_gui = true; + start_as_gcodeviewer = true; +#endif // !ENABLE_GCODE_VIEWER } else { boost::nowide::cerr << "error: option not supported yet: " << opt_key << std::endl; return 1; @@ -525,48 +572,20 @@ int CLI::run(int argc, char **argv) if (start_gui) { #ifdef SLIC3R_GUI -// #ifdef USE_WX - GUI::GUI_App *gui = new GUI::GUI_App(); - - bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; - if (Slic3r::instance_check(argc, argv, gui_single_instance_setting)) { - //TODO: do we have delete gui and other stuff? - return -1; - } - -// gui->autosave = m_config.opt_string("autosave"); - GUI::GUI_App::SetInstance(gui); - gui->CallAfter([gui, this, &load_configs] { - if (!gui->initialized()) { - return; - } -#if 0 - // Load the cummulative config over the currently active profiles. - //FIXME if multiple configs are loaded, only the last one will have an effect. - // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). - // As of now only the full configs are supported here. - if (!m_print_config.empty()) - gui->mainframe->load_config(m_print_config); -#endif - if (! load_configs.empty()) - // Load the last config to give it a name at the UI. The name of the preset may be later - // changed by loading an AMF or 3MF. - //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. - gui->mainframe->load_config_file(load_configs.back()); - // If loading a 3MF file, the config is loaded from the last one. - if (! m_input_files.empty()) - gui->plater()->load_files(m_input_files, true, true); - if (! m_extra_config.empty()) - gui->mainframe->load_config(m_extra_config); - }); - int result = wxEntry(argc, argv); - return result; -#else /* SLIC3R_GUI */ + Slic3r::GUI::GUI_InitParams params; + params.argc = argc; + params.argv = argv; + params.load_configs = load_configs; + params.extra_config = std::move(m_extra_config); + params.input_files = std::move(m_input_files); + params.start_as_gcodeviewer = start_as_gcodeviewer; + return Slic3r::GUI::GUI_Run(params); +#else // SLIC3R_GUI // No GUI support. Just print out a help. this->print_help(false); // If started without a parameter, consider it to be OK, otherwise report an error code (no action etc). return (argc == 0) ? 0 : 1; -#endif /* SLIC3R_GUI */ +#endif // SLIC3R_GUI } return 0; @@ -591,7 +610,7 @@ bool CLI::setup(int argc, char **argv) #ifdef __APPLE__ // The application is packed in the .dmg archive as 'Slic3r.app/Contents/MacOS/Slic3r' // The resources are packed to 'Slic3r.app/Contents/Resources' - boost::filesystem::path path_resources = path_to_binary.parent_path() / "../Resources"; + boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path() / "../Resources"; #elif defined _WIN32 // The application is packed in the .zip archive in the root, // The resources are packed to 'resources' @@ -605,7 +624,7 @@ bool CLI::setup(int argc, char **argv) // The application is packed in the .tar.bz archive (or in AppImage) as 'bin/slic3r', // The resources are packed to 'resources' // Path from Slic3r binary to resources: - boost::filesystem::path path_resources = path_to_binary.parent_path() / "../resources"; + boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path() / "../resources"; #endif set_resources_dir(path_resources.string()); diff --git a/src/PrusaSlicer_app_msvc.cpp b/src/PrusaSlicer_app_msvc.cpp index 712cff687d..5f12c91479 100644 --- a/src/PrusaSlicer_app_msvc.cpp +++ b/src/PrusaSlicer_app_msvc.cpp @@ -221,6 +221,11 @@ int wmain(int argc, wchar_t **argv) std::vector argv_extended; argv_extended.emplace_back(argv[0]); +#ifdef SLIC3R_WRAPPER_GCODEVIEWER + wchar_t gcodeviewer_param[] = L"--gcodeviewer"; + argv_extended.emplace_back(gcodeviewer_param); +#endif /* SLIC3R_WRAPPER_GCODEVIEWER */ + #ifdef SLIC3R_GUI // Here one may push some additional parameters based on the wrapper type. bool force_mesa = false; diff --git a/src/admesh/stl.h b/src/admesh/stl.h index 9224b04594..e0f2865f0d 100644 --- a/src/admesh/stl.h +++ b/src/admesh/stl.h @@ -255,18 +255,24 @@ extern void its_transform(indexed_triangle_set &its, T *trafo3x4) } template -inline void its_transform(indexed_triangle_set &its, const Eigen::Transform& t) +inline void its_transform(indexed_triangle_set &its, const Eigen::Transform& t, bool fix_left_handed = false) { //const Eigen::Matrix r = t.matrix().template block<3, 3>(0, 0); for (stl_vertex &v : its.vertices) v = (t * v.template cast()).template cast().eval(); + if (fix_left_handed && t.matrix().block(0, 0, 3, 3).determinant() < 0.) + for (stl_triangle_vertex_indices &i : its.indices) + std::swap(i[0], i[1]); } template -inline void its_transform(indexed_triangle_set &its, const Eigen::Matrix& m) +inline void its_transform(indexed_triangle_set &its, const Eigen::Matrix& m, bool fix_left_handed = false) { - for (stl_vertex &v : its.vertices) + for (stl_vertex &v : its.vertices) v = (m * v.template cast()).template cast().eval(); + if (fix_left_handed && m.determinant() < 0.) + for (stl_triangle_vertex_indices &i : its.indices) + std::swap(i[0], i[1]); } extern void its_rotate_x(indexed_triangle_set &its, float angle); diff --git a/src/admesh/stlinit.cpp b/src/admesh/stlinit.cpp index 390fe56a40..6aa2c44177 100644 --- a/src/admesh/stlinit.cpp +++ b/src/admesh/stlinit.cpp @@ -28,7 +28,7 @@ #include #include -#include +#include #include "stl.h" @@ -36,9 +36,9 @@ #error "SEEK_SET not defined" #endif -#ifndef BOOST_LITTLE_ENDIAN +#if BOOST_ENDIAN_BIG_BYTE extern void stl_internal_reverse_quads(char *buf, size_t cnt); -#endif /* BOOST_LITTLE_ENDIAN */ +#endif /* BOOST_ENDIAN_BIG_BYTE */ static FILE* stl_open_count_facets(stl_file *stl, const char *file) { @@ -89,10 +89,10 @@ static FILE* stl_open_count_facets(stl_file *stl, const char *file) // Read the int following the header. This should contain # of facets. uint32_t header_num_facets; bool header_num_faces_read = fread(&header_num_facets, sizeof(uint32_t), 1, fp) != 0; -#ifndef BOOST_LITTLE_ENDIAN +#if BOOST_ENDIAN_BIG_BYTE // Convert from little endian to big endian. stl_internal_reverse_quads((char*)&header_num_facets, 4); -#endif /* BOOST_LITTLE_ENDIAN */ +#endif /* BOOST_ENDIAN_BIG_BYTE */ if (! header_num_faces_read || num_facets != header_num_facets) BOOST_LOG_TRIVIAL(info) << "stl_open_count_facets: Warning: File size doesn't match number of facets in the header: " << file; } @@ -158,10 +158,10 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first) // Read a single facet from a binary .STL file. We assume little-endian architecture! if (fread(&facet, 1, SIZEOF_STL_FACET, fp) != SIZEOF_STL_FACET) return false; -#ifndef BOOST_LITTLE_ENDIAN +#if BOOST_ENDIAN_BIG_BYTE // Convert the loaded little endian data to big endian. stl_internal_reverse_quads((char*)&facet, 48); -#endif /* BOOST_LITTLE_ENDIAN */ +#endif /* BOOST_ENDIAN_BIG_BYTE */ } else { // Read a single facet from an ASCII .STL file // skip solid/endsolid diff --git a/src/clipper/clipper.cpp b/src/clipper/clipper.cpp index b85cf9025e..be4cb4a6a8 100644 --- a/src/clipper/clipper.cpp +++ b/src/clipper/clipper.cpp @@ -48,9 +48,19 @@ #include #include #include -#include #include +// Profiling support using the Shiny intrusive profiler +//#define CLIPPERLIB_PROFILE +#if defined(SLIC3R_PROFILE) && defined(CLIPPERLIB_PROFILE) + #include + #define CLIPPERLIB_PROFILE_FUNC() PROFILE_FUNC() + #define CLIPPERLIB_PROFILE_BLOCK(name) PROFILE_BLOCK(name) +#else + #define CLIPPERLIB_PROFILE_FUNC() + #define CLIPPERLIB_PROFILE_BLOCK(name) +#endif + #ifdef use_xyz namespace ClipperLib_Z { #else /* use_xyz */ @@ -263,7 +273,7 @@ int PointInPolygon (const IntPoint &pt, OutPt *op) // This is potentially very expensive! O(n^2)! bool Poly2ContainsPoly1(OutPt *OutPt1, OutPt *OutPt2) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); OutPt* op = OutPt1; do { @@ -714,7 +724,7 @@ TEdge* ClipperBase::ProcessBound(TEdge* E, bool NextIsForward) bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); // Remove duplicate end point from a closed input path. // Remove duplicate points from the end of the input path. int highI = (int)pg.size() -1; @@ -738,7 +748,7 @@ bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed) bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); std::vector num_edges(ppg.size(), 0); int num_edges_total = 0; for (size_t i = 0; i < ppg.size(); ++ i) { @@ -780,7 +790,7 @@ bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed) bool ClipperBase::AddPathInternal(const Path &pg, int highI, PolyType PolyTyp, bool Closed, TEdge* edges) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); #ifdef use_lines if (!Closed && PolyTyp == ptClip) throw clipperException("AddPath: Open paths must be subject."); @@ -954,7 +964,7 @@ bool ClipperBase::AddPathInternal(const Path &pg, int highI, PolyType PolyTyp, b void ClipperBase::Clear() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); m_MinimaList.clear(); m_edges.clear(); m_UseFullRange = false; @@ -966,7 +976,7 @@ void ClipperBase::Clear() // Sort the LML entries, initialize the left / right bound edges of each Local Minima. void ClipperBase::Reset() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); if (m_MinimaList.empty()) return; //ie nothing to process std::sort(m_MinimaList.begin(), m_MinimaList.end(), [](const LocalMinimum& lm1, const LocalMinimum& lm2){ return lm1.Y < lm2.Y; }); @@ -995,7 +1005,7 @@ void ClipperBase::Reset() // Returns (0,0,0,0) for an empty rectangle. IntRect ClipperBase::GetBounds() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); IntRect result; auto lm = m_MinimaList.begin(); if (lm == m_MinimaList.end()) @@ -1056,7 +1066,7 @@ Clipper::Clipper(int initOptions) : void Clipper::Reset() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); ClipperBase::Reset(); m_Scanbeam = std::priority_queue(); m_Maxima.clear(); @@ -1071,7 +1081,7 @@ void Clipper::Reset() bool Clipper::Execute(ClipType clipType, Paths &solution, PolyFillType subjFillType, PolyFillType clipFillType) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); if (m_HasOpenPaths) throw clipperException("Error: PolyTree struct is needed for open path clipping."); solution.resize(0); @@ -1089,7 +1099,7 @@ bool Clipper::Execute(ClipType clipType, Paths &solution, bool Clipper::Execute(ClipType clipType, PolyTree& polytree, PolyFillType subjFillType, PolyFillType clipFillType) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); m_SubjFillType = subjFillType; m_ClipFillType = clipFillType; m_ClipType = clipType; @@ -1103,10 +1113,10 @@ bool Clipper::Execute(ClipType clipType, PolyTree& polytree, bool Clipper::ExecuteInternal() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); bool succeeded = true; try { - PROFILE_BLOCK(Clipper_ExecuteInternal_Process); + CLIPPERLIB_PROFILE_BLOCK(Clipper_ExecuteInternal_Process); Reset(); if (m_MinimaList.empty()) return true; cInt botY = m_Scanbeam.top(); @@ -1131,13 +1141,13 @@ bool Clipper::ExecuteInternal() if (succeeded) { - PROFILE_BLOCK(Clipper_ExecuteInternal_Fix); + CLIPPERLIB_PROFILE_BLOCK(Clipper_ExecuteInternal_Fix); //fix orientations ... //FIXME Vojtech: Does it not invalidate the loop hierarchy maintained as OutRec::FirstLeft pointers? //FIXME Vojtech: The area is calculated with floats, it may not be numerically stable! { - PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_orientations); + CLIPPERLIB_PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_orientations); for (OutRec *outRec : m_PolyOuts) if (outRec->Pts && !outRec->IsOpen && (outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0)) ReversePolyPtLinks(outRec->Pts); @@ -1147,7 +1157,7 @@ bool Clipper::ExecuteInternal() //unfortunately FixupOutPolygon() must be done after JoinCommonEdges() { - PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_fixup); + CLIPPERLIB_PROFILE_BLOCK(Clipper_ExecuteInternal_Fix_fixup); for (OutRec *outRec : m_PolyOuts) if (outRec->Pts) { if (outRec->IsOpen) @@ -1401,7 +1411,7 @@ bool Clipper::IsContributing(const TEdge& edge) const // Called from Clipper::InsertLocalMinimaIntoAEL() and Clipper::IntersectEdges(). OutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); OutPt* result; TEdge *e, *prevE; if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx )) @@ -1493,7 +1503,7 @@ void Clipper::CopyAELToSEL() // Called from Clipper::ExecuteInternal() void Clipper::InsertLocalMinimaIntoAEL(const cInt botY) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); while (!m_MinimaList.empty() && m_MinimaList.back().Y == botY) { TEdge* lb = m_MinimaList.back().LeftBound; @@ -2043,7 +2053,7 @@ OutPt* Clipper::GetLastOutPt(TEdge *e) void Clipper::ProcessHorizontals() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); TEdge* horzEdge = m_SortedEdges; while(horzEdge) { @@ -2414,7 +2424,7 @@ void Clipper::UpdateEdgeIntoAEL(TEdge *&e) bool Clipper::ProcessIntersections(const cInt topY) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); if( !m_ActiveEdges ) return true; try { BuildIntersectList(topY); @@ -2569,7 +2579,7 @@ void Clipper::DoMaxima(TEdge *e) void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY) { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); TEdge* e = m_ActiveEdges; while( e ) { @@ -3177,7 +3187,7 @@ bool Clipper::JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2) // This is potentially very expensive! O(n^3)! void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) const { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); //tests if NewOutRec contains the polygon before reassigning FirstLeft for (OutRec *outRec : m_PolyOuts) { @@ -3201,7 +3211,7 @@ void Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) const void Clipper::JoinCommonEdges() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); for (Join &join : m_Joins) { OutRec *outRec1 = GetOutRec(join.OutPt1->Idx); @@ -3771,7 +3781,7 @@ void ClipperOffset::DoRound(int j, int k) // http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/Clipper/Properties/StrictlySimple.htm void Clipper::DoSimplePolygons() { - PROFILE_FUNC(); + CLIPPERLIB_PROFILE_FUNC(); size_t i = 0; while (i < m_PolyOuts.size()) { diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index d32f64aa4b..4a1d1faa0c 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -108,12 +108,19 @@ namespace ImGui const char ColorMarkerEnd = 0x3; // ETX // Special ASCII characters are used here as an ikons markers - const char PrintIconMarker = 0x4; - const char PrinterIconMarker = 0x5; - const char PrinterSlaIconMarker = 0x6; - const char FilamentIconMarker = 0x7; - const char MaterialIconMarker = 0x8; - + const char PrintIconMarker = 0x4; + const char PrinterIconMarker = 0x5; + const char PrinterSlaIconMarker = 0x6; + const char FilamentIconMarker = 0x7; + const char MaterialIconMarker = 0x8; + const char CloseIconMarker = 0xB; + const char CloseIconHoverMarker = 0xC; +// const char TimerDotMarker = 0xE; +// const char TimerDotEmptyMarker = 0xF; + const char MinimalizeMarker = 0xE; + const char MinimalizeHoverMarker = 0xF; + const char WarningMarker = 0x10; + const char ErrorMarker = 0x11; // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/libnest2d/LICENSE.txt b/src/libnest2d/LICENSE.txt index dba13ed2dd..07b1d92c0e 100644 --- a/src/libnest2d/LICENSE.txt +++ b/src/libnest2d/LICENSE.txt @@ -1,661 +1,165 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/src/libslic3r/AABBTreeIndirect.hpp b/src/libslic3r/AABBTreeIndirect.hpp index ec9b14a7ae..964133faae 100644 --- a/src/libslic3r/AABBTreeIndirect.hpp +++ b/src/libslic3r/AABBTreeIndirect.hpp @@ -283,7 +283,7 @@ namespace detail { template std::enable_if_t::value && std::is_same::value, bool> - intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W v2, double &t, double &u, double &v) { + intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W &v2, double &t, double &u, double &v) { return intersect_triangle1(const_cast(origin.data()), const_cast(dir.data()), const_cast(v0.data()), const_cast(v1.data()), const_cast(v2.data()), &t, &u, &v); @@ -291,7 +291,7 @@ namespace detail { template std::enable_if_t::value && !std::is_same::value, bool> - intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W v2, double &t, double &u, double &v) { + intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W &v2, double &t, double &u, double &v) { using Vector = Eigen::Matrix; Vector w0 = v0.template cast(); Vector w1 = v1.template cast(); @@ -302,7 +302,7 @@ namespace detail { template std::enable_if_t::value && std::is_same::value, bool> - intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W v2, double &t, double &u, double &v) { + intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W &v2, double &t, double &u, double &v) { using Vector = Eigen::Matrix; Vector o = origin.template cast(); Vector d = dir.template cast(); @@ -311,7 +311,7 @@ namespace detail { template std::enable_if_t::value && ! std::is_same::value, bool> - intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W v2, double &t, double &u, double &v) { + intersect_triangle(const V &origin, const V &dir, const W &v0, const W &v1, const W &v2, double &t, double &u, double &v) { using Vector = Eigen::Matrix; Vector o = origin.template cast(); Vector d = dir.template cast(); @@ -692,6 +692,40 @@ inline typename VectorType::Scalar squared_distance_to_indexed_triangle_set( detail::squared_distance_to_indexed_triangle_set_recursive(distancer, size_t(0), Scalar(0), std::numeric_limits::infinity(), hit_idx_out, hit_point_out); } +// Decides if exists some triangle in defined radius on a 3D indexed triangle set using a pre-built AABBTreeIndirect::Tree. +// Closest point to triangle test will be performed with the accuracy of VectorType::Scalar +// even if the triangle mesh and the AABB Tree are built with floats. +// Returns true if exists some triangle in defined radius, false otherwise. +template +inline bool is_any_triangle_in_radius( + // Indexed triangle set - 3D vertices. + const std::vector &vertices, + // Indexed triangle set - triangular faces, references to vertices. + const std::vector &faces, + // AABBTreeIndirect::Tree over vertices & faces, bounding boxes built with the accuracy of vertices. + const TreeType &tree, + // Point to which the closest point on the indexed triangle set is searched for. + const VectorType &point, + // Maximum distance in which triangle is search for + typename VectorType::Scalar &max_distance) +{ + using Scalar = typename VectorType::Scalar; + auto distancer = detail::IndexedTriangleSetDistancer + { vertices, faces, tree, point }; + + size_t hit_idx; + VectorType hit_point = VectorType::Ones() * (std::nan("")); + + if(tree.empty()) + { + return false; + } + + detail::squared_distance_to_indexed_triangle_set_recursive(distancer, size_t(0), Scalar(0), max_distance, hit_idx, hit_point); + + return hit_point.allFinite(); +} + } // namespace AABBTreeIndirect } // namespace Slic3r diff --git a/src/slic3r/GUI/AppConfig.cpp b/src/libslic3r/AppConfig.cpp similarity index 72% rename from src/slic3r/GUI/AppConfig.cpp rename to src/libslic3r/AppConfig.cpp index 93589e536e..db8176742b 100644 --- a/src/slic3r/GUI/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -1,6 +1,8 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" #include "AppConfig.hpp" +#include "Exception.hpp" +#include "Thread.hpp" #include #include @@ -15,8 +17,8 @@ #include #include -#include -#include "I18N.hpp" +//#include +//#include "I18N.hpp" namespace Slic3r { @@ -36,70 +38,102 @@ void AppConfig::reset() // Override missing or keys with their defaults. void AppConfig::set_defaults() { - // Reset the empty fields to defaults. - if (get("autocenter").empty()) - set("autocenter", "0"); - // Disable background processing by default as it is not stable. - if (get("background_processing").empty()) - set("background_processing", "0"); - // If set, the "Controller" tab for the control of the printer over serial line and the serial port settings are hidden. - // By default, Prusa has the controller hidden. - if (get("no_controller").empty()) - set("no_controller", "1"); - // If set, the "- default -" selections of print/filament/printer are suppressed, if there is a valid preset available. - if (get("no_defaults").empty()) - set("no_defaults", "1"); - if (get("show_incompatible_presets").empty()) - set("show_incompatible_presets", "0"); +#if ENABLE_GCODE_VIEWER + if (m_mode == EAppMode::Editor) { +#endif // ENABLE_GCODE_VIEWER + // Reset the empty fields to defaults. + if (get("autocenter").empty()) + set("autocenter", "0"); + // Disable background processing by default as it is not stable. + if (get("background_processing").empty()) + set("background_processing", "0"); + // If set, the "Controller" tab for the control of the printer over serial line and the serial port settings are hidden. + // By default, Prusa has the controller hidden. + if (get("no_controller").empty()) + set("no_controller", "1"); + // If set, the "- default -" selections of print/filament/printer are suppressed, if there is a valid preset available. + if (get("no_defaults").empty()) + set("no_defaults", "1"); + if (get("show_incompatible_presets").empty()) + set("show_incompatible_presets", "0"); - if (get("version_check").empty()) - set("version_check", "1"); - if (get("preset_update").empty()) - set("preset_update", "1"); + if (get("version_check").empty()) + set("version_check", "1"); + if (get("preset_update").empty()) + set("preset_update", "1"); - if (get("export_sources_full_pathnames").empty()) - set("export_sources_full_pathnames", "0"); + if (get("export_sources_full_pathnames").empty()) + set("export_sources_full_pathnames", "0"); - // remove old 'use_legacy_opengl' parameter from this config, if present - if (!get("use_legacy_opengl").empty()) - erase("", "use_legacy_opengl"); + // remove old 'use_legacy_opengl' parameter from this config, if present + if (!get("use_legacy_opengl").empty()) + erase("", "use_legacy_opengl"); #ifdef __APPLE__ - if (get("use_retina_opengl").empty()) - set("use_retina_opengl", "1"); + if (get("use_retina_opengl").empty()) + set("use_retina_opengl", "1"); #endif - if (get("single_instance").empty()) - set("single_instance", "0"); + if (get("single_instance").empty()) + set("single_instance", +#ifdef __APPLE__ + "1" +#else // __APPLE__ + "0" +#endif // __APPLE__ + ); - if (get("remember_output_path").empty()) - set("remember_output_path", "1"); + if (get("remember_output_path").empty()) + set("remember_output_path", "1"); - if (get("remember_output_path_removable").empty()) - set("remember_output_path_removable", "1"); + if (get("remember_output_path_removable").empty()) + set("remember_output_path_removable", "1"); - if (get("use_custom_toolbar_size").empty()) - set("use_custom_toolbar_size", "0"); + if (get("use_custom_toolbar_size").empty()) + set("use_custom_toolbar_size", "0"); - if (get("custom_toolbar_size").empty()) - set("custom_toolbar_size", "100"); + if (get("custom_toolbar_size").empty()) + set("custom_toolbar_size", "100"); - if (get("auto_toolbar_size").empty()) - set("auto_toolbar_size", "100"); + if (get("auto_toolbar_size").empty()) + set("auto_toolbar_size", "100"); + +#if !ENABLE_GCODE_VIEWER + if (get("use_perspective_camera").empty()) + set("use_perspective_camera", "1"); + + if (get("use_free_camera").empty()) + set("use_free_camera", "0"); +#endif // !ENABLE_GCODE_VIEWER + +#if ENABLE_ENVIRONMENT_MAP + if (get("use_environment_map").empty()) + set("use_environment_map", "0"); +#endif // ENABLE_ENVIRONMENT_MAP + + if (get("use_inches").empty()) + set("use_inches", "0"); +#if ENABLE_GCODE_VIEWER + } + + if (get("seq_top_layer_only").empty()) + set("seq_top_layer_only", "1"); if (get("use_perspective_camera").empty()) set("use_perspective_camera", "1"); if (get("use_free_camera").empty()) set("use_free_camera", "0"); +#endif // ENABLE_GCODE_VIEWER -#if ENABLE_ENVIRONMENT_MAP - if (get("use_environment_map").empty()) - set("use_environment_map", "0"); -#endif // ENABLE_ENVIRONMENT_MAP + if (get("show_splash_screen").empty()) + set("show_splash_screen", "1"); - if (get("use_inches").empty()) - set("use_inches", "0"); + if (get("default_action_on_close_application").empty()) + set("default_action_on_close_application", "none"); // , "discard" or "save" + + if (get("default_action_on_select_preset").empty()) + set("default_action_on_select_preset", "none"); // , "transfer", "discard" or "save" // Remove legacy window positions/sizes erase("", "main_frame_maximized"); @@ -110,7 +144,7 @@ void AppConfig::set_defaults() erase("", "object_settings_size"); } -void AppConfig::load() +std::string AppConfig::load() { // 1) Read the complete config file into a boost::property_tree. namespace pt = boost::property_tree; @@ -120,10 +154,15 @@ void AppConfig::load() pt::read_ini(ifs, tree); } catch (pt::ptree_error& ex) { // Error while parsing config file. We'll customize the error message and rethrow to be displayed. - throw std::runtime_error( + // ! But to avoid the use of _utf8 (related to use of wxWidgets) + // we will rethrow this exception from the place of load() call, if returned value wouldn't be empty + /* + throw Slic3r::RuntimeError( _utf8(L("Error parsing PrusaSlicer config file, it is probably corrupted. " "Try to manually delete the file to recover from the error. Your user profiles will not be affected.")) + "\n\n" + AppConfig::config_path() + "\n\n" + ex.what()); + */ + return ex.what(); } // 2) Parse the property_tree, extract the sections and key / value pairs. @@ -169,10 +208,17 @@ void AppConfig::load() // Override missing or keys with their defaults. this->set_defaults(); m_dirty = false; + return ""; } void AppConfig::save() { +#ifndef __APPLE__ + // Apple does not implement thread_getname_np() correctly. + if (get_current_thread_name() != "slic3r_main") + throw CriticalException("Calling AppConfig::save() from a worker thread!"); +#endif + // The config is first written to a file with a PID suffix and then moved // to avoid race conditions with multiple instances of Slic3r const auto path = config_path(); @@ -180,7 +226,14 @@ void AppConfig::save() boost::nowide::ofstream c; c.open(path_pid, std::ios::out | std::ios::trunc); +#if ENABLE_GCODE_VIEWER + if (m_mode == EAppMode::Editor) + c << "# " << Slic3r::header_slic3r_generated() << std::endl; + else + c << "# " << Slic3r::header_gcodeviewer_generated() << std::endl; +#else c << "# " << Slic3r::header_slic3r_generated() << std::endl; +#endif // ENABLE_GCODE_VIEWER // Make sure the "no" category is written first. for (const std::pair &kvp : m_storage[""]) c << kvp.first << " = " << kvp.second << std::endl; @@ -380,7 +433,15 @@ void AppConfig::reset_selections() std::string AppConfig::config_path() { - return (boost::filesystem::path(Slic3r::data_dir()) / (SLIC3R_APP_KEY ".ini")).make_preferred().string(); +#if ENABLE_GCODE_VIEWER + std::string path = (m_mode == EAppMode::Editor) ? + (boost::filesystem::path(Slic3r::data_dir()) / (SLIC3R_APP_KEY ".ini")).make_preferred().string() : + (boost::filesystem::path(Slic3r::data_dir()) / (GCODEVIEWER_APP_KEY ".ini")).make_preferred().string(); + + return path; +#else + return (boost::filesystem::path(Slic3r::data_dir()) / (SLIC3R_APP_KEY ".ini")).make_preferred().string(); +#endif // ENABLE_GCODE_VIEWER } std::string AppConfig::version_check_url() const @@ -391,7 +452,11 @@ std::string AppConfig::version_check_url() const bool AppConfig::exists() { +#if ENABLE_GCODE_VIEWER + return boost::filesystem::exists(config_path()); +#else return boost::filesystem::exists(AppConfig::config_path()); +#endif // ENABLE_GCODE_VIEWER } }; // namespace Slic3r diff --git a/src/slic3r/GUI/AppConfig.hpp b/src/libslic3r/AppConfig.hpp similarity index 93% rename from src/slic3r/GUI/AppConfig.hpp rename to src/libslic3r/AppConfig.hpp index 1e90d32e00..c5b8ece2b6 100644 --- a/src/slic3r/GUI/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -15,9 +15,22 @@ namespace Slic3r { class AppConfig { public: +#if ENABLE_GCODE_VIEWER + enum class EAppMode : unsigned char + { + Editor, + GCodeViewer + }; + + explicit AppConfig(EAppMode mode) : +#else AppConfig() : +#endif // ENABLE_GCODE_VIEWER m_dirty(false), m_orig_version(Semver::invalid()), +#if ENABLE_GCODE_VIEWER + m_mode(mode), +#endif // ENABLE_GCODE_VIEWER m_legacy_datadir(false) { this->reset(); @@ -29,7 +42,8 @@ public: void set_defaults(); // Load the slic3r.ini from a user profile directory (or a datadir, if configured). - void load(); + // return error string or empty strinf + std::string load(); // Store the slic3r.ini into a user profile directory (or a datadir, if configured). void save(); @@ -121,7 +135,11 @@ public: void reset_selections(); // Get the default config path from Slic3r::data_dir(). +#if ENABLE_GCODE_VIEWER + std::string config_path(); +#else static std::string config_path(); +#endif // ENABLE_GCODE_VIEWER // Returns true if the user's data directory comes from before Slic3r 1.40.0 (no updating) bool legacy_datadir() const { return m_legacy_datadir; } @@ -136,7 +154,11 @@ public: Semver orig_version() const { return m_orig_version; } // Does the config file exist? +#if ENABLE_GCODE_VIEWER + bool exists(); +#else static bool exists(); +#endif // ENABLE_GCODE_VIEWER std::vector get_recent_projects() const; void set_recent_projects(const std::vector& recent_projects); @@ -174,6 +196,10 @@ private: return true; } +#if ENABLE_GCODE_VIEWER + EAppMode m_mode { EAppMode::Editor }; +#endif // ENABLE_GCODE_VIEWER + // Map of section, name -> value std::map> m_storage; // Map of enabled vendors / models / variants diff --git a/src/libslic3r/BoundingBox.cpp b/src/libslic3r/BoundingBox.cpp index e3f9395092..eb4e042a08 100644 --- a/src/libslic3r/BoundingBox.cpp +++ b/src/libslic3r/BoundingBox.cpp @@ -75,6 +75,7 @@ BoundingBoxBase::merge(const PointClass &point) } } template void BoundingBoxBase::merge(const Point &point); +template void BoundingBoxBase::merge(const Vec2f &point); template void BoundingBoxBase::merge(const Vec2d &point); template void @@ -101,6 +102,7 @@ BoundingBoxBase::merge(const BoundingBoxBase &bb) } } template void BoundingBoxBase::merge(const BoundingBoxBase &bb); +template void BoundingBoxBase::merge(const BoundingBoxBase &bb); template void BoundingBoxBase::merge(const BoundingBoxBase &bb); template void @@ -115,6 +117,7 @@ BoundingBox3Base::merge(const PointClass &point) this->defined = true; } } +template void BoundingBox3Base::merge(const Vec3f &point); template void BoundingBox3Base::merge(const Vec3d &point); template void @@ -147,6 +150,7 @@ BoundingBoxBase::size() const return PointClass(this->max(0) - this->min(0), this->max(1) - this->min(1)); } template Point BoundingBoxBase::size() const; +template Vec2f BoundingBoxBase::size() const; template Vec2d BoundingBoxBase::size() const; template PointClass @@ -154,6 +158,7 @@ BoundingBox3Base::size() const { return PointClass(this->max(0) - this->min(0), this->max(1) - this->min(1), this->max(2) - this->min(2)); } +template Vec3f BoundingBox3Base::size() const; template Vec3d BoundingBox3Base::size() const; template double BoundingBoxBase::radius() const @@ -200,6 +205,7 @@ BoundingBoxBase::center() const return (this->min + this->max) / 2; } template Point BoundingBoxBase::center() const; +template Vec2f BoundingBoxBase::center() const; template Vec2d BoundingBoxBase::center() const; template PointClass @@ -207,6 +213,7 @@ BoundingBox3Base::center() const { return (this->min + this->max) / 2; } +template Vec3f BoundingBox3Base::center() const; template Vec3d BoundingBox3Base::center() const; template coordf_t @@ -215,6 +222,7 @@ BoundingBox3Base::max_size() const PointClass s = size(); return std::max(s(0), std::max(s(1), s(2))); } +template coordf_t BoundingBox3Base::max_size() const; template coordf_t BoundingBox3Base::max_size() const; // Align a coordinate to a grid. The coordinate may be negative, diff --git a/src/libslic3r/BoundingBox.hpp b/src/libslic3r/BoundingBox.hpp index f03733dd86..065476cb28 100644 --- a/src/libslic3r/BoundingBox.hpp +++ b/src/libslic3r/BoundingBox.hpp @@ -2,6 +2,7 @@ #define slic3r_BoundingBox_hpp_ #include "libslic3r.h" +#include "Exception.hpp" #include "Point.hpp" #include "Polygon.hpp" @@ -18,11 +19,13 @@ public: BoundingBoxBase() : min(PointClass::Zero()), max(PointClass::Zero()), defined(false) {} BoundingBoxBase(const PointClass &pmin, const PointClass &pmax) : min(pmin), max(pmax), defined(pmin(0) < pmax(0) && pmin(1) < pmax(1)) {} + BoundingBoxBase(const PointClass &p1, const PointClass &p2, const PointClass &p3) : + min(p1), max(p1), defined(false) { merge(p2); merge(p3); } BoundingBoxBase(const std::vector& points) : min(PointClass::Zero()), max(PointClass::Zero()) { if (points.empty()) { this->defined = false; - // throw std::invalid_argument("Empty point set supplied to BoundingBoxBase constructor"); + // throw Slic3r::InvalidArgument("Empty point set supplied to BoundingBoxBase constructor"); } else { typename std::vector::const_iterator it = points.begin(); this->min = *it; @@ -65,10 +68,12 @@ public: BoundingBox3Base(const PointClass &pmin, const PointClass &pmax) : BoundingBoxBase(pmin, pmax) { if (pmin(2) >= pmax(2)) BoundingBoxBase::defined = false; } + BoundingBox3Base(const PointClass &p1, const PointClass &p2, const PointClass &p3) : + BoundingBoxBase(p1, p1) { merge(p2); merge(p3); } BoundingBox3Base(const std::vector& points) { if (points.empty()) - throw std::invalid_argument("Empty point set supplied to BoundingBox3Base constructor"); + throw Slic3r::InvalidArgument("Empty point set supplied to BoundingBox3Base constructor"); typename std::vector::const_iterator it = points.begin(); this->min = *it; this->max = *it; @@ -109,24 +114,32 @@ extern template void BoundingBoxBase::scale(double factor); extern template void BoundingBoxBase::offset(coordf_t delta); extern template void BoundingBoxBase::offset(coordf_t delta); extern template void BoundingBoxBase::merge(const Point &point); +extern template void BoundingBoxBase::merge(const Vec2f &point); extern template void BoundingBoxBase::merge(const Vec2d &point); extern template void BoundingBoxBase::merge(const Points &points); extern template void BoundingBoxBase::merge(const Pointfs &points); extern template void BoundingBoxBase::merge(const BoundingBoxBase &bb); +extern template void BoundingBoxBase::merge(const BoundingBoxBase &bb); extern template void BoundingBoxBase::merge(const BoundingBoxBase &bb); extern template Point BoundingBoxBase::size() const; +extern template Vec2f BoundingBoxBase::size() const; extern template Vec2d BoundingBoxBase::size() const; extern template double BoundingBoxBase::radius() const; extern template double BoundingBoxBase::radius() const; extern template Point BoundingBoxBase::center() const; +extern template Vec2f BoundingBoxBase::center() const; extern template Vec2d BoundingBoxBase::center() const; +extern template void BoundingBox3Base::merge(const Vec3f &point); extern template void BoundingBox3Base::merge(const Vec3d &point); extern template void BoundingBox3Base::merge(const Pointf3s &points); extern template void BoundingBox3Base::merge(const BoundingBox3Base &bb); +extern template Vec3f BoundingBox3Base::size() const; extern template Vec3d BoundingBox3Base::size() const; extern template double BoundingBox3Base::radius() const; extern template void BoundingBox3Base::offset(coordf_t delta); +extern template Vec3f BoundingBox3Base::center() const; extern template Vec3d BoundingBox3Base::center() const; +extern template coordf_t BoundingBox3Base::max_size() const; extern template coordf_t BoundingBox3Base::max_size() const; class BoundingBox : public BoundingBoxBase @@ -192,6 +205,20 @@ inline BoundingBox3 scaled(const BoundingBoxf3 &bb) { return {scaled(bb.min), sc inline BoundingBoxf unscaled(const BoundingBox &bb) { return {unscaled(bb.min), unscaled(bb.max)}; } inline BoundingBoxf3 unscaled(const BoundingBox3 &bb) { return {unscaled(bb.min), unscaled(bb.max)}; } +template +auto cast(const BoundingBoxBase &b) +{ + return BoundingBoxBase>{b.min.template cast(), + b.max.template cast()}; +} + +template +auto cast(const BoundingBox3Base &b) +{ + return BoundingBox3Base>{b.min.template cast(), + b.max.template cast()}; +} + } // namespace Slic3r // Serialization through the Cereal library diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 881466b399..9b9e8618ae 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -1,5 +1,5 @@ project(libslic3r) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.13) include(PrecompiledHeader) @@ -46,6 +46,8 @@ add_library(libslic3r STATIC Fill/Fill.hpp Fill/Fill3DHoneycomb.cpp Fill/Fill3DHoneycomb.hpp + Fill/FillAdaptive.cpp + Fill/FillAdaptive.hpp Fill/FillBase.cpp Fill/FillBase.hpp Fill/FillConcentric.cpp @@ -95,10 +97,14 @@ add_library(libslic3r STATIC GCode/PrintExtents.hpp GCode/SpiralVase.cpp GCode/SpiralVase.hpp + GCode/SeamPlacer.cpp + GCode/SeamPlacer.hpp GCode/ToolOrdering.cpp GCode/ToolOrdering.hpp GCode/WipeTower.cpp GCode/WipeTower.hpp + GCode/GCodeProcessor.cpp + GCode/GCodeProcessor.hpp GCode.cpp GCode.hpp GCodeReader.cpp @@ -147,6 +153,12 @@ add_library(libslic3r STATIC PolygonTrimmer.hpp Polyline.cpp Polyline.hpp + Preset.cpp + Preset.hpp + PresetBundle.cpp + PresetBundle.hpp + AppConfig.cpp + AppConfig.hpp Print.cpp Print.hpp PrintBase.cpp @@ -155,6 +167,8 @@ add_library(libslic3r STATIC PrintConfig.hpp PrintObject.cpp PrintRegion.cpp + PNGRead.hpp + PNGRead.cpp Semver.cpp ShortestPath.cpp ShortestPath.hpp @@ -187,6 +201,10 @@ add_library(libslic3r STATIC Utils.hpp Time.cpp Time.hpp + Thread.cpp + Thread.hpp + TriangleSelector.cpp + TriangleSelector.hpp MTUtils.hpp VoronoiOffset.cpp VoronoiOffset.hpp @@ -201,12 +219,15 @@ add_library(libslic3r STATIC SimplifyMeshImpl.hpp SimplifyMesh.cpp MarchingSquares.hpp + Optimize/Optimizer.hpp + Optimize/NLoptOptimizer.hpp + Optimize/BruteforceOptimizer.hpp ${OpenVDBUtils_SOURCES} - SLA/Common.hpp - SLA/Common.cpp SLA/Pad.hpp SLA/Pad.cpp SLA/SupportTreeBuilder.hpp + SLA/SupportTreeMesher.hpp + SLA/SupportTreeMesher.cpp SLA/SupportTreeBuildsteps.hpp SLA/SupportTreeBuildsteps.cpp SLA/SupportTreeBuilder.cpp @@ -218,6 +239,7 @@ add_library(libslic3r STATIC SLA/Rotfinder.cpp SLA/BoostAdapter.hpp SLA/SpatIndex.hpp + SLA/SpatIndex.cpp SLA/RasterBase.hpp SLA/RasterBase.cpp SLA/AGGRaster.hpp @@ -233,8 +255,10 @@ add_library(libslic3r STATIC SLA/SupportPointGenerator.cpp SLA/Contour3D.hpp SLA/Contour3D.cpp - SLA/EigenMesh3D.hpp + SLA/IndexedMesh.hpp + SLA/IndexedMesh.cpp SLA/Clustering.hpp + SLA/Clustering.cpp SLA/ReprojectPointsOnMesh.hpp ) @@ -296,6 +320,8 @@ target_link_libraries(libslic3r TBB::tbb libslic3r_cgal ${CMAKE_DL_LIBS} + PNG::PNG + ZLIB::ZLIB ) if (TARGET OpenVDB::openvdb) diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index d40d79b3d8..16d985e9c9 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -8,7 +8,16 @@ #include "SVG.hpp" #endif /* CLIPPER_UTILS_DEBUG */ -#include +// Profiling support using the Shiny intrusive profiler +//#define CLIPPER_UTILS_PROFILE +#if defined(SLIC3R_PROFILE) && defined(CLIPPER_UTILS_PROFILE) + #include + #define CLIPPERUTILS_PROFILE_FUNC() PROFILE_FUNC() + #define CLIPPERUTILS_PROFILE_BLOCK(name) PROFILE_BLOCK(name) +#else + #define CLIPPERUTILS_PROFILE_FUNC() + #define CLIPPERUTILS_PROFILE_BLOCK(name) +#endif #define CLIPPER_OFFSET_SHORTEST_EDGE_FACTOR (0.005f) @@ -50,7 +59,7 @@ err: void scaleClipperPolygon(ClipperLib::Path &polygon) { - PROFILE_FUNC(); + CLIPPERUTILS_PROFILE_FUNC(); for (ClipperLib::Path::iterator pit = polygon.begin(); pit != polygon.end(); ++pit) { pit->X <<= CLIPPER_OFFSET_POWER_OF_2; pit->Y <<= CLIPPER_OFFSET_POWER_OF_2; @@ -59,7 +68,7 @@ void scaleClipperPolygon(ClipperLib::Path &polygon) void scaleClipperPolygons(ClipperLib::Paths &polygons) { - PROFILE_FUNC(); + CLIPPERUTILS_PROFILE_FUNC(); for (ClipperLib::Paths::iterator it = polygons.begin(); it != polygons.end(); ++it) for (ClipperLib::Path::iterator pit = (*it).begin(); pit != (*it).end(); ++pit) { pit->X <<= CLIPPER_OFFSET_POWER_OF_2; @@ -69,7 +78,7 @@ void scaleClipperPolygons(ClipperLib::Paths &polygons) void unscaleClipperPolygon(ClipperLib::Path &polygon) { - PROFILE_FUNC(); + CLIPPERUTILS_PROFILE_FUNC(); for (ClipperLib::Path::iterator pit = polygon.begin(); pit != polygon.end(); ++pit) { pit->X += CLIPPER_OFFSET_SCALE_ROUNDING_DELTA; pit->Y += CLIPPER_OFFSET_SCALE_ROUNDING_DELTA; @@ -80,7 +89,7 @@ void unscaleClipperPolygon(ClipperLib::Path &polygon) void unscaleClipperPolygons(ClipperLib::Paths &polygons) { - PROFILE_FUNC(); + CLIPPERUTILS_PROFILE_FUNC(); for (ClipperLib::Paths::iterator it = polygons.begin(); it != polygons.end(); ++it) for (ClipperLib::Path::iterator pit = (*it).begin(); pit != (*it).end(); ++pit) { pit->X += CLIPPER_OFFSET_SCALE_ROUNDING_DELTA; @@ -790,7 +799,7 @@ ExPolygons simplify_polygons_ex(const Polygons &subject, bool preserve_collinear void safety_offset(ClipperLib::Paths* paths) { - PROFILE_FUNC(); + CLIPPERUTILS_PROFILE_FUNC(); // scale input scaleClipperPolygons(*paths); @@ -812,11 +821,11 @@ void safety_offset(ClipperLib::Paths* paths) if (! ccw) std::reverse(path.begin(), path.end()); { - PROFILE_BLOCK(safety_offset_AddPaths); + CLIPPERUTILS_PROFILE_BLOCK(safety_offset_AddPaths); co.AddPath((*paths)[i], ClipperLib::jtMiter, ClipperLib::etClosedPolygon); } { - PROFILE_BLOCK(safety_offset_Execute); + CLIPPERUTILS_PROFILE_BLOCK(safety_offset_Execute); // offset outside by 10um ClipperLib::Paths out_this; co.Execute(out_this, ccw ? 10.f * float(CLIPPER_OFFSET_SCALE) : -10.f * float(CLIPPER_OFFSET_SCALE)); diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index f3f365b478..25ef93430f 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -5,7 +5,6 @@ #include #include #include -#include // std::runtime_error #include #include #include @@ -218,7 +217,7 @@ ConfigOption* ConfigOptionDef::create_empty_option() const case coInts: return new ConfigOptionIntsNullable(); case coPercents: return new ConfigOptionPercentsNullable(); case coBools: return new ConfigOptionBoolsNullable(); - default: throw std::runtime_error(std::string("Unknown option type for nullable option ") + this->label); + default: throw Slic3r::RuntimeError(std::string("Unknown option type for nullable option ") + this->label); } } else { switch (this->type) { @@ -238,7 +237,7 @@ ConfigOption* ConfigOptionDef::create_empty_option() const case coBool: return new ConfigOptionBool(); case coBools: return new ConfigOptionBools(); case coEnum: return new ConfigOptionEnumGeneric(this->enum_keys_map); - default: throw std::runtime_error(std::string("Unknown option type for option ") + this->label); + default: throw Slic3r::RuntimeError(std::string("Unknown option type for option ") + this->label); } } } @@ -535,7 +534,7 @@ double ConfigBase::get_abs_value(const t_config_option_key &opt_key) const return opt_def->ratio_over.empty() ? 0. : static_cast(raw_opt)->get_abs_value(this->get_abs_value(opt_def->ratio_over)); } - throw std::runtime_error("ConfigBase::get_abs_value(): Not a valid option type for get_abs_value()"); + throw Slic3r::RuntimeError("ConfigBase::get_abs_value(): Not a valid option type for get_abs_value()"); } // Return an absolute value of a possibly relative config variable. @@ -546,7 +545,7 @@ double ConfigBase::get_abs_value(const t_config_option_key &opt_key, double rati const ConfigOption *raw_opt = this->option(opt_key); assert(raw_opt != nullptr); if (raw_opt->type() != coFloatOrPercent) - throw std::runtime_error("ConfigBase::get_abs_value(): opt_key is not of coFloatOrPercent"); + throw Slic3r::RuntimeError("ConfigBase::get_abs_value(): opt_key is not of coFloatOrPercent"); // Compute absolute value. return static_cast(raw_opt)->get_abs_value(ratio_over); } @@ -609,7 +608,7 @@ void ConfigBase::load_from_gcode_file(const std::string &file) std::getline(ifs, firstline); if (strncmp(slic3r_gcode_header, firstline.c_str(), strlen(slic3r_gcode_header)) != 0 && strncmp(prusaslicer_gcode_header, firstline.c_str(), strlen(prusaslicer_gcode_header)) != 0) - throw std::runtime_error("Not a PrusaSlicer / Slic3r PE generated g-code."); + throw Slic3r::RuntimeError("Not a PrusaSlicer / Slic3r PE generated g-code."); } ifs.seekg(0, ifs.end); auto file_length = ifs.tellg(); @@ -621,7 +620,7 @@ void ConfigBase::load_from_gcode_file(const std::string &file) size_t key_value_pairs = load_from_gcode_string(data.data()); if (key_value_pairs < 80) - throw std::runtime_error(format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs)); + throw Slic3r::RuntimeError(format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs)); } // Load the config keys from the given string. @@ -750,7 +749,7 @@ ConfigOption* DynamicConfig::optptr(const t_config_option_key &opt_key, bool cre throw NoDefinitionException(opt_key); const ConfigOptionDef *optdef = def->get(opt_key); if (optdef == nullptr) -// throw std::runtime_error(std::string("Invalid option name: ") + opt_key); +// throw Slic3r::RuntimeError(std::string("Invalid option name: ") + opt_key); // Let the parent decide what to do if the opt_key is not defined by this->def(). return nullptr; ConfigOption *opt = optdef->create_default_option(); diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 87e0208986..d683e55b8c 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -13,6 +13,7 @@ #include #include "libslic3r.h" #include "clonable_ptr.hpp" +#include "Exception.hpp" #include "Point.hpp" #include @@ -34,31 +35,31 @@ extern bool unescape_string_cstyle(const std::string &str, std::string & extern bool unescape_strings_cstyle(const std::string &str, std::vector &out); /// Specialization of std::exception to indicate that an unknown config option has been encountered. -class UnknownOptionException : public std::runtime_error { +class UnknownOptionException : public Slic3r::RuntimeError { public: UnknownOptionException() : - std::runtime_error("Unknown option exception") {} + Slic3r::RuntimeError("Unknown option exception") {} UnknownOptionException(const std::string &opt_key) : - std::runtime_error(std::string("Unknown option exception: ") + opt_key) {} + Slic3r::RuntimeError(std::string("Unknown option exception: ") + opt_key) {} }; /// Indicate that the ConfigBase derived class does not provide config definition (the method def() returns null). -class NoDefinitionException : public std::runtime_error +class NoDefinitionException : public Slic3r::RuntimeError { public: NoDefinitionException() : - std::runtime_error("No definition exception") {} + Slic3r::RuntimeError("No definition exception") {} NoDefinitionException(const std::string &opt_key) : - std::runtime_error(std::string("No definition exception: ") + opt_key) {} + Slic3r::RuntimeError(std::string("No definition exception: ") + opt_key) {} }; /// Indicate that an unsupported accessor was called on a config option. -class BadOptionTypeException : public std::runtime_error +class BadOptionTypeException : public Slic3r::RuntimeError { public: - BadOptionTypeException() : std::runtime_error("Bad option type exception") {} - BadOptionTypeException(const std::string &message) : std::runtime_error(message) {} - BadOptionTypeException(const char* message) : std::runtime_error(message) {} + BadOptionTypeException() : Slic3r::RuntimeError("Bad option type exception") {} + BadOptionTypeException(const std::string &message) : Slic3r::RuntimeError(message) {} + BadOptionTypeException(const char* message) : Slic3r::RuntimeError(message) {} }; // Type of a configuration value. @@ -167,7 +168,7 @@ public: void set(const ConfigOption *rhs) override { if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionSingle: Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionSingle: Assigning an incompatible type"); assert(dynamic_cast*>(rhs)); this->value = static_cast*>(rhs)->value; } @@ -175,7 +176,7 @@ public: bool operator==(const ConfigOption &rhs) const override { if (rhs.type() != this->type()) - throw std::runtime_error("ConfigOptionSingle: Comparing incompatible types"); + throw Slic3r::RuntimeError("ConfigOptionSingle: Comparing incompatible types"); assert(dynamic_cast*>(&rhs)); return this->value == static_cast*>(&rhs)->value; } @@ -239,7 +240,7 @@ public: void set(const ConfigOption *rhs) override { if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionVector: Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionVector: Assigning an incompatible type"); assert(dynamic_cast*>(rhs)); this->values = static_cast*>(rhs)->values; } @@ -256,12 +257,12 @@ public: if (opt->type() == this->type()) { auto other = static_cast*>(opt); if (other->values.empty()) - throw std::runtime_error("ConfigOptionVector::set(): Assigning from an empty vector"); + throw Slic3r::RuntimeError("ConfigOptionVector::set(): Assigning from an empty vector"); this->values.emplace_back(other->values.front()); } else if (opt->type() == this->scalar_type()) this->values.emplace_back(static_cast*>(opt)->value); else - throw std::runtime_error("ConfigOptionVector::set():: Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionVector::set():: Assigning an incompatible type"); } } @@ -280,12 +281,12 @@ public: // Assign the first value of the rhs vector. auto other = static_cast*>(rhs); if (other->values.empty()) - throw std::runtime_error("ConfigOptionVector::set_at(): Assigning from an empty vector"); + throw Slic3r::RuntimeError("ConfigOptionVector::set_at(): Assigning from an empty vector"); this->values[i] = other->get_at(j); } else if (rhs->type() == this->scalar_type()) this->values[i] = static_cast*>(rhs)->value; else - throw std::runtime_error("ConfigOptionVector::set_at(): Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionVector::set_at(): Assigning an incompatible type"); } const T& get_at(size_t i) const @@ -310,9 +311,9 @@ public: else if (n > this->values.size()) { if (this->values.empty()) { if (opt_default == nullptr) - throw std::runtime_error("ConfigOptionVector::resize(): No default value provided."); + throw Slic3r::RuntimeError("ConfigOptionVector::resize(): No default value provided."); if (opt_default->type() != this->type()) - throw std::runtime_error("ConfigOptionVector::resize(): Extending with an incompatible type."); + throw Slic3r::RuntimeError("ConfigOptionVector::resize(): Extending with an incompatible type."); this->values.resize(n, static_cast*>(opt_default)->values.front()); } else { // Resize by duplicating the last value. @@ -329,7 +330,7 @@ public: bool operator==(const ConfigOption &rhs) const override { if (rhs.type() != this->type()) - throw std::runtime_error("ConfigOptionVector: Comparing incompatible types"); + throw Slic3r::RuntimeError("ConfigOptionVector: Comparing incompatible types"); assert(dynamic_cast*>(&rhs)); return this->values == static_cast*>(&rhs)->values; } @@ -341,9 +342,9 @@ public: // An option overrides another option if it is not nil and not equal. bool overriden_by(const ConfigOption *rhs) const override { if (this->nullable()) - throw std::runtime_error("Cannot override a nullable ConfigOption."); + throw Slic3r::RuntimeError("Cannot override a nullable ConfigOption."); if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionVector.overriden_by() applied to different types."); + throw Slic3r::RuntimeError("ConfigOptionVector.overriden_by() applied to different types."); auto rhs_vec = static_cast*>(rhs); if (! rhs->nullable()) // Overridding a non-nullable object with another non-nullable object. @@ -361,9 +362,9 @@ public: // Apply an override option, possibly a nullable one. bool apply_override(const ConfigOption *rhs) override { if (this->nullable()) - throw std::runtime_error("Cannot override a nullable ConfigOption."); + throw Slic3r::RuntimeError("Cannot override a nullable ConfigOption."); if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionVector.apply_override() applied to different types."); + throw Slic3r::RuntimeError("ConfigOptionVector.apply_override() applied to different types."); auto rhs_vec = static_cast*>(rhs); if (! rhs->nullable()) { // Overridding a non-nullable object with another non-nullable object. @@ -452,7 +453,7 @@ public: bool operator==(const ConfigOptionFloatsTempl &rhs) const { return vectors_equal(this->values, rhs.values); } bool operator==(const ConfigOption &rhs) const override { if (rhs.type() != this->type()) - throw std::runtime_error("ConfigOptionFloatsTempl: Comparing incompatible types"); + throw Slic3r::RuntimeError("ConfigOptionFloatsTempl: Comparing incompatible types"); assert(dynamic_cast*>(&rhs)); return vectors_equal(this->values, static_cast*>(&rhs)->values); } @@ -499,7 +500,7 @@ public: if (NULLABLE) this->values.push_back(nil_value()); else - throw std::runtime_error("Deserializing nil into a non-nullable object"); + throw Slic3r::RuntimeError("Deserializing nil into a non-nullable object"); } else { std::istringstream iss(item_str); double value; @@ -524,9 +525,9 @@ protected: if (NULLABLE) ss << "nil"; else - throw std::runtime_error("Serializing NaN"); + throw Slic3r::RuntimeError("Serializing NaN"); } else - throw std::runtime_error("Serializing invalid number"); + throw Slic3r::RuntimeError("Serializing invalid number"); } static bool vectors_equal(const std::vector &v1, const std::vector &v2) { if (NULLABLE) { @@ -645,7 +646,7 @@ public: if (NULLABLE) this->values.push_back(nil_value()); else - throw std::runtime_error("Deserializing nil into a non-nullable object"); + throw Slic3r::RuntimeError("Deserializing nil into a non-nullable object"); } else { std::istringstream iss(item_str); int value; @@ -662,7 +663,7 @@ private: if (NULLABLE) ss << "nil"; else - throw std::runtime_error("Serializing NaN"); + throw Slic3r::RuntimeError("Serializing NaN"); } else ss << v; } @@ -847,7 +848,7 @@ public: bool operator==(const ConfigOption &rhs) const override { if (rhs.type() != this->type()) - throw std::runtime_error("ConfigOptionFloatOrPercent: Comparing incompatible types"); + throw Slic3r::RuntimeError("ConfigOptionFloatOrPercent: Comparing incompatible types"); assert(dynamic_cast(&rhs)); return *this == *static_cast(&rhs); } @@ -858,7 +859,7 @@ public: void set(const ConfigOption *rhs) override { if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionFloatOrPercent: Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionFloatOrPercent: Assigning an incompatible type"); assert(dynamic_cast(rhs)); *this = *static_cast(rhs); } @@ -1126,7 +1127,7 @@ public: if (NULLABLE) this->values.push_back(nil_value()); else - throw std::runtime_error("Deserializing nil into a non-nullable object"); + throw Slic3r::RuntimeError("Deserializing nil into a non-nullable object"); } else this->values.push_back(item_str.compare("1") == 0); } @@ -1139,7 +1140,7 @@ protected: if (NULLABLE) ss << "nil"; else - throw std::runtime_error("Serializing NaN"); + throw Slic3r::RuntimeError("Serializing NaN"); } else ss << (v ? "1" : "0"); } @@ -1175,14 +1176,14 @@ public: bool operator==(const ConfigOption &rhs) const override { if (rhs.type() != this->type()) - throw std::runtime_error("ConfigOptionEnum: Comparing incompatible types"); + throw Slic3r::RuntimeError("ConfigOptionEnum: Comparing incompatible types"); // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum return this->value == (T)rhs.getInt(); } void set(const ConfigOption *rhs) override { if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionEnum: Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionEnum: Assigning an incompatible type"); // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum this->value = (T)rhs->getInt(); } @@ -1259,14 +1260,14 @@ public: bool operator==(const ConfigOption &rhs) const override { if (rhs.type() != this->type()) - throw std::runtime_error("ConfigOptionEnumGeneric: Comparing incompatible types"); + throw Slic3r::RuntimeError("ConfigOptionEnumGeneric: Comparing incompatible types"); // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum return this->value == rhs.getInt(); } void set(const ConfigOption *rhs) override { if (rhs->type() != this->type()) - throw std::runtime_error("ConfigOptionEnumGeneric: Assigning an incompatible type"); + throw Slic3r::RuntimeError("ConfigOptionEnumGeneric: Assigning an incompatible type"); // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum this->value = rhs->getInt(); } @@ -1321,7 +1322,7 @@ public: case coInts: { auto opt = new ConfigOptionIntsNullable(); archive(*opt); return opt; } case coPercents: { auto opt = new ConfigOptionPercentsNullable();archive(*opt); return opt; } case coBools: { auto opt = new ConfigOptionBoolsNullable(); archive(*opt); return opt; } - default: throw std::runtime_error(std::string("ConfigOptionDef::load_option_from_archive(): Unknown nullable option type for option ") + this->opt_key); + default: throw Slic3r::RuntimeError(std::string("ConfigOptionDef::load_option_from_archive(): Unknown nullable option type for option ") + this->opt_key); } } else { switch (this->type) { @@ -1340,7 +1341,7 @@ public: case coBool: { auto opt = new ConfigOptionBool(); archive(*opt); return opt; } case coBools: { auto opt = new ConfigOptionBools(); archive(*opt); return opt; } case coEnum: { auto opt = new ConfigOptionEnumGeneric(this->enum_keys_map); archive(*opt); return opt; } - default: throw std::runtime_error(std::string("ConfigOptionDef::load_option_from_archive(): Unknown option type for option ") + this->opt_key); + default: throw Slic3r::RuntimeError(std::string("ConfigOptionDef::load_option_from_archive(): Unknown option type for option ") + this->opt_key); } } } @@ -1352,7 +1353,7 @@ public: case coInts: archive(*static_cast(opt)); break; case coPercents: archive(*static_cast(opt));break; case coBools: archive(*static_cast(opt)); break; - default: throw std::runtime_error(std::string("ConfigOptionDef::save_option_to_archive(): Unknown nullable option type for option ") + this->opt_key); + default: throw Slic3r::RuntimeError(std::string("ConfigOptionDef::save_option_to_archive(): Unknown nullable option type for option ") + this->opt_key); } } else { switch (this->type) { @@ -1371,7 +1372,7 @@ public: case coBool: archive(*static_cast(opt)); break; case coBools: archive(*static_cast(opt)); break; case coEnum: archive(*static_cast(opt)); break; - default: throw std::runtime_error(std::string("ConfigOptionDef::save_option_to_archive(): Unknown option type for option ") + this->opt_key); + default: throw Slic3r::RuntimeError(std::string("ConfigOptionDef::save_option_to_archive(): Unknown option type for option ") + this->opt_key); } } // Make the compiler happy, shut up the warnings. @@ -1413,6 +1414,8 @@ public: bool multiline = false; // For text input: If true, the GUI text box spans the complete page width. bool full_width = false; + // For text input: If true, the GUI formats text as code (fixed-width) + bool is_code = false; // Not editable. Currently only used for the display of the number of threads. bool readonly = false; // Height of a multiline GUI text box. diff --git a/src/libslic3r/CustomGCode.cpp b/src/libslic3r/CustomGCode.cpp index ba1890a1ff..fb4f69d06a 100644 --- a/src/libslic3r/CustomGCode.cpp +++ b/src/libslic3r/CustomGCode.cpp @@ -1,6 +1,10 @@ #include "CustomGCode.hpp" #include "Config.hpp" +#if ENABLE_GCODE_VIEWER +#include "GCode.hpp" +#else #include "GCode/PreviewData.hpp" +#endif // ENABLE_GCODE_VIEWER #include "GCodeWriter.hpp" namespace Slic3r { @@ -17,8 +21,12 @@ extern void update_custom_gcode_per_print_z_from_config(Info& info, DynamicPrint return; if (info.gcodes.empty() && ! colorprint_heights->values.empty()) { // Convert the old colorprint_heighs only if there is no equivalent data in a new format. - const std::vector& colors = GCodePreviewData::ColorPrintColors(); - const auto& colorprint_values = colorprint_heights->values; +#if ENABLE_GCODE_VIEWER + const std::vector& colors = ColorPrintColors::get(); +#else + const std::vector& colors = GCodePreviewData::ColorPrintColors(); +#endif // ENABLE_GCODE_VIEWER + const auto& colorprint_values = colorprint_heights->values; info.gcodes.clear(); info.gcodes.reserve(colorprint_values.size()); int i = 0; diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp index daaab47555..5bdd5055ec 100644 --- a/src/libslic3r/ExPolygon.cpp +++ b/src/libslic3r/ExPolygon.cpp @@ -1,5 +1,6 @@ #include "BoundingBox.hpp" #include "ExPolygon.hpp" +#include "Exception.hpp" #include "Geometry.hpp" #include "Polygon.hpp" #include "Line.hpp" @@ -435,7 +436,7 @@ void ExPolygon::triangulate_pp(Polygons* polygons) const std::list output; int res = TPPLPartition().Triangulate_MONO(&input, &output); if (res != 1) - throw std::runtime_error("Triangulation failed"); + throw Slic3r::RuntimeError("Triangulation failed"); // convert output polygons for (std::list::iterator poly = output.begin(); poly != output.end(); ++poly) { @@ -548,7 +549,7 @@ void ExPolygon::triangulate_pp(Points *triangles) const int res = TPPLPartition().Triangulate_MONO(&input, &output); // int TPPLPartition::Triangulate_EC(TPPLPolyList *inpolys, TPPLPolyList *triangles) { if (res != 1) - throw std::runtime_error("Triangulation failed"); + throw Slic3r::RuntimeError("Triangulation failed"); *triangles = polypartition_output_to_triangles(output); } @@ -591,7 +592,7 @@ void ExPolygon::triangulate_p2t(Polygons* polygons) const } polygons->push_back(p); } - } catch (const std::runtime_error & /* err */) { + } catch (const Slic3r::RuntimeError & /* err */) { assert(false); // just ignore, don't triangulate } diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp index 4aad3603fc..373853f972 100644 --- a/src/libslic3r/ExPolygon.hpp +++ b/src/libslic3r/ExPolygon.hpp @@ -333,6 +333,14 @@ extern std::list expoly_to_polypartition_input(const ExPolygons &expp) extern std::list expoly_to_polypartition_input(const ExPolygon &ex); extern std::vector polypartition_output_to_triangles(const std::list &output); +inline double area(const ExPolygons &polys) +{ + double s = 0.; + for (auto &p : polys) s += p.area(); + + return s; +} + } // namespace Slic3r // start Boost diff --git a/src/libslic3r/Exception.hpp b/src/libslic3r/Exception.hpp new file mode 100644 index 0000000000..8ec9f20c81 --- /dev/null +++ b/src/libslic3r/Exception.hpp @@ -0,0 +1,28 @@ +#ifndef _libslic3r_Exception_h_ +#define _libslic3r_Exception_h_ + +#include + +namespace Slic3r { + +// PrusaSlicer's own exception hierarchy is derived from std::runtime_error. +// Base for Slicer's own exceptions. +class Exception : public std::runtime_error { using std::runtime_error::runtime_error; }; +#define SLIC3R_DERIVE_EXCEPTION(DERIVED_EXCEPTION, PARENT_EXCEPTION) \ + class DERIVED_EXCEPTION : public PARENT_EXCEPTION { using PARENT_EXCEPTION::PARENT_EXCEPTION; } +// Critical exception produced by Slicer, such exception shall never propagate up to the UI thread. +// If that happens, an ugly fat message box with an ugly fat exclamation mark is displayed. +SLIC3R_DERIVE_EXCEPTION(CriticalException, Exception); +SLIC3R_DERIVE_EXCEPTION(RuntimeError, CriticalException); +SLIC3R_DERIVE_EXCEPTION(LogicError, CriticalException); +SLIC3R_DERIVE_EXCEPTION(InvalidArgument, LogicError); +SLIC3R_DERIVE_EXCEPTION(OutOfRange, LogicError); +SLIC3R_DERIVE_EXCEPTION(IOError, CriticalException); +SLIC3R_DERIVE_EXCEPTION(FileIOError, IOError); +// Runtime exception produced by Slicer. Such exception cancels the slicing process and it shall be shown in notifications. +SLIC3R_DERIVE_EXCEPTION(SlicingError, Exception); +#undef SLIC3R_DERIVE_EXCEPTION + +} // namespace Slic3r + +#endif // _libslic3r_Exception_h_ diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index 69b3a6455d..b2c5e1350f 100644 --- a/src/libslic3r/ExtrusionEntity.cpp +++ b/src/libslic3r/ExtrusionEntity.cpp @@ -306,7 +306,11 @@ double ExtrusionLoop::min_mm3_per_mm() const std::string ExtrusionEntity::role_to_string(ExtrusionRole role) { switch (role) { +#if ENABLE_GCODE_VIEWER + case erNone : return L("Unknown"); +#else case erNone : return L("None"); +#endif // ENABLE_GCODE_VIEWER case erPerimeter : return L("Perimeter"); case erExternalPerimeter : return L("External perimeter"); case erOverhangPerimeter : return L("Overhang perimeter"); @@ -327,4 +331,40 @@ std::string ExtrusionEntity::role_to_string(ExtrusionRole role) return ""; } +ExtrusionRole ExtrusionEntity::string_to_role(const std::string& role) +{ + if (role == L("Perimeter")) + return erPerimeter; + else if (role == L("External perimeter")) + return erExternalPerimeter; + else if (role == L("Overhang perimeter")) + return erOverhangPerimeter; + else if (role == L("Internal infill")) + return erInternalInfill; + else if (role == L("Solid infill")) + return erSolidInfill; + else if (role == L("Top solid infill")) + return erTopSolidInfill; + else if (role == L("Ironing")) + return erIroning; + else if (role == L("Bridge infill")) + return erBridgeInfill; + else if (role == L("Gap fill")) + return erGapFill; + else if (role == L("Skirt")) + return erSkirt; + else if (role == L("Support material")) + return erSupportMaterial; + else if (role == L("Support material interface")) + return erSupportMaterialInterface; + else if (role == L("Wipe tower")) + return erWipeTower; + else if (role == L("Custom")) + return erCustom; + else if (role == L("Mixed")) + return erMixed; + else + return erNone; +} + } diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 879f564b6c..0adb2019ee 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -106,6 +106,7 @@ public: virtual double total_volume() const = 0; static std::string role_to_string(ExtrusionRole role); + static ExtrusionRole string_to_role(const std::string& role); }; typedef std::vector ExtrusionEntitiesPtr; @@ -121,8 +122,8 @@ public: // Height of the extrusion, used for visualization purposes. float height; - ExtrusionPath(ExtrusionRole role) : mm3_per_mm(-1), width(-1), height(-1), m_role(role) {}; - ExtrusionPath(ExtrusionRole role, double mm3_per_mm, float width, float height) : mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {}; + ExtrusionPath(ExtrusionRole role) : mm3_per_mm(-1), width(-1), height(-1), m_role(role) {} + ExtrusionPath(ExtrusionRole role, double mm3_per_mm, float width, float height) : mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {} ExtrusionPath(const ExtrusionPath& rhs) : polyline(rhs.polyline), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {} ExtrusionPath(ExtrusionPath&& rhs) : polyline(std::move(rhs.polyline)), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {} ExtrusionPath(const Polyline &polyline, const ExtrusionPath &rhs) : polyline(polyline), mm3_per_mm(rhs.mm3_per_mm), width(rhs.width), height(rhs.height), m_role(rhs.m_role) {} diff --git a/src/libslic3r/ExtrusionEntityCollection.hpp b/src/libslic3r/ExtrusionEntityCollection.hpp index dfece6949b..5e40ab32ec 100644 --- a/src/libslic3r/ExtrusionEntityCollection.hpp +++ b/src/libslic3r/ExtrusionEntityCollection.hpp @@ -2,6 +2,7 @@ #define slic3r_ExtrusionEntityCollection_hpp_ #include "libslic3r.h" +#include "Exception.hpp" #include "ExtrusionEntity.hpp" namespace Slic3r { @@ -107,7 +108,7 @@ public: // Following methods shall never be called on an ExtrusionEntityCollection. Polyline as_polyline() const override { - throw std::runtime_error("Calling as_polyline() on a ExtrusionEntityCollection"); + throw Slic3r::RuntimeError("Calling as_polyline() on a ExtrusionEntityCollection"); return Polyline(); }; @@ -117,7 +118,7 @@ public: } double length() const override { - throw std::runtime_error("Calling length() on a ExtrusionEntityCollection"); + throw Slic3r::RuntimeError("Calling length() on a ExtrusionEntityCollection"); return 0.; } }; diff --git a/src/libslic3r/FileParserError.hpp b/src/libslic3r/FileParserError.hpp index 3f560fa4f5..b7e63d84e0 100644 --- a/src/libslic3r/FileParserError.hpp +++ b/src/libslic3r/FileParserError.hpp @@ -10,14 +10,14 @@ namespace Slic3r { // Generic file parser error, mostly copied from boost::property_tree::file_parser_error -class file_parser_error: public std::runtime_error +class file_parser_error: public Slic3r::RuntimeError { public: file_parser_error(const std::string &msg, const std::string &file, unsigned long line = 0) : - std::runtime_error(format_what(msg, file, line)), + Slic3r::RuntimeError(format_what(msg, file, line)), m_message(msg), m_filename(file), m_line(line) {} file_parser_error(const std::string &msg, const boost::filesystem::path &file, unsigned long line = 0) : - std::runtime_error(format_what(msg, file.string(), line)), + Slic3r::RuntimeError(format_what(msg, file.string(), line)), m_message(msg), m_filename(file.string()), m_line(line) {} // gcc 3.4.2 complains about lack of throw specifier on compiler // generated dtor @@ -35,7 +35,7 @@ private: std::string m_filename; unsigned long m_line; - // Format error message to be returned by std::runtime_error::what() + // Format error message to be returned by Slic3r::RuntimeError::what() static std::string format_what(const std::string &msg, const std::string &file, unsigned long l) { std::stringstream stream; diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 3c16527f07..3e24d502d6 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -318,7 +318,7 @@ void export_group_fills_to_svg(const char *path, const std::vector #endif // friend to Layer -void Layer::make_fills() +void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree) { for (LayerRegion *layerm : m_regions) layerm->fills.clear(); @@ -345,6 +345,7 @@ void Layer::make_fills() f->layer_id = this->id(); f->z = this->print_z; f->angle = surface_fill.params.angle; + f->adapt_fill_octree = (surface_fill.params.pattern == ipSupportCubic) ? support_fill_octree : adaptive_fill_octree; // calculate flow spacing for infill pattern generation bool using_internal_flow = ! surface_fill.surface.is_solid() && ! surface_fill.params.flow.bridge; @@ -534,7 +535,7 @@ void Layer::make_ironing() fill_params.density = 1.; // fill_params.dont_connect = true; fill_params.dont_connect = false; - fill_params.monotonous = true; + fill_params.monotonic = true; for (size_t i = 0; i < by_extruder.size(); ++ i) { // Find span of regions equivalent to the ironing operation. @@ -578,7 +579,7 @@ void Layer::make_ironing() // Save into layer. ExtrusionEntityCollection *eec = nullptr; ironing_params.layerm->fills.entities.push_back(eec = new ExtrusionEntityCollection()); - // Don't sort the ironing infill lines as they are monotonously ordered. + // Don't sort the ironing infill lines as they are monotonicly ordered. eec->no_sort = true; extrusion_entities_append_paths( eec->entities, std::move(polylines), diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp new file mode 100644 index 0000000000..ba13b2a975 --- /dev/null +++ b/src/libslic3r/Fill/FillAdaptive.cpp @@ -0,0 +1,746 @@ +#include "../ClipperUtils.hpp" +#include "../ExPolygon.hpp" +#include "../Surface.hpp" +#include "../Geometry.hpp" +#include "../Layer.hpp" +#include "../Print.hpp" +#include "../ShortestPath.hpp" + +#include "FillAdaptive.hpp" + +// for indexed_triangle_set +#include + +#include +#include +#include + +// Boost pool: Don't use mutexes to synchronize memory allocation. +#define BOOST_POOL_NO_MT +#include + +namespace Slic3r { +namespace FillAdaptive { + +// Derived from https://github.com/juj/MathGeoLib/blob/master/src/Geometry/Triangle.cpp +// The AABB-Triangle test implementation is based on the pseudo-code in +// Christer Ericson's Real-Time Collision Detection, pp. 169-172. It is +// practically a standard SAT test. +// +// Original MathGeoLib benchmark: +// Best: 17.282 nsecs / 46.496 ticks, Avg: 17.804 nsecs, Worst: 18.434 nsecs +// +//FIXME Vojtech: The MathGeoLib contains a vectorized implementation. +template +bool triangle_AABB_intersects(const Vector &a, const Vector &b, const Vector &c, const BoundingBoxBase &aabb) +{ + using Scalar = typename Vector::Scalar; + + Vector tMin = a.cwiseMin(b.cwiseMin(c)); + Vector tMax = a.cwiseMax(b.cwiseMax(c)); + + if (tMin.x() >= aabb.max.x() || tMax.x() <= aabb.min.x() + || tMin.y() >= aabb.max.y() || tMax.y() <= aabb.min.y() + || tMin.z() >= aabb.max.z() || tMax.z() <= aabb.min.z()) + return false; + + Vector center = (aabb.min + aabb.max) * 0.5f; + Vector h = aabb.max - center; + + const Vector t[3] { b-a, c-a, c-b }; + + Vector ac = a - center; + + Vector n = t[0].cross(t[1]); + Scalar s = n.dot(ac); + Scalar r = std::abs(h.dot(n.cwiseAbs())); + if (abs(s) >= r) + return false; + + const Vector at[3] = { t[0].cwiseAbs(), t[1].cwiseAbs(), t[2].cwiseAbs() }; + + Vector bc = b - center; + Vector cc = c - center; + + // SAT test all cross-axes. + // The following is a fully unrolled loop of this code, stored here for reference: + /* + Scalar d1, d2, a1, a2; + const Vector e[3] = { DIR_VEC(1, 0, 0), DIR_VEC(0, 1, 0), DIR_VEC(0, 0, 1) }; + for(int i = 0; i < 3; ++i) + for(int j = 0; j < 3; ++j) + { + Vector axis = Cross(e[i], t[j]); + ProjectToAxis(axis, d1, d2); + aabb.ProjectToAxis(axis, a1, a2); + if (d2 <= a1 || d1 >= a2) return false; + } + */ + + // eX t[0] + Scalar d1 = t[0].y() * ac.z() - t[0].z() * ac.y(); + Scalar d2 = t[0].y() * cc.z() - t[0].z() * cc.y(); + Scalar tc = (d1 + d2) * 0.5f; + r = std::abs(h.y() * at[0].z() + h.z() * at[0].y()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eX t[1] + d1 = t[1].y() * ac.z() - t[1].z() * ac.y(); + d2 = t[1].y() * bc.z() - t[1].z() * bc.y(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.y() * at[1].z() + h.z() * at[1].y()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eX t[2] + d1 = t[2].y() * ac.z() - t[2].z() * ac.y(); + d2 = t[2].y() * bc.z() - t[2].z() * bc.y(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.y() * at[2].z() + h.z() * at[2].y()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eY t[0] + d1 = t[0].z() * ac.x() - t[0].x() * ac.z(); + d2 = t[0].z() * cc.x() - t[0].x() * cc.z(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.x() * at[0].z() + h.z() * at[0].x()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eY t[1] + d1 = t[1].z() * ac.x() - t[1].x() * ac.z(); + d2 = t[1].z() * bc.x() - t[1].x() * bc.z(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.x() * at[1].z() + h.z() * at[1].x()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eY t[2] + d1 = t[2].z() * ac.x() - t[2].x() * ac.z(); + d2 = t[2].z() * bc.x() - t[2].x() * bc.z(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.x() * at[2].z() + h.z() * at[2].x()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eZ t[0] + d1 = t[0].x() * ac.y() - t[0].y() * ac.x(); + d2 = t[0].x() * cc.y() - t[0].y() * cc.x(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.y() * at[0].x() + h.x() * at[0].y()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eZ t[1] + d1 = t[1].x() * ac.y() - t[1].y() * ac.x(); + d2 = t[1].x() * bc.y() - t[1].y() * bc.x(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.y() * at[1].x() + h.x() * at[1].y()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // eZ t[2] + d1 = t[2].x() * ac.y() - t[2].y() * ac.x(); + d2 = t[2].x() * bc.y() - t[2].y() * bc.x(); + tc = (d1 + d2) * 0.5f; + r = std::abs(h.y() * at[2].x() + h.x() * at[2].y()); + if (r + std::abs(tc - d1) < std::abs(tc)) + return false; + + // No separating axis exists, the AABB and triangle intersect. + return true; +} + +static double dist2_to_triangle(const Vec3d &a, const Vec3d &b, const Vec3d &c, const Vec3d &p) +{ + double out = std::numeric_limits::max(); + const Vec3d v1 = b - a; + auto l1 = v1.squaredNorm(); + const Vec3d v2 = c - b; + auto l2 = v2.squaredNorm(); + const Vec3d v3 = a - c; + auto l3 = v3.squaredNorm(); + + // Is the triangle valid? + if (l1 > 0. && l2 > 0. && l3 > 0.) + { + // 1) Project point into the plane of the triangle. + const Vec3d n = v1.cross(v2); + double d = (p - a).dot(n); + const Vec3d foot_pt = p - n * d / n.squaredNorm(); + + // 2) Maximum projection of n. + int proj_axis; + n.array().cwiseAbs().maxCoeff(&proj_axis); + + // 3) Test whether the foot_pt is inside the triangle. + { + auto inside_triangle = [](const Vec2d& v1, const Vec2d& v2, const Vec2d& v3, const Vec2d& pt) { + const double d1 = cross2(v1, pt); + const double d2 = cross2(v2, pt); + const double d3 = cross2(v3, pt); + // Testing both CCW and CW orientations. + return (d1 >= 0. && d2 >= 0. && d3 >= 0.) || (d1 <= 0. && d2 <= 0. && d3 <= 0.); + }; + bool inside; + switch (proj_axis) { + case 0: + inside = inside_triangle({v1.y(), v1.z()}, {v2.y(), v2.z()}, {v3.y(), v3.z()}, {foot_pt.y(), foot_pt.z()}); break; + case 1: + inside = inside_triangle({v1.z(), v1.x()}, {v2.z(), v2.x()}, {v3.z(), v3.x()}, {foot_pt.z(), foot_pt.x()}); break; + default: + assert(proj_axis == 2); + inside = inside_triangle({v1.x(), v1.y()}, {v2.x(), v2.y()}, {v3.x(), v3.y()}, {foot_pt.x(), foot_pt.y()}); break; + } + if (inside) + return (p - foot_pt).squaredNorm(); + } + + // 4) Find minimum distance to triangle vertices and edges. + out = std::min((p - a).squaredNorm(), std::min((p - b).squaredNorm(), (p - c).squaredNorm())); + auto t = (p - a).dot(v1); + if (t > 0. && t < l1) + out = std::min(out, (a + v1 * (t / l1) - p).squaredNorm()); + t = (p - b).dot(v2); + if (t > 0. && t < l2) + out = std::min(out, (b + v2 * (t / l2) - p).squaredNorm()); + t = (p - c).dot(v3); + if (t > 0. && t < l3) + out = std::min(out, (c + v3 * (t / l3) - p).squaredNorm()); + } + + return out; +} + +// Ordering of children cubes. +static const std::array child_centers { + Vec3d(-1, -1, -1), Vec3d( 1, -1, -1), Vec3d(-1, 1, -1), Vec3d( 1, 1, -1), + Vec3d(-1, -1, 1), Vec3d( 1, -1, 1), Vec3d(-1, 1, 1), Vec3d( 1, 1, 1) +}; + +// Traversal order of octree children cells for three infill directions, +// so that a single line will be discretized in a strictly monotonic order. +static constexpr std::array, 3> child_traversal_order { + std::array{ 2, 3, 0, 1, 6, 7, 4, 5 }, + std::array{ 4, 0, 6, 2, 5, 1, 7, 3 }, + std::array{ 1, 5, 0, 4, 3, 7, 2, 6 }, +}; + +struct Cube +{ + Vec3d center; +#ifndef NDEBUG + Vec3d center_octree; +#endif // NDEBUG + std::array children {}; // initialized to nullptrs + Cube(const Vec3d ¢er) : center(center) {} +}; + +struct CubeProperties +{ + double edge_length; // Lenght of edge of a cube + double height; // Height of rotated cube (standing on the corner) + double diagonal_length; // Length of diagonal of a cube a face + double line_z_distance; // Defines maximal distance from a center of a cube on Z axis on which lines will be created + double line_xy_distance;// Defines maximal distance from a center of a cube on X and Y axis on which lines will be created +}; + +struct Octree +{ + // Octree will allocate its Cubes from the pool. The pool only supports deletion of the complete pool, + // perfect for building up our octree. + boost::object_pool pool; + Cube* root_cube { nullptr }; + Vec3d origin; + std::vector cubes_properties; + + Octree(const Vec3d &origin, const std::vector &cubes_properties) + : root_cube(pool.construct(origin)), origin(origin), cubes_properties(cubes_properties) {} + + void insert_triangle(const Vec3d &a, const Vec3d &b, const Vec3d &c, Cube *current_cube, const BoundingBoxf3 ¤t_bbox, int depth); +}; + +void OctreeDeleter::operator()(Octree *p) { + delete p; +} + +std::pair adaptive_fill_line_spacing(const PrintObject &print_object) +{ + // Output, spacing for icAdaptiveCubic and icSupportCubic + double adaptive_line_spacing = 0.; + double support_line_spacing = 0.; + + enum class Tristate { + Yes, + No, + Maybe + }; + struct RegionFillData { + Tristate has_adaptive_infill; + Tristate has_support_infill; + double density; + double extrusion_width; + }; + std::vector region_fill_data; + region_fill_data.reserve(print_object.print()->regions().size()); + bool build_octree = false; + const std::vector &nozzle_diameters = print_object.print()->config().nozzle_diameter.values; + double max_nozzle_diameter = *std::max_element(nozzle_diameters.begin(), nozzle_diameters.end()); + double default_infill_extrusion_width = Flow::auto_extrusion_width(FlowRole::frInfill, max_nozzle_diameter); + for (const PrintRegion *region : print_object.print()->regions()) { + const PrintRegionConfig &config = region->config(); + bool nonempty = config.fill_density > 0; + bool has_adaptive_infill = nonempty && config.fill_pattern == ipAdaptiveCubic; + bool has_support_infill = nonempty && config.fill_pattern == ipSupportCubic; + region_fill_data.push_back(RegionFillData({ + has_adaptive_infill ? Tristate::Maybe : Tristate::No, + has_support_infill ? Tristate::Maybe : Tristate::No, + config.fill_density, + config.infill_extrusion_width != 0. ? config.infill_extrusion_width : default_infill_extrusion_width + })); + build_octree |= has_adaptive_infill || has_support_infill; + } + + if (build_octree) { + // Compute the average of above parameters over all layers + for (const Layer *layer : print_object.layers()) + for (size_t region_id = 0; region_id < layer->regions().size(); ++ region_id) { + RegionFillData &rd = region_fill_data[region_id]; + if (rd.has_adaptive_infill == Tristate::Maybe && ! layer->regions()[region_id]->fill_surfaces.empty()) + rd.has_adaptive_infill = Tristate::Yes; + if (rd.has_support_infill == Tristate::Maybe && ! layer->regions()[region_id]->fill_surfaces.empty()) + rd.has_support_infill = Tristate::Yes; + } + + double adaptive_fill_density = 0.; + double adaptive_infill_extrusion_width = 0.; + int adaptive_cnt = 0; + double support_fill_density = 0.; + double support_infill_extrusion_width = 0.; + int support_cnt = 0; + + for (const RegionFillData &rd : region_fill_data) { + if (rd.has_adaptive_infill == Tristate::Yes) { + adaptive_fill_density += rd.density; + adaptive_infill_extrusion_width += rd.extrusion_width; + ++ adaptive_cnt; + } else if (rd.has_support_infill == Tristate::Yes) { + support_fill_density += rd.density; + support_infill_extrusion_width += rd.extrusion_width; + ++ support_cnt; + } + } + + auto to_line_spacing = [](int cnt, double density, double extrusion_width) { + if (cnt) { + density /= double(cnt); + extrusion_width /= double(cnt); + return extrusion_width / ((density / 100.0f) * 0.333333333f); + } else + return 0.; + }; + adaptive_line_spacing = to_line_spacing(adaptive_cnt, adaptive_fill_density, adaptive_infill_extrusion_width); + support_line_spacing = to_line_spacing(support_cnt, support_fill_density, support_infill_extrusion_width); + } + + return std::make_pair(adaptive_line_spacing, support_line_spacing); +} + +// Context used by generate_infill_lines() when recursively traversing an octree in a DDA fashion +// (Digital Differential Analyzer). +struct FillContext +{ + // The angles have to agree with child_traversal_order. + static constexpr double direction_angles[3] { + 0., + (2.0 * M_PI) / 3.0, + -(2.0 * M_PI) / 3.0 + }; + + FillContext(const Octree &octree, double z_position, int direction_idx) : + cubes_properties(octree.cubes_properties), + z_position(z_position), + traversal_order(child_traversal_order[direction_idx]), + cos_a(cos(direction_angles[direction_idx])), + sin_a(sin(direction_angles[direction_idx])) + { + static constexpr auto unused = std::numeric_limits::max(); + temp_lines.assign((1 << octree.cubes_properties.size()) - 1, Line(Point(unused, unused), Point(unused, unused))); + } + + // Rotate the point, uses the same convention as Point::rotate(). + Vec2d rotate(const Vec2d& v) { return Vec2d(this->cos_a * v.x() - this->sin_a * v.y(), this->sin_a * v.x() + this->cos_a * v.y()); } + + const std::vector &cubes_properties; + // Top of the current layer. + const double z_position; + // Order of traversal for this line direction. + const std::array traversal_order; + // Rotation of the generated line for this line direction. + const double cos_a; + const double sin_a; + + // Linearized tree spanning a single Octree wall, used to connect lines spanning + // neighboring Octree cells. Unused lines have the Line::a::x set to infinity. + std::vector temp_lines; + // Final output + std::vector output_lines; +}; + +static constexpr double octree_rot[3] = { 5.0 * M_PI / 4.0, Geometry::deg2rad(215.264), M_PI / 6.0 }; + +Eigen::Quaterniond transform_to_world() +{ + return Eigen::AngleAxisd(octree_rot[2], Vec3d::UnitZ()) * Eigen::AngleAxisd(octree_rot[1], Vec3d::UnitY()) * Eigen::AngleAxisd(octree_rot[0], Vec3d::UnitX()); +} + +Eigen::Quaterniond transform_to_octree() +{ + return Eigen::AngleAxisd(- octree_rot[0], Vec3d::UnitX()) * Eigen::AngleAxisd(- octree_rot[1], Vec3d::UnitY()) * Eigen::AngleAxisd(- octree_rot[2], Vec3d::UnitZ()); +} + +#ifndef NDEBUG +// Verify that the traversal order of the octree children matches the line direction, +// therefore the infill line may get extended with O(1) time & space complexity. +static bool verify_traversal_order( + FillContext &context, + const Cube *cube, + int depth, + const Vec2d &line_from, + const Vec2d &line_to) +{ + std::array c; + Eigen::Quaterniond to_world = transform_to_world(); + for (int i = 0; i < 8; ++i) { + int j = context.traversal_order[i]; + Vec3d cntr = to_world * (cube->center_octree + (child_centers[j] * (context.cubes_properties[depth].edge_length / 4.))); + assert(!cube->children[j] || cube->children[j]->center.isApprox(cntr)); + c[i] = cntr; + } + std::array dirs = { + c[1] - c[0], c[2] - c[0], c[3] - c[1], c[3] - c[2], c[3] - c[0], + c[5] - c[4], c[6] - c[4], c[7] - c[5], c[7] - c[6], c[7] - c[4] + }; + assert(std::abs(dirs[4].z()) < 0.005); + assert(std::abs(dirs[9].z()) < 0.005); + assert(dirs[0].isApprox(dirs[3])); + assert(dirs[1].isApprox(dirs[2])); + assert(dirs[5].isApprox(dirs[8])); + assert(dirs[6].isApprox(dirs[7])); + Vec3d line_dir = Vec3d(line_to.x() - line_from.x(), line_to.y() - line_from.y(), 0.).normalized(); + for (auto& dir : dirs) { + double d = dir.normalized().dot(line_dir); + assert(d > 0.7); + } + return true; +} +#endif // NDEBUG + +static void generate_infill_lines_recursive( + FillContext &context, + const Cube *cube, + // Address of this wall in the octree, used to address context.temp_lines. + int address, + int depth) +{ + assert(cube != nullptr); + + const std::vector &cubes_properties = context.cubes_properties; + const double z_diff = context.z_position - cube->center.z(); + const double z_diff_abs = std::abs(z_diff); + + if (z_diff_abs > cubes_properties[depth].height / 2.) + return; + + if (z_diff_abs < cubes_properties[depth].line_z_distance) { + // Discretize a single wall splitting the cube into two. + const double zdist = cubes_properties[depth].line_z_distance; + Vec2d from( + 0.5 * cubes_properties[depth].diagonal_length * (zdist - z_diff_abs) / zdist, + cubes_properties[depth].line_xy_distance - (zdist + z_diff) / sqrt(2.)); + Vec2d to(-from.x(), from.y()); + from = context.rotate(from); + to = context.rotate(to); + // Relative to cube center + const Vec2d offset(cube->center.x(), cube->center.y()); + from += offset; + to += offset; + // Verify that the traversal order of the octree children matches the line direction, + // therefore the infill line may get extended with O(1) time & space complexity. + assert(verify_traversal_order(context, cube, depth, from, to)); + // Either extend an existing line or start a new one. + Line &last_line = context.temp_lines[address]; + Line new_line(Point::new_scale(from), Point::new_scale(to)); + if (last_line.a.x() == std::numeric_limits::max()) { + last_line.a = new_line.a; + } else if ((new_line.a - last_line.b).cwiseAbs().maxCoeff() > 300) { // SCALED_EPSILON is 100 and it is not enough + context.output_lines.emplace_back(last_line); + last_line.a = new_line.a; + } + last_line.b = new_line.b; + } + + // left child index + address = address * 2 + 1; + -- depth; + size_t i = 0; + for (const int child_idx : context.traversal_order) { + const Cube *child = cube->children[child_idx]; + if (child != nullptr) + generate_infill_lines_recursive(context, child, address, depth); + if (++ i == 4) + // right child index + ++ address; + } +} + +#ifndef NDEBUG +// #define ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT +#endif + +#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT +static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines &polylines, const std::string &path) +{ + BoundingBox bbox = get_extents(expoly); + bbox.offset(scale_(3.)); + + ::Slic3r::SVG svg(path, bbox); + svg.draw(expoly); + svg.draw_outline(expoly, "green"); + svg.draw(polylines, "red"); + static constexpr double trim_length = scale_(0.4); + for (Polyline polyline : polylines) { + Vec2d a = polyline.points.front().cast(); + Vec2d d = polyline.points.back().cast(); + if (polyline.size() == 2) { + Vec2d v = d - a; + double l = v.norm(); + if (l > 2. * trim_length) { + a += v * trim_length / l; + d -= v * trim_length / l; + polyline.points.front() = a.cast(); + polyline.points.back() = d.cast(); + } else + polyline.points.clear(); + } else if (polyline.size() > 2) { + Vec2d b = polyline.points[1].cast(); + Vec2d c = polyline.points[polyline.points.size() - 2].cast(); + Vec2d v = b - a; + double l = v.norm(); + if (l > trim_length) { + a += v * trim_length / l; + polyline.points.front() = a.cast(); + } else + polyline.points.erase(polyline.points.begin()); + v = d - c; + l = v.norm(); + if (l > trim_length) + polyline.points.back() = (d - v * trim_length / l).cast(); + else + polyline.points.pop_back(); + } + svg.draw(polyline, "black"); + } +} +#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */ + +void Filler::_fill_surface_single( + const FillParams & params, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon &expolygon, + Polylines &polylines_out) +{ + assert (this->adapt_fill_octree); + + Polylines all_polylines; + { + // 3 contexts for three directions of infill lines + std::array contexts { + FillContext { *adapt_fill_octree, this->z, 0 }, + FillContext { *adapt_fill_octree, this->z, 1 }, + FillContext { *adapt_fill_octree, this->z, 2 } + }; + // Generate the infill lines along the octree cells, merge touching lines of the same direction. + size_t num_lines = 0; + for (auto &context : contexts) { + generate_infill_lines_recursive(context, adapt_fill_octree->root_cube, 0, int(adapt_fill_octree->cubes_properties.size()) - 1); + num_lines += context.output_lines.size() + context.temp_lines.size(); + } + // Collect the lines. + std::vector lines; + lines.reserve(num_lines); + for (auto &context : contexts) { + append(lines, context.output_lines); + for (const Line &line : context.temp_lines) + if (line.a.x() != std::numeric_limits::max()) + lines.emplace_back(line); + } +#if 0 + // Chain touching line segments, convert lines to polylines. + //all_polylines = chain_lines(lines, 300.); // SCALED_EPSILON is 100 and it is not enough +#else + // Convert lines to polylines. + all_polylines.reserve(lines.size()); + std::transform(lines.begin(), lines.end(), std::back_inserter(all_polylines), [](const Line& l) { return Polyline{ l.a, l.b }; }); +#endif + } + + // Crop all polylines + all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon)); + +#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT + { + static int iRun = 0; + export_infill_lines_to_svg(expolygon, all_polylines, debug_out_path("FillAdaptive-initial-%d.svg", iRun++)); + } +#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */ + + if (params.dont_connect || all_polylines.size() <= 1) + append(polylines_out, std::move(all_polylines)); + else + connect_infill(chain_polylines(std::move(all_polylines)), expolygon, polylines_out, this->spacing, params); + +#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT + { + static int iRun = 0; + export_infill_lines_to_svg(expolygon, polylines_out, debug_out_path("FillAdaptive-final-%d.svg", iRun ++)); + } +#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */ +} + +static double bbox_max_radius(const BoundingBoxf3 &bbox, const Vec3d ¢er) +{ + const auto p = (bbox.min - center); + const auto s = bbox.size(); + double r2max = 0.; + for (int i = 0; i < 8; ++ i) + r2max = std::max(r2max, (p + Vec3d(s.x() * double(i & 1), s.y() * double(i & 2), s.z() * double(i & 4))).squaredNorm()); + return sqrt(r2max); +} + +static std::vector make_cubes_properties(double max_cube_edge_length, double line_spacing) +{ + max_cube_edge_length += EPSILON; + + std::vector cubes_properties; + for (double edge_length = line_spacing * 2.;; edge_length *= 2.) + { + CubeProperties props{}; + props.edge_length = edge_length; + props.height = edge_length * sqrt(3); + props.diagonal_length = edge_length * sqrt(2); + props.line_z_distance = edge_length / sqrt(3); + props.line_xy_distance = edge_length / sqrt(6); + cubes_properties.emplace_back(props); + if (edge_length > max_cube_edge_length) + break; + } + return cubes_properties; +} + +static inline bool is_overhang_triangle(const Vec3d &a, const Vec3d &b, const Vec3d &c, const Vec3d &up) +{ + // Calculate triangle normal. + auto n = (b - a).cross(c - b); + return n.dot(up) > 0.707 * n.norm(); +} + +static void transform_center(Cube *current_cube, const Eigen::Matrix3d &rot) +{ +#ifndef NDEBUG + current_cube->center_octree = current_cube->center; +#endif // NDEBUG + current_cube->center = rot * current_cube->center; + for (auto *child : current_cube->children) + if (child) + transform_center(child, rot); +} + +OctreePtr build_octree( + // Mesh is rotated to the coordinate system of the octree. + const indexed_triangle_set &triangle_mesh, + // Overhang triangles extracted from fill surfaces with stInternalBridge type, + // rotated to the coordinate system of the octree. + const std::vector &overhang_triangles, + coordf_t line_spacing, + bool support_overhangs_only) +{ + assert(line_spacing > 0); + assert(! std::isnan(line_spacing)); + + BoundingBox3Base bbox(triangle_mesh.vertices); + Vec3d cube_center = bbox.center().cast(); + std::vector cubes_properties = make_cubes_properties(double(bbox.size().maxCoeff()), line_spacing); + auto octree = OctreePtr(new Octree(cube_center, cubes_properties)); + + if (cubes_properties.size() > 1) { + Octree *octree_ptr = octree.get(); + double edge_length_half = 0.5 * cubes_properties.back().edge_length; + Vec3d diag_half(edge_length_half, edge_length_half, edge_length_half); + int max_depth = int(cubes_properties.size()) - 1; + auto process_triangle = [octree_ptr, max_depth, diag_half](const Vec3d &a, const Vec3d &b, const Vec3d &c) { + octree_ptr->insert_triangle( + a, b, c, + octree_ptr->root_cube, + BoundingBoxf3(octree_ptr->root_cube->center - diag_half, octree_ptr->root_cube->center + diag_half), + max_depth); + }; + auto up_vector = support_overhangs_only ? Vec3d(transform_to_octree() * Vec3d(0., 0., 1.)) : Vec3d(); + for (auto &tri : triangle_mesh.indices) { + auto a = triangle_mesh.vertices[tri[0]].cast(); + auto b = triangle_mesh.vertices[tri[1]].cast(); + auto c = triangle_mesh.vertices[tri[2]].cast(); + if (! support_overhangs_only || is_overhang_triangle(a, b, c, up_vector)) + process_triangle(a, b, c); + } + for (size_t i = 0; i < overhang_triangles.size(); i += 3) + process_triangle(overhang_triangles[i], overhang_triangles[i + 1], overhang_triangles[i + 2]); + { + // Transform the octree to world coordinates to reduce computation when extracting infill lines. + auto rot = transform_to_world().toRotationMatrix(); + transform_center(octree->root_cube, rot); + octree->origin = rot * octree->origin; + } + } + + return octree; +} + +void Octree::insert_triangle(const Vec3d &a, const Vec3d &b, const Vec3d &c, Cube *current_cube, const BoundingBoxf3 ¤t_bbox, int depth) +{ + assert(current_cube); + assert(depth > 0); + + // Squared radius of a sphere around the child cube. + const double r2_cube = Slic3r::sqr(0.5 * this->cubes_properties[-- depth].height + EPSILON); + + for (size_t i = 0; i < 8; ++ i) { + const Vec3d &child_center_dir = child_centers[i]; + // Calculate a slightly expanded bounding box of a child cube to cope with triangles touching a cube wall and other numeric errors. + // We will rather densify the octree a bit more than necessary instead of missing a triangle. + BoundingBoxf3 bbox; + for (int k = 0; k < 3; ++ k) { + if (child_center_dir[k] == -1.) { + bbox.min[k] = current_bbox.min[k]; + bbox.max[k] = current_cube->center[k] + EPSILON; + } else { + bbox.min[k] = current_cube->center[k] - EPSILON; + bbox.max[k] = current_bbox.max[k]; + } + } + Vec3d child_center = current_cube->center + (child_center_dir * (this->cubes_properties[depth].edge_length / 2.)); + //if (dist2_to_triangle(a, b, c, child_center) < r2_cube) { + if (triangle_AABB_intersects(a, b, c, bbox)) { + if (! current_cube->children[i]) + current_cube->children[i] = this->pool.construct(child_center); + if (depth > 0) + this->insert_triangle(a, b, c, current_cube->children[i], bbox, depth); + } + } +} + +} // namespace FillAdaptive +} // namespace Slic3r diff --git a/src/libslic3r/Fill/FillAdaptive.hpp b/src/libslic3r/Fill/FillAdaptive.hpp new file mode 100644 index 0000000000..f10c40b99f --- /dev/null +++ b/src/libslic3r/Fill/FillAdaptive.hpp @@ -0,0 +1,75 @@ +// Adaptive cubic infill was inspired by the work of @mboerwinkle +// as implemented for Cura. +// https://github.com/Ultimaker/CuraEngine/issues/381 +// https://github.com/Ultimaker/CuraEngine/pull/401 +// +// Our implementation is more accurate (discretizes a bit less cubes than Cura's) +// by splitting only such cubes which contain a triangle. +// Our line extraction is time optimal instead of O(n^2) when connecting extracted lines, +// and we also implemented adaptivity for supporting internal overhangs only. + +#ifndef slic3r_FillAdaptive_hpp_ +#define slic3r_FillAdaptive_hpp_ + +#include "FillBase.hpp" + +struct indexed_triangle_set; + +namespace Slic3r { + +class PrintObject; + +namespace FillAdaptive +{ + +struct Octree; +// To keep the definition of Octree opaque, we have to define a custom deleter. +struct OctreeDeleter { void operator()(Octree *p); }; +using OctreePtr = std::unique_ptr; + +// Calculate line spacing for +// 1) adaptive cubic infill +// 2) adaptive internal support cubic infill +// Returns zero for a particular infill type if no such infill is to be generated. +std::pair adaptive_fill_line_spacing(const PrintObject &print_object); + +// Rotation of the octree to stand on one of its corners. +Eigen::Quaterniond transform_to_world(); +// Inverse roation of the above. +Eigen::Quaterniond transform_to_octree(); + +FillAdaptive::OctreePtr build_octree( + // Mesh is rotated to the coordinate system of the octree. + const indexed_triangle_set &triangle_mesh, + // Overhang triangles extracted from fill surfaces with stInternalBridge type, + // rotated to the coordinate system of the octree. + const std::vector &overhang_triangles, + coordf_t line_spacing, + // If true, octree is densified below internal overhangs only. + bool support_overhangs_only); + +// +// Some of the algorithms used by class FillAdaptive were inspired by +// Cura Engine's class SubDivCube +// https://github.com/Ultimaker/CuraEngine/blob/master/src/infill/SubDivCube.h +// +class Filler : public Slic3r::Fill +{ +public: + virtual ~Filler() {} + +protected: + virtual Fill* clone() const { return new Filler(*this); }; + virtual void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon &expolygon, + Polylines &polylines_out); + virtual bool no_sort() const { return true; } +}; + +}; // namespace FillAdaptive +} // namespace Slic3r + +#endif // slic3r_FillAdaptive_hpp_ diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index c760218c01..07ab2d59f7 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -16,6 +16,7 @@ #include "FillRectilinear.hpp" #include "FillRectilinear2.hpp" #include "FillRectilinear3.hpp" +#include "FillAdaptive.hpp" namespace Slic3r { @@ -27,7 +28,7 @@ Fill* Fill::new_from_type(const InfillPattern type) case ip3DHoneycomb: return new Fill3DHoneycomb(); case ipGyroid: return new FillGyroid(); case ipRectilinear: return new FillRectilinear2(); - case ipMonotonous: return new FillMonotonous(); + case ipMonotonic: return new FillMonotonic(); case ipLine: return new FillLine(); case ipGrid: return new FillGrid2(); case ipTriangles: return new FillTriangles(); @@ -37,7 +38,9 @@ Fill* Fill::new_from_type(const InfillPattern type) case ipArchimedeanChords: return new FillArchimedeanChords(); case ipHilbertCurve: return new FillHilbertCurve(); case ipOctagramSpiral: return new FillOctagramSpiral(); - default: throw std::invalid_argument("unknown type"); + case ipAdaptiveCubic: return new FillAdaptive::Filler(); + case ipSupportCubic: return new FillAdaptive::Filler(); + default: throw Slic3r::InvalidArgument("unknown type"); } } @@ -844,8 +847,9 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ boundary.assign(boundary_src.holes.size() + 1, Points()); boundary_data.assign(boundary_src.holes.size() + 1, std::vector()); // Mapping the infill_ordered end point to a (contour, point) of boundary. - std::vector> map_infill_end_point_to_boundary; - map_infill_end_point_to_boundary.assign(infill_ordered.size() * 2, std::pair(std::numeric_limits::max(), std::numeric_limits::max())); + std::vector> map_infill_end_point_to_boundary; + static constexpr auto boundary_idx_unconnected = std::numeric_limits::max(); + map_infill_end_point_to_boundary.assign(infill_ordered.size() * 2, std::pair(boundary_idx_unconnected, boundary_idx_unconnected)); { // Project the infill_ordered end points onto boundary_src. std::vector> intersection_points; @@ -895,13 +899,14 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ contour_data.front().param = contour_data.back().param + (contour_dst.back().cast() - contour_dst.front().cast()).norm(); } -#ifndef NDEBUG assert(boundary.size() == boundary_src.num_contours()); - assert(std::all_of(map_infill_end_point_to_boundary.begin(), map_infill_end_point_to_boundary.end(), +#if 0 + // Adaptive Cubic Infill produces infill lines, which not always end at the outer boundary. + assert(std::all_of(map_infill_end_point_to_boundary.begin(), map_infill_end_point_to_boundary.end(), [&boundary](const std::pair &contour_point) { return contour_point.first < boundary.size() && contour_point.second < boundary[contour_point.first].size(); })); -#endif /* NDEBUG */ +#endif } // Mark the points and segments of split boundary as consumed if they are very close to some of the infill line. @@ -932,9 +937,9 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ const Polyline &pl2 = infill_ordered[idx_chain]; const std::pair *cp1 = &map_infill_end_point_to_boundary[(idx_chain - 1) * 2 + 1]; const std::pair *cp2 = &map_infill_end_point_to_boundary[idx_chain * 2]; - const std::vector &contour_data = boundary_data[cp1->first]; - if (cp1->first == cp2->first) { + if (cp1->first != boundary_idx_unconnected && cp1->first == cp2->first) { // End points on the same contour. Try to connect them. + const std::vector &contour_data = boundary_data[cp1->first]; float param_lo = (cp1->second == 0) ? 0.f : contour_data[cp1->second].param; float param_hi = (cp2->second == 0) ? 0.f : contour_data[cp2->second].param; float param_end = contour_data.front().param; @@ -961,7 +966,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ const std::pair *cp1prev = cp1 - 1; const std::pair *cp2 = &map_infill_end_point_to_boundary[(connection_cost.idx_first + 1) * 2]; const std::pair *cp2next = cp2 + 1; - assert(cp1->first == cp2->first); + assert(cp1->first == cp2->first && cp1->first != boundary_idx_unconnected); std::vector &contour_data = boundary_data[cp1->first]; if (connection_cost.reversed) std::swap(cp1, cp2); diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 2e9b647354..e25480fa57 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -11,6 +11,7 @@ #include "../libslic3r.h" #include "../BoundingBox.hpp" +#include "../Exception.hpp" #include "../Utils.hpp" namespace Slic3r { @@ -19,9 +20,14 @@ class ExPolygon; class Surface; enum InfillPattern : int; -class InfillFailedException : public std::runtime_error { +namespace FillAdaptive { + struct Octree; +}; + +// Infill shall never fail, therefore the error is classified as RuntimeError, not SlicingError. +class InfillFailedException : public Slic3r::RuntimeError { public: - InfillFailedException() : std::runtime_error("Infill failed") {} + InfillFailedException() : Slic3r::RuntimeError("Infill failed") {} }; struct FillParams @@ -37,8 +43,8 @@ struct FillParams // Don't adjust spacing to fill the space evenly. bool dont_adjust { true }; - // Monotonous infill - strictly left to right for better surface quality of top infills. - bool monotonous { false }; + // Monotonic infill - strictly left to right for better surface quality of top infills. + bool monotonic { false }; // For Honeycomb. // we were requested to complete each loop; @@ -69,6 +75,9 @@ public: // In scaled coordinates. Bounding box of the 2D projection of the object. BoundingBox bounding_box; + // Octree builds on mesh for usage in the adaptive cubic infill + FillAdaptive::Octree* adapt_fill_octree = nullptr; + public: virtual ~Fill() {} diff --git a/src/libslic3r/Fill/FillRectilinear2.cpp b/src/libslic3r/Fill/FillRectilinear2.cpp index 5b862e8cbd..0c45892000 100644 --- a/src/libslic3r/Fill/FillRectilinear2.cpp +++ b/src/libslic3r/Fill/FillRectilinear2.cpp @@ -1387,7 +1387,7 @@ static void traverse_graph_generate_polylines( } } -struct MonotonousRegion +struct MonotonicRegion { struct Boundary { int vline; @@ -1412,13 +1412,13 @@ struct MonotonousRegion #if NDEBUG // Left regions are used to track whether all regions left to this one have already been printed. - boost::container::small_vector left_neighbors; + boost::container::small_vector left_neighbors; // Right regions are held to pick a next region to be extruded using the "Ant colony" heuristics. - boost::container::small_vector right_neighbors; + boost::container::small_vector right_neighbors; #else // For debugging, use the normal vector as it is better supported by debug visualizers. - std::vector left_neighbors; - std::vector right_neighbors; + std::vector left_neighbors; + std::vector right_neighbors; #endif }; @@ -1429,9 +1429,9 @@ struct AntPath float pheromone { 0 }; // <0, 1> }; -struct MonotonousRegionLink +struct MonotonicRegionLink { - MonotonousRegion *region; + MonotonicRegion *region; bool flipped; // Distance of right side of this region to left side of the next region, if the "flipped" flag of this region and the next region // is applied as defined. @@ -1447,7 +1447,7 @@ class AntPathMatrix { public: AntPathMatrix( - const std::vector ®ions, + const std::vector ®ions, const ExPolygonWithOffset &poly_with_offset, const std::vector &segs, const float initial_pheromone) : @@ -1463,7 +1463,7 @@ public: ap.pheromone = initial_pheromone; } - AntPath& operator()(const MonotonousRegion ®ion_from, bool flipped_from, const MonotonousRegion ®ion_to, bool flipped_to) + AntPath& operator()(const MonotonicRegion ®ion_from, bool flipped_from, const MonotonicRegion ®ion_to, bool flipped_to) { int row = 2 * int(®ion_from - m_regions.data()) + flipped_from; int col = 2 * int(®ion_to - m_regions.data()) + flipped_to; @@ -1490,16 +1490,16 @@ public: return path; } - AntPath& operator()(const MonotonousRegionLink ®ion_from, const MonotonousRegion ®ion_to, bool flipped_to) + AntPath& operator()(const MonotonicRegionLink ®ion_from, const MonotonicRegion ®ion_to, bool flipped_to) { return (*this)(*region_from.region, region_from.flipped, region_to, flipped_to); } - AntPath& operator()(const MonotonousRegion ®ion_from, bool flipped_from, const MonotonousRegionLink ®ion_to) + AntPath& operator()(const MonotonicRegion ®ion_from, bool flipped_from, const MonotonicRegionLink ®ion_to) { return (*this)(region_from, flipped_from, *region_to.region, region_to.flipped); } - AntPath& operator()(const MonotonousRegionLink ®ion_from, const MonotonousRegionLink ®ion_to) + AntPath& operator()(const MonotonicRegionLink ®ion_from, const MonotonicRegionLink ®ion_to) { return (*this)(*region_from.region, region_from.flipped, *region_to.region, region_to.flipped); } private: // Source regions, used for addressing and updating m_matrix. - const std::vector &m_regions; + const std::vector &m_regions; // To calculate the intersection points and contour lengths. const ExPolygonWithOffset &m_poly_with_offset; const std::vector &m_segs; @@ -1652,9 +1652,9 @@ static std::pair right_overlap(std:: return start_end.first == nullptr ? start_end : right_overlap(*start_end.first, *start_end.second, vline_this, vline_right); } -static std::vector generate_montonous_regions(std::vector &segs) +static std::vector generate_montonous_regions(std::vector &segs) { - std::vector monotonous_regions; + std::vector monotonic_regions; #ifndef NDEBUG #define SLIC3R_DEBUG_MONOTONOUS_REGIONS @@ -1685,11 +1685,11 @@ static std::vector generate_montonous_regions(std::vectorconsumed_vertical_up) { - // Draw a new monotonous region starting with this segment. + // Draw a new monotonic region starting with this segment. // while there is only a single right neighbor int i_vline = i_vline_seed; std::pair left(start, end); - MonotonousRegion region; + MonotonicRegion region; region.left.vline = i_vline; region.left.low = int(left.first - vline_seed.intersections.data()); region.left.high = int(left.second - vline_seed.intersections.data()); @@ -1722,19 +1722,19 @@ static std::vector generate_montonous_regions(std::vector &segs) +static float montonous_region_path_length(const MonotonicRegion ®ion, bool dir, const ExPolygonWithOffset &poly_with_offset, const std::vector &segs) { // From the initial point (i_vline, i_intersection), follow a path. int i_intersection = region.left_intersection_point(dir); @@ -1822,15 +1822,15 @@ static float montonous_region_path_length(const MonotonousRegion ®ion, bool d return unscale(total_length); } -static void connect_monotonous_regions(std::vector ®ions, const ExPolygonWithOffset &poly_with_offset, std::vector &segs) +static void connect_monotonic_regions(std::vector ®ions, const ExPolygonWithOffset &poly_with_offset, std::vector &segs) { - // Map from low intersection to left / right side of a monotonous region. - using MapType = std::pair; + // Map from low intersection to left / right side of a monotonic region. + using MapType = std::pair; std::vector map_intersection_to_region_start; std::vector map_intersection_to_region_end; map_intersection_to_region_start.reserve(regions.size()); map_intersection_to_region_end.reserve(regions.size()); - for (MonotonousRegion ®ion : regions) { + for (MonotonicRegion ®ion : regions) { map_intersection_to_region_start.emplace_back(&segs[region.left.vline].intersections[region.left.low], ®ion); map_intersection_to_region_end.emplace_back(&segs[region.right.vline].intersections[region.right.low], ®ion); } @@ -1840,7 +1840,7 @@ static void connect_monotonous_regions(std::vector ®ions, c std::sort(map_intersection_to_region_end.begin(), map_intersection_to_region_end.end(), intersections_lower); // Scatter links to neighboring regions. - for (MonotonousRegion ®ion : regions) { + for (MonotonicRegion ®ion : regions) { if (region.left.vline > 0) { auto &vline = segs[region.left.vline]; auto &vline_left = segs[region.left.vline - 1]; @@ -1884,17 +1884,17 @@ static void connect_monotonous_regions(std::vector ®ions, c // Sometimes a segment may indicate that it connects to a segment on the other side while the other does not. // This may be a valid case if one side contains runs of OUTER_LOW, INNER_LOW, {INNER_HIGH, INNER_LOW}*, INNER_HIGH, OUTER_HIGH, // where the part in the middle does not connect to the other side, but it will be extruded through. - for (MonotonousRegion ®ion : regions) { + for (MonotonicRegion ®ion : regions) { std::sort(region.left_neighbors.begin(), region.left_neighbors.end()); std::sort(region.right_neighbors.begin(), region.right_neighbors.end()); } - for (MonotonousRegion ®ion : regions) { - for (MonotonousRegion *neighbor : region.left_neighbors) { + for (MonotonicRegion ®ion : regions) { + for (MonotonicRegion *neighbor : region.left_neighbors) { auto it = std::lower_bound(neighbor->right_neighbors.begin(), neighbor->right_neighbors.end(), ®ion); if (it == neighbor->right_neighbors.end() || *it != ®ion) neighbor->right_neighbors.insert(it, ®ion); } - for (MonotonousRegion *neighbor : region.right_neighbors) { + for (MonotonicRegion *neighbor : region.right_neighbors) { auto it = std::lower_bound(neighbor->left_neighbors.begin(), neighbor->left_neighbors.end(), ®ion); if (it == neighbor->left_neighbors.end() || *it != ®ion) neighbor->left_neighbors.insert(it, ®ion); @@ -1903,12 +1903,12 @@ static void connect_monotonous_regions(std::vector ®ions, c #ifndef NDEBUG // Verify symmetry of the left_neighbors / right_neighbors. - for (MonotonousRegion ®ion : regions) { - for (MonotonousRegion *neighbor : region.left_neighbors) { + for (MonotonicRegion ®ion : regions) { + for (MonotonicRegion *neighbor : region.left_neighbors) { assert(std::count(region.left_neighbors.begin(), region.left_neighbors.end(), neighbor) == 1); assert(std::find(neighbor->right_neighbors.begin(), neighbor->right_neighbors.end(), ®ion) != neighbor->right_neighbors.end()); } - for (MonotonousRegion *neighbor : region.right_neighbors) { + for (MonotonicRegion *neighbor : region.right_neighbors) { assert(std::count(region.right_neighbors.begin(), region.right_neighbors.end(), neighbor) == 1); assert(std::find(neighbor->left_neighbors.begin(), neighbor->left_neighbors.end(), ®ion) != neighbor->left_neighbors.end()); } @@ -1916,7 +1916,7 @@ static void connect_monotonous_regions(std::vector ®ions, c #endif /* NDEBUG */ // Fill in sum length of connecting lines of a region. This length is used for optimizing the infill path for minimum length. - for (MonotonousRegion ®ion : regions) { + for (MonotonicRegion ®ion : regions) { region.len1 = montonous_region_path_length(region, false, poly_with_offset, segs); region.len2 = montonous_region_path_length(region, true, poly_with_offset, segs); // Subtract the smaller length from the longer one, so we will optimize just with the positive difference of the two. @@ -1934,7 +1934,7 @@ static void connect_monotonous_regions(std::vector ®ions, c // https://www.chalmers.se/en/departments/math/research/research-groups/optimization/OptimizationMasterTheses/MScThesis-RaadSalman-final.pdf // Algorithm 6.1 Lexicographic Path Preserving 3-opt // Optimize path while maintaining the ordering constraints. -void monotonous_3_opt(std::vector &path, const std::vector &segs) +void monotonic_3_opt(std::vector &path, const std::vector &segs) { // When doing the 3-opt path preserving flips, one has to fulfill two constraints: // @@ -1949,7 +1949,7 @@ void monotonous_3_opt(std::vector &path, const std::vector // then the precedence constraint verification is amortized inside the O(n^3) loop. Now which is better for our task? // // It is beneficial to also try flipping of the infill zig-zags, for which a prefix sum of both flipped and non-flipped paths over - // MonotonousRegionLinks may be utilized, however updating the prefix sum has a linear complexity, the same complexity as doing the 3-opt + // MonotonicRegionLinks may be utilized, however updating the prefix sum has a linear complexity, the same complexity as doing the 3-opt // exchange by copying the pieces. } @@ -1962,17 +1962,17 @@ inline void print_ant(const std::string& fmt, TArgs&&... args) { #endif } -// Find a run through monotonous infill blocks using an 'Ant colony" optimization method. +// Find a run through monotonic infill blocks using an 'Ant colony" optimization method. // http://www.scholarpedia.org/article/Ant_colony_optimization -static std::vector chain_monotonous_regions( - std::vector ®ions, const ExPolygonWithOffset &poly_with_offset, const std::vector &segs, std::mt19937_64 &rng) +static std::vector chain_monotonic_regions( + std::vector ®ions, const ExPolygonWithOffset &poly_with_offset, const std::vector &segs, std::mt19937_64 &rng) { // Number of left neighbors (regions that this region depends on, this region cannot be printed before the regions left of it are printed) + self. std::vector left_neighbors_unprocessed(regions.size(), 1); // Queue of regions, which have their left neighbors already printed. - std::vector queue; + std::vector queue; queue.reserve(regions.size()); - for (MonotonousRegion ®ion : regions) + for (MonotonicRegion ®ion : regions) if (region.left_neighbors.empty()) queue.emplace_back(®ion); else @@ -1981,13 +1981,13 @@ static std::vector chain_monotonous_regions( auto left_neighbors_unprocessed_initial = left_neighbors_unprocessed; auto queue_initial = queue; - std::vector path, best_path; + std::vector path, best_path; path.reserve(regions.size()); best_path.reserve(regions.size()); float best_path_length = std::numeric_limits::max(); struct NextCandidate { - MonotonousRegion *region; + MonotonicRegion *region; AntPath *link; AntPath *link_flipped; float probability; @@ -2002,22 +2002,22 @@ static std::vector chain_monotonous_regions( [®ions, &left_neighbors_unprocessed, &path, &queue]() { std::vector regions_processed(regions.size(), false); std::vector regions_in_queue(regions.size(), false); - for (const MonotonousRegion *region : queue) { + for (const MonotonicRegion *region : queue) { // This region is not processed yet, his predecessors are processed. assert(left_neighbors_unprocessed[region - regions.data()] == 1); regions_in_queue[region - regions.data()] = true; } - for (const MonotonousRegionLink &link : path) { + for (const MonotonicRegionLink &link : path) { assert(left_neighbors_unprocessed[link.region - regions.data()] == 0); regions_processed[link.region - regions.data()] = true; } for (size_t i = 0; i < regions_processed.size(); ++ i) { assert(! regions_processed[i] || ! regions_in_queue[i]); - const MonotonousRegion ®ion = regions[i]; + const MonotonicRegion ®ion = regions[i]; if (regions_processed[i] || regions_in_queue[i]) { assert(left_neighbors_unprocessed[i] == (regions_in_queue[i] ? 1 : 0)); // All left neighbors should be processed already. - for (const MonotonousRegion *left : region.left_neighbors) { + for (const MonotonicRegion *left : region.left_neighbors) { assert(regions_processed[left - regions.data()]); assert(left_neighbors_unprocessed[left - regions.data()] == 0); } @@ -2026,7 +2026,7 @@ static std::vector chain_monotonous_regions( assert(left_neighbors_unprocessed[i] > 1); size_t num_predecessors_unprocessed = 0; bool has_left_last_on_path = false; - for (const MonotonousRegion* left : region.left_neighbors) { + for (const MonotonicRegion* left : region.left_neighbors) { size_t iprev = left - regions.data(); if (regions_processed[iprev]) { assert(left_neighbors_unprocessed[iprev] == 0); @@ -2080,18 +2080,18 @@ static std::vector chain_monotonous_regions( left_neighbors_unprocessed = left_neighbors_unprocessed_initial; assert(validate_unprocessed()); // Pick the last of the queue. - MonotonousRegionLink path_end { queue.back(), false }; + MonotonicRegionLink path_end { queue.back(), false }; queue.pop_back(); -- left_neighbors_unprocessed[path_end.region - regions.data()]; float total_length = path_end.region->length(false); while (! queue.empty() || ! path_end.region->right_neighbors.empty()) { // Chain. - MonotonousRegion ®ion = *path_end.region; + MonotonicRegion ®ion = *path_end.region; bool dir = path_end.flipped; NextCandidate next_candidate; next_candidate.probability = 0; - for (MonotonousRegion *next : region.right_neighbors) { + for (MonotonicRegion *next : region.right_neighbors) { int &unprocessed = left_neighbors_unprocessed[next - regions.data()]; assert(unprocessed > 1); if (left_neighbors_unprocessed[next - regions.data()] == 2) { @@ -2106,7 +2106,7 @@ static std::vector chain_monotonous_regions( } bool from_queue = next_candidate.probability == 0; if (from_queue) { - for (MonotonousRegion *next : queue) { + for (MonotonicRegion *next : queue) { AntPath &path1 = path_matrix(region, dir, *next, false); AntPath &path2 = path_matrix(region, dir, *next, true); if (path1.visibility > next_candidate.probability) @@ -2116,7 +2116,7 @@ static std::vector chain_monotonous_regions( } } // Move the other right neighbors with satisified constraints to the queue. - for (MonotonousRegion *next : region.right_neighbors) + for (MonotonicRegion *next : region.right_neighbors) if (-- left_neighbors_unprocessed[next - regions.data()] == 1 && next_candidate.region != next) queue.emplace_back(next); if (from_queue) { @@ -2127,7 +2127,7 @@ static std::vector chain_monotonous_regions( queue.pop_back(); } // Extend the path. - MonotonousRegion *next_region = next_candidate.region; + MonotonicRegion *next_region = next_candidate.region; bool next_dir = next_candidate.dir; total_length += next_region->length(next_dir) + path_matrix(*path_end.region, path_end.flipped, *next_region, next_dir).length; path_end = { next_region, next_dir }; @@ -2140,7 +2140,7 @@ static std::vector chain_monotonous_regions( path_matrix.update_inital_pheromone(pheromone_initial_deposit); } - // Probability (unnormalized) of traversing a link between two monotonous regions. + // Probability (unnormalized) of traversing a link between two monotonic regions. auto path_probability = [pheromone_alpha, pheromone_beta](AntPath &path) { return pow(path.pheromone, pheromone_alpha) * pow(path.visibility, pheromone_beta); }; @@ -2163,10 +2163,10 @@ static std::vector chain_monotonous_regions( left_neighbors_unprocessed = left_neighbors_unprocessed_initial; assert(validate_unprocessed()); // Pick randomly the first from the queue at random orientation. - //FIXME picking the 1st monotonous region should likely be done based on accumulated pheromone level as well, - // but the inefficiency caused by the random pick of the 1st monotonous region is likely insignificant. + //FIXME picking the 1st monotonic region should likely be done based on accumulated pheromone level as well, + // but the inefficiency caused by the random pick of the 1st monotonic region is likely insignificant. int first_idx = std::uniform_int_distribution<>(0, int(queue.size()) - 1)(rng); - path.emplace_back(MonotonousRegionLink{ queue[first_idx], rng() > rng.max() / 2 }); + path.emplace_back(MonotonicRegionLink{ queue[first_idx], rng() > rng.max() / 2 }); *(queue.begin() + first_idx) = std::move(queue.back()); queue.pop_back(); -- left_neighbors_unprocessed[path.back().region - regions.data()]; @@ -2182,12 +2182,12 @@ static std::vector chain_monotonous_regions( while (! queue.empty() || ! path.back().region->right_neighbors.empty()) { // Chain. - MonotonousRegion ®ion = *path.back().region; + MonotonicRegion ®ion = *path.back().region; bool dir = path.back().flipped; // Sort by distance to pt. next_candidates.clear(); next_candidates.reserve(region.right_neighbors.size() * 2); - for (MonotonousRegion *next : region.right_neighbors) { + for (MonotonicRegion *next : region.right_neighbors) { int &unprocessed = left_neighbors_unprocessed[next - regions.data()]; assert(unprocessed > 1); if (-- unprocessed == 1) { @@ -2204,7 +2204,7 @@ static std::vector chain_monotonous_regions( //FIXME add the queue items to the candidates? These are valid moves as well. if (num_direct_neighbors == 0) { // Add the queue candidates. - for (MonotonousRegion *next : queue) { + for (MonotonicRegion *next : queue) { assert(left_neighbors_unprocessed[next - regions.data()] == 1); AntPath &path1 = path_matrix(region, dir, *next, false); AntPath &path1_flipped = path_matrix(region, ! dir, *next, true); @@ -2247,11 +2247,11 @@ static std::vector chain_monotonous_regions( queue.pop_back(); } // Extend the path. - MonotonousRegion *next_region = take_path->region; + MonotonicRegion *next_region = take_path->region; bool next_dir = take_path->dir; path.back().next = take_path->link; path.back().next_flipped = take_path->link_flipped; - path.emplace_back(MonotonousRegionLink{ next_region, next_dir }); + path.emplace_back(MonotonicRegionLink{ next_region, next_dir }); assert(left_neighbors_unprocessed[next_region - regions.data()] == 1); left_neighbors_unprocessed[next_region - regions.data()] = 0; print_ant("\tRegion (%1%:%2%,%3%) (%4%:%5%,%6%) length to prev %7%", @@ -2279,14 +2279,14 @@ static std::vector chain_monotonous_regions( } // Perform 3-opt local optimization of the path. - monotonous_3_opt(path, segs); + monotonic_3_opt(path, segs); // Measure path length. assert(! path.empty()); float path_length = std::accumulate(path.begin(), path.end() - 1, path.back().region->length(path.back().flipped), - [&path_matrix](const float l, const MonotonousRegionLink &r) { - const MonotonousRegionLink &next = *(&r + 1); + [&path_matrix](const float l, const MonotonicRegionLink &r) { + const MonotonicRegionLink &next = *(&r + 1); return l + r.region->length(r.flipped) + path_matrix(*r.region, r.flipped, *next.region, next.flipped).length; }); // Save the shortest path. @@ -2309,7 +2309,7 @@ static std::vector chain_monotonous_regions( // Reinforce the path pheromones with the best path. float total_cost = best_path_length + float(EPSILON); for (size_t i = 0; i + 1 < path.size(); ++ i) { - MonotonousRegionLink &link = path[i]; + MonotonicRegionLink &link = path[i]; link.next->pheromone = (1.f - pheromone_evaporation) * link.next->pheromone + pheromone_evaporation / total_cost; } @@ -2324,7 +2324,7 @@ end: } // Traverse path, produce polylines. -static void polylines_from_paths(const std::vector &path, const ExPolygonWithOffset &poly_with_offset, const std::vector &segs, Polylines &polylines_out) +static void polylines_from_paths(const std::vector &path, const ExPolygonWithOffset &poly_with_offset, const std::vector &segs, Polylines &polylines_out) { Polyline *polyline = nullptr; auto finish_polyline = [&polyline, &polylines_out]() { @@ -2340,8 +2340,8 @@ static void polylines_from_paths(const std::vector &path, polyline = nullptr; }; - for (const MonotonousRegionLink &path_segment : path) { - MonotonousRegion ®ion = *path_segment.region; + for (const MonotonicRegionLink &path_segment : path) { + MonotonicRegion ®ion = *path_segment.region; bool dir = path_segment.flipped; // From the initial point (i_vline, i_intersection), follow a path. @@ -2350,8 +2350,8 @@ static void polylines_from_paths(const std::vector &path, if (polyline != nullptr && &path_segment != path.data()) { // Connect previous path segment with the new one. - const MonotonousRegionLink &path_segment_prev = *(&path_segment - 1); - const MonotonousRegion ®ion_prev = *path_segment_prev.region; + const MonotonicRegionLink &path_segment_prev = *(&path_segment - 1); + const MonotonicRegion ®ion_prev = *path_segment_prev.region; bool dir_prev = path_segment_prev.flipped; int i_vline_prev = region_prev.right.vline; const SegmentedIntersectionLine &vline_prev = segs[i_vline_prev]; @@ -2456,7 +2456,7 @@ static void polylines_from_paths(const std::vector &path, if (polyline != nullptr) { // Finish the current vertical line, - const MonotonousRegion ®ion = *path.back().region; + const MonotonicRegion ®ion = *path.back().region; const SegmentedIntersectionLine &vline = segs[region.right.vline]; const SegmentIntersection *ip = &vline.intersections[region.right_intersection_point(path.back().flipped)]; assert(ip->is_inner()); @@ -2558,14 +2558,14 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP svg.Close(); #endif /* SLIC3R_DEBUG */ - //FIXME this is a hack to get the monotonous infill rolling. We likely want a smarter switch, likely based on user decison. - bool monotonous_infill = params.monotonous; // || params.density > 0.99; - if (monotonous_infill) { - std::vector regions = generate_montonous_regions(segs); - connect_monotonous_regions(regions, poly_with_offset, segs); + //FIXME this is a hack to get the monotonic infill rolling. We likely want a smarter switch, likely based on user decison. + bool monotonic_infill = params.monotonic; // || params.density > 0.99; + if (monotonic_infill) { + std::vector regions = generate_montonous_regions(segs); + connect_monotonic_regions(regions, poly_with_offset, segs); if (! regions.empty()) { std::mt19937_64 rng; - std::vector path = chain_monotonous_regions(regions, poly_with_offset, segs, rng); + std::vector path = chain_monotonic_regions(regions, poly_with_offset, segs, rng); polylines_from_paths(path, poly_with_offset, segs, polylines_out); } } else @@ -2616,13 +2616,13 @@ Polylines FillRectilinear2::fill_surface(const Surface *surface, const FillParam return polylines_out; } -Polylines FillMonotonous::fill_surface(const Surface *surface, const FillParams ¶ms) +Polylines FillMonotonic::fill_surface(const Surface *surface, const FillParams ¶ms) { FillParams params2 = params; - params2.monotonous = true; + params2.monotonic = true; Polylines polylines_out; if (! fill_surface_by_lines(surface, params2, 0.f, 0.f, polylines_out)) { - printf("FillMonotonous::fill_surface() failed to fill a region.\n"); + printf("FillMonotonic::fill_surface() failed to fill a region.\n"); } return polylines_out; } diff --git a/src/libslic3r/Fill/FillRectilinear2.hpp b/src/libslic3r/Fill/FillRectilinear2.hpp index 3fe95f19c5..fd28f155d4 100644 --- a/src/libslic3r/Fill/FillRectilinear2.hpp +++ b/src/libslic3r/Fill/FillRectilinear2.hpp @@ -20,11 +20,11 @@ protected: bool fill_surface_by_lines(const Surface *surface, const FillParams ¶ms, float angleBase, float pattern_shift, Polylines &polylines_out); }; -class FillMonotonous : public FillRectilinear2 +class FillMonotonic : public FillRectilinear2 { public: - virtual Fill* clone() const { return new FillMonotonous(*this); }; - virtual ~FillMonotonous() = default; + virtual Fill* clone() const { return new FillMonotonic(*this); }; + virtual ~FillMonotonic() = default; virtual Polylines fill_surface(const Surface *surface, const FillParams ¶ms); virtual bool no_sort() const { return true; } }; diff --git a/src/libslic3r/Flow.cpp b/src/libslic3r/Flow.cpp index 1678be999c..e5dcf07310 100644 --- a/src/libslic3r/Flow.cpp +++ b/src/libslic3r/Flow.cpp @@ -53,7 +53,7 @@ static inline FlowRole opt_key_to_flow_role(const std::string &opt_key) else if (opt_key == "support_material_extrusion_width") return frSupportMaterial; else - throw std::runtime_error("opt_key_to_flow_role: invalid argument"); + throw Slic3r::RuntimeError("opt_key_to_flow_role: invalid argument"); }; static inline void throw_on_missing_variable(const std::string &opt_key, const char *dependent_opt_key) @@ -126,7 +126,7 @@ Flow Flow::new_from_config_width(FlowRole role, const ConfigOptionFloatOrPercent { // we need layer height unless it's a bridge if (height <= 0 && bridge_flow_ratio == 0) - throw std::invalid_argument("Invalid flow height supplied to new_from_config_width()"); + throw Slic3r::InvalidArgument("Invalid flow height supplied to new_from_config_width()"); float w; if (bridge_flow_ratio > 0) { @@ -151,7 +151,7 @@ Flow Flow::new_from_spacing(float spacing, float nozzle_diameter, float height, { // we need layer height unless it's a bridge if (height <= 0 && !bridge) - throw std::invalid_argument("Invalid flow height supplied to new_from_spacing()"); + throw Slic3r::InvalidArgument("Invalid flow height supplied to new_from_spacing()"); // Calculate width from spacing. // For normal extrusons, extrusion width is wider than the spacing due to the rounding and squishing of the extrusions. // For bridge extrusions, the extrusions are placed with a tiny BRIDGE_EXTRA_SPACING gaps between the threads. diff --git a/src/libslic3r/Flow.hpp b/src/libslic3r/Flow.hpp index 7d6e35873d..9e57ce9079 100644 --- a/src/libslic3r/Flow.hpp +++ b/src/libslic3r/Flow.hpp @@ -3,6 +3,7 @@ #include "libslic3r.h" #include "Config.hpp" +#include "Exception.hpp" #include "ExtrusionEntity.hpp" namespace Slic3r { @@ -27,11 +28,11 @@ enum FlowRole { frSupportMaterialInterface, }; -class FlowError : public std::invalid_argument +class FlowError : public Slic3r::InvalidArgument { public: - FlowError(const std::string& what_arg) : invalid_argument(what_arg) {} - FlowError(const char* what_arg) : invalid_argument(what_arg) {} + FlowError(const std::string& what_arg) : Slic3r::InvalidArgument(what_arg) {} + FlowError(const char* what_arg) : Slic3r::InvalidArgument(what_arg) {} }; class FlowErrorNegativeSpacing : public FlowError diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index edf55ba37e..a4fd228fc4 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -1,4 +1,5 @@ #include "../libslic3r.h" +#include "../Exception.hpp" #include "../Model.hpp" #include "../Utils.hpp" #include "../GCode.hpp" @@ -86,6 +87,8 @@ const char* OBJECTID_ATTR = "objectid"; const char* TRANSFORM_ATTR = "transform"; const char* PRINTABLE_ATTR = "printable"; const char* INSTANCESCOUNT_ATTR = "instances_count"; +const char* CUSTOM_SUPPORTS_ATTR = "slic3rpe:custom_supports"; +const char* CUSTOM_SEAM_ATTR = "slic3rpe:custom_seam"; const char* KEY_ATTR = "key"; const char* VALUE_ATTR = "value"; @@ -121,11 +124,11 @@ const char* INVALID_OBJECT_TYPES[] = "other" }; -class version_error : public std::runtime_error +class version_error : public Slic3r::FileIOError { public: - version_error(const std::string& what_arg) : std::runtime_error(what_arg) {} - version_error(const char* what_arg) : std::runtime_error(what_arg) {} + version_error(const std::string& what_arg) : Slic3r::FileIOError(what_arg) {} + version_error(const char* what_arg) : Slic3r::FileIOError(what_arg) {} }; const char* get_attribute_value_charptr(const char** attributes, unsigned int attributes_size, const char* attribute_key) @@ -283,6 +286,8 @@ namespace Slic3r { { std::vector vertices; std::vector triangles; + std::vector custom_supports; + std::vector custom_seam; bool empty() { @@ -293,6 +298,8 @@ namespace Slic3r { { vertices.clear(); triangles.clear(); + custom_supports.clear(); + custom_seam.clear(); } }; @@ -601,7 +608,7 @@ namespace Slic3r { { // ensure the zip archive is closed and rethrow the exception close_zip_reader(&archive); - throw std::runtime_error(e.what()); + throw Slic3r::FileIOError(e.what()); } } } @@ -676,23 +683,23 @@ namespace Slic3r { // m_layer_heights_profiles are indexed by a 1 based model object index. IdToLayerHeightsProfileMap::iterator obj_layer_heights_profile = m_layer_heights_profiles.find(object.second + 1); if (obj_layer_heights_profile != m_layer_heights_profiles.end()) - model_object->layer_height_profile = obj_layer_heights_profile->second; + model_object->layer_height_profile.set(std::move(obj_layer_heights_profile->second)); // m_layer_config_ranges are indexed by a 1 based model object index. IdToLayerConfigRangesMap::iterator obj_layer_config_ranges = m_layer_config_ranges.find(object.second + 1); if (obj_layer_config_ranges != m_layer_config_ranges.end()) - model_object->layer_config_ranges = obj_layer_config_ranges->second; + model_object->layer_config_ranges = std::move(obj_layer_config_ranges->second); // m_sla_support_points are indexed by a 1 based model object index. IdToSlaSupportPointsMap::iterator obj_sla_support_points = m_sla_support_points.find(object.second + 1); if (obj_sla_support_points != m_sla_support_points.end() && !obj_sla_support_points->second.empty()) { - model_object->sla_support_points = obj_sla_support_points->second; + model_object->sla_support_points = std::move(obj_sla_support_points->second); model_object->sla_points_status = sla::PointsStatus::UserModified; } IdToSlaDrainHolesMap::iterator obj_drain_holes = m_sla_drain_holes.find(object.second + 1); if (obj_drain_holes != m_sla_drain_holes.end() && !obj_drain_holes->second.empty()) { - model_object->sla_drain_holes = obj_drain_holes->second; + model_object->sla_drain_holes = std::move(obj_drain_holes->second); } IdToMetadataMap::iterator obj_metadata = m_objects_metadata.find(object.first); @@ -774,7 +781,7 @@ namespace Slic3r { { char error_buf[1024]; ::sprintf(error_buf, "Error (%s) while parsing '%s' at line %d", XML_ErrorString(XML_GetErrorCode(data->parser)), data->stat.m_filename, (int)XML_GetCurrentLineNumber(data->parser)); - throw std::runtime_error(error_buf); + throw Slic3r::FileIOError(error_buf); } return n; @@ -783,7 +790,7 @@ namespace Slic3r { catch (const version_error& e) { // rethrow the exception - throw std::runtime_error(e.what()); + throw Slic3r::FileIOError(e.what()); } catch (std::exception& e) { @@ -927,7 +934,7 @@ namespace Slic3r { double max_z = range_tree.get(".max_z"); // get Z range information - DynamicPrintConfig& config = config_ranges[{ min_z, max_z }]; + DynamicPrintConfig config; for (const auto& option : range_tree) { @@ -938,10 +945,12 @@ namespace Slic3r { config.set_deserialize(opt_key, value); } + + config_ranges[{ min_z, max_z }].assign_config(std::move(config)); } if (!config_ranges.empty()) - m_layer_config_ranges.insert(IdToLayerConfigRangesMap::value_type(obj_idx, config_ranges)); + m_layer_config_ranges.insert(IdToLayerConfigRangesMap::value_type(obj_idx, std::move(config_ranges))); } } } @@ -1111,6 +1120,15 @@ namespace Slic3r { float(std::atof(object_data_points[i+6].c_str())), float(std::atof(object_data_points[i+7].c_str()))); } + + // The holes are saved elevated above the mesh and deeper (bad idea indeed). + // This is retained for compatibility. + // Place the hole to the mesh and make it shallower to compensate. + // The offset is 1 mm above the mesh. + for (sla::DrainHole& hole : sla_drain_holes) { + hole.pos += hole.normal.normalized(); + hole.height -= 1.f; + } if (!sla_drain_holes.empty()) m_sla_drain_holes.insert(IdToSlaDrainHolesMap::value_type(object_id, sla_drain_holes)); @@ -1539,6 +1557,9 @@ namespace Slic3r { m_curr_object.geometry.triangles.push_back((unsigned int)get_attribute_value_int(attributes, num_attributes, V1_ATTR)); m_curr_object.geometry.triangles.push_back((unsigned int)get_attribute_value_int(attributes, num_attributes, V2_ATTR)); m_curr_object.geometry.triangles.push_back((unsigned int)get_attribute_value_int(attributes, num_attributes, V3_ATTR)); + + m_curr_object.geometry.custom_supports.push_back(get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR)); + m_curr_object.geometry.custom_seam.push_back(get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR)); return true; } @@ -1872,6 +1893,18 @@ namespace Slic3r { volume->source.transform = Slic3r::Geometry::Transformation(volume_matrix_to_object); volume->calculate_convex_hull(); + // recreate custom supports and seam from previously loaded attribute + for (unsigned i=0; isupported_facets.set_triangle_from_string(i, geometry.custom_supports[index]); + if (! geometry.custom_seam[index].empty()) + volume->seam_facets.set_triangle_from_string(i, geometry.custom_seam[index]); + } + + // apply the remaining volume's metadata for (const Metadata& metadata : volume_data.metadata) { @@ -2330,9 +2363,9 @@ namespace Slic3r { continue; if (!volume->mesh().repaired) - throw std::runtime_error("store_3mf() requires repair()"); + throw Slic3r::FileIOError("store_3mf() requires repair()"); if (!volume->mesh().has_shared_vertices()) - throw std::runtime_error("store_3mf() requires shared vertices"); + throw Slic3r::FileIOError("store_3mf() requires shared vertices"); volumes_offsets.insert(VolumeToOffsetsMap::value_type(volume, Offsets(vertices_count))).first; @@ -2376,13 +2409,22 @@ namespace Slic3r { triangles_count += (int)its.indices.size(); volume_it->second.last_triangle_id = triangles_count - 1; - for (size_t i = 0; i < its.indices.size(); ++ i) + for (int i = 0; i < int(its.indices.size()); ++ i) { stream << " <" << TRIANGLE_TAG << " "; for (int j = 0; j < 3; ++j) { stream << "v" << j + 1 << "=\"" << its.indices[i][j] + volume_it->second.first_vertex_id << "\" "; } + + std::string custom_supports_data_string = volume->supported_facets.get_triangle_as_string(i); + if (! custom_supports_data_string.empty()) + stream << CUSTOM_SUPPORTS_ATTR << "=\"" << custom_supports_data_string << "\" "; + + std::string custom_seam_data_string = volume->seam_facets.get_triangle_as_string(i); + if (! custom_seam_data_string.empty()) + stream << CUSTOM_SEAM_ATTR << "=\"" << custom_seam_data_string << "\" "; + stream << "/>\n"; } } @@ -2432,7 +2474,7 @@ namespace Slic3r { for (const ModelObject* object : model.objects) { ++count; - const std::vector &layer_height_profile = object->layer_height_profile; + const std::vector& layer_height_profile = object->layer_height_profile.get(); if ((layer_height_profile.size() >= 4) && ((layer_height_profile.size() % 2) == 0)) { sprintf(buffer, "object_id=%d|", count); @@ -2487,7 +2529,7 @@ namespace Slic3r { range_tree.put(".max_z", range.first.second); // store range configuration - const DynamicPrintConfig& config = range.second; + const ModelConfig& config = range.second; for (const std::string& opt_key : config.keys()) { pt::ptree& opt_tree = range_tree.add("option", config.opt_serialize(opt_key)); @@ -2573,7 +2615,18 @@ namespace Slic3r { for (const ModelObject* object : model.objects) { ++count; - auto& drain_holes = object->sla_drain_holes; + sla::DrainHoles drain_holes = object->sla_drain_holes; + + // The holes were placed 1mm above the mesh in the first implementation. + // This was a bad idea and the reference point was changed in 2.3 so + // to be on the mesh exactly. The elevated position is still saved + // in 3MFs for compatibility reasons. + for (sla::DrainHole& hole : drain_holes) { + hole.pos -= hole.normal.normalized(); + hole.height += 1.f; + } + + if (!drain_holes.empty()) { out += string_printf(fmt, count); diff --git a/src/libslic3r/Format/3mf.hpp b/src/libslic3r/Format/3mf.hpp index 94a7027757..ccfd9356d8 100644 --- a/src/libslic3r/Format/3mf.hpp +++ b/src/libslic3r/Format/3mf.hpp @@ -35,6 +35,6 @@ namespace Slic3r { // The model could be modified during the export process if meshes are not repaired or have no shared vertices extern bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, bool fullpath_sources, const ThumbnailData* thumbnail_data = nullptr); -}; // namespace Slic3r +} // namespace Slic3r #endif /* slic3r_Format_3mf_hpp_ */ diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp index af7b9b1b60..a2117d63bf 100644 --- a/src/libslic3r/Format/AMF.cpp +++ b/src/libslic3r/Format/AMF.cpp @@ -7,6 +7,7 @@ #include #include "../libslic3r.h" +#include "../Exception.hpp" #include "../Model.hpp" #include "../GCode.hpp" #include "../PrintConfig.hpp" @@ -687,7 +688,7 @@ void AMFParserContext::endElement(const char * /* name */) else if (strncmp(m_value[0].c_str(), "slic3r.", 7) == 0) { const char *opt_key = m_value[0].c_str() + 7; if (print_config_def.options.find(opt_key) != print_config_def.options.end()) { - DynamicPrintConfig *config = nullptr; + ModelConfig *config = nullptr; if (m_path.size() == 3) { if (m_path[1] == NODE_TYPE_MATERIAL && m_material) config = &m_material->config; @@ -705,15 +706,17 @@ void AMFParserContext::endElement(const char * /* name */) } else if (m_path.size() == 3 && m_path[1] == NODE_TYPE_OBJECT && m_object && strcmp(opt_key, "layer_height_profile") == 0) { // Parse object's layer height profile, a semicolon separated list of floats. char *p = m_value[1].data(); + std::vector data; for (;;) { char *end = strchr(p, ';'); if (end != nullptr) *end = 0; - m_object->layer_height_profile.push_back(float(atof(p))); + data.emplace_back(float(atof(p))); if (end == nullptr) break; p = end + 1; } + m_object->layer_height_profile.set(std::move(data)); } else if (m_path.size() == 3 && m_path[1] == NODE_TYPE_OBJECT && m_object && strcmp(opt_key, "sla_support_points") == 0) { // Parse object's layer height profile, a semicolon separated list of floats. @@ -923,7 +926,7 @@ bool extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_fi { char error_buf[1024]; ::sprintf(error_buf, "Error (%s) while parsing '%s' at line %d", XML_ErrorString(XML_GetErrorCode(data->parser)), data->stat.m_filename, (int)XML_GetCurrentLineNumber(data->parser)); - throw std::runtime_error(error_buf); + throw Slic3r::FileIOError(error_buf); } return n; @@ -948,9 +951,9 @@ bool extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_fi if (check_version && (ctx.m_version > VERSION_AMF_COMPATIBLE)) { // std::string msg = _(L("The selected amf file has been saved with a newer version of " + std::string(SLIC3R_APP_NAME) + " and is not compatible.")); - // throw std::runtime_error(msg.c_str()); + // throw Slic3r::FileIOError(msg.c_str()); const std::string msg = (boost::format(_(L("The selected amf file has been saved with a newer version of %1% and is not compatible."))) % std::string(SLIC3R_APP_NAME)).str(); - throw std::runtime_error(msg); + throw Slic3r::FileIOError(msg); } return true; @@ -994,7 +997,7 @@ bool load_amf_archive(const char* path, DynamicPrintConfig* config, Model* model { // ensure the zip archive is closed and rethrow the exception close_zip_reader(&archive); - throw std::runtime_error(e.what()); + throw Slic3r::FileIOError(e.what()); } break; @@ -1094,7 +1097,7 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config, stream << " " << object->config.opt_serialize(key) << "\n"; if (!object->name.empty()) stream << " " << xml_escape(object->name) << "\n"; - const std::vector &layer_height_profile = object->layer_height_profile; + const std::vector &layer_height_profile = object->layer_height_profile.get(); if (layer_height_profile.size() >= 4 && (layer_height_profile.size() % 2) == 0) { // Store the layer height profile as a single semicolon separated list. stream << " "; @@ -1111,7 +1114,7 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config, // Store the layer config range as a single semicolon separated list. stream << " \n"; size_t layer_counter = 0; - for (auto range : config_ranges) { + for (const auto &range : config_ranges) { stream << " \n"; stream << " "; @@ -1147,9 +1150,9 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config, for (ModelVolume *volume : object->volumes) { vertices_offsets.push_back(num_vertices); if (! volume->mesh().repaired) - throw std::runtime_error("store_amf() requires repair()"); + throw Slic3r::FileIOError("store_amf() requires repair()"); if (! volume->mesh().has_shared_vertices()) - throw std::runtime_error("store_amf() requires shared vertices"); + throw Slic3r::FileIOError("store_amf() requires shared vertices"); const indexed_triangle_set &its = volume->mesh().its; const Transform3d& matrix = volume->get_matrix(); for (size_t i = 0; i < its.vertices.size(); ++i) { diff --git a/src/libslic3r/Format/PRUS.cpp b/src/libslic3r/Format/PRUS.cpp index d6f87197df..e2c38d9576 100644 --- a/src/libslic3r/Format/PRUS.cpp +++ b/src/libslic3r/Format/PRUS.cpp @@ -147,7 +147,7 @@ static void extract_model_from_archive( } } if (! trafo_set) - throw std::runtime_error(std::string("Archive ") + path + " does not contain a valid entry in scene.xml for " + name); + throw Slic3r::FileIOError(std::string("Archive ") + path + " does not contain a valid entry in scene.xml for " + name); // Extract the STL. StlHeader header; @@ -266,7 +266,7 @@ static void extract_model_from_archive( } if (! mesh_valid) - throw std::runtime_error(std::string("Archive ") + path + " does not contain a valid mesh for " + name); + throw Slic3r::FileIOError(std::string("Archive ") + path + " does not contain a valid mesh for " + name); // Add this mesh to the model. ModelVolume *volume = nullptr; @@ -303,7 +303,7 @@ bool load_prus(const char *path, Model *model) mz_bool res = MZ_FALSE; try { if (!open_zip_reader(&archive, path)) - throw std::runtime_error(std::string("Unable to init zip reader for ") + path); + throw Slic3r::FileIOError(std::string("Unable to init zip reader for ") + path); std::vector scene_xml_data; // For grouping multiple STLs into a single ModelObject for multi-material prints. std::map group_to_model_object; @@ -316,10 +316,10 @@ bool load_prus(const char *path, Model *model) buffer.assign((size_t)stat.m_uncomp_size, 0); res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, (char*)buffer.data(), (size_t)stat.m_uncomp_size, 0); if (res == MZ_FALSE) - std::runtime_error(std::string("Error while extracting a file from ") + path); + throw Slic3r::FileIOError(std::string("Error while extracting a file from ") + path); if (strcmp(stat.m_filename, "scene.xml") == 0) { if (! scene_xml_data.empty()) - throw std::runtime_error(std::string("Multiple scene.xml were found in the archive.") + path); + throw Slic3r::FileIOError(std::string("Multiple scene.xml were found in the archive.") + path); scene_xml_data = std::move(buffer); } else if (boost::iends_with(stat.m_filename, ".stl")) { // May throw std::exception diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index ba5e89330b..274f84f002 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -8,8 +8,317 @@ #include "libslic3r/Zipper.hpp" #include "libslic3r/SLAPrint.hpp" +#include + +#include "libslic3r/Exception.hpp" +#include "libslic3r/SlicesToTriangleMesh.hpp" +#include "libslic3r/MarchingSquares.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/MTUtils.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/SLA/RasterBase.hpp" +#include "libslic3r/miniz_extension.hpp" +#include "libslic3r/PNGRead.hpp" + +#include +#include +#include + +namespace marchsq { + +template<> struct _RasterTraits { + using Rst = Slic3r::png::ImageGreyscale; + + // The type of pixel cell in the raster + using ValueType = uint8_t; + + // Value at a given position + static uint8_t get(const Rst &rst, size_t row, size_t col) + { + return rst.get(row, col); + } + + // Number of rows and cols of the raster + static size_t rows(const Rst &rst) { return rst.rows; } + static size_t cols(const Rst &rst) { return rst.cols; } +}; + +} // namespace marchsq + namespace Slic3r { +namespace { + +struct PNGBuffer { std::vector buf; std::string fname; }; +struct ArchiveData { + boost::property_tree::ptree profile, config; + std::vector images; +}; + +static const constexpr char *CONFIG_FNAME = "config.ini"; +static const constexpr char *PROFILE_FNAME = "prusaslicer.ini"; + +boost::property_tree::ptree read_ini(const mz_zip_archive_file_stat &entry, + MZ_Archive & zip) +{ + std::string buf(size_t(entry.m_uncomp_size), '\0'); + + if (!mz_zip_reader_extract_file_to_mem(&zip.arch, entry.m_filename, + buf.data(), buf.size(), 0)) + throw Slic3r::FileIOError(zip.get_errorstr()); + + boost::property_tree::ptree tree; + std::stringstream ss(buf); + boost::property_tree::read_ini(ss, tree); + return tree; +} + +PNGBuffer read_png(const mz_zip_archive_file_stat &entry, + MZ_Archive & zip, + const std::string & name) +{ + std::vector buf(entry.m_uncomp_size); + + if (!mz_zip_reader_extract_file_to_mem(&zip.arch, entry.m_filename, + buf.data(), buf.size(), 0)) + throw Slic3r::FileIOError(zip.get_errorstr()); + + return {std::move(buf), (name.empty() ? entry.m_filename : name)}; +} + +ArchiveData extract_sla_archive(const std::string &zipfname, + const std::string &exclude) +{ + ArchiveData arch; + + // Little RAII + struct Arch: public MZ_Archive { + Arch(const std::string &fname) { + if (!open_zip_reader(&arch, fname)) + throw Slic3r::FileIOError(get_errorstr()); + } + + ~Arch() { close_zip_reader(&arch); } + } zip (zipfname); + + mz_uint num_entries = mz_zip_reader_get_num_files(&zip.arch); + + for (mz_uint i = 0; i < num_entries; ++i) + { + mz_zip_archive_file_stat entry; + + if (mz_zip_reader_file_stat(&zip.arch, i, &entry)) + { + std::string name = entry.m_filename; + boost::algorithm::to_lower(name); + + if (boost::algorithm::contains(name, exclude)) continue; + + if (name == CONFIG_FNAME) arch.config = read_ini(entry, zip); + if (name == PROFILE_FNAME) arch.profile = read_ini(entry, zip); + + if (boost::filesystem::path(name).extension().string() == ".png") { + auto it = std::lower_bound( + arch.images.begin(), arch.images.end(), PNGBuffer{{}, name}, + [](const PNGBuffer &r1, const PNGBuffer &r2) { + return std::less()(r1.fname, r2.fname); + }); + + arch.images.insert(it, read_png(entry, zip, name)); + } + } + } + + return arch; +} + +ExPolygons rings_to_expolygons(const std::vector &rings, + double px_w, double px_h) +{ + ExPolygons polys; polys.reserve(rings.size()); + + for (const marchsq::Ring &ring : rings) { + Polygon poly; Points &pts = poly.points; + pts.reserve(ring.size()); + + for (const marchsq::Coord &crd : ring) + pts.emplace_back(scaled(crd.c * px_w), scaled(crd.r * px_h)); + + polys.emplace_back(poly); + } + + // reverse the raster transformations + return union_ex(polys); +} + +template void foreach_vertex(ExPolygon &poly, Fn &&fn) +{ + for (auto &p : poly.contour.points) fn(p); + for (auto &h : poly.holes) + for (auto &p : h.points) fn(p); +} + +void invert_raster_trafo(ExPolygons & expolys, + const sla::RasterBase::Trafo &trafo, + coord_t width, + coord_t height) +{ + if (trafo.flipXY) std::swap(height, width); + + for (auto &expoly : expolys) { + if (trafo.mirror_y) + foreach_vertex(expoly, [height](Point &p) {p.y() = height - p.y(); }); + + if (trafo.mirror_x) + foreach_vertex(expoly, [width](Point &p) {p.x() = width - p.x(); }); + + expoly.translate(-trafo.center_x, -trafo.center_y); + + if (trafo.flipXY) + foreach_vertex(expoly, [](Point &p) { std::swap(p.x(), p.y()); }); + + if ((trafo.mirror_x + trafo.mirror_y + trafo.flipXY) % 2) { + expoly.contour.reverse(); + for (auto &h : expoly.holes) h.reverse(); + } + } +} + +struct RasterParams { + sla::RasterBase::Trafo trafo; // Raster transformations + coord_t width, height; // scaled raster dimensions (not resolution) + double px_h, px_w; // pixel dimesions + marchsq::Coord win; // marching squares window size +}; + +RasterParams get_raster_params(const DynamicPrintConfig &cfg) +{ + auto *opt_disp_cols = cfg.option("display_pixels_x"); + auto *opt_disp_rows = cfg.option("display_pixels_y"); + auto *opt_disp_w = cfg.option("display_width"); + auto *opt_disp_h = cfg.option("display_height"); + auto *opt_mirror_x = cfg.option("display_mirror_x"); + auto *opt_mirror_y = cfg.option("display_mirror_y"); + auto *opt_orient = cfg.option>("display_orientation"); + + if (!opt_disp_cols || !opt_disp_rows || !opt_disp_w || !opt_disp_h || + !opt_mirror_x || !opt_mirror_y || !opt_orient) + throw Slic3r::FileIOError("Invalid SL1 file"); + + RasterParams rstp; + + rstp.px_w = opt_disp_w->value / (opt_disp_cols->value - 1); + rstp.px_h = opt_disp_h->value / (opt_disp_rows->value - 1); + + rstp.trafo = sla::RasterBase::Trafo{opt_orient->value == sladoLandscape ? + sla::RasterBase::roLandscape : + sla::RasterBase::roPortrait, + {opt_mirror_x->value, opt_mirror_y->value}}; + + rstp.height = scaled(opt_disp_h->value); + rstp.width = scaled(opt_disp_w->value); + + return rstp; +} + +struct SliceParams { double layerh = 0., initial_layerh = 0.; }; + +SliceParams get_slice_params(const DynamicPrintConfig &cfg) +{ + auto *opt_layerh = cfg.option("layer_height"); + auto *opt_init_layerh = cfg.option("initial_layer_height"); + + if (!opt_layerh || !opt_init_layerh) + throw Slic3r::FileIOError("Invalid SL1 file"); + + return SliceParams{opt_layerh->getFloat(), opt_init_layerh->getFloat()}; +} + +std::vector extract_slices_from_sla_archive( + ArchiveData & arch, + const RasterParams & rstp, + std::function progr) +{ + auto jobdir = arch.config.get("jobDir"); + for (auto &c : jobdir) c = std::tolower(c); + + std::vector slices(arch.images.size()); + + struct Status + { + double incr, val, prev; + bool stop = false; + tbb::spin_mutex mutex; + } st {100. / slices.size(), 0., 0.}; + + tbb::parallel_for(size_t(0), arch.images.size(), + [&arch, &slices, &st, &rstp, progr](size_t i) { + // Status indication guarded with the spinlock + { + std::lock_guard lck(st.mutex); + if (st.stop) return; + + st.val += st.incr; + double curr = std::round(st.val); + if (curr > st.prev) { + st.prev = curr; + st.stop = !progr(int(curr)); + } + } + + png::ImageGreyscale img; + png::ReadBuf rb{arch.images[i].buf.data(), arch.images[i].buf.size()}; + if (!png::decode_png(rb, img)) return; + + auto rings = marchsq::execute(img, 128, rstp.win); + ExPolygons expolys = rings_to_expolygons(rings, rstp.px_w, rstp.px_h); + + // Invert the raster transformations indicated in + // the profile metadata + invert_raster_trafo(expolys, rstp.trafo, rstp.width, rstp.height); + + slices[i] = std::move(expolys); + }); + + if (st.stop) slices = {}; + + return slices; +} + +} // namespace + +void import_sla_archive(const std::string &zipfname, DynamicPrintConfig &out) +{ + ArchiveData arch = extract_sla_archive(zipfname, "png"); + out.load(arch.profile); +} + +void import_sla_archive( + const std::string & zipfname, + Vec2i windowsize, + TriangleMesh & out, + DynamicPrintConfig & profile, + std::function progr) +{ + // Ensure minimum window size for marching squares + windowsize.x() = std::max(2, windowsize.x()); + windowsize.y() = std::max(2, windowsize.y()); + + ArchiveData arch = extract_sla_archive(zipfname, "thumbnail"); + profile.load(arch.profile); + + RasterParams rstp = get_raster_params(profile); + rstp.win = {windowsize.y(), windowsize.x()}; + + SliceParams slicp = get_slice_params(profile); + + std::vector slices = + extract_slices_from_sla_archive(arch, rstp, progr); + + if (!slices.empty()) + out = slices_to_triangle_mesh(slices, 0, slicp.layerh, slicp.initial_layerh); +} + using ConfMap = std::map; namespace { @@ -126,9 +435,9 @@ uqptr SL1Archive::create_raster() const return sla::create_raster_grayscale_aa(res, pxdim, gamma, tr); } -sla::EncodedRaster SL1Archive::encode_raster(const sla::RasterBase &rst) const +sla::RasterEncoder SL1Archive::get_encoder() const { - return rst.encode(sla::PNGRasterEncoder()); + return sla::PNGRasterEncoder{}; } void SL1Archive::export_print(Zipper& zipper, diff --git a/src/libslic3r/Format/SL1.hpp b/src/libslic3r/Format/SL1.hpp index 1b9e95392b..ab731ff841 100644 --- a/src/libslic3r/Format/SL1.hpp +++ b/src/libslic3r/Format/SL1.hpp @@ -13,7 +13,7 @@ class SL1Archive: public SLAPrinter { protected: uqptr create_raster() const override; - sla::EncodedRaster encode_raster(const sla::RasterBase &rst) const override; + sla::RasterEncoder get_encoder() const override; public: @@ -38,6 +38,24 @@ public: } }; +void import_sla_archive(const std::string &zipfname, DynamicPrintConfig &out); + +void import_sla_archive( + const std::string & zipfname, + Vec2i windowsize, + TriangleMesh & out, + DynamicPrintConfig & profile, + std::function progr = [](int) { return true; }); + +inline void import_sla_archive( + const std::string & zipfname, + Vec2i windowsize, + TriangleMesh & out, + std::function progr = [](int) { return true; }) +{ + DynamicPrintConfig profile; + import_sla_archive(zipfname, windowsize, out, profile, progr); +} } // namespace Slic3r::sla diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 35dc5a53bd..85cb8b3f11 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1,6 +1,7 @@ #include "libslic3r.h" #include "I18N.hpp" #include "GCode.hpp" +#include "Exception.hpp" #include "ExtrusionEntity.hpp" #include "EdgeGrid.hpp" #include "Geometry.hpp" @@ -48,311 +49,316 @@ using namespace std::literals::string_view_literals; namespace Slic3r { -//! macro used to mark string used at localization, -//! return same string + //! macro used to mark string used at localization, + //! return same string #define L(s) (s) #define _(s) Slic3r::I18N::translate(s) // Only add a newline in case the current G-code does not end with a newline. -static inline void check_add_eol(std::string &gcode) -{ - if (! gcode.empty() && gcode.back() != '\n') - gcode += '\n'; -} - - -// Return true if tch_prefix is found in custom_gcode -static bool custom_gcode_changes_tool(const std::string& custom_gcode, const std::string& tch_prefix, unsigned next_extruder) -{ - bool ok = false; - size_t from_pos = 0; - size_t pos = 0; - while ((pos = custom_gcode.find(tch_prefix, from_pos)) != std::string::npos) { - if (pos+1 == custom_gcode.size()) - break; - from_pos = pos+1; - // only whitespace is allowed before the command - while (--pos < custom_gcode.size() && custom_gcode[pos] != '\n') { - if (! std::isspace(custom_gcode[pos])) - goto NEXT; - } - { - // we should also check that the extruder changes to what was expected - std::istringstream ss(custom_gcode.substr(from_pos, std::string::npos)); - unsigned num = 0; - if (ss >> num) - ok = (num == next_extruder); - } -NEXT: ; + static inline void check_add_eol(std::string& gcode) + { + if (!gcode.empty() && gcode.back() != '\n') + gcode += '\n'; } - return ok; -} -void AvoidCrossingPerimeters::init_external_mp(const Print &print) -{ - m_external_mp = Slic3r::make_unique(union_ex(this->collect_contours_all_layers(print.objects()))); -} -// Plan a travel move while minimizing the number of perimeter crossings. -// point is in unscaled coordinates, in the coordinate system of the current active object -// (set by gcodegen.set_origin()). -Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point &point) -{ - // If use_external, then perform the path planning in the world coordinate system (correcting for the gcodegen offset). - // Otherwise perform the path planning in the coordinate system of the active object. - bool use_external = this->use_external_mp || this->use_external_mp_once; - Point scaled_origin = use_external ? Point::new_scale(gcodegen.origin()(0), gcodegen.origin()(1)) : Point(0, 0); - Polyline result = (use_external ? m_external_mp.get() : m_layer_mp.get())-> - shortest_path(gcodegen.last_pos() + scaled_origin, point + scaled_origin); - if (use_external) - result.translate(- scaled_origin); - return result; -} - -// Collect outer contours of all objects over all layers. -// Discard objects only containing thin walls (offset would fail on an empty polygon). -// Used by avoid crossing perimeters feature. -Polygons AvoidCrossingPerimeters::collect_contours_all_layers(const PrintObjectPtrs& objects) -{ - Polygons islands; - for (const PrintObject *object : objects) { - // Reducing all the object slices into the Z projection in a logarithimc fashion. - // First reduce to half the number of layers. - std::vector polygons_per_layer((object->layers().size() + 1) / 2); - tbb::parallel_for(tbb::blocked_range(0, object->layers().size() / 2), - [&object, &polygons_per_layer](const tbb::blocked_range &range) { - for (size_t i = range.begin(); i < range.end(); ++ i) { - const Layer* layer1 = object->layers()[i * 2]; - const Layer* layer2 = object->layers()[i * 2 + 1]; - Polygons polys; - polys.reserve(layer1->lslices.size() + layer2->lslices.size()); - for (const ExPolygon &expoly : layer1->lslices) - //FIXME no holes? - polys.emplace_back(expoly.contour); - for (const ExPolygon &expoly : layer2->lslices) - //FIXME no holes? - polys.emplace_back(expoly.contour); - polygons_per_layer[i] = union_(polys); - } - }); - if (object->layers().size() & 1) { - const Layer *layer = object->layers().back(); - Polygons polys; - polys.reserve(layer->lslices.size()); - for (const ExPolygon &expoly : layer->lslices) - //FIXME no holes? - polys.emplace_back(expoly.contour); - polygons_per_layer.back() = union_(polys); - } - // Now reduce down to a single layer. - size_t cnt = polygons_per_layer.size(); - while (cnt > 1) { - tbb::parallel_for(tbb::blocked_range(0, cnt / 2), - [&polygons_per_layer](const tbb::blocked_range &range) { - for (size_t i = range.begin(); i < range.end(); ++ i) { - Polygons polys; - polys.reserve(polygons_per_layer[i * 2].size() + polygons_per_layer[i * 2 + 1].size()); - polygons_append(polys, polygons_per_layer[i * 2]); - polygons_append(polys, polygons_per_layer[i * 2 + 1]); - polygons_per_layer[i * 2] = union_(polys); - } - }); - for (size_t i = 0; i < cnt / 2; ++ i) - polygons_per_layer[i] = std::move(polygons_per_layer[i * 2]); - if (cnt & 1) - polygons_per_layer[cnt / 2] = std::move(polygons_per_layer[cnt - 1]); - cnt = (cnt + 1) / 2; - } - // And collect copies of the objects. - for (const PrintInstance &instance : object->instances()) { - // All the layers were reduced to the 1st item of polygons_per_layer. - size_t i = islands.size(); - polygons_append(islands, polygons_per_layer.front()); - for (; i < islands.size(); ++ i) - islands[i].translate(instance.shift); - } - } - return islands; -} - -std::string OozePrevention::pre_toolchange(GCode &gcodegen) -{ - std::string gcode; - - // move to the nearest standby point - if (!this->standby_points.empty()) { - // get current position in print coordinates - Vec3d writer_pos = gcodegen.writer().get_position(); - Point pos = Point::new_scale(writer_pos(0), writer_pos(1)); - - // find standby point - Point standby_point; - pos.nearest_point(this->standby_points, &standby_point); - - /* We don't call gcodegen.travel_to() because we don't need retraction (it was already - triggered by the caller) nor avoid_crossing_perimeters and also because the coordinates - of the destination point must not be transformed by origin nor current extruder offset. */ - gcode += gcodegen.writer().travel_to_xy(unscale(standby_point), - "move to standby position"); - } - - if (gcodegen.config().standby_temperature_delta.value != 0) { - // we assume that heating is always slower than cooling, so no need to block - gcode += gcodegen.writer().set_temperature - (this->_get_temp(gcodegen) + gcodegen.config().standby_temperature_delta.value, false, gcodegen.writer().extruder()->id()); - } - - return gcode; -} - -std::string OozePrevention::post_toolchange(GCode &gcodegen) -{ - return (gcodegen.config().standby_temperature_delta.value != 0) ? - gcodegen.writer().set_temperature(this->_get_temp(gcodegen), true, gcodegen.writer().extruder()->id()) : - std::string(); -} - -int -OozePrevention::_get_temp(GCode &gcodegen) -{ - return (gcodegen.layer() != NULL && gcodegen.layer()->id() == 0) - ? gcodegen.config().first_layer_temperature.get_at(gcodegen.writer().extruder()->id()) - : gcodegen.config().temperature.get_at(gcodegen.writer().extruder()->id()); -} - -std::string Wipe::wipe(GCode &gcodegen, bool toolchange) -{ - std::string gcode; - - /* Reduce feedrate a bit; travel speed is often too high to move on existing material. - Too fast = ripping of existing material; too slow = short wipe path, thus more blob. */ - double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8; - - // get the retraction length - double length = toolchange - ? gcodegen.writer().extruder()->retract_length_toolchange() - : gcodegen.writer().extruder()->retract_length(); - // Shorten the retraction length by the amount already retracted before wipe. - length *= (1. - gcodegen.writer().extruder()->retract_before_wipe()); - - if (length > 0) { - /* Calculate how long we need to travel in order to consume the required - amount of retraction. In other words, how far do we move in XY at wipe_speed - for the time needed to consume retract_length at retract_speed? */ - double wipe_dist = scale_(length / gcodegen.writer().extruder()->retract_speed() * wipe_speed); - - /* Take the stored wipe path and replace first point with the current actual position - (they might be different, for example, in case of loop clipping). */ - Polyline wipe_path; - wipe_path.append(gcodegen.last_pos()); - wipe_path.append( - this->path.points.begin() + 1, - this->path.points.end() - ); - - wipe_path.clip_end(wipe_path.length() - wipe_dist); - - // subdivide the retraction in segments - if (! wipe_path.empty()) { - for (const Line &line : wipe_path.lines()) { - double segment_length = line.length(); - /* Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one - due to rounding (TODO: test and/or better math for this) */ - double dE = length * (segment_length / wipe_dist) * 0.95; - //FIXME one shall not generate the unnecessary G1 Fxxx commands, here wipe_speed is a constant inside this cycle. - // Is it here for the cooling markers? Or should it be outside of the cycle? - gcode += gcodegen.writer().set_speed(wipe_speed*60, "", gcodegen.enable_cooling_markers() ? ";_WIPE" : ""); - gcode += gcodegen.writer().extrude_to_xy( - gcodegen.point_to_gcode(line.b), - -dE, - "wipe and retract" - ); + // Return true if tch_prefix is found in custom_gcode + static bool custom_gcode_changes_tool(const std::string& custom_gcode, const std::string& tch_prefix, unsigned next_extruder) + { + bool ok = false; + size_t from_pos = 0; + size_t pos = 0; + while ((pos = custom_gcode.find(tch_prefix, from_pos)) != std::string::npos) { + if (pos + 1 == custom_gcode.size()) + break; + from_pos = pos + 1; + // only whitespace is allowed before the command + while (--pos < custom_gcode.size() && custom_gcode[pos] != '\n') { + if (!std::isspace(custom_gcode[pos])) + goto NEXT; } - gcodegen.set_last_pos(wipe_path.points.back()); + { + // we should also check that the extruder changes to what was expected + std::istringstream ss(custom_gcode.substr(from_pos, std::string::npos)); + unsigned num = 0; + if (ss >> num) + ok = (num == next_extruder); + } + NEXT:; } - - // prevent wiping again on same path - this->reset_path(); - } - - return gcode; -} - -static inline Point wipe_tower_point_to_object_point(GCode &gcodegen, const Vec2f &wipe_tower_pt) -{ - return Point(scale_(wipe_tower_pt.x() - gcodegen.origin()(0)), scale_(wipe_tower_pt.y() - gcodegen.origin()(1))); -} - -std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z) const -{ - if (new_extruder_id != -1 && new_extruder_id != tcr.new_tool) - throw std::invalid_argument("Error: WipeTowerIntegration::append_tcr was asked to do a toolchange it didn't expect."); - - std::string gcode; - - // Toolchangeresult.gcode assumes the wipe tower corner is at the origin (except for priming lines) - // We want to rotate and shift all extrusions (gcode postprocessing) and starting and ending position - float alpha = m_wipe_tower_rotation/180.f * float(M_PI); - Vec2f start_pos = tcr.start_pos; - Vec2f end_pos = tcr.end_pos; - if (!tcr.priming) { - start_pos = Eigen::Rotation2Df(alpha) * start_pos; - start_pos += m_wipe_tower_pos; - end_pos = Eigen::Rotation2Df(alpha) * end_pos; - end_pos += m_wipe_tower_pos; + return ok; } - Vec2f wipe_tower_offset = tcr.priming ? Vec2f::Zero() : m_wipe_tower_pos; - float wipe_tower_rotation = tcr.priming ? 0.f : alpha; - - std::string tcr_rotated_gcode = post_process_wipe_tower_moves(tcr, wipe_tower_offset, wipe_tower_rotation); - - if (!tcr.priming) { - // Move over the wipe tower. - // Retract for a tool change, using the toolchange retract value and setting the priming extra length. - gcode += gcodegen.retract(true); - gcodegen.m_avoid_crossing_perimeters.use_external_mp_once = true; - gcode += gcodegen.travel_to( - wipe_tower_point_to_object_point(gcodegen, start_pos), - erMixed, - "Travel to a Wipe Tower"); - gcode += gcodegen.unretract(); + void AvoidCrossingPerimeters::init_external_mp(const Print& print) + { + m_external_mp = Slic3r::make_unique(union_ex(this->collect_contours_all_layers(print.objects()))); } - double current_z = gcodegen.writer().get_position().z(); - if (z == -1.) // in case no specific z was provided, print at current_z pos - z = current_z; - if (! is_approx(z, current_z)) { - gcode += gcodegen.writer().retract(); - gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer."); - gcode += gcodegen.writer().unretract(); + // Plan a travel move while minimizing the number of perimeter crossings. + // point is in unscaled coordinates, in the coordinate system of the current active object + // (set by gcodegen.set_origin()). + Polyline AvoidCrossingPerimeters::travel_to(const GCode& gcodegen, const Point& point) + { + // If use_external, then perform the path planning in the world coordinate system (correcting for the gcodegen offset). + // Otherwise perform the path planning in the coordinate system of the active object. + bool use_external = this->use_external_mp || this->use_external_mp_once; + Point scaled_origin = use_external ? Point::new_scale(gcodegen.origin()(0), gcodegen.origin()(1)) : Point(0, 0); + Polyline result = (use_external ? m_external_mp.get() : m_layer_mp.get())-> + shortest_path(gcodegen.last_pos() + scaled_origin, point + scaled_origin); + if (use_external) + result.translate(-scaled_origin); + return result; } - - // Process the end filament gcode. - std::string end_filament_gcode_str; - if (gcodegen.writer().extruder() != nullptr) { - // Process the custom end_filament_gcode in case of single_extruder_multi_material. - unsigned int old_extruder_id = gcodegen.writer().extruder()->id(); - const std::string &end_filament_gcode = gcodegen.config().end_filament_gcode.get_at(old_extruder_id); - if (gcodegen.writer().extruder() != nullptr && ! end_filament_gcode.empty()) { - end_filament_gcode_str = gcodegen.placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id); - check_add_eol(end_filament_gcode_str); + // Collect outer contours of all objects over all layers. + // Discard objects only containing thin walls (offset would fail on an empty polygon). + // Used by avoid crossing perimeters feature. + Polygons AvoidCrossingPerimeters::collect_contours_all_layers(const PrintObjectPtrs& objects) + { + Polygons islands; + for (const PrintObject* object : objects) { + // Reducing all the object slices into the Z projection in a logarithimc fashion. + // First reduce to half the number of layers. + std::vector polygons_per_layer((object->layers().size() + 1) / 2); + tbb::parallel_for(tbb::blocked_range(0, object->layers().size() / 2), + [&object, &polygons_per_layer](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) { + const Layer* layer1 = object->layers()[i * 2]; + const Layer* layer2 = object->layers()[i * 2 + 1]; + Polygons polys; + polys.reserve(layer1->lslices.size() + layer2->lslices.size()); + for (const ExPolygon& expoly : layer1->lslices) + //FIXME no holes? + polys.emplace_back(expoly.contour); + for (const ExPolygon& expoly : layer2->lslices) + //FIXME no holes? + polys.emplace_back(expoly.contour); + polygons_per_layer[i] = union_(polys); + } + }); + if (object->layers().size() & 1) { + const Layer* layer = object->layers().back(); + Polygons polys; + polys.reserve(layer->lslices.size()); + for (const ExPolygon& expoly : layer->lslices) + //FIXME no holes? + polys.emplace_back(expoly.contour); + polygons_per_layer.back() = union_(polys); + } + // Now reduce down to a single layer. + size_t cnt = polygons_per_layer.size(); + while (cnt > 1) { + tbb::parallel_for(tbb::blocked_range(0, cnt / 2), + [&polygons_per_layer](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) { + Polygons polys; + polys.reserve(polygons_per_layer[i * 2].size() + polygons_per_layer[i * 2 + 1].size()); + polygons_append(polys, polygons_per_layer[i * 2]); + polygons_append(polys, polygons_per_layer[i * 2 + 1]); + polygons_per_layer[i * 2] = union_(polys); + } + }); + for (size_t i = 1; i < cnt / 2; ++i) + polygons_per_layer[i] = std::move(polygons_per_layer[i * 2]); + if (cnt & 1) + polygons_per_layer[cnt / 2] = std::move(polygons_per_layer[cnt - 1]); + cnt = (cnt + 1) / 2; + } + // And collect copies of the objects. + for (const PrintInstance& instance : object->instances()) { + // All the layers were reduced to the 1st item of polygons_per_layer. + size_t i = islands.size(); + polygons_append(islands, polygons_per_layer.front()); + for (; i < islands.size(); ++i) + islands[i].translate(instance.shift); + } } + return islands; } - // Process the custom toolchange_gcode. If it is empty, provide a simple Tn command to change the filament. - // Otherwise, leave control to the user completely. - std::string toolchange_gcode_str; - if (true /*gcodegen.writer().extruder() != nullptr*/) { + + std::string OozePrevention::pre_toolchange(GCode& gcodegen) + { + std::string gcode; + + // move to the nearest standby point + if (!this->standby_points.empty()) { + // get current position in print coordinates + Vec3d writer_pos = gcodegen.writer().get_position(); + Point pos = Point::new_scale(writer_pos(0), writer_pos(1)); + + // find standby point + Point standby_point; + pos.nearest_point(this->standby_points, &standby_point); + + /* We don't call gcodegen.travel_to() because we don't need retraction (it was already + triggered by the caller) nor avoid_crossing_perimeters and also because the coordinates + of the destination point must not be transformed by origin nor current extruder offset. */ + gcode += gcodegen.writer().travel_to_xy(unscale(standby_point), + "move to standby position"); + } + + if (gcodegen.config().standby_temperature_delta.value != 0) { + // we assume that heating is always slower than cooling, so no need to block + gcode += gcodegen.writer().set_temperature + (this->_get_temp(gcodegen) + gcodegen.config().standby_temperature_delta.value, false, gcodegen.writer().extruder()->id()); + } + + return gcode; + } + + std::string OozePrevention::post_toolchange(GCode& gcodegen) + { + return (gcodegen.config().standby_temperature_delta.value != 0) ? + gcodegen.writer().set_temperature(this->_get_temp(gcodegen), true, gcodegen.writer().extruder()->id()) : + std::string(); + } + + int + OozePrevention::_get_temp(GCode& gcodegen) + { + return (gcodegen.layer() != NULL && gcodegen.layer()->id() == 0) + ? gcodegen.config().first_layer_temperature.get_at(gcodegen.writer().extruder()->id()) + : gcodegen.config().temperature.get_at(gcodegen.writer().extruder()->id()); + } + + std::string Wipe::wipe(GCode& gcodegen, bool toolchange) + { + std::string gcode; + + /* Reduce feedrate a bit; travel speed is often too high to move on existing material. + Too fast = ripping of existing material; too slow = short wipe path, thus more blob. */ + double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8; + + // get the retraction length + double length = toolchange + ? gcodegen.writer().extruder()->retract_length_toolchange() + : gcodegen.writer().extruder()->retract_length(); + // Shorten the retraction length by the amount already retracted before wipe. + length *= (1. - gcodegen.writer().extruder()->retract_before_wipe()); + + if (length > 0) { + /* Calculate how long we need to travel in order to consume the required + amount of retraction. In other words, how far do we move in XY at wipe_speed + for the time needed to consume retract_length at retract_speed? */ + double wipe_dist = scale_(length / gcodegen.writer().extruder()->retract_speed() * wipe_speed); + + /* Take the stored wipe path and replace first point with the current actual position + (they might be different, for example, in case of loop clipping). */ + Polyline wipe_path; + wipe_path.append(gcodegen.last_pos()); + wipe_path.append( + this->path.points.begin() + 1, + this->path.points.end() + ); + + wipe_path.clip_end(wipe_path.length() - wipe_dist); + + // subdivide the retraction in segments + if (!wipe_path.empty()) { + for (const Line& line : wipe_path.lines()) { + double segment_length = line.length(); + /* Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one + due to rounding (TODO: test and/or better math for this) */ + double dE = length * (segment_length / wipe_dist) * 0.95; + //FIXME one shall not generate the unnecessary G1 Fxxx commands, here wipe_speed is a constant inside this cycle. + // Is it here for the cooling markers? Or should it be outside of the cycle? + gcode += gcodegen.writer().set_speed(wipe_speed * 60, "", gcodegen.enable_cooling_markers() ? ";_WIPE" : ""); + gcode += gcodegen.writer().extrude_to_xy( + gcodegen.point_to_gcode(line.b), + -dE, + "wipe and retract" + ); + } + gcodegen.set_last_pos(wipe_path.points.back()); + } + + // prevent wiping again on same path + this->reset_path(); + } + + return gcode; + } + + static inline Point wipe_tower_point_to_object_point(GCode& gcodegen, const Vec2f& wipe_tower_pt) + { + return Point(scale_(wipe_tower_pt.x() - gcodegen.origin()(0)), scale_(wipe_tower_pt.y() - gcodegen.origin()(1))); + } + + std::string WipeTowerIntegration::append_tcr(GCode& gcodegen, const WipeTower::ToolChangeResult& tcr, int new_extruder_id, double z) const + { + if (new_extruder_id != -1 && new_extruder_id != tcr.new_tool) + throw Slic3r::InvalidArgument("Error: WipeTowerIntegration::append_tcr was asked to do a toolchange it didn't expect."); + + std::string gcode; + + // Toolchangeresult.gcode assumes the wipe tower corner is at the origin (except for priming lines) + // We want to rotate and shift all extrusions (gcode postprocessing) and starting and ending position + float alpha = m_wipe_tower_rotation / 180.f * float(M_PI); + + auto transform_wt_pt = [&alpha, this](const Vec2f& pt) -> Vec2f { + Vec2f out = Eigen::Rotation2Df(alpha) * pt; + out += m_wipe_tower_pos; + return out; + }; + + Vec2f start_pos = tcr.start_pos; + Vec2f end_pos = tcr.end_pos; + if (! tcr.priming) { + start_pos = transform_wt_pt(start_pos); + end_pos = transform_wt_pt(end_pos); + } + + Vec2f wipe_tower_offset = tcr.priming ? Vec2f::Zero() : m_wipe_tower_pos; + float wipe_tower_rotation = tcr.priming ? 0.f : alpha; + + std::string tcr_rotated_gcode = post_process_wipe_tower_moves(tcr, wipe_tower_offset, wipe_tower_rotation); + + if (! tcr.priming) { + // Move over the wipe tower. + // Retract for a tool change, using the toolchange retract value and setting the priming extra length. + gcode += gcodegen.retract(true); + gcodegen.m_avoid_crossing_perimeters.use_external_mp_once = true; + gcode += gcodegen.travel_to( + wipe_tower_point_to_object_point(gcodegen, start_pos), + erMixed, + "Travel to a Wipe Tower"); + gcode += gcodegen.unretract(); + } + + double current_z = gcodegen.writer().get_position().z(); + if (z == -1.) // in case no specific z was provided, print at current_z pos + z = current_z; + if (! is_approx(z, current_z)) { + gcode += gcodegen.writer().retract(); + gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer."); + gcode += gcodegen.writer().unretract(); + } + + + // Process the end filament gcode. + std::string end_filament_gcode_str; + if (gcodegen.writer().extruder() != nullptr) { + // Process the custom end_filament_gcode in case of single_extruder_multi_material. + unsigned int old_extruder_id = gcodegen.writer().extruder()->id(); + const std::string& end_filament_gcode = gcodegen.config().end_filament_gcode.get_at(old_extruder_id); + if (gcodegen.writer().extruder() != nullptr && !end_filament_gcode.empty()) { + end_filament_gcode_str = gcodegen.placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id); + check_add_eol(end_filament_gcode_str); + } + } + + // Process the custom toolchange_gcode. If it is empty, provide a simple Tn command to change the filament. + // Otherwise, leave control to the user completely. + std::string toolchange_gcode_str; const std::string& toolchange_gcode = gcodegen.config().toolchange_gcode.value; - if (!toolchange_gcode.empty()) { + if (! toolchange_gcode.empty()) { DynamicConfig config; int previous_extruder_id = gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1; config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id)); - config.set_key_value("next_extruder", new ConfigOptionInt((int)new_extruder_id)); - config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); - config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); + config.set_key_value("next_extruder", new ConfigOptionInt((int)new_extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); toolchange_gcode_str = gcodegen.placeholder_parser_process("toolchange_gcode", toolchange_gcode, new_extruder_id, &config); check_add_eol(toolchange_gcode_str); } @@ -360,282 +366,254 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T std::string toolchange_command; if (tcr.priming || (new_extruder_id >= 0 && gcodegen.writer().need_toolchange(new_extruder_id))) toolchange_command = gcodegen.writer().toolchange(new_extruder_id); - if (! custom_gcode_changes_tool(toolchange_gcode_str, gcodegen.writer().toolchange_prefix(), new_extruder_id)) + if (!custom_gcode_changes_tool(toolchange_gcode_str, gcodegen.writer().toolchange_prefix(), new_extruder_id)) toolchange_gcode_str += toolchange_command; else { // We have informed the m_writer about the current extruder_id, we can ignore the generated G-code. } - } - gcodegen.placeholder_parser().set("current_extruder", new_extruder_id); + gcodegen.placeholder_parser().set("current_extruder", new_extruder_id); - // Process the start filament gcode. - std::string start_filament_gcode_str; - const std::string &start_filament_gcode = gcodegen.config().start_filament_gcode.get_at(new_extruder_id); - if (! start_filament_gcode.empty()) { - // Process the start_filament_gcode for the active filament only. + // Process the start filament gcode. + std::string start_filament_gcode_str; + const std::string& start_filament_gcode = gcodegen.config().start_filament_gcode.get_at(new_extruder_id); + if (!start_filament_gcode.empty()) { + // Process the start_filament_gcode for the active filament only. + DynamicConfig config; + config.set_key_value("filament_extruder_id", new ConfigOptionInt(new_extruder_id)); + start_filament_gcode_str = gcodegen.placeholder_parser_process("start_filament_gcode", start_filament_gcode, new_extruder_id, &config); + check_add_eol(start_filament_gcode_str); + } + + // Insert the end filament, toolchange, and start filament gcode into the generated gcode. DynamicConfig config; - config.set_key_value("filament_extruder_id", new ConfigOptionInt(new_extruder_id)); - start_filament_gcode_str = gcodegen.placeholder_parser_process("start_filament_gcode", start_filament_gcode, new_extruder_id, &config); - check_add_eol(start_filament_gcode_str); - } - - // Insert the end filament, toolchange, and start filament gcode into the generated gcode. - DynamicConfig config; - config.set_key_value("end_filament_gcode", new ConfigOptionString(end_filament_gcode_str)); - config.set_key_value("toolchange_gcode", new ConfigOptionString(toolchange_gcode_str)); - config.set_key_value("start_filament_gcode", new ConfigOptionString(start_filament_gcode_str)); - std::string tcr_gcode, tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config); - unescape_string_cstyle(tcr_escaped_gcode, tcr_gcode); - gcode += tcr_gcode; - check_add_eol(toolchange_gcode_str); + config.set_key_value("end_filament_gcode", new ConfigOptionString(end_filament_gcode_str)); + config.set_key_value("toolchange_gcode", new ConfigOptionString(toolchange_gcode_str)); + config.set_key_value("start_filament_gcode", new ConfigOptionString(start_filament_gcode_str)); + std::string tcr_gcode, tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config); + unescape_string_cstyle(tcr_escaped_gcode, tcr_gcode); + gcode += tcr_gcode; + check_add_eol(toolchange_gcode_str); - // A phony move to the end position at the wipe tower. - gcodegen.writer().travel_to_xy(end_pos.cast()); - gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, end_pos)); - if (! is_approx(z, current_z)) { - gcode += gcodegen.writer().retract(); - gcode += gcodegen.writer().travel_to_z(current_z, "Travel back up to the topmost object layer."); - gcode += gcodegen.writer().unretract(); - } - - else { - // Prepare a future wipe. - gcodegen.m_wipe.path.points.clear(); - if (new_extruder_id >= 0) { - // Start the wipe at the current position. - gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, end_pos)); - // Wipe end point: Wipe direction away from the closer tower edge to the further tower edge. - gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, - Vec2f((std::abs(m_left - end_pos.x()) < std::abs(m_right - end_pos.x())) ? m_right : m_left, - end_pos.y()))); - } - } - - // Let the planner know we are traveling between objects. - gcodegen.m_avoid_crossing_perimeters.use_external_mp_once = true; - return gcode; -} - -// This function postprocesses gcode_original, rotates and moves all G1 extrusions and returns resulting gcode -// Starting position has to be supplied explicitely (otherwise it would fail in case first G1 command only contained one coordinate) -std::string WipeTowerIntegration::post_process_wipe_tower_moves(const WipeTower::ToolChangeResult& tcr, const Vec2f& translation, float angle) const -{ - Vec2f extruder_offset = m_extruder_offsets[tcr.initial_tool].cast(); - - std::istringstream gcode_str(tcr.gcode); - std::string gcode_out; - std::string line; - Vec2f pos = tcr.start_pos; - Vec2f transformed_pos = pos; - Vec2f old_pos(-1000.1f, -1000.1f); - - while (gcode_str) { - std::getline(gcode_str, line); // we read the gcode line by line - - // All G1 commands should be translated and rotated. X and Y coords are - // only pushed to the output when they differ from last time. - // WT generator can override this by appending the never_skip_tag - if (line.find("G1 ") == 0) { - bool never_skip = false; - auto it = line.find(WipeTower::never_skip_tag()); - if (it != std::string::npos) { - // remove the tag and remember we saw it - never_skip = true; - line.erase(it, it+WipeTower::never_skip_tag().size()); - } - std::ostringstream line_out; - std::istringstream line_str(line); - line_str >> std::noskipws; // don't skip whitespace - char ch = 0; - while (line_str >> ch) { - if (ch == 'X' || ch =='Y') - line_str >> (ch == 'X' ? pos.x() : pos.y()); - else - line_out << ch; - } - - transformed_pos = Eigen::Rotation2Df(angle) * pos + translation; - - if (transformed_pos != old_pos || never_skip) { - line = line_out.str(); - std::ostringstream oss; - oss << std::fixed << std::setprecision(3) << "G1 "; - if (transformed_pos.x() != old_pos.x() || never_skip) - oss << " X" << transformed_pos.x() - extruder_offset.x(); - if (transformed_pos.y() != old_pos.y() || never_skip) - oss << " Y" << transformed_pos.y() - extruder_offset.y(); - oss << " "; - line.replace(line.find("G1 "), 3, oss.str()); - old_pos = transformed_pos; - } + // A phony move to the end position at the wipe tower. + gcodegen.writer().travel_to_xy(end_pos.cast()); + gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, end_pos)); + if (!is_approx(z, current_z)) { + gcode += gcodegen.writer().retract(); + gcode += gcodegen.writer().travel_to_z(current_z, "Travel back up to the topmost object layer."); + gcode += gcodegen.writer().unretract(); } - gcode_out += line + "\n"; + else { + // Prepare a future wipe. + gcodegen.m_wipe.reset_path(); + for (const Vec2f& wipe_pt : tcr.wipe_path) + gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, transform_wt_pt(wipe_pt))); + } - // If this was a toolchange command, we should change current extruder offset - if (line == "[toolchange_gcode]") { - extruder_offset = m_extruder_offsets[tcr.new_tool].cast(); + // Let the planner know we are traveling between objects. + gcodegen.m_avoid_crossing_perimeters.use_external_mp_once = true; + return gcode; + } - // If the extruder offset changed, add an extra move so everything is continuous - if (extruder_offset != m_extruder_offsets[tcr.initial_tool].cast()) { - std::ostringstream oss; - oss << std::fixed << std::setprecision(3) - << "G1 X" << transformed_pos.x() - extruder_offset.x() - << " Y" << transformed_pos.y() - extruder_offset.y() - << "\n"; - gcode_out += oss.str(); + // This function postprocesses gcode_original, rotates and moves all G1 extrusions and returns resulting gcode + // Starting position has to be supplied explicitely (otherwise it would fail in case first G1 command only contained one coordinate) + std::string WipeTowerIntegration::post_process_wipe_tower_moves(const WipeTower::ToolChangeResult& tcr, const Vec2f& translation, float angle) const + { + Vec2f extruder_offset = m_extruder_offsets[tcr.initial_tool].cast(); + + std::istringstream gcode_str(tcr.gcode); + std::string gcode_out; + std::string line; + Vec2f pos = tcr.start_pos; + Vec2f transformed_pos = pos; + Vec2f old_pos(-1000.1f, -1000.1f); + + while (gcode_str) { + std::getline(gcode_str, line); // we read the gcode line by line + + // All G1 commands should be translated and rotated. X and Y coords are + // only pushed to the output when they differ from last time. + // WT generator can override this by appending the never_skip_tag + if (line.find("G1 ") == 0) { + bool never_skip = false; + auto it = line.find(WipeTower::never_skip_tag()); + if (it != std::string::npos) { + // remove the tag and remember we saw it + never_skip = true; + line.erase(it, it + WipeTower::never_skip_tag().size()); + } + std::ostringstream line_out; + std::istringstream line_str(line); + line_str >> std::noskipws; // don't skip whitespace + char ch = 0; + while (line_str >> ch) { + if (ch == 'X' || ch == 'Y') + line_str >> (ch == 'X' ? pos.x() : pos.y()); + else + line_out << ch; + } + + transformed_pos = Eigen::Rotation2Df(angle) * pos + translation; + + if (transformed_pos != old_pos || never_skip) { + line = line_out.str(); + std::ostringstream oss; + oss << std::fixed << std::setprecision(3) << "G1 "; + if (transformed_pos.x() != old_pos.x() || never_skip) + oss << " X" << transformed_pos.x() - extruder_offset.x(); + if (transformed_pos.y() != old_pos.y() || never_skip) + oss << " Y" << transformed_pos.y() - extruder_offset.y(); + oss << " "; + line.replace(line.find("G1 "), 3, oss.str()); + old_pos = transformed_pos; + } + } + + gcode_out += line + "\n"; + + // If this was a toolchange command, we should change current extruder offset + if (line == "[toolchange_gcode]") { + extruder_offset = m_extruder_offsets[tcr.new_tool].cast(); + + // If the extruder offset changed, add an extra move so everything is continuous + if (extruder_offset != m_extruder_offsets[tcr.initial_tool].cast()) { + std::ostringstream oss; + oss << std::fixed << std::setprecision(3) + << "G1 X" << transformed_pos.x() - extruder_offset.x() + << " Y" << transformed_pos.y() - extruder_offset.y() + << "\n"; + gcode_out += oss.str(); + } } } - } - return gcode_out; -} - - -std::string WipeTowerIntegration::prime(GCode &gcodegen) -{ - assert(m_layer_idx == 0); - std::string gcode; - - - // Disable linear advance for the wipe tower operations. - //gcode += (gcodegen.config().gcode_flavor == gcfRepRap ? std::string("M572 D0 S0\n") : std::string("M900 K0\n")); - - for (const WipeTower::ToolChangeResult& tcr : m_priming) { - if (!tcr.extrusions.empty()) - gcode += append_tcr(gcodegen, tcr, tcr.new_tool); - - - // Let the tool change be executed by the wipe tower class. - // Inform the G-code writer about the changes done behind its back. - //gcode += tcr.gcode; - // Let the m_writer know the current extruder_id, but ignore the generated G-code. - // unsigned int current_extruder_id = tcr.extrusions.back().tool; - // gcodegen.writer().toolchange(current_extruder_id); - // gcodegen.placeholder_parser().set("current_extruder", current_extruder_id); - + return gcode_out; } - // A phony move to the end position at the wipe tower. - /* gcodegen.writer().travel_to_xy(Vec2d(m_priming.back().end_pos.x, m_priming.back().end_pos.y)); - gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, m_priming.back().end_pos)); - // Prepare a future wipe. - gcodegen.m_wipe.path.points.clear(); - // Start the wipe at the current position. - gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, m_priming.back().end_pos)); - // Wipe end point: Wipe direction away from the closer tower edge to the further tower edge. - gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, - WipeTower::xy((std::abs(m_left - m_priming.back().end_pos.x) < std::abs(m_right - m_priming.back().end_pos.x)) ? m_right : m_left, - m_priming.back().end_pos.y)));*/ - return gcode; -} + std::string WipeTowerIntegration::prime(GCode& gcodegen) + { + assert(m_layer_idx == 0); + std::string gcode; -std::string WipeTowerIntegration::tool_change(GCode &gcodegen, int extruder_id, bool finish_layer) -{ - std::string gcode; - assert(m_layer_idx >= 0); - if (! m_brim_done || gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { - if (m_layer_idx < (int)m_tool_changes.size()) { - if (! (size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) - throw std::runtime_error("Wipe tower generation failed, possibly due to empty first layer."); + for (const WipeTower::ToolChangeResult& tcr : m_priming) { + if (! tcr.extrusions.empty()) + gcode += append_tcr(gcodegen, tcr, tcr.new_tool); + } + + return gcode; + } + + std::string WipeTowerIntegration::tool_change(GCode& gcodegen, int extruder_id, bool finish_layer) + { + std::string gcode; + assert(m_layer_idx >= 0); + if (!m_brim_done || gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { + if (m_layer_idx < (int)m_tool_changes.size()) { + if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) + throw Slic3r::RuntimeError("Wipe tower generation failed, possibly due to empty first layer."); - // Calculate where the wipe tower layer will be printed. -1 means that print z will not change, - // resulting in a wipe tower with sparse layers. - double wipe_tower_z = -1; - bool ignore_sparse = false; - if (gcodegen.config().wipe_tower_no_sparse_layers.value) { - wipe_tower_z = m_last_wipe_tower_print_z; - ignore_sparse = (m_brim_done && m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); - if (m_tool_change_idx == 0 && ! ignore_sparse) - wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; + // Calculate where the wipe tower layer will be printed. -1 means that print z will not change, + // resulting in a wipe tower with sparse layers. + double wipe_tower_z = -1; + bool ignore_sparse = false; + if (gcodegen.config().wipe_tower_no_sparse_layers.value) { + wipe_tower_z = m_last_wipe_tower_print_z; + ignore_sparse = (m_brim_done && m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); + if (m_tool_change_idx == 0 && !ignore_sparse) + wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; + } + + if (!ignore_sparse) { + gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z); + m_last_wipe_tower_print_z = wipe_tower_z; + } } - - if (! ignore_sparse) { - gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z); - m_last_wipe_tower_print_z = wipe_tower_z; - } - } - m_brim_done = true; + m_brim_done = true; + } + return gcode; } - return gcode; -} -// Print is finished. Now it remains to unload the filament safely with ramming over the wipe tower. -std::string WipeTowerIntegration::finalize(GCode &gcodegen) -{ - std::string gcode; - if (std::abs(gcodegen.writer().get_position()(2) - m_final_purge.print_z) > EPSILON) - gcode += gcodegen.change_layer(m_final_purge.print_z); - gcode += append_tcr(gcodegen, m_final_purge, -1); - return gcode; -} + // Print is finished. Now it remains to unload the filament safely with ramming over the wipe tower. + std::string WipeTowerIntegration::finalize(GCode& gcodegen) + { + std::string gcode; + if (std::abs(gcodegen.writer().get_position()(2) - m_final_purge.print_z) > EPSILON) + gcode += gcodegen.change_layer(m_final_purge.print_z); + gcode += append_tcr(gcodegen, m_final_purge, -1); + return gcode; + } + +#if ENABLE_GCODE_VIEWER + const std::vector ColorPrintColors::Colors = { "#C0392B", "#E67E22", "#F1C40F", "#27AE60", "#1ABC9C", "#2980B9", "#9B59B6" }; +#endif // ENABLE_GCODE_VIEWER #define EXTRUDER_CONFIG(OPT) m_config.OPT.get_at(m_writer.extruder()->id()) // Collect pairs of object_layer + support_layer sorted by print_z. // object_layer & support_layer are considered to be on the same print_z, if they are not further than EPSILON. -std::vector GCode::collect_layers_to_print(const PrintObject &object) +std::vector GCode::collect_layers_to_print(const PrintObject& object) { std::vector layers_to_print; layers_to_print.reserve(object.layers().size() + object.support_layers().size()); - // Calculate a minimum support layer height as a minimum over all extruders, but not smaller than 10um. - // This is the same logic as in support generator. - //FIXME should we use the printing extruders instead? - double gap_over_supports = object.config().support_material_contact_distance; - // FIXME should we test object.config().support_material_synchronize_layers ? Currently the support layers are synchronized with object layers iff soluble supports. - assert(! object.config().support_material || gap_over_supports != 0. || object.config().support_material_synchronize_layers); + // Calculate a minimum support layer height as a minimum over all extruders, but not smaller than 10um. + // This is the same logic as in support generator. + //FIXME should we use the printing extruders instead? + double gap_over_supports = object.config().support_material_contact_distance; + // FIXME should we test object.config().support_material_synchronize_layers ? Currently the support layers are synchronized with object layers iff soluble supports. + assert(!object.config().support_material || gap_over_supports != 0. || object.config().support_material_synchronize_layers); if (gap_over_supports != 0.) { gap_over_supports = std::max(0., gap_over_supports); - // Not a soluble support, - double support_layer_height_min = 1000000.; - for (auto lh : object.print()->config().min_layer_height.values) - support_layer_height_min = std::min(support_layer_height_min, std::max(0.01, lh)); - gap_over_supports += support_layer_height_min; + // Not a soluble support, + double support_layer_height_min = 1000000.; + for (auto lh : object.print()->config().min_layer_height.values) + support_layer_height_min = std::min(support_layer_height_min, std::max(0.01, lh)); + gap_over_supports += support_layer_height_min; } // Pair the object layers with the support layers by z. - size_t idx_object_layer = 0; + size_t idx_object_layer = 0; size_t idx_support_layer = 0; const LayerToPrint* last_extrusion_layer = nullptr; while (idx_object_layer < object.layers().size() || idx_support_layer < object.support_layers().size()) { LayerToPrint layer_to_print; - layer_to_print.object_layer = (idx_object_layer < object.layers().size()) ? object.layers()[idx_object_layer ++] : nullptr; - layer_to_print.support_layer = (idx_support_layer < object.support_layers().size()) ? object.support_layers()[idx_support_layer ++] : nullptr; + layer_to_print.object_layer = (idx_object_layer < object.layers().size()) ? object.layers()[idx_object_layer++] : nullptr; + layer_to_print.support_layer = (idx_support_layer < object.support_layers().size()) ? object.support_layers()[idx_support_layer++] : nullptr; if (layer_to_print.object_layer && layer_to_print.support_layer) { if (layer_to_print.object_layer->print_z < layer_to_print.support_layer->print_z - EPSILON) { layer_to_print.support_layer = nullptr; - -- idx_support_layer; - } else if (layer_to_print.support_layer->print_z < layer_to_print.object_layer->print_z - EPSILON) { + --idx_support_layer; + } + else if (layer_to_print.support_layer->print_z < layer_to_print.object_layer->print_z - EPSILON) { layer_to_print.object_layer = nullptr; - -- idx_object_layer; + --idx_object_layer; } } layers_to_print.emplace_back(layer_to_print); bool has_extrusions = (layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) - || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions()); + || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions()); // Check that there are extrusions on the very first layer. if (layers_to_print.size() == 1u) { - if (! has_extrusions) - throw std::runtime_error(_(L("There is an object with no extrusions on the first layer."))); + if (!has_extrusions) + throw Slic3r::SlicingError(_(L("There is an object with no extrusions on the first layer."))); } // In case there are extrusions on this layer, check there is a layer to lay it on. if ((layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) - // Allow empty support layers, as the support generator may produce no extrusions for non-empty support regions. - || (layer_to_print.support_layer /* && layer_to_print.support_layer->has_extrusions() */)) { + // Allow empty support layers, as the support generator may produce no extrusions for non-empty support regions. + || (layer_to_print.support_layer /* && layer_to_print.support_layer->has_extrusions() */)) { double support_contact_z = (last_extrusion_layer && last_extrusion_layer->support_layer) - ? gap_over_supports - : 0.; + ? gap_over_supports + : 0.; double maximal_print_z = (last_extrusion_layer ? last_extrusion_layer->print_z() : 0.) - + layer_to_print.layer()->height - + support_contact_z; + + layer_to_print.layer()->height + + support_contact_z; // Negative support_contact_z is not taken into account, it can result in false positives in cases // where previous layer has object extrusions too (https://github.com/prusa3d/PrusaSlicer/issues/2752) @@ -644,8 +622,8 @@ std::vector GCode::collect_layers_to_print(const PrintObjec _(L("Empty layers detected, the output would not be printable.")) + "\n\n" + _(L("Object name")) + ": " + object.model_object()->name + "\n" + _(L("Print z")) + ": " + std::to_string(layers_to_print.back().print_z()) + "\n\n" + _(L("This is " - "usually caused by negligibly small extrusions or by a faulty model. Try to repair " - "the model or change its orientation on the bed."))); + "usually caused by negligibly small extrusions or by a faulty model. Try to repair " + "the model or change its orientation on the bed."))); } // Remember last layer with extrusions. @@ -657,10 +635,10 @@ std::vector GCode::collect_layers_to_print(const PrintObjec return layers_to_print; } -// Prepare for non-sequential printing of multiple objects: Support resp. object layers with nearly identical print_z +// Prepare for non-sequential printing of multiple objects: Support resp. object layers with nearly identical print_z // will be printed for all objects at once. // Return a list of items. -std::vector>> GCode::collect_layers_to_print(const Print &print) +std::vector>> GCode::collect_layers_to_print(const Print& print) { struct OrderingItem { coordf_t print_z; @@ -675,30 +653,31 @@ std::vector>> GCode::collec OrderingItem ordering_item; ordering_item.object_idx = i; ordering.reserve(ordering.size() + per_object[i].size()); - const LayerToPrint &front = per_object[i].front(); - for (const LayerToPrint <p : per_object[i]) { - ordering_item.print_z = ltp.print_z(); + const LayerToPrint& front = per_object[i].front(); + for (const LayerToPrint& ltp : per_object[i]) { + ordering_item.print_z = ltp.print_z(); ordering_item.layer_idx = <p - &front; ordering.emplace_back(ordering_item); } } - std::sort(ordering.begin(), ordering.end(), [](const OrderingItem &oi1, const OrderingItem &oi2) { return oi1.print_z < oi2.print_z; }); + std::sort(ordering.begin(), ordering.end(), [](const OrderingItem& oi1, const OrderingItem& oi2) { return oi1.print_z < oi2.print_z; }); std::vector>> layers_to_print; + // Merge numerically very close Z values. for (size_t i = 0; i < ordering.size();) { // Find the last layer with roughly the same print_z. size_t j = i + 1; coordf_t zmax = ordering[i].print_z + EPSILON; - for (; j < ordering.size() && ordering[j].print_z <= zmax; ++ j) ; + for (; j < ordering.size() && ordering[j].print_z <= zmax; ++j); // Merge into layers_to_print. std::pair> merged; // Assign an average print_z to the set of layers with nearly equal print_z. - merged.first = 0.5 * (ordering[i].print_z + ordering[j-1].print_z); + merged.first = 0.5 * (ordering[i].print_z + ordering[j - 1].print_z); merged.second.assign(print.objects().size(), LayerToPrint()); for (; i < j; ++i) { - const OrderingItem &oi = ordering[i]; + const OrderingItem& oi = ordering[i]; assert(merged.second[oi.object_idx].layer() == nullptr); merged.second[oi.object_idx] = std::move(per_object[oi.object_idx][oi.layer_idx]); } @@ -708,7 +687,22 @@ std::vector>> GCode::collec return layers_to_print; } +#if ENABLE_GCODE_VIEWER +// free functions called by GCode::do_export() +namespace DoExport { + static void update_print_estimated_times_stats(const GCodeProcessor& processor, PrintStatistics& print_statistics) + { + const GCodeProcessor::Result& result = processor.get_result(); + print_statistics.estimated_normal_print_time = get_time_dhms(result.time_statistics.modes[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Normal)].time); + print_statistics.estimated_silent_print_time = processor.is_stealth_time_estimator_enabled() ? + get_time_dhms(result.time_statistics.modes[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Stealth)].time) : "N/A"; + } +} // namespace DoExport + +void GCode::do_export(Print* print, const char* path, GCodeProcessor::Result* result, ThumbnailsGeneratorCallback thumbnail_cb) +#else void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_data, ThumbnailsGeneratorCallback thumbnail_cb) +#endif // ENABLE_GCODE_VIEWER { PROFILE_CLEAR(); @@ -728,9 +722,11 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ FILE *file = boost::nowide::fopen(path_tmp.c_str(), "wb"); if (file == nullptr) - throw std::runtime_error(std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n"); + throw Slic3r::RuntimeError(std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n"); +#if !ENABLE_GCODE_VIEWER m_enable_analyzer = preview_data != nullptr; +#endif // !ENABLE_GCODE_VIEWER try { m_placeholder_parser_failed_templates.clear(); @@ -739,7 +735,7 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ if (ferror(file)) { fclose(file); boost::nowide::remove(path_tmp.c_str()); - throw std::runtime_error(std::string("G-code export to ") + path + " failed\nIs the disk full?\n"); + throw Slic3r::RuntimeError(std::string("G-code export to ") + path + " failed\nIs the disk full?\n"); } } catch (std::exception & /* ex */) { // Rethrow on any exception. std::runtime_exception and CanceledException are expected to be thrown. @@ -760,9 +756,17 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ msg += " !!!!! Failed to process the custom G-code template ...\n"; msg += "and\n"; msg += " !!!!! End of an error report for the custom G-code template ...\n"; - throw std::runtime_error(msg); + throw Slic3r::RuntimeError(msg); } +#if ENABLE_GCODE_VIEWER + BOOST_LOG_TRIVIAL(debug) << "Start processing gcode, " << log_memory_info(); + m_processor.process_file(path_tmp, [print]() { print->throw_if_canceled(); }); + DoExport::update_print_estimated_times_stats(m_processor, print->m_print_statistics); + if (result != nullptr) + *result = std::move(m_processor.extract_result()); + BOOST_LOG_TRIVIAL(debug) << "Finished processing gcode, " << log_memory_info(); +#else GCodeTimeEstimator::PostProcessData normal_data = m_normal_time_estimator.get_post_process_data(); GCodeTimeEstimator::PostProcessData silent_data = m_silent_time_estimator.get_post_process_data(); @@ -771,8 +775,7 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ BOOST_LOG_TRIVIAL(debug) << "Time estimator post processing" << log_memory_info(); GCodeTimeEstimator::post_process(path_tmp, 60.0f, remaining_times_enabled ? &normal_data : nullptr, (remaining_times_enabled && m_silent_time_estimator_enabled) ? &silent_data : nullptr); - if (remaining_times_enabled) - { + if (remaining_times_enabled) { m_normal_time_estimator.reset(); if (m_silent_time_estimator_enabled) m_silent_time_estimator.reset(); @@ -784,14 +787,15 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ m_analyzer.calc_gcode_preview_data(*preview_data, [print]() { print->throw_if_canceled(); }); m_analyzer.reset(); } +#endif // ENABLE_GCODE_VIEWER if (rename_file(path_tmp, path)) - throw std::runtime_error( + throw Slic3r::RuntimeError( std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + path + '\n' + "Is " + path_tmp + " locked?" + '\n'); BOOST_LOG_TRIVIAL(info) << "Exporting G-code finished" << log_memory_info(); - print->set_done(psGCodeExport); + print->set_done(psGCodeExport); // Write the profiler measurements to file PROFILE_UPDATE(); @@ -800,7 +804,8 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_ // free functions called by GCode::_do_export() namespace DoExport { - static void init_time_estimators(const PrintConfig &config, GCodeTimeEstimator &normal_time_estimator, GCodeTimeEstimator &silent_time_estimator, bool &silent_time_estimator_enabled) +#if !ENABLE_GCODE_VIEWER + static void init_time_estimators(const PrintConfig &config, GCodeTimeEstimator &normal_time_estimator, GCodeTimeEstimator &silent_time_estimator, bool &silent_time_estimator_enabled) { // resets time estimators normal_time_estimator.reset(); @@ -814,48 +819,54 @@ namespace DoExport { // this->print_machine_envelope(file, print); // shall be adjusted as well to produce a G-code block compatible with the particular firmware flavor. if (config.gcode_flavor.value == gcfMarlin) { - normal_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values[0]); - normal_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values[0]); - normal_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values[0]); - normal_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values[0]); - + if (config.machine_limits_usage.value != MachineLimitsUsage::Ignore) { + normal_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values[0]); + normal_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values[0]); + normal_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values[0]); + normal_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values[0]); + } + if (silent_time_estimator_enabled) { silent_time_estimator.reset(); silent_time_estimator.set_dialect(config.gcode_flavor); silent_time_estimator.set_extrusion_axis(config.get_extrusion_axis()[0]); - /* "Stealth mode" values can be just a copy of "normal mode" values - * (when they aren't input for a printer preset). - * Thus, use back value from values, instead of second one, which could be absent - */ - silent_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values.back()); - silent_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values.back()); - silent_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values.back()); - silent_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values.back()); + + if (config.machine_limits_usage.value != MachineLimitsUsage::Ignore) { + /* "Stealth mode" values can be just a copy of "normal mode" values + * (when they aren't input for a printer preset). + * Thus, use back value from values, instead of second one, which could be absent + */ + silent_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values.back()); + silent_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values.back()); + silent_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values.back()); + silent_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values.back()); + } + if (config.single_extruder_multi_material) { // As of now the fields are shown at the UI dialog in the same combo box as the ramming values, so they // are considered to be active for the single extruder multi-material printers only. @@ -872,8 +883,18 @@ namespace DoExport { normal_time_estimator.set_filament_unload_times(config.filament_unload_time.values); } } +#endif // !ENABLE_GCODE_VIEWER - static void init_gcode_analyzer(const PrintConfig &config, GCodeAnalyzer &analyzer) +#if ENABLE_GCODE_VIEWER + static void init_gcode_processor(const PrintConfig& config, GCodeProcessor& processor, bool& silent_time_estimator_enabled) + { + silent_time_estimator_enabled = (config.gcode_flavor == gcfMarlin) && config.silent_mode; + processor.reset(); + processor.apply_config(config); + processor.enable_stealth_time_estimator(silent_time_estimator_enabled); + } +#else + static void init_gcode_analyzer(const PrintConfig &config, GCodeAnalyzer &analyzer) { // resets analyzer analyzer.reset(); @@ -897,7 +918,8 @@ namespace DoExport { // tell analyzer about the gcode flavor analyzer.set_gcode_flavor(config.gcode_flavor); - } + } +#endif // ENABLE_GCODE_VIEWER static double autospeed_volumetric_limit(const Print &print) { @@ -942,7 +964,8 @@ namespace DoExport { return volumetric_speed; } - static void init_ooze_prevention(const Print &print, OozePrevention &ooze_prevention) + + static void init_ooze_prevention(const Print &print, OozePrevention &ooze_prevention) { // Calculate wiping points if needed if (print.config().ooze_prevention.value && ! print.config().single_extruder_multi_material) { @@ -1019,24 +1042,28 @@ namespace DoExport { } // Fill in print_statistics and return formatted string containing filament statistics to be inserted into G-code comment section. - static std::string update_print_stats_and_format_filament_stats( - const GCodeTimeEstimator &normal_time_estimator, + static std::string update_print_stats_and_format_filament_stats( +#if !ENABLE_GCODE_VIEWER + const GCodeTimeEstimator &normal_time_estimator, const GCodeTimeEstimator &silent_time_estimator, const bool silent_time_estimator_enabled, - const bool has_wipe_tower, +#endif // !ENABLE_GCODE_VIEWER + const bool has_wipe_tower, const WipeTowerData &wipe_tower_data, const std::vector &extruders, PrintStatistics &print_statistics) - { + { std::string filament_stats_string_out; print_statistics.clear(); - print_statistics.estimated_normal_print_time = normal_time_estimator.get_time_dhm/*s*/(); - print_statistics.estimated_silent_print_time = silent_time_estimator_enabled ? silent_time_estimator.get_time_dhm/*s*/() : "N/A"; - print_statistics.estimated_normal_custom_gcode_print_times = normal_time_estimator.get_custom_gcode_times_dhm(true); - if (silent_time_estimator_enabled) - print_statistics.estimated_silent_custom_gcode_print_times = silent_time_estimator.get_custom_gcode_times_dhm(true); - print_statistics.total_toolchanges = std::max(0, wipe_tower_data.number_of_toolchanges); +#if !ENABLE_GCODE_VIEWER + print_statistics.estimated_normal_print_time = normal_time_estimator.get_time_dhm/*s*/(); + print_statistics.estimated_silent_print_time = silent_time_estimator_enabled ? silent_time_estimator.get_time_dhm/*s*/() : "N/A"; + print_statistics.estimated_normal_custom_gcode_print_times = normal_time_estimator.get_custom_gcode_times_dhm(true); + if (silent_time_estimator_enabled) + print_statistics.estimated_silent_custom_gcode_print_times = silent_time_estimator.get_custom_gcode_times_dhm(true); +#endif // !ENABLE_GCODE_VIEWER + print_statistics.total_toolchanges = std::max(0, wipe_tower_data.number_of_toolchanges); if (! extruders.empty()) { std::pair out_filament_used_mm ("; filament used [mm] = ", 0); std::pair out_filament_used_cm3("; filament used [cm3] = ", 0); @@ -1078,26 +1105,26 @@ namespace DoExport { } filament_stats_string_out += out_filament_used_mm.first; filament_stats_string_out += "\n" + out_filament_used_cm3.first; - if (out_filament_used_g.second) + if (out_filament_used_g.second) filament_stats_string_out += "\n" + out_filament_used_g.first; - if (out_filament_cost.second) + if (out_filament_cost.second) filament_stats_string_out += "\n" + out_filament_cost.first; - } - return filament_stats_string_out; - } + } + return filament_stats_string_out; + } } // Sort the PrintObjects by their increasing Z, likely useful for avoiding colisions on Deltas during sequential prints. static inline std::vector sort_object_instances_by_max_z(const Print &print) { std::vector objects(print.objects().begin(), print.objects().end()); - std::sort(objects.begin(), objects.end(), [](const PrintObject *po1, const PrintObject *po2) { return po1->height() < po2->height(); }); - std::vector instances; - instances.reserve(objects.size()); - for (const PrintObject *object : objects) - for (size_t i = 0; i < object->instances().size(); ++ i) - instances.emplace_back(&object->instances()[i]); - return instances; + std::sort(objects.begin(), objects.end(), [](const PrintObject *po1, const PrintObject *po2) { return po1->height() < po2->height(); }); + std::vector instances; + instances.reserve(objects.size()); + for (const PrintObject *object : objects) + for (size_t i = 0; i < object->instances().size(); ++ i) + instances.emplace_back(&object->instances()[i]); + return instances; } // Produce a vector of PrintObjects in the order of their respective ModelObjects in print.model(). @@ -1126,15 +1153,29 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu { PROFILE_FUNC(); - DoExport::init_time_estimators(print.config(), - // modifies the following: - m_normal_time_estimator, m_silent_time_estimator, m_silent_time_estimator_enabled); +#if ENABLE_GCODE_VIEWER + // modifies m_silent_time_estimator_enabled + DoExport::init_gcode_processor(print.config(), m_processor, m_silent_time_estimator_enabled); +#else + DoExport::init_time_estimators(print.config(), + // modifies the following: + m_normal_time_estimator, m_silent_time_estimator, m_silent_time_estimator_enabled); DoExport::init_gcode_analyzer(print.config(), m_analyzer); +#endif // ENABLE_GCODE_VIEWER // resets analyzer's tracking data +#if ENABLE_GCODE_VIEWER + m_last_height = 0.0f; + m_last_layer_z = 0.0f; +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + m_last_mm3_per_mm = 0.0; + m_last_width = 0.0f; +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING +#else m_last_mm3_per_mm = GCodeAnalyzer::Default_mm3_per_mm; m_last_width = GCodeAnalyzer::Default_Width; m_last_height = GCodeAnalyzer::Default_Height; +#endif // ENABLE_GCODE_VIEWER // How many times will be change_layer() called? // change_layer() in turn increments the progress bar status. @@ -1187,8 +1228,8 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu // Write information on the generator. _write_format(file, "; %s\n\n", Slic3r::header_slic3r_generated().c_str()); - DoExport::export_thumbnails_to_file(thumbnail_cb, print.full_print_config().option("thumbnails")->values, - [this, file](const char* sz) { this->_write(file, sz); }, + DoExport::export_thumbnails_to_file(thumbnail_cb, print.full_print_config().option("thumbnails")->values, + [this, file](const char* sz) { this->_write(file, sz); }, [&print]() { print.throw_if_canceled(); }); // Write notes (content of the Print Settings tab -> Notes) @@ -1223,14 +1264,18 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu _write_format(file, "\n"); } print.throw_if_canceled(); - + // adds tags for time estimators +#if ENABLE_GCODE_VIEWER if (print.config().remaining_times.value) - { + _writeln(file, GCodeProcessor::First_Line_M73_Placeholder_Tag); +#else + if (print.config().remaining_times.value) { _writeln(file, GCodeTimeEstimator::Normal_First_M73_Output_Placeholder_Tag); if (m_silent_time_estimator_enabled) _writeln(file, GCodeTimeEstimator::Silent_First_M73_Output_Placeholder_Tag); } +#endif // ENABLE_GCODE_VIEWER // Prepare the helper object for replacing placeholders in custom G-code and output filename. m_placeholder_parser = print.placeholder_parser(); @@ -1258,12 +1303,12 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu } // We don't allow switching of extruders per layer by Model::custom_gcode_per_print_z in sequential mode. // Use the extruder IDs collected from Regions. - this->set_extruders(print.extruders()); + this->set_extruders(print.extruders()); } else { - // Find tool ordering for all the objects at once, and the initial extruder ID. + // Find tool ordering for all the objects at once, and the initial extruder ID. // If the tool ordering has been pre-calculated by Print class for wipe tower already, reuse it. - tool_ordering = print.tool_ordering(); - tool_ordering.assign_custom_gcodes(print); + tool_ordering = print.tool_ordering(); + tool_ordering.assign_custom_gcodes(print); has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower(); initial_extruder_id = (has_wipe_tower && ! print.config().single_extruder_multi_material_priming) ? // The priming towers will be skipped. @@ -1272,7 +1317,7 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu tool_ordering.first_extruder(); // In non-sequential print, the printing extruders may have been modified by the extruder switches stored in Model::custom_gcode_per_print_z. // Therefore initialize the printing extruders from there. - this->set_extruders(tool_ordering.all_extruders()); + this->set_extruders(tool_ordering.all_extruders()); // Order object instances using a nearest neighbor search. print_object_instances_ordering = chain_print_object_instances(print); } @@ -1335,9 +1380,14 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu // Set extruder(s) temperature before and after start G-code. this->_print_first_layer_extruder_temperatures(file, print, start_gcode, initial_extruder_id, false); +#if ENABLE_GCODE_VIEWER + // adds tag for processor + _write_format(file, ";%s%s\n", GCodeProcessor::Extrusion_Role_Tag.c_str(), ExtrusionEntity::role_to_string(erCustom).c_str()); +#else if (m_enable_analyzer) // adds tag for analyzer _write_format(file, ";%s%d\n", GCodeAnalyzer::Extrusion_Role_Tag.c_str(), erCustom); +#endif // ENABLE_GCODE_VIEWER // Write the custom start G-code _writeln(file, start_gcode); @@ -1367,7 +1417,10 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu // Calculate wiping points if needed DoExport::init_ooze_prevention(print, m_ooze_prevention); print.throw_if_canceled(); - + + // Collect custom seam data from all objects. + m_seam_placer.init(print); + if (! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) { // Set initial extruder only after custom start G-code. // Ugly hack: Do not set the initial extruder if the extruder is primed using the MMU priming towers at the edge of the print bed. @@ -1442,7 +1495,7 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu m_wipe_tower.reset(new WipeTowerIntegration(print.config(), *print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get())); _write(file, m_writer.travel_to_z(first_layer_height + m_config.z_offset.value, "Move to the first layer height")); if (print.config().single_extruder_multi_material_priming) { - _write(file, m_wipe_tower->prime(*this)); + _write(file, m_wipe_tower->prime(*this)); // Verify, whether the print overaps the priming extrusions. BoundingBoxf bbox_print(get_print_extrusions_extents(print)); coordf_t twolayers_printz = ((layers_to_print.size() == 1) ? layers_to_print.front() : layers_to_print[1]).first + EPSILON; @@ -1488,9 +1541,14 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu _write(file, this->retract()); _write(file, m_writer.set_fan(false)); +#if ENABLE_GCODE_VIEWER + // adds tag for processor + _write_format(file, ";%s%s\n", GCodeProcessor::Extrusion_Role_Tag.c_str(), ExtrusionEntity::role_to_string(erCustom).c_str()); +#else if (m_enable_analyzer) // adds tag for analyzer _write_format(file, ";%s%d\n", GCodeAnalyzer::Extrusion_Role_Tag.c_str(), erCustom); +#endif // ENABLE_GCODE_VIEWER // Process filament-specific gcode in extruder order. { @@ -1504,7 +1562,7 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu _writeln(file, this->placeholder_parser_process("end_filament_gcode", print.config().end_filament_gcode.get_at(extruder_id), extruder_id, &config)); } else { for (const std::string &end_gcode : print.config().end_filament_gcode.values) { - int extruder_id = (unsigned int)(&end_gcode - &print.config().end_filament_gcode.values.front()); + int extruder_id = (unsigned int)(&end_gcode - &print.config().end_filament_gcode.values.front()); config.set_key_value("filament_extruder_id", new ConfigOptionInt(extruder_id)); _writeln(file, this->placeholder_parser_process("end_filament_gcode", end_gcode, extruder_id, &config)); } @@ -1515,25 +1573,33 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu _write(file, m_writer.postamble()); // adds tags for time estimators +#if ENABLE_GCODE_VIEWER if (print.config().remaining_times.value) - { + _writeln(file, GCodeProcessor::Last_Line_M73_Placeholder_Tag); +#else + if (print.config().remaining_times.value) { _writeln(file, GCodeTimeEstimator::Normal_Last_M73_Output_Placeholder_Tag); if (m_silent_time_estimator_enabled) _writeln(file, GCodeTimeEstimator::Silent_Last_M73_Output_Placeholder_Tag); } +#endif // ENABLE_GCODE_VIEWER print.throw_if_canceled(); // calculates estimated printing time +#if !ENABLE_GCODE_VIEWER m_normal_time_estimator.calculate_time(false); if (m_silent_time_estimator_enabled) m_silent_time_estimator.calculate_time(false); +#endif // !ENABLE_GCODE_VIEWER // Get filament stats. _write(file, DoExport::update_print_stats_and_format_filament_stats( // Const inputs - m_normal_time_estimator, m_silent_time_estimator, m_silent_time_estimator_enabled, - has_wipe_tower, print.wipe_tower_data(), +#if !ENABLE_GCODE_VIEWER + m_normal_time_estimator, m_silent_time_estimator, m_silent_time_estimator_enabled, +#endif // !ENABLE_GCODE_VIEWER + has_wipe_tower, print.wipe_tower_data(), m_writer.extruders(), // Modifies print.m_print_statistics)); @@ -1542,9 +1608,13 @@ void GCode::_do_export(Print& print, FILE* file, ThumbnailsGeneratorCallback thu _write_format(file, "; total filament cost = %.1lf\n", print.m_print_statistics.total_cost); if (print.m_print_statistics.total_toolchanges > 0) _write_format(file, "; total toolchanges = %i\n", print.m_print_statistics.total_toolchanges); +#if ENABLE_GCODE_VIEWER + _writeln(file, GCodeProcessor::Estimated_Printing_Time_Placeholder_Tag); +#else _write_format(file, "; estimated printing time (normal mode) = %s\n", m_normal_time_estimator.get_time_dhms().c_str()); if (m_silent_time_estimator_enabled) _write_format(file, "; estimated printing time (silent mode) = %s\n", m_silent_time_estimator.get_time_dhms().c_str()); +#endif // ENABLE_GCODE_VIEWER // Append full config. _write(file, "\n"); @@ -1566,15 +1636,15 @@ std::string GCode::placeholder_parser_process(const std::string &name, const std m_placeholder_parser_failed_templates.insert(name); // Insert the macro error message into the G-code. return - std::string("\n!!!!! Failed to process the custom G-code template ") + name + "\n" + - err.what() + + std::string("\n!!!!! Failed to process the custom G-code template ") + name + "\n" + + err.what() + "!!!!! End of an error report for the custom G-code template " + name + "\n\n"; } } -// Parse the custom G-code, try to find mcode_set_temp_dont_wait and mcode_set_temp_and_wait inside the custom G-code. +// Parse the custom G-code, try to find mcode_set_temp_dont_wait and mcode_set_temp_and_wait or optionally G10 with temperature inside the custom G-code. // Returns true if one of the temp commands are found, and try to parse the target temperature value into temp_out. -static bool custom_gcode_sets_temperature(const std::string &gcode, const int mcode_set_temp_dont_wait, const int mcode_set_temp_and_wait, int &temp_out) +static bool custom_gcode_sets_temperature(const std::string &gcode, const int mcode_set_temp_dont_wait, const int mcode_set_temp_and_wait, const bool include_g10, int &temp_out) { temp_out = -1; if (gcode.empty()) @@ -1593,12 +1663,12 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc int mcode = int(strtol(ptr, &endptr, 10)); if (endptr != nullptr && endptr != ptr && (mcode == mcode_set_temp_dont_wait || mcode == mcode_set_temp_and_wait)) { // M104/M109 or M140/M190 found. - ptr = endptr; + ptr = endptr; // Let the caller know that the custom G-code sets the temperature. temp_set_by_gcode = true; // Now try to parse the temperature value. - // While not at the end of the line: - while (strchr(";\r\n\0", *ptr) == nullptr) { + // While not at the end of the line: + while (strchr(";\r\n\0", *ptr) == nullptr) { // Skip whitespaces. for (; *ptr == ' ' || *ptr == '\t'; ++ ptr); if (*ptr == 'S') { @@ -1607,22 +1677,56 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc // Parse an int. endptr = nullptr; long temp_parsed = strtol(ptr, &endptr, 10); - if (endptr > ptr) { - ptr = endptr; - temp_out = temp_parsed; - } + if (endptr > ptr) { + ptr = endptr; + temp_out = temp_parsed; + } } else { // Skip this word. - for (; strchr(" \t;\r\n\0", *ptr) == nullptr; ++ ptr); + for (; strchr(" \t;\r\n\0", *ptr) == nullptr; ++ ptr); + } + } + } + } else if (*ptr == 'G' && include_g10) { // Only check for G10 if requested + // Line starts with 'G'. + ++ ptr; + // Parse the G code value. + char *endptr = nullptr; + int gcode = int(strtol(ptr, &endptr, 10)); + if (endptr != nullptr && endptr != ptr && gcode == 10 /* G10 */) { + // G10 code found + ptr = endptr; + // Now try to parse the temperature value. + // While not at the end of the line: + while (strchr(";\r\n\0", *ptr) == nullptr) { + // Skip whitespaces. + for (; *ptr == ' ' || *ptr == '\t'; ++ ptr); + if (*ptr == 'S') { + // Skip whitespaces. + for (++ ptr; *ptr == ' ' || *ptr == '\t'; ++ ptr); + // Parse an int. + endptr = nullptr; + long temp_parsed = strtol(ptr, &endptr, 10); + if (endptr > ptr) { + ptr = endptr; + temp_out = temp_parsed; + // Let the caller know that the custom G-code sets the temperature + // Only do this after successfully parsing temperature since G10 + // can be used for other reasons + temp_set_by_gcode = true; + } + } else { + // Skip this word. + for (; strchr(" \t;\r\n\0", *ptr) == nullptr; ++ ptr); } } } } // Skip the rest of the line. for (; *ptr != 0 && *ptr != '\r' && *ptr != '\n'; ++ ptr); - // Skip the end of line indicators. + // Skip the end of line indicators. for (; *ptr == '\r' || *ptr == '\n'; ++ ptr); - } + } return temp_set_by_gcode; } @@ -1630,7 +1734,7 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc // Do not process this piece of G-code by the time estimator, it already knows the values through another sources. void GCode::print_machine_envelope(FILE *file, Print &print) { - if (print.config().gcode_flavor.value == gcfMarlin) { + if (print.config().gcode_flavor.value == gcfMarlin && print.config().machine_limits_usage.value == MachineLimitsUsage::EmitToGCode) { fprintf(file, "M201 X%d Y%d Z%d E%d ; sets maximum accelerations, mm/sec^2\n", int(print.config().machine_max_acceleration_x.values.front() + 0.5), int(print.config().machine_max_acceleration_y.values.front() + 0.5), @@ -1666,7 +1770,7 @@ void GCode::_print_first_layer_bed_temperature(FILE *file, Print &print, const s int temp = print.config().first_layer_bed_temperature.get_at(first_printing_extruder_id); // Is the bed temperature set by the provided custom G-code? int temp_by_gcode = -1; - bool temp_set_by_gcode = custom_gcode_sets_temperature(gcode, 140, 190, temp_by_gcode); + bool temp_set_by_gcode = custom_gcode_sets_temperature(gcode, 140, 190, false, temp_by_gcode); if (temp_set_by_gcode && temp_by_gcode >= 0 && temp_by_gcode < 1000) temp = temp_by_gcode; // Always call m_writer.set_bed_temperature() so it will set the internal "current" state of the bed temp as if @@ -1684,7 +1788,8 @@ void GCode::_print_first_layer_extruder_temperatures(FILE *file, Print &print, c { // Is the bed temperature set by the provided custom G-code? int temp_by_gcode = -1; - if (custom_gcode_sets_temperature(gcode, 104, 109, temp_by_gcode)) { + bool include_g10 = (print.config().gcode_flavor == gcfRepRapFirmware); + if (custom_gcode_sets_temperature(gcode, 104, 109, include_g10, temp_by_gcode)) { // Set the extruder temperature at m_writer, but throw away the generated G-code as it will be written with the custom G-code. int temp = print.config().first_layer_temperature.get_at(first_printing_extruder_id); if (temp_by_gcode >= 0 && temp_by_gcode < 1000) @@ -1711,9 +1816,9 @@ void GCode::_print_first_layer_extruder_temperatures(FILE *file, Print &print, c } inline GCode::ObjectByExtruder& object_by_extruder( - std::map> &by_extruder, - unsigned int extruder_id, - size_t object_idx, + std::map> &by_extruder, + unsigned int extruder_id, + size_t object_idx, size_t num_objects) { std::vector &objects_by_extruder = by_extruder[extruder_id]; @@ -1723,9 +1828,9 @@ inline GCode::ObjectByExtruder& object_by_extruder( } inline std::vector& object_islands_by_extruder( - std::map> &by_extruder, - unsigned int extruder_id, - size_t object_idx, + std::map> &by_extruder, + unsigned int extruder_id, + size_t object_idx, size_t num_objects, size_t num_islands) { @@ -1736,97 +1841,102 @@ inline std::vector& object_islands_by_extruder( } std::vector GCode::sort_print_object_instances( - std::vector &objects_by_extruder, - const std::vector &layers, - // Ordering must be defined for normal (non-sequential print). - const std::vector *ordering, - // For sequential print, the instance of the object to be printing has to be defined. - const size_t single_object_instance_idx) + std::vector &objects_by_extruder, + const std::vector &layers, + // Ordering must be defined for normal (non-sequential print). + const std::vector *ordering, + // For sequential print, the instance of the object to be printing has to be defined. + const size_t single_object_instance_idx) { std::vector out; if (ordering == nullptr) { - // Sequential print, single object is being printed. - for (ObjectByExtruder &object_by_extruder : objects_by_extruder) { - const size_t layer_id = &object_by_extruder - objects_by_extruder.data(); - const PrintObject *print_object = layers[layer_id].object(); - if (print_object) - out.emplace_back(object_by_extruder, layer_id, *print_object, single_object_instance_idx); - } + // Sequential print, single object is being printed. + for (ObjectByExtruder &object_by_extruder : objects_by_extruder) { + const size_t layer_id = &object_by_extruder - objects_by_extruder.data(); + const PrintObject *print_object = layers[layer_id].object(); + if (print_object) + out.emplace_back(object_by_extruder, layer_id, *print_object, single_object_instance_idx); + } } else { - // Create mapping from PrintObject* to ObjectByExtruder*. - std::vector> sorted; - sorted.reserve(objects_by_extruder.size()); - for (ObjectByExtruder &object_by_extruder : objects_by_extruder) { - const size_t layer_id = &object_by_extruder - objects_by_extruder.data(); - const PrintObject *print_object = layers[layer_id].object(); - if (print_object) - sorted.emplace_back(print_object, &object_by_extruder); - } - std::sort(sorted.begin(), sorted.end()); + // Create mapping from PrintObject* to ObjectByExtruder*. + std::vector> sorted; + sorted.reserve(objects_by_extruder.size()); + for (ObjectByExtruder &object_by_extruder : objects_by_extruder) { + const size_t layer_id = &object_by_extruder - objects_by_extruder.data(); + const PrintObject *print_object = layers[layer_id].object(); + if (print_object) + sorted.emplace_back(print_object, &object_by_extruder); + } + std::sort(sorted.begin(), sorted.end()); - if (! sorted.empty()) { - out.reserve(sorted.size()); - for (const PrintInstance *instance : *ordering) { - const PrintObject &print_object = *instance->print_object; - std::pair key(&print_object, nullptr); - auto it = std::lower_bound(sorted.begin(), sorted.end(), key); - if (it != sorted.end() && it->first == &print_object) - // ObjectByExtruder for this PrintObject was found. - out.emplace_back(*it->second, it->second - objects_by_extruder.data(), print_object, instance - print_object.instances().data()); - } - } - } - return out; + if (! sorted.empty()) { + out.reserve(sorted.size()); + for (const PrintInstance *instance : *ordering) { + const PrintObject &print_object = *instance->print_object; + std::pair key(&print_object, nullptr); + auto it = std::lower_bound(sorted.begin(), sorted.end(), key); + if (it != sorted.end() && it->first == &print_object) + // ObjectByExtruder for this PrintObject was found. + out.emplace_back(*it->second, it->second - objects_by_extruder.data(), print_object, instance - print_object.instances().data()); + } + } + } + return out; } namespace ProcessLayer { static std::string emit_custom_gcode_per_print_z( - const CustomGCode::Item *custom_gcode, + const CustomGCode::Item *custom_gcode, // ID of the first extruder printing this layer. unsigned int first_extruder_id, const PrintConfig &config) - { + { std::string gcode; bool single_extruder_printer = config.nozzle_diameter.size() == 1; - + if (custom_gcode != nullptr) { - // Extruder switches are processed by LayerTools, they should be filtered out. - assert(custom_gcode->type != CustomGCode::ToolChange); + // Extruder switches are processed by LayerTools, they should be filtered out. + assert(custom_gcode->type != CustomGCode::ToolChange); CustomGCode::Type gcode_type = custom_gcode->type; bool color_change = gcode_type == CustomGCode::ColorChange; bool tool_change = gcode_type == CustomGCode::ToolChange; - // Tool Change is applied as Color Change for a single extruder printer only. - assert(! tool_change || single_extruder_printer); + // Tool Change is applied as Color Change for a single extruder printer only. + assert(! tool_change || single_extruder_printer); - std::string pause_print_msg; - int m600_extruder_before_layer = -1; - if (color_change && custom_gcode->extruder > 0) - m600_extruder_before_layer = custom_gcode->extruder - 1; - else if (gcode_type == CustomGCode::PausePrint) - pause_print_msg = custom_gcode->extra; + std::string pause_print_msg; + int m600_extruder_before_layer = -1; + if (color_change && custom_gcode->extruder > 0) + m600_extruder_before_layer = custom_gcode->extruder - 1; + else if (gcode_type == CustomGCode::PausePrint) + pause_print_msg = custom_gcode->extra; - // we should add or not colorprint_change in respect to nozzle_diameter count instead of really used extruders count - if (color_change || tool_change) - { + // we should add or not colorprint_change in respect to nozzle_diameter count instead of really used extruders count + if (color_change || tool_change) + { assert(m600_extruder_before_layer >= 0); // Color Change or Tool Change as Color Change. - // add tag for analyzer - gcode += "; " + GCodeAnalyzer::Color_Change_Tag + ",T" + std::to_string(m600_extruder_before_layer) + "\n"; - // add tag for time estimator - gcode += "; " + GCodeTimeEstimator::Color_Change_Tag + "\n"; +#if ENABLE_GCODE_VIEWER + // add tag for processor + gcode += "; " + GCodeProcessor::Color_Change_Tag + ",T" + std::to_string(m600_extruder_before_layer) + "\n"; +#else + // add tag for analyzer + gcode += "; " + GCodeAnalyzer::Color_Change_Tag + ",T" + std::to_string(m600_extruder_before_layer) + "\n"; + // add tag for time estimator + gcode += "; " + GCodeTimeEstimator::Color_Change_Tag + "\n"; +#endif // ENABLE_GCODE_VIEWER if (!single_extruder_printer && m600_extruder_before_layer >= 0 && first_extruder_id != (unsigned)m600_extruder_before_layer - // && !MMU1 - ) { - //! FIXME_in_fw show message during print pause - gcode += config.pause_print_gcode;// pause print + // && !MMU1 + ) { + //! FIXME_in_fw show message during print pause + gcode += config.pause_print_gcode;// pause print gcode += "\n"; - gcode += "M117 Change filament for Extruder " + std::to_string(m600_extruder_before_layer) + "\n"; - } + gcode += "M117 Change filament for Extruder " + std::to_string(m600_extruder_before_layer) + "\n"; + } else { gcode += config.color_change_gcode;//ColorChangeCode; gcode += "\n"; @@ -1836,50 +1946,62 @@ namespace ProcessLayer { if (gcode_type == CustomGCode::PausePrint) // Pause print { - // add tag for analyzer - gcode += "; " + GCodeAnalyzer::Pause_Print_Tag + "\n"; - //! FIXME_in_fw show message during print pause +#if ENABLE_GCODE_VIEWER + // add tag for processor + gcode += "; " + GCodeProcessor::Pause_Print_Tag + "\n"; +#else + // add tag for analyzer + gcode += "; " + GCodeAnalyzer::Pause_Print_Tag + "\n"; +#endif // ENABLE_GCODE_VIEWER + //! FIXME_in_fw show message during print pause if (!pause_print_msg.empty()) gcode += "M117 " + pause_print_msg + "\n"; - // add tag for time estimator +#if !ENABLE_GCODE_VIEWER + // add tag for time estimator gcode += "; " + GCodeTimeEstimator::Pause_Print_Tag + "\n"; +#endif // !ENABLE_GCODE_VIEWER gcode += config.pause_print_gcode; - } + } else { - // add tag for analyzer - gcode += "; " + GCodeAnalyzer::Custom_Code_Tag + "\n"; - // add tag for time estimator +#if ENABLE_GCODE_VIEWER + // add tag for processor + gcode += "; " + GCodeProcessor::Custom_Code_Tag + "\n"; +#else + // add tag for analyzer + gcode += "; " + GCodeAnalyzer::Custom_Code_Tag + "\n"; +#endif // ENABLE_GCODE_VIEWER + // add tag for time estimator //gcode += "; " + GCodeTimeEstimator::Custom_Code_Tag + "\n"; if (gcode_type == CustomGCode::Template) // Template Cistom Gcode gcode += config.template_custom_gcode; else // custom Gcode - gcode += custom_gcode->extra; + gcode += custom_gcode->extra; - } - gcode += "\n"; - } - } + } + gcode += "\n"; + } + } - return gcode; - } + return gcode; + } } // namespace ProcessLayer namespace Skirt { - static void skirt_loops_per_extruder_all_printing(const Print &print, const LayerTools &layer_tools, std::map> &skirt_loops_per_extruder_out) - { + static void skirt_loops_per_extruder_all_printing(const Print &print, const LayerTools &layer_tools, std::map> &skirt_loops_per_extruder_out) + { // Prime all extruders printing over the 1st layer over the skirt lines. size_t n_loops = print.skirt().entities.size(); size_t n_tools = layer_tools.extruders.size(); size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; for (size_t i = 0; i < n_loops; i += lines_per_extruder) skirt_loops_per_extruder_out[layer_tools.extruders[i / lines_per_extruder]] = std::pair(i, std::min(i + lines_per_extruder, n_loops)); - } + } static std::map> make_skirt_loops_per_extruder_1st_layer( const Print &print, - const std::vector & /*layers */, - const LayerTools &layer_tools, + const std::vector & /*layers */, + const LayerTools &layer_tools, // Heights (print_z) at which the skirt has already been extruded. std::vector &skirt_done) { @@ -1887,7 +2009,7 @@ namespace Skirt { // not at the print_z of the interlaced support material layers. std::map> skirt_loops_per_extruder_out; if (skirt_done.empty() && print.has_skirt() && ! print.skirt().entities.empty()) { - skirt_loops_per_extruder_all_printing(print, layer_tools, skirt_loops_per_extruder_out); + skirt_loops_per_extruder_all_printing(print, layer_tools, skirt_loops_per_extruder_out); skirt_done.emplace_back(layer_tools.print_z); } return skirt_loops_per_extruder_out; @@ -1895,11 +2017,11 @@ namespace Skirt { static std::map> make_skirt_loops_per_extruder_other_layers( const Print &print, - const std::vector &layers, - const LayerTools &layer_tools, - // First non-empty support layer. - const SupportLayer *support_layer, - // Heights (print_z) at which the skirt has already been extruded. + const std::vector &layers, + const LayerTools &layer_tools, + // First non-empty support layer. + const SupportLayer *support_layer, + // Heights (print_z) at which the skirt has already been extruded. std::vector &skirt_done) { // Extrude skirt at the print_z of the raft layers and normal object layers @@ -1917,7 +2039,7 @@ namespace Skirt { // Prime just the first printing extruder. This is original Slic3r's implementation. skirt_loops_per_extruder_out[layer_tools.extruders.front()] = std::pair(0, print.config().skirts.value); #else - // Prime all extruders planned for this layer, see + // Prime all extruders planned for this layer, see // https://github.com/prusa3d/PrusaSlicer/issues/469#issuecomment-322450619 skirt_loops_per_extruder_all_printing(print, layer_tools, skirt_loops_per_extruder_out); #endif @@ -1929,7 +2051,7 @@ namespace Skirt { } // namespace Skirt -// In sequential mode, process_layer is called once per each object and its copy, +// In sequential mode, process_layer is called once per each object and its copy, // therefore layers will contain a single entry and single_object_instance_idx will point to the copy of the object. // In non-sequential mode, process_layer is called per each print_z height with all object and support layers accumulated. // For multi-material prints, this routine minimizes extruder switches by gathering extruder specific extrusion paths @@ -1941,8 +2063,8 @@ void GCode::process_layer( // Set of object & print layers of the same PrintObject and with the same print_z. const std::vector &layers, const LayerTools &layer_tools, - // Pairs of PrintObject index and its instance index. - const std::vector *ordering, + // Pairs of PrintObject index and its instance index. + const std::vector *ordering, // If set to size_t(-1), then print all copies of all objects. // Otherwise print a single copy of a single object. const size_t single_object_instance_idx) @@ -1989,9 +2111,25 @@ void GCode::process_layer( } // If we're going to apply spiralvase to this layer, disable loop clipping m_enable_loop_clipping = ! m_spiral_vase || ! m_spiral_vase->enable; - + std::string gcode; +#if ENABLE_GCODE_VIEWER + // add tag for processor + gcode += "; " + GCodeProcessor::Layer_Change_Tag + "\n"; + // export layer z + char buf[64]; + sprintf(buf, ";Z:%g\n", print_z); + gcode += buf; + // export layer height + float height = first_layer ? static_cast(print_z) : static_cast(print_z) - m_last_layer_z; + sprintf(buf, ";%s%g\n", GCodeProcessor::Height_Tag.c_str(), height); + gcode += buf; + // update caches + m_last_layer_z = static_cast(print_z); + m_last_height = height; +#endif // ENABLE_GCODE_VIEWER + // Set new layer - this will change Z and force a retraction if retract_layer_change is enabled. if (! print.config().before_layer_gcode.value.empty()) { DynamicConfig config; @@ -2002,7 +2140,7 @@ void GCode::process_layer( + "\n"; } gcode += this->change_layer(print_z); // this will increase m_layer_index - m_layer = &layer; + m_layer = &layer; if (! print.config().layer_gcode.value.empty()) { DynamicConfig config; config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); @@ -2094,8 +2232,8 @@ void GCode::process_layer( } if (layer_to_print.object_layer != nullptr) { const Layer &layer = *layer_to_print.object_layer; - // We now define a strategy for building perimeters and fills. The separation - // between regions doesn't matter in terms of printing order, as we follow + // We now define a strategy for building perimeters and fills. The separation + // between regions doesn't matter in terms of printing order, as we follow // another logic instead: // - we group all extrusions by extruder so that we minimize toolchanges // - we start from the last used extruder @@ -2110,13 +2248,13 @@ void GCode::process_layer( std::vector slices_test_order; slices_test_order.reserve(n_slices); for (size_t i = 0; i < n_slices; ++ i) - slices_test_order.emplace_back(i); + slices_test_order.emplace_back(i); std::sort(slices_test_order.begin(), slices_test_order.end(), [&layer_surface_bboxes](size_t i, size_t j) { - const Vec2d s1 = layer_surface_bboxes[i].size().cast(); - const Vec2d s2 = layer_surface_bboxes[j].size().cast(); - return s1.x() * s1.y() < s2.x() * s2.y(); + const Vec2d s1 = layer_surface_bboxes[i].size().cast(); + const Vec2d s2 = layer_surface_bboxes[j].size().cast(); + return s1.x() * s1.y() < s2.x() * s2.y(); }); - auto point_inside_surface = [&layer, &layer_surface_bboxes](const size_t i, const Point &point) { + auto point_inside_surface = [&layer, &layer_surface_bboxes](const size_t i, const Point &point) { const BoundingBox &bbox = layer_surface_bboxes[i]; return point(0) >= bbox.min(0) && point(0) < bbox.max(0) && point(1) >= bbox.min(1) && point(1) < bbox.max(1) && @@ -2147,27 +2285,27 @@ void GCode::process_layer( // Let's recover vector of extruder overrides: const WipingExtrusions::ExtruderPerCopy *entity_overrides = nullptr; if (! layer_tools.has_extruder(correct_extruder_id)) { - // this entity is not overridden, but its extruder is not in layer_tools - we'll print it + // this entity is not overridden, but its extruder is not in layer_tools - we'll print it // by last extruder on this layer (could happen e.g. when a wiping object is taller than others - dontcare extruders are eradicated from layer_tools) correct_extruder_id = layer_tools.extruders.back(); } printing_extruders.clear(); if (is_anything_overridden) { - entity_overrides = const_cast(layer_tools).wiping_extrusions().get_extruder_overrides(extrusions, correct_extruder_id, layer_to_print.object()->instances().size()); - if (entity_overrides == nullptr) { - printing_extruders.emplace_back(correct_extruder_id); - } else { - printing_extruders.reserve(entity_overrides->size()); - for (int extruder : *entity_overrides) - printing_extruders.emplace_back(extruder >= 0 ? - // at least one copy is overridden to use this extruder - extruder : - // at least one copy would normally be printed with this extruder (see get_extruder_overrides function for explanation) - static_cast(- extruder - 1)); - Slic3r::sort_remove_duplicates(printing_extruders); - } - } else - printing_extruders.emplace_back(correct_extruder_id); + entity_overrides = const_cast(layer_tools).wiping_extrusions().get_extruder_overrides(extrusions, correct_extruder_id, layer_to_print.object()->instances().size()); + if (entity_overrides == nullptr) { + printing_extruders.emplace_back(correct_extruder_id); + } else { + printing_extruders.reserve(entity_overrides->size()); + for (int extruder : *entity_overrides) + printing_extruders.emplace_back(extruder >= 0 ? + // at least one copy is overridden to use this extruder + extruder : + // at least one copy would normally be printed with this extruder (see get_extruder_overrides function for explanation) + static_cast(- extruder - 1)); + Slic3r::sort_remove_duplicates(printing_extruders); + } + } else + printing_extruders.emplace_back(correct_extruder_id); // Now we must add this extrusion into the by_extruder map, once for each extruder that will print it: for (unsigned int extruder : printing_extruders) @@ -2178,10 +2316,10 @@ void GCode::process_layer( &layer_to_print - layers.data(), layers.size(), n_slices+1); for (size_t i = 0; i <= n_slices; ++ i) { - bool last = i == n_slices; - size_t island_idx = last ? n_slices : slices_test_order[i]; + bool last = i == n_slices; + size_t island_idx = last ? n_slices : slices_test_order[i]; if (// extrusions->first_point does not fit inside any slice - last || + last || // extrusions->first_point fits inside ith slice point_inside_surface(island_idx, extrusions->first_point())) { if (islands[island_idx].by_region.empty()) @@ -2205,9 +2343,15 @@ void GCode::process_layer( m_wipe_tower->tool_change(*this, extruder_id, extruder_id == layer_tools.extruders.back()) : this->set_extruder(extruder_id, print_z); +#if ENABLE_GCODE_VIEWER + // let analyzer tag generator aware of a role type change + if (layer_tools.has_wipe_tower && m_wipe_tower) + m_last_processor_extrusion_role = erWipeTower; +#else // let analyzer tag generator aware of a role type change if (m_enable_analyzer && layer_tools.has_wipe_tower && m_wipe_tower) m_last_analyzer_extrusion_role = erWipeTower; +#endif // ENABLE_GCODE_VIEWER if (auto loops_it = skirt_loops_per_extruder.find(extruder_id); loops_it != skirt_loops_per_extruder.end()) { const std::pair loops = loops_it->second; @@ -2250,10 +2394,10 @@ void GCode::process_layer( if (objects_by_extruder_it == by_extruder.end()) continue; - std::vector instances_to_print = sort_print_object_instances(objects_by_extruder_it->second, layers, ordering, single_object_instance_idx); + std::vector instances_to_print = sort_print_object_instances(objects_by_extruder_it->second, layers, ordering, single_object_instance_idx); // We are almost ready to print. However, we must go through all the objects twice to print the the overridden extrusions first (infill/perimeter wiping feature): - std::vector by_region_per_copy_cache; + std::vector by_region_per_copy_cache; for (int print_wipe_extrusions = is_anything_overridden; print_wipe_extrusions>=0; --print_wipe_extrusions) { if (is_anything_overridden && print_wipe_extrusions == 0) gcode+="; PURGING FINISHED\n"; @@ -2282,7 +2426,7 @@ void GCode::process_layer( } for (ObjectByExtruder::Island &island : instance_to_print.object_by_extruder.islands) { const auto& by_region_specific = is_anything_overridden ? island.by_region_per_copy(by_region_per_copy_cache, static_cast(instance_to_print.instance_id), extruder_id, print_wipe_extrusions != 0) : island.by_region; - //FIXME the following code prints regions in the order they are defined, the path is not optimized in any way. + //FIXME the following code prints regions in the order they are defined, the path is not optimized in any way. if (print.config().infill_first) { gcode += this->extrude_infill(print, by_region_specific, false); gcode += this->extrude_perimeters(print, by_region_specific, lower_layer_edge_grids[instance_to_print.layer_id]); @@ -2294,13 +2438,13 @@ void GCode::process_layer( gcode += this->extrude_infill(print,by_region_specific, true); } if (this->config().gcode_label_objects) - gcode += std::string("; stop printing object ") + instance_to_print.print_object.model_object()->name + " id:" + std::to_string(instance_to_print.layer_id) + " copy " + std::to_string(instance_to_print.instance_id) + "\n"; + gcode += std::string("; stop printing object ") + instance_to_print.print_object.model_object()->name + " id:" + std::to_string(instance_to_print.layer_id) + " copy " + std::to_string(instance_to_print.instance_id) + "\n"; } } } // Apply spiral vase post-processing if this layer contains suitable geometry - // (we must feed all the G-code into the post-processor, including the first + // (we must feed all the G-code into the post-processor, including the first // bottom non-spiral layers otherwise it will mess with positions) // we apply spiral vase at this stage because it requires a full layer. // Just a reminder: A spiral vase mode is allowed for a single object per layer, single material print only. @@ -2311,11 +2455,13 @@ void GCode::process_layer( if (m_cooling_buffer) gcode = m_cooling_buffer->process_layer(gcode, layer.id()); +#if !ENABLE_GCODE_VIEWER // add tag for analyzer if (gcode.find(GCodeAnalyzer::Pause_Print_Tag) != gcode.npos) gcode += "\n; " + GCodeAnalyzer::End_Pause_Print_Or_Custom_Code_Tag + "\n"; else if (gcode.find(GCodeAnalyzer::Custom_Code_Tag) != gcode.npos) gcode += "\n; " + GCodeAnalyzer::End_Pause_Print_Or_Custom_Code_Tag + "\n"; +#endif // !ENABLE_GCODE_VIEWER #ifdef HAS_PRESSURE_EQUALIZER // Apply pressure equalization if enabled; @@ -2324,14 +2470,19 @@ void GCode::process_layer( gcode = m_pressure_equalizer->process(gcode.c_str(), false); // printf("G-code after filter:\n%s\n", out.c_str()); #endif /* HAS_PRESSURE_EQUALIZER */ - + _write(file, gcode); - BOOST_LOG_TRIVIAL(trace) << "Exported layer " << layer.id() << " print_z " << print_z << - ", time estimator memory: " << - format_memsize_MB(m_normal_time_estimator.memory_used() + (m_silent_time_estimator_enabled ? m_silent_time_estimator.memory_used() : 0)) << - ", analyzer memory: " << - format_memsize_MB(m_analyzer.memory_used()) << +#if ENABLE_GCODE_VIEWER + BOOST_LOG_TRIVIAL(trace) << "Exported layer " << layer.id() << " print_z " << print_z << log_memory_info(); +#else + BOOST_LOG_TRIVIAL(trace) << "Exported layer " << layer.id() << " print_z " << print_z << + ", time estimator memory: " << + format_memsize_MB(m_normal_time_estimator.memory_used() + (m_silent_time_estimator_enabled ? m_silent_time_estimator.memory_used() : 0)) << + ", analyzer memory: " << + format_memsize_MB(m_analyzer.memory_used()) << + log_memory_info(); +#endif // ENABLE_GCODE_VIEWER } void GCode::apply_print_config(const PrintConfig &print_config) @@ -2342,19 +2493,19 @@ void GCode::apply_print_config(const PrintConfig &print_config) void GCode::append_full_config(const Print &print, std::string &str) { - const DynamicPrintConfig &cfg = print.full_print_config(); + const DynamicPrintConfig &cfg = print.full_print_config(); // Sorted list of config keys, which shall not be stored into the G-code. Initializer list. - static constexpr auto banned_keys = { - "compatible_printers"sv, - "compatible_prints"sv, - "print_host"sv, - "printhost_apikey"sv, - "printhost_cafile"sv - }; + static constexpr auto banned_keys = { + "compatible_printers"sv, + "compatible_prints"sv, + "print_host"sv, + "printhost_apikey"sv, + "printhost_cafile"sv + }; assert(std::is_sorted(banned_keys.begin(), banned_keys.end())); - auto is_banned = [](const std::string &key) { - return std::binary_search(banned_keys.begin(), banned_keys.end(), key); - }; + auto is_banned = [](const std::string &key) { + return std::binary_search(banned_keys.begin(), banned_keys.end(), key); + }; for (const std::string &key : cfg.keys()) if (! is_banned(key) && ! cfg.option(key)->is_nil()) str += "; " + key + " = " + cfg.opt_serialize(key) + "\n"; @@ -2363,7 +2514,7 @@ void GCode::append_full_config(const Print &print, std::string &str) void GCode::set_extruders(const std::vector &extruder_ids) { m_writer.set_extruders(extruder_ids); - + // enable wipe path generation if any extruder has wipe enabled m_wipe.enable = false; for (auto id : extruder_ids) @@ -2374,7 +2525,7 @@ void GCode::set_extruders(const std::vector &extruder_ids) } void GCode::set_origin(const Vec2d &pointf) -{ +{ // if origin increases (goes towards right), last_pos decreases because it goes towards left const Point translate( scale_(m_origin(0) - pointf(0)), @@ -2388,13 +2539,13 @@ void GCode::set_origin(const Vec2d &pointf) std::string GCode::preamble() { std::string gcode = m_writer.preamble(); - + /* Perform a *silent* move to z_offset: we need this to initialize the Z position of our writer object so that any initial lift taking place before the first layer change will raise the extruder from the correct initial Z instead of 0. */ m_writer.travel_to_z(m_config.z_offset.value); - + return gcode; } @@ -2414,178 +2565,14 @@ std::string GCode::change_layer(coordf_t print_z) comment << "move to next layer (" << m_layer_index << ")"; gcode += m_writer.travel_to_z(z, comment.str()); } - + // forget last wiping path as wiping after raising Z is pointless m_wipe.reset_path(); - + return gcode; } -// Return a value in <0, 1> of a cubic B-spline kernel centered around zero. -// The B-spline is re-scaled so it has value 1 at zero. -static inline float bspline_kernel(float x) -{ - x = std::abs(x); - if (x < 1.f) { - return 1.f - (3.f / 2.f) * x * x + (3.f / 4.f) * x * x * x; - } - else if (x < 2.f) { - x -= 1.f; - float x2 = x * x; - float x3 = x2 * x; - return (1.f / 4.f) - (3.f / 4.f) * x + (3.f / 4.f) * x2 - (1.f / 4.f) * x3; - } - else - return 0; -} -static float extrudate_overlap_penalty(float nozzle_r, float weight_zero, float overlap_distance) -{ - // The extrudate is not fully supported by the lower layer. Fit a polynomial penalty curve. - // Solved by sympy package: -/* -from sympy import * -(x,a,b,c,d,r,z)=symbols('x a b c d r z') -p = a + b*x + c*x*x + d*x*x*x -p2 = p.subs(solve([p.subs(x, -r), p.diff(x).subs(x, -r), p.diff(x,x).subs(x, -r), p.subs(x, 0)-z], [a, b, c, d])) -from sympy.plotting import plot -plot(p2.subs(r,0.2).subs(z,1.), (x, -1, 3), adaptive=False, nb_of_points=400) -*/ - if (overlap_distance < - nozzle_r) { - // The extrudate is fully supported by the lower layer. This is the ideal case, therefore zero penalty. - return 0.f; - } else { - float x = overlap_distance / nozzle_r; - float x2 = x * x; - float x3 = x2 * x; - return weight_zero * (1.f + 3.f * x + 3.f * x2 + x3); - } -} - -static Points::iterator project_point_to_polygon_and_insert(Polygon &polygon, const Point &pt, double eps) -{ - assert(polygon.points.size() >= 2); - if (polygon.points.size() <= 1) - if (polygon.points.size() == 1) - return polygon.points.begin(); - - Point pt_min; - double d_min = std::numeric_limits::max(); - size_t i_min = size_t(-1); - - for (size_t i = 0; i < polygon.points.size(); ++ i) { - size_t j = i + 1; - if (j == polygon.points.size()) - j = 0; - const Point &p1 = polygon.points[i]; - const Point &p2 = polygon.points[j]; - const Slic3r::Point v_seg = p2 - p1; - const Slic3r::Point v_pt = pt - p1; - const int64_t l2_seg = int64_t(v_seg(0)) * int64_t(v_seg(0)) + int64_t(v_seg(1)) * int64_t(v_seg(1)); - int64_t t_pt = int64_t(v_seg(0)) * int64_t(v_pt(0)) + int64_t(v_seg(1)) * int64_t(v_pt(1)); - if (t_pt < 0) { - // Closest to p1. - double dabs = sqrt(int64_t(v_pt(0)) * int64_t(v_pt(0)) + int64_t(v_pt(1)) * int64_t(v_pt(1))); - if (dabs < d_min) { - d_min = dabs; - i_min = i; - pt_min = p1; - } - } - else if (t_pt > l2_seg) { - // Closest to p2. Then p2 is the starting point of another segment, which shall be discovered in the next step. - continue; - } else { - // Closest to the segment. - assert(t_pt >= 0 && t_pt <= l2_seg); - int64_t d_seg = int64_t(v_seg(1)) * int64_t(v_pt(0)) - int64_t(v_seg(0)) * int64_t(v_pt(1)); - double d = double(d_seg) / sqrt(double(l2_seg)); - double dabs = std::abs(d); - if (dabs < d_min) { - d_min = dabs; - i_min = i; - // Evaluate the foot point. - pt_min = p1; - double linv = double(d_seg) / double(l2_seg); - pt_min(0) = pt(0) - coord_t(floor(double(v_seg(1)) * linv + 0.5)); - pt_min(1) = pt(1) + coord_t(floor(double(v_seg(0)) * linv + 0.5)); - assert(Line(p1, p2).distance_to(pt_min) < scale_(1e-5)); - } - } - } - - assert(i_min != size_t(-1)); - if ((pt_min - polygon.points[i_min]).cast().norm() > eps) { - // Insert a new point on the segment i_min, i_min+1. - return polygon.points.insert(polygon.points.begin() + (i_min + 1), pt_min); - } - return polygon.points.begin() + i_min; -} - -std::vector polygon_parameter_by_length(const Polygon &polygon) -{ - // Parametrize the polygon by its length. - std::vector lengths(polygon.points.size()+1, 0.); - for (size_t i = 1; i < polygon.points.size(); ++ i) - lengths[i] = lengths[i-1] + (polygon.points[i] - polygon.points[i-1]).cast().norm(); - lengths.back() = lengths[lengths.size()-2] + (polygon.points.front() - polygon.points.back()).cast().norm(); - return lengths; -} - -std::vector polygon_angles_at_vertices(const Polygon &polygon, const std::vector &lengths, float min_arm_length) -{ - assert(polygon.points.size() + 1 == lengths.size()); - if (min_arm_length > 0.25f * lengths.back()) - min_arm_length = 0.25f * lengths.back(); - - // Find the initial prev / next point span. - size_t idx_prev = polygon.points.size(); - size_t idx_curr = 0; - size_t idx_next = 1; - while (idx_prev > idx_curr && lengths.back() - lengths[idx_prev] < min_arm_length) - -- idx_prev; - while (idx_next < idx_prev && lengths[idx_next] < min_arm_length) - ++ idx_next; - - std::vector angles(polygon.points.size(), 0.f); - for (; idx_curr < polygon.points.size(); ++ idx_curr) { - // Move idx_prev up until the distance between idx_prev and idx_curr is lower than min_arm_length. - if (idx_prev >= idx_curr) { - while (idx_prev < polygon.points.size() && lengths.back() - lengths[idx_prev] + lengths[idx_curr] > min_arm_length) - ++ idx_prev; - if (idx_prev == polygon.points.size()) - idx_prev = 0; - } - while (idx_prev < idx_curr && lengths[idx_curr] - lengths[idx_prev] > min_arm_length) - ++ idx_prev; - // Move idx_prev one step back. - if (idx_prev == 0) - idx_prev = polygon.points.size() - 1; - else - -- idx_prev; - // Move idx_next up until the distance between idx_curr and idx_next is greater than min_arm_length. - if (idx_curr <= idx_next) { - while (idx_next < polygon.points.size() && lengths[idx_next] - lengths[idx_curr] < min_arm_length) - ++ idx_next; - if (idx_next == polygon.points.size()) - idx_next = 0; - } - while (idx_next < idx_curr && lengths.back() - lengths[idx_curr] + lengths[idx_next] < min_arm_length) - ++ idx_next; - // Calculate angle between idx_prev, idx_curr, idx_next. - const Point &p0 = polygon.points[idx_prev]; - const Point &p1 = polygon.points[idx_curr]; - const Point &p2 = polygon.points[idx_next]; - const Point v1 = p1 - p0; - const Point v2 = p2 - p1; - int64_t dot = int64_t(v1(0))*int64_t(v2(0)) + int64_t(v1(1))*int64_t(v2(1)); - int64_t cross = int64_t(v1(0))*int64_t(v2(1)) - int64_t(v1(1))*int64_t(v2(0)); - float angle = float(atan2(double(cross), double(dot))); - angles[idx_curr] = angle; - } - - return angles; -} std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, double speed, std::unique_ptr *lower_layer_edge_grid) { @@ -2612,195 +2599,49 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou #endif } } - + // extrude all loops ccw bool was_clockwise = loop.make_counter_clockwise(); - + SeamPosition seam_position = m_config.seam_position; - if (loop.loop_role() == elrSkirt) + if (loop.loop_role() == elrSkirt) seam_position = spNearest; - + // find the point of the loop that is closest to the current extruder position // or randomize if requested Point last_pos = this->last_pos(); if (m_config.spiral_vase) { loop.split_at(last_pos, false); - } else if (seam_position == spNearest || seam_position == spAligned || seam_position == spRear) { - Polygon polygon = loop.polygon(); - const coordf_t nozzle_dmr = EXTRUDER_CONFIG(nozzle_diameter); - const coord_t nozzle_r = coord_t(scale_(0.5 * nozzle_dmr) + 0.5); - - // Retrieve the last start position for this object. - float last_pos_weight = 1.f; - - if (seam_position == spAligned) { - // Seam is aligned to the seam at the preceding layer. - if (m_layer != NULL && m_seam_position.count(m_layer->object()) > 0) { - last_pos = m_seam_position[m_layer->object()]; - last_pos_weight = 1.f; - } - } - else if (seam_position == spRear) { - // Object is centered around (0,0) in its current coordinate system. - last_pos.x() = 0; - last_pos.y() += coord_t(3. * m_layer->object()->bounding_box().radius()); - last_pos_weight = 5.f; - } - - // Insert a projection of last_pos into the polygon. - size_t last_pos_proj_idx; - { - Points::iterator it = project_point_to_polygon_and_insert(polygon, last_pos, 0.1 * nozzle_r); - last_pos_proj_idx = it - polygon.points.begin(); - } - - // Parametrize the polygon by its length. - std::vector lengths = polygon_parameter_by_length(polygon); - - // For each polygon point, store a penalty. - // First calculate the angles, store them as penalties. The angles are caluculated over a minimum arm length of nozzle_r. - std::vector penalties = polygon_angles_at_vertices(polygon, lengths, float(nozzle_r)); - // No penalty for reflex points, slight penalty for convex points, high penalty for flat surfaces. - const float penaltyConvexVertex = 1.f; - const float penaltyFlatSurface = 5.f; - const float penaltyOverhangHalf = 10.f; - // Penalty for visible seams. - for (size_t i = 0; i < polygon.points.size(); ++ i) { - float ccwAngle = penalties[i]; - if (was_clockwise) - ccwAngle = - ccwAngle; - float penalty = 0; -// if (ccwAngle <- float(PI/3.)) - if (ccwAngle <- float(0.6 * PI)) - // Sharp reflex vertex. We love that, it hides the seam perfectly. - penalty = 0.f; -// else if (ccwAngle > float(PI/3.)) - else if (ccwAngle > float(0.6 * PI)) - // Seams on sharp convex vertices are more visible than on reflex vertices. - penalty = penaltyConvexVertex; - else if (ccwAngle < 0.f) { - // Interpolate penalty between maximum and zero. - penalty = penaltyFlatSurface * bspline_kernel(ccwAngle * float(PI * 2. / 3.)); - } else { - assert(ccwAngle >= 0.f); - // Interpolate penalty between maximum and the penalty for a convex vertex. - penalty = penaltyConvexVertex + (penaltyFlatSurface - penaltyConvexVertex) * bspline_kernel(ccwAngle * float(PI * 2. / 3.)); - } - // Give a negative penalty for points close to the last point or the prefered seam location. - //float dist_to_last_pos_proj = last_pos_proj.distance_to(polygon.points[i]); - float dist_to_last_pos_proj = (i < last_pos_proj_idx) ? - std::min(lengths[last_pos_proj_idx] - lengths[i], lengths.back() - lengths[last_pos_proj_idx] + lengths[i]) : - std::min(lengths[i] - lengths[last_pos_proj_idx], lengths.back() - lengths[i] + lengths[last_pos_proj_idx]); - float dist_max = 0.1f * lengths.back(); // 5.f * nozzle_dmr - penalty -= last_pos_weight * bspline_kernel(dist_to_last_pos_proj / dist_max); - penalties[i] = std::max(0.f, penalty); - } - - // Penalty for overhangs. - if (lower_layer_edge_grid && (*lower_layer_edge_grid)) { - // Use the edge grid distance field structure over the lower layer to calculate overhangs. - coord_t nozzle_r = coord_t(floor(scale_(0.5 * nozzle_dmr) + 0.5)); - coord_t search_r = coord_t(floor(scale_(0.8 * nozzle_dmr) + 0.5)); - for (size_t i = 0; i < polygon.points.size(); ++ i) { - const Point &p = polygon.points[i]; - coordf_t dist; - // Signed distance is positive outside the object, negative inside the object. - // The point is considered at an overhang, if it is more than nozzle radius - // outside of the lower layer contour. - #ifdef NDEBUG // to suppress unused variable warning in release mode - (*lower_layer_edge_grid)->signed_distance(p, search_r, dist); - #else - bool found = (*lower_layer_edge_grid)->signed_distance(p, search_r, dist); - #endif - // If the approximate Signed Distance Field was initialized over lower_layer_edge_grid, - // then the signed distnace shall always be known. - assert(found); - penalties[i] += extrudate_overlap_penalty(float(nozzle_r), penaltyOverhangHalf, float(dist)); - } - } - - // Find a point with a minimum penalty. - size_t idx_min = std::min_element(penalties.begin(), penalties.end()) - penalties.begin(); - - // if (seam_position == spAligned) - // For all (aligned, nearest, rear) seams: - { - // Very likely the weight of idx_min is very close to the weight of last_pos_proj_idx. - // In that case use last_pos_proj_idx instead. - float penalty_aligned = penalties[last_pos_proj_idx]; - float penalty_min = penalties[idx_min]; - float penalty_diff_abs = std::abs(penalty_min - penalty_aligned); - float penalty_max = std::max(penalty_min, penalty_aligned); - float penalty_diff_rel = (penalty_max == 0.f) ? 0.f : penalty_diff_abs / penalty_max; - // printf("Align seams, penalty aligned: %f, min: %f, diff abs: %f, diff rel: %f\n", penalty_aligned, penalty_min, penalty_diff_abs, penalty_diff_rel); - if (penalty_diff_rel < 0.05) { - // Penalty of the aligned point is very close to the minimum penalty. - // Align the seams as accurately as possible. - idx_min = last_pos_proj_idx; - } - m_seam_position[m_layer->object()] = polygon.points[idx_min]; - } - - // Export the contour into a SVG file. - #if 0 - { - static int iRun = 0; - SVG svg(debug_out_path("GCode_extrude_loop-%d.svg", iRun ++)); - if (m_layer->lower_layer != NULL) - svg.draw(m_layer->lower_layer->slices); - for (size_t i = 0; i < loop.paths.size(); ++ i) - svg.draw(loop.paths[i].as_polyline(), "red"); - Polylines polylines; - for (size_t i = 0; i < loop.paths.size(); ++ i) - polylines.push_back(loop.paths[i].as_polyline()); - Slic3r::Polygons polygons; - coordf_t nozzle_dmr = EXTRUDER_CONFIG(nozzle_diameter); - coord_t delta = scale_(0.5*nozzle_dmr); - Slic3r::offset(polylines, &polygons, delta); -// for (size_t i = 0; i < polygons.size(); ++ i) svg.draw((Polyline)polygons[i], "blue"); - svg.draw(last_pos, "green", 3); - svg.draw(polygon.points[idx_min], "yellow", 3); - svg.Close(); - } - #endif - + } else { + const EdgeGrid::Grid* edge_grid_ptr = (lower_layer_edge_grid && *lower_layer_edge_grid) + ? lower_layer_edge_grid->get() + : nullptr; + Point seam = m_seam_placer.get_seam(m_layer->id(), seam_position, loop, + last_pos, EXTRUDER_CONFIG(nozzle_diameter), + (m_layer == NULL ? nullptr : m_layer->object()), + was_clockwise, edge_grid_ptr); // Split the loop at the point with a minium penalty. - if (!loop.split_at_vertex(polygon.points[idx_min])) + if (!loop.split_at_vertex(seam)) // The point is not in the original loop. Insert it. - loop.split_at(polygon.points[idx_min], true); - - } else if (seam_position == spRandom) { - if (loop.loop_role() == elrContourInternalPerimeter) { - // This loop does not contain any other loop. Set a random position. - // The other loops will get a seam close to the random point chosen - // on the inner most contour. - //FIXME This works correctly for inner contours first only. - //FIXME Better parametrize the loop by its length. - Polygon polygon = loop.polygon(); - Point centroid = polygon.centroid(); - last_pos = Point(polygon.bounding_box().max(0), centroid(1)); - last_pos.rotate(fmod((float)rand()/16.0, 2.0*PI), centroid); - } - // Find the closest point, avoid overhangs. - loop.split_at(last_pos, true); + loop.split_at(seam, true); } - + // clip the path to avoid the extruder to get exactly on the first point of the loop; // if polyline was shorter than the clipping distance we'd get a null polyline, so // we discard it in that case - double clip_length = m_enable_loop_clipping ? - scale_(EXTRUDER_CONFIG(nozzle_diameter)) * LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER : + double clip_length = m_enable_loop_clipping ? + scale_(EXTRUDER_CONFIG(nozzle_diameter)) * LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER : 0; // get paths ExtrusionPaths paths; loop.clip_end(clip_length, &paths); if (paths.empty()) return ""; - + // apply the small perimeter speed if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1) speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed); - + // extrude along the path std::string gcode; for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) { @@ -2809,31 +2650,31 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou path->simplify(SCALED_RESOLUTION); gcode += this->_extrude(*path, description, speed); } - + // reset acceleration gcode += m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5)); - + if (m_wipe.enable) m_wipe.path = paths.front().polyline; // TODO: don't limit wipe to last path - + // make a little move inwards before leaving loop - if (paths.back().role() == erExternalPerimeter && m_layer != NULL && m_config.perimeters.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { + if (paths.back().role() == erExternalPerimeter && m_layer != NULL && m_config.perimeters.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { // detect angle between last and first segment // the side depends on the original winding order of the polygon (left for contours, right for holes) - //FIXME improve the algorithm in case the loop is tiny. - //FIXME improve the algorithm in case the loop is split into segments with a low number of points (see the Point b query). + //FIXME improve the algorithm in case the loop is tiny. + //FIXME improve the algorithm in case the loop is split into segments with a low number of points (see the Point b query). Point a = paths.front().polyline.points[1]; // second point Point b = *(paths.back().polyline.points.end()-3); // second to last point if (was_clockwise) { // swap points Point c = a; a = b; b = c; } - + double angle = paths.front().first_point().ccw_angle(a, b) / 3; - + // turn left if contour, turn right if hole if (was_clockwise) angle *= -1; - + // create the destination point along the first segment and rotate it // we make sure we don't exceed the segment length because we don't know // the rotation of the second segment so we might cross the object boundary @@ -2849,7 +2690,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou // generate the travel move gcode += m_writer.travel_to_xy(this->point_to_gcode(pt), "move inwards before travel"); } - + return gcode; } @@ -2881,7 +2722,7 @@ std::string GCode::extrude_entity(const ExtrusionEntity &entity, std::string des else if (const ExtrusionLoop* loop = dynamic_cast(&entity)) return this->extrude_loop(*loop, description, speed, lower_layer_edge_grid); else - throw std::invalid_argument("Invalid argument supplied to extrude()"); + throw Slic3r::InvalidArgument("Invalid argument supplied to extrude()"); return ""; } @@ -2920,23 +2761,23 @@ std::string GCode::extrude_infill(const Print &print, const std::vectorrole() == erIroning) == ironing) - extrusions.emplace_back(ee); - if (! extrusions.empty()) { - m_config.apply(print.regions()[®ion - &by_region.front()]->config()); - chain_and_reorder_extrusion_entities(extrusions, &m_last_pos); - for (const ExtrusionEntity *fill : extrusions) { - auto *eec = dynamic_cast(fill); - if (eec) { - for (ExtrusionEntity *ee : eec->chained_path_from(m_last_pos).entities) - gcode += this->extrude_entity(*ee, extrusion_name); - } else - gcode += this->extrude_entity(*fill, extrusion_name); - } - } + extrusions.clear(); + extrusions.reserve(region.infills.size()); + for (ExtrusionEntity *ee : region.infills) + if ((ee->role() == erIroning) == ironing) + extrusions.emplace_back(ee); + if (! extrusions.empty()) { + m_config.apply(print.regions()[®ion - &by_region.front()]->config()); + chain_and_reorder_extrusion_entities(extrusions, &m_last_pos); + for (const ExtrusionEntity *fill : extrusions) { + auto *eec = dynamic_cast(fill); + if (eec) { + for (ExtrusionEntity *ee : eec->chained_path_from(m_last_pos).entities) + gcode += this->extrude_entity(*ee, extrusion_name); + } else + gcode += this->extrude_entity(*fill, extrusion_name); + } + } } return gcode; } @@ -2971,15 +2812,21 @@ std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fill void GCode::_write(FILE* file, const char *what) { if (what != nullptr) { +#if ENABLE_GCODE_VIEWER + const char* gcode = what; +#else // apply analyzer, if enabled const char* gcode = m_enable_analyzer ? m_analyzer.process_gcode(what).c_str() : what; +#endif // !ENABLE_GCODE_VIEWER // writes string to file fwrite(gcode, 1, ::strlen(gcode), file); +#if !ENABLE_GCODE_VIEWER // updates time estimator and gcode lines vector m_normal_time_estimator.add_gcode_block(gcode); if (m_silent_time_estimator_enabled) m_silent_time_estimator.add_gcode_block(gcode); +#endif // !ENABLE_GCODE_VIEWER } } @@ -3024,10 +2871,10 @@ void GCode::_write_format(FILE* file, const char* format, ...) std::string GCode::_extrude(const ExtrusionPath &path, std::string description, double speed) { std::string gcode; - + if (is_bridge(path.role())) description += " (bridge)"; - + // go to first point of extrusion path if (!m_last_pos_defined || m_last_pos != path.first_point()) { gcode += this->travel_to( @@ -3036,10 +2883,10 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, "move to first " + description + " point" ); } - + // compensate retraction gcode += this->unretract(); - + // adjust acceleration { double acceleration; @@ -3056,11 +2903,11 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } gcode += m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5)); } - + // calculate extrusion length per distance unit double e_per_mm = m_writer.extruder()->e_per_mm3() * path.mm3_per_mm; if (m_writer.extrusion_axis().empty()) e_per_mm = 0; - + // set speed if (speed == -1) { if (path.role() == erPerimeter) { @@ -3080,7 +2927,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } else if (path.role() == erGapFill) { speed = m_config.get_abs_value("gap_fill_speed"); } else { - throw std::invalid_argument("Invalid speed"); + throw Slic3r::InvalidArgument("Invalid speed"); } } if (this->on_first_layer()) @@ -3102,7 +2949,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, ); } double F = speed * 60; // convert mm/sec to mm/min - + // extrude arc or line if (m_enable_extrusion_role_markers) { @@ -3118,42 +2965,71 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } } - // adds analyzer tags and updates analyzer's tracking data - if (m_enable_analyzer) - { + // adds processor tags and updates processor tracking data +#if ENABLE_GCODE_VIEWER + // PrusaMultiMaterial::Writer may generate GCodeProcessor::Height_Tag lines without updating m_last_height + // so, if the last role was erWipeTower we force export of GCodeProcessor::Height_Tag lines + bool last_was_wipe_tower = (m_last_processor_extrusion_role == erWipeTower); +#else + if (m_enable_analyzer) { // PrusaMultiMaterial::Writer may generate GCodeAnalyzer::Height_Tag and GCodeAnalyzer::Width_Tag lines without updating m_last_height and m_last_width // so, if the last role was erWipeTower we force export of GCodeAnalyzer::Height_Tag and GCodeAnalyzer::Width_Tag lines bool last_was_wipe_tower = (m_last_analyzer_extrusion_role == erWipeTower); +#endif // ENABLE_GCODE_VIEWER char buf[64]; - if (path.role() != m_last_analyzer_extrusion_role) - { +#if ENABLE_GCODE_VIEWER + if (path.role() != m_last_processor_extrusion_role) { + m_last_processor_extrusion_role = path.role(); + sprintf(buf, ";%s%s\n", GCodeProcessor::Extrusion_Role_Tag.c_str(), ExtrusionEntity::role_to_string(m_last_processor_extrusion_role).c_str()); + gcode += buf; + } + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + if (last_was_wipe_tower || (m_last_mm3_per_mm != path.mm3_per_mm)) { + m_last_mm3_per_mm = path.mm3_per_mm; + sprintf(buf, ";%s%f\n", GCodeProcessor::Mm3_Per_Mm_Tag.c_str(), m_last_mm3_per_mm); + gcode += buf; + } + + if (last_was_wipe_tower || m_last_width != path.width) { + m_last_width = path.width; + sprintf(buf, ";%s%g\n", GCodeProcessor::Width_Tag.c_str(), m_last_width); + gcode += buf; + } +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + if (last_was_wipe_tower || std::abs(m_last_height - path.height) > EPSILON) { + m_last_height = path.height; + sprintf(buf, ";%s%g\n", GCodeProcessor::Height_Tag.c_str(), m_last_height); + gcode += buf; + } +#else + if (path.role() != m_last_analyzer_extrusion_role) { m_last_analyzer_extrusion_role = path.role(); sprintf(buf, ";%s%d\n", GCodeAnalyzer::Extrusion_Role_Tag.c_str(), int(m_last_analyzer_extrusion_role)); gcode += buf; } - if (last_was_wipe_tower || (m_last_mm3_per_mm != path.mm3_per_mm)) - { + if (last_was_wipe_tower || (m_last_mm3_per_mm != path.mm3_per_mm)) { m_last_mm3_per_mm = path.mm3_per_mm; sprintf(buf, ";%s%f\n", GCodeAnalyzer::Mm3_Per_Mm_Tag.c_str(), m_last_mm3_per_mm); gcode += buf; } - if (last_was_wipe_tower || (m_last_width != path.width)) - { + if (last_was_wipe_tower || m_last_width != path.width) { m_last_width = path.width; sprintf(buf, ";%s%f\n", GCodeAnalyzer::Width_Tag.c_str(), m_last_width); gcode += buf; } - if (last_was_wipe_tower || (m_last_height != path.height)) - { + if (last_was_wipe_tower || m_last_height != path.height) { m_last_height = path.height; sprintf(buf, ";%s%f\n", GCodeAnalyzer::Height_Tag.c_str(), m_last_height); gcode += buf; } } +#endif // ENABLE_GCODE_VIEWER std::string comment; if (m_enable_cooling_markers) { @@ -3181,40 +3057,40 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } if (m_enable_cooling_markers) gcode += is_bridge(path.role()) ? ";_BRIDGE_FAN_END\n" : ";_EXTRUDE_END\n"; - + this->set_last_pos(path.last_point()); return gcode; } // This method accepts &point in print coordinates. std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string comment) -{ +{ /* Define the travel move as a line between current position and the taget point. This is expressed in print coordinates, so it will need to be translated by this->origin in order to get G-code coordinates. */ Polyline travel; travel.append(this->last_pos()); travel.append(point); - + // check whether a straight travel move would need retraction bool needs_retraction = this->needs_retraction(travel, role); - + // if a retraction would be needed, try to use avoid_crossing_perimeters to plan a // multi-hop travel path inside the configuration space if (needs_retraction && m_config.avoid_crossing_perimeters && ! m_avoid_crossing_perimeters.disable_once) { travel = m_avoid_crossing_perimeters.travel_to(*this, point); - + // check again whether the new travel path still needs a retraction needs_retraction = this->needs_retraction(travel, role); //if (needs_retraction && m_layer_index > 1) exit(0); } - + // Re-allow avoid_crossing_perimeters for the next travel moves m_avoid_crossing_perimeters.disable_once = false; m_avoid_crossing_perimeters.use_external_mp_once = false; - + // generate G-code for the travel move std::string gcode; if (needs_retraction) @@ -3222,12 +3098,12 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string else // Reset the wipe path when traveling, so one would not wipe along an old path. m_wipe.reset_path(); - + // use G1 because we rely on paths being straight (G0 may make round paths) Lines lines = travel.lines(); if (! lines.empty()) { for (const Line &line : lines) - gcode += m_writer.travel_to_xy(this->point_to_gcode(line.b), comment); + gcode += m_writer.travel_to_xy(this->point_to_gcode(line.b), comment); this->set_last_pos(lines.back().b); } return gcode; @@ -3239,7 +3115,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role) // skip retraction if the move is shorter than the configured threshold return false; } - + if (role == erSupportMaterial) { const SupportLayer* support_layer = dynamic_cast(m_layer); //FIXME support_layer->support_islands.contains should use some search structure! @@ -3256,7 +3132,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role) // internal infill is enabled (so that stringing is entirely not visible). //FIXME any_internal_region_slice_contains() is potentionally very slow, it shall test for the bounding boxes first. return false; - + // retract if only_retract_when_crossing_perimeters is disabled or doesn't apply return true; } @@ -3264,26 +3140,26 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role) std::string GCode::retract(bool toolchange) { std::string gcode; - + if (m_writer.extruder() == nullptr) return gcode; - + // wipe (if it's enabled for this extruder and we have a stored wipe path) if (EXTRUDER_CONFIG(wipe) && m_wipe.has_path()) { gcode += toolchange ? m_writer.retract_for_toolchange(true) : m_writer.retract(true); gcode += m_wipe.wipe(*this, toolchange); } - + /* The parent class will decide whether we need to perform an actual retraction - (the extruder might be already retracted fully or partially). We call these + (the extruder might be already retracted fully or partially). We call these methods even if we performed wipe, since this will ensure the entire retraction length is honored in case wipe path was too short. */ gcode += toolchange ? m_writer.retract_for_toolchange() : m_writer.retract(); - + gcode += m_writer.reset_e(); if (m_writer.extruder()->retract_length() > 0 || m_config.use_firmware_retraction) gcode += m_writer.lift(); - + return gcode; } @@ -3291,11 +3167,11 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) { if (!m_writer.need_toolchange(extruder_id)) return ""; - + // if we are running a single-extruder setup, just set the extruder and return nothing if (!m_writer.multiple_extruders) { m_placeholder_parser.set("current_extruder", extruder_id); - + std::string gcode; // Append the filament start G-code. const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id); @@ -3307,13 +3183,13 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) gcode += m_writer.toolchange(extruder_id); return gcode; } - + // prepend retraction on the current extruder std::string gcode = this->retract(true); // Always reset the extrusion path, even if the tool change retract is set to zero. m_wipe.reset_path(); - + if (m_writer.extruder() != nullptr) { // Process the custom end_filament_gcode. set_extruder() is only called if there is no wipe tower // so it should not be injected twice. @@ -3325,7 +3201,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) } } - + // If ooze prevention is enabled, park current extruder in the nearest // standby point and set it to the standby temperature. if (m_ooze_prevention.enable && m_writer.extruder() != nullptr) @@ -3374,7 +3250,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) // Set the new extruder to the operating temperature. if (m_ooze_prevention.enable) gcode += m_ooze_prevention.post_toolchange(*this); - + return gcode; } @@ -3401,17 +3277,17 @@ const std::vector& GCode::ObjectByExtru { bool has_overrides = false; for (const auto& reg : by_region) - if (! reg.infills_overrides.empty() || ! reg.perimeters_overrides.empty()) { - has_overrides = true; - break; - } + if (! reg.infills_overrides.empty() || ! reg.perimeters_overrides.empty()) { + has_overrides = true; + break; + } - // Data is cleared, but the memory is not. + // Data is cleared, but the memory is not. by_region_per_copy_cache.clear(); if (! has_overrides) - // Simple case. No need to copy the regions. - return wiping_entities ? by_region_per_copy_cache : this->by_region; + // Simple case. No need to copy the regions. + return wiping_entities ? by_region_per_copy_cache : this->by_region; // Complex case. Some of the extrusions of some object instances are to be printed first - those are the wiping extrusions. // Some of the extrusions of some object instances are printed later - those are the clean print extrusions. @@ -3430,25 +3306,25 @@ const std::vector& GCode::ObjectByExtru // Now the most important thing - which extrusion should we print. // See function ToolOrdering::get_extruder_overrides for details about the negative numbers hack. if (wiping_entities) { - // Apply overrides for this region. - for (unsigned int i = 0; i < overrides.size(); ++ i) { - const WipingExtrusions::ExtruderPerCopy *this_override = overrides[i]; - // This copy (aka object instance) should be printed with this extruder, which overrides the default one. - if (this_override != nullptr && (*this_override)[copy] == int(extruder)) - target_eec.emplace_back(entities[i]); - } - } else { - // Apply normal extrusions (non-overrides) for this region. - unsigned int i = 0; - for (; i < overrides.size(); ++ i) { - const WipingExtrusions::ExtruderPerCopy *this_override = overrides[i]; - // This copy (aka object instance) should be printed with this extruder, which shall be equal to the default one. - if (this_override == nullptr || (*this_override)[copy] == -int(extruder)-1) - target_eec.emplace_back(entities[i]); - } - for (; i < entities.size(); ++ i) + // Apply overrides for this region. + for (unsigned int i = 0; i < overrides.size(); ++ i) { + const WipingExtrusions::ExtruderPerCopy *this_override = overrides[i]; + // This copy (aka object instance) should be printed with this extruder, which overrides the default one. + if (this_override != nullptr && (*this_override)[copy] == int(extruder)) + target_eec.emplace_back(entities[i]); + } + } else { + // Apply normal extrusions (non-overrides) for this region. + unsigned int i = 0; + for (; i < overrides.size(); ++ i) { + const WipingExtrusions::ExtruderPerCopy *this_override = overrides[i]; + // This copy (aka object instance) should be printed with this extruder, which shall be equal to the default one. + if (this_override == nullptr || (*this_override)[copy] == -int(extruder)-1) + target_eec.emplace_back(entities[i]); + } + for (; i < entities.size(); ++ i) target_eec.emplace_back(entities[i]); - } + } } } return by_region_per_copy_cache; @@ -3468,11 +3344,11 @@ void GCode::ObjectByExtruder::Island::Region::append(const Type type, const Extr perimeters_or_infills_overrides = &perimeters_overrides; break; case INFILL: - perimeters_or_infills = &infills; - perimeters_or_infills_overrides = &infills_overrides; + perimeters_or_infills = &infills; + perimeters_or_infills_overrides = &infills_overrides; break; default: - throw std::invalid_argument("Unknown parameter!"); + throw Slic3r::InvalidArgument("Unknown parameter!"); } // First we append the entities, there are eec->entities.size() of them: @@ -3480,18 +3356,18 @@ void GCode::ObjectByExtruder::Island::Region::append(const Type type, const Extr size_t new_size = old_size + (eec->can_reverse() ? eec->entities.size() : 1); perimeters_or_infills->reserve(new_size); if (eec->can_reverse()) { - for (auto* ee : eec->entities) - perimeters_or_infills->emplace_back(ee); - } else - perimeters_or_infills->emplace_back(const_cast(eec)); + for (auto* ee : eec->entities) + perimeters_or_infills->emplace_back(ee); + } else + perimeters_or_infills->emplace_back(const_cast(eec)); if (copies_extruder != nullptr) { - // Don't reallocate overrides if not needed. - // Missing overrides are implicitely considered non-overridden. + // Don't reallocate overrides if not needed. + // Missing overrides are implicitely considered non-overridden. perimeters_or_infills_overrides->reserve(new_size); perimeters_or_infills_overrides->resize(old_size, nullptr); perimeters_or_infills_overrides->resize(new_size, copies_extruder); - } + } } } // namespace Slic3r diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 8d47337832..01650b6eeb 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -13,9 +13,14 @@ #include "GCode/SpiralVase.hpp" #include "GCode/ToolOrdering.hpp" #include "GCode/WipeTower.hpp" -#include "GCodeTimeEstimator.hpp" -#include "EdgeGrid.hpp" +#include "GCode/SeamPlacer.hpp" +#if ENABLE_GCODE_VIEWER +#include "GCode/GCodeProcessor.hpp" +#else #include "GCode/Analyzer.hpp" +#include "GCodeTimeEstimator.hpp" +#endif // ENABLE_GCODE_VIEWER +#include "EdgeGrid.hpp" #include "GCode/ThumbnailData.hpp" #include @@ -29,7 +34,9 @@ namespace Slic3r { // Forward declarations. class GCode; +#if !ENABLE_GCODE_VIEWER class GCodePreviewData; +#endif // !ENABLE_GCODE_VIEWER namespace { struct Item; } struct PrintInstance; @@ -63,6 +70,7 @@ private: std::unique_ptr m_layer_mp; }; + class OozePrevention { public: bool enable; @@ -138,6 +146,15 @@ private: double m_last_wipe_tower_print_z = 0.f; }; +#if ENABLE_GCODE_VIEWER +class ColorPrintColors +{ + static const std::vector Colors; +public: + static const std::vector& get() { return Colors; } +}; +#endif // ENABLE_GCODE_VIEWER + class GCode { public: GCode() : @@ -145,21 +162,33 @@ public: m_enable_loop_clipping(true), m_enable_cooling_markers(false), m_enable_extrusion_role_markers(false), +#if ENABLE_GCODE_VIEWER + m_last_processor_extrusion_role(erNone), +#else m_enable_analyzer(false), m_last_analyzer_extrusion_role(erNone), +#endif // ENABLE_GCODE_VIEWER m_layer_count(0), m_layer_index(-1), m_layer(nullptr), m_volumetric_speed(0), m_last_pos_defined(false), m_last_extrusion_role(erNone), +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + m_last_mm3_per_mm(0.0), + m_last_width(0.0f), +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING +#if !ENABLE_GCODE_VIEWER m_last_mm3_per_mm(GCodeAnalyzer::Default_mm3_per_mm), m_last_width(GCodeAnalyzer::Default_Width), m_last_height(GCodeAnalyzer::Default_Height), +#endif // !ENABLE_GCODE_VIEWER m_brim_done(false), m_second_layer_things_done(false), +#if !ENABLE_GCODE_VIEWER m_normal_time_estimator(GCodeTimeEstimator::Normal), m_silent_time_estimator(GCodeTimeEstimator::Silent), +#endif // !ENABLE_GCODE_VIEWER m_silent_time_estimator_enabled(false), m_last_obj_copy(nullptr, Point(std::numeric_limits::max(), std::numeric_limits::max())) {} @@ -167,7 +196,11 @@ public: // throws std::runtime_exception on error, // throws CanceledException through print->throw_if_canceled(). +#if ENABLE_GCODE_VIEWER + void do_export(Print* print, const char* path, GCodeProcessor::Result* result = nullptr, ThumbnailsGeneratorCallback thumbnail_cb = nullptr); +#else void do_export(Print* print, const char* path, GCodePreviewData* preview_data = nullptr, ThumbnailsGeneratorCallback thumbnail_cb = nullptr); +#endif // ENABLE_GCODE_VIEWER // Exported for the helper classes (OozePrevention, Wipe) and for the Perl binding for unit tests. const Vec2d& origin() const { return m_origin; } @@ -307,6 +340,9 @@ private: std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } std::string set_extruder(unsigned int extruder_id, double print_z); + // Cache for custom seam enforcers/blockers for each layer. + SeamPlacer m_seam_placer; + /* Origin of print coordinates expressed in unscaled G-code coordinates. This affects the input arguments supplied to the extrude*() and travel_to() methods. */ @@ -327,11 +363,16 @@ private: // Markers for the Pressure Equalizer to recognize the extrusion type. // The Pressure Equalizer removes the markers from the final G-code. bool m_enable_extrusion_role_markers; +#if ENABLE_GCODE_VIEWER + // Keeps track of the last extrusion role passed to the processor + ExtrusionRole m_last_processor_extrusion_role; +#else // Enableds the G-code Analyzer. // Extended markers will be added during G-code generation. // The G-code Analyzer will remove these comments from the final G-code. bool m_enable_analyzer; ExtrusionRole m_last_analyzer_extrusion_role; +#endif // ENABLE_GCODE_VIEWER // How many times will change_layer() be called? // change_layer() will update the progress bar. unsigned int m_layer_count; @@ -340,14 +381,23 @@ private: // Current layer processed. Insequential printing mode, only a single copy will be printed. // In non-sequential mode, all its copies will be printed. const Layer* m_layer; - std::map m_seam_position; double m_volumetric_speed; // Support for the extrusion role markers. Which marker is active? ExtrusionRole m_last_extrusion_role; +#if ENABLE_GCODE_VIEWER + // Support for G-Code Processor + float m_last_height{ 0.0f }; + float m_last_layer_z{ 0.0f }; +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + double m_last_mm3_per_mm; + float m_last_width{ 0.0f }; +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING +#else // Support for G-Code Analyzer double m_last_mm3_per_mm; float m_last_width; float m_last_height; +#endif // ENABLE_GCODE_VIEWER Point m_last_pos; bool m_last_pos_defined; @@ -368,13 +418,20 @@ private: // Index of a last object copy extruded. std::pair m_last_obj_copy; +#if !ENABLE_GCODE_VIEWER // Time estimators GCodeTimeEstimator m_normal_time_estimator; GCodeTimeEstimator m_silent_time_estimator; +#endif // !ENABLE_GCODE_VIEWER bool m_silent_time_estimator_enabled; +#if ENABLE_GCODE_VIEWER + // Processor + GCodeProcessor m_processor; +#else // Analyzer GCodeAnalyzer m_analyzer; +#endif // ENABLE_GCODE_VIEWER // Write a string into a file. void _write(FILE* file, const std::string& what) { this->_write(file, what.c_str()); } diff --git a/src/libslic3r/GCode/Analyzer.cpp b/src/libslic3r/GCode/Analyzer.cpp index 73c20f1b58..d022b37983 100644 --- a/src/libslic3r/GCode/Analyzer.cpp +++ b/src/libslic3r/GCode/Analyzer.cpp @@ -12,6 +12,8 @@ #include "Analyzer.hpp" #include "PreviewData.hpp" +#if !ENABLE_GCODE_VIEWER + static const std::string AXIS_STR = "XYZE"; static const float MMMIN_TO_MMSEC = 1.0f / 60.0f; static const float INCHES_TO_MM = 25.4f; @@ -350,7 +352,7 @@ void GCodeAnalyzer::_processG1(const GCodeReader::GCodeLine& line) if (delta_pos[E] < 0.0f) { if ((delta_pos[X] != 0.0f) || (delta_pos[Y] != 0.0f) || (delta_pos[Z] != 0.0f)) - type = GCodeMove::Move; + type = GCodeMove::Move; else type = GCodeMove::Retract; } @@ -651,7 +653,7 @@ bool GCodeAnalyzer::_process_tags(const GCodeReader::GCodeLine& line) return true; } - // color change tag + // pause print tag pos = comment.find(Pause_Print_Tag); if (pos != comment.npos) { @@ -659,7 +661,7 @@ bool GCodeAnalyzer::_process_tags(const GCodeReader::GCodeLine& line) return true; } - // color change tag + // custom code tag pos = comment.find(Custom_Code_Tag); if (pos != comment.npos) { @@ -667,7 +669,7 @@ bool GCodeAnalyzer::_process_tags(const GCodeReader::GCodeLine& line) return true; } - // color change tag + // end pause print or custom code tag pos = comment.find(End_Pause_Print_Or_Custom_Code_Tag); if (pos != comment.npos) { @@ -1191,3 +1193,5 @@ size_t GCodeAnalyzer::memory_used() const } } // namespace Slic3r + +#endif // !ENABLE_GCODE_VIEWER diff --git a/src/libslic3r/GCode/Analyzer.hpp b/src/libslic3r/GCode/Analyzer.hpp index 4ac383fea6..37d9072592 100644 --- a/src/libslic3r/GCode/Analyzer.hpp +++ b/src/libslic3r/GCode/Analyzer.hpp @@ -1,6 +1,8 @@ #ifndef slic3r_GCode_Analyzer_hpp_ #define slic3r_GCode_Analyzer_hpp_ +#if !ENABLE_GCODE_VIEWER + #include "../libslic3r.h" #include "../PrintConfig.hpp" #include "../ExtrusionEntity.hpp" @@ -302,4 +304,6 @@ private: } // namespace Slic3r +#endif // !ENABLE_GCODE_VIEWER + #endif /* slic3r_GCode_Analyzer_hpp_ */ diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp new file mode 100644 index 0000000000..665316296f --- /dev/null +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -0,0 +1,2183 @@ +#include "libslic3r/libslic3r.h" +#include "libslic3r/Utils.hpp" +#include "libslic3r/Print.hpp" +#include "GCodeProcessor.hpp" + +#include +#include +#include + +#include +#include + +#if ENABLE_GCODE_VIEWER +#include + +static const float INCHES_TO_MM = 25.4f; +static const float MMMIN_TO_MMSEC = 1.0f / 60.0f; + +static const float DEFAULT_ACCELERATION = 1500.0f; // Prusa Firmware 1_75mm_MK2 + +namespace Slic3r { + +const std::string GCodeProcessor::Extrusion_Role_Tag = "TYPE:"; +const std::string GCodeProcessor::Height_Tag = "HEIGHT:"; +const std::string GCodeProcessor::Layer_Change_Tag = "LAYER_CHANGE"; +const std::string GCodeProcessor::Color_Change_Tag = "COLOR_CHANGE"; +const std::string GCodeProcessor::Pause_Print_Tag = "PAUSE_PRINT"; +const std::string GCodeProcessor::Custom_Code_Tag = "CUSTOM_GCODE"; + +const std::string GCodeProcessor::First_Line_M73_Placeholder_Tag = "; _GP_FIRST_LINE_M73_PLACEHOLDER"; +const std::string GCodeProcessor::Last_Line_M73_Placeholder_Tag = "; _GP_LAST_LINE_M73_PLACEHOLDER"; +const std::string GCodeProcessor::Estimated_Printing_Time_Placeholder_Tag = "; _GP_ESTIMATED_PRINTING_TIME_PLACEHOLDER"; + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING +const std::string GCodeProcessor::Width_Tag = "WIDTH:"; +const std::string GCodeProcessor::Mm3_Per_Mm_Tag = "MM3_PER_MM:"; +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + +static bool is_valid_extrusion_role(int value) +{ + return (static_cast(erNone) <= value) && (value <= static_cast(erMixed)); +} + +static void set_option_value(ConfigOptionFloats& option, size_t id, float value) +{ + if (id < option.values.size()) + option.values[id] = static_cast(value); +}; + +static float get_option_value(const ConfigOptionFloats& option, size_t id) +{ + return option.values.empty() ? 0.0f : + ((id < option.values.size()) ? static_cast(option.values[id]) : static_cast(option.values.back())); +} + +static float estimated_acceleration_distance(float initial_rate, float target_rate, float acceleration) +{ + return (acceleration == 0.0f) ? 0.0f : (sqr(target_rate) - sqr(initial_rate)) / (2.0f * acceleration); +} + +static float intersection_distance(float initial_rate, float final_rate, float acceleration, float distance) +{ + return (acceleration == 0.0f) ? 0.0f : (2.0f * acceleration * distance - sqr(initial_rate) + sqr(final_rate)) / (4.0f * acceleration); +} + +static float speed_from_distance(float initial_feedrate, float distance, float acceleration) +{ + // to avoid invalid negative numbers due to numerical errors + float value = std::max(0.0f, sqr(initial_feedrate) + 2.0f * acceleration * distance); + return ::sqrt(value); +} + +// Calculates the maximum allowable speed at this point when you must be able to reach target_velocity using the +// acceleration within the allotted distance. +static float max_allowable_speed(float acceleration, float target_velocity, float distance) +{ + // to avoid invalid negative numbers due to numerical errors + float value = std::max(0.0f, sqr(target_velocity) - 2.0f * acceleration * distance); + return std::sqrt(value); +} + +static float acceleration_time_from_distance(float initial_feedrate, float distance, float acceleration) +{ + return (acceleration != 0.0f) ? (speed_from_distance(initial_feedrate, distance, acceleration) - initial_feedrate) / acceleration : 0.0f; +} + +void GCodeProcessor::CachedPosition::reset() +{ + std::fill(position.begin(), position.end(), FLT_MAX); + feedrate = FLT_MAX; +} + +void GCodeProcessor::CpColor::reset() +{ + counter = 0; + current = 0; +} + +float GCodeProcessor::Trapezoid::acceleration_time(float entry_feedrate, float acceleration) const +{ + return acceleration_time_from_distance(entry_feedrate, accelerate_until, acceleration); +} + +float GCodeProcessor::Trapezoid::cruise_time() const +{ + return (cruise_feedrate != 0.0f) ? cruise_distance() / cruise_feedrate : 0.0f; +} + +float GCodeProcessor::Trapezoid::deceleration_time(float distance, float acceleration) const +{ + return acceleration_time_from_distance(cruise_feedrate, (distance - decelerate_after), -acceleration); +} + +float GCodeProcessor::Trapezoid::cruise_distance() const +{ + return decelerate_after - accelerate_until; +} + +void GCodeProcessor::TimeBlock::calculate_trapezoid() +{ + trapezoid.cruise_feedrate = feedrate_profile.cruise; + + float accelerate_distance = std::max(0.0f, estimated_acceleration_distance(feedrate_profile.entry, feedrate_profile.cruise, acceleration)); + float decelerate_distance = std::max(0.0f, estimated_acceleration_distance(feedrate_profile.cruise, feedrate_profile.exit, -acceleration)); + float cruise_distance = distance - accelerate_distance - decelerate_distance; + + // Not enough space to reach the nominal feedrate. + // This means no cruising, and we'll have to use intersection_distance() to calculate when to abort acceleration + // and start braking in order to reach the exit_feedrate exactly at the end of this block. + if (cruise_distance < 0.0f) { + accelerate_distance = std::clamp(intersection_distance(feedrate_profile.entry, feedrate_profile.exit, acceleration, distance), 0.0f, distance); + cruise_distance = 0.0f; + trapezoid.cruise_feedrate = speed_from_distance(feedrate_profile.entry, accelerate_distance, acceleration); + } + + trapezoid.accelerate_until = accelerate_distance; + trapezoid.decelerate_after = accelerate_distance + cruise_distance; +} + +float GCodeProcessor::TimeBlock::time() const +{ + return trapezoid.acceleration_time(feedrate_profile.entry, acceleration) + + trapezoid.cruise_time() + + trapezoid.deceleration_time(distance, acceleration); +} + +void GCodeProcessor::TimeMachine::State::reset() +{ + feedrate = 0.0f; + safe_feedrate = 0.0f; + axis_feedrate = { 0.0f, 0.0f, 0.0f, 0.0f }; + abs_axis_feedrate = { 0.0f, 0.0f, 0.0f, 0.0f }; +} + +void GCodeProcessor::TimeMachine::CustomGCodeTime::reset() +{ + needed = false; + cache = 0.0f; + times = std::vector>(); +} + +void GCodeProcessor::TimeMachine::reset() +{ + enabled = false; + acceleration = 0.0f; + max_acceleration = 0.0f; + extrude_factor_override_percentage = 1.0f; + time = 0.0f; + curr.reset(); + prev.reset(); + gcode_time.reset(); + blocks = std::vector(); + g1_times_cache = std::vector(); + std::fill(moves_time.begin(), moves_time.end(), 0.0f); + std::fill(roles_time.begin(), roles_time.end(), 0.0f); + layers_time = std::vector(); +} + +void GCodeProcessor::TimeMachine::simulate_st_synchronize(float additional_time) +{ + if (!enabled) + return; + + time += additional_time; + gcode_time.cache += additional_time; + calculate_time(); +} + +static void planner_forward_pass_kernel(GCodeProcessor::TimeBlock& prev, GCodeProcessor::TimeBlock& curr) +{ + // If the previous block is an acceleration block, but it is not long enough to complete the + // full speed change within the block, we need to adjust the entry speed accordingly. Entry + // speeds have already been reset, maximized, and reverse planned by reverse planner. + // If nominal length is true, max junction speed is guaranteed to be reached. No need to recheck. + if (!prev.flags.nominal_length) { + if (prev.feedrate_profile.entry < curr.feedrate_profile.entry) { + float entry_speed = std::min(curr.feedrate_profile.entry, max_allowable_speed(-prev.acceleration, prev.feedrate_profile.entry, prev.distance)); + + // Check for junction speed change + if (curr.feedrate_profile.entry != entry_speed) { + curr.feedrate_profile.entry = entry_speed; + curr.flags.recalculate = true; + } + } + } +} + +void planner_reverse_pass_kernel(GCodeProcessor::TimeBlock& curr, GCodeProcessor::TimeBlock& next) +{ + // If entry speed is already at the maximum entry speed, no need to recheck. Block is cruising. + // If not, block in state of acceleration or deceleration. Reset entry speed to maximum and + // check for maximum allowable speed reductions to ensure maximum possible planned speed. + if (curr.feedrate_profile.entry != curr.max_entry_speed) { + // If nominal length true, max junction speed is guaranteed to be reached. Only compute + // for max allowable speed if block is decelerating and nominal length is false. + if (!curr.flags.nominal_length && curr.max_entry_speed > next.feedrate_profile.entry) + curr.feedrate_profile.entry = std::min(curr.max_entry_speed, max_allowable_speed(-curr.acceleration, next.feedrate_profile.entry, curr.distance)); + else + curr.feedrate_profile.entry = curr.max_entry_speed; + + curr.flags.recalculate = true; + } +} + +static void recalculate_trapezoids(std::vector& blocks) +{ + GCodeProcessor::TimeBlock* curr = nullptr; + GCodeProcessor::TimeBlock* next = nullptr; + + for (size_t i = 0; i < blocks.size(); ++i) { + GCodeProcessor::TimeBlock& b = blocks[i]; + + curr = next; + next = &b; + + if (curr != nullptr) { + // Recalculate if current block entry or exit junction speed has changed. + if (curr->flags.recalculate || next->flags.recalculate) { + // NOTE: Entry and exit factors always > 0 by all previous logic operations. + GCodeProcessor::TimeBlock block = *curr; + block.feedrate_profile.exit = next->feedrate_profile.entry; + block.calculate_trapezoid(); + curr->trapezoid = block.trapezoid; + curr->flags.recalculate = false; // Reset current only to ensure next trapezoid is computed + } + } + } + + // Last/newest block in buffer. Always recalculated. + if (next != nullptr) { + GCodeProcessor::TimeBlock block = *next; + block.feedrate_profile.exit = next->safe_feedrate; + block.calculate_trapezoid(); + next->trapezoid = block.trapezoid; + next->flags.recalculate = false; + } +} + +void GCodeProcessor::TimeMachine::calculate_time(size_t keep_last_n_blocks) +{ + if (!enabled || blocks.size() < 2) + return; + + assert(keep_last_n_blocks <= blocks.size()); + + // forward_pass + for (size_t i = 0; i + 1 < blocks.size(); ++i) { + planner_forward_pass_kernel(blocks[i], blocks[i + 1]); + } + + // reverse_pass + for (int i = static_cast(blocks.size()) - 1; i > 0; --i) + planner_reverse_pass_kernel(blocks[i - 1], blocks[i]); + + recalculate_trapezoids(blocks); + + size_t n_blocks_process = blocks.size() - keep_last_n_blocks; + for (size_t i = 0; i < n_blocks_process; ++i) { + const TimeBlock& block = blocks[i]; + float block_time = block.time(); + time += block_time; + gcode_time.cache += block_time; + moves_time[static_cast(block.move_type)] += block_time; + roles_time[static_cast(block.role)] += block_time; + if (block.layer_id > 0) { + if (block.layer_id >= layers_time.size()) { + size_t curr_size = layers_time.size(); + layers_time.resize(block.layer_id); + for (size_t i = curr_size; i < layers_time.size(); ++i) { + layers_time[i] = 0.0f; + } + } + layers_time[block.layer_id - 1] += block_time; + } + g1_times_cache.push_back(time); + } + + if (keep_last_n_blocks) + blocks.erase(blocks.begin(), blocks.begin() + n_blocks_process); + else + blocks.clear(); +} + +void GCodeProcessor::TimeProcessor::reset() +{ + extruder_unloaded = true; + export_remaining_time_enabled = false; + machine_envelope_processing_enabled = false; + machine_limits = MachineEnvelopeConfig(); + filament_load_times = std::vector(); + filament_unload_times = std::vector(); + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + machines[i].reset(); + } + machines[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Normal)].enabled = true; +} + +void GCodeProcessor::TimeProcessor::post_process(const std::string& filename) +{ + boost::nowide::ifstream in(filename); + if (!in.good()) + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nCannot open file for reading.\n")); + + // temporary file to contain modified gcode + std::string out_path = filename + ".postprocess"; + FILE* out = boost::nowide::fopen(out_path.c_str(), "wb"); + if (out == nullptr) + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nCannot open file for writing.\n")); + + auto time_in_minutes = [](float time_in_seconds) { + return int(::roundf(time_in_seconds / 60.0f)); + }; + + auto format_line_M73 = [](const std::string& mask, int percent, int time) { + char line_M73[64]; + sprintf(line_M73, mask.c_str(), + std::to_string(percent).c_str(), + std::to_string(time).c_str()); + return std::string(line_M73); + }; + + GCodeReader parser; + std::string gcode_line; + size_t g1_lines_counter = 0; + // keeps track of last exported pair + std::array, static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count)> last_exported; + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + last_exported[i] = { 0, time_in_minutes(machines[i].time) }; + } + + // buffer line to export only when greater than 64K to reduce writing calls + std::string export_line; + + // replace placeholder lines with the proper final value + auto process_placeholders = [&](const std::string& gcode_line) { + // remove trailing '\n' + std::string line = gcode_line.substr(0, gcode_line.length() - 1); + + std::string ret; + + if (line == First_Line_M73_Placeholder_Tag || line == Last_Line_M73_Placeholder_Tag) { + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = machines[i]; + if (machine.enabled) { + ret += format_line_M73(machine.line_m73_mask.c_str(), + (line == First_Line_M73_Placeholder_Tag) ? 0 : 100, + (line == First_Line_M73_Placeholder_Tag) ? time_in_minutes(machines[i].time) : 0); + } + } + } + else if (line == Estimated_Printing_Time_Placeholder_Tag) { + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = machines[i]; + if (machine.enabled) { + char buf[128]; + sprintf(buf, "; estimated printing time (%s mode) = %s\n", + (static_cast(i) == PrintEstimatedTimeStatistics::ETimeMode::Normal) ? "normal" : "silent", + get_time_dhms(machine.time).c_str()); + ret += buf; + } + } + } + + return std::make_pair(!ret.empty(), ret.empty() ? gcode_line : ret); + }; + + // check for temporary lines + auto is_temporary_decoration = [](const std::string& gcode_line) { + // remove trailing '\n' + std::string line = gcode_line.substr(0, gcode_line.length() - 1); + if (line == "; " + Layer_Change_Tag) + return true; + else + return false; + }; + + // add lines M73 to exported gcode + auto process_line_G1 = [&]() { + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = machines[i]; + if (machine.enabled && g1_lines_counter < machine.g1_times_cache.size()) { + float elapsed_time = machine.g1_times_cache[g1_lines_counter]; + std::pair to_export = { int(::roundf(100.0f * elapsed_time / machine.time)), + time_in_minutes(machine.time - elapsed_time) }; + if (last_exported[i] != to_export) { + export_line += format_line_M73(machine.line_m73_mask.c_str(), + to_export.first, to_export.second); + last_exported[i] = to_export; + } + } + } + }; + + // helper function to write to disk + auto write_string = [&](const std::string& str) { + fwrite((const void*)export_line.c_str(), 1, export_line.length(), out); + if (ferror(out)) { + in.close(); + fclose(out); + boost::nowide::remove(out_path.c_str()); + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nIs the disk full?\n")); + } + export_line.clear(); + }; + + while (std::getline(in, gcode_line)) { + if (!in.good()) { + fclose(out); + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nError while reading from file.\n")); + } + + gcode_line += "\n"; + // replace placeholder lines + auto [processed, result] = process_placeholders(gcode_line); + gcode_line = result; + if (!processed) { + // remove temporary lines + if (is_temporary_decoration(gcode_line)) + continue; + + // add lines M73 where needed + parser.parse_line(gcode_line, + [&](GCodeReader& reader, const GCodeReader::GCodeLine& line) { + if (line.cmd_is("G1")) { + process_line_G1(); + ++g1_lines_counter; + } + }); + } + + export_line += gcode_line; + if (export_line.length() > 65535) + write_string(export_line); + } + + if (!export_line.empty()) + write_string(export_line); + + fclose(out); + in.close(); + + if (rename_file(out_path, filename)) + throw Slic3r::RuntimeError(std::string("Failed to rename the output G-code file from ") + out_path + " to " + filename + '\n' + + "Is " + out_path + " locked?" + '\n'); +} + +const std::vector> GCodeProcessor::Producers = { + { EProducer::PrusaSlicer, "PrusaSlicer" }, + { EProducer::Cura, "Cura_SteamEngine" }, + { EProducer::Simplify3D, "Simplify3D" }, + { EProducer::CraftWare, "CraftWare" }, + { EProducer::ideaMaker, "ideaMaker" } +}; + +unsigned int GCodeProcessor::s_result_id = 0; + +GCodeProcessor::GCodeProcessor() +{ + reset(); + m_time_processor.machines[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Normal)].line_m73_mask = "M73 P%s R%s\n"; + m_time_processor.machines[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Stealth)].line_m73_mask = "M73 Q%s S%s\n"; +} + +void GCodeProcessor::apply_config(const PrintConfig& config) +{ + m_parser.apply_config(config); + + m_flavor = config.gcode_flavor; + + size_t extruders_count = config.nozzle_diameter.values.size(); + + m_extruder_offsets.resize(extruders_count); + for (size_t i = 0; i < extruders_count; ++i) { + Vec2f offset = config.extruder_offset.get_at(i).cast(); + m_extruder_offsets[i] = { offset(0), offset(1), 0.0f }; + } + + m_extruder_colors.resize(extruders_count); + for (size_t i = 0; i < extruders_count; ++i) { + m_extruder_colors[i] = static_cast(i); + } + + m_filament_diameters.resize(config.filament_diameter.values.size()); + for (size_t i = 0; i < config.filament_diameter.values.size(); ++i) { + m_filament_diameters[i] = static_cast(config.filament_diameter.values[i]); + } + + if (config.machine_limits_usage.value != MachineLimitsUsage::Ignore) + m_time_processor.machine_limits = reinterpret_cast(config); + + // Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful. + // As of now the fields are shown at the UI dialog in the same combo box as the ramming values, so they + // are considered to be active for the single extruder multi-material printers only. + m_time_processor.filament_load_times.resize(config.filament_load_time.values.size()); + for (size_t i = 0; i < config.filament_load_time.values.size(); ++i) { + m_time_processor.filament_load_times[i] = static_cast(config.filament_load_time.values[i]); + } + m_time_processor.filament_unload_times.resize(config.filament_unload_time.values.size()); + for (size_t i = 0; i < config.filament_unload_time.values.size(); ++i) { + m_time_processor.filament_unload_times[i] = static_cast(config.filament_unload_time.values[i]); + } + + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + float max_acceleration = get_option_value(m_time_processor.machine_limits.machine_max_acceleration_extruding, i); + m_time_processor.machines[i].max_acceleration = max_acceleration; + m_time_processor.machines[i].acceleration = (max_acceleration > 0.0f) ? max_acceleration : DEFAULT_ACCELERATION; + } + + m_time_processor.export_remaining_time_enabled = config.remaining_times.value; +} + +void GCodeProcessor::apply_config(const DynamicPrintConfig& config) +{ + m_parser.apply_config(config); + + const ConfigOptionEnum* gcode_flavor = config.option>("gcode_flavor"); + if (gcode_flavor != nullptr) + m_flavor = gcode_flavor->value; + + const ConfigOptionPoints* bed_shape = config.option("bed_shape"); + if (bed_shape != nullptr) + m_result.bed_shape = bed_shape->values; + + const ConfigOptionString* printer_settings_id = config.option("printer_settings_id"); + if (printer_settings_id != nullptr) + m_result.printer_settings_id = printer_settings_id->value; + + const ConfigOptionFloats* filament_diameters = config.option("filament_diameter"); + if (filament_diameters != nullptr) { + for (double diam : filament_diameters->values) { + m_filament_diameters.push_back(static_cast(diam)); + } + } + + const ConfigOptionPoints* extruder_offset = config.option("extruder_offset"); + if (extruder_offset != nullptr) { + m_extruder_offsets.resize(extruder_offset->values.size()); + for (size_t i = 0; i < extruder_offset->values.size(); ++i) { + Vec2f offset = extruder_offset->values[i].cast(); + m_extruder_offsets[i] = { offset(0), offset(1), 0.0f }; + } + } + + // ensure at least one (default) color is defined + std::string default_color = "#FF8000"; + m_result.extruder_colors = std::vector(1, default_color); + const ConfigOptionStrings* extruder_colour = config.option("extruder_colour"); + if (extruder_colour != nullptr) { + // takes colors from config + m_result.extruder_colors = extruder_colour->values; + // try to replace missing values with filament colors + const ConfigOptionStrings* filament_colour = config.option("filament_colour"); + if (filament_colour != nullptr && filament_colour->values.size() == m_result.extruder_colors.size()) { + for (size_t i = 0; i < m_result.extruder_colors.size(); ++i) { + if (m_result.extruder_colors[i].empty()) + m_result.extruder_colors[i] = filament_colour->values[i]; + } + } + } + + // replace missing values with default + for (size_t i = 0; i < m_result.extruder_colors.size(); ++i) { + if (m_result.extruder_colors[i].empty()) + m_result.extruder_colors[i] = default_color; + } + + m_extruder_colors.resize(m_result.extruder_colors.size()); + for (size_t i = 0; i < m_result.extruder_colors.size(); ++i) { + m_extruder_colors[i] = static_cast(i); + } + + const ConfigOptionFloats* filament_load_time = config.option("filament_load_time"); + if (filament_load_time != nullptr) { + m_time_processor.filament_load_times.resize(filament_load_time->values.size()); + for (size_t i = 0; i < filament_load_time->values.size(); ++i) { + m_time_processor.filament_load_times[i] = static_cast(filament_load_time->values[i]); + } + } + + const ConfigOptionFloats* filament_unload_time = config.option("filament_unload_time"); + if (filament_unload_time != nullptr) { + m_time_processor.filament_unload_times.resize(filament_unload_time->values.size()); + for (size_t i = 0; i < filament_unload_time->values.size(); ++i) { + m_time_processor.filament_unload_times[i] = static_cast(filament_unload_time->values[i]); + } + } + + const ConfigOptionFloats* machine_max_acceleration_x = config.option("machine_max_acceleration_x"); + if (machine_max_acceleration_x != nullptr) + m_time_processor.machine_limits.machine_max_acceleration_x.values = machine_max_acceleration_x->values; + + const ConfigOptionFloats* machine_max_acceleration_y = config.option("machine_max_acceleration_y"); + if (machine_max_acceleration_y != nullptr) + m_time_processor.machine_limits.machine_max_acceleration_y.values = machine_max_acceleration_y->values; + + const ConfigOptionFloats* machine_max_acceleration_z = config.option("machine_max_acceleration_z"); + if (machine_max_acceleration_z != nullptr) + m_time_processor.machine_limits.machine_max_acceleration_z.values = machine_max_acceleration_z->values; + + const ConfigOptionFloats* machine_max_acceleration_e = config.option("machine_max_acceleration_e"); + if (machine_max_acceleration_e != nullptr) + m_time_processor.machine_limits.machine_max_acceleration_e.values = machine_max_acceleration_e->values; + + const ConfigOptionFloats* machine_max_feedrate_x = config.option("machine_max_feedrate_x"); + if (machine_max_feedrate_x != nullptr) + m_time_processor.machine_limits.machine_max_feedrate_x.values = machine_max_feedrate_x->values; + + const ConfigOptionFloats* machine_max_feedrate_y = config.option("machine_max_feedrate_y"); + if (machine_max_feedrate_y != nullptr) + m_time_processor.machine_limits.machine_max_feedrate_y.values = machine_max_feedrate_y->values; + + const ConfigOptionFloats* machine_max_feedrate_z = config.option("machine_max_feedrate_z"); + if (machine_max_feedrate_z != nullptr) + m_time_processor.machine_limits.machine_max_feedrate_z.values = machine_max_feedrate_z->values; + + const ConfigOptionFloats* machine_max_feedrate_e = config.option("machine_max_feedrate_e"); + if (machine_max_feedrate_e != nullptr) + m_time_processor.machine_limits.machine_max_feedrate_e.values = machine_max_feedrate_e->values; + + const ConfigOptionFloats* machine_max_jerk_x = config.option("machine_max_jerk_x"); + if (machine_max_jerk_x != nullptr) + m_time_processor.machine_limits.machine_max_jerk_x.values = machine_max_jerk_x->values; + + const ConfigOptionFloats* machine_max_jerk_y = config.option("machine_max_jerk_y"); + if (machine_max_jerk_y != nullptr) + m_time_processor.machine_limits.machine_max_jerk_y.values = machine_max_jerk_y->values; + + const ConfigOptionFloats* machine_max_jerk_z = config.option("machine_max_jerkz"); + if (machine_max_jerk_z != nullptr) + m_time_processor.machine_limits.machine_max_jerk_z.values = machine_max_jerk_z->values; + + const ConfigOptionFloats* machine_max_jerk_e = config.option("machine_max_jerk_e"); + if (machine_max_jerk_e != nullptr) + m_time_processor.machine_limits.machine_max_jerk_e.values = machine_max_jerk_e->values; + + const ConfigOptionFloats* machine_max_acceleration_extruding = config.option("machine_max_acceleration_extruding"); + if (machine_max_acceleration_extruding != nullptr) + m_time_processor.machine_limits.machine_max_acceleration_extruding.values = machine_max_acceleration_extruding->values; + + const ConfigOptionFloats* machine_max_acceleration_retracting = config.option("machine_max_acceleration_retracting"); + if (machine_max_acceleration_retracting != nullptr) + m_time_processor.machine_limits.machine_max_acceleration_retracting.values = machine_max_acceleration_retracting->values; + + const ConfigOptionFloats* machine_min_extruding_rate = config.option("machine_min_extruding_rate"); + if (machine_min_extruding_rate != nullptr) + m_time_processor.machine_limits.machine_min_extruding_rate.values = machine_min_extruding_rate->values; + + const ConfigOptionFloats* machine_min_travel_rate = config.option("machine_min_travel_rate"); + if (machine_min_travel_rate != nullptr) + m_time_processor.machine_limits.machine_min_travel_rate.values = machine_min_travel_rate->values; + + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + float max_acceleration = get_option_value(m_time_processor.machine_limits.machine_max_acceleration_extruding, i); + m_time_processor.machines[i].max_acceleration = max_acceleration; + m_time_processor.machines[i].acceleration = (max_acceleration > 0.0f) ? max_acceleration : DEFAULT_ACCELERATION; + } +} + +void GCodeProcessor::enable_stealth_time_estimator(bool enabled) +{ + m_time_processor.machines[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Stealth)].enabled = enabled; +} + +void GCodeProcessor::reset() +{ + static const size_t Min_Extruder_Count = 5; + + m_units = EUnits::Millimeters; + m_global_positioning_type = EPositioningType::Absolute; + m_e_local_positioning_type = EPositioningType::Absolute; + m_extruder_offsets = std::vector(Min_Extruder_Count, Vec3f::Zero()); + m_flavor = gcfRepRapSprinter; + + m_start_position = { 0.0f, 0.0f, 0.0f, 0.0f }; + m_end_position = { 0.0f, 0.0f, 0.0f, 0.0f }; + m_origin = { 0.0f, 0.0f, 0.0f, 0.0f }; + m_cached_position.reset(); + + m_feedrate = 0.0f; + m_width = 0.0f; + m_height = 0.0f; + m_mm3_per_mm = 0.0f; + m_fan_speed = 0.0f; + + m_extrusion_role = erNone; + m_extruder_id = 0; + m_extruder_colors.resize(Min_Extruder_Count); + for (size_t i = 0; i < Min_Extruder_Count; ++i) { + m_extruder_colors[i] = static_cast(i); + } + + m_filament_diameters = std::vector(Min_Extruder_Count, 1.75f); + m_extruded_last_z = 0.0f; + m_layer_id = 0; + m_cp_color.reset(); + + m_producer = EProducer::Unknown; + m_producers_enabled = false; + + m_time_processor.reset(); + + m_result.reset(); + m_result.id = ++s_result_id; + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + m_mm3_per_mm_compare.reset(); + m_height_compare.reset(); + m_width_compare.reset(); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING +} + +void GCodeProcessor::process_file(const std::string& filename, std::function cancel_callback) +{ + auto last_cancel_callback_time = std::chrono::high_resolution_clock::now(); + +#if ENABLE_GCODE_VIEWER_STATISTICS + auto start_time = std::chrono::high_resolution_clock::now(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + // pre-processing + // parse the gcode file to detect its producer + if (m_producers_enabled) { + m_parser.parse_file(filename, [this](GCodeReader& reader, const GCodeReader::GCodeLine& line) { + std::string cmd = line.cmd(); + if (cmd.length() == 0) { + std::string comment = line.comment(); + if (comment.length() > 1 && detect_producer(comment)) + m_parser.quit_parsing_file(); + } + }); + + // if the gcode was produced by PrusaSlicer, + // extract the config from it + if (m_producer == EProducer::PrusaSlicer) { + DynamicPrintConfig config; + config.apply(FullPrintConfig::defaults()); + config.load_from_gcode_file(filename); + apply_config(config); + } + } + + // process gcode + m_result.id = ++s_result_id; + // 1st move must be a dummy move + m_result.moves.emplace_back(MoveVertex()); + m_parser.parse_file(filename, [this, cancel_callback, &last_cancel_callback_time](GCodeReader& reader, const GCodeReader::GCodeLine& line) { + if (cancel_callback != nullptr) { + // call the cancel callback every 100 ms + auto curr_time = std::chrono::high_resolution_clock::now(); + if (std::chrono::duration_cast(curr_time - last_cancel_callback_time).count() > 100) { + cancel_callback(); + last_cancel_callback_time = curr_time; + } + } + process_gcode_line(line); + }); + + // process the time blocks + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + TimeMachine& machine = m_time_processor.machines[i]; + TimeMachine::CustomGCodeTime& gcode_time = machine.gcode_time; + machine.calculate_time(); + if (gcode_time.needed && gcode_time.cache != 0.0f) + gcode_time.times.push_back({ CustomGCode::ColorChange, gcode_time.cache }); + } + + update_estimated_times_stats(); + + // post-process to add M73 lines into the gcode + if (m_time_processor.export_remaining_time_enabled) + m_time_processor.post_process(filename); + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + std::cout << "\n"; + m_mm3_per_mm_compare.output(); + m_height_compare.output(); + m_width_compare.output(); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + +#if ENABLE_GCODE_VIEWER_STATISTICS + m_result.time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start_time).count(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS +} + +float GCodeProcessor::get_time(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + return (mode < PrintEstimatedTimeStatistics::ETimeMode::Count) ? m_time_processor.machines[static_cast(mode)].time : 0.0f; +} + +std::string GCodeProcessor::get_time_dhm(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + return (mode < PrintEstimatedTimeStatistics::ETimeMode::Count) ? short_time(get_time_dhms(m_time_processor.machines[static_cast(mode)].time)) : std::string("N/A"); +} + +std::vector>> GCodeProcessor::get_custom_gcode_times(PrintEstimatedTimeStatistics::ETimeMode mode, bool include_remaining) const +{ + std::vector>> ret; + if (mode < PrintEstimatedTimeStatistics::ETimeMode::Count) { + const TimeMachine& machine = m_time_processor.machines[static_cast(mode)]; + float total_time = 0.0f; + for (const auto& [type, time] : machine.gcode_time.times) { + float remaining = include_remaining ? machine.time - total_time : 0.0f; + ret.push_back({ type, { time, remaining } }); + total_time += time; + } + } + return ret; +} + +std::vector> GCodeProcessor::get_moves_time(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + std::vector> ret; + if (mode < PrintEstimatedTimeStatistics::ETimeMode::Count) { + for (size_t i = 0; i < m_time_processor.machines[static_cast(mode)].moves_time.size(); ++i) { + float time = m_time_processor.machines[static_cast(mode)].moves_time[i]; + if (time > 0.0f) + ret.push_back({ static_cast(i), time }); + } + } + return ret; +} + +std::vector> GCodeProcessor::get_roles_time(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + std::vector> ret; + if (mode < PrintEstimatedTimeStatistics::ETimeMode::Count) { + for (size_t i = 0; i < m_time_processor.machines[static_cast(mode)].roles_time.size(); ++i) { + float time = m_time_processor.machines[static_cast(mode)].roles_time[i]; + if (time > 0.0f) + ret.push_back({ static_cast(i), time }); + } + } + return ret; +} + +std::vector GCodeProcessor::get_layers_time(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + return (mode < PrintEstimatedTimeStatistics::ETimeMode::Count) ? + m_time_processor.machines[static_cast(mode)].layers_time : + std::vector(); +} + +void GCodeProcessor::process_gcode_line(const GCodeReader::GCodeLine& line) +{ +/* std::cout << line.raw() << std::endl; */ + + // update start position + m_start_position = m_end_position; + + std::string cmd = line.cmd(); + if (cmd.length() > 1) { + // process command lines + switch (::toupper(cmd[0])) + { + case 'G': + { + switch (::atoi(&cmd[1])) + { + case 0: { process_G0(line); break; } // Move + case 1: { process_G1(line); break; } // Move + case 10: { process_G10(line); break; } // Retract + case 11: { process_G11(line); break; } // Unretract + case 20: { process_G20(line); break; } // Set Units to Inches + case 21: { process_G21(line); break; } // Set Units to Millimeters + case 22: { process_G22(line); break; } // Firmware controlled retract + case 23: { process_G23(line); break; } // Firmware controlled unretract + case 90: { process_G90(line); break; } // Set to Absolute Positioning + case 91: { process_G91(line); break; } // Set to Relative Positioning + case 92: { process_G92(line); break; } // Set Position + default: { break; } + } + break; + } + case 'M': + { + switch (::atoi(&cmd[1])) + { + case 1: { process_M1(line); break; } // Sleep or Conditional stop + case 82: { process_M82(line); break; } // Set extruder to absolute mode + case 83: { process_M83(line); break; } // Set extruder to relative mode + case 106: { process_M106(line); break; } // Set fan speed + case 107: { process_M107(line); break; } // Disable fan + case 108: { process_M108(line); break; } // Set tool (Sailfish) + case 132: { process_M132(line); break; } // Recall stored home offsets + case 135: { process_M135(line); break; } // Set tool (MakerWare) + case 201: { process_M201(line); break; } // Set max printing acceleration + case 203: { process_M203(line); break; } // Set maximum feedrate + case 204: { process_M204(line); break; } // Set default acceleration + case 205: { process_M205(line); break; } // Advanced settings + case 221: { process_M221(line); break; } // Set extrude factor override percentage + case 401: { process_M401(line); break; } // Repetier: Store x, y and z position + case 402: { process_M402(line); break; } // Repetier: Go to stored position + case 566: { process_M566(line); break; } // Set allowable instantaneous speed change + case 702: { process_M702(line); break; } // Unload the current filament into the MK3 MMU2 unit at the end of print. + default: { break; } + } + break; + } + case 'T': + { + process_T(line); // Select Tool + break; + } + default: { break; } + } + } + else { + std::string comment = line.comment(); + if (comment.length() > 1) + // process tags embedded into comments + process_tags(comment); + } +} + +void GCodeProcessor::process_tags(const std::string& comment) +{ + // producers tags + if (m_producers_enabled) { + if (m_producer != EProducer::Unknown) { + if (process_producers_tags(comment)) + return; + } + } + + // extrusion role tag + size_t pos = comment.find(Extrusion_Role_Tag); + if (pos != comment.npos) { + m_extrusion_role = ExtrusionEntity::string_to_role(comment.substr(pos + Extrusion_Role_Tag.length())); + return; + } + + if (!m_producers_enabled || m_producer == EProducer::PrusaSlicer) { + // height tag + pos = comment.find(Height_Tag); + if (pos != comment.npos) { + try { + m_height = std::stof(comment.substr(pos + Height_Tag.length())); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Height (" << comment << ")."; + } + return; + } + } + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + // width tag + pos = comment.find(Width_Tag); + if (pos != comment.npos) { + try { + m_width_compare.last_tag_value = std::stof(comment.substr(pos + Width_Tag.length())); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Width (" << comment << ")."; + } + return; + } +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + // color change tag + pos = comment.find(Color_Change_Tag); + if (pos != comment.npos) { + pos = comment.find_last_of(",T"); + try { + unsigned char extruder_id = (pos == comment.npos) ? 0 : static_cast(std::stoi(comment.substr(pos + 1))); + + m_extruder_colors[extruder_id] = static_cast(m_extruder_offsets.size()) + m_cp_color.counter; // color_change position in list of color for preview + ++m_cp_color.counter; + if (m_cp_color.counter == UCHAR_MAX) + m_cp_color.counter = 0; + + if (m_extruder_id == extruder_id) { + m_cp_color.current = m_extruder_colors[extruder_id]; + store_move_vertex(EMoveType::Color_change); + } + + process_custom_gcode_time(CustomGCode::ColorChange); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Color_Change (" << comment << ")."; + } + + return; + } + + // pause print tag + pos = comment.find(Pause_Print_Tag); + if (pos != comment.npos) { + store_move_vertex(EMoveType::Pause_Print); + process_custom_gcode_time(CustomGCode::PausePrint); + return; + } + + // custom code tag + pos = comment.find(Custom_Code_Tag); + if (pos != comment.npos) { + store_move_vertex(EMoveType::Custom_GCode); + return; + } + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + // mm3_per_mm print tag + pos = comment.find(Mm3_Per_Mm_Tag); + if (pos != comment.npos) { + try { + m_mm3_per_mm_compare.last_tag_value = std::stof(comment.substr(pos + Mm3_Per_Mm_Tag.length())); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Mm3_Per_Mm (" << comment << ")."; + } + return; + } +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + // layer change tag + pos = comment.find(Layer_Change_Tag); + if (pos != comment.npos) { + ++m_layer_id; + return; + } +} + +bool GCodeProcessor::process_producers_tags(const std::string& comment) +{ + switch (m_producer) + { + case EProducer::PrusaSlicer: { return process_prusaslicer_tags(comment); } + case EProducer::Cura: { return process_cura_tags(comment); } + case EProducer::Simplify3D: { return process_simplify3d_tags(comment); } + case EProducer::CraftWare: { return process_craftware_tags(comment); } + case EProducer::ideaMaker: { return process_ideamaker_tags(comment); } + default: { return false; } + } +} + +bool GCodeProcessor::process_prusaslicer_tags(const std::string& comment) +{ + return false; +} + +bool GCodeProcessor::process_cura_tags(const std::string& comment) +{ + // TYPE -> extrusion role + std::string tag = "TYPE:"; + size_t pos = comment.find(tag); + if (pos != comment.npos) { + std::string type = comment.substr(pos + tag.length()); + if (type == "SKIRT") + m_extrusion_role = erSkirt; + else if (type == "WALL-OUTER") + m_extrusion_role = erExternalPerimeter; + else if (type == "WALL-INNER") + m_extrusion_role = erPerimeter; + else if (type == "SKIN") + m_extrusion_role = erSolidInfill; + else if (type == "FILL") + m_extrusion_role = erInternalInfill; + else if (type == "SUPPORT") + m_extrusion_role = erSupportMaterial; + else if (type == "SUPPORT-INTERFACE") + m_extrusion_role = erSupportMaterialInterface; + else if (type == "PRIME-TOWER") + m_extrusion_role = erWipeTower; + else { + m_extrusion_role = erNone; + BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type; + } + + return true; + } + + // flavor + tag = "FLAVOR:"; + pos = comment.find(tag); + if (pos != comment.npos) { + std::string flavor = comment.substr(pos + tag.length()); + if (flavor == "BFB") + m_flavor = gcfMarlin; // << ??????????????????????? + else if (flavor == "Mach3") + m_flavor = gcfMach3; + else if (flavor == "Makerbot") + m_flavor = gcfMakerWare; + else if (flavor == "UltiGCode") + m_flavor = gcfMarlin; // << ??????????????????????? + else if (flavor == "Marlin(Volumetric)") + m_flavor = gcfMarlin; // << ??????????????????????? + else if (flavor == "Griffin") + m_flavor = gcfMarlin; // << ??????????????????????? + else if (flavor == "Repetier") + m_flavor = gcfRepetier; + else if (flavor == "RepRap") + m_flavor = gcfRepRapFirmware; + else if (flavor == "Marlin") + m_flavor = gcfMarlin; + else + BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown flavor: " << flavor; + + return true; + } + + return false; +} + +bool GCodeProcessor::process_simplify3d_tags(const std::string& comment) +{ + // extrusion roles + + // ; skirt + size_t pos = comment.find(" skirt"); + if (pos == 0) { + m_extrusion_role = erSkirt; + return true; + } + + // ; outer perimeter + pos = comment.find(" outer perimeter"); + if (pos == 0) { + m_extrusion_role = erExternalPerimeter; + return true; + } + + // ; inner perimeter + pos = comment.find(" inner perimeter"); + if (pos == 0) { + m_extrusion_role = erPerimeter; + return true; + } + + // ; gap fill + pos = comment.find(" gap fill"); + if (pos == 0) { + m_extrusion_role = erGapFill; + return true; + } + + // ; infill + pos = comment.find(" infill"); + if (pos == 0) { + m_extrusion_role = erInternalInfill; + return true; + } + + // ; solid layer + pos = comment.find(" solid layer"); + if (pos == 0) { + m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + return true; + } + + // ; bridge + pos = comment.find(" bridge"); + if (pos == 0) { + m_extrusion_role = erBridgeInfill; + return true; + } + + // ; support + pos = comment.find(" support"); + if (pos == 0) { + m_extrusion_role = erSupportMaterial; + return true; + } + + // ; prime pillar + pos = comment.find(" prime pillar"); + if (pos == 0) { + m_extrusion_role = erWipeTower; + return true; + } + + // ; ooze shield + pos = comment.find(" ooze shield"); + if (pos == 0) { + m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + return true; + } + + // ; raft + pos = comment.find(" raft"); + if (pos == 0) { + m_extrusion_role = erSkirt; + return true; + } + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + // geometry + + // ; tool + std::string tag = " tool"; + pos = comment.find(tag); + if (pos == 0) { + std::string data = comment.substr(pos + tag.length()); + std::string h_tag = "H"; + size_t h_start = data.find(h_tag); + size_t h_end = data.find_first_of(' ', h_start); + std::string w_tag = "W"; + size_t w_start = data.find(w_tag); + size_t w_end = data.find_first_of(' ', w_start); + if (h_start != data.npos) { + try { + m_height_compare.last_tag_value = std::stof(data.substr(h_start + 1, (h_end != data.npos) ? h_end - h_start - 1 : h_end)); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Height (" << comment << ")."; + } + } + if (w_start != data.npos) { + try { + m_width_compare.last_tag_value = std::stof(data.substr(w_start + 1, (w_end != data.npos) ? w_end - w_start - 1 : w_end)); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Width (" << comment << ")."; + } + } + + return true; + } +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + return false; +} + +bool GCodeProcessor::process_craftware_tags(const std::string& comment) +{ + // segType -> extrusion role + std::string tag = "segType:"; + size_t pos = comment.find(tag); + if (pos != comment.npos) { + std::string type = comment.substr(pos + tag.length()); + if (type == "Skirt") + m_extrusion_role = erSkirt; + else if (type == "Perimeter") + m_extrusion_role = erExternalPerimeter; + else if (type == "HShell") + m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + else if (type == "InnerHair") + m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + else if (type == "Loop") + m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + else if (type == "Infill") + m_extrusion_role = erInternalInfill; + else if (type == "Raft") + m_extrusion_role = erSkirt; + else if (type == "Support") + m_extrusion_role = erSupportMaterial; + else if (type == "SupportTouch") + m_extrusion_role = erSupportMaterial; + else if (type == "SoftSupport") + m_extrusion_role = erSupportMaterialInterface; + else if (type == "Pillar") + m_extrusion_role = erWipeTower; + else { + m_extrusion_role = erNone; + BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type; + } + + return true; + } + + return false; +} + +bool GCodeProcessor::process_ideamaker_tags(const std::string& comment) +{ + // TYPE -> extrusion role + std::string tag = "TYPE:"; + size_t pos = comment.find(tag); + if (pos != comment.npos) { + std::string type = comment.substr(pos + tag.length()); + if (type == "RAFT") + m_extrusion_role = erSkirt; + else if (type == "WALL-OUTER") + m_extrusion_role = erExternalPerimeter; + else if (type == "WALL-INNER") + m_extrusion_role = erPerimeter; + else if (type == "SOLID-FILL") + m_extrusion_role = erSolidInfill; + else if (type == "FILL") + m_extrusion_role = erInternalInfill; + else if (type == "BRIDGE") + m_extrusion_role = erBridgeInfill; + else if (type == "SUPPORT") + m_extrusion_role = erSupportMaterial; + else { + m_extrusion_role = erNone; + BOOST_LOG_TRIVIAL(warning) << "GCodeProcessor found unknown extrusion role: " << type; + } + return true; + } + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + // geometry + + // width + tag = "WIDTH:"; + pos = comment.find(tag); + if (pos != comment.npos) { + try { + m_width_compare.last_tag_value = std::stof(comment.substr(pos + tag.length())); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Width (" << comment << ")."; + } + return true; + } + + // height + tag = "HEIGHT:"; + pos = comment.find(tag); + if (pos != comment.npos) { + try { + m_height_compare.last_tag_value = std::stof(comment.substr(pos + tag.length())); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid value for Height (" << comment << ")."; + } + return true; + } +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + return false; +} + +bool GCodeProcessor::detect_producer(const std::string& comment) +{ + for (const auto& [id, search_string] : Producers) { + size_t pos = comment.find(search_string); + if (pos != comment.npos) { + m_producer = id; + BOOST_LOG_TRIVIAL(info) << "Detected gcode producer: " << search_string; + return true; + } + } + return false; +} + +void GCodeProcessor::process_G0(const GCodeReader::GCodeLine& line) +{ + process_G1(line); +} + +void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) +{ + auto absolute_position = [this](Axis axis, const GCodeReader::GCodeLine& lineG1) + { + bool is_relative = (m_global_positioning_type == EPositioningType::Relative); + if (axis == E) + is_relative |= (m_e_local_positioning_type == EPositioningType::Relative); + + if (lineG1.has(Slic3r::Axis(axis))) { + float lengthsScaleFactor = (m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f; + float ret = lineG1.value(Slic3r::Axis(axis)) * lengthsScaleFactor; + return is_relative ? m_start_position[axis] + ret : m_origin[axis] + ret; + } + else + return m_start_position[axis]; + }; + + auto move_type = [this](const AxisCoords& delta_pos) { + EMoveType type = EMoveType::Noop; + + if (delta_pos[E] < 0.0f) + type = (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f) ? EMoveType::Travel : EMoveType::Retract; + else if (delta_pos[E] > 0.0f) { + if (delta_pos[X] == 0.0f && delta_pos[Y] == 0.0f) + type = (delta_pos[Z] == 0.0f) ? EMoveType::Unretract : EMoveType::Travel; + else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f) + type = EMoveType::Extrude; + } + else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f) + type = EMoveType::Travel; + + return type; + }; + + // enable processing of lines M201/M203/M204/M205 + m_time_processor.machine_envelope_processing_enabled = true; + + // updates axes positions from line + for (unsigned char a = X; a <= E; ++a) { + m_end_position[a] = absolute_position((Axis)a, line); + } + + // updates feedrate from line, if present + if (line.has_f()) + m_feedrate = line.f() * MMMIN_TO_MMSEC; + + // calculates movement deltas + float max_abs_delta = 0.0f; + AxisCoords delta_pos; + for (unsigned char a = X; a <= E; ++a) { + delta_pos[a] = m_end_position[a] - m_start_position[a]; + max_abs_delta = std::max(max_abs_delta, std::abs(delta_pos[a])); + } + + // no displacement, return + if (max_abs_delta == 0.0f) + return; + + EMoveType type = move_type(delta_pos); + if (type == EMoveType::Extrude && m_end_position[Z] == 0.0f) + type = EMoveType::Travel; + + if (type == EMoveType::Extrude) { + float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z])); + float filament_diameter = (static_cast(m_extruder_id) < m_filament_diameters.size()) ? m_filament_diameters[m_extruder_id] : m_filament_diameters.back(); + float filament_radius = 0.5f * filament_diameter; + float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); + float volume_extruded_filament = area_filament_cross_section * delta_pos[E]; + float area_toolpath_cross_section = volume_extruded_filament / delta_xyz; + + // volume extruded filament / tool displacement = area toolpath cross section + m_mm3_per_mm = area_toolpath_cross_section; +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + m_mm3_per_mm_compare.update(area_toolpath_cross_section, m_extrusion_role); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + if ((m_producers_enabled && m_producer != EProducer::PrusaSlicer) || m_height == 0.0f) { + if (m_end_position[Z] > m_extruded_last_z + EPSILON) { + m_height = m_end_position[Z] - m_extruded_last_z; +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + m_height_compare.update(m_height, m_extrusion_role); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + m_extruded_last_z = m_end_position[Z]; + } + } + + if (m_extrusion_role == erExternalPerimeter) + // cross section: rectangle + m_width = delta_pos[E] * static_cast(M_PI * sqr(1.05 * filament_radius)) / (delta_xyz * m_height); + else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erNone) + // cross section: circle + m_width = static_cast(m_filament_diameters[m_extruder_id]) * std::sqrt(delta_pos[E] / delta_xyz); + else + // cross section: rectangle + 2 semicircles + m_width = delta_pos[E] * static_cast(M_PI * sqr(filament_radius)) / (delta_xyz * m_height) + static_cast(1.0 - 0.25 * M_PI) * m_height; + + // clamp width to avoid artifacts which may arise from wrong values of m_height + m_width = std::min(m_width, 1.0f); +// m_width = std::min(m_width, 4.0f * m_height); + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + m_width_compare.update(m_width, m_extrusion_role); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + } + + if (type == EMoveType::Extrude && (m_extrusion_role == erCustom || m_width == 0.0f || m_height == 0.0f)) + type = EMoveType::Travel; + + // time estimate section + auto move_length = [](const AxisCoords& delta_pos) { + float sq_xyz_length = sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z]); + return (sq_xyz_length > 0.0f) ? std::sqrt(sq_xyz_length) : std::abs(delta_pos[E]); + }; + + auto is_extrusion_only_move = [](const AxisCoords& delta_pos) { + return delta_pos[X] == 0.0f && delta_pos[Y] == 0.0f && delta_pos[Z] == 0.0f && delta_pos[E] != 0.0f; + }; + + float distance = move_length(delta_pos); + assert(distance != 0.0f); + float inv_distance = 1.0f / distance; + + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + TimeMachine& machine = m_time_processor.machines[i]; + if (!machine.enabled) + continue; + + TimeMachine::State& curr = machine.curr; + TimeMachine::State& prev = machine.prev; + std::vector& blocks = machine.blocks; + + curr.feedrate = (delta_pos[E] == 0.0f) ? + minimum_travel_feedrate(static_cast(i), m_feedrate) : + minimum_feedrate(static_cast(i), m_feedrate); + + TimeBlock block; + block.move_type = type; + block.role = m_extrusion_role; + block.distance = distance; + block.layer_id = m_layer_id; + + // calculates block cruise feedrate + float min_feedrate_factor = 1.0f; + for (unsigned char a = X; a <= E; ++a) { + curr.axis_feedrate[a] = curr.feedrate * delta_pos[a] * inv_distance; + if (a == E) + curr.axis_feedrate[a] *= machine.extrude_factor_override_percentage; + + curr.abs_axis_feedrate[a] = std::abs(curr.axis_feedrate[a]); + if (curr.abs_axis_feedrate[a] != 0.0f) { + float axis_max_feedrate = get_axis_max_feedrate(static_cast(i), static_cast(a)); + if (axis_max_feedrate != 0.0f) + min_feedrate_factor = std::min(min_feedrate_factor, axis_max_feedrate / curr.abs_axis_feedrate[a]); + } + } + + block.feedrate_profile.cruise = min_feedrate_factor * curr.feedrate; + + if (min_feedrate_factor < 1.0f) { + for (unsigned char a = X; a <= E; ++a) { + curr.axis_feedrate[a] *= min_feedrate_factor; + curr.abs_axis_feedrate[a] *= min_feedrate_factor; + } + } + + // calculates block acceleration + float acceleration = is_extrusion_only_move(delta_pos) ? + get_retract_acceleration(static_cast(i)) : + get_acceleration(static_cast(i)); + + for (unsigned char a = X; a <= E; ++a) { + float axis_max_acceleration = get_axis_max_acceleration(static_cast(i), static_cast(a)); + if (acceleration * std::abs(delta_pos[a]) * inv_distance > axis_max_acceleration) + acceleration = axis_max_acceleration; + } + + block.acceleration = acceleration; + + // calculates block exit feedrate + curr.safe_feedrate = block.feedrate_profile.cruise; + + for (unsigned char a = X; a <= E; ++a) { + float axis_max_jerk = get_axis_max_jerk(static_cast(i), static_cast(a)); + if (curr.abs_axis_feedrate[a] > axis_max_jerk) + curr.safe_feedrate = std::min(curr.safe_feedrate, axis_max_jerk); + } + + block.feedrate_profile.exit = curr.safe_feedrate; + + static const float PREVIOUS_FEEDRATE_THRESHOLD = 0.0001f; + + // calculates block entry feedrate + float vmax_junction = curr.safe_feedrate; + if (!blocks.empty() && prev.feedrate > PREVIOUS_FEEDRATE_THRESHOLD) { + bool prev_speed_larger = prev.feedrate > block.feedrate_profile.cruise; + float smaller_speed_factor = prev_speed_larger ? (block.feedrate_profile.cruise / prev.feedrate) : (prev.feedrate / block.feedrate_profile.cruise); + // Pick the smaller of the nominal speeds. Higher speed shall not be achieved at the junction during coasting. + vmax_junction = prev_speed_larger ? block.feedrate_profile.cruise : prev.feedrate; + + float v_factor = 1.0f; + bool limited = false; + + for (unsigned char a = X; a <= E; ++a) { + // Limit an axis. We have to differentiate coasting from the reversal of an axis movement, or a full stop. + float v_exit = prev.axis_feedrate[a]; + float v_entry = curr.axis_feedrate[a]; + + if (prev_speed_larger) + v_exit *= smaller_speed_factor; + + if (limited) { + v_exit *= v_factor; + v_entry *= v_factor; + } + + // Calculate the jerk depending on whether the axis is coasting in the same direction or reversing a direction. + float jerk = + (v_exit > v_entry) ? + (((v_entry > 0.0f) || (v_exit < 0.0f)) ? + // coasting + (v_exit - v_entry) : + // axis reversal + std::max(v_exit, -v_entry)) : + // v_exit <= v_entry + (((v_entry < 0.0f) || (v_exit > 0.0f)) ? + // coasting + (v_entry - v_exit) : + // axis reversal + std::max(-v_exit, v_entry)); + + float axis_max_jerk = get_axis_max_jerk(static_cast(i), static_cast(a)); + if (jerk > axis_max_jerk) { + v_factor *= axis_max_jerk / jerk; + limited = true; + } + } + + if (limited) + vmax_junction *= v_factor; + + // Now the transition velocity is known, which maximizes the shared exit / entry velocity while + // respecting the jerk factors, it may be possible, that applying separate safe exit / entry velocities will achieve faster prints. + float vmax_junction_threshold = vmax_junction * 0.99f; + + // Not coasting. The machine will stop and start the movements anyway, better to start the segment from start. + if ((prev.safe_feedrate > vmax_junction_threshold) && (curr.safe_feedrate > vmax_junction_threshold)) + vmax_junction = curr.safe_feedrate; + } + + float v_allowable = max_allowable_speed(-acceleration, curr.safe_feedrate, block.distance); + block.feedrate_profile.entry = std::min(vmax_junction, v_allowable); + + block.max_entry_speed = vmax_junction; + block.flags.nominal_length = (block.feedrate_profile.cruise <= v_allowable); + block.flags.recalculate = true; + block.safe_feedrate = curr.safe_feedrate; + + // calculates block trapezoid + block.calculate_trapezoid(); + + // updates previous + prev = curr; + + blocks.push_back(block); + + if (blocks.size() > TimeProcessor::Planner::refresh_threshold) + machine.calculate_time(TimeProcessor::Planner::queue_size); + } + + // store move + store_move_vertex(type); +} + +void GCodeProcessor::process_G10(const GCodeReader::GCodeLine& line) +{ + // stores retract move + store_move_vertex(EMoveType::Retract); +} + +void GCodeProcessor::process_G11(const GCodeReader::GCodeLine& line) +{ + // stores unretract move + store_move_vertex(EMoveType::Unretract); +} + +void GCodeProcessor::process_G20(const GCodeReader::GCodeLine& line) +{ + m_units = EUnits::Inches; +} + +void GCodeProcessor::process_G21(const GCodeReader::GCodeLine& line) +{ + m_units = EUnits::Millimeters; +} + +void GCodeProcessor::process_G22(const GCodeReader::GCodeLine& line) +{ + // stores retract move + store_move_vertex(EMoveType::Retract); +} + +void GCodeProcessor::process_G23(const GCodeReader::GCodeLine& line) +{ + // stores unretract move + store_move_vertex(EMoveType::Unretract); +} + +void GCodeProcessor::process_G90(const GCodeReader::GCodeLine& line) +{ + m_global_positioning_type = EPositioningType::Absolute; +} + +void GCodeProcessor::process_G91(const GCodeReader::GCodeLine& line) +{ + m_global_positioning_type = EPositioningType::Relative; +} + +void GCodeProcessor::process_G92(const GCodeReader::GCodeLine& line) +{ + float lengths_scale_factor = (m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f; + bool any_found = false; + + if (line.has_x()) { + m_origin[X] = m_end_position[X] - line.x() * lengths_scale_factor; + any_found = true; + } + + if (line.has_y()) { + m_origin[Y] = m_end_position[Y] - line.y() * lengths_scale_factor; + any_found = true; + } + + if (line.has_z()) { + m_origin[Z] = m_end_position[Z] - line.z() * lengths_scale_factor; + any_found = true; + } + + if (line.has_e()) { + // extruder coordinate can grow to the point where its float representation does not allow for proper addition with small increments, + // we set the value taken from the G92 line as the new current position for it + m_end_position[E] = line.e() * lengths_scale_factor; + any_found = true; + } + else + simulate_st_synchronize(); + + if (!any_found && !line.has_unknown_axis()) { + // The G92 may be called for axes that PrusaSlicer does not recognize, for example see GH issue #3510, + // where G92 A0 B0 is called although the extruder axis is till E. + for (unsigned char a = X; a <= E; ++a) { + m_origin[a] = m_end_position[a]; + } + } +} + +void GCodeProcessor::process_M1(const GCodeReader::GCodeLine& line) +{ + simulate_st_synchronize(); +} + +void GCodeProcessor::process_M82(const GCodeReader::GCodeLine& line) +{ + m_e_local_positioning_type = EPositioningType::Absolute; +} + +void GCodeProcessor::process_M83(const GCodeReader::GCodeLine& line) +{ + m_e_local_positioning_type = EPositioningType::Relative; +} + +void GCodeProcessor::process_M106(const GCodeReader::GCodeLine& line) +{ + if (!line.has('P')) { + // The absence of P means the print cooling fan, so ignore anything else. + float new_fan_speed; + if (line.has_value('S', new_fan_speed)) + m_fan_speed = (100.0f / 255.0f) * new_fan_speed; + else + m_fan_speed = 100.0f; + } +} + +void GCodeProcessor::process_M107(const GCodeReader::GCodeLine& line) +{ + m_fan_speed = 0.0f; +} + +void GCodeProcessor::process_M108(const GCodeReader::GCodeLine& line) +{ + // These M-codes are used by Sailfish to change active tool. + // They have to be processed otherwise toolchanges will be unrecognised + // by the analyzer - see https://github.com/prusa3d/PrusaSlicer/issues/2566 + + if (m_flavor != gcfSailfish) + return; + + std::string cmd = line.raw(); + size_t pos = cmd.find("T"); + if (pos != std::string::npos) + process_T(cmd.substr(pos)); +} + +void GCodeProcessor::process_M132(const GCodeReader::GCodeLine& line) +{ + // This command is used by Makerbot to load the current home position from EEPROM + // see: https://github.com/makerbot/s3g/blob/master/doc/GCodeProtocol.md + // Using this command to reset the axis origin to zero helps in fixing: https://github.com/prusa3d/PrusaSlicer/issues/3082 + + if (line.has_x()) + m_origin[X] = 0.0f; + + if (line.has_y()) + m_origin[Y] = 0.0f; + + if (line.has_z()) + m_origin[Z] = 0.0f; + + if (line.has_e()) + m_origin[E] = 0.0f; +} + +void GCodeProcessor::process_M135(const GCodeReader::GCodeLine& line) +{ + // These M-codes are used by MakerWare to change active tool. + // They have to be processed otherwise toolchanges will be unrecognised + // by the analyzer - see https://github.com/prusa3d/PrusaSlicer/issues/2566 + + if (m_flavor != gcfMakerWare) + return; + + std::string cmd = line.raw(); + size_t pos = cmd.find("T"); + if (pos != std::string::npos) + process_T(cmd.substr(pos)); +} + +void GCodeProcessor::process_M201(const GCodeReader::GCodeLine& line) +{ + if (!m_time_processor.machine_envelope_processing_enabled) + return; + + // see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration + float factor = ((m_flavor != gcfRepRapSprinter && m_flavor != gcfRepRapFirmware) && m_units == EUnits::Inches) ? INCHES_TO_MM : 1.0f; + + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + if (line.has_x()) + set_option_value(m_time_processor.machine_limits.machine_max_acceleration_x, i, line.x() * factor); + + if (line.has_y()) + set_option_value(m_time_processor.machine_limits.machine_max_acceleration_y, i, line.y() * factor); + + if (line.has_z()) + set_option_value(m_time_processor.machine_limits.machine_max_acceleration_z, i, line.z() * factor); + + if (line.has_e()) + set_option_value(m_time_processor.machine_limits.machine_max_acceleration_e, i, line.e() * factor); + } +} + +void GCodeProcessor::process_M203(const GCodeReader::GCodeLine& line) +{ + if (!m_time_processor.machine_envelope_processing_enabled) + return; + + // see http://reprap.org/wiki/G-code#M203:_Set_maximum_feedrate + if (m_flavor == gcfRepetier) + return; + + // see http://reprap.org/wiki/G-code#M203:_Set_maximum_feedrate + // http://smoothieware.org/supported-g-codes + float factor = (m_flavor == gcfMarlin || m_flavor == gcfSmoothie) ? 1.0f : MMMIN_TO_MMSEC; + + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + if (line.has_x()) + set_option_value(m_time_processor.machine_limits.machine_max_feedrate_x, i, line.x() * factor); + + if (line.has_y()) + set_option_value(m_time_processor.machine_limits.machine_max_feedrate_y, i, line.y() * factor); + + if (line.has_z()) + set_option_value(m_time_processor.machine_limits.machine_max_feedrate_z, i, line.z() * factor); + + if (line.has_e()) + set_option_value(m_time_processor.machine_limits.machine_max_feedrate_e, i, line.e() * factor); + } +} + +void GCodeProcessor::process_M204(const GCodeReader::GCodeLine& line) +{ + if (!m_time_processor.machine_envelope_processing_enabled) + return; + + float value; + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + if (line.has_value('S', value)) { + // Legacy acceleration format. This format is used by the legacy Marlin, MK2 or MK3 firmware, + // and it is also generated by Slic3r to control acceleration per extrusion type + // (there is a separate acceleration settings in Slicer for perimeter, first layer etc). + set_acceleration(static_cast(i), value); + if (line.has_value('T', value)) + set_option_value(m_time_processor.machine_limits.machine_max_acceleration_retracting, i, value); + } + else { + // New acceleration format, compatible with the upstream Marlin. + if (line.has_value('P', value)) + set_acceleration(static_cast(i), value); + if (line.has_value('R', value)) + set_option_value(m_time_processor.machine_limits.machine_max_acceleration_retracting, i, value); + if (line.has_value('T', value)) { + // Interpret the T value as the travel acceleration in the new Marlin format. + //FIXME Prusa3D firmware currently does not support travel acceleration value independent from the extruding acceleration value. + // set_travel_acceleration(value); + } + } + } +} + +void GCodeProcessor::process_M205(const GCodeReader::GCodeLine& line) +{ + if (!m_time_processor.machine_envelope_processing_enabled) + return; + + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + if (line.has_x()) { + float max_jerk = line.x(); + set_option_value(m_time_processor.machine_limits.machine_max_jerk_x, i, max_jerk); + set_option_value(m_time_processor.machine_limits.machine_max_jerk_y, i, max_jerk); + } + + if (line.has_y()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_y, i, line.y()); + + if (line.has_z()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_z, i, line.z()); + + if (line.has_e()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_e, i, line.e()); + + float value; + if (line.has_value('S', value)) + set_option_value(m_time_processor.machine_limits.machine_min_extruding_rate, i, value); + + if (line.has_value('T', value)) + set_option_value(m_time_processor.machine_limits.machine_min_travel_rate, i, value); + } +} + +void GCodeProcessor::process_M221(const GCodeReader::GCodeLine& line) +{ + float value_s; + float value_t; + if (line.has_value('S', value_s) && !line.has_value('T', value_t)) { + value_s *= 0.01f; + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + m_time_processor.machines[i].extrude_factor_override_percentage = value_s; + } + } +} + +void GCodeProcessor::process_M401(const GCodeReader::GCodeLine& line) +{ + if (m_flavor != gcfRepetier) + return; + + for (unsigned char a = 0; a <= 3; ++a) { + m_cached_position.position[a] = m_start_position[a]; + } + m_cached_position.feedrate = m_feedrate; +} + +void GCodeProcessor::process_M402(const GCodeReader::GCodeLine& line) +{ + if (m_flavor != gcfRepetier) + return; + + // see for reference: + // https://github.com/repetier/Repetier-Firmware/blob/master/src/ArduinoAVR/Repetier/Printer.cpp + // void Printer::GoToMemoryPosition(bool x, bool y, bool z, bool e, float feed) + + bool has_xyz = !(line.has_x() || line.has_y() || line.has_z()); + + float p = FLT_MAX; + for (unsigned char a = X; a <= Z; ++a) { + if (has_xyz || line.has(a)) { + p = m_cached_position.position[a]; + if (p != FLT_MAX) + m_start_position[a] = p; + } + } + + p = m_cached_position.position[E]; + if (p != FLT_MAX) + m_start_position[E] = p; + + p = FLT_MAX; + if (!line.has_value(4, p)) + p = m_cached_position.feedrate; + + if (p != FLT_MAX) + m_feedrate = p; +} + +void GCodeProcessor::process_M566(const GCodeReader::GCodeLine& line) +{ + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + if (line.has_x()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_x, i, line.x() * MMMIN_TO_MMSEC); + + if (line.has_y()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_y, i, line.y() * MMMIN_TO_MMSEC); + + if (line.has_z()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_z, i, line.z() * MMMIN_TO_MMSEC); + + if (line.has_e()) + set_option_value(m_time_processor.machine_limits.machine_max_jerk_e, i, line.e() * MMMIN_TO_MMSEC); + } +} + +void GCodeProcessor::process_M702(const GCodeReader::GCodeLine& line) +{ + if (line.has('C')) { + // MK3 MMU2 specific M code: + // M702 C is expected to be sent by the custom end G-code when finalizing a print. + // The MK3 unit shall unload and park the active filament into the MMU2 unit. + m_time_processor.extruder_unloaded = true; + simulate_st_synchronize(get_filament_unload_time(m_extruder_id)); + } +} + +void GCodeProcessor::process_T(const GCodeReader::GCodeLine& line) +{ + process_T(line.cmd()); +} + +void GCodeProcessor::process_T(const std::string& command) +{ + if (command.length() > 1) { + try { + unsigned char id = static_cast(std::stoi(command.substr(1))); + if (m_extruder_id != id) { + unsigned char extruders_count = static_cast(m_extruder_offsets.size()); + if (id >= extruders_count) + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid toolchange, maybe from a custom gcode."; + else { + unsigned char old_extruder_id = m_extruder_id; + m_extruder_id = id; + m_cp_color.current = m_extruder_colors[id]; + // Specific to the MK3 MMU2: + // The initial value of extruder_unloaded is set to true indicating + // that the filament is parked in the MMU2 unit and there is nothing to be unloaded yet. + float extra_time = get_filament_unload_time(static_cast(old_extruder_id)); + m_time_processor.extruder_unloaded = false; + extra_time += get_filament_load_time(static_cast(m_extruder_id)); + simulate_st_synchronize(extra_time); + } + + // store tool change move + store_move_vertex(EMoveType::Tool_change); + } + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "GCodeProcessor encountered an invalid toolchange (" << command << ")."; + } + } +} + +void GCodeProcessor::store_move_vertex(EMoveType type) +{ + MoveVertex vertex = { + type, + m_extrusion_role, + m_extruder_id, + m_cp_color.current, + Vec3f(m_end_position[X], m_end_position[Y], m_end_position[Z]) + m_extruder_offsets[m_extruder_id], + m_end_position[E] - m_start_position[E], + m_feedrate, + m_width, + m_height, + m_mm3_per_mm, + m_fan_speed, + static_cast(m_result.moves.size()) + }; + m_result.moves.emplace_back(vertex); +} + +float GCodeProcessor::minimum_feedrate(PrintEstimatedTimeStatistics::ETimeMode mode, float feedrate) const +{ + if (m_time_processor.machine_limits.machine_min_extruding_rate.empty()) + return feedrate; + + return std::max(feedrate, get_option_value(m_time_processor.machine_limits.machine_min_extruding_rate, static_cast(mode))); +} + +float GCodeProcessor::minimum_travel_feedrate(PrintEstimatedTimeStatistics::ETimeMode mode, float feedrate) const +{ + if (m_time_processor.machine_limits.machine_min_travel_rate.empty()) + return feedrate; + + return std::max(feedrate, get_option_value(m_time_processor.machine_limits.machine_min_travel_rate, static_cast(mode))); +} + +float GCodeProcessor::get_axis_max_feedrate(PrintEstimatedTimeStatistics::ETimeMode mode, Axis axis) const +{ + switch (axis) + { + case X: { return get_option_value(m_time_processor.machine_limits.machine_max_feedrate_x, static_cast(mode)); } + case Y: { return get_option_value(m_time_processor.machine_limits.machine_max_feedrate_y, static_cast(mode)); } + case Z: { return get_option_value(m_time_processor.machine_limits.machine_max_feedrate_z, static_cast(mode)); } + case E: { return get_option_value(m_time_processor.machine_limits.machine_max_feedrate_e, static_cast(mode)); } + default: { return 0.0f; } + } +} + +float GCodeProcessor::get_axis_max_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode, Axis axis) const +{ + switch (axis) + { + case X: { return get_option_value(m_time_processor.machine_limits.machine_max_acceleration_x, static_cast(mode)); } + case Y: { return get_option_value(m_time_processor.machine_limits.machine_max_acceleration_y, static_cast(mode)); } + case Z: { return get_option_value(m_time_processor.machine_limits.machine_max_acceleration_z, static_cast(mode)); } + case E: { return get_option_value(m_time_processor.machine_limits.machine_max_acceleration_e, static_cast(mode)); } + default: { return 0.0f; } + } +} + +float GCodeProcessor::get_axis_max_jerk(PrintEstimatedTimeStatistics::ETimeMode mode, Axis axis) const +{ + switch (axis) + { + case X: { return get_option_value(m_time_processor.machine_limits.machine_max_jerk_x, static_cast(mode)); } + case Y: { return get_option_value(m_time_processor.machine_limits.machine_max_jerk_y, static_cast(mode)); } + case Z: { return get_option_value(m_time_processor.machine_limits.machine_max_jerk_z, static_cast(mode)); } + case E: { return get_option_value(m_time_processor.machine_limits.machine_max_jerk_e, static_cast(mode)); } + default: { return 0.0f; } + } +} + +float GCodeProcessor::get_retract_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + return get_option_value(m_time_processor.machine_limits.machine_max_acceleration_retracting, static_cast(mode)); +} + +float GCodeProcessor::get_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode) const +{ + size_t id = static_cast(mode); + return (id < m_time_processor.machines.size()) ? m_time_processor.machines[id].acceleration : DEFAULT_ACCELERATION; +} + +void GCodeProcessor::set_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode, float value) +{ + size_t id = static_cast(mode); + if (id < m_time_processor.machines.size()) { + m_time_processor.machines[id].acceleration = (m_time_processor.machines[id].max_acceleration == 0.0f) ? value : + // Clamp the acceleration with the maximum. + std::min(value, m_time_processor.machines[id].max_acceleration); + } +} + +float GCodeProcessor::get_filament_load_time(size_t extruder_id) +{ + return (m_time_processor.filament_load_times.empty() || m_time_processor.extruder_unloaded) ? + 0.0f : + ((extruder_id < m_time_processor.filament_load_times.size()) ? + m_time_processor.filament_load_times[extruder_id] : m_time_processor.filament_load_times.front()); +} + +float GCodeProcessor::get_filament_unload_time(size_t extruder_id) +{ + return (m_time_processor.filament_unload_times.empty() || m_time_processor.extruder_unloaded) ? + 0.0f : + ((extruder_id < m_time_processor.filament_unload_times.size()) ? + m_time_processor.filament_unload_times[extruder_id] : m_time_processor.filament_unload_times.front()); +} + +void GCodeProcessor::process_custom_gcode_time(CustomGCode::Type code) +{ + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + TimeMachine& machine = m_time_processor.machines[i]; + if (!machine.enabled) + continue; + + TimeMachine::CustomGCodeTime& gcode_time = machine.gcode_time; + gcode_time.needed = true; + //FIXME this simulates st_synchronize! is it correct? + // The estimated time may be longer than the real print time. + machine.simulate_st_synchronize(); + if (gcode_time.cache != 0.0f) { + gcode_time.times.push_back({ code, gcode_time.cache }); + gcode_time.cache = 0.0f; + } + } +} + +void GCodeProcessor::simulate_st_synchronize(float additional_time) +{ + for (size_t i = 0; i < static_cast(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) { + m_time_processor.machines[i].simulate_st_synchronize(additional_time); + } +} + +void GCodeProcessor::update_estimated_times_stats() +{ + auto update_mode = [this](PrintEstimatedTimeStatistics::ETimeMode mode) { + PrintEstimatedTimeStatistics::Mode& data = m_result.time_statistics.modes[static_cast(mode)]; + data.time = get_time(mode); + data.custom_gcode_times = get_custom_gcode_times(mode, true); + data.moves_times = get_moves_time(mode); + data.roles_times = get_roles_time(mode); + data.layers_times = get_layers_time(mode); + }; + + update_mode(PrintEstimatedTimeStatistics::ETimeMode::Normal); + if (m_time_processor.machines[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Stealth)].enabled) + update_mode(PrintEstimatedTimeStatistics::ETimeMode::Stealth); + else + m_result.time_statistics.modes[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Stealth)].reset(); +} + +} /* namespace Slic3r */ + +#endif // ENABLE_GCODE_VIEWER diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp new file mode 100644 index 0000000000..a0cf5d6e5c --- /dev/null +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -0,0 +1,562 @@ +#ifndef slic3r_GCodeProcessor_hpp_ +#define slic3r_GCodeProcessor_hpp_ + +#if ENABLE_GCODE_VIEWER +#include "libslic3r/GCodeReader.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/ExtrusionEntity.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/CustomGCode.hpp" + +#include +#include +#include + +namespace Slic3r { + + enum class EMoveType : unsigned char + { + Noop, + Retract, + Unretract, + Tool_change, + Color_change, + Pause_Print, + Custom_GCode, + Travel, + Extrude, + Count + }; + + struct PrintEstimatedTimeStatistics + { + enum class ETimeMode : unsigned char + { + Normal, + Stealth, + Count + }; + + struct Mode + { + float time; + std::vector>> custom_gcode_times; + std::vector> moves_times; + std::vector> roles_times; + std::vector layers_times; + + void reset() { + time = 0.0f; + custom_gcode_times.clear(); + moves_times.clear(); + roles_times.clear(); + layers_times.clear(); + } + }; + + std::array(ETimeMode::Count)> modes; + + PrintEstimatedTimeStatistics() { reset(); } + + void reset() { + for (auto m : modes) { + m.reset(); + } + } + }; + + class GCodeProcessor + { + public: + static const std::string Extrusion_Role_Tag; + static const std::string Height_Tag; + static const std::string Layer_Change_Tag; + static const std::string Color_Change_Tag; + static const std::string Pause_Print_Tag; + static const std::string Custom_Code_Tag; + static const std::string First_Line_M73_Placeholder_Tag; + static const std::string Last_Line_M73_Placeholder_Tag; + static const std::string Estimated_Printing_Time_Placeholder_Tag; + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + static const std::string Width_Tag; + static const std::string Mm3_Per_Mm_Tag; +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + private: + using AxisCoords = std::array; + using ExtruderColors = std::vector; + + enum class EUnits : unsigned char + { + Millimeters, + Inches + }; + + enum class EPositioningType : unsigned char + { + Absolute, + Relative + }; + + struct CachedPosition + { + AxisCoords position; // mm + float feedrate; // mm/s + + void reset(); + }; + + struct CpColor + { + unsigned char counter; + unsigned char current; + + void reset(); + }; + + public: + struct FeedrateProfile + { + float entry{ 0.0f }; // mm/s + float cruise{ 0.0f }; // mm/s + float exit{ 0.0f }; // mm/s + }; + + struct Trapezoid + { + float accelerate_until{ 0.0f }; // mm + float decelerate_after{ 0.0f }; // mm + float cruise_feedrate{ 0.0f }; // mm/sec + + float acceleration_time(float entry_feedrate, float acceleration) const; + float cruise_time() const; + float deceleration_time(float distance, float acceleration) const; + float cruise_distance() const; + }; + + struct TimeBlock + { + struct Flags + { + bool recalculate{ false }; + bool nominal_length{ false }; + }; + + EMoveType move_type{ EMoveType::Noop }; + ExtrusionRole role{ erNone }; + unsigned int layer_id{ 0 }; + float distance{ 0.0f }; // mm + float acceleration{ 0.0f }; // mm/s^2 + float max_entry_speed{ 0.0f }; // mm/s + float safe_feedrate{ 0.0f }; // mm/s + Flags flags; + FeedrateProfile feedrate_profile; + Trapezoid trapezoid; + + // Calculates this block's trapezoid + void calculate_trapezoid(); + + float time() const; + }; + + private: + struct TimeMachine + { + struct State + { + float feedrate; // mm/s + float safe_feedrate; // mm/s + AxisCoords axis_feedrate; // mm/s + AxisCoords abs_axis_feedrate; // mm/s + + void reset(); + }; + + struct CustomGCodeTime + { + bool needed; + float cache; + std::vector> times; + + void reset(); + }; + + bool enabled; + float acceleration; // mm/s^2 + // hard limit for the acceleration, to which the firmware will clamp. + float max_acceleration; // mm/s^2 + float extrude_factor_override_percentage; + float time; // s + std::string line_m73_mask; + State curr; + State prev; + CustomGCodeTime gcode_time; + std::vector blocks; + std::vector g1_times_cache; + std::array(EMoveType::Count)> moves_time; + std::array(ExtrusionRole::erCount)> roles_time; + std::vector layers_time; + + void reset(); + + // Simulates firmware st_synchronize() call + void simulate_st_synchronize(float additional_time = 0.0f); + void calculate_time(size_t keep_last_n_blocks = 0); + }; + + struct TimeProcessor + { + struct Planner + { + // Size of the firmware planner queue. The old 8-bit Marlins usually just managed 16 trapezoidal blocks. + // Let's be conservative and plan for newer boards with more memory. + static constexpr size_t queue_size = 64; + // The firmware recalculates last planner_queue_size trapezoidal blocks each time a new block is added. + // We are not simulating the firmware exactly, we calculate a sequence of blocks once a reasonable number of blocks accumulate. + static constexpr size_t refresh_threshold = queue_size * 4; + }; + + // extruder_id is currently used to correctly calculate filament load / unload times into the total print time. + // This is currently only really used by the MK3 MMU2: + // extruder_unloaded = true means no filament is loaded yet, all the filaments are parked in the MK3 MMU2 unit. + bool extruder_unloaded; + // whether or not to export post-process the gcode to export lines M73 in it + bool export_remaining_time_enabled; + // allow to skip the lines M201/M203/M204/M205 generated by GCode::print_machine_envelope() + bool machine_envelope_processing_enabled; + MachineEnvelopeConfig machine_limits; + // Additional load / unload times for a filament exchange sequence. + std::vector filament_load_times; + std::vector filament_unload_times; + std::array(PrintEstimatedTimeStatistics::ETimeMode::Count)> machines; + + void reset(); + + // post process the file with the given filename to add remaining time lines M73 + void post_process(const std::string& filename); + }; + + public: + struct MoveVertex + { + EMoveType type{ EMoveType::Noop }; + ExtrusionRole extrusion_role{ erNone }; + unsigned char extruder_id{ 0 }; + unsigned char cp_color_id{ 0 }; + Vec3f position{ Vec3f::Zero() }; // mm + float delta_extruder{ 0.0f }; // mm + float feedrate{ 0.0f }; // mm/s + float width{ 0.0f }; // mm + float height{ 0.0f }; // mm + float mm3_per_mm{ 0.0f }; + float fan_speed{ 0.0f }; // percentage + float time{ 0.0f }; // s + + float volumetric_rate() const { return feedrate * mm3_per_mm; } + }; + + struct Result + { + unsigned int id; + std::vector moves; + Pointfs bed_shape; + std::string printer_settings_id; + std::vector extruder_colors; + PrintEstimatedTimeStatistics time_statistics; + +#if ENABLE_GCODE_VIEWER_STATISTICS + long long time{ 0 }; + void reset() + { + time = 0; + moves = std::vector(); + bed_shape = Pointfs(); + extruder_colors = std::vector(); + } +#else + void reset() + { + moves = std::vector(); + bed_shape = Pointfs(); + extruder_colors = std::vector(); + } +#endif // ENABLE_GCODE_VIEWER_STATISTICS + }; + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + struct DataChecker + { + struct Error + { + float value; + float tag_value; + ExtrusionRole role; + }; + + std::string type; + float threshold{ 0.01f }; + float last_tag_value{ 0.0f }; + unsigned int count{ 0 }; + std::vector errors; + + DataChecker(const std::string& type, float threshold) + : type(type), threshold(threshold) + {} + + void update(float value, ExtrusionRole role) { + if (role != erCustom) { + ++count; + if (last_tag_value != 0.0f) { + if (std::abs(value - last_tag_value) / last_tag_value > threshold) + errors.push_back({ value, last_tag_value, role }); + } + } + } + + void reset() { last_tag_value = 0.0f; errors.clear(); count = 0; } + + std::pair get_min() const { + float delta_min = FLT_MAX; + float perc_min = 0.0f; + for (const Error& e : errors) { + if (delta_min > e.value - e.tag_value) { + delta_min = e.value - e.tag_value; + perc_min = 100.0f * delta_min / e.tag_value; + } + } + return { delta_min, perc_min }; + } + + std::pair get_max() const { + float delta_max = -FLT_MAX; + float perc_max = 0.0f; + for (const Error& e : errors) { + if (delta_max < e.value - e.tag_value) { + delta_max = e.value - e.tag_value; + perc_max = 100.0f * delta_max / e.tag_value; + } + } + return { delta_max, perc_max }; + } + + void output() const { + if (!errors.empty()) { + std::cout << type << ":\n"; + std::cout << "Errors: " << errors.size() << " (" << 100.0f * float(errors.size()) / float(count) << "%)\n"; + auto [min, perc_min] = get_min(); + auto [max, perc_max] = get_max(); + std::cout << "min: " << min << "(" << perc_min << "%) - max: " << max << "(" << perc_max << "%)\n"; + } + } + }; +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + private: + GCodeReader m_parser; + + EUnits m_units; + EPositioningType m_global_positioning_type; + EPositioningType m_e_local_positioning_type; + std::vector m_extruder_offsets; + GCodeFlavor m_flavor; + + AxisCoords m_start_position; // mm + AxisCoords m_end_position; // mm + AxisCoords m_origin; // mm + CachedPosition m_cached_position; + + float m_feedrate; // mm/s + float m_width; // mm + float m_height; // mm + float m_mm3_per_mm; + float m_fan_speed; // percentage + ExtrusionRole m_extrusion_role; + unsigned char m_extruder_id; + ExtruderColors m_extruder_colors; + std::vector m_filament_diameters; + float m_extruded_last_z; + unsigned int m_layer_id; + CpColor m_cp_color; + + enum class EProducer + { + Unknown, + PrusaSlicer, + Cura, + Simplify3D, + CraftWare, + ideaMaker + }; + + static const std::vector> Producers; + EProducer m_producer; + bool m_producers_enabled; + + TimeProcessor m_time_processor; + + Result m_result; + static unsigned int s_result_id; + +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + DataChecker m_mm3_per_mm_compare{ "mm3_per_mm", 0.01f }; + DataChecker m_height_compare{ "height", 0.01f }; + DataChecker m_width_compare{ "width", 0.01f }; +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + + public: + GCodeProcessor(); + + void apply_config(const PrintConfig& config); + void apply_config(const DynamicPrintConfig& config); + void enable_stealth_time_estimator(bool enabled); + bool is_stealth_time_estimator_enabled() const { + return m_time_processor.machines[static_cast(PrintEstimatedTimeStatistics::ETimeMode::Stealth)].enabled; + } + void enable_machine_envelope_processing(bool enabled) { m_time_processor.machine_envelope_processing_enabled = enabled; } + void enable_producers(bool enabled) { m_producers_enabled = enabled; } + void reset(); + + const Result& get_result() const { return m_result; } + Result&& extract_result() { return std::move(m_result); } + + // Process the gcode contained in the file with the given filename + // throws CanceledException through print->throw_if_canceled() (sent by the caller as callback). + void process_file(const std::string& filename, std::function cancel_callback = nullptr); + + float get_time(PrintEstimatedTimeStatistics::ETimeMode mode) const; + std::string get_time_dhm(PrintEstimatedTimeStatistics::ETimeMode mode) const; + std::vector>> get_custom_gcode_times(PrintEstimatedTimeStatistics::ETimeMode mode, bool include_remaining) const; + + std::vector> get_moves_time(PrintEstimatedTimeStatistics::ETimeMode mode) const; + std::vector> get_roles_time(PrintEstimatedTimeStatistics::ETimeMode mode) const; + std::vector get_layers_time(PrintEstimatedTimeStatistics::ETimeMode mode) const; + + private: + void process_gcode_line(const GCodeReader::GCodeLine& line); + + // Process tags embedded into comments + void process_tags(const std::string& comment); + bool process_producers_tags(const std::string& comment); + bool process_prusaslicer_tags(const std::string& comment); + bool process_cura_tags(const std::string& comment); + bool process_simplify3d_tags(const std::string& comment); + bool process_craftware_tags(const std::string& comment); + bool process_ideamaker_tags(const std::string& comment); + + bool detect_producer(const std::string& comment); + + // Move + void process_G0(const GCodeReader::GCodeLine& line); + void process_G1(const GCodeReader::GCodeLine& line); + + // Retract + void process_G10(const GCodeReader::GCodeLine& line); + + // Unretract + void process_G11(const GCodeReader::GCodeLine& line); + + // Set Units to Inches + void process_G20(const GCodeReader::GCodeLine& line); + + // Set Units to Millimeters + void process_G21(const GCodeReader::GCodeLine& line); + + // Firmware controlled Retract + void process_G22(const GCodeReader::GCodeLine& line); + + // Firmware controlled Unretract + void process_G23(const GCodeReader::GCodeLine& line); + + // Set to Absolute Positioning + void process_G90(const GCodeReader::GCodeLine& line); + + // Set to Relative Positioning + void process_G91(const GCodeReader::GCodeLine& line); + + // Set Position + void process_G92(const GCodeReader::GCodeLine& line); + + // Sleep or Conditional stop + void process_M1(const GCodeReader::GCodeLine& line); + + // Set extruder to absolute mode + void process_M82(const GCodeReader::GCodeLine& line); + + // Set extruder to relative mode + void process_M83(const GCodeReader::GCodeLine& line); + + // Set fan speed + void process_M106(const GCodeReader::GCodeLine& line); + + // Disable fan + void process_M107(const GCodeReader::GCodeLine& line); + + // Set tool (Sailfish) + void process_M108(const GCodeReader::GCodeLine& line); + + // Recall stored home offsets + void process_M132(const GCodeReader::GCodeLine& line); + + // Set tool (MakerWare) + void process_M135(const GCodeReader::GCodeLine& line); + + // Set max printing acceleration + void process_M201(const GCodeReader::GCodeLine& line); + + // Set maximum feedrate + void process_M203(const GCodeReader::GCodeLine& line); + + // Set default acceleration + void process_M204(const GCodeReader::GCodeLine& line); + + // Advanced settings + void process_M205(const GCodeReader::GCodeLine& line); + + // Set extrude factor override percentage + void process_M221(const GCodeReader::GCodeLine& line); + + // Repetier: Store x, y and z position + void process_M401(const GCodeReader::GCodeLine& line); + + // Repetier: Go to stored position + void process_M402(const GCodeReader::GCodeLine& line); + + // Set allowable instantaneous speed change + void process_M566(const GCodeReader::GCodeLine& line); + + // Unload the current filament into the MK3 MMU2 unit at the end of print. + void process_M702(const GCodeReader::GCodeLine& line); + + // Processes T line (Select Tool) + void process_T(const GCodeReader::GCodeLine& line); + void process_T(const std::string& command); + + void store_move_vertex(EMoveType type); + + float minimum_feedrate(PrintEstimatedTimeStatistics::ETimeMode mode, float feedrate) const; + float minimum_travel_feedrate(PrintEstimatedTimeStatistics::ETimeMode mode, float feedrate) const; + float get_axis_max_feedrate(PrintEstimatedTimeStatistics::ETimeMode mode, Axis axis) const; + float get_axis_max_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode, Axis axis) const; + float get_axis_max_jerk(PrintEstimatedTimeStatistics::ETimeMode mode, Axis axis) const; + float get_retract_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode) const; + float get_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode) const; + void set_acceleration(PrintEstimatedTimeStatistics::ETimeMode mode, float value); + float get_filament_load_time(size_t extruder_id); + float get_filament_unload_time(size_t extruder_id); + + void process_custom_gcode_time(CustomGCode::Type code); + + // Simulates firmware st_synchronize() call + void simulate_st_synchronize(float additional_time = 0.0f); + + void update_estimated_times_stats(); + }; + +} /* namespace Slic3r */ + +#endif // ENABLE_GCODE_VIEWER + +#endif /* slic3r_GCodeProcessor_hpp_ */ + + diff --git a/src/libslic3r/GCode/PostProcessor.cpp b/src/libslic3r/GCode/PostProcessor.cpp index 25982959be..17aa76fb9d 100644 --- a/src/libslic3r/GCode/PostProcessor.cpp +++ b/src/libslic3r/GCode/PostProcessor.cpp @@ -79,7 +79,7 @@ static DWORD execute_process_winapi(const std::wstring &command_line) if (! ::CreateProcessW( nullptr /* lpApplicationName */, (LPWSTR)command_line.c_str(), nullptr /* lpProcessAttributes */, nullptr /* lpThreadAttributes */, false /* bInheritHandles */, CREATE_UNICODE_ENVIRONMENT /* | CREATE_NEW_CONSOLE */ /* dwCreationFlags */, (LPVOID)envstr.c_str(), nullptr /* lpCurrentDirectory */, &startup_info, &process_info)) - throw std::runtime_error(std::string("Failed starting the script ") + boost::nowide::narrow(command_line) + ", Win32 error: " + std::to_string(int(::GetLastError()))); + throw Slic3r::RuntimeError(std::string("Failed starting the script ") + boost::nowide::narrow(command_line) + ", Win32 error: " + std::to_string(int(::GetLastError()))); ::WaitForSingleObject(process_info.hProcess, INFINITE); ULONG rc = 0; ::GetExitCodeProcess(process_info.hProcess, &rc); @@ -98,13 +98,13 @@ static int run_script(const std::string &script, const std::string &gcode, std:: LPWSTR *szArglist = CommandLineToArgvW(boost::nowide::widen(script).c_str(), &nArgs); if (szArglist == nullptr || nArgs <= 0) { // CommandLineToArgvW failed. Maybe the command line escapment is invalid? - throw std::runtime_error(std::string("Post processing script ") + script + " on file " + gcode + " failed. CommandLineToArgvW() refused to parse the command line path."); + throw Slic3r::RuntimeError(std::string("Post processing script ") + script + " on file " + gcode + " failed. CommandLineToArgvW() refused to parse the command line path."); } std::wstring command_line; std::wstring command = szArglist[0]; if (! boost::filesystem::exists(boost::filesystem::path(command))) - throw std::runtime_error(std::string("The configured post-processing script does not exist: ") + boost::nowide::narrow(command)); + throw Slic3r::RuntimeError(std::string("The configured post-processing script does not exist: ") + boost::nowide::narrow(command)); if (boost::iends_with(command, L".pl")) { // This is a perl script. Run it through the perl interpreter. // The current process may be slic3r.exe or slic3r-console.exe. @@ -115,7 +115,7 @@ static int run_script(const std::string &script, const std::string &gcode, std:: boost::filesystem::path path_perl = path_exe.parent_path() / "perl" / "perl.exe"; if (! boost::filesystem::exists(path_perl)) { LocalFree(szArglist); - throw std::runtime_error(std::string("Perl interpreter ") + path_perl.string() + " does not exist."); + throw Slic3r::RuntimeError(std::string("Perl interpreter ") + path_perl.string() + " does not exist."); } // Replace it with the current perl interpreter. quote_argv_winapi(boost::nowide::widen(path_perl.string()), command_line); @@ -187,7 +187,7 @@ void run_post_process_scripts(const std::string &path, const PrintConfig &config config.setenv_(); auto gcode_file = boost::filesystem::path(path); if (! boost::filesystem::exists(gcode_file)) - throw std::runtime_error(std::string("Post-processor can't find exported gcode file")); + throw Slic3r::RuntimeError(std::string("Post-processor can't find exported gcode file")); for (const std::string &scripts : config.post_process.values) { std::vector lines; @@ -205,7 +205,7 @@ void run_post_process_scripts(const std::string &path, const PrintConfig &config const std::string msg = std_err.empty() ? (boost::format("Post-processing script %1% on file %2% failed.\nError code: %3%") % script % path % result).str() : (boost::format("Post-processing script %1% on file %2% failed.\nError code: %3%\nOutput:\n%4%") % script % path % result % std_err).str(); BOOST_LOG_TRIVIAL(error) << msg; - throw std::runtime_error(msg); + throw Slic3r::RuntimeError(msg); } } } diff --git a/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp index 3b2a58a884..33601e5e9f 100644 --- a/src/libslic3r/GCode/PressureEqualizer.cpp +++ b/src/libslic3r/GCode/PressureEqualizer.cpp @@ -148,7 +148,7 @@ static inline int parse_int(const char *&line) char *endptr = NULL; long result = strtol(line, &endptr, 10); if (endptr == NULL || !is_ws_or_eol(*endptr)) - throw std::runtime_error("PressureEqualizer: Error parsing an int"); + throw Slic3r::RuntimeError("PressureEqualizer: Error parsing an int"); line = endptr; return int(result); }; @@ -160,7 +160,7 @@ static inline float parse_float(const char *&line) char *endptr = NULL; float result = strtof(line, &endptr); if (endptr == NULL || !is_ws_or_eol(*endptr)) - throw std::runtime_error("PressureEqualizer: Error parsing a float"); + throw Slic3r::RuntimeError("PressureEqualizer: Error parsing a float"); line = endptr; return result; }; @@ -229,7 +229,7 @@ bool PressureEqualizer::process_line(const char *line, const size_t len, GCodeLi assert(false); } if (i == -1) - throw std::runtime_error(std::string("GCode::PressureEqualizer: Invalid axis for G0/G1: ") + axis); + throw Slic3r::RuntimeError(std::string("GCode::PressureEqualizer: Invalid axis for G0/G1: ") + axis); buf.pos_provided[i] = true; new_pos[i] = parse_float(line); if (i == 3 && m_config->use_relative_e_distances.value) @@ -298,7 +298,7 @@ bool PressureEqualizer::process_line(const char *line, const size_t len, GCodeLi set = true; break; default: - throw std::runtime_error(std::string("GCode::PressureEqualizer: Incorrect axis in a G92 G-code: ") + axis); + throw Slic3r::RuntimeError(std::string("GCode::PressureEqualizer: Incorrect axis in a G92 G-code: ") + axis); } eatws(line); } diff --git a/src/libslic3r/GCode/PreviewData.cpp b/src/libslic3r/GCode/PreviewData.cpp index 551c133450..8aec327db3 100644 --- a/src/libslic3r/GCode/PreviewData.cpp +++ b/src/libslic3r/GCode/PreviewData.cpp @@ -5,6 +5,8 @@ #include +#if !ENABLE_GCODE_VIEWER + //! macro used to mark string used at localization, #define L(s) (s) @@ -516,3 +518,5 @@ Color operator * (float f, const Color& color) } } // namespace Slic3r + +#endif // !ENABLE_GCODE_VIEWER diff --git a/src/libslic3r/GCode/PreviewData.hpp b/src/libslic3r/GCode/PreviewData.hpp index 35bbfa50ac..930c1659e3 100644 --- a/src/libslic3r/GCode/PreviewData.hpp +++ b/src/libslic3r/GCode/PreviewData.hpp @@ -1,6 +1,8 @@ #ifndef slic3r_GCode_PreviewData_hpp_ #define slic3r_GCode_PreviewData_hpp_ +#if !ENABLE_GCODE_VIEWER + #include "../libslic3r.h" #include "../ExtrusionEntity.hpp" #include "../Point.hpp" @@ -56,8 +58,7 @@ public: // Color mapping to convert a float into a smooth rainbow of 10 colors. class RangeBase { - public: - + public: virtual void reset() = 0; virtual bool empty() const = 0; virtual float min() const = 0; @@ -73,7 +74,7 @@ public: // Color mapping converting a float in a range between a min and a max into a smooth rainbow of 10 colors. class Range : public RangeBase { - public: + public: Range(); // RangeBase Overrides @@ -97,8 +98,7 @@ public: template class MultiRange : public RangeBase { - public: - + public: void reset() override { bounds = decltype(bounds){}; @@ -160,8 +160,7 @@ public: mode.set(static_cast(range_type_value), enable); } - private: - + private: // Interval bounds struct Bounds { @@ -394,4 +393,6 @@ public: } // namespace Slic3r +#endif // !ENABLE_GCODE_VIEWER + #endif /* slic3r_GCode_PreviewData_hpp_ */ diff --git a/src/libslic3r/GCode/PrintExtents.cpp b/src/libslic3r/GCode/PrintExtents.cpp index 4a6624531b..a86411519f 100644 --- a/src/libslic3r/GCode/PrintExtents.cpp +++ b/src/libslic3r/GCode/PrintExtents.cpp @@ -94,7 +94,7 @@ static BoundingBoxf extrusionentity_extents(const ExtrusionEntity *extrusion_ent auto *extrusion_entity_collection = dynamic_cast(extrusion_entity); if (extrusion_entity_collection != nullptr) return extrusionentity_extents(*extrusion_entity_collection); - throw std::runtime_error("Unexpected extrusion_entity type in extrusionentity_extents()"); + throw Slic3r::RuntimeError("Unexpected extrusion_entity type in extrusionentity_extents()"); return BoundingBoxf(); } diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp new file mode 100644 index 0000000000..db31f8f67f --- /dev/null +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -0,0 +1,672 @@ +#include "SeamPlacer.hpp" + +#include "libslic3r/ExtrusionEntity.hpp" +#include "libslic3r/Print.hpp" +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/EdgeGrid.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/SVG.hpp" + +namespace Slic3r { + +// This penalty is added to all points inside custom blockers (subtracted from pts inside enforcers). +static constexpr float ENFORCER_BLOCKER_PENALTY = 100; + +// In case there are custom enforcers/blockers, the loop polygon shall always have +// sides smaller than this (so it isn't limited to original resolution). +static constexpr float MINIMAL_POLYGON_SIDE = scale_(0.2f); + +// When spAligned is active and there is a support enforcer, +// add this penalty to its center. +static constexpr float ENFORCER_CENTER_PENALTY = -10.f; + + + + +static float extrudate_overlap_penalty(float nozzle_r, float weight_zero, float overlap_distance) +{ + // The extrudate is not fully supported by the lower layer. Fit a polynomial penalty curve. + // Solved by sympy package: +/* +from sympy import * +(x,a,b,c,d,r,z)=symbols('x a b c d r z') +p = a + b*x + c*x*x + d*x*x*x +p2 = p.subs(solve([p.subs(x, -r), p.diff(x).subs(x, -r), p.diff(x,x).subs(x, -r), p.subs(x, 0)-z], [a, b, c, d])) +from sympy.plotting import plot +plot(p2.subs(r,0.2).subs(z,1.), (x, -1, 3), adaptive=False, nb_of_points=400) +*/ + if (overlap_distance < - nozzle_r) { + // The extrudate is fully supported by the lower layer. This is the ideal case, therefore zero penalty. + return 0.f; + } else { + float x = overlap_distance / nozzle_r; + float x2 = x * x; + float x3 = x2 * x; + return weight_zero * (1.f + 3.f * x + 3.f * x2 + x3); + } +} + + + +// Return a value in <0, 1> of a cubic B-spline kernel centered around zero. +// The B-spline is re-scaled so it has value 1 at zero. +static inline float bspline_kernel(float x) +{ + x = std::abs(x); + if (x < 1.f) { + return 1.f - (3.f / 2.f) * x * x + (3.f / 4.f) * x * x * x; + } + else if (x < 2.f) { + x -= 1.f; + float x2 = x * x; + float x3 = x2 * x; + return (1.f / 4.f) - (3.f / 4.f) * x + (3.f / 4.f) * x2 - (1.f / 4.f) * x3; + } + else + return 0; +} + + + +static Points::const_iterator project_point_to_polygon_and_insert(Polygon &polygon, const Point &pt, double eps) +{ + assert(polygon.points.size() >= 2); + if (polygon.points.size() <= 1) + if (polygon.points.size() == 1) + return polygon.points.begin(); + + Point pt_min; + double d_min = std::numeric_limits::max(); + size_t i_min = size_t(-1); + + for (size_t i = 0; i < polygon.points.size(); ++ i) { + size_t j = i + 1; + if (j == polygon.points.size()) + j = 0; + const Point &p1 = polygon.points[i]; + const Point &p2 = polygon.points[j]; + const Slic3r::Point v_seg = p2 - p1; + const Slic3r::Point v_pt = pt - p1; + const int64_t l2_seg = int64_t(v_seg(0)) * int64_t(v_seg(0)) + int64_t(v_seg(1)) * int64_t(v_seg(1)); + int64_t t_pt = int64_t(v_seg(0)) * int64_t(v_pt(0)) + int64_t(v_seg(1)) * int64_t(v_pt(1)); + if (t_pt < 0) { + // Closest to p1. + double dabs = sqrt(int64_t(v_pt(0)) * int64_t(v_pt(0)) + int64_t(v_pt(1)) * int64_t(v_pt(1))); + if (dabs < d_min) { + d_min = dabs; + i_min = i; + pt_min = p1; + } + } + else if (t_pt > l2_seg) { + // Closest to p2. Then p2 is the starting point of another segment, which shall be discovered in the next step. + continue; + } else { + // Closest to the segment. + assert(t_pt >= 0 && t_pt <= l2_seg); + int64_t d_seg = int64_t(v_seg(1)) * int64_t(v_pt(0)) - int64_t(v_seg(0)) * int64_t(v_pt(1)); + double d = double(d_seg) / sqrt(double(l2_seg)); + double dabs = std::abs(d); + if (dabs < d_min) { + d_min = dabs; + i_min = i; + // Evaluate the foot point. + pt_min = p1; + double linv = double(d_seg) / double(l2_seg); + pt_min(0) = pt(0) - coord_t(floor(double(v_seg(1)) * linv + 0.5)); + pt_min(1) = pt(1) + coord_t(floor(double(v_seg(0)) * linv + 0.5)); + assert(Line(p1, p2).distance_to(pt_min) < scale_(1e-5)); + } + } + } + + assert(i_min != size_t(-1)); + if ((pt_min - polygon.points[i_min]).cast().norm() > eps) { + // Insert a new point on the segment i_min, i_min+1. + return polygon.points.insert(polygon.points.begin() + (i_min + 1), pt_min); + } + return polygon.points.begin() + i_min; +} + + + +static std::vector polygon_angles_at_vertices(const Polygon &polygon, const std::vector &lengths, float min_arm_length) +{ + assert(polygon.points.size() + 1 == lengths.size()); + if (min_arm_length > 0.25f * lengths.back()) + min_arm_length = 0.25f * lengths.back(); + + // Find the initial prev / next point span. + size_t idx_prev = polygon.points.size(); + size_t idx_curr = 0; + size_t idx_next = 1; + while (idx_prev > idx_curr && lengths.back() - lengths[idx_prev] < min_arm_length) + -- idx_prev; + while (idx_next < idx_prev && lengths[idx_next] < min_arm_length) + ++ idx_next; + + std::vector angles(polygon.points.size(), 0.f); + for (; idx_curr < polygon.points.size(); ++ idx_curr) { + // Move idx_prev up until the distance between idx_prev and idx_curr is lower than min_arm_length. + if (idx_prev >= idx_curr) { + while (idx_prev < polygon.points.size() && lengths.back() - lengths[idx_prev] + lengths[idx_curr] > min_arm_length) + ++ idx_prev; + if (idx_prev == polygon.points.size()) + idx_prev = 0; + } + while (idx_prev < idx_curr && lengths[idx_curr] - lengths[idx_prev] > min_arm_length) + ++ idx_prev; + // Move idx_prev one step back. + if (idx_prev == 0) + idx_prev = polygon.points.size() - 1; + else + -- idx_prev; + // Move idx_next up until the distance between idx_curr and idx_next is greater than min_arm_length. + if (idx_curr <= idx_next) { + while (idx_next < polygon.points.size() && lengths[idx_next] - lengths[idx_curr] < min_arm_length) + ++ idx_next; + if (idx_next == polygon.points.size()) + idx_next = 0; + } + while (idx_next < idx_curr && lengths.back() - lengths[idx_curr] + lengths[idx_next] < min_arm_length) + ++ idx_next; + // Calculate angle between idx_prev, idx_curr, idx_next. + const Point &p0 = polygon.points[idx_prev]; + const Point &p1 = polygon.points[idx_curr]; + const Point &p2 = polygon.points[idx_next]; + const Point v1 = p1 - p0; + const Point v2 = p2 - p1; + int64_t dot = int64_t(v1(0))*int64_t(v2(0)) + int64_t(v1(1))*int64_t(v2(1)); + int64_t cross = int64_t(v1(0))*int64_t(v2(1)) - int64_t(v1(1))*int64_t(v2(0)); + float angle = float(atan2(double(cross), double(dot))); + angles[idx_curr] = angle; + } + + return angles; +} + + + +void SeamPlacer::init(const Print& print) +{ + m_enforcers.clear(); + m_blockers.clear(); + //m_last_seam_position.clear(); + m_seam_history.clear(); + + for (const PrintObject* po : print.objects()) { + po->project_and_append_custom_facets(true, EnforcerBlockerType::ENFORCER, m_enforcers); + po->project_and_append_custom_facets(true, EnforcerBlockerType::BLOCKER, m_blockers); + } + const std::vector& nozzle_dmrs = print.config().nozzle_diameter.values; + float max_nozzle_dmr = *std::max_element(nozzle_dmrs.begin(), nozzle_dmrs.end()); + for (ExPolygons& explgs : m_enforcers) + explgs = Slic3r::offset_ex(explgs, scale_(max_nozzle_dmr)); + for (ExPolygons& explgs : m_blockers) + explgs = Slic3r::offset_ex(explgs, scale_(max_nozzle_dmr)); +} + + + +Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_position, + const ExtrusionLoop& loop, Point last_pos, coordf_t nozzle_dmr, + const PrintObject* po, bool was_clockwise, const EdgeGrid::Grid* lower_layer_edge_grid) +{ + Polygon polygon = loop.polygon(); + BoundingBox polygon_bb = polygon.bounding_box(); + const coord_t nozzle_r = coord_t(scale_(0.5 * nozzle_dmr) + 0.5); + + if (this->is_custom_seam_on_layer(layer_idx)) { + // Seam enf/blockers can begin and end in between the original vertices. + // Let add extra points in between and update the leghths. + polygon.densify(MINIMAL_POLYGON_SIDE); + } + + if (seam_position != spRandom) { + // Retrieve the last start position for this object. + float last_pos_weight = 1.f; + + if (seam_position == spAligned) { + // Seam is aligned to the seam at the preceding layer. + if (po != nullptr) { + std::optional pos = m_seam_history.get_last_seam(po, layer_idx, polygon_bb); + if (pos.has_value()) { + //last_pos = m_last_seam_position[po]; + last_pos = *pos; + last_pos_weight = is_custom_enforcer_on_layer(layer_idx) ? 0.f : 1.f; + } + } + } + else if (seam_position == spRear) { + // Object is centered around (0,0) in its current coordinate system. + last_pos.x() = 0; + last_pos.y() += coord_t(3. * po->bounding_box().radius()); + last_pos_weight = 5.f; + } if (seam_position == spNearest) { + // last_pos already contains current nozzle position + } + + // Insert a projection of last_pos into the polygon. + size_t last_pos_proj_idx; + { + auto it = project_point_to_polygon_and_insert(polygon, last_pos, 0.1 * nozzle_r); + last_pos_proj_idx = it - polygon.points.begin(); + } + + // Parametrize the polygon by its length. + std::vector lengths = polygon.parameter_by_length(); + + // For each polygon point, store a penalty. + // First calculate the angles, store them as penalties. The angles are caluculated over a minimum arm length of nozzle_r. + std::vector penalties = polygon_angles_at_vertices(polygon, lengths, float(nozzle_r)); + // No penalty for reflex points, slight penalty for convex points, high penalty for flat surfaces. + const float penaltyConvexVertex = 1.f; + const float penaltyFlatSurface = 5.f; + const float penaltyOverhangHalf = 10.f; + // Penalty for visible seams. + for (size_t i = 0; i < polygon.points.size(); ++ i) { + float ccwAngle = penalties[i]; + if (was_clockwise) + ccwAngle = - ccwAngle; + float penalty = 0; + if (ccwAngle <- float(0.6 * PI)) + // Sharp reflex vertex. We love that, it hides the seam perfectly. + penalty = 0.f; + else if (ccwAngle > float(0.6 * PI)) + // Seams on sharp convex vertices are more visible than on reflex vertices. + penalty = penaltyConvexVertex; + else if (ccwAngle < 0.f) { + // Interpolate penalty between maximum and zero. + penalty = penaltyFlatSurface * bspline_kernel(ccwAngle * float(PI * 2. / 3.)); + } else { + assert(ccwAngle >= 0.f); + // Interpolate penalty between maximum and the penalty for a convex vertex. + penalty = penaltyConvexVertex + (penaltyFlatSurface - penaltyConvexVertex) * bspline_kernel(ccwAngle * float(PI * 2. / 3.)); + } + // Give a negative penalty for points close to the last point or the prefered seam location. + float dist_to_last_pos_proj = (i < last_pos_proj_idx) ? + std::min(lengths[last_pos_proj_idx] - lengths[i], lengths.back() - lengths[last_pos_proj_idx] + lengths[i]) : + std::min(lengths[i] - lengths[last_pos_proj_idx], lengths.back() - lengths[i] + lengths[last_pos_proj_idx]); + float dist_max = 0.1f * lengths.back(); // 5.f * nozzle_dmr + penalty -= last_pos_weight * bspline_kernel(dist_to_last_pos_proj / dist_max); + penalties[i] = std::max(0.f, penalty); + } + + // Penalty for overhangs. + if (lower_layer_edge_grid) { + // Use the edge grid distance field structure over the lower layer to calculate overhangs. + coord_t nozzle_r = coord_t(std::floor(scale_(0.5 * nozzle_dmr) + 0.5)); + coord_t search_r = coord_t(std::floor(scale_(0.8 * nozzle_dmr) + 0.5)); + for (size_t i = 0; i < polygon.points.size(); ++ i) { + const Point &p = polygon.points[i]; + coordf_t dist; + // Signed distance is positive outside the object, negative inside the object. + // The point is considered at an overhang, if it is more than nozzle radius + // outside of the lower layer contour. + [[maybe_unused]] bool found = lower_layer_edge_grid->signed_distance(p, search_r, dist); + // If the approximate Signed Distance Field was initialized over lower_layer_edge_grid, + // then the signed distnace shall always be known. + assert(found); + penalties[i] += extrudate_overlap_penalty(float(nozzle_r), penaltyOverhangHalf, float(dist)); + } + } + + // Custom seam. Huge (negative) constant penalty is applied inside + // blockers (enforcers) to rule out points that should not win. + this->apply_custom_seam(polygon, penalties, lengths, layer_idx, seam_position); + + // Find a point with a minimum penalty. + size_t idx_min = std::min_element(penalties.begin(), penalties.end()) - penalties.begin(); + + if (seam_position != spAligned || ! is_custom_enforcer_on_layer(layer_idx)) { + // Very likely the weight of idx_min is very close to the weight of last_pos_proj_idx. + // In that case use last_pos_proj_idx instead. + float penalty_aligned = penalties[last_pos_proj_idx]; + float penalty_min = penalties[idx_min]; + float penalty_diff_abs = std::abs(penalty_min - penalty_aligned); + float penalty_max = std::max(penalty_min, penalty_aligned); + float penalty_diff_rel = (penalty_max == 0.f) ? 0.f : penalty_diff_abs / penalty_max; + // printf("Align seams, penalty aligned: %f, min: %f, diff abs: %f, diff rel: %f\n", penalty_aligned, penalty_min, penalty_diff_abs, penalty_diff_rel); + if (std::abs(penalty_diff_rel) < 0.05) { + // Penalty of the aligned point is very close to the minimum penalty. + // Align the seams as accurately as possible. + idx_min = last_pos_proj_idx; + } + } + + if (seam_position == spAligned && loop.role() == erExternalPerimeter) + m_seam_history.add_seam(po, polygon.points[idx_min], polygon_bb); + + + // Export the contour into a SVG file. + #if 0 + { + static int iRun = 0; + SVG svg(debug_out_path("GCode_extrude_loop-%d.svg", iRun ++)); + if (m_layer->lower_layer != NULL) + svg.draw(m_layer->lower_layer->slices); + for (size_t i = 0; i < loop.paths.size(); ++ i) + svg.draw(loop.paths[i].as_polyline(), "red"); + Polylines polylines; + for (size_t i = 0; i < loop.paths.size(); ++ i) + polylines.push_back(loop.paths[i].as_polyline()); + Slic3r::Polygons polygons; + coordf_t nozzle_dmr = EXTRUDER_CONFIG(nozzle_diameter); + coord_t delta = scale_(0.5*nozzle_dmr); + Slic3r::offset(polylines, &polygons, delta); +// for (size_t i = 0; i < polygons.size(); ++ i) svg.draw((Polyline)polygons[i], "blue"); + svg.draw(last_pos, "green", 3); + svg.draw(polygon.points[idx_min], "yellow", 3); + svg.Close(); + } + #endif + return polygon.points[idx_min]; + + } else { // spRandom + if (loop.loop_role() == elrContourInternalPerimeter && loop.role() != erExternalPerimeter) { + // This loop does not contain any other loop. Set a random position. + // The other loops will get a seam close to the random point chosen + // on the innermost contour. + //FIXME This works correctly for inner contours first only. + last_pos = this->get_random_seam(layer_idx, polygon); + } + if (loop.role() == erExternalPerimeter && is_custom_seam_on_layer(layer_idx)) { + // There is a possibility that the loop will be influenced by custom + // seam enforcer/blocker. In this case do not inherit the seam + // from internal loops (which may conflict with the custom selection + // and generate another random one. + bool saw_custom = false; + Point candidate = this->get_random_seam(layer_idx, polygon, &saw_custom); + if (saw_custom) + last_pos = candidate; + } + return last_pos; + } +} + + +Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon, + bool* saw_custom) const +{ + // Parametrize the polygon by its length. + std::vector lengths = polygon.parameter_by_length(); + + // Which of the points are inside enforcers/blockers? + std::vector enforcers_idxs; + std::vector blockers_idxs; + this->get_enforcers_and_blockers(layer_idx, polygon, enforcers_idxs, blockers_idxs); + + bool has_enforcers = ! enforcers_idxs.empty(); + bool has_blockers = ! blockers_idxs.empty(); + if (saw_custom) + *saw_custom = has_enforcers || has_blockers; + + // FIXME FIXME FIXME: This is just to test the outcome and whether it is + // reasonable. The algorithm should really sum the length of all available + // pieces, get a random length and find the respective point. + float rand_len = 0.f; + size_t pt_idx = 0; + do { + rand_len = lengths.back() * (rand()/float(RAND_MAX)); + auto it = std::lower_bound(lengths.begin(), lengths.end(), rand_len); + pt_idx = it == lengths.end() ? 0 : (it-lengths.begin()-1); + + // If there are blockers and the point is inside, repeat. + // If there are enforcers and the point is NOT inside, repeat. + } while ((has_blockers && std::binary_search(blockers_idxs.begin(), blockers_idxs.end(), pt_idx)) + || (has_enforcers && ! std::binary_search(enforcers_idxs.begin(), enforcers_idxs.end(), pt_idx))); + + if (! has_enforcers && ! has_blockers) { + // The polygon may be too coarse, calculate the point exactly. + bool last_seg = pt_idx == polygon.points.size()-1; + size_t next_idx = last_seg ? 0 : pt_idx+1; + const Point& prev = polygon.points[pt_idx]; + const Point& next = polygon.points[next_idx]; + assert(next_idx == 0 || pt_idx+1 == next_idx); + coordf_t diff_x = next.x() - prev.x(); + coordf_t diff_y = next.y() - prev.y(); + coordf_t dist = lengths[last_seg ? pt_idx+1 : next_idx] - lengths[pt_idx]; + return Point(prev.x() + (rand_len - lengths[pt_idx]) * (diff_x/dist), + prev.y() + (rand_len - lengths[pt_idx]) * (diff_y/dist)); + + } else { + // The polygon should be dense enough. + return polygon.points[pt_idx]; + } +} + + + + + + + + +void SeamPlacer::get_enforcers_and_blockers(size_t layer_id, + const Polygon& polygon, + std::vector& enforcers_idxs, + std::vector& blockers_idxs) const +{ + enforcers_idxs.clear(); + blockers_idxs.clear(); + + // FIXME: This is quadratic and it should be improved, maybe by building + // an AABB tree (or at least utilize bounding boxes). + for (size_t i=0; i find_enforcer_centers(const Polygon& polygon, + const std::vector& lengths, + const std::vector& enforcers_idxs) +{ + std::vector out; + assert(polygon.points.size()+1 == lengths.size()); + assert(std::is_sorted(enforcers_idxs.begin(), enforcers_idxs.end())); + if (polygon.size() < 2 || enforcers_idxs.empty()) + return out; + + auto get_center_idx = [&polygon, &lengths](size_t start_idx, size_t end_idx) -> size_t { + assert(end_idx >= start_idx); + if (start_idx == end_idx) + return start_idx; + float t_c = lengths[start_idx] + 0.5f * (lengths[end_idx] - lengths[start_idx]); + auto it = std::lower_bound(lengths.begin() + start_idx, lengths.begin() + end_idx, t_c); + int ret = it - lengths.begin(); + return ret; + }; + + int last_enforcer_start_idx = enforcers_idxs.front(); + bool first_pt_in_list = enforcers_idxs.front() != 0; + bool last_pt_in_list = enforcers_idxs.back() == polygon.points.size() - 1; + bool wrap_around = last_pt_in_list && first_pt_in_list; + + for (size_t i=0; i t_e) ? t_s + half_dist : t_e - half_dist; + + auto it = std::lower_bound(lengths.begin(), lengths.end(), t_c); + out[0] = it - lengths.begin(); + if (out[0] == lengths.size() - 1) + --out[0]; + assert(out[0] < lengths.size() - 1); + } + return out; +} + + + +void SeamPlacer::apply_custom_seam(const Polygon& polygon, + std::vector& penalties, + const std::vector& lengths, + int layer_id, SeamPosition seam_position) const +{ + if (! is_custom_seam_on_layer(layer_id)) + return; + + std::vector enforcers_idxs; + std::vector blockers_idxs; + this->get_enforcers_and_blockers(layer_id, polygon, enforcers_idxs, blockers_idxs); + + for (size_t i : enforcers_idxs) { + assert(i < penalties.size()); + penalties[i] -= float(ENFORCER_BLOCKER_PENALTY); + } + for (size_t i : blockers_idxs) { + assert(i < penalties.size()); + penalties[i] += float(ENFORCER_BLOCKER_PENALTY); + } + if (seam_position == spAligned) { + std::vector enf_centers = find_enforcer_centers(polygon, lengths, enforcers_idxs); + for (size_t idx : enf_centers) { + assert(idx < penalties.size()); + penalties[idx] += ENFORCER_CENTER_PENALTY; + } + } + +//////////////////////// +// std::ostringstream os; +// os << std::setw(3) << std::setfill('0') << layer_id; +// int a = scale_(20.); +// SVG svg("custom_seam" + os.str() + ".svg", BoundingBox(Point(-a, -a), Point(a, a))); +// /*if (! m_enforcers.empty()) +// svg.draw(m_enforcers[layer_id], "blue"); +// if (! m_blockers.empty()) +// svg.draw(m_blockers[layer_id], "red");*/ + +// size_t min_idx = std::min_element(penalties.begin(), penalties.end()) - penalties.begin(); + +// //svg.draw(polygon.points[idx_min], "red", 6e5); +// for (size_t i=0; i SeamHistory::get_last_seam(const PrintObject* po, size_t layer_id, const BoundingBox& island_bb) +{ + assert(layer_id >= m_layer_id); + if (layer_id > m_layer_id) { + // Get seam was called for different layer than last time. + m_data_last_layer = m_data_this_layer; + m_data_this_layer.clear(); + m_layer_id = layer_id; + } + + + + std::optional out; + + auto seams_it = m_data_last_layer.find(po); + if (seams_it == m_data_last_layer.end()) + return out; + + const std::vector& seam_data_po = seams_it->second; + + // Find a bounding-box on the last layer that is close to one we see now. + double min_score = std::numeric_limits::max(); + for (const SeamPoint& sp : seam_data_po) { + const BoundingBox& bb = sp.m_island_bb; + + if (! bb.overlap(island_bb)) { + // This bb does not even overlap. It is likely unrelated. + continue; + } + + double score = std::pow(bb.min(0) - island_bb.min(0), 2.) + + std::pow(bb.min(1) - island_bb.min(1), 2.) + + std::pow(bb.max(0) - island_bb.max(0), 2.) + + std::pow(bb.max(1) - island_bb.max(1), 2.); + + if (score < min_score) { + min_score = score; + out = sp.m_pos; + } + } + + return out; +} + + + +void SeamHistory::add_seam(const PrintObject* po, const Point& pos, const BoundingBox& island_bb) +{ + m_data_this_layer[po].push_back({pos, island_bb});; +} + + + +void SeamHistory::clear() +{ + m_layer_id = 0; + m_data_last_layer.clear(); + m_data_this_layer.clear(); +} + + +} diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp new file mode 100644 index 0000000000..e603b7d57b --- /dev/null +++ b/src/libslic3r/GCode/SeamPlacer.hpp @@ -0,0 +1,89 @@ +#ifndef libslic3r_SeamPlacer_hpp_ +#define libslic3r_SeamPlacer_hpp_ + +#include + +#include "libslic3r/ExPolygon.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/BoundingBox.hpp" + +namespace Slic3r { + +class PrintObject; +class ExtrusionLoop; +class Print; +namespace EdgeGrid { class Grid; } + + +class SeamHistory { +public: + SeamHistory() { clear(); } + std::optional get_last_seam(const PrintObject* po, size_t layer_id, const BoundingBox& island_bb); + void add_seam(const PrintObject* po, const Point& pos, const BoundingBox& island_bb); + void clear(); + +private: + struct SeamPoint { + Point m_pos; + BoundingBox m_island_bb; + }; + + std::map> m_data_last_layer; + std::map> m_data_this_layer; + size_t m_layer_id; +}; + + + +class SeamPlacer { +public: + void init(const Print& print); + + Point get_seam(const size_t layer_idx, const SeamPosition seam_position, + const ExtrusionLoop& loop, Point last_pos, + coordf_t nozzle_diameter, const PrintObject* po, + bool was_clockwise, const EdgeGrid::Grid* lower_layer_edge_grid); + +private: + std::vector m_enforcers; + std::vector m_blockers; + + //std::map m_last_seam_position; + SeamHistory m_seam_history; + + // Get indices of points inside enforcers and blockers. + void get_enforcers_and_blockers(size_t layer_id, + const Polygon& polygon, + std::vector& enforcers_idxs, + std::vector& blockers_idxs) const; + + // Apply penalties to points inside enforcers/blockers. + void apply_custom_seam(const Polygon& polygon, + std::vector& penalties, + const std::vector& lengths, + int layer_id, SeamPosition seam_position) const; + + // Return random point of a polygon. The distribution will be uniform + // along the contour and account for enforcers and blockers. + Point get_random_seam(size_t layer_idx, const Polygon& polygon, + bool* saw_custom = nullptr) const; + + // Is there any enforcer/blocker on this layer? + bool is_custom_seam_on_layer(size_t layer_id) const { + return is_custom_enforcer_on_layer(layer_id) + || is_custom_blocker_on_layer(layer_id); + } + + bool is_custom_enforcer_on_layer(size_t layer_id) const { + return (! m_enforcers.empty() && ! m_enforcers[layer_id].empty()); + } + + bool is_custom_blocker_on_layer(size_t layer_id) const { + return (! m_blockers.empty() && ! m_blockers[layer_id].empty()); + } +}; + + +} + +#endif // libslic3r_SeamPlacer_hpp_ diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index c0f778687c..8bb441786f 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1,36 +1,27 @@ -/* - -TODO LIST ---------- - -1. cooling moves - DONE -2. account for perimeter and finish_layer extrusions and subtract it from last wipe - DONE -3. priming extrusions (last wipe must clear the color) - DONE -4. Peter's wipe tower - layer's are not exactly square -5. Peter's wipe tower - variable width for higher levels -6. Peter's wipe tower - make sure it is not too sparse (apply max_bridge_distance and make last wipe longer) -7. Peter's wipe tower - enable enhanced first layer adhesion - -*/ - #include "WipeTower.hpp" -#include -#include +#include #include #include #include +#if ENABLE_GCODE_VIEWER +#include "GCodeProcessor.hpp" +#else #include "Analyzer.hpp" +#endif // ENABLE_GCODE_VIEWER #include "BoundingBox.hpp" -#if defined(__linux) || defined(__GNUC__ ) -#include -#endif /* __linux */ -#ifdef _MSC_VER -#define strcasecmp _stricmp -#endif +// Experimental "Peter's wipe tower" feature was partially implemented, inspired by +// PJR's idea of alternating two perpendicular wiping directions on a square tower. +// It is probably never going to be finished, there are multiple remaining issues +// and there is probably no need to go down this way. m_peters_wipe_tower variable +// turns this on, maybe it should just be removed. Anyway, the issues are +// - layer's are not exactly square +// - variable width for higher levels +// - make sure it is not too sparse (apply max_bridge_distance and make last wipe longer) +// - enable enhanced first layer adhesion namespace Slic3r @@ -47,36 +38,69 @@ public: m_extrusion_flow(0.f), m_preview_suppressed(false), m_elapsed_time(0.f), +#if !ENABLE_GCODE_VIEWER || ENABLE_GCODE_VIEWER_DATA_CHECKING m_default_analyzer_line_width(line_width), +#endif // !ENABLE_GCODE_VIEWER || ENABLE_GCODE_VIEWER_DATA_CHECKING m_gcode_flavor(flavor), m_filpar(filament_parameters) { // adds tag for analyzer: char buf[64]; +#if ENABLE_GCODE_VIEWER + sprintf(buf, ";%s%f\n", GCodeProcessor::Height_Tag.c_str(), m_layer_height); // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming + m_gcode += buf; + sprintf(buf, ";%s%s\n", GCodeProcessor::Extrusion_Role_Tag.c_str(), ExtrusionEntity::role_to_string(erWipeTower).c_str()); + m_gcode += buf; +#else sprintf(buf, ";%s%f\n", GCodeAnalyzer::Height_Tag.c_str(), m_layer_height); // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming m_gcode += buf; sprintf(buf, ";%s%d\n", GCodeAnalyzer::Extrusion_Role_Tag.c_str(), erWipeTower); m_gcode += buf; +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER_DATA_CHECKING change_analyzer_line_width(line_width); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING } - WipeTowerWriter& change_analyzer_line_width(float line_width) { - // adds tag for analyzer: - char buf[64]; - sprintf(buf, ";%s%f\n", GCodeAnalyzer::Width_Tag.c_str(), line_width); - m_gcode += buf; - return *this; +#if ENABLE_GCODE_VIEWER_DATA_CHECKING + WipeTowerWriter& change_analyzer_line_width(float line_width) { + // adds tag for analyzer: + char buf[64]; + sprintf(buf, ";%s%f\n", GCodeProcessor::Width_Tag.c_str(), line_width); + m_gcode += buf; + return *this; } - WipeTowerWriter& change_analyzer_mm3_per_mm(float len, float e) { - static const float area = float(M_PI) * 1.75f * 1.75f / 4.f; - float mm3_per_mm = (len == 0.f ? 0.f : area * e / len); - // adds tag for analyzer: - char buf[64]; - sprintf(buf, ";%s%f\n", GCodeAnalyzer::Mm3_Per_Mm_Tag.c_str(), mm3_per_mm); - m_gcode += buf; - return *this; + WipeTowerWriter& change_analyzer_mm3_per_mm(float len, float e) { + static const float area = float(M_PI) * 1.75f * 1.75f / 4.f; + float mm3_per_mm = (len == 0.f ? 0.f : area * e / len); + // adds tag for processor: + char buf[64]; + sprintf(buf, ";%s%f\n", GCodeProcessor::Mm3_Per_Mm_Tag.c_str(), mm3_per_mm); + m_gcode += buf; + return *this; } +#else +#if !ENABLE_GCODE_VIEWER + WipeTowerWriter& change_analyzer_line_width(float line_width) { + // adds tag for analyzer: + char buf[64]; + sprintf(buf, ";%s%f\n", GCodeAnalyzer::Width_Tag.c_str(), line_width); + m_gcode += buf; + return *this; + } + + WipeTowerWriter& change_analyzer_mm3_per_mm(float len, float e) { + static const float area = float(M_PI) * 1.75f * 1.75f / 4.f; + float mm3_per_mm = (len == 0.f ? 0.f : area * e / len); + // adds tag for analyzer: + char buf[64]; + sprintf(buf, ";%s%f\n", GCodeAnalyzer::Mm3_Per_Mm_Tag.c_str(), mm3_per_mm); + m_gcode += buf; + return *this; + } +#endif // !ENABLE_GCODE_VIEWER +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING WipeTowerWriter& set_initial_position(const Vec2f &pos, float width = 0.f, float depth = 0.f, float internal_angle = 0.f) { m_wipe_tower_width = width; @@ -102,7 +126,7 @@ public: } WipeTowerWriter& disable_linear_advance() { - m_gcode += (m_gcode_flavor == gcfRepRap + m_gcode += (m_gcode_flavor == gcfRepRapSprinter || m_gcode_flavor == gcfRepRapFirmware ? (std::string("M572 D") + std::to_string(m_current_tool) + " S0\n") : std::string("M900 K0\n")); return *this; @@ -111,8 +135,13 @@ public: // Suppress / resume G-code preview in Slic3r. Slic3r will have difficulty to differentiate the various // filament loading and cooling moves from normal extrusion moves. Therefore the writer // is asked to suppres output of some lines, which look like extrusions. - WipeTowerWriter& suppress_preview() { change_analyzer_line_width(0.f); m_preview_suppressed = true; return *this; } - WipeTowerWriter& resume_preview() { change_analyzer_line_width(m_default_analyzer_line_width); m_preview_suppressed = false; return *this; } +#if !ENABLE_GCODE_VIEWER || ENABLE_GCODE_VIEWER_DATA_CHECKING + WipeTowerWriter& suppress_preview() { change_analyzer_line_width(0.f); m_preview_suppressed = true; return *this; } + WipeTowerWriter& resume_preview() { change_analyzer_line_width(m_default_analyzer_line_width); m_preview_suppressed = false; return *this; } +#else + WipeTowerWriter& suppress_preview() { m_preview_suppressed = true; return *this; } + WipeTowerWriter& resume_preview() { m_preview_suppressed = false; return *this; } +#endif // !ENABLE_GCODE_VIEWER || ENABLE_GCODE_VIEWER_DATA_CHECKING WipeTowerWriter& feedrate(float f) { @@ -149,8 +178,14 @@ public: Vec2f rot(this->rotate(Vec2f(x,y))); // this is where we want to go if (! m_preview_suppressed && e > 0.f && len > 0.f) { +#if ENABLE_GCODE_VIEWER_DATA_CHECKING change_analyzer_mm3_per_mm(len, e); - // Width of a squished extrusion, corrected for the roundings of the squished extrusions. +#else +#if !ENABLE_GCODE_VIEWER + change_analyzer_mm3_per_mm(len, e); +#endif // !ENABLE_GCODE_VIEWER +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + // Width of a squished extrusion, corrected for the roundings of the squished extrusions. // This is left zero if it is a travel move. float width = e * m_filpar[0].filament_area / (len * m_layer_height); // Correct for the roundings of a squished extrusion. @@ -351,7 +386,7 @@ public: // Set digital trimpot motor WipeTowerWriter& set_extruder_trimpot(int current) { - if (m_gcode_flavor == gcfRepRap) + if (m_gcode_flavor == gcfRepRapSprinter || m_gcode_flavor == gcfRepRapFirmware) m_gcode += "M906 E"; else m_gcode += "M907 E"; @@ -393,9 +428,26 @@ public: WipeTowerWriter& append(const std::string& text) { m_gcode += text; return *this; } + std::vector wipe_path() const + { + return m_wipe_path; + } + + WipeTowerWriter& add_wipe_point(const Vec2f& pt) + { + m_wipe_path.push_back(rotate(pt)); + return *this; + } + + WipeTowerWriter& add_wipe_point(float x, float y) + { + return add_wipe_point(Vec2f(x, y)); + } + private: Vec2f m_start_pos; Vec2f m_current_pos; + std::vector m_wipe_path; float m_current_z; float m_current_feedrate; size_t m_current_tool; @@ -411,7 +463,9 @@ private: float m_wipe_tower_depth = 0.f; unsigned m_last_fan_speed = 0; int current_temp = -1; +#if !ENABLE_GCODE_VIEWER || ENABLE_GCODE_VIEWER_DATA_CHECKING const float m_default_analyzer_line_width; +#endif // !ENABLE_GCODE_VIEWER || ENABLE_GCODE_VIEWER_DATA_CHECKING float m_used_filament_length = 0.f; GCodeFlavor m_gcode_flavor; const std::vector& m_filpar; @@ -467,6 +521,27 @@ private: +WipeTower::ToolChangeResult WipeTower::construct_tcr(WipeTowerWriter& writer, + bool priming, + size_t old_tool) const +{ + ToolChangeResult result; + result.priming = priming; + result.initial_tool = int(old_tool); + result.new_tool = int(this->m_current_tool); + result.print_z = this->m_z_pos; + result.layer_height = this->m_layer_height; + result.elapsed_time = writer.elapsed_time(); + result.start_pos = writer.start_pos_rotated(); + result.end_pos = priming ? writer.pos() : writer.pos_rotated(); + result.gcode = std::move(writer.gcode()); + result.extrusions = std::move(writer.extrusions()); + result.wipe_path = std::move(writer.wipe_path()); + return result; +} + + + WipeTower::WipeTower(const PrintConfig& config, const std::vector>& wiping_matrix, size_t initial_tool) : m_semm(config.single_extruder_multi_material.value), m_wipe_tower_pos(config.wipe_tower_x, config.wipe_tower_y), @@ -625,20 +700,6 @@ std::vector WipeTower::prime( if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - ToolChangeResult result; - result.priming = true; - result.initial_tool = int(old_tool); - result.new_tool = int(m_current_tool); - result.print_z = this->m_z_pos; - result.layer_height = this->m_layer_height; - result.gcode = writer.gcode(); - result.elapsed_time = writer.elapsed_time(); - result.extrusions = writer.extrusions(); - result.start_pos = writer.start_pos_rotated(); - result.end_pos = writer.pos(); - - results.push_back(std::move(result)); - // This is the last priming toolchange - finish priming if (idx_tool+1 == tools.size()) { // Reset the extruder current to a normal value. @@ -652,6 +713,8 @@ std::vector WipeTower::prime( ";------------------\n" "\n\n"); } + + results.emplace_back(construct_tcr(writer, true, old_tool)); } m_old_temperature = -1; // If the priming is turned off in config, the temperature changing commands will not actually appear @@ -663,7 +726,7 @@ std::vector WipeTower::prime( return results; } -WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool, bool last_in_layer) +WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool) { if ( m_print_brim ) return toolchange_Brim(); @@ -740,7 +803,9 @@ WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool, bool last_in_lay else { writer.rectangle(Vec2f::Zero(), m_wipe_tower_width, m_layer_info->depth + m_perimeter_width); if (layer_finished()) { // no finish_layer will be called, we must wipe the nozzle - writer.travel(writer.x()> m_wipe_tower_width / 2.f ? 0.f : m_wipe_tower_width, writer.y()); + writer.add_wipe_point(writer.x(), writer.y()) + .add_wipe_point(writer.x()> m_wipe_tower_width / 2.f ? 0.f : m_wipe_tower_width, writer.y()); + } } } @@ -759,18 +824,7 @@ WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool, bool last_in_lay if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - ToolChangeResult result; - result.priming = false; - result.initial_tool = int(old_tool); - result.new_tool = int(m_current_tool); - result.print_z = this->m_z_pos; - result.layer_height = this->m_layer_height; - result.gcode = writer.gcode(); - result.elapsed_time = writer.elapsed_time(); - result.extrusions = writer.extrusions(); - result.start_pos = writer.start_pos_rotated(); - result.end_pos = writer.pos_rotated(); - return result; + return construct_tcr(writer, false, old_tool); } WipeTower::ToolChangeResult WipeTower::toolchange_Brim(bool sideOnly, float y_offset) @@ -803,13 +857,15 @@ WipeTower::ToolChangeResult WipeTower::toolchange_Brim(bool sideOnly, float y_of for (size_t i = 0; i < 4; ++ i) { box.expand(spacing); writer.travel (box.ld, 7000) - .extrude(box.lu, 2100).extrude(box.ru) - .extrude(box.rd ).extrude(box.ld); + .extrude(box.lu, 2100).extrude(box.ru) + .extrude(box.rd ).extrude(box.ld); } - writer.travel(wipeTower_box.ld, 7000); // Move to the front left corner. - writer.travel(wipeTower_box.rd) // Always wipe the nozzle with a long wipe to reduce stringing when moving away from the wipe tower. - .travel(wipeTower_box.ld); + box.expand(-spacing); + writer.add_wipe_point(writer.x(), writer.y()) + .add_wipe_point(box.ld) + .add_wipe_point(box.rd); + writer.append("; CP WIPE TOWER FIRST LAYER BRIM END\n" ";-----------------------------------\n"); @@ -823,18 +879,7 @@ WipeTower::ToolChangeResult WipeTower::toolchange_Brim(bool sideOnly, float y_of if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - ToolChangeResult result; - result.priming = false; - result.initial_tool = int(old_tool); - result.new_tool = int(m_current_tool); - result.print_z = this->m_z_pos; - result.layer_height = this->m_layer_height; - result.gcode = writer.gcode(); - result.elapsed_time = writer.elapsed_time(); - result.extrusions = writer.extrusions(); - result.start_pos = writer.start_pos_rotated(); - result.end_pos = writer.pos_rotated(); - return result; + return construct_tcr(writer, false, old_tool); } @@ -852,8 +897,12 @@ void WipeTower::toolchange_Unload( const float line_width = m_perimeter_width * m_filpar[m_current_tool].ramming_line_width_multiplicator; // desired ramming line thickness const float y_step = line_width * m_filpar[m_current_tool].ramming_step_multiplicator * m_extra_spacing; // spacing between lines in mm +#if ENABLE_GCODE_VIEWER_DATA_CHECKING writer.append("; CP TOOLCHANGE UNLOAD\n") - .change_analyzer_line_width(line_width); + .change_analyzer_line_width(line_width); +#else + writer.append("; CP TOOLCHANGE UNLOAD\n"); +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING unsigned i = 0; // iterates through ramming_speed m_left_to_right = true; // current direction of ramming @@ -873,13 +922,6 @@ void WipeTower::toolchange_Unload( else sparse_beginning_y += (m_layer_info-1)->toolchanges_depth() + m_perimeter_width; - //debugging: - /* float oldx = writer.x(); - float oldy = writer.y(); - writer.travel(xr,sparse_beginning_y); - writer.extrude(xr+5,writer.y()); - writer.travel(oldx,oldy);*/ - float sum_of_depths = 0.f; for (const auto& tch : m_layer_info->tool_changes) { // let's find this toolchange if (tch.old_tool == m_current_tool) { @@ -887,13 +929,6 @@ void WipeTower::toolchange_Unload( float ramming_end_y = sum_of_depths; ramming_end_y -= (y_step/m_extra_spacing-m_perimeter_width) / 2.f; // center of final ramming line - // debugging: - /*float oldx = writer.x(); - float oldy = writer.y(); - writer.travel(xl,ramming_end_y); - writer.extrude(xl-15,writer.y()); - writer.travel(oldx,oldy);*/ - if ( (m_current_shape == SHAPE_REVERSED && ramming_end_y < sparse_beginning_y - 0.5f*m_perimeter_width ) || (m_current_shape == SHAPE_NORMAL && ramming_end_y > sparse_beginning_y + 0.5f*m_perimeter_width ) ) { @@ -930,7 +965,9 @@ void WipeTower::toolchange_Unload( } } Vec2f end_of_ramming(writer.x(),writer.y()); +#if ENABLE_GCODE_VIEWER_DATA_CHECKING writer.change_analyzer_line_width(m_perimeter_width); // so the next lines are not affected by ramming_line_width_multiplier +#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING // Retraction: float old_x = writer.x(); @@ -942,12 +979,6 @@ void WipeTower::toolchange_Unload( .retract(0.70f * total_retraction_distance, 1.0f * m_filpar[m_current_tool].unloading_speed * 60.f) .retract(0.20f * total_retraction_distance, 0.5f * m_filpar[m_current_tool].unloading_speed * 60.f) .retract(0.10f * total_retraction_distance, 0.3f * m_filpar[m_current_tool].unloading_speed * 60.f) - - /*.load_move_x_advanced(turning_point, -15.f, 83.f, 50.f) // this is done at fixed speed - .load_move_x_advanced(old_x, -0.70f * total_retraction_distance, 1.0f * m_filpar[m_current_tool].unloading_speed) - .load_move_x_advanced(turning_point, -0.20f * total_retraction_distance, 0.5f * m_filpar[m_current_tool].unloading_speed) - .load_move_x_advanced(old_x, -0.10f * total_retraction_distance, 0.3f * m_filpar[m_current_tool].unloading_speed) - .travel(old_x, writer.y()) // in case previous move was shortened to limit feedrate*/ .resume_preview(); } // Wipe tower should only change temperature with single extruder MM. Otherwise, all temperatures should @@ -1040,11 +1071,6 @@ void WipeTower::toolchange_Load( writer.append("; CP TOOLCHANGE LOAD\n") .suppress_preview() - /*.load_move_x_advanced(turning_point, 0.2f * edist, 0.3f * m_filpar[m_current_tool].loading_speed) // Acceleration - .load_move_x_advanced(oldx, 0.5f * edist, m_filpar[m_current_tool].loading_speed) // Fast phase - .load_move_x_advanced(turning_point, 0.2f * edist, 0.3f * m_filpar[m_current_tool].loading_speed) // Slowing down - .load_move_x_advanced(oldx, 0.1f * edist, 0.1f * m_filpar[m_current_tool].loading_speed) // Super slow*/ - .load(0.2f * edist, 60.f * m_filpar[m_current_tool].loading_speed_start) .load_move_x_advanced(turning_point, 0.7f * edist, m_filpar[m_current_tool].loading_speed) // Fast phase .load_move_x_advanced(oldx, 0.1f * edist, 0.1f * m_filpar[m_current_tool].loading_speed) // Super slow*/ @@ -1114,11 +1140,14 @@ void WipeTower::toolchange_Wipe( m_left_to_right = !m_left_to_right; } - // this is neither priming nor not the last toolchange on this layer - we are going back to the model - wipe the nozzle + // this is neither priming nor not the last toolchange on this layer - we are + // going back to the model - wipe the nozzle. if (m_layer_info != m_plan.end() && m_current_tool != m_layer_info->tool_changes.back().new_tool) { m_left_to_right = !m_left_to_right; - writer.travel(writer.x(), writer.y() - dy) - .travel(m_left_to_right ? m_wipe_tower_width : 0.f, writer.y()); + writer.add_wipe_point(writer.x(), writer.y()) + .add_wipe_point(writer.x(), writer.y() - dy) + .add_wipe_point(m_left_to_right ? m_wipe_tower_width : 0.f, writer.y() - dy); + } writer.set_extrusion_flow(m_extrusion_flow); // Reset the extrusion flow. @@ -1182,7 +1211,8 @@ WipeTower::ToolChangeResult WipeTower::finish_layer() writer.extrude(box.rd.x() - m_perimeter_width / 2.f, writer.y() + 0.5f * step); writer.extrude(box.ld.x() + m_perimeter_width / 2.f, writer.y()); } - writer.travel(box.rd.x()-m_perimeter_width/2.f,writer.y()); // wipe the nozzle + writer.add_wipe_point(writer.x(), writer.y()) + .add_wipe_point(box.rd.x()-m_perimeter_width/2.f,writer.y()); } else { // Extrude a sparse infill to support the material to be printed above. const float dy = (fill_box.lu.y() - fill_box.ld.y() - m_perimeter_width); @@ -1201,10 +1231,13 @@ WipeTower::ToolChangeResult WipeTower::finish_layer() writer.travel(x,writer.y()); writer.extrude(x,i%2 ? fill_box.rd.y() : fill_box.ru.y()); } - writer.travel(left,writer.y(),7200); // wipes the nozzle before moving away from the wipe tower + writer.add_wipe_point(Vec2f(writer.x(), writer.y())) + .add_wipe_point(Vec2f(left, writer.y())); + } + else { + writer.add_wipe_point(Vec2f(writer.x(), writer.y())) + .add_wipe_point(Vec2f(right, writer.y())); } - else - writer.travel(right,writer.y(),7200); // wipes the nozzle before moving away from the wipe tower } writer.append("; CP EMPTY GRID END\n" ";------------------\n\n\n\n\n\n\n"); @@ -1218,18 +1251,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer() if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - ToolChangeResult result; - result.priming = false; - result.initial_tool = int(old_tool); - result.new_tool = int(m_current_tool); - result.print_z = this->m_z_pos; - result.layer_height = this->m_layer_height; - result.gcode = writer.gcode(); - result.elapsed_time = writer.elapsed_time(); - result.extrusions = writer.extrusions(); - result.start_pos = writer.start_pos_rotated(); - result.end_pos = writer.pos_rotated(); - return result; + return construct_tcr(writer, false, old_tool); } // Appends a toolchange into m_plan and calculates neccessary depth of the corresponding box @@ -1300,7 +1322,7 @@ void WipeTower::save_on_last_wipe() continue; for (const auto &toolchange : m_layer_info->tool_changes) - tool_change(toolchange.new_tool, false); + tool_change(toolchange.new_tool); float width = m_wipe_tower_width - 3*m_perimeter_width; // width we draw into float length_to_save = 2*(m_wipe_tower_width+m_wipe_tower_depth) + (!layer_finished() ? finish_layer().total_extrusion_length_in_plane() : 0.f); @@ -1362,7 +1384,7 @@ void WipeTower::generate(std::vector> & m_y_shift = (m_wipe_tower_depth-m_layer_info->depth-m_perimeter_width)/2.f; for (const auto &toolchange : layer.tool_changes) - layer_result.emplace_back(tool_change(toolchange.new_tool, false)); + layer_result.emplace_back(tool_change(toolchange.new_tool)); if (! layer_finished()) { auto finish_layer_toolchange = finish_layer(); @@ -1376,6 +1398,7 @@ void WipeTower::generate(std::vector> & last_toolchange.gcode += finish_layer_toolchange.gcode; last_toolchange.extrusions.insert(last_toolchange.extrusions.end(), finish_layer_toolchange.extrusions.begin(), finish_layer_toolchange.extrusions.end()); last_toolchange.end_pos = finish_layer_toolchange.end_pos; + last_toolchange.wipe_path = finish_layer_toolchange.wipe_path; } else layer_result.emplace_back(std::move(finish_layer_toolchange)); @@ -1411,4 +1434,5 @@ void WipeTower::make_wipe_tower_square() lay.extra_spacing = lay.depth / lay.toolchanges_depth(); } -}; // namespace Slic3r + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index f353151575..0f9b0b87d1 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -57,6 +57,13 @@ public: // Is this a priming extrusion? (If so, the wipe tower rotation & translation will not be applied later) bool priming; + // Pass a polyline so that normal G-code generator can do a wipe for us. + // The wipe cannot be done by the wipe tower because it has to pass back + // a loaded extruder, so it would have to either do a wipe with no retraction + // (leading to https://github.com/prusa3d/PrusaSlicer/issues/2834) or do + // an extra retraction-unretraction pair. + std::vector wipe_path; + // Initial tool int initial_tool; @@ -77,6 +84,12 @@ public: } }; + // Construct ToolChangeResult from current state of WipeTower and WipeTowerWriter. + // WipeTowerWriter is moved from ! + ToolChangeResult construct_tcr(WipeTowerWriter& writer, + bool priming, + size_t old_tool) const; + // x -- x coordinates of wipe tower in mm ( left bottom corner ) // y -- y coordinates of wipe tower in mm ( left bottom corner ) // width -- width of wipe tower in mm ( default 60 mm - leave as it is ) @@ -154,7 +167,7 @@ public: // Returns gcode for a toolchange and a final print head position. // On the first layer, extrude a brim around the future wipe tower first. - ToolChangeResult tool_change(size_t new_tool, bool last_in_layer); + ToolChangeResult tool_change(size_t new_tool); // Fill the unfilled space with a sparse infill. // Call this method only if layer_finished() is false. diff --git a/src/libslic3r/GCodeReader.cpp b/src/libslic3r/GCodeReader.cpp index e68bc5ad29..ee24d5bb76 100644 --- a/src/libslic3r/GCodeReader.cpp +++ b/src/libslic3r/GCodeReader.cpp @@ -1,6 +1,9 @@ #include "GCodeReader.hpp" #include #include +#if ENABLE_GCODE_VIEWER +#include +#endif // ENABLE_GCODE_VIEWER #include #include #include @@ -113,9 +116,18 @@ void GCodeReader::update_coordinates(GCodeLine &gline, std::pairparse_line(line, callback); } diff --git a/src/libslic3r/GCodeReader.hpp b/src/libslic3r/GCodeReader.hpp index 9503ddcc16..7e0793cd9b 100644 --- a/src/libslic3r/GCodeReader.hpp +++ b/src/libslic3r/GCodeReader.hpp @@ -107,6 +107,9 @@ public: { GCodeLine gline; this->parse_line(line.c_str(), gline, callback); } void parse_file(const std::string &file, callback_t callback); +#if ENABLE_GCODE_VIEWER + void quit_parsing_file() { m_parsing_file = false; } +#endif // ENABLE_GCODE_VIEWER float& x() { return m_position[X]; } float x() const { return m_position[X]; } @@ -145,6 +148,9 @@ private: char m_extrusion_axis; float m_position[NUM_AXES]; bool m_verbose; +#if ENABLE_GCODE_VIEWER + bool m_parsing_file{ false }; +#endif // ENABLE_GCODE_VIEWER }; } /* namespace Slic3r */ diff --git a/src/libslic3r/GCodeSender.cpp b/src/libslic3r/GCodeSender.cpp index 9567e07d28..7bda299923 100644 --- a/src/libslic3r/GCodeSender.cpp +++ b/src/libslic3r/GCodeSender.cpp @@ -153,7 +153,7 @@ GCodeSender::set_baud_rate(unsigned int baud_rate) if (::tcsetattr(handle, TCSAFLUSH, &ios) != 0) printf("Failed to set baud rate: %s\n", strerror(errno)); #else - //throw invalid_argument ("OS does not currently support custom bauds"); + //throw Slic3r::InvalidArgument("OS does not currently support custom bauds"); #endif } } diff --git a/src/libslic3r/GCodeTimeEstimator.cpp b/src/libslic3r/GCodeTimeEstimator.cpp index 9e8137ef0e..68075c1239 100644 --- a/src/libslic3r/GCodeTimeEstimator.cpp +++ b/src/libslic3r/GCodeTimeEstimator.cpp @@ -1,3 +1,4 @@ +#include "Exception.hpp" #include "GCodeTimeEstimator.hpp" #include "Utils.hpp" #include @@ -9,6 +10,8 @@ #include #include +#if !ENABLE_GCODE_VIEWER + static const float MMMIN_TO_MMSEC = 1.0f / 60.0f; static const float MILLISEC_TO_SEC = 0.001f; static const float INCHES_TO_MM = 25.4f; @@ -252,13 +255,13 @@ namespace Slic3r { { boost::nowide::ifstream in(filename); if (!in.good()) - throw std::runtime_error(std::string("Time estimator post process export failed.\nCannot open file for reading.\n")); + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nCannot open file for reading.\n")); std::string path_tmp = filename + ".postprocess"; FILE* out = boost::nowide::fopen(path_tmp.c_str(), "wb"); if (out == nullptr) - throw std::runtime_error(std::string("Time estimator post process export failed.\nCannot open file for writing.\n")); + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nCannot open file for writing.\n")); std::string normal_time_mask = "M73 P%s R%s\n"; std::string silent_time_mask = "M73 Q%s S%s\n"; @@ -276,7 +279,7 @@ namespace Slic3r { in.close(); fclose(out); boost::nowide::remove(path_tmp.c_str()); - throw std::runtime_error(std::string("Time estimator post process export failed.\nIs the disk full?\n")); + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nIs the disk full?\n")); } export_line.clear(); }; @@ -324,7 +327,7 @@ namespace Slic3r { if (!in.good()) { fclose(out); - throw std::runtime_error(std::string("Time estimator post process export failed.\nError while reading from file.\n")); + throw Slic3r::RuntimeError(std::string("Time estimator post process export failed.\nError while reading from file.\n")); } // check tags @@ -381,7 +384,7 @@ namespace Slic3r { in.close(); if (rename_file(path_tmp, filename)) - throw std::runtime_error(std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + filename + '\n' + + throw Slic3r::RuntimeError(std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + filename + '\n' + "Is " + path_tmp + " locked?" + '\n'); return true; @@ -622,7 +625,7 @@ namespace Slic3r { void GCodeTimeEstimator::set_default() { set_units(Millimeters); - set_dialect(gcfRepRap); + set_dialect(gcfRepRapSprinter); set_global_positioning_type(Absolute); set_e_local_positioning_type(Absolute); @@ -1201,7 +1204,8 @@ namespace Slic3r { if ((dialect == gcfRepetier) || (dialect == gcfMarlin) || (dialect == gcfSmoothie) || - (dialect == gcfRepRap)) + (dialect == gcfRepRapSprinter) || + (dialect == gcfRepRapFirmware)) { if (line.has_value('S', value)) extra_time += value; @@ -1313,7 +1317,7 @@ namespace Slic3r { GCodeFlavor dialect = get_dialect(); // see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration - float factor = ((dialect != gcfRepRap) && (get_units() == GCodeTimeEstimator::Inches)) ? INCHES_TO_MM : 1.0f; + float factor = ((dialect != gcfRepRapSprinter && dialect != gcfRepRapFirmware) && (get_units() == GCodeTimeEstimator::Inches)) ? INCHES_TO_MM : 1.0f; if (line.has_x()) set_axis_max_acceleration(X, line.x() * factor); @@ -1671,3 +1675,5 @@ namespace Slic3r { } #endif // ENABLE_MOVE_STATS } + +#endif // !ENABLE_GCODE_VIEWER diff --git a/src/libslic3r/GCodeTimeEstimator.hpp b/src/libslic3r/GCodeTimeEstimator.hpp index 63e11c4faa..0dd3407cb0 100644 --- a/src/libslic3r/GCodeTimeEstimator.hpp +++ b/src/libslic3r/GCodeTimeEstimator.hpp @@ -6,6 +6,8 @@ #include "GCodeReader.hpp" #include "CustomGCode.hpp" +#if !ENABLE_GCODE_VIEWER + #define ENABLE_MOVE_STATS 0 namespace Slic3r { @@ -481,4 +483,6 @@ namespace Slic3r { } /* namespace Slic3r */ +#endif // !ENABLE_GCODE_VIEWER + #endif /* slic3r_GCodeTimeEstimator_hpp_ */ diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 38a1c3ebee..c09d819de3 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -20,7 +20,7 @@ void GCodeWriter::apply_print_config(const PrintConfig &print_config) this->config.apply(print_config, true); m_extrusion_axis = this->config.get_extrusion_axis(); m_single_extruder_multi_material = print_config.single_extruder_multi_material.value; - m_max_acceleration = std::lrint((print_config.gcode_flavor.value == gcfMarlin) ? + m_max_acceleration = std::lrint((print_config.gcode_flavor.value == gcfMarlin && print_config.machine_limits_usage.value == MachineLimitsUsage::EmitToGCode) ? print_config.machine_max_acceleration_extruding.values.front() : 0); } @@ -46,7 +46,13 @@ std::string GCodeWriter::preamble() gcode << "G21 ; set units to millimeters\n"; gcode << "G90 ; use absolute coordinates\n"; } - if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie)) { + if (FLAVOR_IS(gcfRepRapSprinter) || + FLAVOR_IS(gcfRepRapFirmware) || + FLAVOR_IS(gcfMarlin) || + FLAVOR_IS(gcfTeacup) || + FLAVOR_IS(gcfRepetier) || + FLAVOR_IS(gcfSmoothie)) + { if (this->config.use_relative_e_distances) { gcode << "M83 ; use relative distances for extrusion\n"; } else { @@ -72,11 +78,15 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in return ""; std::string code, comment; - if (wait && FLAVOR_IS_NOT(gcfTeacup)) { + if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRapFirmware)) { code = "M109"; comment = "set temperature and wait for it to be reached"; } else { - code = "M104"; + if (FLAVOR_IS(gcfRepRapFirmware)) { // M104 is deprecated on RepRapFirmware + code = "G10"; + } else { + code = "M104"; + } comment = "set temperature"; } @@ -88,14 +98,17 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in gcode << "S"; } gcode << temperature; - if (tool != -1 && - ( (this->multiple_extruders && ! m_single_extruder_multi_material) || - FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { - gcode << " T" << tool; + bool multiple_tools = this->multiple_extruders && ! m_single_extruder_multi_material; + if (tool != -1 && (multiple_tools || FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { + if (FLAVOR_IS(gcfRepRapFirmware)) { + gcode << " P" << tool; + } else { + gcode << " T" << tool; + } } gcode << " ; " << comment << "\n"; - if (FLAVOR_IS(gcfTeacup) && wait) + if ((FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepRapFirmware)) && wait) gcode << "M116 ; wait for temperature to be reached\n"; return gcode.str(); diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index 00a4ad47c3..3b9fcd6176 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -1,4 +1,5 @@ #include "libslic3r.h" +#include "Exception.hpp" #include "Geometry.hpp" #include "ClipperUtils.hpp" #include "ExPolygon.hpp" @@ -471,7 +472,7 @@ Pointfs arrange(size_t num_parts, const Vec2d &part_size, coordf_t gap, const Bo size_t cellw = size_t(floor((bed_bbox.size()(0) + gap) / cell_size(0))); size_t cellh = size_t(floor((bed_bbox.size()(1) + gap) / cell_size(1))); if (num_parts > cellw * cellh) - throw std::invalid_argument("%zu parts won't fit in your print area!\n", num_parts); + throw Slic3r::InvalidArgument("%zu parts won't fit in your print area!\n", num_parts); // Get a bounding box of cellw x cellh cells, centered at the center of the bed. Vec2d cells_size(cellw * cell_size(0) - gap, cellh * cell_size(1) - gap); diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp index 75f3708d25..b690b478d9 100644 --- a/src/libslic3r/Geometry.hpp +++ b/src/libslic3r/Geometry.hpp @@ -281,7 +281,7 @@ bool directions_parallel(double angle1, double angle2, double max_diff = 0); template bool contains(const std::vector &vector, const Point &point); template T rad2deg(T angle) { return T(180.0) * angle / T(PI); } double rad2deg_dir(double angle); -template T deg2rad(T angle) { return T(PI) * angle / T(180.0); } +template constexpr T deg2rad(const T angle) { return T(PI) * angle / T(180.0); } template T angle_to_0_2PI(T angle) { static const T TWO_PI = T(2) * T(PI); diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index c104d46da1..8285b5493f 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -13,6 +13,10 @@ class Layer; class PrintRegion; class PrintObject; +namespace FillAdaptive { + struct Octree; +}; + class LayerRegion { public: @@ -134,7 +138,8 @@ public: return false; } void make_perimeters(); - void make_fills(); + void make_fills() { this->make_fills(nullptr, nullptr); }; + void make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree); void make_ironing(); void export_region_slices_to_svg(const char *path) const; diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp index 974f585dc2..0c43154a9b 100644 --- a/src/libslic3r/Line.cpp +++ b/src/libslic3r/Line.cpp @@ -33,24 +33,6 @@ bool Line::intersection_infinite(const Line &other, Point* point) const return true; } -// Distance to the closest point of line. -double Line::distance_to_squared(const Point &point, const Point &a, const Point &b) -{ - const Vec2d v = (b - a).cast(); - const Vec2d va = (point - a).cast(); - const double l2 = v.squaredNorm(); // avoid a sqrt - if (l2 == 0.0) - // a == b case - return va.squaredNorm(); - // Consider the line extending the segment, parameterized as a + t (b - a). - // We find projection of this point onto the line. - // It falls where t = [(this-a) . (b-a)] / |b-a|^2 - const double t = va.dot(v) / l2; - if (t < 0.0) return va.squaredNorm(); // beyond the 'a' end of the segment - else if (t > 1.0) return (point - b).cast().squaredNorm(); // beyond the 'b' end of the segment - return (t * v - va).squaredNorm(); -} - double Line::perp_distance_to(const Point &point) const { const Line &line = *this; diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp index caab809f5c..980303feda 100644 --- a/src/libslic3r/Line.hpp +++ b/src/libslic3r/Line.hpp @@ -18,6 +18,35 @@ typedef std::vector ThickLines; Linef3 transform(const Linef3& line, const Transform3d& t); +namespace line_alg { + +// Distance to the closest point of line. +template +double distance_to_squared(const L &line, const Vec &point) +{ + const Vec v = line.vector().template cast(); + const Vec va = (point - line.a).template cast(); + const double l2 = v.squaredNorm(); // avoid a sqrt + if (l2 == 0.0) + // a == b case + return va.squaredNorm(); + // Consider the line extending the segment, parameterized as a + t (b - a). + // We find projection of this point onto the line. + // It falls where t = [(this-a) . (b-a)] / |b-a|^2 + const double t = va.dot(v) / l2; + if (t < 0.0) return va.squaredNorm(); // beyond the 'a' end of the segment + else if (t > 1.0) return (point - line.b).template cast().squaredNorm(); // beyond the 'b' end of the segment + return (t * v - va).squaredNorm(); +} + +template +double distance_to(const L &line, const Vec &point) +{ + return std::sqrt(distance_to_squared(line, point)); +} + +} // namespace line_alg + class Line { public: @@ -47,7 +76,7 @@ public: // Clip a line with a bounding box. Returns false if the line is completely outside of the bounding box. bool clip_with_bbox(const BoundingBox &bbox); - static double distance_to_squared(const Point &point, const Point &a, const Point &b); + static inline double distance_to_squared(const Point &point, const Point &a, const Point &b) { return line_alg::distance_to_squared(Line{a, b}, Vec<2, coord_t>{point}); } static double distance_to(const Point &point, const Point &a, const Point &b) { return sqrt(distance_to_squared(point, a, b)); } Point a; diff --git a/src/libslic3r/MTUtils.hpp b/src/libslic3r/MTUtils.hpp index a6c8d61622..555cfe5019 100644 --- a/src/libslic3r/MTUtils.hpp +++ b/src/libslic3r/MTUtils.hpp @@ -114,15 +114,6 @@ template struct remove_cvref template using remove_cvref_t = typename remove_cvref::type; -template // Arbitrary allocator can be used -inline IntegerOnly> reserve_vector(I capacity) -{ - std::vector ret; - if (capacity > I(0)) ret.reserve(size_t(capacity)); - - return ret; -} - /// Exactly like Matlab https://www.mathworks.com/help/matlab/ref/linspace.html template> inline std::vector linspace_vector(const ArithmeticOnly &start, diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index 66167c7209..6ffc5dec39 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -1,3 +1,4 @@ +#include "Exception.hpp" #include "MeshBoolean.hpp" #include "libslic3r/TriangleMesh.hpp" #undef PI @@ -11,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -136,7 +136,7 @@ template void triangle_mesh_to_cgal(const TriangleMesh &M, _Mesh &o if(CGAL::is_closed(out)) CGALProc::orient_to_bound_a_volume(out); else - std::runtime_error("Mesh not watertight"); + throw Slic3r::RuntimeError("Mesh not watertight"); } inline Vec3d to_vec3d(const _EpicMesh::Point &v) @@ -222,7 +222,7 @@ template void _cgal_do(Op &&op, CGALMesh &A, CGALMesh &B) } if (! success) - throw std::runtime_error("CGAL mesh boolean operation failed."); + throw Slic3r::RuntimeError("CGAL mesh boolean operation failed."); } void minus(CGALMesh &A, CGALMesh &B) { _cgal_do(_cgal_diff, A, B); } diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 0719cac8cf..e424f84425 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1,7 +1,9 @@ +#include "Exception.hpp" #include "Model.hpp" #include "ModelArrange.hpp" #include "Geometry.hpp" #include "MTUtils.hpp" +#include "TriangleSelector.hpp" #include "Format/AMF.hpp" #include "Format/OBJ.hpp" @@ -20,7 +22,9 @@ #include "SVG.hpp" #include #include "GCodeWriter.hpp" +#if !ENABLE_GCODE_VIEWER #include "GCode/PreviewData.hpp" +#endif // !ENABLE_GCODE_VIEWER namespace Slic3r { @@ -113,13 +117,13 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c else if (boost::algorithm::iends_with(input_file, ".prusa")) result = load_prus(input_file.c_str(), &model); else - throw std::runtime_error("Unknown file format. Input file must have .stl, .obj, .amf(.xml) or .prusa extension."); + throw Slic3r::RuntimeError("Unknown file format. Input file must have .stl, .obj, .amf(.xml) or .prusa extension."); if (! result) - throw std::runtime_error("Loading of a model file failed."); + throw Slic3r::RuntimeError("Loading of a model file failed."); if (model.objects.empty()) - throw std::runtime_error("The supplied file couldn't be read because it's empty"); + throw Slic3r::RuntimeError("The supplied file couldn't be read because it's empty"); for (ModelObject *o : model.objects) o->input_file = input_file; @@ -143,13 +147,13 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig else if (boost::algorithm::iends_with(input_file, ".zip.amf")) result = load_amf(input_file.c_str(), config, &model, check_version); else - throw std::runtime_error("Unknown file format. Input file must have .3mf or .zip.amf extension."); + throw Slic3r::RuntimeError("Unknown file format. Input file must have .3mf or .zip.amf extension."); if (!result) - throw std::runtime_error("Loading of a model file failed."); + throw Slic3r::RuntimeError("Loading of a model file failed."); if (model.objects.empty()) - throw std::runtime_error("The supplied file couldn't be read because it's empty"); + throw Slic3r::RuntimeError("The supplied file couldn't be read because it's empty"); for (ModelObject *o : model.objects) { @@ -604,6 +608,7 @@ void ModelObject::assign_new_unique_ids_recursive() model_volume->assign_new_unique_ids_recursive(); for (ModelInstance *model_instance : this->instances) model_instance->assign_new_unique_ids_recursive(); + this->layer_height_profile.set_new_unique_id(); } // Clone this ModelObject including its volumes and instances, keep the IDs of the copies equal to the original. @@ -773,6 +778,38 @@ TriangleMesh ModelObject::raw_mesh() const return mesh; } +// Non-transformed (non-rotated, non-scaled, non-translated) sum of non-modifier object volumes. +// Currently used by ModelObject::mesh(), to calculate the 2D envelope for 2D plater +// and to display the object statistics at ModelObject::print_info(). +indexed_triangle_set ModelObject::raw_indexed_triangle_set() const +{ + size_t num_vertices = 0; + size_t num_faces = 0; + for (const ModelVolume *v : this->volumes) + if (v->is_model_part()) { + num_vertices += v->mesh().its.vertices.size(); + num_faces += v->mesh().its.indices.size(); + } + indexed_triangle_set out; + out.vertices.reserve(num_vertices); + out.indices.reserve(num_faces); + for (const ModelVolume *v : this->volumes) + if (v->is_model_part()) { + size_t i = out.vertices.size(); + size_t j = out.indices.size(); + append(out.vertices, v->mesh().its.vertices); + append(out.indices, v->mesh().its.indices); + auto m = v->get_matrix(); + for (; i < out.vertices.size(); ++ i) + out.vertices[i] = (m * out.vertices[i].cast()).cast().eval(); + if (v->is_left_handed()) { + for (; j < out.indices.size(); ++ j) + std::swap(out.indices[j][0], out.indices[j][1]); + } + } + return out; +} + // Non-transformed (non-rotated, non-scaled, non-translated) sum of all object volumes. TriangleMesh ModelObject::full_raw_mesh() const { @@ -814,7 +851,7 @@ const BoundingBoxf3& ModelObject::raw_bounding_box() const m_raw_bounding_box_valid = true; m_raw_bounding_box.reset(); if (this->instances.empty()) - throw std::invalid_argument("Can't call raw_bounding_box() with no instances"); + throw Slic3r::InvalidArgument("Can't call raw_bounding_box() with no instances"); const Transform3d& inst_matrix = this->instances.front()->get_transformation().get_matrix(true); for (const ModelVolume *v : this->volumes) @@ -1005,15 +1042,17 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, bool from_imperial int vol_idx = 0; for (ModelVolume* volume : volumes) { - volume->m_supported_facets.clear(); + volume->supported_facets.clear(); + volume->seam_facets.clear(); if (!volume->mesh().empty()) { TriangleMesh mesh(volume->mesh()); mesh.require_shared_vertices(); ModelVolume* vol = new_object->add_volume(mesh); vol->name = volume->name; + vol->set_type(volume->type()); // Don't copy the config's ID. - static_cast(vol->config) = static_cast(volume->config); + vol->config.assign_config(volume->config); assert(vol->config.id().valid()); assert(vol->config.id() != volume->config.id()); vol->set_material(volume->material_id(), *volume->material()); @@ -1022,7 +1061,7 @@ void ModelObject::convert_units(ModelObjectPtrs& new_objects, bool from_imperial if (volume_idxs.empty() || std::find(volume_idxs.begin(), volume_idxs.end(), vol_idx) != volume_idxs.end()) { vol->scale_geometry_after_creation(versor); - vol->set_offset(versor.cwiseProduct(vol->get_offset())); + vol->set_offset(versor.cwiseProduct(volume->get_offset())); } else vol->set_offset(volume->get_offset()); @@ -1110,7 +1149,8 @@ ModelObjectPtrs ModelObject::cut(size_t instance, coordf_t z, bool keep_upper, b for (ModelVolume *volume : volumes) { const auto volume_matrix = volume->get_matrix(); - volume->m_supported_facets.clear(); + volume->supported_facets.clear(); + volume->seam_facets.clear(); if (! volume->is_model_part()) { // Modifiers are not cut, but we still need to add the instance transformation @@ -1155,7 +1195,7 @@ ModelObjectPtrs ModelObject::cut(size_t instance, coordf_t z, bool keep_upper, b ModelVolume* vol = upper->add_volume(upper_mesh); vol->name = volume->name; // Don't copy the config's ID. - static_cast(vol->config) = static_cast(volume->config); + vol->config.assign_config(volume->config); assert(vol->config.id().valid()); assert(vol->config.id() != volume->config.id()); vol->set_material(volume->material_id(), *volume->material()); @@ -1164,8 +1204,8 @@ ModelObjectPtrs ModelObject::cut(size_t instance, coordf_t z, bool keep_upper, b ModelVolume* vol = lower->add_volume(lower_mesh); vol->name = volume->name; // Don't copy the config's ID. - static_cast(vol->config) = static_cast(volume->config); - assert(vol->config.id().valid()); + vol->config.assign_config(volume->config); + assert(vol->config.id().valid()); assert(vol->config.id() != volume->config.id()); vol->set_material(volume->material_id(), *volume->material()); @@ -1242,7 +1282,7 @@ void ModelObject::split(ModelObjectPtrs* new_objects) ModelObject* new_object = m_model->add_object(); new_object->name = this->name; // Don't copy the config's ID. - static_cast(new_object->config) = static_cast(this->config); + new_object->config.assign_config(this->config); assert(new_object->config.id().valid()); assert(new_object->config.id() != this->config.id()); new_object->instances.reserve(this->instances.size()); @@ -1689,6 +1729,14 @@ void ModelObject::scale_to_fit(const Vec3d &size) */ } +void ModelVolume::assign_new_unique_ids_recursive() +{ + ObjectBase::set_new_unique_id(); + config.set_new_unique_id(); + supported_facets.set_new_unique_id(); + seam_facets.set_new_unique_id(); +} + void ModelVolume::rotate(double angle, Axis axis) { switch (axis) @@ -1829,40 +1877,82 @@ arrangement::ArrangePolygon ModelInstance::get_arrange_polygon() const return ret; } - -std::vector FacetsAnnotation::get_facets(FacetSupportType type) const +indexed_triangle_set FacetsAnnotation::get_facets(const ModelVolume& mv, EnforcerBlockerType type) const { - std::vector out; - for (auto& [facet_idx, this_type] : m_data) - if (this_type == type) - out.push_back(facet_idx); + TriangleSelector selector(mv.mesh()); + selector.deserialize(m_data); + indexed_triangle_set out = selector.get_facets(type); return out; } - - -void FacetsAnnotation::set_facet(int idx, FacetSupportType type) +bool FacetsAnnotation::set(const TriangleSelector& selector) { - bool changed = true; - - if (type == FacetSupportType::NONE) - changed = m_data.erase(idx) != 0; - else - m_data[idx] = type; - - if (changed) - update_timestamp(); + std::map> sel_map = selector.serialize(); + if (sel_map != m_data) { + m_data = sel_map; + this->touch(); + return true; + } + return false; } - - void FacetsAnnotation::clear() { m_data.clear(); - update_timestamp(); + this->reset_timestamp(); } +// Following function takes data from a triangle and encodes it as string +// of hexadecimal numbers (one digit per triangle). Used for 3MF export, +// changing it may break backwards compatibility !!!!! +std::string FacetsAnnotation::get_triangle_as_string(int triangle_idx) const +{ + std::string out; + auto triangle_it = m_data.find(triangle_idx); + if (triangle_it != m_data.end()) { + const std::vector& code = triangle_it->second; + int offset = 0; + while (offset < int(code.size())) { + int next_code = 0; + for (int i=3; i>=0; --i) { + next_code = next_code << 1; + next_code |= int(code[offset + i]); + } + offset += 4; + + assert(next_code >=0 && next_code <= 15); + char digit = next_code < 10 ? next_code + '0' : (next_code-10)+'A'; + out.insert(out.begin(), digit); + } + } + return out; +} + +// Recover triangle splitting & state from string of hexadecimal values previously +// generated by get_triangle_as_string. Used to load from 3MF. +void FacetsAnnotation::set_triangle_from_string(int triangle_id, const std::string& str) +{ + assert(! str.empty()); + m_data[triangle_id] = std::vector(); // zero current state or create new + std::vector& code = m_data[triangle_id]; + + for (auto it = str.crbegin(); it != str.crend(); ++it) { + const char ch = *it; + int dec = 0; + if (ch >= '0' && ch<='9') + dec = int(ch - '0'); + else if (ch >='A' && ch <= 'F') + dec = 10 + int(ch - 'A'); + else + assert(false); + + // Convert to binary and append into code. + for (int i=0; i<4; ++i) { + code.insert(code.end(), bool(dec & (1 << i))); + } + } +} // Test whether the two models contain the same number of ModelObjects with the same set of IDs // ordered in the same order. In that case it is not necessary to kill the background processing. @@ -1931,11 +2021,21 @@ bool model_custom_supports_data_changed(const ModelObject& mo, const ModelObject assert(! model_volume_list_changed(mo, mo_new, ModelVolumeType::MODEL_PART)); assert(mo.volumes.size() == mo_new.volumes.size()); for (size_t i=0; im_supported_facets.is_same_as(mo.volumes[i]->m_supported_facets)) + if (! mo_new.volumes[i]->supported_facets.timestamp_matches(mo.volumes[i]->supported_facets)) return true; } return false; -}; +} + +bool model_custom_seam_data_changed(const ModelObject& mo, const ModelObject& mo_new) { + assert(! model_volume_list_changed(mo, mo_new, ModelVolumeType::MODEL_PART)); + assert(mo.volumes.size() == mo_new.volumes.size()); + for (size_t i=0; iseam_facets.timestamp_matches(mo.volumes[i]->seam_facets)) + return true; + } + return false; +} extern bool model_has_multi_part_objects(const Model &model) { @@ -1947,7 +2047,7 @@ extern bool model_has_multi_part_objects(const Model &model) extern bool model_has_advanced_features(const Model &model) { - auto config_is_advanced = [](const DynamicPrintConfig &config) { + auto config_is_advanced = [](const ModelConfig &config) { return ! (config.empty() || (config.size() == 1 && config.cbegin()->first == "extruder")); }; for (const ModelObject *model_object : model.objects) { diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index e5930fb8ac..c2965f60cb 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -18,7 +18,6 @@ #include #include #include -#include namespace cereal { class BinaryInputArchive; @@ -39,12 +38,13 @@ class ModelVolume; class ModelWipeTower; class Print; class SLAPrint; +class TriangleSelector; namespace UndoRedo { class StackImpl; } -class ModelConfig : public ObjectBase, public DynamicPrintConfig +class ModelConfigObject : public ObjectBase, public ModelConfig { private: friend class cereal::access; @@ -55,21 +55,25 @@ private: // Constructors to be only called by derived classes. // Default constructor to assign a unique ID. - explicit ModelConfig() {} + explicit ModelConfigObject() = default; // Constructor with ignored int parameter to assign an invalid ID, to be replaced // by an existing ID copied from elsewhere. - explicit ModelConfig(int) : ObjectBase(-1) {} + explicit ModelConfigObject(int) : ObjectBase(-1) {} // Copy constructor copies the ID. - explicit ModelConfig(const ModelConfig &cfg) : ObjectBase(-1), DynamicPrintConfig(cfg) { this->copy_id(cfg); } + explicit ModelConfigObject(const ModelConfigObject &cfg) = default; // Move constructor copies the ID. - explicit ModelConfig(ModelConfig &&cfg) : ObjectBase(-1), DynamicPrintConfig(std::move(cfg)) { this->copy_id(cfg); } + explicit ModelConfigObject(ModelConfigObject &&cfg) = default; - ModelConfig& operator=(const ModelConfig &rhs) = default; - ModelConfig& operator=(ModelConfig &&rhs) = default; + Timestamp timestamp() const throw() override { return this->ModelConfig::timestamp(); } + bool object_id_and_timestamp_match(const ModelConfigObject &rhs) const throw() { return this->id() == rhs.id() && this->timestamp() == rhs.timestamp(); } - template void serialize(Archive &ar) { - ar(cereal::base_class(this)); - } + // called by ModelObject::assign_copy() + ModelConfigObject& operator=(const ModelConfigObject &rhs) = default; + ModelConfigObject& operator=(ModelConfigObject &&rhs) = default; + + template void serialize(Archive &ar) { + ar(cereal::base_class(this)); + } }; namespace Internal { @@ -135,7 +139,7 @@ public: // Attributes are defined by the AMF file format, but they don't seem to be used by Slic3r for any purpose. t_model_material_attributes attributes; // Dynamic configuration storage for the object specific configuration values, overriding the global configuration. - ModelConfig config; + ModelConfigObject config; Model* get_model() const { return m_model; } void apply(const t_model_material_attributes &attributes) @@ -161,7 +165,7 @@ private: ModelMaterial() : ObjectBase(-1), config(-1), m_model(nullptr) { assert(this->id().invalid()); assert(this->config.id().invalid()); } template void serialize(Archive &ar) { assert(this->id().invalid()); assert(this->config.id().invalid()); - Internal::StaticSerializationWrapper config_wrapper(config); + Internal::StaticSerializationWrapper config_wrapper(config); ar(attributes, config_wrapper); // assert(this->id().valid()); assert(this->config.id().valid()); } @@ -172,6 +176,45 @@ private: ModelMaterial& operator=(ModelMaterial &&rhs) = delete; }; +class LayerHeightProfile final : public ObjectWithTimestamp { +public: + // Assign the content if the timestamp differs, don't assign an ObjectID. + void assign(const LayerHeightProfile &rhs) { if (! this->timestamp_matches(rhs)) { this->m_data = rhs.m_data; this->copy_timestamp(rhs); } } + void assign(LayerHeightProfile &&rhs) { if (! this->timestamp_matches(rhs)) { this->m_data = std::move(rhs.m_data); this->copy_timestamp(rhs); } } + + std::vector get() const throw() { return m_data; } + bool empty() const throw() { return m_data.empty(); } + void set(const std::vector &data) { if (m_data != data) { m_data = data; this->touch(); } } + void set(std::vector &&data) { if (m_data != data) { m_data = std::move(data); this->touch(); } } + void clear() { m_data.clear(); this->touch(); } + + template void serialize(Archive &ar) + { + ar(cereal::base_class(this), m_data); + } + +private: + // Constructors to be only called by derived classes. + // Default constructor to assign a unique ID. + explicit LayerHeightProfile() = default; + // Constructor with ignored int parameter to assign an invalid ID, to be replaced + // by an existing ID copied from elsewhere. + explicit LayerHeightProfile(int) : ObjectWithTimestamp(-1) {} + // Copy constructor copies the ID. + explicit LayerHeightProfile(const LayerHeightProfile &rhs) = default; + // Move constructor copies the ID. + explicit LayerHeightProfile(LayerHeightProfile &&rhs) = default; + + // called by ModelObject::assign_copy() + LayerHeightProfile& operator=(const LayerHeightProfile &rhs) = default; + LayerHeightProfile& operator=(LayerHeightProfile &&rhs) = default; + + std::vector m_data; + + // to access set_new_unique_id() when copy / pasting an object + friend class ModelObject; +}; + // A printable object, possibly having multiple print volumes (each with its own set of parameters and materials), // and possibly having multiple modifier volumes, each modifier volume with its set of parameters and materials. // Each ModelObject may be instantiated mutliple times, each instance having different placement on the print bed, @@ -188,12 +231,12 @@ public: // ModelVolumes are owned by this ModelObject. ModelVolumePtrs volumes; // Configuration parameters specific to a single ModelObject, overriding the global Slic3r settings. - ModelConfig config; + ModelConfigObject config; // Variation of a layer thickness for spans of Z coordinates + optional parameter overrides. t_layer_config_ranges layer_config_ranges; // Profile of increasing z to a layer height, to be linearly interpolated when calculating the layers. // The pairs of are packed into a 1D array. - std::vector layer_height_profile; + LayerHeightProfile layer_height_profile; // Whether or not this object is printable bool printable; @@ -243,6 +286,8 @@ public: // Non-transformed (non-rotated, non-scaled, non-translated) sum of non-modifier object volumes. // Currently used by ModelObject::mesh() and to calculate the 2D envelope for 2D plater. TriangleMesh raw_mesh() const; + // The same as above, but producing a lightweight indexed_triangle_set. + indexed_triangle_set raw_indexed_triangle_set() const; // Non-transformed (non-rotated, non-scaled, non-translated) sum of all object volumes. TriangleMesh full_raw_mesh() const; // A transformed snug bounding box around the non-modifier object volumes, without the translation applied. @@ -315,41 +360,85 @@ private: // This constructor assigns new ID to this ModelObject and its config. explicit ModelObject(Model* model) : m_model(model), printable(true), origin_translation(Vec3d::Zero()), m_bounding_box_valid(false), m_raw_bounding_box_valid(false), m_raw_mesh_bounding_box_valid(false) - { assert(this->id().valid()); } - explicit ModelObject(int) : ObjectBase(-1), config(-1), m_model(nullptr), printable(true), origin_translation(Vec3d::Zero()), m_bounding_box_valid(false), m_raw_bounding_box_valid(false), m_raw_mesh_bounding_box_valid(false) - { assert(this->id().invalid()); assert(this->config.id().invalid()); } + { + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->layer_height_profile.id().valid()); + } + explicit ModelObject(int) : ObjectBase(-1), config(-1), layer_height_profile(-1), m_model(nullptr), printable(true), origin_translation(Vec3d::Zero()), m_bounding_box_valid(false), m_raw_bounding_box_valid(false), m_raw_mesh_bounding_box_valid(false) + { + assert(this->id().invalid()); + assert(this->config.id().invalid()); + assert(this->layer_height_profile.id().invalid()); + } ~ModelObject(); void assign_new_unique_ids_recursive() override; // To be able to return an object from own copy / clone methods. Hopefully the compiler will do the "Copy elision" // (Omits copy and move(since C++11) constructors, resulting in zero - copy pass - by - value semantics). - ModelObject(const ModelObject &rhs) : ObjectBase(-1), config(-1), m_model(rhs.m_model) { - assert(this->id().invalid()); assert(this->config.id().invalid()); assert(rhs.id() != rhs.config.id()); + ModelObject(const ModelObject &rhs) : ObjectBase(-1), config(-1), layer_height_profile(-1), m_model(rhs.m_model) { + assert(this->id().invalid()); + assert(this->config.id().invalid()); + assert(this->layer_height_profile.id().invalid()); + assert(rhs.id() != rhs.config.id()); + assert(rhs.id() != rhs.layer_height_profile.id()); this->assign_copy(rhs); - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); - assert(this->id() == rhs.id()); assert(this->config.id() == rhs.config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->layer_height_profile.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->layer_height_profile.id()); + assert(this->id() == rhs.id()); + assert(this->config.id() == rhs.config.id()); + assert(this->layer_height_profile.id() == rhs.layer_height_profile.id()); } - explicit ModelObject(ModelObject &&rhs) : ObjectBase(-1), config(-1) { - assert(this->id().invalid()); assert(this->config.id().invalid()); assert(rhs.id() != rhs.config.id()); + explicit ModelObject(ModelObject &&rhs) : ObjectBase(-1), config(-1), layer_height_profile(-1) { + assert(this->id().invalid()); + assert(this->config.id().invalid()); + assert(this->layer_height_profile.id().invalid()); + assert(rhs.id() != rhs.config.id()); + assert(rhs.id() != rhs.layer_height_profile.id()); this->assign_copy(std::move(rhs)); - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); - assert(this->id() == rhs.id()); assert(this->config.id() == rhs.config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->layer_height_profile.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->layer_height_profile.id()); + assert(this->id() == rhs.id()); + assert(this->config.id() == rhs.config.id()); + assert(this->layer_height_profile.id() == rhs.layer_height_profile.id()); } - ModelObject& operator=(const ModelObject &rhs) { + ModelObject& operator=(const ModelObject &rhs) { this->assign_copy(rhs); m_model = rhs.m_model; - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); - assert(this->id() == rhs.id()); assert(this->config.id() == rhs.config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->layer_height_profile.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->layer_height_profile.id()); + assert(this->id() == rhs.id()); + assert(this->config.id() == rhs.config.id()); + assert(this->layer_height_profile.id() == rhs.layer_height_profile.id()); return *this; } - ModelObject& operator=(ModelObject &&rhs) { + ModelObject& operator=(ModelObject &&rhs) { this->assign_copy(std::move(rhs)); m_model = rhs.m_model; - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); - assert(this->id() == rhs.id()); assert(this->config.id() == rhs.config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->layer_height_profile.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->layer_height_profile.id()); + assert(this->id() == rhs.id()); + assert(this->config.id() == rhs.config.id()); + assert(this->layer_height_profile.id() == rhs.layer_height_profile.id()); return *this; } - void set_new_unique_id() { ObjectBase::set_new_unique_id(); this->config.set_new_unique_id(); } + void set_new_unique_id() { + ObjectBase::set_new_unique_id(); + this->config.set_new_unique_id(); + this->layer_height_profile.set_new_unique_id(); + } OBJECTBASE_DERIVED_COPY_MOVE_CLONE(ModelObject) @@ -373,13 +462,19 @@ private: friend class cereal::access; friend class UndoRedo::StackImpl; // Used for deserialization -> Don't allocate any IDs for the ModelObject or its config. - ModelObject() : ObjectBase(-1), config(-1), m_model(nullptr), m_bounding_box_valid(false), m_raw_bounding_box_valid(false), m_raw_mesh_bounding_box_valid(false) { - assert(this->id().invalid()); assert(this->config.id().invalid()); + ModelObject() : + ObjectBase(-1), config(-1), layer_height_profile(-1), + m_model(nullptr), m_bounding_box_valid(false), m_raw_bounding_box_valid(false), m_raw_mesh_bounding_box_valid(false) { + assert(this->id().invalid()); + assert(this->config.id().invalid()); + assert(this->layer_height_profile.id().invalid()); } template void serialize(Archive &ar) { ar(cereal::base_class(this)); - Internal::StaticSerializationWrapper config_wrapper(config); - ar(name, input_file, instances, volumes, config_wrapper, layer_config_ranges, layer_height_profile, sla_support_points, sla_points_status, sla_drain_holes, printable, origin_translation, + Internal::StaticSerializationWrapper config_wrapper(config); + Internal::StaticSerializationWrapper layer_heigth_profile_wrapper(layer_height_profile); + ar(name, input_file, instances, volumes, config_wrapper, layer_config_ranges, layer_heigth_profile_wrapper, + sla_support_points, sla_points_status, sla_drain_holes, printable, origin_translation, m_bounding_box, m_bounding_box_valid, m_raw_bounding_box, m_raw_bounding_box_valid, m_raw_mesh_bounding_box, m_raw_mesh_bounding_box_valid); } }; @@ -393,37 +488,54 @@ enum class ModelVolumeType : int { SUPPORT_BLOCKER, }; -enum class FacetSupportType : int8_t { +enum class EnforcerBlockerType : int8_t { + // Maximum is 3. The value is serialized in TriangleSelector into 2 bits! NONE = 0, ENFORCER = 1, BLOCKER = 2 }; -class FacetsAnnotation { +class FacetsAnnotation final : public ObjectWithTimestamp { public: - using ClockType = std::chrono::steady_clock; - - std::vector get_facets(FacetSupportType type) const; - void set_facet(int idx, FacetSupportType type); + // Assign the content if the timestamp differs, don't assign an ObjectID. + void assign(const FacetsAnnotation& rhs) { if (! this->timestamp_matches(rhs)) { this->m_data = rhs.m_data; this->copy_timestamp(rhs); } } + void assign(FacetsAnnotation&& rhs) { if (! this->timestamp_matches(rhs)) { this->m_data = std::move(rhs.m_data); this->copy_timestamp(rhs); } } + const std::map>& get_data() const throw() { return m_data; } + bool set(const TriangleSelector& selector); + indexed_triangle_set get_facets(const ModelVolume& mv, EnforcerBlockerType type) const; + bool empty() const { return m_data.empty(); } void clear(); + std::string get_triangle_as_string(int i) const; + void set_triangle_from_string(int triangle_id, const std::string& str); - ClockType::time_point get_timestamp() const { return timestamp; } - bool is_same_as(const FacetsAnnotation& other) const { - return timestamp == other.get_timestamp(); - } +private: + // Constructors to be only called by derived classes. + // Default constructor to assign a unique ID. + explicit FacetsAnnotation() = default; + // Constructor with ignored int parameter to assign an invalid ID, to be replaced + // by an existing ID copied from elsewhere. + explicit FacetsAnnotation(int) : ObjectWithTimestamp(-1) {} + // Copy constructor copies the ID. + explicit FacetsAnnotation(const FacetsAnnotation &rhs) = default; + // Move constructor copies the ID. + explicit FacetsAnnotation(FacetsAnnotation &&rhs) = default; + + // called by ModelVolume::assign_copy() + FacetsAnnotation& operator=(const FacetsAnnotation &rhs) = default; + FacetsAnnotation& operator=(FacetsAnnotation &&rhs) = default; + + friend class cereal::access; + friend class UndoRedo::StackImpl; template void serialize(Archive &ar) { - ar(m_data); + ar(cereal::base_class(this), m_data); } -private: - std::map m_data; + std::map> m_data; - ClockType::time_point timestamp; - void update_timestamp() { - timestamp = ClockType::now(); - } + // To access set_new_unique_id() when copy / pasting a ModelVolume. + friend class ModelVolume; }; // An object STL, or a modifier volume, over which a different set of parameters shall be applied. @@ -441,7 +553,11 @@ public: Vec3d mesh_offset{ Vec3d::Zero() }; Geometry::Transformation transform; - template void serialize(Archive& ar) { ar(input_file, object_idx, volume_idx, mesh_offset, transform); } + template void serialize(Archive& ar) { + //FIXME Vojtech: Serialize / deserialize only if the Source is set. + // likely testing input_file or object_idx would be sufficient. + ar(input_file, object_idx, volume_idx, mesh_offset, transform); + } }; Source source; @@ -454,10 +570,13 @@ public: void reset_mesh() { m_mesh = std::make_shared(); } // Configuration parameters specific to an object model geometry or a modifier volume, // overriding the global Slic3r settings and the ModelObject settings. - ModelConfig config; + ModelConfigObject config; // List of mesh facets to be supported/unsupported. - FacetsAnnotation m_supported_facets; + FacetsAnnotation supported_facets; + + // List of seam enforcers/blockers. + FacetsAnnotation seam_facets; // A parent object owning this modifier volume. ModelObject* get_object() const { return this->object; } @@ -539,7 +658,12 @@ public: const Transform3d& get_matrix(bool dont_translate = false, bool dont_rotate = false, bool dont_scale = false, bool dont_mirror = false) const { return m_transformation.get_matrix(dont_translate, dont_rotate, dont_scale, dont_mirror); } - void set_new_unique_id() { ObjectBase::set_new_unique_id(); this->config.set_new_unique_id(); } + void set_new_unique_id() { + ObjectBase::set_new_unique_id(); + this->config.set_new_unique_id(); + this->supported_facets.set_new_unique_id(); + this->seam_facets.set_new_unique_id(); + } protected: friend class Print; @@ -550,7 +674,7 @@ protected: // Copies IDs of both the ModelVolume and its config. explicit ModelVolume(const ModelVolume &rhs) = default; void set_model_object(ModelObject *model_object) { object = model_object; } - void assign_new_unique_ids_recursive() override { ObjectBase::set_new_unique_id(); config.set_new_unique_id(); } + void assign_new_unique_ids_recursive() override; void transform_this_mesh(const Transform3d& t, bool fix_left_handed); void transform_this_mesh(const Matrix3d& m, bool fix_left_handed); @@ -574,13 +698,25 @@ private: ModelVolume(ModelObject *object, const TriangleMesh &mesh) : m_mesh(new TriangleMesh(mesh)), m_type(ModelVolumeType::MODEL_PART), object(object) { - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->supported_facets.id().valid()); + assert(this->seam_facets.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->supported_facets.id()); + assert(this->id() != this->seam_facets.id()); if (mesh.stl.stats.number_of_facets > 1) calculate_convex_hull(); } ModelVolume(ModelObject *object, TriangleMesh &&mesh, TriangleMesh &&convex_hull) : m_mesh(new TriangleMesh(std::move(mesh))), m_convex_hull(new TriangleMesh(std::move(convex_hull))), m_type(ModelVolumeType::MODEL_PART), object(object) { - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->supported_facets.id().valid()); + assert(this->seam_facets.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->supported_facets.id()); + assert(this->id() != this->seam_facets.id()); } // Copying an existing volume, therefore this volume will get a copy of the ID assigned. @@ -588,25 +724,45 @@ private: ObjectBase(other), name(other.name), source(other.source), m_mesh(other.m_mesh), m_convex_hull(other.m_convex_hull), config(other.config), m_type(other.m_type), object(object), m_transformation(other.m_transformation), - m_supported_facets(other.m_supported_facets) + supported_facets(other.supported_facets), seam_facets(other.seam_facets) { - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); - assert(this->id() == other.id() && this->config.id() == other.config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->supported_facets.id().valid()); + assert(this->seam_facets.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->supported_facets.id()); + assert(this->id() != this->seam_facets.id()); + assert(this->id() == other.id()); + assert(this->config.id() == other.config.id()); + assert(this->supported_facets.id() == other.supported_facets.id()); + assert(this->seam_facets.id() == other.seam_facets.id()); this->set_material_id(other.material_id()); } // Providing a new mesh, therefore this volume will get a new unique ID assigned. ModelVolume(ModelObject *object, const ModelVolume &other, const TriangleMesh &&mesh) : name(other.name), source(other.source), m_mesh(new TriangleMesh(std::move(mesh))), config(other.config), m_type(other.m_type), object(object), m_transformation(other.m_transformation) { - assert(this->id().valid()); assert(this->config.id().valid()); assert(this->id() != this->config.id()); - assert(this->id() != other.id() && this->config.id() == other.config.id()); + assert(this->id().valid()); + assert(this->config.id().valid()); + assert(this->supported_facets.id().valid()); + assert(this->seam_facets.id().valid()); + assert(this->id() != this->config.id()); + assert(this->id() != this->supported_facets.id()); + assert(this->id() != this->seam_facets.id()); + assert(this->id() != other.id()); + assert(this->config.id() == other.config.id()); this->set_material_id(other.material_id()); this->config.set_new_unique_id(); if (mesh.stl.stats.number_of_facets > 1) calculate_convex_hull(); - assert(this->config.id().valid()); assert(this->config.id() != other.config.id()); assert(this->id() != this->config.id()); - - m_supported_facets.clear(); + assert(this->config.id().valid()); + assert(this->config.id() != other.config.id()); + assert(this->supported_facets.id() != other.supported_facets.id()); + assert(this->seam_facets.id() != other.seam_facets.id()); + assert(this->id() != this->config.id()); + assert(this->supported_facets.empty()); + assert(this->seam_facets.empty()); } ModelVolume& operator=(ModelVolume &rhs) = delete; @@ -614,13 +770,17 @@ private: friend class cereal::access; friend class UndoRedo::StackImpl; // Used for deserialization, therefore no IDs are allocated. - ModelVolume() : ObjectBase(-1), config(-1), object(nullptr) { - assert(this->id().invalid()); assert(this->config.id().invalid()); + ModelVolume() : ObjectBase(-1), config(-1), supported_facets(-1), seam_facets(-1), object(nullptr) { + assert(this->id().invalid()); + assert(this->config.id().invalid()); + assert(this->supported_facets.id().invalid()); + assert(this->seam_facets.id().invalid()); } template void load(Archive &ar) { bool has_convex_hull; - ar(name, source, m_mesh, m_type, m_material_id, m_transformation, - m_is_splittable, has_convex_hull, m_supported_facets); + ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull); + cereal::load_by_value(ar, supported_facets); + cereal::load_by_value(ar, seam_facets); cereal::load_by_value(ar, config); assert(m_mesh); if (has_convex_hull) { @@ -633,8 +793,9 @@ private: } template void save(Archive &ar) const { bool has_convex_hull = m_convex_hull.get() != nullptr; - ar(name, source, m_mesh, m_type, m_material_id, m_transformation, - m_is_splittable, has_convex_hull, m_supported_facets); + ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull); + cereal::save_by_value(ar, supported_facets); + cereal::save_by_value(ar, seam_facets); cereal::save_by_value(ar, config); if (has_convex_hull) cereal::save_optional(ar, m_convex_hull); @@ -899,6 +1060,10 @@ extern bool model_volume_list_changed(const ModelObject &model_object_old, const // The function assumes that volumes list is synchronized. extern bool model_custom_supports_data_changed(const ModelObject& mo, const ModelObject& mo_new); +// Test whether the now ModelObject has newer custom seam data than the old one. +// The function assumes that volumes list is synchronized. +extern bool model_custom_seam_data_changed(const ModelObject& mo, const ModelObject& mo_new); + // If the model has multi-part objects, then it is currently not supported by the SLA mode. // Either the model cannot be loaded, or a SLA printer has to be activated. extern bool model_has_multi_part_objects(const Model &model); @@ -916,7 +1081,7 @@ void check_model_ids_equal(const Model &model1, const Model &model2); namespace cereal { template struct specialize {}; - template struct specialize {}; + template struct specialize {}; } #endif /* slic3r_Model_hpp_ */ diff --git a/src/libslic3r/ModelArrange.hpp b/src/libslic3r/ModelArrange.hpp index afe146d438..124c5c018f 100644 --- a/src/libslic3r/ModelArrange.hpp +++ b/src/libslic3r/ModelArrange.hpp @@ -20,7 +20,7 @@ using VirtualBedFn = std::function; [[noreturn]] inline void throw_if_out_of_bed(arrangement::ArrangePolygon&) { - throw std::runtime_error("Objects could not fit on the bed"); + throw Slic3r::RuntimeError("Objects could not fit on the bed"); } ArrangePolygons get_arrange_polys(const Model &model, ModelInstancePtrs &instances); diff --git a/src/libslic3r/ObjectID.cpp b/src/libslic3r/ObjectID.cpp index b188d84c06..7177c47fec 100644 --- a/src/libslic3r/ObjectID.cpp +++ b/src/libslic3r/ObjectID.cpp @@ -17,6 +17,8 @@ ObjectID wipe_tower_instance_id() return mine.id(); } +ObjectWithTimestamp::Timestamp ObjectWithTimestamp::s_last_timestamp = 1; + } // namespace Slic3r // CEREAL_REGISTER_TYPE(Slic3r::ObjectBase) diff --git a/src/libslic3r/ObjectID.hpp b/src/libslic3r/ObjectID.hpp index 484d1173ba..ea7c748a50 100644 --- a/src/libslic3r/ObjectID.hpp +++ b/src/libslic3r/ObjectID.hpp @@ -42,12 +42,21 @@ private: // Base for Model, ModelObject, ModelVolume, ModelInstance or ModelMaterial to provide a unique ID // to synchronize the front end (UI) with the back end (BackgroundSlicingProcess / Print / PrintObject). +// Also base for Print, PrintObject, SLAPrint, SLAPrintObject to provide a unique ID for matching Model / ModelObject +// with their corresponding Print / PrintObject objects by the notification center at the UI when processing back-end warnings. // Achtung! The s_last_id counter is not thread safe, so it is expected, that the ObjectBase derived instances // are only instantiated from the main thread. class ObjectBase { public: - ObjectID id() const { return m_id; } + using Timestamp = uint64_t; + + ObjectID id() const { return m_id; } + // Return an optional timestamp of this object. + // If the timestamp returned is non-zero, then the serialization framework will + // only save this object on the Undo/Redo stack if the timestamp is different + // from the timestmap of the object at the top of the Undo / Redo stack. + virtual Timestamp timestamp() const { return 0; } protected: // Constructors to be only called by derived classes. @@ -57,7 +66,7 @@ protected: // by an existing ID copied from elsewhere. ObjectBase(int) : m_id(ObjectID(0)) {} // The class tree will have virtual tables and type information. - virtual ~ObjectBase() {} + virtual ~ObjectBase() = default; // Use with caution! void set_new_unique_id() { m_id = generate_new_id(); } @@ -84,6 +93,44 @@ private: template static void load_and_construct(Archive & ar, cereal::construct &construct) { ObjectID id; ar(id); construct(id); } }; +class ObjectWithTimestamp : public ObjectBase +{ +protected: + // Constructors to be only called by derived classes. + // Default constructor to assign a new timestamp unique to this object's history. + ObjectWithTimestamp() = default; + // Constructor with ignored int parameter to assign an invalid ID, to be replaced + // by an existing ID copied from elsewhere. + ObjectWithTimestamp(int) : ObjectBase(-1) {} + // The class tree will have virtual tables and type information. + virtual ~ObjectWithTimestamp() = default; + + // Resetting timestamp to 1 indicates the object is in its initial (cleared) state. + // To be called by the derived class's clear() method. + void reset_timestamp() { m_timestamp = 1; } + // The timestamp uniquely identifies content of the derived class' data, therefore it makes sense to copy the timestamp if the content data was copied. + void copy_timestamp(const ObjectWithTimestamp& rhs) { m_timestamp = rhs.m_timestamp; } + +public: + // Return an optional timestamp of this object. + // If the timestamp returned is non-zero, then the serialization framework will + // only save this object on the Undo/Redo stack if the timestamp is different + // from the timestmap of the object at the top of the Undo / Redo stack. + Timestamp timestamp() const throw() override { return m_timestamp; } + bool timestamp_matches(const ObjectWithTimestamp &rhs) const throw() { return m_timestamp == rhs.m_timestamp; } + bool object_id_and_timestamp_match(const ObjectWithTimestamp &rhs) const throw() { return this->id() == rhs.id() && m_timestamp == rhs.m_timestamp; } + void touch() { m_timestamp = ++ s_last_timestamp; } + +private: + // The first timestamp is non-zero, as zero timestamp means the timestamp is not reliable. + Timestamp m_timestamp { 1 }; + static Timestamp s_last_timestamp; + + friend class cereal::access; + friend class Slic3r::UndoRedo::StackImpl; + template void serialize(Archive &ar) { ar(m_timestamp); } +}; + // Unique object / instance ID for the wipe tower. extern ObjectID wipe_tower_object_id(); extern ObjectID wipe_tower_instance_id(); diff --git a/src/libslic3r/OpenVDBUtils.cpp b/src/libslic3r/OpenVDBUtils.cpp index c30052036e..31ae203ddf 100644 --- a/src/libslic3r/OpenVDBUtils.cpp +++ b/src/libslic3r/OpenVDBUtils.cpp @@ -2,6 +2,7 @@ #include "OpenVDBUtils.hpp" #include #include +#include #include //#include "MTUtils.hpp" @@ -57,7 +58,6 @@ void Contour3DDataAdapter::getIndexSpacePoint(size_t n, // TODO: Do I need to call initialize? Seems to work without it as well but the // docs say it should be called ones. It does a mutex lock-unlock sequence all // even if was called previously. - openvdb::FloatGrid::Ptr mesh_to_grid(const TriangleMesh &mesh, const openvdb::math::Transform &tr, float exteriorBandWidth, @@ -65,9 +65,38 @@ openvdb::FloatGrid::Ptr mesh_to_grid(const TriangleMesh &mesh, int flags) { openvdb::initialize(); - return openvdb::tools::meshToVolume( - TriangleMeshDataAdapter{mesh}, tr, exteriorBandWidth, - interiorBandWidth, flags); + + TriangleMeshPtrs meshparts = mesh.split(); + + auto it = std::remove_if(meshparts.begin(), meshparts.end(), + [](TriangleMesh *m){ + m->require_shared_vertices(); + return !m->is_manifold() || m->volume() < EPSILON; + }); + + meshparts.erase(it, meshparts.end()); + + openvdb::FloatGrid::Ptr grid; + for (TriangleMesh *m : meshparts) { + auto subgrid = openvdb::tools::meshToVolume( + TriangleMeshDataAdapter{*m}, tr, exteriorBandWidth, + interiorBandWidth, flags); + + if (grid && subgrid) openvdb::tools::csgUnion(*grid, *subgrid); + else if (subgrid) grid = std::move(subgrid); + } + + if (grid) { + grid = openvdb::tools::levelSetRebuild(*grid, 0., exteriorBandWidth, + interiorBandWidth); + } else if(meshparts.empty()) { + // Splitting failed, fall back to hollow the original mesh + grid = openvdb::tools::meshToVolume( + TriangleMeshDataAdapter{mesh}, tr, exteriorBandWidth, + interiorBandWidth, flags); + } + + return grid; } openvdb::FloatGrid::Ptr mesh_to_grid(const sla::Contour3D &mesh, diff --git a/src/libslic3r/OpenVDBUtils.hpp b/src/libslic3r/OpenVDBUtils.hpp index c493845a1c..e35231d35b 100644 --- a/src/libslic3r/OpenVDBUtils.hpp +++ b/src/libslic3r/OpenVDBUtils.hpp @@ -2,7 +2,6 @@ #define OPENVDBUTILS_HPP #include -#include #include #include diff --git a/src/libslic3r/Optimize/BruteforceOptimizer.hpp b/src/libslic3r/Optimize/BruteforceOptimizer.hpp new file mode 100644 index 0000000000..2daef538e7 --- /dev/null +++ b/src/libslic3r/Optimize/BruteforceOptimizer.hpp @@ -0,0 +1,140 @@ +#ifndef BRUTEFORCEOPTIMIZER_HPP +#define BRUTEFORCEOPTIMIZER_HPP + +#include + +namespace Slic3r { namespace opt { + +namespace detail { +// Implementing a bruteforce optimizer + +// Return the number of iterations needed to reach a specific grid position (idx) +template +long num_iter(const std::array &idx, size_t gridsz) +{ + long ret = 0; + for (size_t i = 0; i < N; ++i) ret += idx[i] * std::pow(gridsz, i); + return ret; +} + +// Implementation of a grid search where the search interval is sampled in +// equidistant points for each dimension. Grid size determines the number of +// samples for one dimension so the number of function calls is gridsize ^ dimension. +struct AlgBurteForce { + bool to_min; + StopCriteria stc; + size_t gridsz; + + AlgBurteForce(const StopCriteria &cr, size_t gs): stc{cr}, gridsz{gs} {} + + // This function is called recursively for each dimension and generates + // the grid values for the particular dimension. If D is less than zero, + // the object function input values are generated for each dimension and it + // can be evaluated. The current best score is compared with the newly + // returned score and changed appropriately. + template + bool run(std::array &idx, + Result &result, + const Bounds &bounds, + Fn &&fn, + Cmp &&cmp) + { + if (stc.stop_condition()) return false; + + if constexpr (D < 0) { // Let's evaluate fn + Input inp; + + auto max_iter = stc.max_iterations(); + if (max_iter && num_iter(idx, gridsz) >= max_iter) + return false; + + for (size_t d = 0; d < N; ++d) { + const Bound &b = bounds[d]; + double step = (b.max() - b.min()) / (gridsz - 1); + inp[d] = b.min() + idx[d] * step; + } + + auto score = fn(inp); + if (cmp(score, result.score)) { // Change current score to the new + double absdiff = std::abs(score - result.score); + + result.score = score; + result.optimum = inp; + + // Check if the required precision is reached. + if (absdiff < stc.abs_score_diff() || + absdiff < stc.rel_score_diff() * std::abs(score)) + return false; + } + + } else { + for (size_t i = 0; i < gridsz; ++i) { + idx[D] = i; // Mark the current grid position and dig down + if (!run(idx, result, bounds, std::forward(fn), + std::forward(cmp))) + return false; + } + } + + return true; + } + + template + Result optimize(Fn&& fn, + const Input &/*initvals*/, + const Bounds& bounds) + { + std::array idx = {}; + Result result; + + if (to_min) { + result.score = std::numeric_limits::max(); + run(idx, result, bounds, std::forward(fn), + std::less{}); + } + else { + result.score = std::numeric_limits::lowest(); + run(idx, result, bounds, std::forward(fn), + std::greater{}); + } + + return result; + } +}; + +} // namespace detail + +using AlgBruteForce = detail::AlgBurteForce; + +template<> +class Optimizer { + AlgBruteForce m_alg; + +public: + + Optimizer(const StopCriteria &cr = {}, size_t gridsz = 100) + : m_alg{cr, gridsz} + {} + + Optimizer& to_max() { m_alg.to_min = false; return *this; } + Optimizer& to_min() { m_alg.to_min = true; return *this; } + + template + Result optimize(Func&& func, + const Input &initvals, + const Bounds& bounds) + { + return m_alg.optimize(std::forward(func), initvals, bounds); + } + + Optimizer &set_criteria(const StopCriteria &cr) + { + m_alg.stc = cr; return *this; + } + + const StopCriteria &get_criteria() const { return m_alg.stc; } +}; + +}} // namespace Slic3r::opt + +#endif // BRUTEFORCEOPTIMIZER_HPP diff --git a/src/libslic3r/Optimize/NLoptOptimizer.hpp b/src/libslic3r/Optimize/NLoptOptimizer.hpp new file mode 100644 index 0000000000..826b1632ae --- /dev/null +++ b/src/libslic3r/Optimize/NLoptOptimizer.hpp @@ -0,0 +1,233 @@ +#ifndef NLOPTOPTIMIZER_HPP +#define NLOPTOPTIMIZER_HPP + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4244) +#pragma warning(disable: 4267) +#endif +#include +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#include + +#include + +namespace Slic3r { namespace opt { + +namespace detail { + +// Helper types for NLopt algorithm selection in template contexts +template struct NLoptAlg {}; + +// NLopt can combine multiple algorithms if one is global an other is a local +// method. This is how template specializations can be informed about this fact. +template +struct NLoptAlgComb {}; + +template struct IsNLoptAlg { + static const constexpr bool value = false; +}; + +template struct IsNLoptAlg> { + static const constexpr bool value = true; +}; + +template +struct IsNLoptAlg> { + static const constexpr bool value = true; +}; + +template +using NLoptOnly = std::enable_if_t::value, T>; + + +enum class OptDir { MIN, MAX }; // Where to optimize + +struct NLopt { // Helper RAII class for nlopt_opt + nlopt_opt ptr = nullptr; + + template explicit NLopt(A&&...a) + { + ptr = nlopt_create(std::forward(a)...); + } + + NLopt(const NLopt&) = delete; + NLopt(NLopt&&) = delete; + NLopt& operator=(const NLopt&) = delete; + NLopt& operator=(NLopt&&) = delete; + + ~NLopt() { nlopt_destroy(ptr); } +}; + +template class NLoptOpt {}; + +// Optimizers based on NLopt. +template class NLoptOpt> { +protected: + StopCriteria m_stopcr; + OptDir m_dir; + + template using TOptData = + std::tuple*, NLoptOpt*, nlopt_opt>; + + template + static double optfunc(unsigned n, const double *params, + double *gradient, + void *data) + { + assert(n >= N); + + auto tdata = static_cast*>(data); + + if (std::get<1>(*tdata)->m_stopcr.stop_condition()) + nlopt_force_stop(std::get<2>(*tdata)); + + auto fnptr = std::get<0>(*tdata); + auto funval = to_arr(params); + + double scoreval = 0.; + using RetT = decltype((*fnptr)(funval)); + if constexpr (std::is_convertible_v>) { + ScoreGradient score = (*fnptr)(funval); + for (size_t i = 0; i < n; ++i) gradient[i] = (*score.gradient)[i]; + scoreval = score.score; + } else { + scoreval = (*fnptr)(funval); + } + + return scoreval; + } + + template + void set_up(NLopt &nl, const Bounds& bounds) + { + std::array lb, ub; + + for (size_t i = 0; i < N; ++i) { + lb[i] = bounds[i].min(); + ub[i] = bounds[i].max(); + } + + nlopt_set_lower_bounds(nl.ptr, lb.data()); + nlopt_set_upper_bounds(nl.ptr, ub.data()); + + double abs_diff = m_stopcr.abs_score_diff(); + double rel_diff = m_stopcr.rel_score_diff(); + double stopval = m_stopcr.stop_score(); + if(!std::isnan(abs_diff)) nlopt_set_ftol_abs(nl.ptr, abs_diff); + if(!std::isnan(rel_diff)) nlopt_set_ftol_rel(nl.ptr, rel_diff); + if(!std::isnan(stopval)) nlopt_set_stopval(nl.ptr, stopval); + + if(this->m_stopcr.max_iterations() > 0) + nlopt_set_maxeval(nl.ptr, this->m_stopcr.max_iterations()); + } + + template + Result optimize(NLopt &nl, Fn &&fn, const Input &initvals) + { + Result r; + + TOptData data = std::make_tuple(&fn, this, nl.ptr); + + switch(m_dir) { + case OptDir::MIN: + nlopt_set_min_objective(nl.ptr, optfunc, &data); break; + case OptDir::MAX: + nlopt_set_max_objective(nl.ptr, optfunc, &data); break; + } + + r.optimum = initvals; + r.resultcode = nlopt_optimize(nl.ptr, r.optimum.data(), &r.score); + + return r; + } + +public: + + template + Result optimize(Func&& func, + const Input &initvals, + const Bounds& bounds) + { + NLopt nl{alg, N}; + set_up(nl, bounds); + + return optimize(nl, std::forward(func), initvals); + } + + explicit NLoptOpt(StopCriteria stopcr = {}) : m_stopcr(stopcr) {} + + void set_criteria(const StopCriteria &cr) { m_stopcr = cr; } + const StopCriteria &get_criteria() const noexcept { return m_stopcr; } + void set_dir(OptDir dir) noexcept { m_dir = dir; } + + void seed(long s) { nlopt_srand(s); } +}; + +template +class NLoptOpt>: public NLoptOpt> +{ + using Base = NLoptOpt>; +public: + + template + Result optimize(Fn&& f, + const Input &initvals, + const Bounds& bounds) + { + NLopt nl_glob{glob, N}, nl_loc{loc, N}; + + Base::set_up(nl_glob, bounds); + Base::set_up(nl_loc, bounds); + nlopt_set_local_optimizer(nl_glob.ptr, nl_loc.ptr); + + return Base::optimize(nl_glob, std::forward(f), initvals); + } + + explicit NLoptOpt(StopCriteria stopcr = {}) : Base{stopcr} {} +}; + +} // namespace detail; + +// Optimizers based on NLopt. +template class Optimizer> { + detail::NLoptOpt m_opt; + +public: + + Optimizer& to_max() { m_opt.set_dir(detail::OptDir::MAX); return *this; } + Optimizer& to_min() { m_opt.set_dir(detail::OptDir::MIN); return *this; } + + template + Result optimize(Func&& func, + const Input &initvals, + const Bounds& bounds) + { + return m_opt.optimize(std::forward(func), initvals, bounds); + } + + explicit Optimizer(StopCriteria stopcr = {}) : m_opt(stopcr) {} + + Optimizer &set_criteria(const StopCriteria &cr) + { + m_opt.set_criteria(cr); return *this; + } + + const StopCriteria &get_criteria() const { return m_opt.get_criteria(); } + + void seed(long s) { m_opt.seed(s); } +}; + +// Predefinded NLopt algorithms +using AlgNLoptGenetic = detail::NLoptAlgComb; +using AlgNLoptSubplex = detail::NLoptAlg; +using AlgNLoptSimplex = detail::NLoptAlg; +using AlgNLoptDIRECT = detail::NLoptAlg; +using AlgNLoptMLSL = detail::NLoptAlg; + +}} // namespace Slic3r::opt + +#endif // NLOPTOPTIMIZER_HPP diff --git a/src/libslic3r/Optimize/Optimizer.hpp b/src/libslic3r/Optimize/Optimizer.hpp new file mode 100644 index 0000000000..05191eba26 --- /dev/null +++ b/src/libslic3r/Optimize/Optimizer.hpp @@ -0,0 +1,182 @@ +#ifndef OPTIMIZER_HPP +#define OPTIMIZER_HPP + +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { namespace opt { + +// A type to hold the complete result of the optimization. +template struct Result { + int resultcode; // Method dependent + std::array optimum; + double score; +}; + +// An interval of possible input values for optimization +class Bound { + double m_min, m_max; + +public: + Bound(double min = std::numeric_limits::min(), + double max = std::numeric_limits::max()) + : m_min(min), m_max(max) + {} + + double min() const noexcept { return m_min; } + double max() const noexcept { return m_max; } +}; + +// Helper types for optimization function input and bounds +template using Input = std::array; +template using Bounds = std::array; + +// A type for specifying the stop criteria. Setter methods can be concatenated +class StopCriteria { + + // If the absolute value difference between two scores. + double m_abs_score_diff = std::nan(""); + + // If the relative value difference between two scores. + double m_rel_score_diff = std::nan(""); + + // Stop if this value or better is found. + double m_stop_score = std::nan(""); + + // A predicate that if evaluates to true, the optimization should terminate + // and the best result found prior to termination should be returned. + std::function m_stop_condition = [] { return false; }; + + // The max allowed number of iterations. + unsigned m_max_iterations = 0; + +public: + + StopCriteria & abs_score_diff(double val) + { + m_abs_score_diff = val; return *this; + } + + double abs_score_diff() const { return m_abs_score_diff; } + + StopCriteria & rel_score_diff(double val) + { + m_rel_score_diff = val; return *this; + } + + double rel_score_diff() const { return m_rel_score_diff; } + + StopCriteria & stop_score(double val) + { + m_stop_score = val; return *this; + } + + double stop_score() const { return m_stop_score; } + + StopCriteria & max_iterations(double val) + { + m_max_iterations = val; return *this; + } + + double max_iterations() const { return m_max_iterations; } + + template StopCriteria & stop_condition(Fn &&cond) + { + m_stop_condition = cond; return *this; + } + + bool stop_condition() { return m_stop_condition(); } +}; + +// Helper class to use optimization methods involving gradient. +template struct ScoreGradient { + double score; + std::optional> gradient; + + ScoreGradient(double s, const std::array &grad) + : score{s}, gradient{grad} + {} +}; + +// Helper to be used in static_assert. +template struct always_false { enum { value = false }; }; + +// Basic interface to optimizer object +template class Optimizer { +public: + + Optimizer(const StopCriteria &) + { + static_assert (always_false::value, + "Optimizer unimplemented for given method!"); + } + + // Switch optimization towards function minimum + Optimizer &to_min() { return *this; } + + // Switch optimization towards function maximum + Optimizer &to_max() { return *this; } + + // Set criteria for successive optimizations + Optimizer &set_criteria(const StopCriteria &) { return *this; } + + // Get current criteria + StopCriteria get_criteria() const { return {}; }; + + // Find function minimum or maximum for Func which has has signature: + // double(const Input &input) and input with dimension N + // + // Initial starting point can be given as the second parameter. + // + // For each dimension an interval (Bound) has to be given marking the bounds + // for that dimension. + // + // initvals have to be within the specified bounds, otherwise its undefined + // behavior. + // + // Func can return a score of type double or optionally a ScoreGradient + // class to indicate the function gradient for a optimization methods that + // make use of the gradient. + template + Result optimize(Func&& /*func*/, + const Input &/*initvals*/, + const Bounds& /*bounds*/) { return {}; } + + // optional for randomized methods: + void seed(long /*s*/) {} +}; + +namespace detail { + +// Helper to convert C style array to std::array. The copy should be optimized +// away with modern compilers. +template auto to_arr(const T *a) +{ + std::array r; + std::copy(a, a + N, std::begin(r)); + return r; +} + +template auto to_arr(const T (&a) [N]) +{ + return to_arr(static_cast(a)); +} + +} // namespace detail + +// Helper functions to create bounds, initial value +template Bounds bounds(const Bound (&b) [N]) { return detail::to_arr(b); } +template Input initvals(const double (&a) [N]) { return detail::to_arr(a); } +template auto score_gradient(double s, const double (&grad)[N]) +{ + return ScoreGradient(s, detail::to_arr(grad)); +} + +}} // namespace Slic3r::opt + +#endif // OPTIMIZER_HPP diff --git a/src/libslic3r/PNGRead.cpp b/src/libslic3r/PNGRead.cpp new file mode 100644 index 0000000000..e66143b845 --- /dev/null +++ b/src/libslic3r/PNGRead.cpp @@ -0,0 +1,100 @@ +#include "PNGRead.hpp" + +#include + +#include +#include + +namespace Slic3r { namespace png { + +struct PNGDescr { + png_struct *png = nullptr; png_info *info = nullptr; + + PNGDescr() = default; + PNGDescr(const PNGDescr&) = delete; + PNGDescr(PNGDescr&&) = delete; + PNGDescr& operator=(const PNGDescr&) = delete; + PNGDescr& operator=(PNGDescr&&) = delete; + + ~PNGDescr() + { + if (png && info) png_destroy_info_struct(png, &info); + if (png) png_destroy_read_struct( &png, nullptr, nullptr); + } +}; + +bool is_png(const ReadBuf &rb) +{ + static const constexpr int PNG_SIG_BYTES = 8; + +#if PNG_LIBPNG_VER_MINOR <= 2 + // Earlier libpng versions had png_sig_cmp(png_bytep, ...) which is not + // a const pointer. It is not possible to cast away the const qualifier from + // the input buffer so... yes... life is challenging... + png_byte buf[PNG_SIG_BYTES]; + auto inbuf = static_cast(rb.buf); + std::copy(inbuf, inbuf + PNG_SIG_BYTES, buf); +#else + auto buf = static_cast(rb.buf); +#endif + + return rb.sz >= PNG_SIG_BYTES && !png_sig_cmp(buf, 0, PNG_SIG_BYTES); +} + +// Buffer read callback for libpng. It provides an allocated output buffer and +// the amount of data it desires to read from the input. +void png_read_callback(png_struct *png_ptr, + png_bytep outBytes, + png_size_t byteCountToRead) +{ + // Retrieve our input buffer through the png_ptr + auto reader = static_cast(png_get_io_ptr(png_ptr)); + + if (!reader || !reader->is_ok()) return; + + reader->read(static_cast(outBytes), byteCountToRead); +} + +bool decode_png(IStream &in_buf, ImageGreyscale &out_img) +{ + static const constexpr int PNG_SIG_BYTES = 8; + + std::vector sig(PNG_SIG_BYTES, 0); + in_buf.read(sig.data(), PNG_SIG_BYTES); + if (!png_check_sig(sig.data(), PNG_SIG_BYTES)) + return false; + + PNGDescr dsc; + dsc.png = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, + nullptr); + + if(!dsc.png) return false; + + dsc.info = png_create_info_struct(dsc.png); + if(!dsc.info) return false; + + png_set_read_fn(dsc.png, static_cast(&in_buf), png_read_callback); + + // Tell that we have already read the first bytes to check the signature + png_set_sig_bytes(dsc.png, PNG_SIG_BYTES); + + png_read_info(dsc.png, dsc.info); + + out_img.cols = png_get_image_width(dsc.png, dsc.info); + out_img.rows = png_get_image_height(dsc.png, dsc.info); + size_t color_type = png_get_color_type(dsc.png, dsc.info); + size_t bit_depth = png_get_bit_depth(dsc.png, dsc.info); + + if (color_type != PNG_COLOR_TYPE_GRAY || bit_depth != 8) + return false; + + out_img.buf.resize(out_img.rows * out_img.cols); + + auto readbuf = static_cast(out_img.buf.data()); + for (size_t r = 0; r < out_img.rows; ++r) + png_read_row(dsc.png, readbuf + r * out_img.cols, nullptr); + + return true; +} + +}} // namespace Slic3r::png diff --git a/src/libslic3r/PNGRead.hpp b/src/libslic3r/PNGRead.hpp new file mode 100644 index 0000000000..082edd5691 --- /dev/null +++ b/src/libslic3r/PNGRead.hpp @@ -0,0 +1,70 @@ +#ifndef PNGREAD_HPP +#define PNGREAD_HPP + +#include +#include +#include + +namespace Slic3r { namespace png { + +// Interface for an input stream of encoded png image data. +struct IStream { + virtual ~IStream() = default; + virtual size_t read(std::uint8_t *outp, size_t amount) = 0; + virtual bool is_ok() const = 0; +}; + +// The output format of decode_png: a 2D pixel matrix stored continuously row +// after row (row major layout). +template struct Image { + std::vector buf; + size_t rows, cols; + PxT get(size_t row, size_t col) const { return buf[row * cols + col]; } +}; + +using ImageGreyscale = Image; + +// Only decodes true 8 bit grayscale png images. Returns false for other formats +// TODO (if needed): implement transformation of rgb images into grayscale... +bool decode_png(IStream &stream, ImageGreyscale &out_img); + +// TODO (if needed) +// struct RGB { uint8_t r, g, b; }; +// using ImageRGB = Image; +// bool decode_png(IStream &stream, ImageRGB &img); + + +// Encoded png data buffer: a simple read-only buffer and its size. +struct ReadBuf { const void *buf = nullptr; const size_t sz = 0; }; + +bool is_png(const ReadBuf &pngbuf); + +template bool decode_png(const ReadBuf &in_buf, Img &out_img) +{ + struct ReadBufStream: public IStream { + const ReadBuf &rbuf_ref; size_t pos = 0; + + explicit ReadBufStream(const ReadBuf &buf): rbuf_ref{buf} {} + + size_t read(std::uint8_t *outp, size_t amount) override + { + if (amount > rbuf_ref.sz - pos) return 0; + + auto buf = static_cast(rbuf_ref.buf); + std::copy(buf + pos, buf + (pos + amount), outp); + pos += amount; + + return amount; + } + + bool is_ok() const override { return pos < rbuf_ref.sz; } + } stream{in_buf}; + + return decode_png(stream, out_img); +} + +// TODO: std::istream of FILE* could be similarly adapted in case its needed... + +}} // namespace Slic3r::png + +#endif // PNGREAD_HPP diff --git a/src/libslic3r/PlaceholderParser.cpp b/src/libslic3r/PlaceholderParser.cpp index 527d82b4cb..0434e3a0aa 100644 --- a/src/libslic3r/PlaceholderParser.cpp +++ b/src/libslic3r/PlaceholderParser.cpp @@ -1,4 +1,5 @@ #include "PlaceholderParser.hpp" +#include "Exception.hpp" #include "Flow.hpp" #include #include @@ -1303,7 +1304,7 @@ static std::string process_macro(const std::string &templ, client::MyContext &co if (!context.error_message.empty()) { if (context.error_message.back() != '\n' && context.error_message.back() != '\r') context.error_message += '\n'; - throw std::runtime_error(context.error_message); + throw Slic3r::RuntimeError(context.error_message); } return output; } @@ -1319,7 +1320,7 @@ std::string PlaceholderParser::process(const std::string &templ, unsigned int cu } // Evaluate a boolean expression using the full expressive power of the PlaceholderParser boolean expression syntax. -// Throws std::runtime_error on syntax or runtime error. +// Throws Slic3r::RuntimeError on syntax or runtime error. bool PlaceholderParser::evaluate_boolean_expression(const std::string &templ, const DynamicConfig &config, const DynamicConfig *config_override) { client::MyContext context; diff --git a/src/libslic3r/PlaceholderParser.hpp b/src/libslic3r/PlaceholderParser.hpp index d744dba220..14be020aca 100644 --- a/src/libslic3r/PlaceholderParser.hpp +++ b/src/libslic3r/PlaceholderParser.hpp @@ -40,11 +40,11 @@ public: const DynamicConfig* external_config() const { return m_external_config; } // Fill in the template using a macro processing language. - // Throws std::runtime_error on syntax or runtime error. + // Throws Slic3r::RuntimeError on syntax or runtime error. std::string process(const std::string &templ, unsigned int current_extruder_id = 0, const DynamicConfig *config_override = nullptr) const; // Evaluate a boolean expression using the full expressive power of the PlaceholderParser boolean expression syntax. - // Throws std::runtime_error on syntax or runtime error. + // Throws Slic3r::RuntimeError on syntax or runtime error. static bool evaluate_boolean_expression(const std::string &templ, const DynamicConfig &config, const DynamicConfig *config_override = nullptr); // Update timestamp, year, month, day, hour, minute, second variables at the provided config. diff --git a/src/libslic3r/Point.cpp b/src/libslic3r/Point.cpp index c2417d0dc9..f3ed413421 100644 --- a/src/libslic3r/Point.cpp +++ b/src/libslic3r/Point.cpp @@ -44,16 +44,6 @@ Pointf3s transform(const Pointf3s& points, const Transform3d& t) return ret_points; } -void Point::rotate(double angle) -{ - double cur_x = (double)(*this)(0); - double cur_y = (double)(*this)(1); - double s = ::sin(angle); - double c = ::cos(angle); - (*this)(0) = (coord_t)round(c * cur_x - s * cur_y); - (*this)(1) = (coord_t)round(c * cur_y + s * cur_x); -} - void Point::rotate(double angle, const Point ¢er) { double cur_x = (double)(*this)(0); diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index b818cd8bed..5082bb746f 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -60,10 +60,13 @@ inline int64_t cross2(const Vec2i64 &v1, const Vec2i64 &v2) { return v1(0) * v2( inline float cross2(const Vec2f &v1, const Vec2f &v2) { return v1(0) * v2(1) - v1(1) * v2(0); } inline double cross2(const Vec2d &v1, const Vec2d &v2) { return v1(0) * v2(1) - v1(1) * v2(0); } -inline Vec2i32 to_2d(const Vec2i32 &pt3) { return Vec2i32(pt3(0), pt3(1)); } -inline Vec2i64 to_2d(const Vec3i64 &pt3) { return Vec2i64(pt3(0), pt3(1)); } -inline Vec2f to_2d(const Vec3f &pt3) { return Vec2f (pt3(0), pt3(1)); } -inline Vec2d to_2d(const Vec3d &pt3) { return Vec2d (pt3(0), pt3(1)); } +template Eigen::Matrix +to_2d(const Eigen::Matrix &ptN) { return {ptN(0), ptN(1)}; } + +//inline Vec2i32 to_2d(const Vec3i32 &pt3) { return Vec2i32(pt3(0), pt3(1)); } +//inline Vec2i64 to_2d(const Vec3i64 &pt3) { return Vec2i64(pt3(0), pt3(1)); } +//inline Vec2f to_2d(const Vec3f &pt3) { return Vec2f (pt3(0), pt3(1)); } +//inline Vec2d to_2d(const Vec3d &pt3) { return Vec2d (pt3(0), pt3(1)); } inline Vec3d to_3d(const Vec2d &v, double z) { return Vec3d(v(0), v(1), z); } inline Vec3f to_3d(const Vec2f &v, float z) { return Vec3f(v(0), v(1), z); } @@ -85,6 +88,8 @@ inline std::string to_string(const Vec3d &pt) { return std::string("[") + std: std::vector transform(const std::vector& points, const Transform3f& t); Pointf3s transform(const Pointf3s& points, const Transform3d& t); +template using Vec = Eigen::Matrix; + class Point : public Vec2crd { public: @@ -100,6 +105,7 @@ public: template Point(const Eigen::MatrixBase &other) : Vec2crd(other) {} static Point new_scale(coordf_t x, coordf_t y) { return Point(coord_t(scale_(x)), coord_t(scale_(y))); } + static Point new_scale(const Vec2d &v) { return Point(coord_t(scale_(v.x())), coord_t(scale_(v.y()))); } // This method allows you to assign Eigen expressions to MyVectorType template @@ -116,7 +122,14 @@ public: Point& operator*=(const double &rhs) { (*this)(0) = coord_t((*this)(0) * rhs); (*this)(1) = coord_t((*this)(1) * rhs); return *this; } Point operator*(const double &rhs) { return Point((*this)(0) * rhs, (*this)(1) * rhs); } - void rotate(double angle); + void rotate(double angle) { this->rotate(std::cos(angle), std::sin(angle)); } + void rotate(double cos_a, double sin_a) { + double cur_x = (double)(*this)(0); + double cur_y = (double)(*this)(1); + (*this)(0) = (coord_t)round(cos_a * cur_x - sin_a * cur_y); + (*this)(1) = (coord_t)round(cos_a * cur_y + sin_a * cur_x); + } + void rotate(double angle, const Point ¢er); Point rotated(double angle) const { Point res(*this); res.rotate(angle); return res; } Point rotated(double angle, const Point ¢er) const { Point res(*this); res.rotate(angle, center); return res; } diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index 48e63dab31..13cdf65b4f 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -1,5 +1,6 @@ #include "BoundingBox.hpp" #include "ClipperUtils.hpp" +#include "Exception.hpp" #include "Polygon.hpp" #include "Polyline.hpp" @@ -16,7 +17,7 @@ Polyline Polygon::split_at_vertex(const Point &point) const for (const Point &pt : this->points) if (pt == point) return this->split_at_index(int(&pt - &this->points.front())); - throw std::invalid_argument("Point not found"); + throw Slic3r::InvalidArgument("Point not found"); return Polyline(); } @@ -259,6 +260,44 @@ Point Polygon::point_projection(const Point &point) const return proj; } +std::vector Polygon::parameter_by_length() const +{ + // Parametrize the polygon by its length. + std::vector lengths(points.size()+1, 0.); + for (size_t i = 1; i < points.size(); ++ i) + lengths[i] = lengths[i-1] + (points[i] - points[i-1]).cast().norm(); + lengths.back() = lengths[lengths.size()-2] + (points.front() - points.back()).cast().norm(); + return lengths; +} + +void Polygon::densify(float min_length, std::vector* lengths_ptr) +{ + std::vector lengths_local; + std::vector& lengths = lengths_ptr ? *lengths_ptr : lengths_local; + + if (! lengths_ptr) { + // Length parametrization has not been provided. Calculate our own. + lengths = this->parameter_by_length(); + } + + assert(points.size() == lengths.size() - 1); + + for (size_t j=1; j<=points.size(); ++j) { + bool last = j == points.size(); + int i = last ? 0 : j; + + if (lengths[j] - lengths[j-1] > min_length) { + Point diff = points[i] - points[j-1]; + float diff_len = lengths[j] - lengths[j-1]; + float r = (min_length/diff_len); + Point new_pt = points[j-1] + Point(r*diff[0], r*diff[1]); + points.insert(points.begin() + j, new_pt); + lengths.insert(lengths.begin() + j, lengths[j-1] + min_length); + } + } + assert(points.size() == lengths.size() - 1); +} + BoundingBox get_extents(const Points &points) { return BoundingBox(points); diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp index ab7c171e3c..f5aa289143 100644 --- a/src/libslic3r/Polygon.hpp +++ b/src/libslic3r/Polygon.hpp @@ -61,12 +61,14 @@ public: bool contains(const Point &point) const; Polygons simplify(double tolerance) const; void simplify(double tolerance, Polygons &polygons) const; + void densify(float min_length, std::vector* lengths = nullptr); void triangulate_convex(Polygons* polygons) const; Point centroid() const; Points concave_points(double angle = PI) const; Points convex_points(double angle = PI) const; // Projection of a point onto the polygon. Point point_projection(const Point &point) const; + std::vector parameter_by_length() const; }; inline bool operator==(const Polygon &lhs, const Polygon &rhs) { return lhs.points == rhs.points; } @@ -86,6 +88,14 @@ inline double total_length(const Polygons &polylines) { return total; } +inline double area(const Polygons &polys) +{ + double s = 0.; + for (auto &p : polys) s += p.area(); + + return s; +} + // Remove sticks (tentacles with zero area) from the polygon. extern bool remove_sticks(Polygon &poly); extern bool remove_sticks(Polygons &polys); diff --git a/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp index 26aad83d2b..d24788c7bc 100644 --- a/src/libslic3r/Polyline.cpp +++ b/src/libslic3r/Polyline.cpp @@ -1,5 +1,6 @@ #include "BoundingBox.hpp" #include "Polyline.hpp" +#include "Exception.hpp" #include "ExPolygon.hpp" #include "ExPolygonCollection.hpp" #include "Line.hpp" @@ -19,7 +20,7 @@ Polyline::operator Polylines() const Polyline::operator Line() const { if (this->points.size() > 2) - throw std::invalid_argument("Can't convert polyline with more than two points to a line"); + throw Slic3r::InvalidArgument("Can't convert polyline with more than two points to a line"); return Line(this->points.front(), this->points.back()); } @@ -207,7 +208,7 @@ BoundingBox get_extents(const Polylines &polylines) const Point& leftmost_point(const Polylines &polylines) { if (polylines.empty()) - throw std::invalid_argument("leftmost_point() called on empty PolylineCollection"); + throw Slic3r::InvalidArgument("leftmost_point() called on empty PolylineCollection"); Polylines::const_iterator it = polylines.begin(); const Point *p = &it->leftmost_point(); for (++ it; it != polylines.end(); ++it) { diff --git a/src/slic3r/GUI/Preset.cpp b/src/libslic3r/Preset.cpp similarity index 73% rename from src/slic3r/GUI/Preset.cpp rename to src/libslic3r/Preset.cpp index d810c399d5..421a1f39e2 100644 --- a/src/slic3r/GUI/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1,10 +1,8 @@ #include +#include "Exception.hpp" #include "Preset.hpp" #include "AppConfig.hpp" -#include "BitmapCache.hpp" -#include "I18N.hpp" -#include "wxExtensions.hpp" #ifdef _MSC_VER #define WIN32_LEAN_AND_MEAN @@ -12,6 +10,16 @@ #include #endif /* _MSC_VER */ +// instead of #include "slic3r/GUI/I18N.hpp" : +#ifndef L +// !!! If you needed to translate some string, +// !!! please use _L(string) +// !!! _() - is a standard wxWidgets macro to translate +// !!! L() is used only for marking localizable string +// !!! It will be used in "xgettext" to create a Locating Message Catalog. +#define L(s) s +#endif /* L */ + #include #include #include @@ -19,6 +27,7 @@ #include #include #include +#include #include #include @@ -30,15 +39,9 @@ #include #include -#include -#include -#include -#include - -#include "libslic3r/libslic3r.h" -#include "libslic3r/Utils.hpp" -#include "libslic3r/PlaceholderParser.hpp" -#include "Plater.hpp" +#include "libslic3r.h" +#include "Utils.hpp" +#include "PlaceholderParser.hpp" using boost::property_tree::ptree; @@ -105,7 +108,7 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem const std::string id = path.stem().string(); if (! boost::filesystem::exists(path)) { - throw std::runtime_error((boost::format("Cannot load Vendor Config Bundle `%1%`: File not found: `%2%`.") % id % path).str()); + throw Slic3r::RuntimeError((boost::format("Cannot load Vendor Config Bundle `%1%`: File not found: `%2%`.") % id % path).str()); } VendorProfile res(id); @@ -115,7 +118,7 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem { auto res = tree.find(key); if (res == tree.not_found()) { - throw std::runtime_error((boost::format("Vendor Config Bundle `%1%` is not valid: Missing secion or key: `%2%`.") % id % key).str()); + throw Slic3r::RuntimeError((boost::format("Vendor Config Bundle `%1%` is not valid: Missing secion or key: `%2%`.") % id % key).str()); } return res; }; @@ -127,7 +130,7 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem auto config_version_str = get_or_throw(vendor_section, "config_version")->second.data(); auto config_version = Semver::parse(config_version_str); if (! config_version) { - throw std::runtime_error((boost::format("Vendor Config Bundle `%1%` is not valid: Cannot parse config_version: `%2%`.") % id % config_version_str).str()); + throw Slic3r::RuntimeError((boost::format("Vendor Config Bundle `%1%` is not valid: Cannot parse config_version: `%2%`.") % id % config_version_str).str()); } else { res.config_version = std::move(*config_version); } @@ -245,9 +248,9 @@ const std::string& Preset::suffix_modified() return g_suffix_modified; } -void Preset::update_suffix_modified() +void Preset::update_suffix_modified(const std::string& new_suffix_modified) { - g_suffix_modified = (" (" + _(L("modified")) + ")").ToUTF8().data(); + g_suffix_modified = new_suffix_modified; } // Remove an optional "(modified)" suffix from a name. // This converts a UI name to a unique preset identifier. @@ -451,6 +454,21 @@ const std::vector& Preset::filament_options() return s_opts; } +const std::vector& Preset::machine_limits_options() +{ + static std::vector s_opts; + if (s_opts.empty()) { + s_opts = { + "machine_max_acceleration_extruding", "machine_max_acceleration_retracting", + "machine_max_acceleration_x", "machine_max_acceleration_y", "machine_max_acceleration_z", "machine_max_acceleration_e", + "machine_max_feedrate_x", "machine_max_feedrate_y", "machine_max_feedrate_z", "machine_max_feedrate_e", + "machine_min_extruding_rate", "machine_min_travel_rate", + "machine_max_jerk_x", "machine_max_jerk_y", "machine_max_jerk_z", "machine_max_jerk_e", + }; + } + return s_opts; +} + const std::vector& Preset::printer_options() { static std::vector s_opts; @@ -465,13 +483,10 @@ const std::vector& Preset::printer_options() "between_objects_gcode", "printer_vendor", "printer_model", "printer_variant", "printer_notes", "cooling_tube_retraction", "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "max_print_height", "default_print_profile", "inherits", - "remaining_times", "silent_mode", "machine_max_acceleration_extruding", "machine_max_acceleration_retracting", - "machine_max_acceleration_x", "machine_max_acceleration_y", "machine_max_acceleration_z", "machine_max_acceleration_e", - "machine_max_feedrate_x", "machine_max_feedrate_y", "machine_max_feedrate_z", "machine_max_feedrate_e", - "machine_min_extruding_rate", "machine_min_travel_rate", - "machine_max_jerk_x", "machine_max_jerk_y", "machine_max_jerk_z", "machine_max_jerk_e", - "thumbnails" + "remaining_times", "silent_mode", + "machine_limits_usage", "thumbnails" }; + s_opts.insert(s_opts.end(), Preset::machine_limits_options().begin(), Preset::machine_limits_options().end()); s_opts.insert(s_opts.end(), Preset::nozzle_options().begin(), Preset::nozzle_options().end()); } return s_opts; @@ -496,6 +511,7 @@ const std::vector& Preset::sla_print_options() "support_head_penetration", "support_head_width", "support_pillar_diameter", + "support_small_pillar_diameter_percent", "support_max_bridges_on_pillar", "support_pillar_connection_mode", "support_buildplate_only", @@ -590,10 +606,7 @@ const std::vector& Preset::sla_printer_options() PresetCollection::PresetCollection(Preset::Type type, const std::vector &keys, const Slic3r::StaticPrintConfig &defaults, const std::string &default_name) : m_type(type), m_edited_preset(type, "", false), - m_idx_selected(0), - m_bitmap_main_frame(new wxBitmap), - m_bitmap_add(new wxBitmap), - m_bitmap_cache(new GUI::BitmapCache) + m_idx_selected(0) { // Insert just the default preset. this->add_default_preset(keys, defaults, default_name); @@ -602,12 +615,6 @@ PresetCollection::PresetCollection(Preset::Type type, const std::vector &keys, // Throws an exception on error. void PresetCollection::load_presets(const std::string &dir_path, const std::string &subdir) { - boost::filesystem::path dir = boost::filesystem::canonical(boost::filesystem::path(dir_path) / subdir).make_preferred(); + // Don't use boost::filesystem::canonical() on Windows, it is broken in regard to reparse points, + // see https://github.com/prusa3d/PrusaSlicer/issues/732 + boost::filesystem::path dir = boost::filesystem::absolute(boost::filesystem::path(dir_path) / subdir).make_preferred(); m_dir_path = dir.string(); std::string errors_cummulative; // Store the loaded presets into a new vector, otherwise the binary search for already existing presets would be broken. @@ -676,9 +685,9 @@ void PresetCollection::load_presets(const std::string &dir_path, const std::stri preset.file << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed"; preset.loaded = true; } catch (const std::ifstream::failure &err) { - throw std::runtime_error(std::string("The selected preset cannot be loaded: ") + preset.file + "\n\tReason: " + err.what()); + throw Slic3r::RuntimeError(std::string("The selected preset cannot be loaded: ") + preset.file + "\n\tReason: " + err.what()); } catch (const std::runtime_error &err) { - throw std::runtime_error(std::string("Failed loading the preset file: ") + preset.file + "\n\tReason: " + err.what()); + throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + preset.file + "\n\tReason: " + err.what()); } presets_loaded.emplace_back(preset); } catch (const std::runtime_error &err) { @@ -690,7 +699,7 @@ void PresetCollection::load_presets(const std::string &dir_path, const std::stri std::sort(m_presets.begin() + m_num_default_presets, m_presets.end()); this->select_preset(first_visible_idx()); if (! errors_cummulative.empty()) - throw std::runtime_error(errors_cummulative); + throw Slic3r::RuntimeError(errors_cummulative); } // Load a preset from an already parsed config file, insert it into the sorted sequence of presets @@ -951,16 +960,6 @@ bool PresetCollection::delete_preset(const std::string& name) return true; } -void PresetCollection::load_bitmap_default(const std::string &file_name) -{ - *m_bitmap_main_frame = create_scaled_bitmap(file_name); -} - -void PresetCollection::load_bitmap_add(const std::string &file_name) -{ - *m_bitmap_add = create_scaled_bitmap(file_name); -} - const Preset* PresetCollection::get_selected_preset_parent() const { if (this->get_selected_idx() == size_t(-1)) @@ -1119,279 +1118,15 @@ size_t PresetCollection::update_compatible_internal(const PresetWithVendorProfil // Delete the current preset, activate the first visible preset. //void PresetCollection::delete_current_preset(); -// Update the wxChoice UI component from this list of presets. -// Hide the -void PresetCollection::update_plater_ui(GUI::PresetComboBox *ui) -{ - if (ui == nullptr) - return; - - // Otherwise fill in the list from scratch. - ui->Freeze(); - ui->Clear(); - size_t selected_preset_item = INT_MAX; // some value meaning that no one item is selected - - const Preset &selected_preset = this->get_selected_preset(); - // Show wide icons if the currently selected preset is not compatible with the current printer, - // and draw a red flag in front of the selected preset. - bool wide_icons = ! selected_preset.is_compatible && m_bitmap_incompatible != nullptr; - - /* It's supposed that standard size of an icon is 16px*16px for 100% scaled display. - * So set sizes for solid_colored icons used for filament preset - * and scale them in respect to em_unit value - */ - const float scale_f = ui->em_unit() * 0.1f; - const int icon_height = 16 * scale_f + 0.5f; - const int icon_width = 16 * scale_f + 0.5f; - const int thin_space_icon_width = 4 * scale_f + 0.5f; - const int wide_space_icon_width = 6 * scale_f + 0.5f; - - std::map nonsys_presets; - wxString selected = ""; - wxString tooltip = ""; - if (!this->m_presets.front().is_visible) - ui->set_label_marker(ui->Append(PresetCollection::separator(L("System presets")), wxNullBitmap)); - for (size_t i = this->m_presets.front().is_visible ? 0 : m_num_default_presets; i < this->m_presets.size(); ++ i) { - const Preset &preset = this->m_presets[i]; - if (! preset.is_visible || (! preset.is_compatible && i != m_idx_selected)) - continue; - - std::string bitmap_key = ""; - // !!! Temporary solution, till refactoring: create and use "sla_printer" icon instead of m_bitmap_main_frame - wxBitmap main_bmp = m_bitmap_main_frame ? *m_bitmap_main_frame : wxNullBitmap; - if (m_type == Preset::TYPE_PRINTER && preset.printer_technology()==ptSLA ) { - bitmap_key = "sla_printer"; - main_bmp = create_scaled_bitmap("sla_printer"); - } - - // If the filament preset is not compatible and there is a "red flag" icon loaded, show it left - // to the filament color image. - if (wide_icons) - bitmap_key += preset.is_compatible ? ",cmpt" : ",ncmpt"; - bitmap_key += (preset.is_system || preset.is_default) ? ",syst" : ",nsyst"; - wxBitmap *bmp = m_bitmap_cache->find(bitmap_key); - if (bmp == nullptr) { - // Create the bitmap with color bars. - std::vector bmps; - if (wide_icons) - // Paint a red flag for incompatible presets. - bmps.emplace_back(preset.is_compatible ? m_bitmap_cache->mkclear(icon_width, icon_height) : *m_bitmap_incompatible); - // Paint the color bars. - bmps.emplace_back(m_bitmap_cache->mkclear(thin_space_icon_width, icon_height)); - bmps.emplace_back(main_bmp); - // Paint a lock at the system presets. - bmps.emplace_back(m_bitmap_cache->mkclear(wide_space_icon_width, icon_height)); - bmps.emplace_back((preset.is_system || preset.is_default) ? *m_bitmap_lock : m_bitmap_cache->mkclear(icon_width, icon_height)); - bmp = m_bitmap_cache->insert(bitmap_key, bmps); - } - - const std::string name = preset.alias.empty() ? preset.name : preset.alias; - if (preset.is_default || preset.is_system) { - ui->Append(wxString::FromUTF8((/*preset.*/name + (preset.is_dirty ? g_suffix_modified : "")).c_str()), - (bmp == 0) ? main_bmp : *bmp); - if (i == m_idx_selected || - // just in case: mark selected_preset_item as a first added element - selected_preset_item == INT_MAX) { - selected_preset_item = ui->GetCount() - 1; - tooltip = wxString::FromUTF8(preset.name.c_str()); - } - } - else - { - nonsys_presets.emplace(wxString::FromUTF8((/*preset.*/name + (preset.is_dirty ? g_suffix_modified : "")).c_str()), bmp/*preset.is_compatible*/); - if (i == m_idx_selected) { - selected = wxString::FromUTF8((/*preset.*/name + (preset.is_dirty ? g_suffix_modified : "")).c_str()); - tooltip = wxString::FromUTF8(preset.name.c_str()); - } - } - if (i + 1 == m_num_default_presets) - ui->set_label_marker(ui->Append(PresetCollection::separator(L("System presets")), wxNullBitmap)); - } - if (!nonsys_presets.empty()) - { - ui->set_label_marker(ui->Append(PresetCollection::separator(L("User presets")), wxNullBitmap)); - for (std::map::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { - ui->Append(it->first, *it->second); - if (it->first == selected || - // just in case: mark selected_preset_item as a first added element - selected_preset_item == INT_MAX) - selected_preset_item = ui->GetCount() - 1; - } - } - if (m_type == Preset::TYPE_PRINTER || m_type == Preset::TYPE_SLA_MATERIAL) { - std::string bitmap_key = ""; - // If the filament preset is not compatible and there is a "red flag" icon loaded, show it left - // to the filament color image. - if (wide_icons) - bitmap_key += "wide,"; - bitmap_key += "edit_preset_list"; - wxBitmap *bmp = m_bitmap_cache->find(bitmap_key); - if (bmp == nullptr) { - // Create the bitmap with color bars. - std::vector bmps; - if (wide_icons) - // Paint a red flag for incompatible presets. - bmps.emplace_back(m_bitmap_cache->mkclear(icon_width, icon_height)); - // Paint the color bars. - bmps.emplace_back(m_bitmap_cache->mkclear(thin_space_icon_width, icon_height)); - bmps.emplace_back(*m_bitmap_main_frame); - // Paint a lock at the system presets. - bmps.emplace_back(m_bitmap_cache->mkclear(wide_space_icon_width, icon_height)); -// bmps.emplace_back(m_bitmap_add ? *m_bitmap_add : wxNullBitmap); - bmps.emplace_back(create_scaled_bitmap("edit_uni")); - bmp = m_bitmap_cache->insert(bitmap_key, bmps); - } - if (m_type == Preset::TYPE_SLA_MATERIAL) - ui->set_label_marker(ui->Append(PresetCollection::separator(L("Add/Remove materials")), *bmp), GUI::PresetComboBox::LABEL_ITEM_WIZARD_MATERIALS); - else - ui->set_label_marker(ui->Append(PresetCollection::separator(L("Add/Remove printers")), *bmp), GUI::PresetComboBox::LABEL_ITEM_WIZARD_PRINTERS); - } - - /* But, if selected_preset_item is still equal to INT_MAX, it means that - * there is no presets added to the list. - * So, select last combobox item ("Add/Remove preset") - */ - if (selected_preset_item == INT_MAX) - selected_preset_item = ui->GetCount() - 1; - - ui->SetSelection(selected_preset_item); - ui->SetToolTip(tooltip.IsEmpty() ? ui->GetString(selected_preset_item) : tooltip); - ui->check_selection(selected_preset_item); - ui->Thaw(); - - // Update control min size after rescale (changed Display DPI under MSW) - if (ui->GetMinWidth() != 20 * ui->em_unit()) - ui->SetMinSize(wxSize(20 * ui->em_unit(), ui->GetSize().GetHeight())); -} - -size_t PresetCollection::update_tab_ui(wxBitmapComboBox *ui, bool show_incompatible, const int em/* = 10*/) -{ - if (ui == nullptr) - return 0; - ui->Freeze(); - ui->Clear(); - size_t selected_preset_item = INT_MAX; // some value meaning that no one item is selected - - /* It's supposed that standard size of an icon is 16px*16px for 100% scaled display. - * So set sizes for solid_colored(empty) icons used for preset - * and scale them in respect to em_unit value - */ - const float scale_f = em * 0.1f; - const int icon_height = 16 * scale_f + 0.5f; - const int icon_width = 16 * scale_f + 0.5f; - - std::map nonsys_presets; - wxString selected = ""; - if (!this->m_presets.front().is_visible) - ui->Append(PresetCollection::separator(L("System presets")), wxNullBitmap); - for (size_t i = this->m_presets.front().is_visible ? 0 : m_num_default_presets; i < this->m_presets.size(); ++i) { - const Preset &preset = this->m_presets[i]; - if (! preset.is_visible || (! show_incompatible && ! preset.is_compatible && i != m_idx_selected)) - continue; - std::string bitmap_key = "tab"; - - // !!! Temporary solution, till refactoring: create and use "sla_printer" icon instead of m_bitmap_main_frame - wxBitmap main_bmp = m_bitmap_main_frame ? *m_bitmap_main_frame : wxNullBitmap; - if (m_type == Preset::TYPE_PRINTER && preset.printer_technology() == ptSLA) { - bitmap_key = "sla_printer"; - main_bmp = create_scaled_bitmap("sla_printer"); - } - - bitmap_key += preset.is_compatible ? ",cmpt" : ",ncmpt"; - bitmap_key += (preset.is_system || preset.is_default) ? ",syst" : ",nsyst"; - wxBitmap *bmp = m_bitmap_cache->find(bitmap_key); - if (bmp == nullptr) { - // Create the bitmap with color bars. - std::vector bmps; - const wxBitmap* tmp_bmp = preset.is_compatible ? m_bitmap_compatible : m_bitmap_incompatible; - bmps.emplace_back((tmp_bmp == 0) ? main_bmp : *tmp_bmp); - // Paint a lock at the system presets. - bmps.emplace_back((preset.is_system || preset.is_default) ? *m_bitmap_lock : m_bitmap_cache->mkclear(icon_width, icon_height)); - bmp = m_bitmap_cache->insert(bitmap_key, bmps); - } - - if (preset.is_default || preset.is_system) { - ui->Append(wxString::FromUTF8((preset.name + (preset.is_dirty ? g_suffix_modified : "")).c_str()), - (bmp == 0) ? main_bmp : *bmp); - if (i == m_idx_selected || - // just in case: mark selected_preset_item as a first added element - selected_preset_item == INT_MAX) - selected_preset_item = ui->GetCount() - 1; - } - else - { - nonsys_presets.emplace(wxString::FromUTF8((preset.name + (preset.is_dirty ? g_suffix_modified : "")).c_str()), bmp/*preset.is_compatible*/); - if (i == m_idx_selected) - selected = wxString::FromUTF8((preset.name + (preset.is_dirty ? g_suffix_modified : "")).c_str()); - } - if (i + 1 == m_num_default_presets) - ui->Append(PresetCollection::separator(L("System presets")), wxNullBitmap); - } - if (!nonsys_presets.empty()) - { - ui->Append(PresetCollection::separator(L("User presets")), wxNullBitmap); - for (std::map::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { - ui->Append(it->first, *it->second); - if (it->first == selected || - // just in case: mark selected_preset_item as a first added element - selected_preset_item == INT_MAX) - selected_preset_item = ui->GetCount() - 1; - } - } - if (m_type == Preset::TYPE_PRINTER) { - wxBitmap *bmp = m_bitmap_cache->find("edit_printer_list"); - if (bmp == nullptr) { - // Create the bitmap with color bars. - std::vector bmps; - bmps.emplace_back(*m_bitmap_main_frame); -// bmps.emplace_back(m_bitmap_add ? *m_bitmap_add : wxNullBitmap); - bmps.emplace_back(create_scaled_bitmap("edit_uni")); - bmp = m_bitmap_cache->insert("add_printer_tab", bmps); - } - ui->Append(PresetCollection::separator("Add a new printer"), *bmp); - } - - /* But, if selected_preset_item is still equal to INT_MAX, it means that - * there is no presets added to the list. - * So, select last combobox item ("Add/Remove preset") - */ - if (selected_preset_item == INT_MAX) - selected_preset_item = ui->GetCount() - 1; - - ui->SetSelection(selected_preset_item); - ui->SetToolTip(ui->GetString(selected_preset_item)); - ui->Thaw(); - return selected_preset_item; -} - -// Update a dirty floag of the current preset, update the labels of the UI component accordingly. +// Update a dirty flag of the current preset // Return true if the dirty flag changed. -bool PresetCollection::update_dirty_ui(wxBitmapComboBox *ui) +bool PresetCollection::update_dirty() { - wxWindowUpdateLocker noUpdates(ui); - // 1) Update the dirty flag of the current preset. bool was_dirty = this->get_selected_preset().is_dirty; bool is_dirty = current_is_dirty(); this->get_selected_preset().is_dirty = is_dirty; this->get_edited_preset().is_dirty = is_dirty; - // 2) Update the labels. - for (unsigned int ui_id = 0; ui_id < ui->GetCount(); ++ ui_id) { - std::string old_label = ui->GetString(ui_id).utf8_str().data(); - std::string preset_name = Preset::remove_suffix_modified(old_label); - const Preset *preset = this->find_preset(preset_name, false); -// The old_label could be the "----- system presets ------" or the "------- user presets --------" separator. -// assert(preset != nullptr); - if (preset != nullptr) { - std::string new_label = preset->is_dirty ? preset->name + g_suffix_modified : preset->name; - if (old_label != new_label) - ui->SetString(ui_id, wxString::FromUTF8(new_label.c_str())); - } - } -#ifdef __APPLE__ - // wxWidgets on OSX do not upload the text of the combo box line automatically. - // Force it to update by re-selecting. - ui->SetSelection(ui->GetSelection()); -#endif /* __APPLE __ */ + return was_dirty != is_dirty; } @@ -1605,16 +1340,6 @@ std::string PresetCollection::path_from_name(const std::string &new_name) const return (boost::filesystem::path(m_dir_path) / file_name).make_preferred().string(); } -void PresetCollection::clear_bitmap_cache() -{ - m_bitmap_cache->clear(); -} - -wxString PresetCollection::separator(const std::string &label) -{ - return wxString::FromUTF8(PresetCollection::separator_head()) + _(label) + wxString::FromUTF8(PresetCollection::separator_tail()); -} - const Preset& PrinterPresetCollection::default_preset_for(const DynamicPrintConfig &config) const { const ConfigOptionEnumGeneric *opt_printer_technology = config.opt("printer_technology"); @@ -1632,6 +1357,520 @@ const Preset* PrinterPresetCollection::find_by_model_id(const std::string &model return it != cend() ? &*it : nullptr; } +// ------------------------- +// *** PhysicalPrinter *** +// ------------------------- + +std::string PhysicalPrinter::separator() +{ + return " * "; +} + +const std::vector& PhysicalPrinter::printer_options() +{ + static std::vector s_opts; + if (s_opts.empty()) { + s_opts = { + "preset_name", + "printer_technology", +// "printer_model", + "host_type", + "print_host", + "printhost_apikey", + "printhost_cafile", + "printhost_authorization_type", + // HTTP digest authentization (RFC 2617) + "printhost_user", + "printhost_password" + }; + } + return s_opts; +} + +const std::vector& PhysicalPrinter::print_host_options() +{ + static std::vector s_opts; + if (s_opts.empty()) { + s_opts = { + "print_host", + "printhost_apikey", + "printhost_cafile" + }; + } + return s_opts; +} + +std::vector PhysicalPrinter::presets_with_print_host_information(const PrinterPresetCollection& printer_presets) +{ + std::vector presets; + for (const Preset& preset : printer_presets) + if (has_print_host_information(preset.config)) + presets.emplace_back(preset.name); + + return presets; +} + +bool PhysicalPrinter::has_print_host_information(const DynamicPrintConfig& config) +{ + for (const std::string& opt : print_host_options()) + if (!config.opt_string(opt).empty()) + return true; + + return false; +} + +const std::set& PhysicalPrinter::get_preset_names() const +{ + return preset_names; +} + +bool PhysicalPrinter::has_empty_config() const +{ + return config.opt_string("print_host" ).empty() && + config.opt_string("printhost_apikey" ).empty() && + config.opt_string("printhost_cafile" ).empty() && + config.opt_string("printhost_user" ).empty() && + config.opt_string("printhost_password").empty(); +} + +void PhysicalPrinter::update_preset_names_in_config() +{ + if (!preset_names.empty()) { + std::string name; + for (auto el : preset_names) + name += el + ";"; + name.pop_back(); + config.set_key_value("preset_name", new ConfigOptionString(name)); + } +} + +void PhysicalPrinter::save(const std::string& file_name_from, const std::string& file_name_to) +{ + // rename the file + boost::nowide::rename(file_name_from.data(), file_name_to.data()); + this->file = file_name_to; + // save configuration + this->config.save(this->file); +} + +void PhysicalPrinter::update_from_preset(const Preset& preset) +{ + config.apply_only(preset.config, printer_options(), true); + // add preset names to the options list + preset_names.emplace(preset.name); + update_preset_names_in_config(); +} + +void PhysicalPrinter::update_from_config(const DynamicPrintConfig& new_config) +{ + config.apply_only(new_config, printer_options(), false); + + std::string str = config.opt_string("preset_name"); + std::set values{}; + if (!str.empty()) { + boost::split(values, str, boost::is_any_of(";")); + for (const std::string& val : values) + preset_names.emplace(val); + } + preset_names = values; +} + +void PhysicalPrinter::reset_presets() +{ + return preset_names.clear(); +} + +bool PhysicalPrinter::add_preset(const std::string& preset_name) +{ + return preset_names.emplace(preset_name).second; +} + +bool PhysicalPrinter::delete_preset(const std::string& preset_name) +{ + return preset_names.erase(preset_name) > 0; +} + +PhysicalPrinter::PhysicalPrinter(const std::string& name, const DynamicPrintConfig &default_config, const Preset& preset) : + name(name), config(default_config) +{ + update_from_preset(preset); +} + +void PhysicalPrinter::set_name(const std::string& name) +{ + this->name = name; +} + +std::string PhysicalPrinter::get_full_name(std::string preset_name) const +{ + return name + separator() + preset_name; +} + +std::string PhysicalPrinter::get_short_name(std::string full_name) +{ + int pos = full_name.find(separator()); + if (pos > 0) + boost::erase_tail(full_name, full_name.length() - pos); + return full_name; +} + +std::string PhysicalPrinter::get_preset_name(std::string name) +{ + int pos = name.find(separator()); + boost::erase_head(name, pos + 3); + return Preset::remove_suffix_modified(name); +} + + +// ----------------------------------- +// *** PhysicalPrinterCollection *** +// ----------------------------------- + +PhysicalPrinterCollection::PhysicalPrinterCollection( const std::vector& keys) +{ + // Default config for a physical printer containing all key/value pairs of PhysicalPrinter::printer_options(). + for (const std::string &key : keys) { + const ConfigOptionDef *opt = print_config_def.get(key); + assert(opt); + assert(opt->default_value); + m_default_config.set_key_value(key, opt->default_value->clone()); + } +} + +// Load all printers found in dir_path. +// Throws an exception on error. +void PhysicalPrinterCollection::load_printers(const std::string& dir_path, const std::string& subdir) +{ + // Don't use boost::filesystem::canonical() on Windows, it is broken in regard to reparse points, + // see https://github.com/prusa3d/PrusaSlicer/issues/732 + boost::filesystem::path dir = boost::filesystem::absolute(boost::filesystem::path(dir_path) / subdir).make_preferred(); + m_dir_path = dir.string(); + std::string errors_cummulative; + // Store the loaded printers into a new vector, otherwise the binary search for already existing presets would be broken. + std::deque printers_loaded; + for (auto& dir_entry : boost::filesystem::directory_iterator(dir)) + if (Slic3r::is_ini_file(dir_entry)) { + std::string name = dir_entry.path().filename().string(); + // Remove the .ini suffix. + name.erase(name.size() - 4); + if (this->find_printer(name, false)) { + // This happens when there's is a preset (most likely legacy one) with the same name as a system preset + // that's already been loaded from a bundle. + BOOST_LOG_TRIVIAL(warning) << "Printer already present, not loading: " << name; + continue; + } + try { + PhysicalPrinter printer(name, this->default_config()); + printer.file = dir_entry.path().string(); + // Load the preset file, apply preset values on top of defaults. + try { + DynamicPrintConfig config; + config.load_from_ini(printer.file); + printer.update_from_config(config); + printer.loaded = true; + } + catch (const std::ifstream::failure& err) { + throw Slic3r::RuntimeError(std::string("The selected preset cannot be loaded: ") + printer.file + "\n\tReason: " + err.what()); + } + catch (const std::runtime_error& err) { + throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + printer.file + "\n\tReason: " + err.what()); + } + printers_loaded.emplace_back(printer); + } + catch (const std::runtime_error& err) { + errors_cummulative += err.what(); + errors_cummulative += "\n"; + } + } + m_printers.insert(m_printers.end(), std::make_move_iterator(printers_loaded.begin()), std::make_move_iterator(printers_loaded.end())); + std::sort(m_printers.begin(), m_printers.end()); + if (!errors_cummulative.empty()) + throw Slic3r::RuntimeError(errors_cummulative); +} + +void PhysicalPrinterCollection::load_printer(const std::string& path, const std::string& name, DynamicPrintConfig&& config, bool select, bool save/* = false*/) +{ + auto it = this->find_printer_internal(name); + if (it == m_printers.end() || it->name != name) { + // The preset was not found. Create a new preset. + it = m_printers.emplace(it, PhysicalPrinter(name, config)); + } + + it->file = path; + it->config = std::move(config); + it->loaded = true; + if (select) + this->select_printer(*it); + + if (save) + it->save(); +} + +// if there is saved user presets, contains information about "Print Host upload", +// Create default printers with this presets +// Note! "Print Host upload" options will be cleared after physical printer creations +void PhysicalPrinterCollection::load_printers_from_presets(PrinterPresetCollection& printer_presets) +{ + int cnt=0; + for (Preset& preset: printer_presets) { + DynamicPrintConfig& config = preset.config; + const std::vector& options = PhysicalPrinter::print_host_options(); + + for(const std::string& option : options) { + if (!config.opt_string(option).empty()) { + // check if printer with those "Print Host upload" options already exist + PhysicalPrinter* existed_printer = find_printer_with_same_config(config); + if (existed_printer) + // just add preset for this printer + existed_printer->add_preset(preset.name); + else { + std::string new_printer_name = (boost::format("Printer %1%") % ++cnt ).str(); + while (find_printer(new_printer_name)) + new_printer_name = (boost::format("Printer %1%") % ++cnt).str(); + + // create new printer from this preset + PhysicalPrinter printer(new_printer_name, this->default_config(), preset); + printer.loaded = true; + save_printer(printer); + } + + // erase "Print Host upload" information from the preset + for (const std::string& opt : options) + config.opt_string(opt).clear(); + // save changes for preset + preset.save(); + + // update those changes for edited preset if it's equal to the preset + Preset& edited = printer_presets.get_edited_preset(); + if (preset.name == edited.name) { + for (const std::string& opt : options) + edited.config.opt_string(opt).clear(); + } + + break; + } + } + } +} + +PhysicalPrinter* PhysicalPrinterCollection::find_printer( const std::string& name, bool case_sensitive_search) +{ + auto it = this->find_printer_internal(name, case_sensitive_search); + + // Ensure that a temporary copy is returned if the preset found is currently selected. + auto is_equal_name = [name, case_sensitive_search](const std::string& in_name) { + if (case_sensitive_search) + return in_name == name; + return boost::to_lower_copy(in_name) == boost::to_lower_copy(name); + }; + + if (it == m_printers.end() || !is_equal_name(it->name)) + return nullptr; + return &this->printer(it - m_printers.begin()); +} + +std::deque::iterator PhysicalPrinterCollection::find_printer_internal(const std::string& name, bool case_sensitive_search/* = true*/) +{ + if (case_sensitive_search) + return Slic3r::lower_bound_by_predicate(m_printers.begin(), m_printers.end(), [&name](const auto& l) { return l.name < name; }); + + std::string low_name = boost::to_lower_copy(name); + + size_t i = 0; + for (const PhysicalPrinter& printer : m_printers) { + if (boost::to_lower_copy(printer.name) == low_name) + break; + i++; + } + if (i == m_printers.size()) + return m_printers.end(); + + return m_printers.begin() + i; +} + +PhysicalPrinter* PhysicalPrinterCollection::find_printer_with_same_config(const DynamicPrintConfig& config) +{ + for (const PhysicalPrinter& printer :*this) { + bool is_equal = true; + for (const std::string& opt : PhysicalPrinter::print_host_options()) + if (is_equal && printer.config.opt_string(opt) != config.opt_string(opt)) + is_equal = false; + + if (is_equal) + return find_printer(printer.name); + } + return nullptr; +} + +// Generate a file path from a profile name. Add the ".ini" suffix if it is missing. +std::string PhysicalPrinterCollection::path_from_name(const std::string& new_name) const +{ + std::string file_name = boost::iends_with(new_name, ".ini") ? new_name : (new_name + ".ini"); + return (boost::filesystem::path(m_dir_path) / file_name).make_preferred().string(); +} + +void PhysicalPrinterCollection::save_printer(PhysicalPrinter& edited_printer, const std::string& renamed_from/* = ""*/) +{ + // controll and update preset_names in edited_printer config + edited_printer.update_preset_names_in_config(); + + std::string name = renamed_from.empty() ? edited_printer.name : renamed_from; + // 1) Find the printer with a new_name or create a new one, + // initialize it with the edited config. + auto it = this->find_printer_internal(name); + if (it != m_printers.end() && it->name == name) { + // Printer with the same name found. + // Overwriting an existing preset. + it->config = std::move(edited_printer.config); + it->name = edited_printer.name; + it->preset_names = edited_printer.preset_names; + // sort printers and get new it + std::sort(m_printers.begin(), m_printers.end()); + it = this->find_printer_internal(edited_printer.name); + } + else { + // Creating a new printer. + it = m_printers.emplace(it, edited_printer); + } + assert(it != m_printers.end()); + + // 2) Save printer + PhysicalPrinter& printer = *it; + if (printer.file.empty()) + printer.file = this->path_from_name(printer.name); + + if (printer.file == this->path_from_name(printer.name)) + printer.save(); + else + // if printer was renamed, we should rename a file and than save the config + printer.save(printer.file, this->path_from_name(printer.name)); + + // update idx_selected + m_idx_selected = it - m_printers.begin(); +} + +bool PhysicalPrinterCollection::delete_printer(const std::string& name) +{ + auto it = this->find_printer_internal(name); + if (it == m_printers.end()) + return false; + + const PhysicalPrinter& printer = *it; + // Erase the preset file. + boost::nowide::remove(printer.file.c_str()); + m_printers.erase(it); + return true; +} + +bool PhysicalPrinterCollection::delete_selected_printer() +{ + if (!has_selection()) + return false; + const PhysicalPrinter& printer = this->get_selected_printer(); + + // Erase the preset file. + boost::nowide::remove(printer.file.c_str()); + // Remove the preset from the list. + m_printers.erase(m_printers.begin() + m_idx_selected); + // unselect all printers + unselect_printer(); + + return true; +} + +bool PhysicalPrinterCollection::delete_preset_from_printers( const std::string& preset_name) +{ + std::vector printers_for_delete; + for (PhysicalPrinter& printer : m_printers) { + if (printer.preset_names.size() == 1 && *printer.preset_names.begin() == preset_name) + printers_for_delete.emplace_back(printer.name); + else if (printer.delete_preset(preset_name)) + save_printer(printer); + } + + if (!printers_for_delete.empty()) + for (const std::string& printer_name : printers_for_delete) + delete_printer(printer_name); + + unselect_printer(); + return true; +} + +// Get list of printers which have more than one preset and "preset_name" preset is one of them +std::vector PhysicalPrinterCollection::get_printers_with_preset(const std::string& preset_name) +{ + std::vector printers; + + for (auto printer : m_printers) { + if (printer.preset_names.size() == 1) + continue; + if (printer.preset_names.find(preset_name) != printer.preset_names.end()) + printers.emplace_back(printer.name); + } + + return printers; +} + +// Get list of printers which has only "preset_name" preset +std::vector PhysicalPrinterCollection::get_printers_with_only_preset(const std::string& preset_name) +{ + std::vector printers; + + for (auto printer : m_printers) + if (printer.preset_names.size() == 1 && *printer.preset_names.begin() == preset_name) + printers.emplace_back(printer.name); + + return printers; +} + +std::string PhysicalPrinterCollection::get_selected_full_printer_name() const +{ + return (m_idx_selected == size_t(-1)) ? std::string() : this->get_selected_printer().get_full_name(m_selected_preset); +} + +void PhysicalPrinterCollection::select_printer(const std::string& full_name) +{ + std::string printer_name = PhysicalPrinter::get_short_name(full_name); + auto it = this->find_printer_internal(printer_name); + if (it == m_printers.end()) { + unselect_printer(); + return; + } + + // update idx_selected + m_idx_selected = it - m_printers.begin(); + + // update name of the currently selected preset + if (printer_name == full_name) + // use first preset in the list + m_selected_preset = *it->preset_names.begin(); + else + m_selected_preset = it->get_preset_name(full_name); +} + +void PhysicalPrinterCollection::select_printer(const PhysicalPrinter& printer) +{ + return select_printer(printer.name); +} + +bool PhysicalPrinterCollection::has_selection() const +{ + return m_idx_selected != size_t(-1); +} + +void PhysicalPrinterCollection::unselect_printer() +{ + m_idx_selected = size_t(-1); + m_selected_preset.clear(); +} + +bool PhysicalPrinterCollection::is_selected(PhysicalPrinterCollection::ConstIterator it, const std::string& preset_name) const +{ + return m_idx_selected == size_t(it - m_printers.begin()) && + m_selected_preset == preset_name; +} + + namespace PresetUtils { const VendorProfile::PrinterModel* system_printer_model(const Preset &preset) { @@ -1646,6 +1885,26 @@ namespace PresetUtils { } return out; } + +#if ENABLE_GCODE_VIEWER + std::string system_printer_bed_model(const Preset& preset) + { + std::string out; + const VendorProfile::PrinterModel* pm = PresetUtils::system_printer_model(preset); + if (pm != nullptr && !pm->bed_model.empty()) + out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_model; + return out; + } + + std::string system_printer_bed_texture(const Preset& preset) + { + std::string out; + const VendorProfile::PrinterModel* pm = PresetUtils::system_printer_model(preset); + if (pm != nullptr && !pm->bed_texture.empty()) + out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_texture; + return out; + } +#endif // ENABLE_GCODE_VIEWER } // namespace PresetUtils } // namespace Slic3r diff --git a/src/slic3r/GUI/Preset.hpp b/src/libslic3r/Preset.hpp similarity index 70% rename from src/slic3r/GUI/Preset.hpp rename to src/libslic3r/Preset.hpp index dc00780918..dc6dd8e68b 100644 --- a/src/slic3r/GUI/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -8,27 +8,14 @@ #include #include -#include "libslic3r/libslic3r.h" -#include "libslic3r/PrintConfig.hpp" -#include "libslic3r/Semver.hpp" - -class wxBitmap; -class wxBitmapComboBox; -class wxChoice; -class wxItemContainer; -class wxString; -class wxWindow; +#include "PrintConfig.hpp" +#include "Semver.hpp" namespace Slic3r { class AppConfig; class PresetBundle; -namespace GUI { - class BitmapCache; - class PresetComboBox; -} - enum ConfigFileType { CONFIG_FILE_TYPE_UNKNOWN, @@ -231,12 +218,14 @@ public: static const std::vector& printer_options(); // Nozzle options of the printer options. static const std::vector& nozzle_options(); + // Printer machine limits, those are contained in printer_options(). + static const std::vector& machine_limits_options(); static const std::vector& sla_printer_options(); static const std::vector& sla_material_options(); static const std::vector& sla_print_options(); - static void update_suffix_modified(); + static void update_suffix_modified(const std::string& new_suffix_modified); static const std::string& suffix_modified(); static std::string remove_suffix_modified(const std::string& name); static void normalize(DynamicPrintConfig &config); @@ -322,18 +311,6 @@ public: // returns true if the preset was deleted successfully. bool delete_preset(const std::string& name); - // Load default bitmap to be placed at the wxBitmapComboBox of a MainFrame. - void load_bitmap_default(const std::string &file_name); - - // Load "add new printer" bitmap to be placed at the wxBitmapComboBox of a MainFrame. - void load_bitmap_add(const std::string &file_name); - - // Compatible & incompatible marks, to be placed at the wxBitmapComboBox items. - void set_bitmap_compatible (const wxBitmap *bmp) { m_bitmap_compatible = bmp; } - void set_bitmap_incompatible(const wxBitmap *bmp) { m_bitmap_incompatible = bmp; } - void set_bitmap_lock (const wxBitmap *bmp) { m_bitmap_lock = bmp; } - void set_bitmap_lock_open (const wxBitmap *bmp) { m_bitmap_lock_open = bmp; } - // Enable / disable the "- default -" preset. void set_default_suppressed(bool default_suppressed); bool is_default_suppressed() const { return m_default_suppressed; } @@ -394,19 +371,28 @@ public: size_t i = m_default_suppressed ? m_num_default_presets : 0; size_t n = this->m_presets.size(); size_t i_compatible = n; + int match_quality = -1; for (; i < n; ++ i) // Since we use the filament selection from Wizard, it's needed to control the preset visibility too if (m_presets[i].is_compatible && m_presets[i].is_visible) { - if (prefered_condition(m_presets[i].name)) - return i; - if (i_compatible == n) - // Store the first compatible profile into i_compatible. + int this_match_quality = prefered_condition(m_presets[i]); + if (this_match_quality > match_quality) { + if (match_quality == std::numeric_limits::max()) + // Better match will not be found. + return i; + // Store the first compatible profile with highest match quality into i_compatible. i_compatible = i; + match_quality = this_match_quality; + } } - return (i_compatible == n) ? 0 : i_compatible; + return (i_compatible == n) ? + // No compatible preset found, return the default preset. + 0 : + // Compatible preset found. + i_compatible; } // Return index of the first compatible preset. Certainly at least the '- default -' preset shall be compatible. - size_t first_compatible_idx() const { return this->first_compatible_idx([](const std::string&){return true;}); } + size_t first_compatible_idx() const { return this->first_compatible_idx([](const Preset&) -> int { return 0; }); } // Return index of the first visible preset. Certainly at least the '- default -' preset shall be visible. // Return the first visible preset. Certainly at least the '- default -' preset shall be visible. @@ -430,7 +416,7 @@ public: this->select_preset(this->first_compatible_idx(prefered_condition)); } void update_compatible(const PresetWithVendorProfile &active_printer, const PresetWithVendorProfile *active_print, PresetSelectCompatibleType select_other_if_incompatible) - { this->update_compatible(active_printer, active_print, select_other_if_incompatible, [](const std::string&){return true;}); } + { this->update_compatible(active_printer, active_print, select_other_if_incompatible, [](const Preset&) -> int { return 0; }); } size_t num_visible() const { return std::count_if(m_presets.begin(), m_presets.end(), [](const Preset &preset){return preset.is_visible;}); } @@ -446,18 +432,9 @@ public: // Return a sorted list of system preset names. std::vector system_preset_names() const; - // Update the choice UI from the list of presets. - // If show_incompatible, all presets are shown, otherwise only the compatible presets are shown. - // If an incompatible preset is selected, it is shown as well. - size_t update_tab_ui(wxBitmapComboBox *ui, bool show_incompatible, const int em = 10); - // Update the choice UI from the list of presets. - // Only the compatible presets are shown. - // If an incompatible preset is selected, it is shown as well. - void update_plater_ui(GUI::PresetComboBox *ui); - - // Update a dirty floag of the current preset, update the labels of the UI component accordingly. + // Update a dirty flag of the current preset // Return true if the dirty flag changed. - bool update_dirty_ui(wxBitmapComboBox *ui); + bool update_dirty(); // Select a profile by its name. Return true if the selection changed. // Without force, the selection is only updated if the index changes. @@ -467,16 +444,7 @@ public: // Generate a file path from a profile name. Add the ".ini" suffix if it is missing. std::string path_from_name(const std::string &new_name) const; - void clear_bitmap_cache(); - -#ifdef __linux__ - static const char* separator_head() { return "------- "; } - static const char* separator_tail() { return " -------"; } -#else /* __linux__ */ - static const char* separator_head() { return "————— "; } - static const char* separator_tail() { return " —————"; } -#endif /* __linux__ */ - static wxString separator(const std::string &label); + size_t num_default_presets() { return m_num_default_presets; } protected: // Select a preset, if it exists. If it does not exist, select an invalid (-1) index. @@ -503,8 +471,7 @@ private: // If a preset does not exist, an iterator is returned indicating where to insert a preset with the same name. std::deque::iterator find_preset_internal(const std::string &name) { - Preset key(m_type, name); - auto it = std::lower_bound(m_presets.begin() + m_num_default_presets, m_presets.end(), key); + auto it = Slic3r::lower_bound_by_predicate(m_presets.begin() + m_num_default_presets, m_presets.end(), [&name](const auto& l) { return l.name < name; }); if (it == m_presets.end() || it->name != name) { // Preset has not been not found in the sorted list of non-default presets. Try the defaults. for (size_t i = 0; i < m_num_default_presets; ++ i) @@ -547,23 +514,10 @@ private: // Is the "- default -" preset suppressed? bool m_default_suppressed = true; size_t m_num_default_presets = 0; - // Compatible & incompatible marks, to be placed at the wxBitmapComboBox items of a Plater. - // These bitmaps are not owned by PresetCollection, but by a PresetBundle. - const wxBitmap *m_bitmap_compatible = nullptr; - const wxBitmap *m_bitmap_incompatible = nullptr; - const wxBitmap *m_bitmap_lock = nullptr; - const wxBitmap *m_bitmap_lock_open = nullptr; - // Marks placed at the wxBitmapComboBox of a MainFrame. - // These bitmaps are owned by PresetCollection. - wxBitmap *m_bitmap_main_frame; - // "Add printer profile" icon, owned by PresetCollection. - wxBitmap *m_bitmap_add; + // Path to the directory to store the config files into. std::string m_dir_path; - // Caching color bitmaps for the filament combo box. - GUI::BitmapCache *m_bitmap_cache = nullptr; - // to access select_preset_by_name_strict() friend class PresetBundle; }; @@ -583,8 +537,213 @@ public: namespace PresetUtils { // PrinterModel of a system profile, from which this preset is derived, or null if it is not derived from a system profile. const VendorProfile::PrinterModel* system_printer_model(const Preset &preset); +#if ENABLE_GCODE_VIEWER + std::string system_printer_bed_model(const Preset& preset); + std::string system_printer_bed_texture(const Preset& preset); +#endif // ENABLE_GCODE_VIEWER } // namespace PresetUtils + +////////////////////////////////////////////////////////////////////// + +class PhysicalPrinter +{ +public: + PhysicalPrinter(const std::string& name, const DynamicPrintConfig &default_config) : name(name), config(default_config) {} + PhysicalPrinter(const std::string& name, const DynamicPrintConfig &default_config, const Preset& preset); + void set_name(const std::string &name); + + // Name of the Physical Printer, usually derived form the file name. + std::string name; + // File name of the Physical Printer. + std::string file; + // Configuration data, loaded from a file, or set from the defaults. + DynamicPrintConfig config; + // set of presets used with this physical printer + std::set preset_names; + + // Has this profile been loaded? + bool loaded = false; + + static std::string separator(); + static const std::vector& printer_options(); + static const std::vector& print_host_options(); + static std::vector presets_with_print_host_information(const PrinterPresetCollection& printer_presets); + static bool has_print_host_information(const DynamicPrintConfig& config); + + const std::set& get_preset_names() const; + + bool has_empty_config() const; + void update_preset_names_in_config(); + + void save() { this->config.save(this->file); } + void save(const std::string& file_name_from, const std::string& file_name_to); + + void update_from_preset(const Preset& preset); + void update_from_config(const DynamicPrintConfig &new_config); + + // add preset to the preset_names + // return false, if preset with this name is already exist in the set + bool add_preset(const std::string& preset_name); + bool delete_preset(const std::string& preset_name); + void reset_presets(); + + // Return a printer technology, return ptFFF if the printer technology is not set. + static PrinterTechnology printer_technology(const DynamicPrintConfig& cfg) { + auto* opt = cfg.option>("printer_technology"); + // The following assert may trigger when importing some legacy profile, + // but it is safer to keep it here to capture the cases where the "printer_technology" key is queried, where it should not. + return (opt == nullptr) ? ptFFF : opt->value; + } + PrinterTechnology printer_technology() const { return printer_technology(this->config); } + + // Sort lexicographically by a preset name. The preset name shall be unique across a single PresetCollection. + bool operator<(const PhysicalPrinter& other) const { return this->name < other.name; } + + // get full printer name included a name of the preset + std::string get_full_name(std::string preset_name) const; + + // get printer name from the full name uncluded preset name + static std::string get_short_name(std::string full_name); + + // get preset name from the full name uncluded printer name + static std::string get_preset_name(std::string full_name); + +protected: + friend class PhysicalPrinterCollection; +}; + + +// --------------------------------- +// *** PhysicalPrinterCollection *** +// --------------------------------- + +// Collections of physical printers +class PhysicalPrinterCollection +{ +public: + PhysicalPrinterCollection(const std::vector& keys); + ~PhysicalPrinterCollection() {} + + typedef std::deque::iterator Iterator; + typedef std::deque::const_iterator ConstIterator; + Iterator begin() { return m_printers.begin(); } + ConstIterator begin() const { return m_printers.cbegin(); } + ConstIterator cbegin() const { return m_printers.cbegin(); } + Iterator end() { return m_printers.end(); } + ConstIterator end() const { return m_printers.cend(); } + ConstIterator cend() const { return m_printers.cend(); } + + bool empty() const {return m_printers.empty(); } + + void reset(bool delete_files) {}; + + const std::deque& operator()() const { return m_printers; } + + // Load ini files of the particular type from the provided directory path. + void load_printers(const std::string& dir_path, const std::string& subdir); + void load_printers_from_presets(PrinterPresetCollection &printer_presets); + // Load printer from the loaded configuration + void load_printer(const std::string& path, const std::string& name, DynamicPrintConfig&& config, bool select, bool save=false); + + // Save the printer under a new name. If the name is different from the old one, + // a new printer is stored into the list of printers. + // New printer is activated. + void save_printer(PhysicalPrinter& printer, const std::string& renamed_from = ""); + + // Delete the current preset, activate the first visible preset. + // returns true if the preset was deleted successfully. + bool delete_printer(const std::string& name); + // Delete the selected preset + // returns true if the preset was deleted successfully. + bool delete_selected_printer(); + // Delete preset_name preset from all printers: + // If there is last preset for the printer and first_check== false, then delete this printer + // returns true if all presets were deleted successfully. + bool delete_preset_from_printers(const std::string& preset_name); + + // Get list of printers which have more than one preset and "preset_name" preset is one of them + std::vector get_printers_with_preset( const std::string &preset_name); + // Get list of printers which has only "preset_name" preset + std::vector get_printers_with_only_preset( const std::string &preset_name); + + // Return the selected preset, without the user modifications applied. + PhysicalPrinter& get_selected_printer() { return m_printers[m_idx_selected]; } + const PhysicalPrinter& get_selected_printer() const { return m_printers[m_idx_selected]; } + + size_t get_selected_idx() const { return m_idx_selected; } + // Returns the name of the selected preset, or an empty string if no preset is selected. + std::string get_selected_printer_name() const { return (m_idx_selected == size_t(-1)) ? std::string() : this->get_selected_printer().name; } + // Returns the config of the selected printer, or nullptr if no printer is selected. + DynamicPrintConfig* get_selected_printer_config() { return (m_idx_selected == size_t(-1)) ? nullptr : &(this->get_selected_printer().config); } + // Returns the config of the selected printer, or nullptr if no printer is selected. + PrinterTechnology get_selected_printer_technology() { return (m_idx_selected == size_t(-1)) ? PrinterTechnology::ptAny : this->get_selected_printer().printer_technology(); } + + // Each physical printer can have a several related preset, + // so, use the next functions to get an exact names of selections in the list: + // Returns the full name of the selected printer, or an empty string if no preset is selected. + std::string get_selected_full_printer_name() const; + // Returns the printer model of the selected preset, or an empty string if no preset is selected. + std::string get_selected_printer_preset_name() const { return (m_idx_selected == size_t(-1)) ? std::string() : m_selected_preset; } + + // Select printer by the full printer name, which contains name of printer, separator and name of selected preset + // If full_name doesn't contain name of selected preset, then select first preset in the list for this printer + void select_printer(const std::string& full_name); + void select_printer(const PhysicalPrinter& printer); + bool has_selection() const; + void unselect_printer() ; + bool is_selected(ConstIterator it, const std::string &preset_name) const; + + // Return a printer by an index. If the printer is active, a temporary copy is returned. + PhysicalPrinter& printer(size_t idx) { return m_printers[idx]; } + const PhysicalPrinter& printer(size_t idx) const { return const_cast(this)->printer(idx); } + + // Return a preset by its name. If the preset is active, a temporary copy is returned. + // If a preset is not found by its name, null is returned. + // It is possible case (in)sensitive search + PhysicalPrinter* find_printer(const std::string& name, bool case_sensitive_search = true); + const PhysicalPrinter* find_printer(const std::string& name, bool case_sensitive_search = true) const + { + return const_cast(this)->find_printer(name, case_sensitive_search); + } + + // Generate a file path from a profile name. Add the ".ini" suffix if it is missing. + std::string path_from_name(const std::string& new_name) const; + + const DynamicPrintConfig& default_config() const { return m_default_config; } + +private: + PhysicalPrinterCollection& operator=(const PhysicalPrinterCollection& other); + + // Find a physical printer position in the sorted list of printers. + // The name of a printer should be unique and case insensitive + // Use this functions with case_sensitive_search = false, when you need case insensitive search + std::deque::iterator find_printer_internal(const std::string& name, bool case_sensitive_search = true); + std::deque::const_iterator find_printer_internal(const std::string& name, bool case_sensitive_search = true) const + { + return const_cast(this)->find_printer_internal(name); + } + + PhysicalPrinter* find_printer_with_same_config( const DynamicPrintConfig &config); + + // List of printers + // Use deque to force the container to allocate an object per each entry, + // so that the addresses of the presets don't change during resizing of the container. + std::deque m_printers; + + // Default config for a physical printer containing all key/value pairs of PhysicalPrinter::printer_options(). + DynamicPrintConfig m_default_config; + + // Selected printer. + size_t m_idx_selected = size_t(-1); + // The name of the preset which is currently select for this printer + std::string m_selected_preset; + + // Path to the directory to store the config files into. + std::string m_dir_path; +}; + + } // namespace Slic3r #endif /* slic3r_Preset_hpp_ */ diff --git a/src/slic3r/GUI/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp similarity index 82% rename from src/slic3r/GUI/PresetBundle.cpp rename to src/libslic3r/PresetBundle.cpp index ba806a0b2d..dccd0f5cd6 100644 --- a/src/slic3r/GUI/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1,12 +1,12 @@ #include #include "PresetBundle.hpp" -#include "BitmapCache.hpp" -#include "Plater.hpp" -#include "I18N.hpp" -#include "wxExtensions.hpp" +#include "libslic3r.h" +#include "Utils.hpp" +#include "Model.hpp" #include +#include #include #include #include @@ -21,17 +21,6 @@ #include #include -#include -#include -#include -#include -#include - -#include "libslic3r/libslic3r.h" -#include "libslic3r/Utils.hpp" -#include "libslic3r/Model.hpp" -#include "GUI_App.hpp" - // Store the print/filament/printer presets into a "presets" subdirectory of the Slic3rPE config dir. // This breaks compatibility with the upstream Slic3r if the --datadir is used to switch between the two versions. @@ -53,15 +42,8 @@ PresetBundle::PresetBundle() : sla_materials(Preset::TYPE_SLA_MATERIAL, Preset::sla_material_options(), static_cast(SLAFullPrintConfig::defaults())), sla_prints(Preset::TYPE_SLA_PRINT, Preset::sla_print_options(), static_cast(SLAFullPrintConfig::defaults())), printers(Preset::TYPE_PRINTER, Preset::printer_options(), static_cast(FullPrintConfig::defaults()), "- default FFF -"), - m_bitmapCompatible(new wxBitmap), - m_bitmapIncompatible(new wxBitmap), - m_bitmapLock(new wxBitmap), - m_bitmapLockOpen(new wxBitmap), - m_bitmapCache(new GUI::BitmapCache) + physical_printers(PhysicalPrinter::printer_options()) { - if (wxImage::FindHandler(wxBITMAP_TYPE_PNG) == nullptr) - wxImage::AddHandler(new wxPNGHandler); - // The following keys are handled by the UI, they do not have a counterpart in any StaticPrintConfig derived classes, // therefore they need to be handled differently. As they have no counterpart in StaticPrintConfig, they are not being // initialized based on PrintConfigDef(), but to empty values (zeros, empty vectors, empty strings). @@ -112,16 +94,6 @@ PresetBundle::PresetBundle() : preset.inherits(); } - // Load the default preset bitmaps. - // #ys_FIXME_to_delete we'll load them later, using em_unit() -// this->prints .load_bitmap_default("cog"); -// this->sla_prints .load_bitmap_default("package_green.png"); -// this->filaments .load_bitmap_default("spool.png"); -// this->sla_materials.load_bitmap_default("package_green.png"); -// this->printers .load_bitmap_default("printer_empty.png"); -// this->printers .load_bitmap_add("add.png"); -// this->load_compatible_bitmaps(); - // Re-activate the default presets, so their "edited" preset copies will be updated with the additional configuration values above. this->prints .select_preset(0); this->sla_prints .select_preset(0); @@ -134,20 +106,6 @@ PresetBundle::PresetBundle() : PresetBundle::~PresetBundle() { - assert(m_bitmapCompatible != nullptr); - assert(m_bitmapIncompatible != nullptr); - assert(m_bitmapLock != nullptr); - assert(m_bitmapLockOpen != nullptr); - delete m_bitmapCompatible; - m_bitmapCompatible = nullptr; - delete m_bitmapIncompatible; - m_bitmapIncompatible = nullptr; - delete m_bitmapLock; - m_bitmapLock = nullptr; - delete m_bitmapLockOpen; - m_bitmapLockOpen = nullptr; - delete m_bitmapCache; - m_bitmapCache = nullptr; } void PresetBundle::reset(bool delete_files) @@ -182,14 +140,16 @@ void PresetBundle::setup_directories() data_dir / "presets" / "filament", data_dir / "presets" / "sla_print", data_dir / "presets" / "sla_material", - data_dir / "presets" / "printer" + data_dir / "presets" / "printer", + data_dir / "presets" / "physical_printer" #else // Store the print/filament/printer presets at the same location as the upstream Slic3r. data_dir / "print", data_dir / "filament", data_dir / "sla_print", data_dir / "sla_material", - data_dir / "printer" + data_dir / "printer", + data_dir / "physical_printer" #endif }; for (const boost::filesystem::path &path : paths) { @@ -197,7 +157,7 @@ void PresetBundle::setup_directories() subdir.make_preferred(); if (! boost::filesystem::is_directory(subdir) && ! boost::filesystem::create_directory(subdir)) - throw std::runtime_error(std::string("Slic3r was unable to create its data directory at ") + subdir.string()); + throw Slic3r::RuntimeError(std::string("Slic3r was unable to create its data directory at ") + subdir.string()); } } @@ -239,10 +199,15 @@ void PresetBundle::load_presets(AppConfig &config, const std::string &preferred_ } catch (const std::runtime_error &err) { errors_cummulative += err.what(); } + try { + this->physical_printers.load_printers(dir_user_presets, "physical_printer"); + } catch (const std::runtime_error &err) { + errors_cummulative += err.what(); + } this->update_multi_material_filament_presets(); this->update_compatible(PresetSelectCompatibleType::Never); if (! errors_cummulative.empty()) - throw std::runtime_error(errors_cummulative); + throw Slic3r::RuntimeError(errors_cummulative); this->load_selections(config, preferred_model_id); } @@ -362,6 +327,32 @@ const std::string& PresetBundle::get_preset_name_by_alias( const Preset::Type& p return presets.get_preset_name_by_alias(alias); } +void PresetBundle::save_changes_for_preset(const std::string& new_name, Preset::Type type, + const std::vector& unselected_options) +{ + PresetCollection& presets = type == Preset::TYPE_PRINT ? prints : + type == Preset::TYPE_SLA_PRINT ? sla_prints : + type == Preset::TYPE_FILAMENT ? filaments : + type == Preset::TYPE_SLA_MATERIAL ? sla_materials : printers; + + // if we want to save just some from selected options + if (!unselected_options.empty()) { + // revert unselected options to the old values + presets.get_edited_preset().config.apply_only(presets.get_selected_preset().config, unselected_options); + } + + // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini + presets.save_current_preset(new_name); + // Mark the print & filament enabled if they are compatible with the currently selected preset. + // If saving the preset changes compatibility with other presets, keep the now incompatible dependent presets selected, however with a "red flag" icon showing that they are no more compatible. + update_compatible(PresetSelectCompatibleType::Never); + + if (type == Preset::TYPE_FILAMENT) { + // synchronize the first filament presets. + set_filament_preset(0, filaments.get_selected_preset_name()); + } +} + void PresetBundle::load_installed_filaments(AppConfig &config) { if (! config.has_section(AppConfig::SECTION_FILAMENTS)) { @@ -465,6 +456,13 @@ void PresetBundle::load_selections(AppConfig &config, const std::string &preferr // exist. this->update_compatible(PresetSelectCompatibleType::Always); this->update_multi_material_filament_presets(); + + // Parse the initial physical printer name. + std::string initial_physical_printer_name = remove_ini_suffix(config.get("extras", "physical_printer")); + + // Activate physical printer from the config + if (!initial_physical_printer_name.empty()) + physical_printers.select_printer(initial_physical_printer_name); } // Export selections (current print, current filaments, current printer) into config.ini @@ -484,36 +482,8 @@ void PresetBundle::export_selections(AppConfig &config) config.set("presets", "sla_print", sla_prints.get_selected_preset_name()); config.set("presets", "sla_material", sla_materials.get_selected_preset_name()); config.set("presets", "printer", printers.get_selected_preset_name()); -} -void PresetBundle::load_compatible_bitmaps() -{ - *m_bitmapCompatible = create_scaled_bitmap("flag_green"); - *m_bitmapIncompatible = create_scaled_bitmap("flag_red"); - *m_bitmapLock = create_scaled_bitmap("lock_closed"); - *m_bitmapLockOpen = create_scaled_bitmap("lock_open"); - - prints .set_bitmap_compatible(m_bitmapCompatible); - filaments .set_bitmap_compatible(m_bitmapCompatible); - sla_prints .set_bitmap_compatible(m_bitmapCompatible); - sla_materials.set_bitmap_compatible(m_bitmapCompatible); - - prints .set_bitmap_incompatible(m_bitmapIncompatible); - filaments .set_bitmap_incompatible(m_bitmapIncompatible); - sla_prints .set_bitmap_incompatible(m_bitmapIncompatible); - sla_materials.set_bitmap_incompatible(m_bitmapIncompatible); - - prints .set_bitmap_lock(m_bitmapLock); - filaments .set_bitmap_lock(m_bitmapLock); - sla_prints .set_bitmap_lock(m_bitmapLock); - sla_materials.set_bitmap_lock(m_bitmapLock); - printers .set_bitmap_lock(m_bitmapLock); - - prints .set_bitmap_lock_open(m_bitmapLock); - filaments .set_bitmap_lock_open(m_bitmapLock); - sla_prints .set_bitmap_lock_open(m_bitmapLock); - sla_materials.set_bitmap_lock_open(m_bitmapLock); - printers .set_bitmap_lock_open(m_bitmapLock); + config.set("extras", "physical_printer", physical_printers.get_selected_full_printer_name()); } DynamicPrintConfig PresetBundle::full_config() const @@ -709,21 +679,21 @@ void PresetBundle::load_config_file(const std::string &path) boost::nowide::ifstream ifs(path); boost::property_tree::read_ini(ifs, tree); } catch (const std::ifstream::failure &err) { - throw std::runtime_error(std::string("The Config Bundle cannot be loaded: ") + path + "\n\tReason: " + err.what()); + throw Slic3r::RuntimeError(std::string("The Config Bundle cannot be loaded: ") + path + "\n\tReason: " + err.what()); } catch (const boost::property_tree::file_parser_error &err) { - throw std::runtime_error((boost::format("Failed loading the Config Bundle \"%1%\": %2% at line %3%") + throw Slic3r::RuntimeError((boost::format("Failed loading the Config Bundle \"%1%\": %2% at line %3%") % err.filename() % err.message() % err.line()).str()); } catch (const std::runtime_error &err) { - throw std::runtime_error(std::string("Failed loading the preset file: ") + path + "\n\tReason: " + err.what()); + throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + path + "\n\tReason: " + err.what()); } // 2) Continue based on the type of the configuration file. ConfigFileType config_file_type = guess_config_file_type(tree); switch (config_file_type) { case CONFIG_FILE_TYPE_UNKNOWN: - throw std::runtime_error(std::string("Unknown configuration file type: ") + path); + throw Slic3r::RuntimeError(std::string("Unknown configuration file type: ") + path); case CONFIG_FILE_TYPE_APP_CONFIG: - throw std::runtime_error(std::string("Invalid configuration file: ") + path + ". This is an application config file."); + throw Slic3r::RuntimeError(std::string("Invalid configuration file: ") + path + ". This is an application config file."); case CONFIG_FILE_TYPE_CONFIG: { // Initialize a config from full defaults. @@ -886,8 +856,6 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // 4) Load the project config values (the per extruder wipe matrix etc). this->project_config.apply_only(config, s_project_options); - update_custom_gcode_per_print_z_from_config(GUI::wxGetApp().plater()->model().custom_gcode_per_print_z, &this->project_config); - break; } case ptSLA: @@ -1145,16 +1113,22 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla std::vector loaded_sla_prints; std::vector loaded_sla_materials; std::vector loaded_printers; + std::vector loaded_physical_printers; std::string active_print; std::vector active_filaments; std::string active_sla_print; std::string active_sla_material; std::string active_printer; + std::string active_physical_printer; size_t presets_loaded = 0; + size_t ph_printers_loaded = 0; + for (const auto §ion : tree) { PresetCollection *presets = nullptr; std::vector *loaded = nullptr; std::string preset_name; + PhysicalPrinterCollection *ph_printers = nullptr; + std::string ph_printer_name; if (boost::starts_with(section.first, "print:")) { presets = &this->prints; loaded = &loaded_prints; @@ -1175,6 +1149,10 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla presets = &this->printers; loaded = &loaded_printers; preset_name = section.first.substr(8); + } else if (boost::starts_with(section.first, "physical_printer:")) { + ph_printers = &this->physical_printers; + loaded = &loaded_physical_printers; + ph_printer_name = section.first.substr(17); } else if (section.first == "presets") { // Load the names of the active presets. for (auto &kvp : section.second) { @@ -1193,6 +1171,8 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla active_sla_material = kvp.second.data(); } else if (kvp.first == "printer") { active_printer = kvp.second.data(); + }else if (kvp.first == "physical_printer") { + active_physical_printer = kvp.second.data(); } } } else if (section.first == "obsolete_presets") { @@ -1349,9 +1329,46 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla ++ presets_loaded; } + + if (ph_printers != nullptr) { + // Load the physical printer + const DynamicPrintConfig& default_config = ph_printers->default_config(); + DynamicPrintConfig config = default_config; + + for (auto& kvp : section.second) + config.set_deserialize(kvp.first, kvp.second.data()); + + // Report configuration fields, which are misplaced into a wrong group. + std::string incorrect_keys = Preset::remove_invalid_keys(config, default_config); + if (!incorrect_keys.empty()) + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The physical printer \"" << + section.first << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed"; + + const PhysicalPrinter* ph_printer_existing = ph_printers->find_printer(ph_printer_name, false); + if (ph_printer_existing != nullptr) { + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The physical printer \"" << + section.first << "\" has already been loaded from another Confing Bundle."; + continue; + } + + // Decide a full path to this .ini file. + auto file_name = boost::algorithm::iends_with(ph_printer_name, ".ini") ? ph_printer_name : ph_printer_name + ".ini"; + auto file_path = (boost::filesystem::path(data_dir()) +#ifdef SLIC3R_PROFILE_USE_PRESETS_SUBDIR + // Store the physical printers into a "presets" directory. + / "presets" +#else + // Store the physical printers at the same location as the upstream Slic3r. +#endif + / "physical_printer" / file_name).make_preferred(); + // Load the preset into the list of presets, save it to disk. + ph_printers->load_printer(file_path.string(), ph_printer_name, std::move(config), false, flags & LOAD_CFGBNDLE_SAVE); + + ++ph_printers_loaded; + } } - // 3) Activate the presets. + // 3) Activate the presets and physical printer if any exists. if ((flags & LOAD_CFGBNDLE_SYSTEM) == 0) { if (! active_print.empty()) prints.select_preset_by_name(active_print, true); @@ -1361,6 +1378,8 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla sla_materials.select_preset_by_name(active_sla_material, true); if (! active_printer.empty()) printers.select_preset_by_name(active_printer, true); + if (! active_physical_printer.empty()) + physical_printers.select_printer(active_physical_printer +" * " + active_printer); // Activate the first filament preset. if (! active_filaments.empty() && ! active_filaments.front().empty()) filaments.select_preset_by_name(active_filaments.front(), true); @@ -1370,7 +1389,7 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla this->update_compatible(PresetSelectCompatibleType::Never); } - return presets_loaded; + return presets_loaded + ph_printers_loaded; } void PresetBundle::update_multi_material_filament_presets() @@ -1420,50 +1439,132 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri const Preset &printer_preset = this->printers.get_edited_preset(); const PresetWithVendorProfile printer_preset_with_vendor_profile = this->printers.get_preset_with_vendor_profile(printer_preset); + class PreferedProfileMatch + { + public: + PreferedProfileMatch(const std::string &prefered_alias, const std::string &prefered_name) : + m_prefered_alias(prefered_alias), m_prefered_name(prefered_name) {} + + int operator()(const Preset &preset) const + { + return (! m_prefered_alias.empty() && m_prefered_alias == preset.alias) ? + // Matching an alias, always take this preset with priority. + std::numeric_limits::max() : + // Otherwise take the prefered profile, or the first compatible. + preset.name == m_prefered_name; + } + + private: + const std::string m_prefered_alias; + const std::string &m_prefered_name; + }; + + // Matching by the layer height in addition. + class PreferedPrintProfileMatch : public PreferedProfileMatch + { + public: + PreferedPrintProfileMatch(const Preset &preset, const std::string &prefered_name) : + PreferedProfileMatch(preset.alias, prefered_name), m_prefered_layer_height(preset.config.opt_float("layer_height")) {} + + int operator()(const Preset &preset) const + { + int match_quality = PreferedProfileMatch::operator()(preset); + if (match_quality < std::numeric_limits::max()) { + match_quality += 1; + if (m_prefered_layer_height > 0. && std::abs(preset.config.opt_float("layer_height") - m_prefered_layer_height) < 0.0005) + match_quality *= 10; + } + return match_quality; + } + + private: + const double m_prefered_layer_height; + }; + + // Matching by the layer height in addition. + class PreferedFilamentProfileMatch : public PreferedProfileMatch + { + public: + PreferedFilamentProfileMatch(const Preset *preset, const std::string &prefered_name) : + PreferedProfileMatch(preset ? preset->alias : std::string(), prefered_name), + m_prefered_filament_type(preset ? preset->config.opt_string("filament_type", 0) : std::string()) {} + + int operator()(const Preset &preset) const + { + int match_quality = PreferedProfileMatch::operator()(preset); + if (match_quality < std::numeric_limits::max()) { + match_quality += 1; + if (! m_prefered_filament_type.empty() && m_prefered_filament_type == preset.config.opt_string("filament_type", 0)) + match_quality *= 10; + } + return match_quality; + } + + private: + const std::string m_prefered_filament_type; + }; + + // Matching by the layer height in addition. + class PreferedFilamentsProfileMatch + { + public: + PreferedFilamentsProfileMatch(const Preset &preset, const std::vector &prefered_names) : + m_prefered_alias(preset.alias), + m_prefered_filament_type(preset.config.opt_string("filament_type", 0)), + m_prefered_names(prefered_names) + {} + + int operator()(const Preset &preset) const + { + if (! m_prefered_alias.empty() && m_prefered_alias == preset.alias) + // Matching an alias, always take this preset with priority. + return std::numeric_limits::max(); + int match_quality = (std::find(m_prefered_names.begin(), m_prefered_names.end(), preset.name) != m_prefered_names.end()) + 1; + if (! m_prefered_filament_type.empty() && m_prefered_filament_type == preset.config.opt_string("filament_type", 0)) + match_quality *= 10; + return match_quality; + } + + private: + const std::string m_prefered_alias; + const std::string m_prefered_filament_type; + const std::vector &m_prefered_names; + }; + switch (printer_preset.printer_technology()) { case ptFFF: { assert(printer_preset.config.has("default_print_profile")); assert(printer_preset.config.has("default_filament_profile")); - const std::string &prefered_print_profile = printer_preset.config.opt_string("default_print_profile"); const std::vector &prefered_filament_profiles = printer_preset.config.option("default_filament_profile")->values; - prefered_print_profile.empty() ? - this->prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible) : - this->prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, - [&prefered_print_profile](const std::string& profile_name) { return profile_name == prefered_print_profile; }); + this->prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, + PreferedPrintProfileMatch(this->prints.get_edited_preset(), printer_preset.config.opt_string("default_print_profile"))); const PresetWithVendorProfile print_preset_with_vendor_profile = this->prints.get_edited_preset_with_vendor_profile(); // Remember whether the filament profiles were compatible before updating the filament compatibility. std::vector filament_preset_was_compatible(this->filament_presets.size(), false); for (size_t idx = 0; idx < this->filament_presets.size(); ++ idx) { - std::string &filament_name = this->filament_presets[idx]; - Preset *preset = this->filaments.find_preset(filament_name, false); + Preset *preset = this->filaments.find_preset(this->filament_presets[idx], false); filament_preset_was_compatible[idx] = preset != nullptr && preset->is_compatible; } - prefered_filament_profiles.empty() ? - this->filaments.update_compatible(printer_preset_with_vendor_profile, &print_preset_with_vendor_profile, select_other_filament_if_incompatible) : - this->filaments.update_compatible(printer_preset_with_vendor_profile, &print_preset_with_vendor_profile, select_other_filament_if_incompatible, - [&prefered_filament_profiles](const std::string& profile_name) - { return std::find(prefered_filament_profiles.begin(), prefered_filament_profiles.end(), profile_name) != prefered_filament_profiles.end(); }); + // First select a first compatible profile for the preset editor. + this->filaments.update_compatible(printer_preset_with_vendor_profile, &print_preset_with_vendor_profile, select_other_filament_if_incompatible, + PreferedFilamentsProfileMatch(this->filaments.get_edited_preset(), prefered_filament_profiles)); if (select_other_filament_if_incompatible != PresetSelectCompatibleType::Never) { // Verify validity of the current filament presets. + const std::string prefered_filament_profile = prefered_filament_profiles.empty() ? std::string() : prefered_filament_profiles.front(); if (this->filament_presets.size() == 1) { + // The compatible profile should have been already selected for the preset editor. Just use it. if (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || filament_preset_was_compatible.front()) this->filament_presets.front() = this->filaments.get_edited_preset().name; } else { for (size_t idx = 0; idx < this->filament_presets.size(); ++ idx) { std::string &filament_name = this->filament_presets[idx]; Preset *preset = this->filaments.find_preset(filament_name, false); - if (preset == nullptr || (! preset->is_compatible && (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || filament_preset_was_compatible[idx]))) { + if (preset == nullptr || (! preset->is_compatible && (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || filament_preset_was_compatible[idx]))) // Pick a compatible profile. If there are prefered_filament_profiles, use them. - if (prefered_filament_profiles.empty()) - filament_name = this->filaments.first_compatible().name; - else { - const std::string &preferred = (idx < prefered_filament_profiles.size()) ? - prefered_filament_profiles[idx] : prefered_filament_profiles.front(); - filament_name = this->filaments.first_compatible( - [&preferred](const std::string& profile_name) { return profile_name == preferred; }).name; - } - } + filament_name = this->filaments.first_compatible( + PreferedFilamentProfileMatch(preset, + (idx < prefered_filament_profiles.size()) ? prefered_filament_profiles[idx] : prefered_filament_profile)).name; } } } @@ -1473,24 +1574,18 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri { assert(printer_preset.config.has("default_sla_print_profile")); assert(printer_preset.config.has("default_sla_material_profile")); - const PresetWithVendorProfile sla_print_preset_with_vendor_profile = this->sla_prints.get_edited_preset_with_vendor_profile(); - const std::string &prefered_sla_print_profile = printer_preset.config.opt_string("default_sla_print_profile"); - (prefered_sla_print_profile.empty()) ? - this->sla_prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible) : - this->sla_prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, - [&prefered_sla_print_profile](const std::string& profile_name){ return profile_name == prefered_sla_print_profile; }); - const std::string &prefered_sla_material_profile = printer_preset.config.opt_string("default_sla_material_profile"); - prefered_sla_material_profile.empty() ? - this->sla_materials.update_compatible(printer_preset_with_vendor_profile, &sla_print_preset_with_vendor_profile, select_other_filament_if_incompatible) : - this->sla_materials.update_compatible(printer_preset_with_vendor_profile, &sla_print_preset_with_vendor_profile, select_other_filament_if_incompatible, - [&prefered_sla_material_profile](const std::string& profile_name){ return profile_name == prefered_sla_material_profile; }); + this->sla_prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, + PreferedPrintProfileMatch(this->sla_prints.get_edited_preset(), printer_preset.config.opt_string("default_sla_print_profile"))); + const PresetWithVendorProfile sla_print_preset_with_vendor_profile = this->sla_prints.get_edited_preset_with_vendor_profile(); + this->sla_materials.update_compatible(printer_preset_with_vendor_profile, &sla_print_preset_with_vendor_profile, select_other_filament_if_incompatible, + PreferedProfileMatch(this->sla_materials.get_edited_preset().alias, printer_preset.config.opt_string("default_sla_material_profile"))); break; } default: break; } } -void PresetBundle::export_configbundle(const std::string &path, bool export_system_settings) +void PresetBundle::export_configbundle(const std::string &path, bool export_system_settings, bool export_physical_printers/* = false*/) { boost::nowide::ofstream c; c.open(path, std::ios::out | std::ios::trunc); @@ -1514,6 +1609,14 @@ void PresetBundle::export_configbundle(const std::string &path, bool export_syst } } + if (export_physical_printers) { + for (const PhysicalPrinter& ph_printer : this->physical_printers) { + c << std::endl << "[physical_printer:" << ph_printer.name << "]" << std::endl; + for (const std::string& opt_key : ph_printer.config.keys()) + c << opt_key << " = " << ph_printer.config.opt_serialize(opt_key) << std::endl; + } + } + // Export the names of the active presets. c << std::endl << "[presets]" << std::endl; c << "print = " << this->prints.get_selected_preset_name() << std::endl; @@ -1529,6 +1632,8 @@ void PresetBundle::export_configbundle(const std::string &path, bool export_syst c << "filament" << suffix << " = " << this->filament_presets[i] << std::endl; } + if (export_physical_printers && this->physical_printers.get_selected_idx() >= 0) + c << "physical_printer = " << this->physical_printers.get_selected_printer_name() << std::endl; #if 0 // Export the following setting values from the provided setting repository. static const char *settings_keys[] = { "autocenter" }; @@ -1544,207 +1649,11 @@ void PresetBundle::export_configbundle(const std::string &path, bool export_syst // an optional "(modified)" suffix will be removed from the filament name. void PresetBundle::set_filament_preset(size_t idx, const std::string &name) { - if (name.find_first_of(PresetCollection::separator_head()) == 0) - return; - - if (idx >= filament_presets.size()) + if (idx >= filament_presets.size()) filament_presets.resize(idx + 1, filaments.default_preset().name); filament_presets[idx] = Preset::remove_suffix_modified(name); } -void PresetBundle::load_default_preset_bitmaps() -{ - // Clear bitmap cache, before load new scaled default preset bitmaps - m_bitmapCache->clear(); - this->prints.clear_bitmap_cache(); - this->sla_prints.clear_bitmap_cache(); - this->filaments.clear_bitmap_cache(); - this->sla_materials.clear_bitmap_cache(); - this->printers.clear_bitmap_cache(); - - this->prints.load_bitmap_default("cog"); - this->sla_prints.load_bitmap_default("cog"); - this->filaments.load_bitmap_default("spool.png"); - this->sla_materials.load_bitmap_default("resin"); - this->printers.load_bitmap_default("printer"); - this->printers.load_bitmap_add("add.png"); - this->load_compatible_bitmaps(); -} - -void PresetBundle::update_plater_filament_ui(unsigned int idx_extruder, GUI::PresetComboBox *ui) -{ - if (ui == nullptr || this->printers.get_edited_preset().printer_technology() == ptSLA || - this->filament_presets.size() <= idx_extruder ) - return; - - unsigned char rgb[3]; - std::string extruder_color = this->printers.get_edited_preset().config.opt_string("extruder_colour", idx_extruder); - if (!m_bitmapCache->parse_color(extruder_color, rgb)) - // Extruder color is not defined. - extruder_color.clear(); - - // Fill in the list from scratch. - ui->Freeze(); - ui->Clear(); - size_t selected_preset_item = INT_MAX; // some value meaning that no one item is selected - - const Preset *selected_preset = this->filaments.find_preset(this->filament_presets[idx_extruder]); - // Show wide icons if the currently selected preset is not compatible with the current printer, - // and draw a red flag in front of the selected preset. - bool wide_icons = selected_preset != nullptr && ! selected_preset->is_compatible && m_bitmapIncompatible != nullptr; - assert(selected_preset != nullptr); - std::map nonsys_presets; - wxString selected_str = ""; - if (!this->filaments().front().is_visible) - ui->set_label_marker(ui->Append(PresetCollection::separator(L("System presets")), wxNullBitmap)); - - /* It's supposed that standard size of an icon is 16px*16px for 100% scaled display. - * So set sizes for solid_colored icons used for filament preset - * and scale them in respect to em_unit value - */ - const float scale_f = ui->em_unit() * 0.1f; - - // To avoid the errors of number rounding for different combination of monitor configuration, - // let use scaled 8px, as a smallest icon unit - const int icon_unit = 8 * scale_f + 0.5f; - const int normal_icon_width = 2 * icon_unit; //16 * scale_f + 0.5f; - const int thin_icon_width = icon_unit; //8 * scale_f + 0.5f; - const int wide_icon_width = 3 * icon_unit; //24 * scale_f + 0.5f; - - const int space_icon_width = 2 * scale_f + 0.5f; - - // To avoid asserts, each added bitmap to wxBitmapCombobox should be the same size, so - // set a bitmap height to m_bitmapLock->GetHeight() - // - // To avoid asserts, each added bitmap to wxBitmapCombobox should be the same size. - // But for some display scaling (for example 125% or 175%) normal_icon_width differs from icon width. - // So: - // for nonsystem presets set a width of empty bitmap to m_bitmapLock->GetWidth() - // for compatible presets set a width of empty bitmap to m_bitmapIncompatible->GetWidth() - // - // Note, under OSX we should use a Scaled Height/Width because of Retina scale -#ifdef __APPLE__ - const int icon_height = m_bitmapLock->GetScaledHeight(); - const int lock_icon_width = m_bitmapLock->GetScaledWidth(); - const int flag_icon_width = m_bitmapIncompatible->GetScaledWidth(); -#else - const int icon_height = m_bitmapLock->GetHeight(); - const int lock_icon_width = m_bitmapLock->GetWidth(); - const int flag_icon_width = m_bitmapIncompatible->GetWidth(); -#endif - - wxString tooltip = ""; - - for (int i = this->filaments().front().is_visible ? 0 : 1; i < int(this->filaments().size()); ++i) { - const Preset &preset = this->filaments.preset(i); - bool selected = this->filament_presets[idx_extruder] == preset.name; - if (! preset.is_visible || (! preset.is_compatible && ! selected)) - continue; - // Assign an extruder color to the selected item if the extruder color is defined. - std::string filament_rgb = preset.config.opt_string("filament_colour", 0); - std::string extruder_rgb = (selected && !extruder_color.empty()) ? extruder_color : filament_rgb; - bool single_bar = filament_rgb == extruder_rgb; - std::string bitmap_key = single_bar ? filament_rgb : filament_rgb + extruder_rgb; - // If the filament preset is not compatible and there is a "red flag" icon loaded, show it left - // to the filament color image. - if (wide_icons) - bitmap_key += preset.is_compatible ? ",cmpt" : ",ncmpt"; - bitmap_key += (preset.is_system || preset.is_default) ? ",syst" : ",nsyst"; - if (preset.is_dirty) - bitmap_key += ",drty"; - wxBitmap *bitmap = m_bitmapCache->find(bitmap_key); - if (bitmap == nullptr) { - // Create the bitmap with color bars. - std::vector bmps; - if (wide_icons) - // Paint a red flag for incompatible presets. - bmps.emplace_back(preset.is_compatible ? m_bitmapCache->mkclear(flag_icon_width, icon_height) : *m_bitmapIncompatible); - // Paint the color bars. - m_bitmapCache->parse_color(filament_rgb, rgb); - bmps.emplace_back(m_bitmapCache->mksolid(single_bar ? wide_icon_width : normal_icon_width, icon_height, rgb)); - if (! single_bar) { - m_bitmapCache->parse_color(extruder_rgb, rgb); - bmps.emplace_back(m_bitmapCache->mksolid(thin_icon_width, icon_height, rgb)); - } - // Paint a lock at the system presets. - bmps.emplace_back(m_bitmapCache->mkclear(space_icon_width, icon_height)); - bmps.emplace_back((preset.is_system || preset.is_default) ? *m_bitmapLock : m_bitmapCache->mkclear(lock_icon_width, icon_height)); -// (preset.is_dirty ? *m_bitmapLockOpen : *m_bitmapLock) : m_bitmapCache->mkclear(16, 16)); - bitmap = m_bitmapCache->insert(bitmap_key, bmps); - } - - const std::string name = preset.alias.empty() ? preset.name : preset.alias; - if (preset.is_default || preset.is_system) { - ui->Append(wxString::FromUTF8((/*preset.*/name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), - (bitmap == 0) ? wxNullBitmap : *bitmap); - if (selected || - // just in case: mark selected_preset_item as a first added element - selected_preset_item == INT_MAX ) { - selected_preset_item = ui->GetCount() - 1; - tooltip = wxString::FromUTF8(preset.name.c_str()); - } - } - else - { - nonsys_presets.emplace(wxString::FromUTF8((/*preset.*/name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), - (bitmap == 0) ? &wxNullBitmap : bitmap); - if (selected) { - selected_str = wxString::FromUTF8((/*preset.*/name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()); - tooltip = wxString::FromUTF8(preset.name.c_str()); - } - } - if (preset.is_default) - ui->set_label_marker(ui->Append(PresetCollection::separator(L("System presets")), wxNullBitmap)); - } - - if (!nonsys_presets.empty()) - { - ui->set_label_marker(ui->Append(PresetCollection::separator(L("User presets")), wxNullBitmap)); - for (std::map::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { - ui->Append(it->first, *it->second); - if (it->first == selected_str || - // just in case: mark selected_preset_item as a first added element - selected_preset_item == INT_MAX) { - selected_preset_item = ui->GetCount() - 1; - } - } - } - - std::string bitmap_key = ""; - if (wide_icons) - bitmap_key += "wide,"; - bitmap_key += "edit_preset_list"; - wxBitmap* bmp = m_bitmapCache->find(bitmap_key); - if (bmp == nullptr) { - // Create the bitmap with color bars. - std::vector bmps; - if (wide_icons) - // Paint a red flag for incompatible presets. - bmps.emplace_back(m_bitmapCache->mkclear(flag_icon_width, icon_height)); - // Paint the color bars + a lock at the system presets. - bmps.emplace_back(m_bitmapCache->mkclear(wide_icon_width+space_icon_width, icon_height)); - bmps.emplace_back(create_scaled_bitmap("edit_uni")); - bmp = m_bitmapCache->insert(bitmap_key, bmps); - } - ui->set_label_marker(ui->Append(PresetCollection::separator(L("Add/Remove filaments")), *bmp), GUI::PresetComboBox::LABEL_ITEM_WIZARD_FILAMENTS); - - /* But, if selected_preset_item is still equal to INT_MAX, it means that - * there is no presets added to the list. - * So, select last combobox item ("Add/Remove filaments") - */ - if (selected_preset_item == INT_MAX) - selected_preset_item = ui->GetCount() - 1; - - ui->SetSelection(selected_preset_item); - ui->SetToolTip(tooltip.IsEmpty() ? ui->GetString(selected_preset_item) : tooltip); - ui->check_selection(selected_preset_item); - ui->Thaw(); - - // Update control min size after rescale (changed Display DPI under MSW) - if (ui->GetMinWidth() != 20 * ui->em_unit()) - ui->SetMinSize(wxSize(20 * ui->em_unit(), ui->GetSize().GetHeight())); -} - void PresetBundle::set_default_suppressed(bool default_suppressed) { prints.set_default_suppressed(default_suppressed); diff --git a/src/slic3r/GUI/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp similarity index 88% rename from src/slic3r/GUI/PresetBundle.hpp rename to src/libslic3r/PresetBundle.hpp index bf1bba21db..609e25e2c2 100644 --- a/src/slic3r/GUI/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -1,22 +1,15 @@ #ifndef slic3r_PresetBundle_hpp_ #define slic3r_PresetBundle_hpp_ -#include "AppConfig.hpp" #include "Preset.hpp" +#include "AppConfig.hpp" #include -#include #include #include -class wxWindow; - namespace Slic3r { -namespace GUI { - class BitmapCache; -}; - // Bundle of Print + Filament + Printer presets. class PresetBundle { @@ -45,6 +38,7 @@ public: PresetCollection& materials(PrinterTechnology pt) { return pt == ptFFF ? this->filaments : this->sla_materials; } const PresetCollection& materials(PrinterTechnology pt) const { return pt == ptFFF ? this->filaments : this->sla_materials; } PrinterPresetCollection printers; + PhysicalPrinterCollection physical_printers; // Filament preset names for a multi-extruder or multi-material print. // extruders.size() should be the same as printers.get_edited_preset().config.nozzle_diameter.size() std::vector filament_presets; @@ -108,10 +102,7 @@ public: size_t load_configbundle(const std::string &path, unsigned int flags = LOAD_CFGBNDLE_SAVE); // Export a config bundle file containing all the presets and the names of the active presets. - void export_configbundle(const std::string &path, bool export_system_settings = false); - - // Update a filament selection combo box on the plater for an idx_extruder. - void update_plater_filament_ui(unsigned int idx_extruder, GUI::PresetComboBox *ui); + void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false); // Enable / disable the "- default -" preset. void set_default_suppressed(bool default_suppressed); @@ -132,8 +123,6 @@ public: void update_compatible(PresetSelectCompatibleType select_other_print_if_incompatible, PresetSelectCompatibleType select_other_filament_if_incompatible); void update_compatible(PresetSelectCompatibleType select_other_if_incompatible) { this->update_compatible(select_other_if_incompatible, select_other_if_incompatible); } - void load_default_preset_bitmaps(); - // Set the is_visible flag for printer vendors, printer models and printer variants // based on the user configuration. // If the "vendor" section is missing, enable all models and variants of the particular vendor. @@ -141,6 +130,10 @@ public: const std::string& get_preset_name_by_alias(const Preset::Type& preset_type, const std::string& alias) const; + // Save current preset of a required type under a new name. If the name is different from the old one, + // Unselected option would be reverted to the beginning values + void save_changes_for_preset(const std::string& new_name, Preset::Type type, const std::vector& unselected_options); + static const char *PRUSA_BUNDLE; private: std::string load_system_presets(); @@ -163,21 +156,9 @@ private: // If it is not an external config, then the config will be stored into the user profile directory. void load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config); void load_config_file_config_bundle(const std::string &path, const boost::property_tree::ptree &tree); - void load_compatible_bitmaps(); DynamicPrintConfig full_fff_config() const; DynamicPrintConfig full_sla_config() const; - - // Indicator, that the preset is compatible with the selected printer. - wxBitmap *m_bitmapCompatible; - // Indicator, that the preset is NOT compatible with the selected printer. - wxBitmap *m_bitmapIncompatible; - // Indicator, that the preset is system and not modified. - wxBitmap *m_bitmapLock; - // Indicator, that the preset is system and user modified. - wxBitmap *m_bitmapLockOpen; - // Caching color bitmaps for the filament combo box. - GUI::BitmapCache *m_bitmapCache; }; } // namespace Slic3r diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 0c8a11fcf0..9c5c7bfb7c 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1,5 +1,6 @@ #include "clipper/clipper_z.hpp" +#include "Exception.hpp" #include "Print.hpp" #include "BoundingBox.hpp" #include "ClipperUtils.hpp" @@ -9,6 +10,7 @@ #include "I18N.hpp" #include "ShortestPath.hpp" #include "SupportMaterial.hpp" +#include "Thread.hpp" #include "GCode.hpp" #include "GCode/WipeTower.hpp" #include "Utils.hpp" @@ -402,8 +404,11 @@ static inline void model_volume_list_copy_configs(ModelObject &model_object_dst, assert(mv_src.id() == mv_dst.id()); // Copy the ModelVolume data. mv_dst.name = mv_src.name; - static_cast(mv_dst.config) = static_cast(mv_src.config); - mv_dst.m_supported_facets = mv_src.m_supported_facets; + mv_dst.config.assign_config(mv_src.config); + assert(mv_dst.supported_facets.id() == mv_src.supported_facets.id()); + mv_dst.supported_facets.assign(mv_src.supported_facets); + assert(mv_dst.seam_facets.id() == mv_src.seam_facets.id()); + mv_dst.seam_facets.assign(mv_src.seam_facets); //FIXME what to do with the materials? // mv_dst.m_material_id = mv_src.m_material_id; ++ i_src; @@ -573,6 +578,16 @@ void Print::config_diffs( } } +std::vector Print::print_object_ids() const +{ + std::vector out; + // Reserve one more for the caller to append the ID of the Print itself. + out.reserve(m_objects.size() + 1); + for (const PrintObject *print_object : m_objects) + out.emplace_back(print_object->id()); + return out; +} + Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_config) { #ifdef _DEBUG @@ -583,7 +598,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ new_full_config.option("print_settings_id", true); new_full_config.option("filament_settings_id", true); new_full_config.option("printer_settings_id", true); - new_full_config.normalize(); + new_full_config.normalize_fdm(); // Find modified keys of the various configs. Resolve overrides extruder retract values by filament profiles. t_config_option_keys print_diff, object_diff, region_diff, full_config_diff; @@ -642,7 +657,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ m_ranges.reserve(in.size()); // Input ranges are sorted lexicographically. First range trims the other ranges. coordf_t last_z = 0; - for (const std::pair &range : in) + for (const std::pair &range : in) if (range.first.second > last_z) { coordf_t min_z = std::max(range.first.first, 0.); if (min_z > last_z + EPSILON) { @@ -650,7 +665,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ last_z = min_z; } if (range.first.second > last_z + EPSILON) { - const DynamicPrintConfig* cfg = &range.second; + const DynamicPrintConfig *cfg = &range.second.get(); m_ranges.emplace_back(t_layer_height_range(last_z, range.first.second), cfg); last_z = range.first.second; } @@ -840,11 +855,11 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ // Only volume IDs, volume types, transformation matrices and their order are checked, configuration and other parameters are NOT checked. bool model_parts_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::MODEL_PART); bool modifiers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::PARAMETER_MODIFIER); - bool support_blockers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_BLOCKER); - bool support_enforcers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_ENFORCER); + bool supports_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_BLOCKER) || + model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_ENFORCER); if (model_parts_differ || modifiers_differ || - model_object.origin_translation != model_object_new.origin_translation || - model_object.layer_height_profile != model_object_new.layer_height_profile || + model_object.origin_translation != model_object_new.origin_translation || + ! model_object.layer_height_profile.timestamp_matches(model_object_new.layer_height_profile) || ! layer_height_ranges_equal(model_object.layer_config_ranges, model_object_new.layer_config_ranges, model_object_new.layer_height_profile.empty())) { // The very first step (the slicing step) is invalidated. One may freely remove all associated PrintObjects. auto range = print_object_status.equal_range(PrintObjectStatus(model_object.id())); @@ -854,24 +869,28 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ } // Copy content of the ModelObject including its ID, do not change the parent. model_object.assign_copy(model_object_new); - } else if (support_blockers_differ || support_enforcers_differ || model_custom_supports_data_changed(model_object, model_object_new)) { + } else if (supports_differ || model_custom_supports_data_changed(model_object, model_object_new)) { // First stop background processing before shuffling or deleting the ModelVolumes in the ModelObject's list. - this->call_cancel_callback(); - update_apply_status(false); + if (supports_differ) { + this->call_cancel_callback(); + update_apply_status(false); + } // Invalidate just the supports step. auto range = print_object_status.equal_range(PrintObjectStatus(model_object.id())); for (auto it = range.first; it != range.second; ++ it) update_apply_status(it->print_object->invalidate_step(posSupportMaterial)); - if (support_enforcers_differ || support_blockers_differ) { + if (supports_differ) { // Copy just the support volumes. model_volume_list_update_supports(model_object, model_object_new); } + } else if (model_custom_seam_data_changed(model_object, model_object_new)) { + update_apply_status(this->invalidate_step(psGCodeExport)); } if (! model_parts_differ && ! modifiers_differ) { // Synchronize Object's config. - bool object_config_changed = model_object.config != model_object_new.config; + bool object_config_changed = ! model_object.config.timestamp_matches(model_object_new.config); if (object_config_changed) - static_cast(model_object.config) = static_cast(model_object_new.config); + model_object.config.assign_config(model_object_new.config); if (! object_diff.empty() || object_config_changed || num_extruders_changed) { PrintObjectConfig new_config = PrintObject::object_config_from_model_object(m_default_object_config, model_object, num_extruders); auto range = print_object_status.equal_range(PrintObjectStatus(model_object.id())); @@ -935,13 +954,20 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ old.emplace_back(&(*it)); } // Generate a list of trafos and XY offsets for instances of a ModelObject - PrintObjectConfig config = PrintObject::object_config_from_model_object(m_default_object_config, *model_object, num_extruders); + // Producing the config for PrintObject on demand, caching it at print_object_last. + const PrintObject *print_object_last = nullptr; + auto print_object_apply_config = [this, &print_object_last, model_object, num_extruders](PrintObject* print_object) { + print_object->config_apply(print_object_last ? + print_object_last->config() : + PrintObject::object_config_from_model_object(m_default_object_config, *model_object, num_extruders)); + print_object_last = print_object; + }; std::vector new_print_instances = print_objects_from_model_object(*model_object); if (old.empty()) { // Simple case, just generate new instances. for (PrintObjectTrafoAndInstances &print_instances : new_print_instances) { PrintObject *print_object = new PrintObject(this, model_object, print_instances.trafo, std::move(print_instances.instances)); - print_object->config_apply(config); + print_object_apply_config(print_object); print_objects_new.emplace_back(print_object); // print_object_status.emplace(PrintObjectStatus(print_object, PrintObjectStatus::New)); new_objects = true; @@ -958,7 +984,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ if (it_old == old.end() || ! transform3d_equal((*it_old)->trafo, new_instances.trafo)) { // This is a new instance (or a set of instances with the same trafo). Just add it. PrintObject *print_object = new PrintObject(this, model_object, new_instances.trafo, std::move(new_instances.instances)); - print_object->config_apply(config); + print_object_apply_config(print_object); print_objects_new.emplace_back(print_object); // print_object_status.emplace(PrintObjectStatus(print_object, PrintObjectStatus::New)); new_objects = true; @@ -1259,8 +1285,9 @@ std::string Print::validate() const "and use filaments of the same diameter."); } - if (m_config.gcode_flavor != gcfRepRap && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin) - return L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."); + if (m_config.gcode_flavor != gcfRepRapSprinter && m_config.gcode_flavor != gcfRepRapFirmware && + m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin) + return L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."); if (! m_config.use_relative_e_distances) return L("The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."); if (m_config.ooze_prevention) @@ -1503,7 +1530,7 @@ BoundingBox Print::total_bounding_box() const double Print::skirt_first_layer_height() const { if (m_objects.empty()) - throw std::invalid_argument("skirt_first_layer_height() can't be called without PrintObjects"); + throw Slic3r::InvalidArgument("skirt_first_layer_height() can't be called without PrintObjects"); return m_objects.front()->config().get_abs_value("first_layer_height"); } @@ -1572,14 +1599,16 @@ void Print::auto_assign_extruders(ModelObject* model_object) const ModelVolume *volume = model_object->volumes[volume_id]; //FIXME Vojtech: This assigns an extruder ID even to a modifier volume, if it has a material assigned. if ((volume->is_model_part() || volume->is_modifier()) && ! volume->material_id().empty() && ! volume->config.has("extruder")) - volume->config.opt("extruder", true)->value = int(volume_id + 1); + volume->config.set("extruder", int(volume_id + 1)); } } // Slicing process, running at a background thread. void Print::process() { - BOOST_LOG_TRIVIAL(info) << "Staring the slicing process." << log_memory_info(); + name_tbb_thread_pool_threads(); + + BOOST_LOG_TRIVIAL(info) << "Starting the slicing process." << log_memory_info(); for (PrintObject *obj : m_objects) obj->make_perimeters(); this->set_status(70, L("Infilling layers")); @@ -1599,7 +1628,7 @@ void Print::process() // Initialize the tool ordering, so it could be used by the G-code preview slider for planning tool changes and filament switches. m_tool_ordering = ToolOrdering(*this, -1, false); if (m_tool_ordering.empty() || m_tool_ordering.last_extruder() == unsigned(-1)) - throw std::runtime_error("The print is empty. The model is not printable with current print settings."); + throw Slic3r::SlicingError("The print is empty. The model is not printable with current print settings."); } this->set_done(psWipeTower); } @@ -1632,13 +1661,21 @@ void Print::process() // The export_gcode may die for various reasons (fails to process output_filename_format, // write error into the G-code, cannot execute post-processing scripts). // It is up to the caller to show an error message. +#if ENABLE_GCODE_VIEWER +std::string Print::export_gcode(const std::string& path_template, GCodeProcessor::Result* result, ThumbnailsGeneratorCallback thumbnail_cb) +#else std::string Print::export_gcode(const std::string& path_template, GCodePreviewData* preview_data, ThumbnailsGeneratorCallback thumbnail_cb) +#endif // ENABLE_GCODE_VIEWER { // output everything to a G-code file // The following call may die if the output_filename_format template substitution fails. std::string path = this->output_filepath(path_template); std::string message; +#if ENABLE_GCODE_VIEWER + if (!path.empty() && result == nullptr) { +#else if (! path.empty() && preview_data == nullptr) { +#endif // ENABLE_GCODE_VIEWER // Only show the path if preview_data is not set -> running from command line. message = L("Exporting G-code"); message += " to "; @@ -1649,7 +1686,11 @@ std::string Print::export_gcode(const std::string& path_template, GCodePreviewDa // The following line may die for multiple reasons. GCode gcode; +#if ENABLE_GCODE_VIEWER + gcode.do_export(this, path.c_str(), result, thumbnail_cb); +#else gcode.do_export(this, path.c_str(), preview_data, thumbnail_cb); +#endif // ENABLE_GCODE_VIEWER return path.c_str(); } @@ -2157,7 +2198,7 @@ void Print::_make_wipe_tower() wipe_tower.set_layer(float(m_wipe_tower_data.tool_ordering.back().print_z), float(layer_height), 0, false, true); } m_wipe_tower_data.final_purge = Slic3r::make_unique( - wipe_tower.tool_change((unsigned int)-1, false)); + wipe_tower.tool_change((unsigned int)(-1))); m_wipe_tower_data.used_filament = wipe_tower.get_used_filament(); m_wipe_tower_data.number_of_toolchanges = wipe_tower.get_number_of_toolchanges(); @@ -2180,16 +2221,16 @@ DynamicConfig PrintStatistics::config() const DynamicConfig config; std::string normal_print_time = short_time(this->estimated_normal_print_time); std::string silent_print_time = short_time(this->estimated_silent_print_time); - config.set_key_value("print_time", new ConfigOptionString(normal_print_time)); - config.set_key_value("normal_print_time", new ConfigOptionString(normal_print_time)); - config.set_key_value("silent_print_time", new ConfigOptionString(silent_print_time)); - config.set_key_value("used_filament", new ConfigOptionFloat (this->total_used_filament / 1000.)); - config.set_key_value("extruded_volume", new ConfigOptionFloat (this->total_extruded_volume)); - config.set_key_value("total_cost", new ConfigOptionFloat (this->total_cost)); + config.set_key_value("print_time", new ConfigOptionString(normal_print_time)); + config.set_key_value("normal_print_time", new ConfigOptionString(normal_print_time)); + config.set_key_value("silent_print_time", new ConfigOptionString(silent_print_time)); + config.set_key_value("used_filament", new ConfigOptionFloat(this->total_used_filament / 1000.)); + config.set_key_value("extruded_volume", new ConfigOptionFloat(this->total_extruded_volume)); + config.set_key_value("total_cost", new ConfigOptionFloat(this->total_cost)); config.set_key_value("total_toolchanges", new ConfigOptionInt(this->total_toolchanges)); - config.set_key_value("total_weight", new ConfigOptionFloat (this->total_weight)); - config.set_key_value("total_wipe_tower_cost", new ConfigOptionFloat (this->total_wipe_tower_cost)); - config.set_key_value("total_wipe_tower_filament", new ConfigOptionFloat (this->total_wipe_tower_filament)); + config.set_key_value("total_weight", new ConfigOptionFloat(this->total_weight)); + config.set_key_value("total_wipe_tower_cost", new ConfigOptionFloat(this->total_wipe_tower_cost)); + config.set_key_value("total_wipe_tower_filament", new ConfigOptionFloat(this->total_wipe_tower_filament)); return config; } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index bf541e1222..d354b0d792 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -11,6 +11,9 @@ #include "GCode/ToolOrdering.hpp" #include "GCode/WipeTower.hpp" #include "GCode/ThumbnailData.hpp" +#if ENABLE_GCODE_VIEWER +#include "GCode/GCodeProcessor.hpp" +#endif // ENABLE_GCODE_VIEWER #include "libslic3r.h" @@ -20,22 +23,32 @@ class Print; class PrintObject; class ModelObject; class GCode; +#if !ENABLE_GCODE_VIEWER class GCodePreviewData; +#endif // !ENABLE_GCODE_VIEWER enum class SlicingMode : uint32_t; class Layer; class SupportLayer; +namespace FillAdaptive { + struct Octree; + struct OctreeDeleter; + using OctreePtr = std::unique_ptr; +}; + // Print step IDs for keeping track of the print state. +// The Print steps are applied in this order. enum PrintStep { - psSkirt, - psBrim, - // Synonym for the last step before the Wipe Tower / Tool Ordering, for the G-code preview slider to understand that - // all the extrusions are there for the layer slider to add color changes etc. - psExtrusionPaths = psBrim, psWipeTower, + // Ordering of the tools on PrintObjects for a multi-material print. // psToolOrdering is a synonym to psWipeTower, as the Wipe Tower calculates and modifies the ToolOrdering, // while if printing without the Wipe Tower, the ToolOrdering is calculated as well. psToolOrdering = psWipeTower, + psSkirt, + psBrim, + // Last step before G-code export, after this step is finished, the initial extrusion path preview + // should be refreshed. + psSlicingFinished = psBrim, psGCodeExport, psCount, }; @@ -186,10 +199,8 @@ public: std::vector slice_support_blockers() const { return this->slice_support_volumes(ModelVolumeType::SUPPORT_BLOCKER); } std::vector slice_support_enforcers() const { return this->slice_support_volumes(ModelVolumeType::SUPPORT_ENFORCER); } - // Helpers to project custom supports on slices - void project_and_append_custom_supports(FacetSupportType type, std::vector& expolys) const; - void project_and_append_custom_enforcers(std::vector& enforcers) const { project_and_append_custom_supports(FacetSupportType::ENFORCER, enforcers); } - void project_and_append_custom_blockers(std::vector& blockers) const { project_and_append_custom_supports(FacetSupportType::BLOCKER, blockers); } + // Helpers to project custom facets on slices + void project_and_append_custom_facets(bool seam, EnforcerBlockerType type, std::vector& expolys) const; private: // to be called from Print only. @@ -232,6 +243,7 @@ private: void discover_horizontal_shells(); void combine_infill(); void _generate_support_material(); + std::pair prepare_adaptive_infill_data(); // XYZ in scaled coordinates Vec3crd m_size; @@ -300,8 +312,10 @@ struct PrintStatistics PrintStatistics() { clear(); } std::string estimated_normal_print_time; std::string estimated_silent_print_time; +#if !ENABLE_GCODE_VIEWER std::vector> estimated_normal_custom_gcode_print_times; std::vector> estimated_silent_custom_gcode_print_times; +#endif // !ENABLE_GCODE_VIEWER double total_used_filament; double total_extruded_volume; double total_cost; @@ -319,10 +333,12 @@ struct PrintStatistics std::string finalize_output_path(const std::string &path_in) const; void clear() { +#if !ENABLE_GCODE_VIEWER estimated_normal_print_time.clear(); estimated_silent_print_time.clear(); estimated_normal_custom_gcode_print_times.clear(); estimated_silent_custom_gcode_print_times.clear(); +#endif // !ENABLE_GCODE_VIEWER total_used_filament = 0.; total_extruded_volume = 0.; total_cost = 0.; @@ -356,13 +372,19 @@ public: // a cancellation callback is executed to stop the background processing before the operation. void clear() override; bool empty() const override { return m_objects.empty(); } + // List of existing PrintObject IDs, to remove notifications for non-existent IDs. + std::vector print_object_ids() const override; ApplyStatus apply(const Model &model, DynamicPrintConfig config) override; void process() override; // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file. // If preview_data is not null, the preview_data is filled in for the G-code visualization (not used by the command line Slic3r). +#if ENABLE_GCODE_VIEWER + std::string export_gcode(const std::string& path_template, GCodeProcessor::Result* result, ThumbnailsGeneratorCallback thumbnail_cb = nullptr); +#else std::string export_gcode(const std::string& path_template, GCodePreviewData* preview_data, ThumbnailsGeneratorCallback thumbnail_cb = nullptr); +#endif // ENABLE_GCODE_VIEWER // methods for handling state bool is_step_done(PrintStep step) const { return Inherited::is_step_done(step); } @@ -399,7 +421,7 @@ public: // in the notification center. const PrintObject* get_object(ObjectID object_id) const { auto it = std::find_if(m_objects.begin(), m_objects.end(), - [object_id](const PrintObject *obj) { return *static_cast(obj) == object_id; }); + [object_id](const PrintObject *obj) { return obj->id() == object_id; }); return (it == m_objects.end()) ? nullptr : *it; } const PrintRegionPtrs& regions() const { return m_regions; } @@ -417,6 +439,7 @@ public: const Polygon& first_layer_convex_hull() const { return m_first_layer_convex_hull; } const PrintStatistics& print_statistics() const { return m_print_statistics; } + PrintStatistics& print_statistics() { return m_print_statistics; } // Wipe tower support. bool has_wipe_tower() const; diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp index 14339f3c62..7cdf6448c3 100644 --- a/src/libslic3r/PrintBase.cpp +++ b/src/libslic3r/PrintBase.cpp @@ -1,3 +1,4 @@ +#include "Exception.hpp" #include "PrintBase.hpp" #include @@ -68,7 +69,7 @@ std::string PrintBase::output_filename(const std::string &format, const std::str filename = boost::filesystem::change_extension(filename, default_ext); return filename.string(); } catch (std::runtime_error &err) { - throw std::runtime_error(L("Failed processing of the output_filename_format template.") + "\n" + err.what()); + throw Slic3r::RuntimeError(L("Failed processing of the output_filename_format template.") + "\n" + err.what()); } } @@ -93,7 +94,7 @@ void PrintBase::status_update_warnings(ObjectID object_id, int step, PrintStateB if (this->m_status_callback) m_status_callback(SlicingStatus(*this, step)); else if (! message.empty()) - printf("%s warning: %s\n", (object_id == ObjectID(*this)) ? "print" : "print object", message.c_str()); + printf("%s warning: %s\n", (object_id == this->id()) ? "print" : "print object", message.c_str()); } tbb::mutex& PrintObjectBase::state_mutex(PrintBase *print) @@ -108,7 +109,7 @@ std::function PrintObjectBase::cancel_callback(PrintBase *print) void PrintObjectBase::status_update_warnings(PrintBase *print, int step, PrintStateBase::WarningLevel warning_level, const std::string &message) { - print->status_update_warnings(*this, step, warning_level, message); + print->status_update_warnings(this->id(), step, warning_level, message); } } // namespace Slic3r diff --git a/src/libslic3r/PrintBase.hpp b/src/libslic3r/PrintBase.hpp index d7f3483e87..bfbabd06b5 100644 --- a/src/libslic3r/PrintBase.hpp +++ b/src/libslic3r/PrintBase.hpp @@ -304,7 +304,7 @@ private: class PrintBase; -class PrintObjectBase : public ObjectID +class PrintObjectBase : public ObjectBase { public: const ModelObject* model_object() const { return m_model_object; } @@ -335,7 +335,7 @@ protected: * The PrintBase class will abstract this flow for different technologies. * */ -class PrintBase : public ObjectID +class PrintBase : public ObjectBase { public: PrintBase() : m_placeholder_parser(&m_full_print_config) { this->restart(); } @@ -348,6 +348,8 @@ public: // The Print is empty either after clear() or after apply() over an empty model, // or after apply() over a model, where no object is printable (all outside the print volume). virtual bool empty() const = 0; + // List of existing PrintObject IDs, to remove notifications for non-existent IDs. + virtual std::vector print_object_ids() const = 0; // Validate the print, return empty string if valid, return error if process() cannot (or should not) be started. virtual std::string validate() const { return std::string(); } @@ -386,9 +388,9 @@ public: struct SlicingStatus { SlicingStatus(int percent, const std::string &text, unsigned int flags = 0) : percent(percent), text(text), flags(flags) {} SlicingStatus(const PrintBase &print, int warning_step) : - flags(UPDATE_PRINT_STEP_WARNINGS), warning_object_id(print), warning_step(warning_step) {} + flags(UPDATE_PRINT_STEP_WARNINGS), warning_object_id(print.id()), warning_step(warning_step) {} SlicingStatus(const PrintObjectBase &print_object, int warning_step) : - flags(UPDATE_PRINT_OBJECT_STEP_WARNINGS), warning_object_id(print_object), warning_step(warning_step) {} + flags(UPDATE_PRINT_OBJECT_STEP_WARNINGS), warning_object_id(print_object.id()), warning_step(warning_step) {} int percent { -1 }; std::string text; // Bitmap of flags. @@ -406,7 +408,7 @@ public: // set to an ObjectID of a Print or a PrintObject based on flags // (whether UPDATE_PRINT_STEP_WARNINGS or UPDATE_PRINT_OBJECT_STEP_WARNINGS is set). ObjectID warning_object_id; - // For which Print or PrintObject step a new warning is beeing issued? + // For which Print or PrintObject step a new warning is being issued? int warning_step { -1 }; }; typedef std::function status_callback_type; @@ -507,9 +509,9 @@ protected: bool set_started(PrintStepEnum step) { return m_state.set_started(step, this->state_mutex(), [this](){ this->throw_if_canceled(); }); } PrintStateBase::TimeStamp set_done(PrintStepEnum step) { std::pair status = m_state.set_done(step, this->state_mutex(), [this](){ this->throw_if_canceled(); }); - if (status.second) - this->status_update_warnings(*this, static_cast(step), PrintStateBase::WarningLevel::NON_CRITICAL, std::string()); - return status.first; + if (status.second) + this->status_update_warnings(this->id(), static_cast(step), PrintStateBase::WarningLevel::NON_CRITICAL, std::string()); + return status.first; } bool invalidate_step(PrintStepEnum step) { return m_state.invalidate(step, this->cancel_callback()); } @@ -530,7 +532,7 @@ protected: std::pair active_step = m_state.active_step_add_warning(warning_level, message, message_id, this->state_mutex()); if (active_step.second) // Update UI. - this->status_update_warnings(*this, static_cast(active_step.first), warning_level, message); + this->status_update_warnings(this->id(), static_cast(active_step.first), warning_level, message); } private: @@ -556,9 +558,9 @@ protected: { return m_state.set_started(step, PrintObjectBase::state_mutex(m_print), [this](){ this->throw_if_canceled(); }); } PrintStateBase::TimeStamp set_done(PrintObjectStepEnum step) { std::pair status = m_state.set_done(step, PrintObjectBase::state_mutex(m_print), [this](){ this->throw_if_canceled(); }); - if (status.second) - this->status_update_warnings(m_print, static_cast(step), PrintStateBase::WarningLevel::NON_CRITICAL, std::string()); - return status.first; + if (status.second) + this->status_update_warnings(m_print, static_cast(step), PrintStateBase::WarningLevel::NON_CRITICAL, std::string()); + return status.first; } bool invalidate_step(PrintObjectStepEnum step) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 0c1c828f7e..095a1b390f 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -39,11 +39,6 @@ void PrintConfigDef::init_common_params() { ConfigOptionDef* def; - def = this->add("single_instance", coBool); - def->label = L("Single Instance"); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - def = this->add("printer_technology", coEnum); def->label = L("Printer technology"); def->tooltip = L("Printer technology"); @@ -130,6 +125,37 @@ void PrintConfigDef::init_common_params() def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.2)); + + // Options used by physical printers + + def = this->add("printhost_user", coString); + def->label = L("User"); +// def->tooltip = L(""); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionString("")); + + def = this->add("printhost_password", coString); + def->label = L("Password"); +// def->tooltip = L(""); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionString("")); + + def = this->add("preset_name", coString); + def->label = L("Printer preset name"); + def->tooltip = L("Related printer preset name"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionString("")); + + def = this->add("printhost_authorization_type", coEnum); + def->label = L("Authorization Type"); +// def->tooltip = L(""); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("key"); + def->enum_values.push_back("user"); + def->enum_labels.push_back("KeyPassword"); + def->enum_labels.push_back("UserPassword"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnum(atKeyPassword)); } void PrintConfigDef::init_fff_params() @@ -426,20 +452,20 @@ void PrintConfigDef::init_fff_params() def->cli = "top-fill-pattern|external-fill-pattern|solid-fill-pattern"; def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("rectilinear"); - def->enum_values.push_back("monotonous"); + def->enum_values.push_back("monotonic"); def->enum_values.push_back("concentric"); def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("octagramspiral"); def->enum_labels.push_back(L("Rectilinear")); - def->enum_labels.push_back(L("Monotonous")); + def->enum_labels.push_back(L("Monotonic")); def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); // solid_fill_pattern is an obsolete equivalent to top_fill_pattern/bottom_fill_pattern. def->aliases = { "solid_fill_pattern", "external_fill_pattern" }; - def->set_default_value(new ConfigOptionEnum(ipMonotonous)); + def->set_default_value(new ConfigOptionEnum(ipMonotonic)); def = this->add("bottom_fill_pattern", coEnum); def->label = L("Bottom fill pattern"); @@ -850,6 +876,8 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("octagramspiral"); + def->enum_values.push_back("adaptivecubic"); + def->enum_values.push_back("supportcubic"); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Grid")); def->enum_labels.push_back(L("Triangles")); @@ -863,6 +891,8 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); + def->enum_labels.push_back(L("Adaptive Cubic")); + def->enum_labels.push_back(L("Support Cubic")); def->set_default_value(new ConfigOptionEnum(ipStars)); def = this->add("first_layer_acceleration", coFloat); @@ -953,6 +983,7 @@ void PrintConfigDef::init_fff_params() "The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("reprap"); + def->enum_values.push_back("reprapfirmware"); def->enum_values.push_back("repetier"); def->enum_values.push_back("teacup"); def->enum_values.push_back("makerware"); @@ -963,6 +994,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("smoothie"); def->enum_values.push_back("no-extrusion"); def->enum_labels.push_back("RepRap/Sprinter"); + def->enum_labels.push_back("RepRapFirmware"); def->enum_labels.push_back("Repetier"); def->enum_labels.push_back("Teacup"); def->enum_labels.push_back("MakerWare (MakerBot)"); @@ -973,7 +1005,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back("Smoothie"); def->enum_labels.push_back(L("No extrusion")); def->mode = comExpert; - def->set_default_value(new ConfigOptionEnum(gcfRepRap)); + def->set_default_value(new ConfigOptionEnum(gcfRepRapSprinter)); def = this->add("gcode_label_objects", coBool); def->label = L("Label objects"); @@ -1099,6 +1131,7 @@ void PrintConfigDef::init_fff_params() def = this->add("ironing_type", coEnum); def->label = L("Ironing Type"); + def->category = L("Ironing"); def->tooltip = L("Ironing Type"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("top"); @@ -1122,6 +1155,7 @@ void PrintConfigDef::init_fff_params() def = this->add("ironing_spacing", coFloat); def->label = L("Spacing between ironing passes"); + def->category = L("Ironing"); def->tooltip = L("Distance between ironing lines"); def->sidetext = L("mm"); def->min = 0; @@ -1164,6 +1198,21 @@ void PrintConfigDef::init_fff_params() def->mode = comExpert; def->set_default_value(new ConfigOptionBool(true)); + def = this->add("machine_limits_usage", coEnum); + def->label = L("How to apply"); + def->full_label = L("Purpose of Machine Limits"); + def->category = L("Machine limits"); + def->tooltip = L("How to apply the Machine Limits"); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("emit_to_gcode"); + def->enum_values.push_back("time_estimate_only"); + def->enum_values.push_back("ignore"); + def->enum_labels.push_back("Emit to G-code"); + def->enum_labels.push_back("Use for time estimate"); + def->enum_labels.push_back("Ignore"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnum(MachineLimitsUsage::EmitToGCode)); + { struct AxisDefault { std::string name; @@ -2713,7 +2762,7 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionBool(true)); def = this->add("support_head_front_diameter", coFloat); - def->label = L("Support head front diameter"); + def->label = L("Pinhead front diameter"); def->category = L("Supports"); def->tooltip = L("Diameter of the pointing side of the head"); def->sidetext = L("mm"); @@ -2722,7 +2771,7 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("support_head_penetration", coFloat); - def->label = L("Support head penetration"); + def->label = L("Head penetration"); def->category = L("Supports"); def->tooltip = L("How much the pinhead has to penetrate the model surface"); def->sidetext = L("mm"); @@ -2731,7 +2780,7 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionFloat(0.2)); def = this->add("support_head_width", coFloat); - def->label = L("Support head width"); + def->label = L("Pinhead width"); def->category = L("Supports"); def->tooltip = L("Width from the back sphere center to the front sphere center"); def->sidetext = L("mm"); @@ -2741,7 +2790,7 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionFloat(1.0)); def = this->add("support_pillar_diameter", coFloat); - def->label = L("Support pillar diameter"); + def->label = L("Pillar diameter"); def->category = L("Supports"); def->tooltip = L("Diameter in mm of the support pillars"); def->sidetext = L("mm"); @@ -2749,6 +2798,17 @@ void PrintConfigDef::init_sla_params() def->max = 15; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(1.0)); + + def = this->add("support_small_pillar_diameter_percent", coPercent); + def->label = L("Small pillar diameter percent"); + def->category = L("Supports"); + def->tooltip = L("The percentage of smaller pillars compared to the normal pillar diameter " + "which are used in problematic areas where a normal pilla cannot fit."); + def->sidetext = L("%"); + def->min = 1; + def->max = 100; + def->mode = comExpert; + def->set_default_value(new ConfigOptionPercent(50)); def = this->add("support_max_bridges_on_pillar", coInt); def->label = L("Max bridges on a pillar"); @@ -2761,7 +2821,7 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionInt(3)); def = this->add("support_pillar_connection_mode", coEnum); - def->label = L("Support pillar connection mode"); + def->label = L("Pillar connection mode"); def->tooltip = L("Controls the bridge type between two neighboring pillars." " Can be zig-zag, cross (double zig-zag) or dynamic which" " will automatically switch between the first two depending" @@ -3120,6 +3180,10 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va #endif /* HAS_PRESSURE_EQUALIZER */ }; + // In PrusaSlicer 2.3.0-alpha0 the "monotonous" infill was introduced, which was later renamed to "monotonic". + if (value == "monotonous" && (opt_key == "top_fill_pattern" || opt_key == "bottom_fill_pattern" || opt_key == "fill_pattern")) + value = "monotonic"; + if (ignore.find(opt_key) != ignore.end()) { opt_key = ""; return; @@ -3185,7 +3249,7 @@ PrinterTechnology printer_technology(const ConfigBase &cfg) return ptUnknown; } -void DynamicPrintConfig::normalize() +void DynamicPrintConfig::normalize_fdm() { if (this->has("extruder")) { int extruder = this->option("extruder")->getInt(); @@ -3290,11 +3354,12 @@ std::string FullPrintConfig::validate() if (this->use_firmware_retraction.value && this->gcode_flavor.value != gcfSmoothie && - this->gcode_flavor.value != gcfRepRap && + this->gcode_flavor.value != gcfRepRapSprinter && + this->gcode_flavor.value != gcfRepRapFirmware && this->gcode_flavor.value != gcfMarlin && this->gcode_flavor.value != gcfMachinekit && this->gcode_flavor.value != gcfRepetier) - return "--use-firmware-retraction is only supported by Marlin, Smoothie, Repetier and Machinekit firmware"; + return "--use-firmware-retraction is only supported by Marlin, Smoothie, RepRapFirmware, Repetier and Machinekit firmware"; if (this->use_firmware_retraction.value) for (unsigned char wipe : this->wipe.values) @@ -3486,6 +3551,12 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->cli = "export-gcode|gcode|g"; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("gcodeviewer", coBool); + def->label = L("G-code viewer"); + def->tooltip = L("Visualize an already sliced and saved G-code"); + def->cli = "gcodeviewer"; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("slice", coBool); def->label = L("Slice"); def->tooltip = L("Slice the model as FFF or SLA based on the printer_technology configuration value."); @@ -3625,6 +3696,12 @@ CLIMiscConfigDef::CLIMiscConfigDef() def->tooltip = L("The file where the output will be written (if not specified, it will be based on the input file)."); def->cli = "output|o"; + def = this->add("single_instance", coBool); + def->label = L("Single Instance"); + def->tooltip = L("If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, " + "or an existing PrusaSlicer window is activated. " + "Overrides the \"single_instance\" configuration value from application preferences."); + /* def = this->add("autosave", coString); def->label = L("Autosave"); @@ -3664,6 +3741,8 @@ void DynamicPrintAndCLIConfig::handle_legacy(t_config_option_key &opt_key, std:: } } +uint64_t ModelConfig::s_last_timestamp = 1; + static Points to_points(const std::vector &dpts) { Points pts; pts.reserve(dpts.size()); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f28ef2a228..99b5feb951 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -25,17 +25,28 @@ namespace Slic3r { enum GCodeFlavor : unsigned char { - gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfSailfish, gcfMach3, gcfMachinekit, + gcfRepRapSprinter, gcfRepRapFirmware, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfSailfish, gcfMach3, gcfMachinekit, gcfSmoothie, gcfNoExtrusion, }; +enum class MachineLimitsUsage { + EmitToGCode, + TimeEstimateOnly, + Ignore, + Count, +}; + enum PrintHostType { htOctoPrint, htDuet, htFlashAir, htAstroBox }; +enum AuthorizationType { + atKeyPassword, atUserPassword +}; + enum InfillPattern : int { - ipRectilinear, ipMonotonous, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, - ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipCount, + ipRectilinear, ipMonotonic, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, + ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipCount, }; enum class IroningType { @@ -84,7 +95,8 @@ template<> inline const t_config_enum_values& ConfigOptionEnum inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { static t_config_enum_values keys_map; if (keys_map.empty()) { - keys_map["reprap"] = gcfRepRap; + keys_map["reprap"] = gcfRepRapSprinter; + keys_map["reprapfirmware"] = gcfRepRapFirmware; keys_map["repetier"] = gcfRepetier; keys_map["teacup"] = gcfTeacup; keys_map["makerware"] = gcfMakerWare; @@ -98,6 +110,16 @@ template<> inline const t_config_enum_values& ConfigOptionEnum::get return keys_map; } +template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { + static t_config_enum_values keys_map; + if (keys_map.empty()) { + keys_map["emit_to_gcode"] = int(MachineLimitsUsage::EmitToGCode); + keys_map["time_estimate_only"] = int(MachineLimitsUsage::TimeEstimateOnly); + keys_map["ignore"] = int(MachineLimitsUsage::Ignore); + } + return keys_map; +} + template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { static t_config_enum_values keys_map; if (keys_map.empty()) { @@ -109,11 +131,20 @@ template<> inline const t_config_enum_values& ConfigOptionEnum::g return keys_map; } +template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { + static t_config_enum_values keys_map; + if (keys_map.empty()) { + keys_map["key"] = atKeyPassword; + keys_map["user"] = atUserPassword; + } + return keys_map; +} + template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { static t_config_enum_values keys_map; if (keys_map.empty()) { keys_map["rectilinear"] = ipRectilinear; - keys_map["monotonous"] = ipMonotonous; + keys_map["monotonic"] = ipMonotonic; keys_map["grid"] = ipGrid; keys_map["triangles"] = ipTriangles; keys_map["stars"] = ipStars; @@ -126,6 +157,8 @@ template<> inline const t_config_enum_values& ConfigOptionEnum::g keys_map["hilbertcurve"] = ipHilbertCurve; keys_map["archimedeanchords"] = ipArchimedeanChords; keys_map["octagramspiral"] = ipOctagramSpiral; + keys_map["adaptivecubic"] = ipAdaptiveCubic; + keys_map["supportcubic"] = ipSupportCubic; } return keys_map; } @@ -226,16 +259,20 @@ class DynamicPrintConfig : public DynamicConfig public: DynamicPrintConfig() {} DynamicPrintConfig(const DynamicPrintConfig &rhs) : DynamicConfig(rhs) {} + DynamicPrintConfig(DynamicPrintConfig &&rhs) noexcept : DynamicConfig(std::move(rhs)) {} explicit DynamicPrintConfig(const StaticPrintConfig &rhs); explicit DynamicPrintConfig(const ConfigBase &rhs) : DynamicConfig(rhs) {} + DynamicPrintConfig& operator=(const DynamicPrintConfig &rhs) { DynamicConfig::operator=(rhs); return *this; } + DynamicPrintConfig& operator=(DynamicPrintConfig &&rhs) noexcept { DynamicConfig::operator=(std::move(rhs)); return *this; } + static DynamicPrintConfig full_print_config(); static DynamicPrintConfig* new_from_defaults_keys(const std::vector &keys); // Overrides ConfigBase::def(). Static configuration definition. Any value stored into this ConfigBase shall have its definition here. const ConfigDef* def() const override { return &print_config_def; } - void normalize(); + void normalize_fdm(); void set_num_extruders(unsigned int num_extruders); @@ -250,14 +287,6 @@ public: { PrintConfigDef::handle_legacy(opt_key, value); } }; -template -void normalize_and_apply_config(CONFIG &dst, const DynamicPrintConfig &src) -{ - DynamicPrintConfig src_normalized(src); - src_normalized.normalize(); - dst.apply(src_normalized, true); -} - class StaticPrintConfig : public StaticConfig { public: @@ -586,6 +615,8 @@ class MachineEnvelopeConfig : public StaticPrintConfig { STATIC_PRINT_CONFIG_CACHE(MachineEnvelopeConfig) public: + // Allowing the machine limits to be completely ignored or used just for time estimator. + ConfigOptionEnum machine_limits_usage; // M201 X... Y... Z... E... [mm/sec^2] ConfigOptionFloats machine_max_acceleration_x; ConfigOptionFloats machine_max_acceleration_y; @@ -613,6 +644,7 @@ public: protected: void initialize(StaticCacheBase &cache, const char *base_ptr) { + OPT_PTR(machine_limits_usage); OPT_PTR(machine_max_acceleration_x); OPT_PTR(machine_max_acceleration_y); OPT_PTR(machine_max_acceleration_z); @@ -1018,6 +1050,10 @@ public: // Radius in mm of the support pillars. ConfigOptionFloat support_pillar_diameter /*= 0.8*/; + + // The percentage of smaller pillars compared to the normal pillar diameter + // which are used in problematic areas where a normal pilla cannot fit. + ConfigOptionPercent support_small_pillar_diameter_percent; // How much bridge (supporting another pinhead) can be placed on a pillar. ConfigOptionInt support_max_bridges_on_pillar; @@ -1142,6 +1178,7 @@ protected: OPT_PTR(support_head_penetration); OPT_PTR(support_head_width); OPT_PTR(support_pillar_diameter); + OPT_PTR(support_small_pillar_diameter_percent); OPT_PTR(support_max_bridges_on_pillar); OPT_PTR(support_pillar_connection_mode); OPT_PTR(support_buildplate_only); @@ -1345,6 +1382,95 @@ Points get_bed_shape(const DynamicPrintConfig &cfg); Points get_bed_shape(const PrintConfig &cfg); Points get_bed_shape(const SLAPrinterConfig &cfg); +// ModelConfig is a wrapper around DynamicPrintConfig with an addition of a timestamp. +// Each change of ModelConfig is tracked by assigning a new timestamp from a global counter. +// The counter is used for faster synchronization of the background slicing thread +// with the front end by skipping synchronization of equal config dictionaries. +// The global counter is also used for avoiding unnecessary serialization of config +// dictionaries when taking an Undo snapshot. +// +// The global counter is NOT thread safe, therefore it is recommended to use ModelConfig from +// the main thread only. +// +// As there is a global counter and it is being increased with each change to any ModelConfig, +// if two ModelConfig dictionaries differ, they should differ with their timestamp as well. +// Therefore copying the ModelConfig including its timestamp is safe as there is no harm +// in having multiple ModelConfig with equal timestamps as long as their dictionaries are equal. +// +// The timestamp is used by the Undo/Redo stack. As zero timestamp means invalid timestamp +// to the Undo/Redo stack (zero timestamp means the Undo/Redo stack needs to serialize and +// compare serialized data for differences), zero timestamp shall never be used. +// Timestamp==1 shall only be used for empty dictionaries. +class ModelConfig +{ +public: + void clear() { m_data.clear(); m_timestamp = 1; } + + void assign_config(const ModelConfig &rhs) { + if (m_timestamp != rhs.m_timestamp) { + m_data = rhs.m_data; + m_timestamp = rhs.m_timestamp; + } + } + void assign_config(ModelConfig &&rhs) { + if (m_timestamp != rhs.m_timestamp) { + m_data = std::move(rhs.m_data); + m_timestamp = rhs.m_timestamp; + rhs.clear(); + } + } + + // Modification of the ModelConfig is not thread safe due to the global timestamp counter! + // Don't call modification methods from the back-end! + // Assign methods don't assign if src==dst to not having to bump the timestamp in case they are equal. + void assign_config(const DynamicPrintConfig &rhs) { if (m_data != rhs) { m_data = rhs; this->touch(); } } + void assign_config(DynamicPrintConfig &&rhs) { if (m_data != rhs) { m_data = std::move(rhs); this->touch(); } } + void apply(const ModelConfig &other, bool ignore_nonexistent = false) { this->apply(other.get(), ignore_nonexistent); } + void apply(const ConfigBase &other, bool ignore_nonexistent = false) { m_data.apply_only(other, other.keys(), ignore_nonexistent); this->touch(); } + void apply_only(const ModelConfig &other, const t_config_option_keys &keys, bool ignore_nonexistent = false) { this->apply_only(other.get(), keys, ignore_nonexistent); } + void apply_only(const ConfigBase &other, const t_config_option_keys &keys, bool ignore_nonexistent = false) { m_data.apply_only(other, keys, ignore_nonexistent); this->touch(); } + bool set_key_value(const std::string &opt_key, ConfigOption *opt) { bool out = m_data.set_key_value(opt_key, opt); this->touch(); return out; } + template + void set(const std::string &opt_key, T value) { m_data.set(opt_key, value, true); this->touch(); } + void set_deserialize(const t_config_option_key &opt_key, const std::string &str, bool append = false) + { m_data.set_deserialize(opt_key, str, append); this->touch(); } + bool erase(const t_config_option_key &opt_key) { bool out = m_data.erase(opt_key); if (out) this->touch(); return out; } + + // Getters are thread safe. + // The following implicit conversion breaks the Cereal serialization. +// operator const DynamicPrintConfig&() const throw() { return this->get(); } + const DynamicPrintConfig& get() const throw() { return m_data; } + bool empty() const throw() { return m_data.empty(); } + size_t size() const throw() { return m_data.size(); } + auto cbegin() const { return m_data.cbegin(); } + auto cend() const { return m_data.cend(); } + t_config_option_keys keys() const { return m_data.keys(); } + bool has(const t_config_option_key &opt_key) const { return m_data.has(opt_key); } + const ConfigOption* option(const t_config_option_key &opt_key) const { return m_data.option(opt_key); } + int opt_int(const t_config_option_key &opt_key) const { return m_data.opt_int(opt_key); } + int extruder() const { return opt_int("extruder"); } + double opt_float(const t_config_option_key &opt_key) const { return m_data.opt_float(opt_key); } + std::string opt_serialize(const t_config_option_key &opt_key) const { return m_data.opt_serialize(opt_key); } + + // Return an optional timestamp of this object. + // If the timestamp returned is non-zero, then the serialization framework will + // only save this object on the Undo/Redo stack if the timestamp is different + // from the timestmap of the object at the top of the Undo / Redo stack. + virtual uint64_t timestamp() const throw() { return m_timestamp; } + bool timestamp_matches(const ModelConfig &rhs) const throw() { return m_timestamp == rhs.m_timestamp; } + // Not thread safe! Should not be called from other than the main thread! + void touch() { m_timestamp = ++ s_last_timestamp; } + +private: + friend class cereal::access; + template void serialize(Archive& ar) { ar(m_timestamp); ar(m_data); } + + uint64_t m_timestamp { 1 }; + DynamicPrintConfig m_data; + + static uint64_t s_last_timestamp; +}; + } // namespace Slic3r // Serialization through the Cereal library diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index d2bdb6d531..db654bb340 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1,3 +1,4 @@ +#include "Exception.hpp" #include "Print.hpp" #include "BoundingBox.hpp" #include "ClipperUtils.hpp" @@ -8,7 +9,11 @@ #include "SupportMaterial.hpp" #include "Surface.hpp" #include "Slicing.hpp" +#include "Tesselate.hpp" #include "Utils.hpp" +#include "AABBTreeIndirect.hpp" +#include "Fill/FillAdaptive.hpp" +#include "Format/STL.hpp" #include #include @@ -135,7 +140,7 @@ void PrintObject::slice() } }); if (m_layers.empty()) - throw std::runtime_error("No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.\n"); + throw Slic3r::SlicingError("No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.\n"); this->set_done(posSlice); } @@ -369,13 +374,15 @@ void PrintObject::infill() this->prepare_infill(); if (this->set_started(posInfill)) { + auto [adaptive_fill_octree, support_fill_octree] = this->prepare_adaptive_infill_data(); + BOOST_LOG_TRIVIAL(debug) << "Filling layers in parallel - start"; tbb::parallel_for( tbb::blocked_range(0, m_layers.size()), - [this](const tbb::blocked_range& range) { + [this, &adaptive_fill_octree = adaptive_fill_octree, &support_fill_octree = support_fill_octree](const tbb::blocked_range& range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { m_print->throw_if_canceled(); - m_layers[layer_idx]->make_fills(); + m_layers[layer_idx]->make_fills(adaptive_fill_octree.get(), support_fill_octree.get()); } } ); @@ -421,13 +428,54 @@ void PrintObject::generate_support_material() // therefore they cannot be printed without supports. for (const Layer *layer : m_layers) if (layer->empty()) - throw std::runtime_error("Levitating objects cannot be printed without supports."); + throw Slic3r::SlicingError("Levitating objects cannot be printed without supports."); #endif } this->set_done(posSupportMaterial); } } +std::pair PrintObject::prepare_adaptive_infill_data() +{ + using namespace FillAdaptive; + + auto [adaptive_line_spacing, support_line_spacing] = adaptive_fill_line_spacing(*this); + if ((adaptive_line_spacing == 0. && support_line_spacing == 0.) || this->layers().empty()) + return std::make_pair(OctreePtr(), OctreePtr()); + + indexed_triangle_set mesh = this->model_object()->raw_indexed_triangle_set(); + // Rotate mesh and build octree on it with axis-aligned (standart base) cubes. + Transform3d m = m_trafo; + m.pretranslate(Vec3d(- unscale(m_center_offset.x()), - unscale(m_center_offset.y()), 0)); + auto to_octree = transform_to_octree().toRotationMatrix(); + its_transform(mesh, to_octree * m, true); + + // Triangulate internal bridging surfaces. + std::vector> overhangs(this->layers().size()); + tbb::parallel_for( + tbb::blocked_range(0, int(m_layers.size()) - 1), + [this, &to_octree, &overhangs](const tbb::blocked_range &range) { + std::vector &out = overhangs[range.begin()]; + for (int idx_layer = range.begin(); idx_layer < range.end(); ++ idx_layer) { + m_print->throw_if_canceled(); + const Layer *layer = this->layers()[idx_layer]; + for (const LayerRegion *layerm : layer->regions()) + for (const Surface &surface : layerm->fill_surfaces.surfaces) + if (surface.surface_type == stInternalBridge) + append(out, triangulate_expolygon_3d(surface.expolygon, layer->bottom_z())); + } + for (Vec3d &p : out) + p = (to_octree * p).eval(); + }); + // and gather them. + for (size_t i = 1; i < overhangs.size(); ++ i) + append(overhangs.front(), std::move(overhangs[i])); + + return std::make_pair( + adaptive_line_spacing ? build_octree(mesh, overhangs.front(), adaptive_line_spacing, false) : OctreePtr(), + support_line_spacing ? build_octree(mesh, overhangs.front(), support_line_spacing, true) : OctreePtr()); +} + void PrintObject::clear_layers() { for (Layer *l : m_layers) @@ -602,14 +650,14 @@ bool PrintObject::invalidate_step(PrintObjectStep step) // propagate to dependent steps if (step == posPerimeters) { - invalidated |= this->invalidate_steps({ posPrepareInfill, posInfill }); + invalidated |= this->invalidate_steps({ posPrepareInfill, posInfill, posIroning }); invalidated |= m_print->invalidate_steps({ psSkirt, psBrim }); } else if (step == posPrepareInfill) { - invalidated |= this->invalidate_step(posInfill); + invalidated |= this->invalidate_steps({ posInfill, posIroning }); } else if (step == posInfill) { invalidated |= m_print->invalidate_steps({ psSkirt, psBrim }); } else if (step == posSlice) { - invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posSupportMaterial }); + invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial }); invalidated |= m_print->invalidate_steps({ psSkirt, psBrim }); this->m_slicing_params.valid = false; } else if (step == posSupportMaterial) { @@ -1496,22 +1544,48 @@ static void clamp_exturder_to_default(ConfigOptionInt &opt, size_t num_extruders PrintObjectConfig PrintObject::object_config_from_model_object(const PrintObjectConfig &default_object_config, const ModelObject &object, size_t num_extruders) { PrintObjectConfig config = default_object_config; - normalize_and_apply_config(config, object.config); + { + DynamicPrintConfig src_normalized(object.config.get()); + src_normalized.normalize_fdm(); + config.apply(src_normalized, true); + } // Clamp invalid extruders to the default extruder (with index 1). clamp_exturder_to_default(config.support_material_extruder, num_extruders); clamp_exturder_to_default(config.support_material_interface_extruder, num_extruders); return config; } +static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPrintConfig &in) +{ + // 1) Copy the "extruder key to infill_extruder and perimeter_extruder. + std::string sextruder = "extruder"; + auto *opt_extruder = in.opt(sextruder); + if (opt_extruder) { + int extruder = opt_extruder->value; + if (extruder != 0) { + out.infill_extruder .value = extruder; + out.solid_infill_extruder.value = extruder; + out.perimeter_extruder .value = extruder; + } + } + // 2) Copy the rest of the values. + for (auto it = in.cbegin(); it != in.cend(); ++ it) + if (it->first != sextruder) { + ConfigOption *my_opt = out.option(it->first, false); + if (my_opt) + my_opt->set(it->second.get()); + } +} + PrintRegionConfig PrintObject::region_config_from_model_volume(const PrintRegionConfig &default_region_config, const DynamicPrintConfig *layer_range_config, const ModelVolume &volume, size_t num_extruders) { PrintRegionConfig config = default_region_config; - normalize_and_apply_config(config, volume.get_object()->config); + apply_to_print_region_config(config, volume.get_object()->config.get()); if (layer_range_config != nullptr) - normalize_and_apply_config(config, *layer_range_config); - normalize_and_apply_config(config, volume.config); + apply_to_print_region_config(config, *layer_range_config); + apply_to_print_region_config(config, volume.config.get()); if (! volume.material_id().empty()) - normalize_and_apply_config(config, volume.material()->config); + apply_to_print_region_config(config, volume.material()->config.get()); // Clamp invalid extruders to the default extruder (with index 1). clamp_exturder_to_default(config.infill_extruder, num_extruders); clamp_exturder_to_default(config.perimeter_extruder, num_extruders); @@ -1544,13 +1618,13 @@ SlicingParameters PrintObject::slicing_parameters(const DynamicPrintConfig& full print_config, region_config_from_model_volume(default_region_config, nullptr, *model_volume, num_extruders), object_extruders); - for (const std::pair &range_and_config : model_object.layer_config_ranges) + for (const std::pair &range_and_config : model_object.layer_config_ranges) if (range_and_config.second.has("perimeter_extruder") || range_and_config.second.has("infill_extruder") || range_and_config.second.has("solid_infill_extruder")) PrintRegion::collect_object_printing_extruders( print_config, - region_config_from_model_volume(default_region_config, &range_and_config.second, *model_volume, num_extruders), + region_config_from_model_volume(default_region_config, &range_and_config.second.get(), *model_volume, num_extruders), object_extruders); } sort_remove_duplicates(object_extruders); @@ -1578,7 +1652,7 @@ bool PrintObject::update_layer_height_profile(const ModelObject &model_object, c if (layer_height_profile.empty()) { // use the constructor because the assignement is crashing on ASAN OsX - layer_height_profile = std::vector(model_object.layer_height_profile); + layer_height_profile = std::vector(model_object.layer_height_profile.get()); // layer_height_profile = model_object.layer_height_profile; updated = true; } @@ -1614,12 +1688,6 @@ void PrintObject::_slice(const std::vector &layer_height_profile) m_typed_slices = false; -#ifdef SLIC3R_PROFILE - // Disable parallelization so the Shiny profiler works - static tbb::task_scheduler_init *tbb_init = nullptr; - tbb_init = new tbb::task_scheduler_init(1); -#endif - // 1) Initialize layers and their slice heights. std::vector slice_zs; { @@ -2632,7 +2700,7 @@ void PrintObject::combine_infill() // Because fill areas for rectilinear and honeycomb are grown // later to overlap perimeters, we need to counteract that too. ((region->config().fill_pattern == ipRectilinear || - region->config().fill_pattern == ipMonotonous || + region->config().fill_pattern == ipMonotonic || region->config().fill_pattern == ipGrid || region->config().fill_pattern == ipLine || region->config().fill_pattern == ipHoneycomb) ? 1.5f : 0.5f) * @@ -2669,18 +2737,20 @@ void PrintObject::_generate_support_material() } -void PrintObject::project_and_append_custom_supports( - FacetSupportType type, std::vector& expolys) const +void PrintObject::project_and_append_custom_facets( + bool seam, EnforcerBlockerType type, std::vector& expolys) const { for (const ModelVolume* mv : this->model_object()->volumes) { - const std::vector custom_facets = mv->m_supported_facets.get_facets(type); - if (custom_facets.empty()) + const indexed_triangle_set custom_facets = seam + ? mv->seam_facets.get_facets(*mv, type) + : mv->supported_facets.get_facets(*mv, type); + if (! mv->is_model_part() || custom_facets.indices.empty()) continue; - const TriangleMesh& mesh = mv->mesh(); const Transform3f& tr1 = mv->get_matrix().cast(); const Transform3f& tr2 = this->trafo().cast(); const Transform3f tr = tr2 * tr1; + const float tr_det_sign = (tr.matrix().determinant() > 0. ? 1.f : -1.f); // The projection will be at most a pentagon. Let's minimize heap @@ -2705,11 +2775,11 @@ void PrintObject::project_and_append_custom_supports( }; // Vector to collect resulting projections from each triangle. - std::vector projections_of_triangles(custom_facets.size()); + std::vector projections_of_triangles(custom_facets.indices.size()); // Iterate over all triangles. tbb::parallel_for( - tbb::blocked_range(0, custom_facets.size()), + tbb::blocked_range(0, custom_facets.indices.size()), [&](const tbb::blocked_range& range) { for (size_t idx = range.begin(); idx < range.end(); ++ idx) { @@ -2717,10 +2787,11 @@ void PrintObject::project_and_append_custom_supports( // Transform the triangle into worlds coords. for (int i=0; i<3; ++i) - facet[i] = tr * mesh.its.vertices[mesh.its.indices[custom_facets[idx]](i)]; + facet[i] = tr * custom_facets.vertices[custom_facets.indices[idx](i)]; - // Ignore triangles with upward-pointing normal. - if ((facet[1]-facet[0]).cross(facet[2]-facet[0]).z() > 0.) + // Ignore triangles with upward-pointing normal. Don't forget about mirroring. + float z_comp = (facet[1]-facet[0]).cross(facet[2]-facet[0]).z(); + if (! seam && tr_det_sign * z_comp > 0.) continue; // Sort the three vertices according to z-coordinate. @@ -2732,7 +2803,7 @@ void PrintObject::project_and_append_custom_supports( std::array trianglef; for (int i=0; i<3; ++i) { trianglef[i] = Vec2f(facet[i].x(), facet[i].y()); - trianglef[i] += Vec2f(unscale(this->center_offset().x()), + trianglef[i] -= Vec2f(unscale(this->center_offset().x()), unscale(this->center_offset().y())); } @@ -2758,8 +2829,8 @@ void PrintObject::project_and_append_custom_supports( // Calculate how to move points on triangle sides per unit z increment. Vec2f ta(trianglef[1] - trianglef[0]); Vec2f tb(trianglef[2] - trianglef[0]); - ta *= 1./(facet[1].z() - facet[0].z()); - tb *= 1./(facet[2].z() - facet[0].z()); + ta *= 1.f/(facet[1].z() - facet[0].z()); + tb *= 1.f/(facet[2].z() - facet[0].z()); // Projection on current slice will be build directly in place. LightPolygon* proj = &projections_of_triangles[idx].polygons[0]; @@ -2770,7 +2841,7 @@ void PrintObject::project_and_append_custom_supports( // Project a sub-polygon on all slices intersecting the triangle. while (it != layers().end()) { - const float z = (*it)->slice_z; + const float z = float((*it)->slice_z); // Projections of triangle sides intersections with slices. // a moves along one side, b tracks the other. @@ -2782,7 +2853,7 @@ void PrintObject::project_and_append_custom_supports( if (z > facet[1].z() && ! passed_first) { proj->add(trianglef[1]); ta = trianglef[2]-trianglef[1]; - ta *= 1./(facet[2].z() - facet[1].z()); + ta *= 1.f/(facet[2].z() - facet[1].z()); passed_first = true; } @@ -2821,9 +2892,10 @@ void PrintObject::project_and_append_custom_supports( // Now append the collected polygons to respective layers. for (auto& trg : projections_of_triangles) { - int layer_id = trg.first_layer_id; - + int layer_id = int(trg.first_layer_id); for (const LightPolygon& poly : trg.polygons) { + if (layer_id >= int(expolys.size())) + break; // part of triangle could be projected above top layer expolys[layer_id].emplace_back(std::move(poly.pts)); ++layer_id; } diff --git a/src/libslic3r/PrintRegion.cpp b/src/libslic3r/PrintRegion.cpp index b3ac6a4a5b..2a75cd621d 100644 --- a/src/libslic3r/PrintRegion.cpp +++ b/src/libslic3r/PrintRegion.cpp @@ -1,3 +1,4 @@ +#include "Exception.hpp" #include "Print.hpp" namespace Slic3r { @@ -13,7 +14,7 @@ unsigned int PrintRegion::extruder(FlowRole role) const else if (role == frSolidInfill || role == frTopSolidInfill) extruder = m_config.solid_infill_extruder; else - throw std::invalid_argument("Unknown role"); + throw Slic3r::InvalidArgument("Unknown role"); return extruder; } @@ -40,7 +41,7 @@ Flow PrintRegion::flow(FlowRole role, double layer_height, bool bridge, bool fir } else if (role == frTopSolidInfill) { config_width = m_config.top_infill_extrusion_width; } else { - throw std::invalid_argument("Unknown role"); + throw Slic3r::InvalidArgument("Unknown role"); } } diff --git a/src/libslic3r/SLA/AGGRaster.hpp b/src/libslic3r/SLA/AGGRaster.hpp index 37baed9e88..917f718e98 100644 --- a/src/libslic3r/SLA/AGGRaster.hpp +++ b/src/libslic3r/SLA/AGGRaster.hpp @@ -128,12 +128,13 @@ protected: } public: - template AGGRaster(const Resolution &res, + template + AGGRaster(const Resolution &res, const PixelDim & pd, const Trafo & trafo, - const TColor & foreground, - const TColor & background, - GammaFn && gammafn) + const TColor & foreground, + const TColor & background, + GammaFn && gammafn) : m_resolution(res) , m_pxdim_scaled(SCALING_FACTOR / pd.w_mm, SCALING_FACTOR / pd.h_mm) , m_buf(res.pixels()) diff --git a/src/libslic3r/SLA/BoostAdapter.hpp b/src/libslic3r/SLA/BoostAdapter.hpp index b7b3c63a6c..13e0465b14 100644 --- a/src/libslic3r/SLA/BoostAdapter.hpp +++ b/src/libslic3r/SLA/BoostAdapter.hpp @@ -1,7 +1,9 @@ #ifndef SLA_BOOSTADAPTER_HPP #define SLA_BOOSTADAPTER_HPP -#include +#include +#include + #include namespace boost { diff --git a/src/libslic3r/SLA/Clustering.cpp b/src/libslic3r/SLA/Clustering.cpp new file mode 100644 index 0000000000..41ff1d4f09 --- /dev/null +++ b/src/libslic3r/SLA/Clustering.cpp @@ -0,0 +1,152 @@ +#include "Clustering.hpp" +#include "boost/geometry/index/rtree.hpp" + +#include +#include + +namespace Slic3r { namespace sla { + +namespace bgi = boost::geometry::index; +using Index3D = bgi::rtree< PointIndexEl, bgi::rstar<16, 4> /* ? */ >; + +namespace { + +bool cmp_ptidx_elements(const PointIndexEl& e1, const PointIndexEl& e2) +{ + return e1.second < e2.second; +}; + +ClusteredPoints cluster(Index3D &sindex, + unsigned max_points, + std::function( + const Index3D &, const PointIndexEl &)> qfn) +{ + using Elems = std::vector; + + // Recursive function for visiting all the points in a given distance to + // each other + std::function group = + [&sindex, &group, max_points, qfn](Elems& pts, Elems& cluster) + { + for(auto& p : pts) { + std::vector tmp = qfn(sindex, p); + + std::sort(tmp.begin(), tmp.end(), cmp_ptidx_elements); + + Elems newpts; + std::set_difference(tmp.begin(), tmp.end(), + cluster.begin(), cluster.end(), + std::back_inserter(newpts), cmp_ptidx_elements); + + int c = max_points && newpts.size() + cluster.size() > max_points? + int(max_points - cluster.size()) : int(newpts.size()); + + cluster.insert(cluster.end(), newpts.begin(), newpts.begin() + c); + std::sort(cluster.begin(), cluster.end(), cmp_ptidx_elements); + + if(!newpts.empty() && (!max_points || cluster.size() < max_points)) + group(newpts, cluster); + } + }; + + std::vector clusters; + for(auto it = sindex.begin(); it != sindex.end();) { + Elems cluster = {}; + Elems pts = {*it}; + group(pts, cluster); + + for(auto& c : cluster) sindex.remove(c); + it = sindex.begin(); + + clusters.emplace_back(cluster); + } + + ClusteredPoints result; + for(auto& cluster : clusters) { + result.emplace_back(); + for(auto c : cluster) result.back().emplace_back(c.second); + } + + return result; +} + +std::vector distance_queryfn(const Index3D& sindex, + const PointIndexEl& p, + double dist, + unsigned max_points) +{ + std::vector tmp; tmp.reserve(max_points); + sindex.query( + bgi::nearest(p.first, max_points), + std::back_inserter(tmp) + ); + + for(auto it = tmp.begin(); it < tmp.end(); ++it) + if((p.first - it->first).norm() > dist) it = tmp.erase(it); + + return tmp; +} + +} // namespace + +// Clustering a set of points by the given criteria +ClusteredPoints cluster( + const std::vector& indices, + std::function pointfn, + double dist, + unsigned max_points) +{ + // A spatial index for querying the nearest points + Index3D sindex; + + // Build the index + for(auto idx : indices) sindex.insert( std::make_pair(pointfn(idx), idx)); + + return cluster(sindex, max_points, + [dist, max_points](const Index3D& sidx, const PointIndexEl& p) + { + return distance_queryfn(sidx, p, dist, max_points); + }); +} + +// Clustering a set of points by the given criteria +ClusteredPoints cluster( + const std::vector& indices, + std::function pointfn, + std::function predicate, + unsigned max_points) +{ + // A spatial index for querying the nearest points + Index3D sindex; + + // Build the index + for(auto idx : indices) sindex.insert( std::make_pair(pointfn(idx), idx)); + + return cluster(sindex, max_points, + [max_points, predicate](const Index3D& sidx, const PointIndexEl& p) + { + std::vector tmp; tmp.reserve(max_points); + sidx.query(bgi::satisfies([p, predicate](const PointIndexEl& e){ + return predicate(p, e); + }), std::back_inserter(tmp)); + return tmp; + }); +} + +ClusteredPoints cluster(const Eigen::MatrixXd& pts, double dist, unsigned max_points) +{ + // A spatial index for querying the nearest points + Index3D sindex; + + // Build the index + for(Eigen::Index i = 0; i < pts.rows(); i++) + sindex.insert(std::make_pair(Vec3d(pts.row(i)), unsigned(i))); + + return cluster(sindex, max_points, + [dist, max_points](const Index3D& sidx, const PointIndexEl& p) + { + return distance_queryfn(sidx, p, dist, max_points); + }); +} + +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/Clustering.hpp b/src/libslic3r/SLA/Clustering.hpp index 1b0d47d953..269ec28822 100644 --- a/src/libslic3r/SLA/Clustering.hpp +++ b/src/libslic3r/SLA/Clustering.hpp @@ -2,7 +2,8 @@ #define SLA_CLUSTERING_HPP #include -#include + +#include #include namespace Slic3r { namespace sla { @@ -16,7 +17,7 @@ ClusteredPoints cluster(const std::vector& indices, double dist, unsigned max_points); -ClusteredPoints cluster(const PointSet& points, +ClusteredPoints cluster(const Eigen::MatrixXd& points, double dist, unsigned max_points); @@ -26,5 +27,56 @@ ClusteredPoints cluster( std::function predicate, unsigned max_points); -}} +// This function returns the position of the centroid in the input 'clust' +// vector of point indices. +template +long cluster_centroid(const ClusterEl &clust, PointFn pointfn, DistFn df) +{ + switch(clust.size()) { + case 0: /* empty cluster */ return -1; + case 1: /* only one element */ return 0; + case 2: /* if two elements, there is no center */ return 0; + default: ; + } + + // The function works by calculating for each point the average distance + // from all the other points in the cluster. We create a selector bitmask of + // the same size as the cluster. The bitmask will have two true bits and + // false bits for the rest of items and we will loop through all the + // permutations of the bitmask (combinations of two points). Get the + // distance for the two points and add the distance to the averages. + // The point with the smallest average than wins. + + // The complexity should be O(n^2) but we will mostly apply this function + // for small clusters only (cca 3 elements) + + std::vector sel(clust.size(), false); // create full zero bitmask + std::fill(sel.end() - 2, sel.end(), true); // insert the two ones + std::vector avgs(clust.size(), 0.0); // store the average distances + + do { + std::array idx; + for(size_t i = 0, j = 0; i < clust.size(); i++) + if(sel[i]) idx[j++] = i; + + double d = df(pointfn(clust[idx[0]]), + pointfn(clust[idx[1]])); + + // add the distance to the sums for both associated points + for(auto i : idx) avgs[i] += d; + + // now continue with the next permutation of the bitmask with two 1s + } while(std::next_permutation(sel.begin(), sel.end())); + + // Divide by point size in the cluster to get the average (may be redundant) + for(auto& a : avgs) a /= clust.size(); + + // get the lowest average distance and return the index + auto minit = std::min_element(avgs.begin(), avgs.end()); + return long(minit - avgs.begin()); +} + + +}} // namespace Slic3r::sla + #endif // CLUSTERING_HPP diff --git a/src/libslic3r/SLA/Common.hpp b/src/libslic3r/SLA/Common.hpp deleted file mode 100644 index ca616cabce..0000000000 --- a/src/libslic3r/SLA/Common.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef SLA_COMMON_HPP -#define SLA_COMMON_HPP - -#include -#include -#include -#include -#include - - -namespace Slic3r { - -// Typedefs from Point.hpp -typedef Eigen::Matrix Vec3f; -typedef Eigen::Matrix Vec3d; -typedef Eigen::Matrix Vec3i; -typedef Eigen::Matrix Vec4i; - -namespace sla { - -using PointSet = Eigen::MatrixXd; - -} // namespace sla -} // namespace Slic3r - - -#endif // SLASUPPORTTREE_HPP diff --git a/src/libslic3r/SLA/Concurrency.hpp b/src/libslic3r/SLA/Concurrency.hpp index 8620c67b19..300024c76d 100644 --- a/src/libslic3r/SLA/Concurrency.hpp +++ b/src/libslic3r/SLA/Concurrency.hpp @@ -4,6 +4,12 @@ #include #include #include +#include + +#include +#include + +#include namespace Slic3r { namespace sla { @@ -17,18 +23,59 @@ template struct _ccr {}; template<> struct _ccr { using SpinningMutex = tbb::spin_mutex; - using BlockingMutex = tbb::mutex; - - template - static inline void enumerate(It from, It to, Fn fn) + using BlockingMutex = tbb::mutex; + + template + static IteratorOnly loop_(const tbb::blocked_range &range, Fn &&fn) { - auto iN = to - from; - size_t N = iN < 0 ? 0 : size_t(iN); - - tbb::parallel_for(size_t(0), N, [from, fn](size_t n) { - fn(*(from + decltype(iN)(n)), n); + for (auto &el : range) fn(el); + } + + template + static IntegerOnly loop_(const tbb::blocked_range &range, Fn &&fn) + { + for (I i = range.begin(); i < range.end(); ++i) fn(i); + } + + template + static void for_each(It from, It to, Fn &&fn, size_t granularity = 1) + { + tbb::parallel_for(tbb::blocked_range{from, to, granularity}, + [&fn, from](const auto &range) { + loop_(range, std::forward(fn)); }); } + + template + static T reduce(I from, + I to, + const T &init, + MergeFn &&mergefn, + AccessFn &&access, + size_t granularity = 1 + ) + { + return tbb::parallel_reduce( + tbb::blocked_range{from, to, granularity}, init, + [&](const auto &range, T subinit) { + T acc = subinit; + loop_(range, [&](auto &i) { acc = mergefn(acc, access(i)); }); + return acc; + }, + std::forward(mergefn)); + } + + template + static IteratorOnly reduce(I from, + I to, + const T & init, + MergeFn &&mergefn, + size_t granularity = 1) + { + return reduce( + from, to, init, std::forward(mergefn), + [](typename I::value_type &i) { return i; }, granularity); + } }; template<> struct _ccr @@ -39,11 +86,52 @@ private: public: using SpinningMutex = _Mtx; using BlockingMutex = _Mtx; - - template - static inline void enumerate(It from, It to, Fn fn) + + template + static IteratorOnly loop_(It from, It to, Fn &&fn) { - for (auto it = from; it != to; ++it) fn(*it, size_t(it - from)); + for (auto it = from; it != to; ++it) fn(*it); + } + + template + static IntegerOnly loop_(I from, I to, Fn &&fn) + { + for (I i = from; i < to; ++i) fn(i); + } + + template + static void for_each(It from, + It to, + Fn &&fn, + size_t /* ignore granularity */ = 1) + { + loop_(from, to, std::forward(fn)); + } + + template + static T reduce(I from, + I to, + const T & init, + MergeFn &&mergefn, + AccessFn &&access, + size_t /*granularity*/ = 1 + ) + { + T acc = init; + loop_(from, to, [&](auto &i) { acc = mergefn(acc, access(i)); }); + return acc; + } + + template + static IteratorOnly reduce(I from, + I to, + const T &init, + MergeFn &&mergefn, + size_t /*granularity*/ = 1 + ) + { + return reduce(from, to, init, std::forward(mergefn), + [](typename I::value_type &i) { return i; }); } }; diff --git a/src/libslic3r/SLA/Contour3D.cpp b/src/libslic3r/SLA/Contour3D.cpp index 408465d43e..96d10af208 100644 --- a/src/libslic3r/SLA/Contour3D.cpp +++ b/src/libslic3r/SLA/Contour3D.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include @@ -27,7 +27,7 @@ Contour3D::Contour3D(TriangleMesh &&trmesh) faces3.swap(trmesh.its.indices); } -Contour3D::Contour3D(const EigenMesh3D &emesh) { +Contour3D::Contour3D(const IndexedMesh &emesh) { points.reserve(emesh.vertices().size()); faces3.reserve(emesh.indices().size()); diff --git a/src/libslic3r/SLA/Contour3D.hpp b/src/libslic3r/SLA/Contour3D.hpp index 295612f19b..3380cd6ab0 100644 --- a/src/libslic3r/SLA/Contour3D.hpp +++ b/src/libslic3r/SLA/Contour3D.hpp @@ -1,13 +1,16 @@ #ifndef SLA_CONTOUR3D_HPP #define SLA_CONTOUR3D_HPP -#include - #include -namespace Slic3r { namespace sla { +namespace Slic3r { -class EigenMesh3D; +// Used for quads (TODO: remove this, and convert quads to triangles in OpenVDBUtils) +using Vec4i = Eigen::Matrix; + +namespace sla { + +class IndexedMesh; /// Dumb vertex mesh consisting of triangles (or) quads. Capable of merging with /// other meshes of this type and converting to and from other mesh formats. @@ -19,7 +22,7 @@ struct Contour3D { Contour3D() = default; Contour3D(const TriangleMesh &trmesh); Contour3D(TriangleMesh &&trmesh); - Contour3D(const EigenMesh3D &emesh); + Contour3D(const IndexedMesh &emesh); Contour3D& merge(const Contour3D& ctr); Contour3D& merge(const Pointf3s& triangles); diff --git a/src/libslic3r/SLA/Hollowing.cpp b/src/libslic3r/SLA/Hollowing.cpp index 0dd9436a1d..6df752fd36 100644 --- a/src/libslic3r/SLA/Hollowing.cpp +++ b/src/libslic3r/SLA/Hollowing.cpp @@ -3,11 +3,10 @@ #include #include #include -#include -#include -#include +#include #include #include +#include #include @@ -160,7 +159,7 @@ bool DrainHole::get_intersections(const Vec3f& s, const Vec3f& dir, const Eigen::ParametrizedLine ray(s, dir.normalized()); for (size_t i=0; i<2; ++i) - out[i] = std::make_pair(sla::EigenMesh3D::hit_result::infty(), Vec3d::Zero()); + out[i] = std::make_pair(sla::IndexedMesh::hit_result::infty(), Vec3d::Zero()); const float sqr_radius = pow(radius, 2.f); @@ -274,4 +273,13 @@ void cut_drainholes(std::vector & obj_slices, obj_slices[i] = diff_ex(obj_slices[i], hole_slices[i]); } +void hollow_mesh(TriangleMesh &mesh, const HollowingConfig &cfg) +{ + std::unique_ptr inter_ptr = + Slic3r::sla::generate_interior(mesh); + + if (inter_ptr) mesh.merge(*inter_ptr); + mesh.require_shared_vertices(); +} + }} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/Hollowing.hpp b/src/libslic3r/SLA/Hollowing.hpp index cc7d310eae..949cc23935 100644 --- a/src/libslic3r/SLA/Hollowing.hpp +++ b/src/libslic3r/SLA/Hollowing.hpp @@ -2,7 +2,6 @@ #define SLA_HOLLOWING_HPP #include -#include #include #include @@ -59,10 +58,14 @@ struct DrainHole using DrainHoles = std::vector; +constexpr float HoleStickOutLength = 1.f; + std::unique_ptr generate_interior(const TriangleMesh &mesh, const HollowingConfig & = {}, const JobController &ctl = {}); +void hollow_mesh(TriangleMesh &mesh, const HollowingConfig &cfg); + void cut_drainholes(std::vector & obj_slices, const std::vector &slicegrid, float closing_radius, diff --git a/src/libslic3r/SLA/Common.cpp b/src/libslic3r/SLA/IndexedMesh.cpp similarity index 53% rename from src/libslic3r/SLA/Common.cpp rename to src/libslic3r/SLA/IndexedMesh.cpp index a7420a7fb8..efcf09873e 100644 --- a/src/libslic3r/SLA/Common.cpp +++ b/src/libslic3r/SLA/IndexedMesh.cpp @@ -1,187 +1,18 @@ -#include -#include -#include -#include -#include -#include -#include +#include "IndexedMesh.hpp" +#include "Concurrency.hpp" + #include +#include -// for concave hull merging decisions -#include -#include "boost/geometry/index/rtree.hpp" - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable: 4244) -#pragma warning(disable: 4267) -#endif - - -#include +#include #ifdef SLIC3R_HOLE_RAYCASTER - #include +#include #endif +namespace Slic3r { namespace sla { -#ifdef _MSC_VER -#pragma warning(pop) -#endif - - -namespace Slic3r { -namespace sla { - - -/* ************************************************************************** - * PointIndex implementation - * ************************************************************************** */ - -class PointIndex::Impl { -public: - using BoostIndex = boost::geometry::index::rtree< PointIndexEl, - boost::geometry::index::rstar<16, 4> /* ? */ >; - - BoostIndex m_store; -}; - -PointIndex::PointIndex(): m_impl(new Impl()) {} -PointIndex::~PointIndex() {} - -PointIndex::PointIndex(const PointIndex &cpy): m_impl(new Impl(*cpy.m_impl)) {} -PointIndex::PointIndex(PointIndex&& cpy): m_impl(std::move(cpy.m_impl)) {} - -PointIndex& PointIndex::operator=(const PointIndex &cpy) -{ - m_impl.reset(new Impl(*cpy.m_impl)); - return *this; -} - -PointIndex& PointIndex::operator=(PointIndex &&cpy) -{ - m_impl.swap(cpy.m_impl); - return *this; -} - -void PointIndex::insert(const PointIndexEl &el) -{ - m_impl->m_store.insert(el); -} - -bool PointIndex::remove(const PointIndexEl& el) -{ - return m_impl->m_store.remove(el) == 1; -} - -std::vector -PointIndex::query(std::function fn) const -{ - namespace bgi = boost::geometry::index; - - std::vector ret; - m_impl->m_store.query(bgi::satisfies(fn), std::back_inserter(ret)); - return ret; -} - -std::vector PointIndex::nearest(const Vec3d &el, unsigned k = 1) const -{ - namespace bgi = boost::geometry::index; - std::vector ret; ret.reserve(k); - m_impl->m_store.query(bgi::nearest(el, k), std::back_inserter(ret)); - return ret; -} - -size_t PointIndex::size() const -{ - return m_impl->m_store.size(); -} - -void PointIndex::foreach(std::function fn) -{ - for(auto& el : m_impl->m_store) fn(el); -} - -void PointIndex::foreach(std::function fn) const -{ - for(const auto &el : m_impl->m_store) fn(el); -} - -/* ************************************************************************** - * BoxIndex implementation - * ************************************************************************** */ - -class BoxIndex::Impl { -public: - using BoostIndex = boost::geometry::index:: - rtree /* ? */>; - - BoostIndex m_store; -}; - -BoxIndex::BoxIndex(): m_impl(new Impl()) {} -BoxIndex::~BoxIndex() {} - -BoxIndex::BoxIndex(const BoxIndex &cpy): m_impl(new Impl(*cpy.m_impl)) {} -BoxIndex::BoxIndex(BoxIndex&& cpy): m_impl(std::move(cpy.m_impl)) {} - -BoxIndex& BoxIndex::operator=(const BoxIndex &cpy) -{ - m_impl.reset(new Impl(*cpy.m_impl)); - return *this; -} - -BoxIndex& BoxIndex::operator=(BoxIndex &&cpy) -{ - m_impl.swap(cpy.m_impl); - return *this; -} - -void BoxIndex::insert(const BoxIndexEl &el) -{ - m_impl->m_store.insert(el); -} - -bool BoxIndex::remove(const BoxIndexEl& el) -{ - return m_impl->m_store.remove(el) == 1; -} - -std::vector BoxIndex::query(const BoundingBox &qrbb, - BoxIndex::QueryType qt) -{ - namespace bgi = boost::geometry::index; - - std::vector ret; ret.reserve(m_impl->m_store.size()); - - switch (qt) { - case qtIntersects: - m_impl->m_store.query(bgi::intersects(qrbb), std::back_inserter(ret)); - break; - case qtWithin: - m_impl->m_store.query(bgi::within(qrbb), std::back_inserter(ret)); - } - - return ret; -} - -size_t BoxIndex::size() const -{ - return m_impl->m_store.size(); -} - -void BoxIndex::foreach(std::function fn) -{ - for(auto& el : m_impl->m_store) fn(el); -} - - -/* **************************************************************************** - * EigenMesh3D implementation - * ****************************************************************************/ - - -class EigenMesh3D::AABBImpl { +class IndexedMesh::AABBImpl { private: AABBTreeIndirect::Tree3f m_tree; @@ -189,7 +20,7 @@ public: void init(const TriangleMesh& tm) { m_tree = AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set( - tm.its.vertices, tm.its.indices); + tm.its.vertices, tm.its.indices); } void intersect_ray(const TriangleMesh& tm, @@ -215,9 +46,9 @@ public: size_t idx_unsigned = 0; Vec3d closest_vec3d(closest); double dist = AABBTreeIndirect::squared_distance_to_indexed_triangle_set( - tm.its.vertices, - tm.its.indices, - m_tree, point, idx_unsigned, closest_vec3d); + tm.its.vertices, + tm.its.indices, + m_tree, point, idx_unsigned, closest_vec3d); i = int(idx_unsigned); closest = closest_vec3d; return dist; @@ -226,72 +57,71 @@ public: static const constexpr double MESH_EPS = 1e-6; -EigenMesh3D::EigenMesh3D(const TriangleMesh& tmesh) +IndexedMesh::IndexedMesh(const TriangleMesh& tmesh) : m_aabb(new AABBImpl()), m_tm(&tmesh) { auto&& bb = tmesh.bounding_box(); m_ground_level += bb.min(Z); - + // Build the AABB accelaration tree m_aabb->init(tmesh); } -EigenMesh3D::~EigenMesh3D() {} +IndexedMesh::~IndexedMesh() {} -EigenMesh3D::EigenMesh3D(const EigenMesh3D &other): +IndexedMesh::IndexedMesh(const IndexedMesh &other): m_tm(other.m_tm), m_ground_level(other.m_ground_level), m_aabb( new AABBImpl(*other.m_aabb) ) {} -EigenMesh3D &EigenMesh3D::operator=(const EigenMesh3D &other) +IndexedMesh &IndexedMesh::operator=(const IndexedMesh &other) { m_tm = other.m_tm; m_ground_level = other.m_ground_level; m_aabb.reset(new AABBImpl(*other.m_aabb)); return *this; } -EigenMesh3D &EigenMesh3D::operator=(EigenMesh3D &&other) = default; +IndexedMesh &IndexedMesh::operator=(IndexedMesh &&other) = default; -EigenMesh3D::EigenMesh3D(EigenMesh3D &&other) = default; +IndexedMesh::IndexedMesh(IndexedMesh &&other) = default; -const std::vector& EigenMesh3D::vertices() const +const std::vector& IndexedMesh::vertices() const { return m_tm->its.vertices; } -const std::vector& EigenMesh3D::indices() const +const std::vector& IndexedMesh::indices() const { return m_tm->its.indices; } -const Vec3f& EigenMesh3D::vertices(size_t idx) const +const Vec3f& IndexedMesh::vertices(size_t idx) const { return m_tm->its.vertices[idx]; } -const Vec3i& EigenMesh3D::indices(size_t idx) const +const Vec3i& IndexedMesh::indices(size_t idx) const { return m_tm->its.indices[idx]; } -Vec3d EigenMesh3D::normal_by_face_id(int face_id) const { +Vec3d IndexedMesh::normal_by_face_id(int face_id) const { return m_tm->stl.facet_start[face_id].normal.cast(); } - -EigenMesh3D::hit_result -EigenMesh3D::query_ray_hit(const Vec3d &s, const Vec3d &dir) const +IndexedMesh::hit_result +IndexedMesh::query_ray_hit(const Vec3d &s, const Vec3d &dir) const { assert(is_approx(dir.norm(), 1.)); igl::Hit hit; @@ -319,13 +149,13 @@ EigenMesh3D::query_ray_hit(const Vec3d &s, const Vec3d &dir) const return ret; } -std::vector -EigenMesh3D::query_ray_hits(const Vec3d &s, const Vec3d &dir) const +std::vector +IndexedMesh::query_ray_hits(const Vec3d &s, const Vec3d &dir) const { - std::vector outs; + std::vector outs; std::vector hits; m_aabb->intersect_ray(*m_tm, s, dir, hits); - + // The sort is necessary, the hits are not always sorted. std::sort(hits.begin(), hits.end(), [](const igl::Hit& a, const igl::Hit& b) { return a.t < b.t; }); @@ -334,13 +164,13 @@ EigenMesh3D::query_ray_hits(const Vec3d &s, const Vec3d &dir) const // along an axis of a cube due to floating-point approximations in igl (?) hits.erase(std::unique(hits.begin(), hits.end(), [](const igl::Hit& a, const igl::Hit& b) - { return a.t == b.t; }), + { return a.t == b.t; }), hits.end()); // Convert the igl::Hit into hit_result outs.reserve(hits.size()); for (const igl::Hit& hit : hits) { - outs.emplace_back(EigenMesh3D::hit_result(*this)); + outs.emplace_back(IndexedMesh::hit_result(*this)); outs.back().m_t = double(hit.t); outs.back().m_dir = dir; outs.back().m_source = s; @@ -355,8 +185,8 @@ EigenMesh3D::query_ray_hits(const Vec3d &s, const Vec3d &dir) const #ifdef SLIC3R_HOLE_RAYCASTER -EigenMesh3D::hit_result EigenMesh3D::filter_hits( - const std::vector& object_hits) const +IndexedMesh::hit_result IndexedMesh::filter_hits( + const std::vector& object_hits) const { assert(! m_holes.empty()); hit_result out(*this); @@ -377,7 +207,7 @@ EigenMesh3D::hit_result EigenMesh3D::filter_hits( }; std::vector hole_isects; hole_isects.reserve(m_holes.size()); - + auto sf = s.cast(); auto dirf = dir.cast(); @@ -452,7 +282,7 @@ EigenMesh3D::hit_result EigenMesh3D::filter_hits( #endif -double EigenMesh3D::squared_distance(const Vec3d &p, int& i, Vec3d& c) const { +double IndexedMesh::squared_distance(const Vec3d &p, int& i, Vec3d& c) const { double sqdst = 0; Eigen::Matrix pp = p; Eigen::Matrix cc; @@ -461,31 +291,19 @@ double EigenMesh3D::squared_distance(const Vec3d &p, int& i, Vec3d& c) const { return sqdst; } -/* **************************************************************************** - * Misc functions - * ****************************************************************************/ -namespace { - -bool point_on_edge(const Vec3d& p, const Vec3d& e1, const Vec3d& e2, - double eps = 0.05) +static bool point_on_edge(const Vec3d& p, const Vec3d& e1, const Vec3d& e2, + double eps = 0.05) { using Line3D = Eigen::ParametrizedLine; - + auto line = Line3D::Through(e1, e2); double d = line.distance(p); return std::abs(d) < eps; } -template double distance(const Vec& pp1, const Vec& pp2) { - auto p = pp2 - pp1; - return std::sqrt(p.transpose() * p); -} - -} - PointSet normals(const PointSet& points, - const EigenMesh3D& mesh, + const IndexedMesh& mesh, double eps, std::function thr, // throw on cancel const std::vector& pt_indices) @@ -502,10 +320,10 @@ PointSet normals(const PointSet& points, PointSet ret(range.size(), 3); // for (size_t ridx = 0; ridx < range.size(); ++ridx) - ccr::enumerate( - range.begin(), range.end(), - [&ret, &mesh, &points, thr, eps](unsigned el, size_t ridx) { + ccr::for_each(size_t(0), range.size(), + [&ret, &mesh, &points, thr, eps, &range](size_t ridx) { thr(); + unsigned el = range[ridx]; auto eidx = Eigen::Index(el); int faceid = 0; Vec3d p; @@ -531,11 +349,11 @@ PointSet normals(const PointSet& points, // ic will mark a single vertex. int ia = -1, ib = -1, ic = -1; - if (std::abs(distance(p, p1)) < eps) { + if (std::abs((p - p1).norm()) < eps) { ic = trindex(0); - } else if (std::abs(distance(p, p2)) < eps) { + } else if (std::abs((p - p2).norm()) < eps) { ic = trindex(1); - } else if (std::abs(distance(p, p3)) < eps) { + } else if (std::abs((p - p3).norm()) < eps) { ic = trindex(2); } else if (point_on_edge(p, p1, p2, eps)) { ia = trindex(0); @@ -612,148 +430,4 @@ PointSet normals(const PointSet& points, return ret; } -namespace bgi = boost::geometry::index; -using Index3D = bgi::rtree< PointIndexEl, bgi::rstar<16, 4> /* ? */ >; - -namespace { - -bool cmp_ptidx_elements(const PointIndexEl& e1, const PointIndexEl& e2) -{ - return e1.second < e2.second; -}; - -ClusteredPoints cluster(Index3D &sindex, - unsigned max_points, - std::function( - const Index3D &, const PointIndexEl &)> qfn) -{ - using Elems = std::vector; - - // Recursive function for visiting all the points in a given distance to - // each other - std::function group = - [&sindex, &group, max_points, qfn](Elems& pts, Elems& cluster) - { - for(auto& p : pts) { - std::vector tmp = qfn(sindex, p); - - std::sort(tmp.begin(), tmp.end(), cmp_ptidx_elements); - - Elems newpts; - std::set_difference(tmp.begin(), tmp.end(), - cluster.begin(), cluster.end(), - std::back_inserter(newpts), cmp_ptidx_elements); - - int c = max_points && newpts.size() + cluster.size() > max_points? - int(max_points - cluster.size()) : int(newpts.size()); - - cluster.insert(cluster.end(), newpts.begin(), newpts.begin() + c); - std::sort(cluster.begin(), cluster.end(), cmp_ptidx_elements); - - if(!newpts.empty() && (!max_points || cluster.size() < max_points)) - group(newpts, cluster); - } - }; - - std::vector clusters; - for(auto it = sindex.begin(); it != sindex.end();) { - Elems cluster = {}; - Elems pts = {*it}; - group(pts, cluster); - - for(auto& c : cluster) sindex.remove(c); - it = sindex.begin(); - - clusters.emplace_back(cluster); - } - - ClusteredPoints result; - for(auto& cluster : clusters) { - result.emplace_back(); - for(auto c : cluster) result.back().emplace_back(c.second); - } - - return result; -} - -std::vector distance_queryfn(const Index3D& sindex, - const PointIndexEl& p, - double dist, - unsigned max_points) -{ - std::vector tmp; tmp.reserve(max_points); - sindex.query( - bgi::nearest(p.first, max_points), - std::back_inserter(tmp) - ); - - for(auto it = tmp.begin(); it < tmp.end(); ++it) - if(distance(p.first, it->first) > dist) it = tmp.erase(it); - - return tmp; -} - -} // namespace - -// Clustering a set of points by the given criteria -ClusteredPoints cluster( - const std::vector& indices, - std::function pointfn, - double dist, - unsigned max_points) -{ - // A spatial index for querying the nearest points - Index3D sindex; - - // Build the index - for(auto idx : indices) sindex.insert( std::make_pair(pointfn(idx), idx)); - - return cluster(sindex, max_points, - [dist, max_points](const Index3D& sidx, const PointIndexEl& p) - { - return distance_queryfn(sidx, p, dist, max_points); - }); -} - -// Clustering a set of points by the given criteria -ClusteredPoints cluster( - const std::vector& indices, - std::function pointfn, - std::function predicate, - unsigned max_points) -{ - // A spatial index for querying the nearest points - Index3D sindex; - - // Build the index - for(auto idx : indices) sindex.insert( std::make_pair(pointfn(idx), idx)); - - return cluster(sindex, max_points, - [max_points, predicate](const Index3D& sidx, const PointIndexEl& p) - { - std::vector tmp; tmp.reserve(max_points); - sidx.query(bgi::satisfies([p, predicate](const PointIndexEl& e){ - return predicate(p, e); - }), std::back_inserter(tmp)); - return tmp; - }); -} - -ClusteredPoints cluster(const PointSet& pts, double dist, unsigned max_points) -{ - // A spatial index for querying the nearest points - Index3D sindex; - - // Build the index - for(Eigen::Index i = 0; i < pts.rows(); i++) - sindex.insert(std::make_pair(Vec3d(pts.row(i)), unsigned(i))); - - return cluster(sindex, max_points, - [dist, max_points](const Index3D& sidx, const PointIndexEl& p) - { - return distance_queryfn(sidx, p, dist, max_points); - }); -} - -} // namespace sla -} // namespace Slic3r +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/EigenMesh3D.hpp b/src/libslic3r/SLA/IndexedMesh.hpp similarity index 81% rename from src/libslic3r/SLA/EigenMesh3D.hpp rename to src/libslic3r/SLA/IndexedMesh.hpp index b932c0c18e..a72492b344 100644 --- a/src/libslic3r/SLA/EigenMesh3D.hpp +++ b/src/libslic3r/SLA/IndexedMesh.hpp @@ -1,8 +1,10 @@ -#ifndef SLA_EIGENMESH3D_H -#define SLA_EIGENMESH3D_H +#ifndef SLA_INDEXEDMESH_H +#define SLA_INDEXEDMESH_H -#include +#include +#include +#include // There is an implementation of a hole-aware raycaster that was eventually // not used in production version. It is now hidden under following define @@ -19,10 +21,12 @@ class TriangleMesh; namespace sla { +using PointSet = Eigen::MatrixXd; + /// An index-triangle structure for libIGL functions. Also serves as an /// alternative (raw) input format for the SLASupportTree. // Implemented in libslic3r/SLA/Common.cpp -class EigenMesh3D { +class IndexedMesh { class AABBImpl; const TriangleMesh* m_tm; @@ -38,15 +42,15 @@ class EigenMesh3D { public: - explicit EigenMesh3D(const TriangleMesh&); + explicit IndexedMesh(const TriangleMesh&); - EigenMesh3D(const EigenMesh3D& other); - EigenMesh3D& operator=(const EigenMesh3D&); + IndexedMesh(const IndexedMesh& other); + IndexedMesh& operator=(const IndexedMesh&); - EigenMesh3D(EigenMesh3D &&other); - EigenMesh3D& operator=(EigenMesh3D &&other); + IndexedMesh(IndexedMesh &&other); + IndexedMesh& operator=(IndexedMesh &&other); - ~EigenMesh3D(); + ~IndexedMesh(); inline double ground_level() const { return m_ground_level + m_gnd_offset; } inline void ground_level_offset(double o) { m_gnd_offset = o; } @@ -62,15 +66,15 @@ public: // m_t holds a distance from m_source to the intersection. double m_t = infty(); int m_face_id = -1; - const EigenMesh3D *m_mesh = nullptr; + const IndexedMesh *m_mesh = nullptr; Vec3d m_dir; Vec3d m_source; Vec3d m_normal; - friend class EigenMesh3D; + friend class IndexedMesh; // A valid object of this class can only be obtained from - // EigenMesh3D::query_ray_hit method. - explicit inline hit_result(const EigenMesh3D& em): m_mesh(&em) {} + // IndexedMesh::query_ray_hit method. + explicit inline hit_result(const IndexedMesh& em): m_mesh(&em) {} public: // This denotes no hit on the mesh. static inline constexpr double infty() { return std::numeric_limits::infinity(); } @@ -83,7 +87,7 @@ public: inline Vec3d position() const { return m_source + m_dir * m_t; } inline int face() const { return m_face_id; } inline bool is_valid() const { return m_mesh != nullptr; } - inline bool is_hit() const { return !std::isinf(m_t); } + inline bool is_hit() const { return m_face_id >= 0 && !std::isinf(m_t); } inline const Vec3d& normal() const { assert(is_valid()); @@ -107,7 +111,7 @@ public: // This function is currently not used anywhere, it was written when the // holes were subtracted on slices, that is, before we started using CGAL // to actually cut the holes into the mesh. - hit_result filter_hits(const std::vector& obj_hits) const; + hit_result filter_hits(const std::vector& obj_hits) const; #endif // Casting a ray on the mesh, returns the distance where the hit occures. @@ -125,16 +129,18 @@ public: } Vec3d normal_by_face_id(int face_id) const; + + const TriangleMesh * get_triangle_mesh() const { return m_tm; } }; // Calculate the normals for the selected points (from 'points' set) on the // mesh. This will call squared distance for each point. PointSet normals(const PointSet& points, - const EigenMesh3D& convert_mesh, + const IndexedMesh& convert_mesh, double eps = 0.05, // min distance from edges std::function throw_on_cancel = [](){}, const std::vector& selected_points = {}); }} // namespace Slic3r::sla -#endif // EIGENMESH3D_H +#endif // INDEXEDMESH_H diff --git a/src/libslic3r/SLA/JobController.hpp b/src/libslic3r/SLA/JobController.hpp index 3baa3d12d1..b815e4d6fc 100644 --- a/src/libslic3r/SLA/JobController.hpp +++ b/src/libslic3r/SLA/JobController.hpp @@ -2,6 +2,7 @@ #define SLA_JOBCONTROLLER_HPP #include +#include namespace Slic3r { namespace sla { diff --git a/src/libslic3r/SLA/Pad.cpp b/src/libslic3r/SLA/Pad.cpp index d933ef5ed7..f2b189cd11 100644 --- a/src/libslic3r/SLA/Pad.cpp +++ b/src/libslic3r/SLA/Pad.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include diff --git a/src/libslic3r/SLA/ReprojectPointsOnMesh.hpp b/src/libslic3r/SLA/ReprojectPointsOnMesh.hpp index 702d1bce18..20804193e2 100644 --- a/src/libslic3r/SLA/ReprojectPointsOnMesh.hpp +++ b/src/libslic3r/SLA/ReprojectPointsOnMesh.hpp @@ -4,7 +4,7 @@ #include "libslic3r/Point.hpp" #include "SupportPoint.hpp" #include "Hollowing.hpp" -#include "EigenMesh3D.hpp" +#include "IndexedMesh.hpp" #include "libslic3r/Model.hpp" #include @@ -15,7 +15,7 @@ template Vec3d pos(const Pt &p) { return p.pos.template cast() template void pos(Pt &p, const Vec3d &pp) { p.pos = pp.cast(); } template -void reproject_support_points(const EigenMesh3D &mesh, std::vector &pts) +void reproject_support_points(const IndexedMesh &mesh, std::vector &pts) { tbb::parallel_for(size_t(0), pts.size(), [&mesh, &pts](size_t idx) { int junk; @@ -28,25 +28,19 @@ void reproject_support_points(const EigenMesh3D &mesh, std::vector &p inline void reproject_points_and_holes(ModelObject *object) { bool has_sppoints = !object->sla_support_points.empty(); + bool has_holes = !object->sla_drain_holes.empty(); - // Disabling reprojection of holes as they have a significant offset away - // from the model body which tolerates minor geometrical changes. - // - // TODO: uncomment and ensure the right offset of the hole points if - // reprojection would still be necessary. - // bool has_holes = !object->sla_drain_holes.empty(); - - if (!object || (/*!has_holes &&*/ !has_sppoints)) return; + if (!object || (!has_holes && !has_sppoints)) return; TriangleMesh rmsh = object->raw_mesh(); rmsh.require_shared_vertices(); - EigenMesh3D emesh{rmsh}; + IndexedMesh emesh{rmsh}; if (has_sppoints) reproject_support_points(emesh, object->sla_support_points); -// if (has_holes) -// reproject_support_points(emesh, object->sla_drain_holes); + if (has_holes) + reproject_support_points(emesh, object->sla_drain_holes); } }} diff --git a/src/libslic3r/SLA/Rotfinder.cpp b/src/libslic3r/SLA/Rotfinder.cpp index fda8383b11..9378977663 100644 --- a/src/libslic3r/SLA/Rotfinder.cpp +++ b/src/libslic3r/SLA/Rotfinder.cpp @@ -1,36 +1,259 @@ #include -#include -#include -#include #include -#include +#include + +#include + +#include "libslic3r/SLAPrint.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include #include "Model.hpp" -namespace Slic3r { -namespace sla { +#include -std::array find_best_rotation(const ModelObject& modelobj, - float accuracy, - std::function statuscb, - std::function stopcond) +namespace Slic3r { namespace sla { + +inline bool is_on_floor(const SLAPrintObject &mo) { - using libnest2d::opt::Method; - using libnest2d::opt::bound; - using libnest2d::opt::Optimizer; - using libnest2d::opt::TOptimizer; - using libnest2d::opt::StopCriteria; + auto opt_elevation = mo.config().support_object_elevation.getFloat(); + auto opt_padaround = mo.config().pad_around_object.getBool(); - static const unsigned MAX_TRIES = 100000; + return opt_elevation < EPSILON || opt_padaround; +} + +// Find transformed mesh ground level without copy and with parallel reduce. +double find_ground_level(const TriangleMesh &mesh, + const Transform3d & tr, + size_t threads) +{ + size_t vsize = mesh.its.vertices.size(); + + auto minfn = [](double a, double b) { return std::min(a, b); }; + + auto accessfn = [&mesh, &tr] (size_t vi) { + return (tr * mesh.its.vertices[vi].template cast()).z(); + }; + + double zmin = std::numeric_limits::max(); + size_t granularity = vsize / threads; + return ccr_par::reduce(size_t(0), vsize, zmin, minfn, accessfn, granularity); +} + +// Get the vertices of a triangle directly in an array of 3 points +std::array get_triangle_vertices(const TriangleMesh &mesh, + size_t faceidx) +{ + const auto &face = mesh.its.indices[faceidx]; + return {Vec3d{mesh.its.vertices[face(0)].cast()}, + Vec3d{mesh.its.vertices[face(1)].cast()}, + Vec3d{mesh.its.vertices[face(2)].cast()}}; +} + +std::array get_transformed_triangle(const TriangleMesh &mesh, + const Transform3d & tr, + size_t faceidx) +{ + const auto &tri = get_triangle_vertices(mesh, faceidx); + return {tr * tri[0], tr * tri[1], tr * tri[2]}; +} + +// Get area and normal of a triangle +struct Facestats { + Vec3d normal; + double area; + + explicit Facestats(const std::array &triangle) + { + Vec3d U = triangle[1] - triangle[0]; + Vec3d V = triangle[2] - triangle[0]; + Vec3d C = U.cross(V); + normal = C.normalized(); + area = 0.5 * C.norm(); + } +}; + +inline const Vec3d DOWN = {0., 0., -1.}; +constexpr double POINTS_PER_UNIT_AREA = 1.; + +// The score function for a particular face +inline double get_score(const Facestats &fc) +{ + // Simply get the angle (acos of dot product) between the face normal and + // the DOWN vector. + double phi = 1. - std::acos(fc.normal.dot(DOWN)) / PI; + + // Only consider faces that have have slopes below 90 deg: + phi = phi * (phi > 0.5); + + // Make the huge slopes more significant than the smaller slopes + phi = phi * phi * phi; + + // Multiply with the area of the current face + return fc.area * POINTS_PER_UNIT_AREA * phi; +} + +template +double sum_score(AccessFn &&accessfn, size_t facecount, size_t Nthreads) +{ + double initv = 0.; + auto mergefn = std::plus{}; + size_t grainsize = facecount / Nthreads; + size_t from = 0, to = facecount; + + return ccr_par::reduce(from, to, initv, mergefn, accessfn, grainsize); +} + +// Try to guess the number of support points needed to support a mesh +double get_model_supportedness(const TriangleMesh &mesh, const Transform3d &tr) +{ + if (mesh.its.vertices.empty()) return std::nan(""); + + auto accessfn = [&mesh, &tr](size_t fi) { + Facestats fc{get_transformed_triangle(mesh, tr, fi)}; + return get_score(fc); + }; + + size_t facecount = mesh.its.indices.size(); + size_t Nthreads = std::thread::hardware_concurrency(); + return sum_score(accessfn, facecount, Nthreads) / facecount; +} + +double get_model_supportedness_onfloor(const TriangleMesh &mesh, + const Transform3d & tr) +{ + if (mesh.its.vertices.empty()) return std::nan(""); + + size_t Nthreads = std::thread::hardware_concurrency(); + + double zmin = find_ground_level(mesh, tr, Nthreads); + double zlvl = zmin + 0.1; // Set up a slight tolerance from z level + + auto accessfn = [&mesh, &tr, zlvl](size_t fi) { + std::array tri = get_transformed_triangle(mesh, tr, fi); + Facestats fc{tri}; + + if (tri[0].z() <= zlvl && tri[1].z() <= zlvl && tri[2].z() <= zlvl) + return -fc.area * POINTS_PER_UNIT_AREA; + + return get_score(fc); + }; + + size_t facecount = mesh.its.indices.size(); + return sum_score(accessfn, facecount, Nthreads) / facecount; +} + +using XYRotation = std::array; + +// prepare the rotation transformation +Transform3d to_transform3d(const XYRotation &rot) +{ + Transform3d rt = Transform3d::Identity(); + rt.rotate(Eigen::AngleAxisd(rot[1], Vec3d::UnitY())); + rt.rotate(Eigen::AngleAxisd(rot[0], Vec3d::UnitX())); + return rt; +} + +XYRotation from_transform3d(const Transform3d &tr) +{ + Vec3d rot3d = Geometry::Transformation {tr}.get_rotation(); + return {rot3d.x(), rot3d.y()}; +} + +// Find the best score from a set of function inputs. Evaluate for every point. +template +std::array find_min_score(Fn &&fn, It from, It to, StopCond &&stopfn) +{ + std::array ret; + + double score = std::numeric_limits::max(); + + size_t Nthreads = std::thread::hardware_concurrency(); + size_t dist = std::distance(from, to); + std::vector scores(dist, score); + + ccr_par::for_each(size_t(0), dist, [&stopfn, &scores, &fn, &from](size_t i) { + if (stopfn()) return; + + scores[i] = fn(*(from + i)); + }, dist / Nthreads); + + auto it = std::min_element(scores.begin(), scores.end()); + + if (it != scores.end()) ret = *(from + std::distance(scores.begin(), it)); + + return ret; +} + +// collect the rotations for each face of the convex hull +std::vector get_chull_rotations(const TriangleMesh &mesh, size_t max_count) +{ + TriangleMesh chull = mesh.convex_hull_3d(); + chull.require_shared_vertices(); + double chull2d_area = chull.convex_hull().area(); + double area_threshold = chull2d_area / (scaled(1e3) * scaled(1.)); + + size_t facecount = chull.its.indices.size(); + + struct RotArea { XYRotation rot; double area; }; + + auto inputs = reserve_vector(facecount); + + auto rotcmp = [](const RotArea &r1, const RotArea &r2) { + double xdiff = r1.rot[X] - r2.rot[X], ydiff = r1.rot[Y] - r2.rot[Y]; + return std::abs(xdiff) < EPSILON ? ydiff < 0. : xdiff < 0.; + }; + + auto eqcmp = [](const XYRotation &r1, const XYRotation &r2) { + double xdiff = r1[X] - r2[X], ydiff = r1[Y] - r2[Y]; + return std::abs(xdiff) < EPSILON && std::abs(ydiff) < EPSILON; + }; + + for (size_t fi = 0; fi < facecount; ++fi) { + Facestats fc{get_triangle_vertices(chull, fi)}; + + if (fc.area > area_threshold) { + auto q = Eigen::Quaterniond{}.FromTwoVectors(fc.normal, DOWN); + XYRotation rot = from_transform3d(Transform3d::Identity() * q); + RotArea ra = {rot, fc.area}; + + auto it = std::lower_bound(inputs.begin(), inputs.end(), ra, rotcmp); + + if (it == inputs.end() || !eqcmp(it->rot, rot)) + inputs.insert(it, ra); + } + } + + inputs.shrink_to_fit(); + if (!max_count) max_count = inputs.size(); + std::sort(inputs.begin(), inputs.end(), + [](const RotArea &ra, const RotArea &rb) { + return ra.area > rb.area; + }); + + auto ret = reserve_vector(std::min(max_count, inputs.size())); + for (const RotArea &ra : inputs) ret.emplace_back(ra.rot); + + return ret; +} + +Vec2d find_best_rotation(const SLAPrintObject & po, + float accuracy, + std::function statuscb, + std::function stopcond) +{ + static const unsigned MAX_TRIES = 1000; // return value - std::array rot; + XYRotation rot; // We will use only one instance of this converted mesh to examine different // rotations - const TriangleMesh& mesh = modelobj.raw_mesh(); + TriangleMesh mesh = po.model_object()->raw_mesh(); + mesh.require_shared_vertices(); - // For current iteration number + // To keep track of the number of iterations unsigned status = 0; // The maximum number of iterations @@ -39,77 +262,61 @@ std::array find_best_rotation(const ModelObject& modelobj, // call status callback with zero, because we are at the start statuscb(status); - // So this is the object function which is called by the solver many times - // It has to yield a single value representing the current score. We will - // call the status callback in each iteration but the actual value may be - // the same for subsequent iterations (status goes from 0 to 100 but - // iterations can be many more) - auto objfunc = [&mesh, &status, &statuscb, &stopcond, max_tries] - (double rx, double ry, double rz) - { - const TriangleMesh& m = mesh; - - // prepare the rotation transformation - Transform3d rt = Transform3d::Identity(); - - rt.rotate(Eigen::AngleAxisd(rz, Vec3d::UnitZ())); - rt.rotate(Eigen::AngleAxisd(ry, Vec3d::UnitY())); - rt.rotate(Eigen::AngleAxisd(rx, Vec3d::UnitX())); - - double score = 0; - - // For all triangles we calculate the normal and sum up the dot product - // (a scalar indicating how much are two vectors aligned) with each axis - // this will result in a value that is greater if a normal is aligned - // with all axes. If the normal is aligned than the triangle itself is - // orthogonal to the axes and that is good for print quality. - - // TODO: some applications optimize for minimum z-axis cross section - // area. The current function is only an example of how to optimize. - - // Later we can add more criteria like the number of overhangs, etc... - for(size_t i = 0; i < m.stl.facet_start.size(); i++) { - Vec3d n = m.stl.facet_start[i].normal.cast(); - - // rotate the normal with the current rotation given by the solver - n = rt * n; - - // We should score against the alignment with the reference planes - score += std::abs(n.dot(Vec3d::UnitX())); - score += std::abs(n.dot(Vec3d::UnitY())); - score += std::abs(n.dot(Vec3d::UnitZ())); - } - + auto statusfn = [&statuscb, &status, &max_tries] { // report status - if(!stopcond()) statuscb( unsigned(++status * 100.0/max_tries) ); - - return score; + statuscb(unsigned(++status * 100.0/max_tries) ); }; - // Firing up the genetic optimizer. For now it uses the nlopt library. - StopCriteria stc; - stc.max_iterations = max_tries; - stc.relative_score_difference = 1e-3; - stc.stop_condition = stopcond; // stop when stopcond returns true - TOptimizer solver(stc); + // Different search methods have to be used depending on the model elevation + if (is_on_floor(po)) { - // We are searching rotations around the three axes x, y, z. Thus the - // problem becomes a 3 dimensional optimization task. - // We can specify the bounds for a dimension in the following way: - auto b = bound(-PI/2, PI/2); + std::vector inputs = get_chull_rotations(mesh, max_tries); + max_tries = inputs.size(); - // Now we start the optimization process with initial angles (0, 0, 0) - auto result = solver.optimize_max(objfunc, - libnest2d::opt::initvals(0.0, 0.0, 0.0), - b, b, b); + // If the model can be placed on the bed directly, we only need to + // check the 3D convex hull face rotations. - // Save the result and fck off - rot[0] = std::get<0>(result.optimum); - rot[1] = std::get<1>(result.optimum); - rot[2] = std::get<2>(result.optimum); + auto objfn = [&mesh, &statusfn](const XYRotation &rot) { + statusfn(); + Transform3d tr = to_transform3d(rot); + return get_model_supportedness_onfloor(mesh, tr); + }; - return rot; + rot = find_min_score<2>(objfn, inputs.begin(), inputs.end(), stopcond); + } else { + // Preparing the optimizer. + size_t gridsize = std::sqrt(max_tries); // 2D grid has gridsize^2 calls + opt::Optimizer solver(opt::StopCriteria{} + .max_iterations(max_tries) + .stop_condition(stopcond), + gridsize); + + // We are searching rotations around only two axes x, y. Thus the + // problem becomes a 2 dimensional optimization task. + // We can specify the bounds for a dimension in the following way: + auto bounds = opt::bounds({ {-PI, PI}, {-PI, PI} }); + + auto result = solver.to_min().optimize( + [&mesh, &statusfn] (const XYRotation &rot) + { + statusfn(); + return get_model_supportedness(mesh, to_transform3d(rot)); + }, opt::initvals({0., 0.}), bounds); + + // Save the result and fck off + rot = result.optimum; + } + + return {rot[0], rot[1]}; } +double get_model_supportedness(const SLAPrintObject &po, const Transform3d &tr) +{ + TriangleMesh mesh = po.model_object()->raw_mesh(); + mesh.require_shared_vertices(); + + return is_on_floor(po) ? get_model_supportedness_onfloor(mesh, tr) : + get_model_supportedness(mesh, tr); } -} + +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/Rotfinder.hpp b/src/libslic3r/SLA/Rotfinder.hpp index 4469f9731d..96561a890f 100644 --- a/src/libslic3r/SLA/Rotfinder.hpp +++ b/src/libslic3r/SLA/Rotfinder.hpp @@ -4,9 +4,11 @@ #include #include +#include + namespace Slic3r { -class ModelObject; +class SLAPrintObject; namespace sla { @@ -25,14 +27,17 @@ namespace sla { * * @return Returns the rotations around each axis (x, y, z) */ -std::array find_best_rotation( - const ModelObject& modelobj, +Vec2d find_best_rotation( + const SLAPrintObject& modelobj, float accuracy = 1.0f, std::function statuscb = [] (unsigned) {}, std::function stopcond = [] () { return false; } ); -} -} +double get_model_supportedness(const SLAPrintObject &mesh, + const Transform3d & tr); + +} // namespace sla +} // namespace Slic3r #endif // SLAROTFINDER_HPP diff --git a/src/libslic3r/SLA/SpatIndex.cpp b/src/libslic3r/SLA/SpatIndex.cpp new file mode 100644 index 0000000000..d95ba55bee --- /dev/null +++ b/src/libslic3r/SLA/SpatIndex.cpp @@ -0,0 +1,161 @@ +#include "SpatIndex.hpp" + +// for concave hull merging decisions +#include + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4244) +#pragma warning(disable: 4267) +#endif + +#include "boost/geometry/index/rtree.hpp" + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +namespace Slic3r { namespace sla { + +/* ************************************************************************** + * PointIndex implementation + * ************************************************************************** */ + +class PointIndex::Impl { +public: + using BoostIndex = boost::geometry::index::rtree< PointIndexEl, + boost::geometry::index::rstar<16, 4> /* ? */ >; + + BoostIndex m_store; +}; + +PointIndex::PointIndex(): m_impl(new Impl()) {} +PointIndex::~PointIndex() {} + +PointIndex::PointIndex(const PointIndex &cpy): m_impl(new Impl(*cpy.m_impl)) {} +PointIndex::PointIndex(PointIndex&& cpy): m_impl(std::move(cpy.m_impl)) {} + +PointIndex& PointIndex::operator=(const PointIndex &cpy) +{ + m_impl.reset(new Impl(*cpy.m_impl)); + return *this; +} + +PointIndex& PointIndex::operator=(PointIndex &&cpy) +{ + m_impl.swap(cpy.m_impl); + return *this; +} + +void PointIndex::insert(const PointIndexEl &el) +{ + m_impl->m_store.insert(el); +} + +bool PointIndex::remove(const PointIndexEl& el) +{ + return m_impl->m_store.remove(el) == 1; +} + +std::vector +PointIndex::query(std::function fn) const +{ + namespace bgi = boost::geometry::index; + + std::vector ret; + m_impl->m_store.query(bgi::satisfies(fn), std::back_inserter(ret)); + return ret; +} + +std::vector PointIndex::nearest(const Vec3d &el, unsigned k = 1) const +{ + namespace bgi = boost::geometry::index; + std::vector ret; ret.reserve(k); + m_impl->m_store.query(bgi::nearest(el, k), std::back_inserter(ret)); + return ret; +} + +size_t PointIndex::size() const +{ + return m_impl->m_store.size(); +} + +void PointIndex::foreach(std::function fn) +{ + for(auto& el : m_impl->m_store) fn(el); +} + +void PointIndex::foreach(std::function fn) const +{ + for(const auto &el : m_impl->m_store) fn(el); +} + +/* ************************************************************************** + * BoxIndex implementation + * ************************************************************************** */ + +class BoxIndex::Impl { +public: + using BoostIndex = boost::geometry::index:: + rtree /* ? */>; + + BoostIndex m_store; +}; + +BoxIndex::BoxIndex(): m_impl(new Impl()) {} +BoxIndex::~BoxIndex() {} + +BoxIndex::BoxIndex(const BoxIndex &cpy): m_impl(new Impl(*cpy.m_impl)) {} +BoxIndex::BoxIndex(BoxIndex&& cpy): m_impl(std::move(cpy.m_impl)) {} + +BoxIndex& BoxIndex::operator=(const BoxIndex &cpy) +{ + m_impl.reset(new Impl(*cpy.m_impl)); + return *this; +} + +BoxIndex& BoxIndex::operator=(BoxIndex &&cpy) +{ + m_impl.swap(cpy.m_impl); + return *this; +} + +void BoxIndex::insert(const BoxIndexEl &el) +{ + m_impl->m_store.insert(el); +} + +bool BoxIndex::remove(const BoxIndexEl& el) +{ + return m_impl->m_store.remove(el) == 1; +} + +std::vector BoxIndex::query(const BoundingBox &qrbb, + BoxIndex::QueryType qt) +{ + namespace bgi = boost::geometry::index; + + std::vector ret; ret.reserve(m_impl->m_store.size()); + + switch (qt) { + case qtIntersects: + m_impl->m_store.query(bgi::intersects(qrbb), std::back_inserter(ret)); + break; + case qtWithin: + m_impl->m_store.query(bgi::within(qrbb), std::back_inserter(ret)); + } + + return ret; +} + +size_t BoxIndex::size() const +{ + return m_impl->m_store.size(); +} + +void BoxIndex::foreach(std::function fn) +{ + for(auto& el : m_impl->m_store) fn(el); +} + +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SpatIndex.hpp b/src/libslic3r/SLA/SpatIndex.hpp index 2955cdcdf6..ef059d3ae6 100644 --- a/src/libslic3r/SLA/SpatIndex.hpp +++ b/src/libslic3r/SLA/SpatIndex.hpp @@ -73,7 +73,7 @@ public: BoxIndex& operator=(BoxIndex&&); void insert(const BoxIndexEl&); - inline void insert(const BoundingBox& bb, unsigned idx) + void insert(const BoundingBox& bb, unsigned idx) { insert(std::make_pair(bb, unsigned(idx))); } diff --git a/src/libslic3r/SLA/SupportPoint.hpp b/src/libslic3r/SLA/SupportPoint.hpp index 202a614c32..71849a3643 100644 --- a/src/libslic3r/SLA/SupportPoint.hpp +++ b/src/libslic3r/SLA/SupportPoint.hpp @@ -1,9 +1,7 @@ #ifndef SLA_SUPPORTPOINT_HPP #define SLA_SUPPORTPOINT_HPP -#include -#include -#include +#include namespace Slic3r { namespace sla { @@ -29,13 +27,13 @@ struct SupportPoint float pos_y, float pos_z, float head_radius, - bool new_island) + bool new_island = false) : pos(pos_x, pos_y, pos_z) , head_front_radius(head_radius) , is_new_island(new_island) {} - SupportPoint(Vec3f position, float head_radius, bool new_island) + SupportPoint(Vec3f position, float head_radius, bool new_island = false) : pos(position) , head_front_radius(head_radius) , is_new_island(new_island) diff --git a/src/libslic3r/SLA/SupportPointGenerator.cpp b/src/libslic3r/SLA/SupportPointGenerator.cpp index 78c2ced356..8f720339ab 100644 --- a/src/libslic3r/SLA/SupportPointGenerator.cpp +++ b/src/libslic3r/SLA/SupportPointGenerator.cpp @@ -4,14 +4,19 @@ #include #include "SupportPointGenerator.hpp" +#include "Concurrency.hpp" #include "Model.hpp" #include "ExPolygon.hpp" #include "SVG.hpp" #include "Point.hpp" #include "ClipperUtils.hpp" #include "Tesselate.hpp" +#include "ExPolygonCollection.hpp" #include "libslic3r.h" +#include "libnest2d/backends/clipper/geometries.hpp" +#include "libnest2d/utils/rotcalipers.hpp" + #include #include @@ -50,7 +55,7 @@ float SupportPointGenerator::distance_limit(float angle) const }*/ SupportPointGenerator::SupportPointGenerator( - const sla::EigenMesh3D &emesh, + const sla::IndexedMesh &emesh, const std::vector &slices, const std::vector & heights, const Config & config, @@ -64,7 +69,7 @@ SupportPointGenerator::SupportPointGenerator( } SupportPointGenerator::SupportPointGenerator( - const EigenMesh3D &emesh, + const IndexedMesh &emesh, const SupportPointGenerator::Config &config, std::function throw_on_cancel, std::function statusfn) @@ -87,27 +92,28 @@ void SupportPointGenerator::project_onto_mesh(std::vector& po // The function makes sure that all the points are really exactly placed on the mesh. // Use a reasonable granularity to account for the worker thread synchronization cost. - tbb::parallel_for(tbb::blocked_range(0, points.size(), 64), - [this, &points](const tbb::blocked_range& range) { - for (size_t point_id = range.begin(); point_id < range.end(); ++ point_id) { - if ((point_id % 16) == 0) - // Don't call the following function too often as it flushes CPU write caches due to synchronization primitves. - m_throw_on_cancel(); - Vec3f& p = points[point_id].pos; - // Project the point upward and downward and choose the closer intersection with the mesh. - sla::EigenMesh3D::hit_result hit_up = m_emesh.query_ray_hit(p.cast(), Vec3d(0., 0., 1.)); - sla::EigenMesh3D::hit_result hit_down = m_emesh.query_ray_hit(p.cast(), Vec3d(0., 0., -1.)); + static constexpr size_t gransize = 64; - bool up = hit_up.is_hit(); - bool down = hit_down.is_hit(); + ccr_par::for_each(size_t(0), points.size(), [this, &points](size_t idx) + { + if ((idx % 16) == 0) + // Don't call the following function too often as it flushes CPU write caches due to synchronization primitves. + m_throw_on_cancel(); - if (!up && !down) - continue; + Vec3f& p = points[idx].pos; + // Project the point upward and downward and choose the closer intersection with the mesh. + sla::IndexedMesh::hit_result hit_up = m_emesh.query_ray_hit(p.cast(), Vec3d(0., 0., 1.)); + sla::IndexedMesh::hit_result hit_down = m_emesh.query_ray_hit(p.cast(), Vec3d(0., 0., -1.)); - sla::EigenMesh3D::hit_result& hit = (!down || (hit_up.distance() < hit_down.distance())) ? hit_up : hit_down; - p = p + (hit.distance() * hit.direction()).cast(); - } - }); + bool up = hit_up.is_hit(); + bool down = hit_down.is_hit(); + + if (!up && !down) + return; + + sla::IndexedMesh::hit_result& hit = (!down || (hit_up.distance() < hit_down.distance())) ? hit_up : hit_down; + p = p + (hit.distance() * hit.direction()).cast(); + }, gransize); } static std::vector make_layers( @@ -126,78 +132,97 @@ static std::vector make_layers( //const float pixel_area = pow(wxGetApp().preset_bundle->project_config.option("display_width") / wxGetApp().preset_bundle->project_config.option("display_pixels_x"), 2.f); // const float pixel_area = pow(0.047f, 2.f); - // Use a reasonable granularity to account for the worker thread synchronization cost. - tbb::parallel_for(tbb::blocked_range(0, layers.size(), 32), - [&layers, &slices, &heights, pixel_area, throw_on_cancel](const tbb::blocked_range& range) { - for (size_t layer_id = range.begin(); layer_id < range.end(); ++ layer_id) { - if ((layer_id % 8) == 0) - // Don't call the following function too often as it flushes CPU write caches due to synchronization primitves. - throw_on_cancel(); - SupportPointGenerator::MyLayer &layer = layers[layer_id]; - const ExPolygons &islands = slices[layer_id]; - //FIXME WTF? - const float height = (layer_id>2 ? heights[layer_id-3] : heights[0]-(heights[1]-heights[0])); - layer.islands.reserve(islands.size()); - for (const ExPolygon &island : islands) { - float area = float(island.area() * SCALING_FACTOR * SCALING_FACTOR); - if (area >= pixel_area) - //FIXME this is not a correct centroid of a polygon with holes. - layer.islands.emplace_back(layer, island, get_extents(island.contour), Slic3r::unscale(island.contour.centroid()).cast(), area, height); - } - } - }); + ccr_par::for_each(size_t(0), layers.size(), + [&layers, &slices, &heights, pixel_area, throw_on_cancel](size_t layer_id) + { + if ((layer_id % 8) == 0) + // Don't call the following function too often as it flushes + // CPU write caches due to synchronization primitves. + throw_on_cancel(); + + SupportPointGenerator::MyLayer &layer = layers[layer_id]; + const ExPolygons & islands = slices[layer_id]; + // FIXME WTF? + const float height = (layer_id > 2 ? + heights[layer_id - 3] : + heights[0] - (heights[1] - heights[0])); + layer.islands.reserve(islands.size()); + for (const ExPolygon &island : islands) { + float area = float(island.area() * SCALING_FACTOR * SCALING_FACTOR); + if (area >= pixel_area) + // FIXME this is not a correct centroid of a polygon with holes. + layer.islands.emplace_back(layer, island, get_extents(island.contour), + unscaled(island.contour.centroid()), area, height); + } + }, 32 /*gransize*/); // Calculate overlap of successive layers. Link overlapping islands. - tbb::parallel_for(tbb::blocked_range(1, layers.size(), 8), - [&layers, &heights, throw_on_cancel](const tbb::blocked_range& range) { - for (size_t layer_id = range.begin(); layer_id < range.end(); ++layer_id) { - if ((layer_id % 2) == 0) - // Don't call the following function too often as it flushes CPU write caches due to synchronization primitves. - throw_on_cancel(); - SupportPointGenerator::MyLayer &layer_above = layers[layer_id]; - SupportPointGenerator::MyLayer &layer_below = layers[layer_id - 1]; - //FIXME WTF? - const float layer_height = (layer_id!=0 ? heights[layer_id]-heights[layer_id-1] : heights[0]); - const float safe_angle = 5.f * (float(M_PI)/180.f); // smaller number - less supports - const float between_layers_offset = float(scale_(layer_height / std::tan(safe_angle))); - const float slope_angle = 75.f * (float(M_PI)/180.f); // smaller number - less supports - const float slope_offset = float(scale_(layer_height / std::tan(slope_angle))); - //FIXME This has a quadratic time complexity, it will be excessively slow for many tiny islands. - for (SupportPointGenerator::Structure &top : layer_above.islands) { - for (SupportPointGenerator::Structure &bottom : layer_below.islands) { - float overlap_area = top.overlap_area(bottom); - if (overlap_area > 0) { - top.islands_below.emplace_back(&bottom, overlap_area); - bottom.islands_above.emplace_back(&top, overlap_area); - } - } - if (! top.islands_below.empty()) { - Polygons top_polygons = to_polygons(*top.polygon); - Polygons bottom_polygons = top.polygons_below(); - top.overhangs = diff_ex(top_polygons, bottom_polygons); - if (! top.overhangs.empty()) { - top.overhangs_area = 0.f; - std::vector> expolys_with_areas; - for (ExPolygon &ex : top.overhangs) { - float area = float(ex.area()); - expolys_with_areas.emplace_back(&ex, area); - top.overhangs_area += area; - } - std::sort(expolys_with_areas.begin(), expolys_with_areas.end(), + ccr_par::for_each(size_t(1), layers.size(), + [&layers, &heights, throw_on_cancel] (size_t layer_id) + { + if ((layer_id % 2) == 0) + // Don't call the following function too often as it flushes CPU write caches due to synchronization primitves. + throw_on_cancel(); + SupportPointGenerator::MyLayer &layer_above = layers[layer_id]; + SupportPointGenerator::MyLayer &layer_below = layers[layer_id - 1]; + //FIXME WTF? + const float layer_height = (layer_id!=0 ? heights[layer_id]-heights[layer_id-1] : heights[0]); + const float safe_angle = 35.f * (float(M_PI)/180.f); // smaller number - less supports + const float between_layers_offset = scaled(layer_height * std::tan(safe_angle)); + const float slope_angle = 75.f * (float(M_PI)/180.f); // smaller number - less supports + const float slope_offset = scaled(layer_height * std::tan(slope_angle)); + //FIXME This has a quadratic time complexity, it will be excessively slow for many tiny islands. + for (SupportPointGenerator::Structure &top : layer_above.islands) { + for (SupportPointGenerator::Structure &bottom : layer_below.islands) { + float overlap_area = top.overlap_area(bottom); + if (overlap_area > 0) { + top.islands_below.emplace_back(&bottom, overlap_area); + bottom.islands_above.emplace_back(&top, overlap_area); + } + } + if (! top.islands_below.empty()) { + Polygons top_polygons = to_polygons(*top.polygon); + Polygons bottom_polygons = top.polygons_below(); + top.overhangs = diff_ex(top_polygons, bottom_polygons); + if (! top.overhangs.empty()) { + + // Produce 2 bands around the island, a safe band for dangling overhangs + // and an unsafe band for sloped overhangs. + // These masks include the original island + auto dangl_mask = offset(bottom_polygons, between_layers_offset, ClipperLib::jtSquare); + auto overh_mask = offset(bottom_polygons, slope_offset, ClipperLib::jtSquare); + + // Absolutely hopeless overhangs are those outside the unsafe band + top.overhangs = diff_ex(top_polygons, overh_mask); + + // Now cut out the supported core from the safe band + // and cut the safe band from the unsafe band to get distinct + // zones. + overh_mask = diff(overh_mask, dangl_mask); + dangl_mask = diff(dangl_mask, bottom_polygons); + + top.dangling_areas = intersection_ex(top_polygons, dangl_mask); + top.overhangs_slopes = intersection_ex(top_polygons, overh_mask); + + top.overhangs_area = 0.f; + std::vector> expolys_with_areas; + for (ExPolygon &ex : top.overhangs) { + float area = float(ex.area()); + expolys_with_areas.emplace_back(&ex, area); + top.overhangs_area += area; + } + std::sort(expolys_with_areas.begin(), expolys_with_areas.end(), [](const std::pair &p1, const std::pair &p2) - { return p1.second > p2.second; }); - ExPolygons overhangs_sorted; - for (auto &p : expolys_with_areas) - overhangs_sorted.emplace_back(std::move(*p.first)); - top.overhangs = std::move(overhangs_sorted); - top.overhangs_area *= float(SCALING_FACTOR * SCALING_FACTOR); - top.overhangs_slopes = diff_ex(top_polygons, offset(bottom_polygons, slope_offset)); - top.dangling_areas = diff_ex(top_polygons, offset(bottom_polygons, between_layers_offset)); - } - } - } - } - }); + { return p1.second > p2.second; }); + ExPolygons overhangs_sorted; + for (auto &p : expolys_with_areas) + overhangs_sorted.emplace_back(std::move(*p.first)); + top.overhangs = std::move(overhangs_sorted); + top.overhangs_area *= float(SCALING_FACTOR * SCALING_FACTOR); + } + } + } + }, 8 /* gransize */); return layers; } @@ -252,21 +277,9 @@ void SupportPointGenerator::process(const std::vector& slices, const // Now iterate over all polygons and append new points if needed. for (Structure &s : layer_top->islands) { // Penalization resulting from large diff from the last layer: -// s.supports_force_inherited /= std::max(1.f, (layer_height / 0.3f) * e_area / s.area); s.supports_force_inherited /= std::max(1.f, 0.17f * (s.overhangs_area) / s.area); - //float force_deficit = s.support_force_deficit(m_config.tear_pressure()); - if (s.islands_below.empty()) { // completely new island - needs support no doubt - uniformly_cover({ *s.polygon }, s, point_grid, true); - } else if (! s.dangling_areas.empty()) { - // Let's see if there's anything that overlaps enough to need supports: - // What we now have in polygons needs support, regardless of what the forces are, so we can add them. - //FIXME is it an island point or not? Vojtech thinks it is. - uniformly_cover(s.dangling_areas, s, point_grid); - } else if (! s.overhangs_slopes.empty()) { - //FIXME add the support force deficit as a parameter, only cover until the defficiency is covered. - uniformly_cover(s.overhangs_slopes, s, point_grid); - } + add_support_points(s, point_grid); } m_throw_on_cancel(); @@ -284,6 +297,45 @@ void SupportPointGenerator::process(const std::vector& slices, const } } +void SupportPointGenerator::add_support_points(SupportPointGenerator::Structure &s, SupportPointGenerator::PointGrid3D &grid3d) +{ + // Select each type of surface (overrhang, dangling, slope), derive the support + // force deficit for it and call uniformly conver with the right params + + float tp = m_config.tear_pressure(); + float current = s.supports_force_total(); + static constexpr float DANGL_DAMPING = .5f; + static constexpr float SLOPE_DAMPING = .1f; + + if (s.islands_below.empty()) { + // completely new island - needs support no doubt + // deficit is full, there is nothing below that would hold this island + uniformly_cover({ *s.polygon }, s, s.area * tp, grid3d, IslandCoverageFlags(icfIsNew | icfWithBoundary) ); + return; + } + + if (! s.overhangs.empty()) { + uniformly_cover(s.overhangs, s, s.overhangs_area * tp, grid3d); + } + + auto areafn = [](double sum, auto &p) { return sum + p.area() * SCALING_FACTOR * SCALING_FACTOR; }; + + current = s.supports_force_total(); + if (! s.dangling_areas.empty()) { + // Let's see if there's anything that overlaps enough to need supports: + // What we now have in polygons needs support, regardless of what the forces are, so we can add them. + + double a = std::accumulate(s.dangling_areas.begin(), s.dangling_areas.end(), 0., areafn); + uniformly_cover(s.dangling_areas, s, a * tp - a * current * s.area, grid3d, icfWithBoundary); + } + + current = s.supports_force_total(); + if (! s.overhangs_slopes.empty()) { + double a = std::accumulate(s.overhangs_slopes.begin(), s.overhangs_slopes.end(), 0., areafn); + uniformly_cover(s.overhangs_slopes, s, a * tp - a * current / s.area, grid3d, icfWithBoundary); + } +} + std::vector sample_expolygon(const ExPolygon &expoly, float samples_per_mm2, std::mt19937 &rng) { // Triangulate the polygon with holes into triplets of 3D points. @@ -293,16 +345,16 @@ std::vector sample_expolygon(const ExPolygon &expoly, float samples_per_m if (! triangles.empty()) { // Calculate area of each triangle. - std::vector areas; - areas.reserve(triangles.size() / 3); + auto areas = reserve_vector(triangles.size() / 3); + double aback = 0.; for (size_t i = 0; i < triangles.size(); ) { const Vec2f &a = triangles[i ++]; const Vec2f v1 = triangles[i ++] - a; const Vec2f v2 = triangles[i ++] - a; - areas.emplace_back(0.5f * std::abs(cross2(v1, v2))); - if (i != 3) - // Prefix sum of the areas. - areas.back() += areas[areas.size() - 2]; + + // Prefix sum of the areas. + areas.emplace_back(aback + 0.5f * std::abs(cross2(v1, v2))); + aback = areas.back(); } size_t num_samples = size_t(ceil(areas.back() * samples_per_mm2)); @@ -312,28 +364,62 @@ std::vector sample_expolygon(const ExPolygon &expoly, float samples_per_m double r = random_triangle(rng); size_t idx_triangle = std::min(std::upper_bound(areas.begin(), areas.end(), (float)r) - areas.begin(), areas.size() - 1) * 3; // Select a random point on the triangle. - double u = float(sqrt(random_float(rng))); - double v = float(random_float(rng)); const Vec2f &a = triangles[idx_triangle ++]; const Vec2f &b = triangles[idx_triangle++]; const Vec2f &c = triangles[idx_triangle]; - const Vec2f x = a * (1.f - u) + b * (u * (1.f - v)) + c * (v * u); - out.emplace_back(x); +#if 1 + // https://www.cs.princeton.edu/~funk/tog02.pdf + // page 814, formula 1. + double u = float(std::sqrt(random_float(rng))); + double v = float(random_float(rng)); + out.emplace_back(a * (1.f - u) + b * (u * (1.f - v)) + c * (v * u)); +#else + // Greg Turk, Graphics Gems + // https://devsplorer.wordpress.com/2019/08/07/find-a-random-point-on-a-plane-using-barycentric-coordinates-in-unity/ + double u = float(random_float(rng)); + double v = float(random_float(rng)); + if (u + v >= 1.f) { + u = 1.f - u; + v = 1.f - v; + } + out.emplace_back(a + u * (b - a) + v * (c - a)); +#endif } } return out; } + +std::vector sample_expolygon(const ExPolygons &expolys, float samples_per_mm2, std::mt19937 &rng) +{ + std::vector out; + for (const ExPolygon &expoly : expolys) + append(out, sample_expolygon(expoly, samples_per_mm2, rng)); + + return out; +} + +void sample_expolygon_boundary(const ExPolygon & expoly, + float samples_per_mm, + std::vector &out, + std::mt19937 & rng) +{ + double point_stepping_scaled = scale_(1.f) / samples_per_mm; + for (size_t i_contour = 0; i_contour <= expoly.holes.size(); ++ i_contour) { + const Polygon &contour = (i_contour == 0) ? expoly.contour : + expoly.holes[i_contour - 1]; + + const Points pts = contour.equally_spaced_points(point_stepping_scaled); + for (size_t i = 0; i < pts.size(); ++ i) + out.emplace_back(unscale(pts[i].x()), + unscale(pts[i].y())); + } +} + std::vector sample_expolygon_with_boundary(const ExPolygon &expoly, float samples_per_mm2, float samples_per_mm_boundary, std::mt19937 &rng) { std::vector out = sample_expolygon(expoly, samples_per_mm2, rng); - double point_stepping_scaled = scale_(1.f) / samples_per_mm_boundary; - for (size_t i_contour = 0; i_contour <= expoly.holes.size(); ++ i_contour) { - const Polygon &contour = (i_contour == 0) ? expoly.contour : expoly.holes[i_contour - 1]; - const Points pts = contour.equally_spaced_points(point_stepping_scaled); - for (size_t i = 0; i < pts.size(); ++ i) - out.emplace_back(unscale(pts[i].x()), unscale(pts[i].y())); - } + sample_expolygon_boundary(expoly, samples_per_mm_boundary, out, rng); return out; } @@ -355,17 +441,17 @@ static inline std::vector poisson_disk_from_samples(const std::vector raw_samples_sorted; - RawSample sample; - for (const Vec2f &pt : raw_samples) { - sample.coord = pt; - sample.cell_id = ((pt - corner_min) / radius).cast(); - raw_samples_sorted.emplace_back(sample); - } + + auto raw_samples_sorted = reserve_vector(raw_samples.size()); + for (const Vec2f &pt : raw_samples) + raw_samples_sorted.emplace_back(pt, ((pt - corner_min) / radius).cast()); + std::sort(raw_samples_sorted.begin(), raw_samples_sorted.end(), [](const RawSample &lhs, const RawSample &rhs) { return lhs.cell_id.x() < rhs.cell_id.x() || (lhs.cell_id.x() == rhs.cell_id.x() && lhs.cell_id.y() < rhs.cell_id.y()); }); @@ -460,11 +546,26 @@ static inline std::vector poisson_disk_from_samples(const std::vector bbdim.y()) std::swap(bbdim.x(), bbdim.y()); + double aspectr = bbdim.y() / bbdim.x(); + + support_force_deficit *= (1 + aspectr / 2.); + } + if (support_force_deficit < 0) return; @@ -481,13 +582,18 @@ void SupportPointGenerator::uniformly_cover(const ExPolygons& islands, Structure float min_spacing = poisson_radius; //FIXME share the random generator. The random generator may be not so cheap to initialize, also we don't want the random generator to be restarted for each polygon. - - std::vector raw_samples = sample_expolygon_with_boundary(islands, samples_per_mm2, 5.f / poisson_radius, m_rng); + + std::vector raw_samples = + flags & icfWithBoundary ? + sample_expolygon_with_boundary(islands, samples_per_mm2, + 5.f / poisson_radius, m_rng) : + sample_expolygon(islands, samples_per_mm2, m_rng); + std::vector poisson_samples; for (size_t iter = 0; iter < 4; ++ iter) { poisson_samples = poisson_disk_from_samples(raw_samples, poisson_radius, [&structure, &grid3d, min_spacing](const Vec2f &pos) { - return grid3d.collides_with(pos, &structure, min_spacing); + return grid3d.collides_with(pos, structure.layer->print_z, min_spacing); }); if (poisson_samples.size() >= poisson_samples_target || m_config.minimal_distance > poisson_radius-EPSILON) break; @@ -517,21 +623,19 @@ void SupportPointGenerator::uniformly_cover(const ExPolygons& islands, Structure poisson_samples.erase(poisson_samples.begin() + poisson_samples_target, poisson_samples.end()); } for (const Vec2f &pt : poisson_samples) { - m_output.emplace_back(float(pt(0)), float(pt(1)), structure.height, m_config.head_diameter/2.f, is_new_island); + m_output.emplace_back(float(pt(0)), float(pt(1)), structure.zlevel, m_config.head_diameter/2.f, flags & icfIsNew); structure.supports_force_this_layer += m_config.support_force(); grid3d.insert(pt, &structure); } } -void remove_bottom_points(std::vector &pts, double gnd_lvl, double tolerance) + +void remove_bottom_points(std::vector &pts, float lvl) { // get iterator to the reorganized vector end - auto endit = - std::remove_if(pts.begin(), pts.end(), - [tolerance, gnd_lvl](const sla::SupportPoint &sp) { - double diff = std::abs(gnd_lvl - - double(sp.pos(Z))); - return diff <= tolerance; + auto endit = std::remove_if(pts.begin(), pts.end(), [lvl] + (const sla::SupportPoint &sp) { + return sp.pos.z() <= lvl; }); // erase all elements after the new end diff --git a/src/libslic3r/SLA/SupportPointGenerator.hpp b/src/libslic3r/SLA/SupportPointGenerator.hpp index 2fe8e11fc7..ebb8cc373f 100644 --- a/src/libslic3r/SLA/SupportPointGenerator.hpp +++ b/src/libslic3r/SLA/SupportPointGenerator.hpp @@ -3,9 +3,8 @@ #include -#include #include -#include +#include #include #include @@ -23,15 +22,16 @@ public: float density_relative {1.f}; float minimal_distance {1.f}; float head_diameter {0.4f}; - /////////////// - inline float support_force() const { return 7.7f / density_relative; } // a force one point can support (arbitrary force unit) + + // Originally calibrated to 7.7f, reduced density by Tamas to 70% which is 11.1 (7.7 / 0.7) to adjust for new algorithm changes in tm_suppt_gen_improve + inline float support_force() const { return 11.1f / density_relative; } // a force one point can support (arbitrary force unit) inline float tear_pressure() const { return 1.f; } // pressure that the display exerts (the force unit per mm2) }; - SupportPointGenerator(const EigenMesh3D& emesh, const std::vector& slices, + SupportPointGenerator(const IndexedMesh& emesh, const std::vector& slices, const std::vector& heights, const Config& config, std::function throw_on_cancel, std::function statusfn); - SupportPointGenerator(const EigenMesh3D& emesh, const Config& config, std::function throw_on_cancel, std::function statusfn); + SupportPointGenerator(const IndexedMesh& emesh, const Config& config, std::function throw_on_cancel, std::function statusfn); const std::vector& output() const { return m_output; } std::vector& output() { return m_output; } @@ -39,8 +39,8 @@ public: struct MyLayer; struct Structure { - Structure(MyLayer &layer, const ExPolygon& poly, const BoundingBox &bbox, const Vec2f ¢roid, float area, float h) : - layer(&layer), polygon(&poly), bbox(bbox), centroid(centroid), area(area), height(h) + Structure(MyLayer &layer, const ExPolygon& poly, const BoundingBox &bbox, const Vec2f ¢roid, float area, float h) : + layer(&layer), polygon(&poly), bbox(bbox), centroid(centroid), area(area), zlevel(h) #ifdef SLA_SUPPORTPOINTGEN_DEBUG , unique_id(std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch())) #endif /* SLA_SUPPORTPOINTGEN_DEBUG */ @@ -50,7 +50,7 @@ public: const BoundingBox bbox; const Vec2f centroid = Vec2f::Zero(); const float area = 0.f; - float height = 0; + float zlevel = 0; // How well is this ExPolygon held to the print base? // Positive number, the higher the better. float supports_force_this_layer = 0.f; @@ -160,8 +160,8 @@ public: grid.emplace(cell_id(pt.position), pt); } - bool collides_with(const Vec2f &pos, Structure *island, float radius) { - Vec3f pos3d(pos.x(), pos.y(), float(island->layer->print_z)); + bool collides_with(const Vec2f &pos, float print_z, float radius) { + Vec3f pos3d(pos.x(), pos.y(), print_z); Vec3i cell = cell_id(pos3d); std::pair it_pair = grid.equal_range(cell); if (collides_with(pos3d, radius, it_pair.first, it_pair.second)) @@ -199,7 +199,16 @@ private: SupportPointGenerator::Config m_config; void process(const std::vector& slices, const std::vector& heights); - void uniformly_cover(const ExPolygons& islands, Structure& structure, PointGrid3D &grid3d, bool is_new_island = false, bool just_one = false); + +public: + enum IslandCoverageFlags : uint8_t { icfNone = 0x0, icfIsNew = 0x1, icfWithBoundary = 0x2 }; + +private: + + void uniformly_cover(const ExPolygons& islands, Structure& structure, float deficit, PointGrid3D &grid3d, IslandCoverageFlags flags = icfNone); + + void add_support_points(Structure& structure, PointGrid3D &grid3d); + void project_onto_mesh(std::vector& points) const; #ifdef SLA_SUPPORTPOINTGEN_DEBUG @@ -207,14 +216,17 @@ private: static void output_structures(const std::vector &structures); #endif // SLA_SUPPORTPOINTGEN_DEBUG - const EigenMesh3D& m_emesh; + const IndexedMesh& m_emesh; std::function m_throw_on_cancel; std::function m_statusfn; std::mt19937 m_rng; }; -void remove_bottom_points(std::vector &pts, double gnd_lvl, double tolerance); +void remove_bottom_points(std::vector &pts, float lvl); + +std::vector sample_expolygon(const ExPolygon &expoly, float samples_per_mm2, std::mt19937 &rng); +void sample_expolygon_boundary(const ExPolygon &expoly, float samples_per_mm, std::vector &out, std::mt19937 &rng); }} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportTree.cpp b/src/libslic3r/SLA/SupportTree.cpp index 528778b68b..1bb4cfab76 100644 --- a/src/libslic3r/SLA/SupportTree.cpp +++ b/src/libslic3r/SLA/SupportTree.cpp @@ -5,9 +5,9 @@ #include #include -#include #include #include +#include #include #include @@ -28,20 +28,6 @@ namespace Slic3r { namespace sla { -// Compile time configuration value definitions: - -// The max Z angle for a normal at which it will get completely ignored. -const double SupportConfig::normal_cutoff_angle = 150.0 * M_PI / 180.0; - -// The shortest distance of any support structure from the model surface -const double SupportConfig::safety_distance_mm = 0.5; - -const double SupportConfig::max_solo_pillar_height_mm = 15.0; -const double SupportConfig::max_dual_pillar_height_mm = 35.0; -const double SupportConfig::optimizer_rel_score_diff = 1e-6; -const unsigned SupportConfig::optimizer_max_iterations = 1000; -const unsigned SupportConfig::pillar_cascade_neighbors = 3; - void SupportTree::retrieve_full_mesh(TriangleMesh &outmesh) const { outmesh.merge(retrieve_mesh(MeshType::Support)); outmesh.merge(retrieve_mesh(MeshType::Pad)); @@ -103,9 +89,11 @@ SupportTree::UPtr SupportTree::create(const SupportableMesh &sm, builder->m_ctl = ctl; if (sm.cfg.enabled) { - builder->build(sm); + // Execute takes care about the ground_level + SupportTreeBuildsteps::execute(*builder, sm); builder->merge_and_cleanup(); // clean metadata, leave only the meshes. } else { + // If a pad gets added later, it will be in the right Z level builder->ground_level = sm.emesh.ground_level(); } diff --git a/src/libslic3r/SLA/SupportTree.hpp b/src/libslic3r/SLA/SupportTree.hpp index c6255aa2f2..4be90161d5 100644 --- a/src/libslic3r/SLA/SupportTree.hpp +++ b/src/libslic3r/SLA/SupportTree.hpp @@ -5,9 +5,8 @@ #include #include -#include #include -#include +#include #include #include @@ -32,7 +31,7 @@ enum class PillarConnectionMode dynamic }; -struct SupportConfig +struct SupportTreeConfig { bool enabled = true; @@ -45,6 +44,8 @@ struct SupportConfig // Radius of the back side of the 3d arrow. double head_back_radius_mm = 0.5; + double head_fallback_radius_mm = 0.25; + // Width in mm from the back sphere center to the front sphere center. double head_width_mm = 1.0; @@ -95,36 +96,43 @@ struct SupportConfig // ///////////////////////////////////////////////////////////////////////// // The max Z angle for a normal at which it will get completely ignored. - static const double normal_cutoff_angle; + static const double constexpr normal_cutoff_angle = 150.0 * M_PI / 180.0; // The shortest distance of any support structure from the model surface - static const double safety_distance_mm; + static const double constexpr safety_distance_mm = 0.5; - static const double max_solo_pillar_height_mm; - static const double max_dual_pillar_height_mm; - static const double optimizer_rel_score_diff; - static const unsigned optimizer_max_iterations; - static const unsigned pillar_cascade_neighbors; + static const double constexpr max_solo_pillar_height_mm = 15.0; + static const double constexpr max_dual_pillar_height_mm = 35.0; + static const double constexpr optimizer_rel_score_diff = 1e-6; + static const unsigned constexpr optimizer_max_iterations = 1000; + static const unsigned constexpr pillar_cascade_neighbors = 3; }; +// TODO: Part of future refactor +//class SupportConfig { +// std::optional tree_cfg {std::in_place_t{}}; // fill up +// std::optional pad_cfg; +//}; + enum class MeshType { Support, Pad }; struct SupportableMesh { - EigenMesh3D emesh; + IndexedMesh emesh; SupportPoints pts; - SupportConfig cfg; + SupportTreeConfig cfg; + PadConfig pad_cfg; explicit SupportableMesh(const TriangleMesh & trmsh, const SupportPoints &sp, - const SupportConfig &c) + const SupportTreeConfig &c) : emesh{trmsh}, pts{sp}, cfg{c} {} - explicit SupportableMesh(const EigenMesh3D &em, + explicit SupportableMesh(const IndexedMesh &em, const SupportPoints &sp, - const SupportConfig &c) + const SupportTreeConfig &c) : emesh{em}, pts{sp}, cfg{c} {} }; diff --git a/src/libslic3r/SLA/SupportTreeBuilder.cpp b/src/libslic3r/SLA/SupportTreeBuilder.cpp index cf6e7e0206..daa01ef24d 100644 --- a/src/libslic3r/SLA/SupportTreeBuilder.cpp +++ b/src/libslic3r/SLA/SupportTreeBuilder.cpp @@ -1,336 +1,26 @@ +#define NOMINMAX + #include #include +#include #include namespace Slic3r { namespace sla { -Contour3D sphere(double rho, Portion portion, double fa) { - - Contour3D ret; - - // prohibit close to zero radius - if(rho <= 1e-6 && rho >= -1e-6) return ret; - - auto& vertices = ret.points; - auto& facets = ret.faces3; - - // Algorithm: - // Add points one-by-one to the sphere grid and form facets using relative - // coordinates. Sphere is composed effectively of a mesh of stacked circles. - - // adjust via rounding to get an even multiple for any provided angle. - double angle = (2*PI / floor(2*PI / fa)); - - // Ring to be scaled to generate the steps of the sphere - std::vector ring; - - for (double i = 0; i < 2*PI; i+=angle) ring.emplace_back(i); - - const auto sbegin = size_t(2*std::get<0>(portion)/angle); - const auto send = size_t(2*std::get<1>(portion)/angle); - - const size_t steps = ring.size(); - const double increment = 1.0 / double(steps); - - // special case: first ring connects to 0,0,0 - // insert and form facets. - if(sbegin == 0) - vertices.emplace_back(Vec3d(0.0, 0.0, -rho + increment*sbegin*2.0*rho)); - - auto id = coord_t(vertices.size()); - for (size_t i = 0; i < ring.size(); i++) { - // Fixed scaling - const double z = -rho + increment*rho*2.0 * (sbegin + 1.0); - // radius of the circle for this step. - const double r = std::sqrt(std::abs(rho*rho - z*z)); - Vec2d b = Eigen::Rotation2Dd(ring[i]) * Eigen::Vector2d(0, r); - vertices.emplace_back(Vec3d(b(0), b(1), z)); - - if (sbegin == 0) - (i == 0) ? facets.emplace_back(coord_t(ring.size()), 0, 1) : - facets.emplace_back(id - 1, 0, id); - ++id; - } - - // General case: insert and form facets for each step, - // joining it to the ring below it. - for (size_t s = sbegin + 2; s < send - 1; s++) { - const double z = -rho + increment*double(s*2.0*rho); - const double r = std::sqrt(std::abs(rho*rho - z*z)); - - for (size_t i = 0; i < ring.size(); i++) { - Vec2d b = Eigen::Rotation2Dd(ring[i]) * Eigen::Vector2d(0, r); - vertices.emplace_back(Vec3d(b(0), b(1), z)); - auto id_ringsize = coord_t(id - int(ring.size())); - if (i == 0) { - // wrap around - facets.emplace_back(id - 1, id, id + coord_t(ring.size() - 1) ); - facets.emplace_back(id - 1, id_ringsize, id); - } else { - facets.emplace_back(id_ringsize - 1, id_ringsize, id); - facets.emplace_back(id - 1, id_ringsize - 1, id); - } - id++; - } - } - - // special case: last ring connects to 0,0,rho*2.0 - // only form facets. - if(send >= size_t(2*PI / angle)) { - vertices.emplace_back(Vec3d(0.0, 0.0, -rho + increment*send*2.0*rho)); - for (size_t i = 0; i < ring.size(); i++) { - auto id_ringsize = coord_t(id - int(ring.size())); - if (i == 0) { - // third vertex is on the other side of the ring. - facets.emplace_back(id - 1, id_ringsize, id); - } else { - auto ci = coord_t(id_ringsize + coord_t(i)); - facets.emplace_back(ci - 1, ci, id); - } - } - } - id++; - - return ret; -} - -Contour3D cylinder(double r, double h, size_t ssteps, const Vec3d &sp) -{ - Contour3D ret; - - auto steps = int(ssteps); - auto& points = ret.points; - auto& indices = ret.faces3; - points.reserve(2*ssteps); - double a = 2*PI/steps; - - Vec3d jp = sp; - Vec3d endp = {sp(X), sp(Y), sp(Z) + h}; - - // Upper circle points - for(int i = 0; i < steps; ++i) { - double phi = i*a; - double ex = endp(X) + r*std::cos(phi); - double ey = endp(Y) + r*std::sin(phi); - points.emplace_back(ex, ey, endp(Z)); - } - - // Lower circle points - for(int i = 0; i < steps; ++i) { - double phi = i*a; - double x = jp(X) + r*std::cos(phi); - double y = jp(Y) + r*std::sin(phi); - points.emplace_back(x, y, jp(Z)); - } - - // Now create long triangles connecting upper and lower circles - indices.reserve(2*ssteps); - auto offs = steps; - for(int i = 0; i < steps - 1; ++i) { - indices.emplace_back(i, i + offs, offs + i + 1); - indices.emplace_back(i, offs + i + 1, i + 1); - } - - // Last triangle connecting the first and last vertices - auto last = steps - 1; - indices.emplace_back(0, last, offs); - indices.emplace_back(last, offs + last, offs); - - // According to the slicing algorithms, we need to aid them with generating - // a watertight body. So we create a triangle fan for the upper and lower - // ending of the cylinder to close the geometry. - points.emplace_back(jp); int ci = int(points.size() - 1); - for(int i = 0; i < steps - 1; ++i) - indices.emplace_back(i + offs + 1, i + offs, ci); - - indices.emplace_back(offs, steps + offs - 1, ci); - - points.emplace_back(endp); ci = int(points.size() - 1); - for(int i = 0; i < steps - 1; ++i) - indices.emplace_back(ci, i, i + 1); - - indices.emplace_back(steps - 1, 0, ci); - - return ret; -} - Head::Head(double r_big_mm, double r_small_mm, double length_mm, double penetration, const Vec3d &direction, - const Vec3d &offset, - const size_t circlesteps) - : steps(circlesteps) - , dir(direction) - , tr(offset) + const Vec3d &offset) + : dir(direction) + , pos(offset) , r_back_mm(r_big_mm) , r_pin_mm(r_small_mm) , width_mm(length_mm) , penetration_mm(penetration) { - assert(width_mm > 0.); - assert(r_back_mm > 0.); - assert(r_pin_mm > 0.); - - // We create two spheres which will be connected with a robe that fits - // both circles perfectly. - - // Set up the model detail level - const double detail = 2*PI/steps; - - // We don't generate whole circles. Instead, we generate only the - // portions which are visible (not covered by the robe) To know the - // exact portion of the bottom and top circles we need to use some - // rules of tangent circles from which we can derive (using simple - // triangles the following relations: - - // The height of the whole mesh - const double h = r_big_mm + r_small_mm + width_mm; - double phi = PI/2 - std::acos( (r_big_mm - r_small_mm) / h ); - - // To generate a whole circle we would pass a portion of (0, Pi) - // To generate only a half horizontal circle we can pass (0, Pi/2) - // The calculated phi is an offset to the half circles needed to smooth - // the transition from the circle to the robe geometry - - auto&& s1 = sphere(r_big_mm, make_portion(0, PI/2 + phi), detail); - auto&& s2 = sphere(r_small_mm, make_portion(PI/2 + phi, PI), detail); - - for(auto& p : s2.points) p.z() += h; - - mesh.merge(s1); - mesh.merge(s2); - - for(size_t idx1 = s1.points.size() - steps, idx2 = s1.points.size(); - idx1 < s1.points.size() - 1; - idx1++, idx2++) - { - coord_t i1s1 = coord_t(idx1), i1s2 = coord_t(idx2); - coord_t i2s1 = i1s1 + 1, i2s2 = i1s2 + 1; - - mesh.faces3.emplace_back(i1s1, i2s1, i2s2); - mesh.faces3.emplace_back(i1s1, i2s2, i1s2); - } - - auto i1s1 = coord_t(s1.points.size()) - coord_t(steps); - auto i2s1 = coord_t(s1.points.size()) - 1; - auto i1s2 = coord_t(s1.points.size()); - auto i2s2 = coord_t(s1.points.size()) + coord_t(steps) - 1; - - mesh.faces3.emplace_back(i2s2, i2s1, i1s1); - mesh.faces3.emplace_back(i1s2, i2s2, i1s1); - - // To simplify further processing, we translate the mesh so that the - // last vertex of the pointing sphere (the pinpoint) will be at (0,0,0) - for(auto& p : mesh.points) p.z() -= (h + r_small_mm - penetration_mm); -} - -Pillar::Pillar(const Vec3d &jp, const Vec3d &endp, double radius, size_t st): - r(radius), steps(st), endpt(endp), starts_from_head(false) -{ - assert(steps > 0); - - height = jp(Z) - endp(Z); - if(height > EPSILON) { // Endpoint is below the starting point - - // We just create a bridge geometry with the pillar parameters and - // move the data. - Contour3D body = cylinder(radius, height, st, endp); - mesh.points.swap(body.points); - mesh.faces3.swap(body.faces3); - } -} - -Pillar &Pillar::add_base(double baseheight, double radius) -{ - if(baseheight <= 0) return *this; - if(baseheight > height) baseheight = height; - - assert(steps >= 0); - auto last = int(steps - 1); - - if(radius < r ) radius = r; - - double a = 2*PI/steps; - double z = endpt(Z) + baseheight; - - for(size_t i = 0; i < steps; ++i) { - double phi = i*a; - double x = endpt(X) + r*std::cos(phi); - double y = endpt(Y) + r*std::sin(phi); - base.points.emplace_back(x, y, z); - } - - for(size_t i = 0; i < steps; ++i) { - double phi = i*a; - double x = endpt(X) + radius*std::cos(phi); - double y = endpt(Y) + radius*std::sin(phi); - base.points.emplace_back(x, y, z - baseheight); - } - - auto ep = endpt; ep(Z) += baseheight; - base.points.emplace_back(endpt); - base.points.emplace_back(ep); - - auto& indices = base.faces3; - auto hcenter = int(base.points.size() - 1); - auto lcenter = int(base.points.size() - 2); - auto offs = int(steps); - for(int i = 0; i < last; ++i) { - indices.emplace_back(i, i + offs, offs + i + 1); - indices.emplace_back(i, offs + i + 1, i + 1); - indices.emplace_back(i, i + 1, hcenter); - indices.emplace_back(lcenter, offs + i + 1, offs + i); - } - - indices.emplace_back(0, last, offs); - indices.emplace_back(last, offs + last, offs); - indices.emplace_back(hcenter, last, 0); - indices.emplace_back(offs, offs + last, lcenter); - return *this; -} - -Bridge::Bridge(const Vec3d &j1, const Vec3d &j2, double r_mm, size_t steps): - r(r_mm), startp(j1), endp(j2) -{ - using Quaternion = Eigen::Quaternion; - Vec3d dir = (j2 - j1).normalized(); - double d = distance(j2, j1); - - mesh = cylinder(r, d, steps); - - auto quater = Quaternion::FromTwoVectors(Vec3d{0,0,1}, dir); - for(auto& p : mesh.points) p = quater * p + j1; -} - -CompactBridge::CompactBridge(const Vec3d &sp, - const Vec3d &ep, - const Vec3d &n, - double r, - bool endball, - size_t steps) -{ - Vec3d startp = sp + r * n; - Vec3d dir = (ep - startp).normalized(); - Vec3d endp = ep - r * dir; - - Bridge br(startp, endp, r, steps); - mesh.merge(br.mesh); - - // now add the pins - double fa = 2*PI/steps; - auto upperball = sphere(r, Portion{PI / 2 - fa, PI}, fa); - for(auto& p : upperball.points) p += startp; - - if(endball) { - auto lowerball = sphere(r, Portion{0, PI/2 + 2*fa}, fa); - for(auto& p : lowerball.points) p += endp; - mesh.merge(lowerball); - } - - mesh.merge(upperball); } Pad::Pad(const TriangleMesh &support_mesh, @@ -368,7 +58,6 @@ SupportTreeBuilder::SupportTreeBuilder(SupportTreeBuilder &&o) , m_pillars{std::move(o.m_pillars)} , m_bridges{std::move(o.m_bridges)} , m_crossbridges{std::move(o.m_crossbridges)} - , m_compact_bridges{std::move(o.m_compact_bridges)} , m_pad{std::move(o.m_pad)} , m_meshcache{std::move(o.m_meshcache)} , m_meshcache_valid{o.m_meshcache_valid} @@ -382,7 +71,6 @@ SupportTreeBuilder::SupportTreeBuilder(const SupportTreeBuilder &o) , m_pillars{o.m_pillars} , m_bridges{o.m_bridges} , m_crossbridges{o.m_crossbridges} - , m_compact_bridges{o.m_compact_bridges} , m_pad{o.m_pad} , m_meshcache{o.m_meshcache} , m_meshcache_valid{o.m_meshcache_valid} @@ -397,7 +85,6 @@ SupportTreeBuilder &SupportTreeBuilder::operator=(SupportTreeBuilder &&o) m_pillars = std::move(o.m_pillars); m_bridges = std::move(o.m_bridges); m_crossbridges = std::move(o.m_crossbridges); - m_compact_bridges = std::move(o.m_compact_bridges); m_pad = std::move(o.m_pad); m_meshcache = std::move(o.m_meshcache); m_meshcache_valid = o.m_meshcache_valid; @@ -413,7 +100,6 @@ SupportTreeBuilder &SupportTreeBuilder::operator=(const SupportTreeBuilder &o) m_pillars = o.m_pillars; m_bridges = o.m_bridges; m_crossbridges = o.m_crossbridges; - m_compact_bridges = o.m_compact_bridges; m_pad = o.m_pad; m_meshcache = o.m_meshcache; m_meshcache_valid = o.m_meshcache_valid; @@ -422,7 +108,19 @@ SupportTreeBuilder &SupportTreeBuilder::operator=(const SupportTreeBuilder &o) return *this; } -const TriangleMesh &SupportTreeBuilder::merged_mesh() const +void SupportTreeBuilder::add_pillar_base(long pid, double baseheight, double radius) +{ + std::lock_guard lk(m_mutex); + assert(pid >= 0 && size_t(pid) < m_pillars.size()); + Pillar& pll = m_pillars[size_t(pid)]; + m_pedestals.emplace_back(pll.endpt, std::min(baseheight, pll.height), + std::max(radius, pll.r), pll.r); + + m_pedestals.back().id = m_pedestals.size() - 1; + m_meshcache_valid = false; +} + +const TriangleMesh &SupportTreeBuilder::merged_mesh(size_t steps) const { if (m_meshcache_valid) return m_meshcache; @@ -430,35 +128,44 @@ const TriangleMesh &SupportTreeBuilder::merged_mesh() const for (auto &head : m_heads) { if (ctl().stopcondition()) break; - if (head.is_valid()) merged.merge(head.mesh); + if (head.is_valid()) merged.merge(get_mesh(head, steps)); } - for (auto &stick : m_pillars) { + for (auto &pill : m_pillars) { if (ctl().stopcondition()) break; - merged.merge(stick.mesh); - merged.merge(stick.base); + merged.merge(get_mesh(pill, steps)); + } + + for (auto &pedest : m_pedestals) { + if (ctl().stopcondition()) break; + merged.merge(get_mesh(pedest, steps)); } for (auto &j : m_junctions) { if (ctl().stopcondition()) break; - merged.merge(j.mesh); + merged.merge(get_mesh(j, steps)); } - - for (auto &cb : m_compact_bridges) { - if (ctl().stopcondition()) break; - merged.merge(cb.mesh); - } - + for (auto &bs : m_bridges) { if (ctl().stopcondition()) break; - merged.merge(bs.mesh); + merged.merge(get_mesh(bs, steps)); } for (auto &bs : m_crossbridges) { if (ctl().stopcondition()) break; - merged.merge(bs.mesh); + merged.merge(get_mesh(bs, steps)); } - + + for (auto &bs : m_diffbridges) { + if (ctl().stopcondition()) break; + merged.merge(get_mesh(bs, steps)); + } + + for (auto &anch : m_anchors) { + if (ctl().stopcondition()) break; + merged.merge(get_mesh(anch, steps)); + } + if (ctl().stopcondition()) { // In case of failure we have to return an empty mesh m_meshcache = TriangleMesh(); @@ -499,7 +206,6 @@ const TriangleMesh &SupportTreeBuilder::merge_and_cleanup() m_pillars = {}; m_junctions = {}; m_bridges = {}; - m_compact_bridges = {}; return ret; } @@ -514,11 +220,4 @@ const TriangleMesh &SupportTreeBuilder::retrieve_mesh(MeshType meshtype) const return m_meshcache; } -bool SupportTreeBuilder::build(const SupportableMesh &sm) -{ - ground_level = sm.emesh.ground_level() - sm.cfg.object_elevation_mm; - return SupportTreeBuildsteps::execute(*this, sm); -} - -} -} +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportTreeBuilder.hpp b/src/libslic3r/SLA/SupportTreeBuilder.hpp index 90cf417c83..f29263ca3f 100644 --- a/src/libslic3r/SLA/SupportTreeBuilder.hpp +++ b/src/libslic3r/SLA/SupportTreeBuilder.hpp @@ -2,7 +2,6 @@ #define SLA_SUPPORTTREEBUILDER_HPP #include -#include #include #include #include @@ -50,13 +49,6 @@ namespace sla { * nearby pillar. */ -using Coordf = double; -using Portion = std::tuple; - -inline Portion make_portion(double a, double b) { - return std::make_tuple(a, b); -} - template double distance(const Vec& p) { return std::sqrt(p.transpose() * p); } @@ -66,33 +58,25 @@ template double distance(const Vec& pp1, const Vec& pp2) { return distance(p); } -Contour3D sphere(double rho, Portion portion = make_portion(0.0, 2.0*PI), - double fa=(2*PI/360)); +const Vec3d DOWN = {0.0, 0.0, -1.0}; -// Down facing cylinder in Z direction with arguments: -// r: radius -// h: Height -// ssteps: how many edges will create the base circle -// sp: starting point -Contour3D cylinder(double r, double h, size_t ssteps = 45, const Vec3d &sp = {0,0,0}); +struct SupportTreeNode +{ + static const constexpr long ID_UNSET = -1; -const constexpr long ID_UNSET = -1; + long id = ID_UNSET; // For identification withing a tree. +}; -struct Head { - Contour3D mesh; - - size_t steps = 45; - Vec3d dir = {0, 0, -1}; - Vec3d tr = {0, 0, 0}; +// A pinhead originating from a support point +struct Head: public SupportTreeNode { + Vec3d dir = DOWN; + Vec3d pos = {0, 0, 0}; double r_back_mm = 1; double r_pin_mm = 0.5; double width_mm = 2; double penetration_mm = 0.5; - - // For identification purposes. This will be used as the index into the - // container holding the head structures. See SLASupportTree::Impl - long id = ID_UNSET; + // If there is a pillar connecting to this head, then the id will be set. long pillar_id = ID_UNSET; @@ -106,31 +90,23 @@ struct Head { double r_small_mm, double length_mm, double penetration, - const Vec3d &direction = {0, 0, -1}, // direction (normal to the dull end) - const Vec3d &offset = {0, 0, 0}, // displacement - const size_t circlesteps = 45); - - void transform() + const Vec3d &direction = DOWN, // direction (normal to the dull end) + const Vec3d &offset = {0, 0, 0} // displacement + ); + + inline double real_width() const { - using Quaternion = Eigen::Quaternion; - - // We rotate the head to the specified direction The head's pointing - // side is facing upwards so this means that it would hold a support - // point with a normal pointing straight down. This is the reason of - // the -1 z coordinate - auto quatern = Quaternion::FromTwoVectors(Vec3d{0, 0, -1}, dir); - - for(auto& p : mesh.points) p = quatern * p + tr; + return 2 * r_pin_mm + width_mm + 2 * r_back_mm ; } - + inline double fullwidth() const { - return 2 * r_pin_mm + width_mm + 2*r_back_mm - penetration_mm; + return real_width() - penetration_mm; } inline Vec3d junction_point() const { - return tr + ( 2 * r_pin_mm + width_mm + r_back_mm - penetration_mm)*dir; + return pos + (fullwidth() - r_back_mm) * dir; } inline double request_pillar_radius(double radius) const @@ -140,31 +116,17 @@ struct Head { } }; -struct Junction { - Contour3D mesh; +// A junction connecting bridges and pillars +struct Junction: public SupportTreeNode { double r = 1; - size_t steps = 45; Vec3d pos; - - long id = ID_UNSET; - - Junction(const Vec3d& tr, double r_mm, size_t stepnum = 45): - r(r_mm), steps(stepnum), pos(tr) - { - mesh = sphere(r_mm, make_portion(0, PI), 2*PI/steps); - for(auto& p : mesh.points) p += tr; - } + + Junction(const Vec3d &tr, double r_mm) : r(r_mm), pos(tr) {} }; -struct Pillar { - Contour3D mesh; - Contour3D base; - double r = 1; - size_t steps = 0; +struct Pillar: public SupportTreeNode { + double height, r; Vec3d endpt; - double height = 0; - - long id = ID_UNSET; // If the pillar connects to a head, this is the id of that head bool starts_from_head = true; // Could start from a junction as well @@ -175,54 +137,52 @@ struct Pillar { // How many pillars are cascaded with this one unsigned links = 0; - - Pillar(const Vec3d& jp, const Vec3d& endp, - double radius = 1, size_t st = 45); - - Pillar(const Junction &junc, const Vec3d &endp) - : Pillar(junc.pos, endp, junc.r, junc.steps) - {} - - Pillar(const Head &head, const Vec3d &endp, double radius = 1) - : Pillar(head.junction_point(), endp, - head.request_pillar_radius(radius), head.steps) - {} - - inline Vec3d startpoint() const + + Pillar(const Vec3d &endp, double h, double radius = 1.): + height{h}, r(radius), endpt(endp), starts_from_head(false) {} + + Vec3d startpoint() const { - return {endpt(X), endpt(Y), endpt(Z) + height}; + return {endpt.x(), endpt.y(), endpt.z() + height}; } - inline const Vec3d& endpoint() const { return endpt; } - - Pillar& add_base(double baseheight = 3, double radius = 2); + const Vec3d& endpoint() const { return endpt; } }; +// A base for pillars or bridges that end on the ground +struct Pedestal: public SupportTreeNode { + Vec3d pos; + double height, r_bottom, r_top; + + Pedestal(const Vec3d &p, double h, double rbottom, double rtop) + : pos{p}, height{h}, r_bottom{rbottom}, r_top{rtop} + {} +}; + +// This is the thing that anchors a pillar or bridge to the model body. +// It is actually a reverse pinhead. +struct Anchor: public Head { using Head::Head; }; + // A Bridge between two pillars (with junction endpoints) -struct Bridge { - Contour3D mesh; +struct Bridge: public SupportTreeNode { double r = 0.8; - long id = ID_UNSET; Vec3d startp = Vec3d::Zero(), endp = Vec3d::Zero(); Bridge(const Vec3d &j1, const Vec3d &j2, - double r_mm = 0.8, - size_t steps = 45); + double r_mm = 0.8): r{r_mm}, startp{j1}, endp{j2} + {} + + double get_length() const { return (endp - startp).norm(); } + Vec3d get_dir() const { return (endp - startp).normalized(); } }; -// A bridge that spans from model surface to model surface with small connecting -// edges on the endpoints. Used for headless support points. -struct CompactBridge { - Contour3D mesh; - long id = ID_UNSET; - - CompactBridge(const Vec3d& sp, - const Vec3d& ep, - const Vec3d& n, - double r, - bool endball = true, - size_t steps = 45); +struct DiffBridge: public Bridge { + double end_r; + + DiffBridge(const Vec3d &p_s, const Vec3d &p_e, double r_s, double r_e) + : Bridge{p_s, p_e, r_s}, end_r{r_e} + {} }; // A wrapper struct around the pad @@ -258,13 +218,16 @@ struct Pad { // merged mesh. It can be retrieved using a dedicated method (pad()) class SupportTreeBuilder: public SupportTree { // For heads it is beneficial to use the same IDs as for the support points. - std::vector m_heads; - std::vector m_head_indices; - std::vector m_pillars; - std::vector m_junctions; - std::vector m_bridges; - std::vector m_crossbridges; - std::vector m_compact_bridges; + std::vector m_heads; + std::vector m_head_indices; + std::vector m_pillars; + std::vector m_junctions; + std::vector m_bridges; + std::vector m_crossbridges; + std::vector m_diffbridges; + std::vector m_pedestals; + std::vector m_anchors; + Pad m_pad; using Mutex = ccr::SpinningMutex; @@ -274,8 +237,8 @@ class SupportTreeBuilder: public SupportTree { mutable bool m_meshcache_valid = false; mutable double m_model_height = 0; // the full height of the model - template - const Bridge& _add_bridge(std::vector &br, Args&&... args) + template + const BridgeT& _add_bridge(std::vector &br, Args&&... args) { std::lock_guard lk(m_mutex); br.emplace_back(std::forward(args)...); @@ -306,7 +269,7 @@ public: return m_heads.back(); } - template long add_pillar(long headid, Args&&... args) + template long add_pillar(long headid, double length) { std::lock_guard lk(m_mutex); if (m_pillars.capacity() < m_heads.size()) @@ -315,7 +278,9 @@ public: assert(headid >= 0 && size_t(headid) < m_head_indices.size()); Head &head = m_heads[m_head_indices[size_t(headid)]]; - m_pillars.emplace_back(head, std::forward(args)...); + Vec3d hjp = head.junction_point() - Vec3d{0, 0, length}; + m_pillars.emplace_back(hjp, length, head.r_back_mm); + Pillar& pillar = m_pillars.back(); pillar.id = long(m_pillars.size() - 1); head.pillar_id = pillar.id; @@ -326,11 +291,15 @@ public: return pillar.id; } - void add_pillar_base(long pid, double baseheight = 3, double radius = 2) + void add_pillar_base(long pid, double baseheight = 3, double radius = 2); + + template const Anchor& add_anchor(Args&&...args) { std::lock_guard lk(m_mutex); - assert(pid >= 0 && size_t(pid) < m_pillars.size()); - m_pillars[size_t(pid)].add_base(baseheight, radius); + m_anchors.emplace_back(std::forward(args)...); + m_anchors.back().id = long(m_junctions.size() - 1); + m_meshcache_valid = false; + return m_anchors.back(); } void increment_bridges(const Pillar& pillar) @@ -371,17 +340,6 @@ public: return pillar.id; } - const Pillar& head_pillar(unsigned headid) const - { - std::lock_guard lk(m_mutex); - assert(headid < m_head_indices.size()); - - const Head& h = m_heads[m_head_indices[headid]]; - assert(h.pillar_id >= 0 && h.pillar_id < long(m_pillars.size())); - - return m_pillars[size_t(h.pillar_id)]; - } - template const Junction& add_junction(Args&&... args) { std::lock_guard lk(m_mutex); @@ -391,18 +349,18 @@ public: return m_junctions.back(); } - const Bridge& add_bridge(const Vec3d &s, const Vec3d &e, double r, size_t n = 45) + const Bridge& add_bridge(const Vec3d &s, const Vec3d &e, double r) { - return _add_bridge(m_bridges, s, e, r, n); + return _add_bridge(m_bridges, s, e, r); } - const Bridge& add_bridge(long headid, const Vec3d &endp, size_t s = 45) + const Bridge& add_bridge(long headid, const Vec3d &endp) { std::lock_guard lk(m_mutex); assert(headid >= 0 && size_t(headid) < m_head_indices.size()); Head &h = m_heads[m_head_indices[size_t(headid)]]; - m_bridges.emplace_back(h.junction_point(), endp, h.r_back_mm, s); + m_bridges.emplace_back(h.junction_point(), endp, h.r_back_mm); m_bridges.back().id = long(m_bridges.size() - 1); h.bridge_id = m_bridges.back().id; @@ -414,14 +372,10 @@ public: { return _add_bridge(m_crossbridges, std::forward(args)...); } - - template const CompactBridge& add_compact_bridge(Args&&...args) + + template const DiffBridge& add_diffbridge(Args&&... args) { - std::lock_guard lk(m_mutex); - m_compact_bridges.emplace_back(std::forward(args)...); - m_compact_bridges.back().id = long(m_compact_bridges.size() - 1); - m_meshcache_valid = false; - return m_compact_bridges.back(); + return _add_bridge(m_diffbridges, std::forward(args)...); } Head &head(unsigned id) @@ -439,7 +393,7 @@ public: } inline const std::vector &pillars() const { return m_pillars; } - inline const std::vector &heads() const { return m_heads; } + inline const std::vector &heads() const { return m_heads; } inline const std::vector &bridges() const { return m_bridges; } inline const std::vector &crossbridges() const { return m_crossbridges; } @@ -464,7 +418,7 @@ public: const Pad& pad() const { return m_pad; } // WITHOUT THE PAD!!! - const TriangleMesh &merged_mesh() const; + const TriangleMesh &merged_mesh(size_t steps = 45) const; // WITH THE PAD double full_height() const; @@ -488,8 +442,6 @@ public: virtual const TriangleMesh &retrieve_mesh( MeshType meshtype = MeshType::Support) const override; - - bool build(const SupportableMesh &supportable_mesh); }; }} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportTreeBuildsteps.cpp b/src/libslic3r/SLA/SupportTreeBuildsteps.cpp index 29ad6057f1..3c39c64e6b 100644 --- a/src/libslic3r/SLA/SupportTreeBuildsteps.cpp +++ b/src/libslic3r/SLA/SupportTreeBuildsteps.cpp @@ -1,19 +1,36 @@ #include -#include -#include +#include +#include #include namespace Slic3r { namespace sla { -static const Vec3d DOWN = {0.0, 0.0, -1.0}; +using Slic3r::opt::initvals; +using Slic3r::opt::bounds; +using Slic3r::opt::StopCriteria; +using Slic3r::opt::Optimizer; +using Slic3r::opt::AlgNLoptSubplex; +using Slic3r::opt::AlgNLoptGenetic; -using libnest2d::opt::initvals; -using libnest2d::opt::bound; -using libnest2d::opt::StopCriteria; -using libnest2d::opt::GeneticOptimizer; -using libnest2d::opt::SubplexOptimizer; +StopCriteria get_criteria(const SupportTreeConfig &cfg) +{ + return StopCriteria{} + .rel_score_diff(cfg.optimizer_rel_score_diff) + .max_iterations(cfg.optimizer_max_iterations); +} + +template +static Hit min_hit(const C &hits) +{ + auto mit = std::min_element(hits.begin(), hits.end(), + [](const Hit &h1, const Hit &h2) { + return h1.distance() < h2.distance(); + }); + + return *mit; +} SupportTreeBuildsteps::SupportTreeBuildsteps(SupportTreeBuilder & builder, const SupportableMesh &sm) @@ -27,7 +44,7 @@ SupportTreeBuildsteps::SupportTreeBuildsteps(SupportTreeBuilder & builder, { // Prepare the support points in Eigen/IGL format as well, we will use // it mostly in this form. - + long i = 0; for (const SupportPoint &sp : m_support_pts) { m_points.row(i)(X) = double(sp.pos(X)); @@ -41,9 +58,11 @@ bool SupportTreeBuildsteps::execute(SupportTreeBuilder & builder, const SupportableMesh &sm) { if(sm.pts.empty()) return false; - + + builder.ground_level = sm.emesh.ground_level() - sm.cfg.object_elevation_mm; + SupportTreeBuildsteps alg(builder, sm); - + // Let's define the individual steps of the processing. We can experiment // later with the ordering and the dependencies between them. enum Steps { @@ -54,59 +73,52 @@ bool SupportTreeBuildsteps::execute(SupportTreeBuilder & builder, ROUTING_GROUND, ROUTING_NONGROUND, CASCADE_PILLARS, - HEADLESS, MERGE_RESULT, DONE, ABORT, NUM_STEPS //... }; - + // Collect the algorithm steps into a nice sequence std::array, NUM_STEPS> program = { [] () { // Begin... // Potentially clear up the shared data (not needed for now) }, - + std::bind(&SupportTreeBuildsteps::filter, &alg), - + std::bind(&SupportTreeBuildsteps::add_pinheads, &alg), - + std::bind(&SupportTreeBuildsteps::classify, &alg), - + std::bind(&SupportTreeBuildsteps::routing_to_ground, &alg), - + std::bind(&SupportTreeBuildsteps::routing_to_model, &alg), - + std::bind(&SupportTreeBuildsteps::interconnect_pillars, &alg), - - std::bind(&SupportTreeBuildsteps::routing_headless, &alg), - + std::bind(&SupportTreeBuildsteps::merge_result, &alg), - + [] () { // Done }, - + [] () { // Abort } }; - + Steps pc = BEGIN; - + if(sm.cfg.ground_facing_only) { program[ROUTING_NONGROUND] = []() { BOOST_LOG_TRIVIAL(info) << "Skipping model-facing supports as requested."; }; - program[HEADLESS] = []() { - BOOST_LOG_TRIVIAL(info) << "Skipping headless stick generation as" - " requested."; - }; } - + // Let's define a simple automaton that will run our program. auto progress = [&builder, &pc] () { static const std::array stepstr { @@ -117,12 +129,11 @@ bool SupportTreeBuildsteps::execute(SupportTreeBuilder & builder, "Routing to ground", "Routing supports to model surface", "Interconnecting pillars", - "Processing small holes", "Merging support mesh", "Done", "Abort" }; - + static const std::array stepstate { 0, 10, @@ -131,14 +142,13 @@ bool SupportTreeBuildsteps::execute(SupportTreeBuilder & builder, 60, 70, 80, - 85, 99, 100, 0 }; - + if(builder.ctl().stopcondition()) pc = ABORT; - + switch(pc) { case BEGIN: pc = FILTER; break; case FILTER: pc = PINHEADS; break; @@ -146,143 +156,78 @@ bool SupportTreeBuildsteps::execute(SupportTreeBuilder & builder, case CLASSIFY: pc = ROUTING_GROUND; break; case ROUTING_GROUND: pc = ROUTING_NONGROUND; break; case ROUTING_NONGROUND: pc = CASCADE_PILLARS; break; - case CASCADE_PILLARS: pc = HEADLESS; break; - case HEADLESS: pc = MERGE_RESULT; break; + case CASCADE_PILLARS: pc = MERGE_RESULT; break; case MERGE_RESULT: pc = DONE; break; case DONE: case ABORT: break; default: ; } - + builder.ctl().statuscb(stepstate[pc], stepstr[pc]); }; - + // Just here we run the computation... while(pc < DONE) { progress(); program[pc](); } - + return pc == ABORT; } -// Give points on a 3D ring with given center, radius and orientation -// method based on: -// https://math.stackexchange.com/questions/73237/parametric-equation-of-a-circle-in-3d-space -template -class PointRing { - std::array m_phis; - - // Two vectors that will be perpendicular to each other and to the - // axis. Values for a(X) and a(Y) are now arbitrary, a(Z) is just a - // placeholder. - // a and b vectors are perpendicular to the ring direction and to each other. - // Together they define the plane where we have to iterate with the - // given angles in the 'm_phis' vector - Vec3d a = {0, 1, 0}, b; - double m_radius = 0.; - - static inline bool constexpr is_one(double val) - { - return std::abs(std::abs(val) - 1) < 1e-20; - } - -public: - - PointRing(const Vec3d &n) - { - m_phis = linspace_array(0., 2 * PI); - - // We have to address the case when the direction vector v (same as - // dir) is coincident with one of the world axes. In this case two of - // its components will be completely zero and one is 1.0. Our method - // becomes dangerous here due to division with zero. Instead, vector - // 'a' can be an element-wise rotated version of 'v' - if(is_one(n(X)) || is_one(n(Y)) || is_one(n(Z))) { - a = {n(Z), n(X), n(Y)}; - b = {n(Y), n(Z), n(X)}; - } - else { - a(Z) = -(n(Y)*a(Y)) / n(Z); a.normalize(); - b = a.cross(n); - } - } - - Vec3d get(size_t idx, const Vec3d src, double r) const - { - double phi = m_phis[idx]; - double sinphi = std::sin(phi); - double cosphi = std::cos(phi); - - double rpscos = r * cosphi; - double rpssin = r * sinphi; - - // Point on the sphere - return {src(X) + rpscos * a(X) + rpssin * b(X), - src(Y) + rpscos * a(Y) + rpssin * b(Y), - src(Z) + rpscos * a(Z) + rpssin * b(Z)}; - } -}; - -template -static Hit min_hit(const C &hits) -{ - auto mit = std::min_element(hits.begin(), hits.end(), - [](const Hit &h1, const Hit &h2) { - return h1.distance() < h2.distance(); - }); - - return *mit; -} - -EigenMesh3D::hit_result SupportTreeBuildsteps::pinhead_mesh_intersect( - const Vec3d &s, const Vec3d &dir, double r_pin, double r_back, double width) +IndexedMesh::hit_result SupportTreeBuildsteps::pinhead_mesh_intersect( + const Vec3d &s, + const Vec3d &dir, + double r_pin, + double r_back, + double width, + double sd) { static const size_t SAMPLES = 8; - + // Move away slightly from the touching point to avoid raycasting on the // inner surface of the mesh. - - const double& sd = m_cfg.safety_distance_mm; - + auto& m = m_mesh; - using HitResult = EigenMesh3D::hit_result; - + using HitResult = IndexedMesh::hit_result; + // Hit results std::array hits; - + struct Rings { double rpin; double rback; Vec3d spin; Vec3d sback; PointRing ring; - + Vec3d backring(size_t idx) { return ring.get(idx, sback, rback); } Vec3d pinring(size_t idx) { return ring.get(idx, spin, rpin); } } rings {r_pin + sd, r_back + sd, s, s + width * dir, dir}; - + // We will shoot multiple rays from the head pinpoint in the direction // of the pinhead robe (side) surface. The result will be the smallest // hit distance. - - ccr::enumerate(hits.begin(), hits.end(), - [&m, &rings, sd](HitResult &hit, size_t i) { - + + ccr::for_each(size_t(0), hits.size(), + [&m, &rings, sd, &hits](size_t i) { + // Point on the circle on the pin sphere Vec3d ps = rings.pinring(i); // This is the point on the circle on the back sphere Vec3d p = rings.backring(i); - + + auto &hit = hits[i]; + // Point ps is not on mesh but can be inside or // outside as well. This would cause many problems // with ray-casting. To detect the position we will // use the ray-casting result (which has an is_inside - // predicate). - + // predicate). + Vec3d n = (p - ps).normalized(); auto q = m.query_ray_hit(ps + sd * n, n); - + if (q.is_inside()) { // the hit is inside the model if (q.distance() > rings.rpin) { // If we are inside the model and the hit @@ -307,40 +252,40 @@ EigenMesh3D::hit_result SupportTreeBuildsteps::pinhead_mesh_intersect( } else hit = q; }); - + return min_hit(hits); } -EigenMesh3D::hit_result SupportTreeBuildsteps::bridge_mesh_intersect( - const Vec3d &src, const Vec3d &dir, double r, bool ins_check) +IndexedMesh::hit_result SupportTreeBuildsteps::bridge_mesh_intersect( + const Vec3d &src, const Vec3d &dir, double r, double sd) { static const size_t SAMPLES = 8; PointRing ring{dir}; - - using Hit = EigenMesh3D::hit_result; - + + using Hit = IndexedMesh::hit_result; + // Hit results std::array hits; - - ccr::enumerate(hits.begin(), hits.end(), - [this, r, src, ins_check, &ring, dir] (Hit &hit, size_t i) { - - const double sd = m_cfg.safety_distance_mm; - + + ccr::for_each(size_t(0), hits.size(), + [this, r, src, /*ins_check,*/ &ring, dir, sd, &hits] (size_t i) + { + Hit &hit = hits[i]; + // Point on the circle on the pin sphere Vec3d p = ring.get(i, src, r + sd); - - auto hr = m_mesh.query_ray_hit(p + sd * dir, dir); - - if(ins_check && hr.is_inside()) { + + auto hr = m_mesh.query_ray_hit(p + r * dir, dir); + + if(/*ins_check && */hr.is_inside()) { if(hr.distance() > 2 * r + sd) hit = Hit(0.0); else { // re-cast the ray from the outside of the object - hit = m_mesh.query_ray_hit(p + (hr.distance() + 2 * sd) * dir, dir); + hit = m_mesh.query_ray_hit(p + (hr.distance() + EPSILON) * dir, dir); } } else hit = hr; }); - + return min_hit(hits); } @@ -354,61 +299,61 @@ bool SupportTreeBuildsteps::interconnect(const Pillar &pillar, // shorter pillar is too short to start a new bridge but the taller // pillar could still be bridged with the shorter one. bool was_connected = false; - + Vec3d supper = pillar.startpoint(); Vec3d slower = nextpillar.startpoint(); Vec3d eupper = pillar.endpoint(); Vec3d elower = nextpillar.endpoint(); - + double zmin = m_builder.ground_level + m_cfg.base_height_mm; eupper(Z) = std::max(eupper(Z), zmin); elower(Z) = std::max(elower(Z), zmin); - + // The usable length of both pillars should be positive if(slower(Z) - elower(Z) < 0) return false; if(supper(Z) - eupper(Z) < 0) return false; - + double pillar_dist = distance(Vec2d{slower(X), slower(Y)}, Vec2d{supper(X), supper(Y)}); double bridge_distance = pillar_dist / std::cos(-m_cfg.bridge_slope); double zstep = pillar_dist * std::tan(-m_cfg.bridge_slope); - + if(pillar_dist < 2 * m_cfg.head_back_radius_mm || pillar_dist > m_cfg.max_pillar_link_distance_mm) return false; - + if(supper(Z) < slower(Z)) supper.swap(slower); if(eupper(Z) < elower(Z)) eupper.swap(elower); - + double startz = 0, endz = 0; - + startz = slower(Z) - zstep < supper(Z) ? slower(Z) - zstep : slower(Z); endz = eupper(Z) + zstep > elower(Z) ? eupper(Z) + zstep : eupper(Z); - + if(slower(Z) - eupper(Z) < std::abs(zstep)) { // no space for even one cross - + // Get max available space startz = std::min(supper(Z), slower(Z) - zstep); endz = std::max(eupper(Z) + zstep, elower(Z)); - + // Align to center double available_dist = (startz - endz); double rounds = std::floor(available_dist / std::abs(zstep)); startz -= 0.5 * (available_dist - rounds * std::abs(zstep)); } - + auto pcm = m_cfg.pillar_connection_mode; bool docrosses = pcm == PillarConnectionMode::cross || (pcm == PillarConnectionMode::dynamic && pillar_dist > 2*m_cfg.base_radius_mm); - + // 'sj' means starting junction, 'ej' is the end junction of a bridge. // They will be swapped in every iteration thus the zig-zag pattern. // According to a config parameter, a second bridge may be added which // results in a cross connection between the pillars. Vec3d sj = supper, ej = slower; sj(Z) = startz; ej(Z) = sj(Z) + zstep; - + // TODO: This is a workaround to not have a faulty last bridge while(ej(Z) >= eupper(Z) /*endz*/) { if(bridge_mesh_distance(sj, dirv(sj, ej), pillar.r) >= bridge_distance) @@ -416,7 +361,7 @@ bool SupportTreeBuildsteps::interconnect(const Pillar &pillar, m_builder.add_crossbridge(sj, ej, pillar.r); was_connected = true; } - + // double bridging: (crosses) if(docrosses) { Vec3d sjback(ej(X), ej(Y), sj(Z)); @@ -429,11 +374,11 @@ bool SupportTreeBuildsteps::interconnect(const Pillar &pillar, was_connected = true; } } - + sj.swap(ej); ej(Z) = sj(Z) + zstep; } - + return was_connected; } @@ -443,228 +388,242 @@ bool SupportTreeBuildsteps::connect_to_nearpillar(const Head &head, auto nearpillar = [this, nearpillar_id]() -> const Pillar& { return m_builder.pillar(nearpillar_id); }; - - if (m_builder.bridgecount(nearpillar()) > m_cfg.max_bridges_on_pillar) + + if (m_builder.bridgecount(nearpillar()) > m_cfg.max_bridges_on_pillar) return false; - + Vec3d headjp = head.junction_point(); Vec3d nearjp_u = nearpillar().startpoint(); Vec3d nearjp_l = nearpillar().endpoint(); - + double r = head.r_back_mm; double d2d = distance(to_2d(headjp), to_2d(nearjp_u)); double d3d = distance(headjp, nearjp_u); - + double hdiff = nearjp_u(Z) - headjp(Z); double slope = std::atan2(hdiff, d2d); - + Vec3d bridgestart = headjp; Vec3d bridgeend = nearjp_u; - double max_len = m_cfg.max_bridge_length_mm; + double max_len = r * m_cfg.max_bridge_length_mm / m_cfg.head_back_radius_mm; double max_slope = m_cfg.bridge_slope; double zdiff = 0.0; - + // check the default situation if feasible for a bridge if(d3d > max_len || slope > -max_slope) { // not feasible to connect the two head junctions. We have to search // for a suitable touch point. - + double Zdown = headjp(Z) + d2d * std::tan(-max_slope); Vec3d touchjp = bridgeend; touchjp(Z) = Zdown; double D = distance(headjp, touchjp); zdiff = Zdown - nearjp_u(Z); - + if(zdiff > 0) { Zdown -= zdiff; bridgestart(Z) -= zdiff; touchjp(Z) = Zdown; - + double t = bridge_mesh_distance(headjp, DOWN, r); - + // We can't insert a pillar under the source head to connect // with the nearby pillar's starting junction if(t < zdiff) return false; } - + if(Zdown <= nearjp_u(Z) && Zdown >= nearjp_l(Z) && D < max_len) bridgeend(Z) = Zdown; else return false; } - + // There will be a minimum distance from the ground where the // bridge is allowed to connect. This is an empiric value. - double minz = m_builder.ground_level + 2 * m_cfg.head_width_mm; + double minz = m_builder.ground_level + 4 * head.r_back_mm; if(bridgeend(Z) < minz) return false; - + double t = bridge_mesh_distance(bridgestart, dirv(bridgestart, bridgeend), r); - + // Cannot insert the bridge. (further search might not worth the hassle) if(t < distance(bridgestart, bridgeend)) return false; - + std::lock_guard lk(m_bridge_mutex); - + if (m_builder.bridgecount(nearpillar()) < m_cfg.max_bridges_on_pillar) { // A partial pillar is needed under the starting head. if(zdiff > 0) { - m_builder.add_pillar(head.id, bridgestart, r); + m_builder.add_pillar(head.id, headjp.z() - bridgestart.z()); m_builder.add_junction(bridgestart, r); - m_builder.add_bridge(bridgestart, bridgeend, head.r_back_mm); + m_builder.add_bridge(bridgestart, bridgeend, r); } else { m_builder.add_bridge(head.id, bridgeend); } - + m_builder.increment_bridges(nearpillar()); } else return false; - + return true; } -bool SupportTreeBuildsteps::search_pillar_and_connect(const Head &head) -{ - PointIndex spindex = m_pillar_index.guarded_clone(); - - long nearest_id = ID_UNSET; - - Vec3d querypoint = head.junction_point(); - - while(nearest_id < 0 && !spindex.empty()) { m_thr(); - // loop until a suitable head is not found - // if there is a pillar closer than the cluster center - // (this may happen as the clustering is not perfect) - // than we will bridge to this closer pillar - - Vec3d qp(querypoint(X), querypoint(Y), m_builder.ground_level); - auto qres = spindex.nearest(qp, 1); - if(qres.empty()) break; - - auto ne = qres.front(); - nearest_id = ne.second; - - if(nearest_id >= 0) { - if(size_t(nearest_id) < m_builder.pillarcount()) { - if(!connect_to_nearpillar(head, nearest_id)) { - nearest_id = ID_UNSET; // continue searching - spindex.remove(ne); // without the current pillar - } - } - } - } - - return nearest_id >= 0; -} - -void SupportTreeBuildsteps::create_ground_pillar(const Vec3d &jp, +bool SupportTreeBuildsteps::create_ground_pillar(const Vec3d &hjp, const Vec3d &sourcedir, double radius, long head_id) { - const double SLOPE = 1. / std::cos(m_cfg.bridge_slope); - - double gndlvl = m_builder.ground_level; - Vec3d endp = {jp(X), jp(Y), gndlvl}; - double sd = m_cfg.pillar_base_safety_distance_mm; - long pillar_id = ID_UNSET; - double min_dist = sd + m_cfg.base_radius_mm + EPSILON; - double dist = 0; - bool can_add_base = true; - bool normal_mode = true; - - // If in zero elevation mode and the pillar is too close to the model body, - // the support pillar can not be placed in the gap between the model and - // the pad, and the pillar bases must not touch the model body either. - // To solve this, a corrector bridge is inserted between the starting point - // (jp) and the new pillar. - if (m_cfg.object_elevation_mm < EPSILON - && (dist = std::sqrt(m_mesh.squared_distance(endp))) < min_dist) { - // Get the distance from the mesh. This can be later optimized - // to get the distance in 2D plane because we are dealing with - // the ground level only. + Vec3d jp = hjp, endp = jp, dir = sourcedir; + long pillar_id = SupportTreeNode::ID_UNSET; + bool can_add_base = false, non_head = false; - normal_mode = false; + double gndlvl = 0.; // The Z level where pedestals should be + double jp_gnd = 0.; // The lowest Z where a junction center can be + double gap_dist = 0.; // The gap distance between the model and the pad - // The min distance needed to move away from the model in XY plane. - double current_d = min_dist - dist; - double current_bride_d = SLOPE * current_d; + auto to_floor = [&gndlvl](const Vec3d &p) { return Vec3d{p.x(), p.y(), gndlvl}; }; + auto eval_limits = [this, &radius, &can_add_base, &gndlvl, &gap_dist, &jp_gnd] + (bool base_en = true) + { + can_add_base = base_en && radius >= m_cfg.head_back_radius_mm; + double base_r = can_add_base ? m_cfg.base_radius_mm : 0.; + gndlvl = m_builder.ground_level; + if (!can_add_base) gndlvl -= m_mesh.ground_level_offset(); + jp_gnd = gndlvl + (can_add_base ? 0. : m_cfg.head_back_radius_mm); + gap_dist = m_cfg.pillar_base_safety_distance_mm + base_r + EPSILON; + }; + + eval_limits(); + + // We are dealing with a mini pillar that's potentially too long + if (radius < m_cfg.head_back_radius_mm && jp.z() - gndlvl > 20 * radius) + { + std::optional diffbr = + search_widening_path(jp, dir, radius, m_cfg.head_back_radius_mm); + + if (diffbr && diffbr->endp.z() > jp_gnd) { + auto &br = m_builder.add_diffbridge(*diffbr); + if (head_id >= 0) m_builder.head(head_id).bridge_id = br.id; + endp = diffbr->endp; + radius = diffbr->end_r; + m_builder.add_junction(endp, radius); + non_head = true; + dir = diffbr->get_dir(); + eval_limits(); + } else return false; + } + + if (m_cfg.object_elevation_mm < EPSILON) + { // get a suitable direction for the corrector bridge. It is the // original sourcedir's azimuth but the polar angle is saturated to the // configured bridge slope. - auto [polar, azimuth] = dir_to_spheric(sourcedir); + auto [polar, azimuth] = dir_to_spheric(dir); polar = PI - m_cfg.bridge_slope; - auto dir = spheric_to_dir(polar, azimuth).normalized(); - - StopCriteria scr; - scr.stop_score = min_dist; - SubplexOptimizer solver(scr); - - // Search for a distance along the corrector bridge to move the endpoint - // sufficiently away form the model body. The first few optimization - // cycles should succeed here. - auto result = solver.optimize_max( - [this, dir, jp, gndlvl](double mv) { - Vec3d endpt = jp + mv * dir; - endpt(Z) = gndlvl; - return std::sqrt(m_mesh.squared_distance(endpt)); - }, - initvals(current_bride_d), - bound(0.0, m_cfg.max_bridge_length_mm - current_bride_d)); - - endp = jp + std::get<0>(result.optimum) * dir; - Vec3d pgnd = {endp(X), endp(Y), gndlvl}; - can_add_base = result.score > min_dist; - - double gnd_offs = m_mesh.ground_level_offset(); - auto abort_in_shame = - [gnd_offs, &normal_mode, &can_add_base, &endp, jp, gndlvl]() - { - normal_mode = true; - can_add_base = false; // Nothing left to do, hope for the best - endp = {jp(X), jp(Y), gndlvl - gnd_offs }; - }; - - // We have to check if the bridge is feasible. - if (bridge_mesh_distance(jp, dir, radius) < (endp - jp).norm()) - abort_in_shame(); - else { - // If the new endpoint is below ground, do not make a pillar - if (endp(Z) < gndlvl) - endp = endp - SLOPE * (gndlvl - endp(Z)) * dir; // back off - else { - - auto hit = bridge_mesh_intersect(endp, DOWN, radius); - if (!std::isinf(hit.distance())) abort_in_shame(); - - pillar_id = m_builder.add_pillar(endp, pgnd, radius); - - if (can_add_base) - m_builder.add_pillar_base(pillar_id, m_cfg.base_height_mm, - m_cfg.base_radius_mm); + Vec3d d = spheric_to_dir(polar, azimuth).normalized(); + double t = bridge_mesh_distance(endp, dir, radius); + double tmax = std::min(m_cfg.max_bridge_length_mm, t); + t = 0.; + + double zd = endp.z() - jp_gnd; + double tmax2 = zd / std::sqrt(1 - m_cfg.bridge_slope * m_cfg.bridge_slope); + tmax = std::min(tmax, tmax2); + + Vec3d nexp = endp; + double dlast = 0.; + while (((dlast = std::sqrt(m_mesh.squared_distance(to_floor(nexp)))) < gap_dist || + !std::isinf(bridge_mesh_distance(nexp, DOWN, radius))) && t < tmax) { + t += radius; + nexp = endp + t * d; + } + + if (dlast < gap_dist && can_add_base) { + nexp = endp; + t = 0.; + can_add_base = false; + eval_limits(can_add_base); + + zd = endp.z() - jp_gnd; + tmax2 = zd / std::sqrt(1 - m_cfg.bridge_slope * m_cfg.bridge_slope); + tmax = std::min(tmax, tmax2); + + while (((dlast = std::sqrt(m_mesh.squared_distance(to_floor(nexp)))) < gap_dist || + !std::isinf(bridge_mesh_distance(nexp, DOWN, radius))) && t < tmax) { + t += radius; + nexp = endp + t * d; } - - m_builder.add_bridge(jp, endp, radius); - m_builder.add_junction(endp, radius); - - // Add a degenerated pillar and the bridge. - // The degenerate pillar will have zero length and it will - // prevent from queries of head_pillar() to have non-existing - // pillar when the head should have one. - if (head_id >= 0) - m_builder.add_pillar(head_id, jp, radius); + } + + // Could not find a path to avoid the pad gap + if (dlast < gap_dist) return false; + + if (t > 0.) { // Need to make additional bridge + const Bridge& br = m_builder.add_bridge(endp, nexp, radius); + if (head_id >= 0) m_builder.head(head_id).bridge_id = br.id; + + m_builder.add_junction(nexp, radius); + endp = nexp; + non_head = true; } } - - if (normal_mode) { - pillar_id = head_id >= 0 ? m_builder.add_pillar(head_id, endp, radius) : - m_builder.add_pillar(jp, endp, radius); - if (can_add_base) - m_builder.add_pillar_base(pillar_id, m_cfg.base_height_mm, - m_cfg.base_radius_mm); - } - + Vec3d gp = to_floor(endp); + double h = endp.z() - gp.z(); + + pillar_id = head_id >= 0 && !non_head ? m_builder.add_pillar(head_id, h) : + m_builder.add_pillar(gp, h, radius); + + if (can_add_base) + add_pillar_base(pillar_id); + if(pillar_id >= 0) // Save the pillar endpoint in the spatial index - m_pillar_index.guarded_insert(endp, unsigned(pillar_id)); + m_pillar_index.guarded_insert(m_builder.pillar(pillar_id).endpt, + unsigned(pillar_id)); + + return true; +} + +std::optional SupportTreeBuildsteps::search_widening_path( + const Vec3d &jp, const Vec3d &dir, double radius, double new_radius) +{ + double w = radius + 2 * m_cfg.head_back_radius_mm; + double stopval = w + jp.z() - m_builder.ground_level; + Optimizer solver(get_criteria(m_cfg).stop_score(stopval)); + + auto [polar, azimuth] = dir_to_spheric(dir); + + double fallback_ratio = radius / m_cfg.head_back_radius_mm; + + auto oresult = solver.to_max().optimize( + [this, jp, radius, new_radius](const opt::Input<3> &input) { + auto &[plr, azm, t] = input; + + auto d = spheric_to_dir(plr, azm).normalized(); + double ret = pinhead_mesh_intersect(jp, d, radius, new_radius, t) + .distance(); + double down = bridge_mesh_distance(jp + t * d, d, new_radius); + + if (ret > t && std::isinf(down)) + ret += jp.z() - m_builder.ground_level; + + return ret; + }, + initvals({polar, azimuth, w}), // start with what we have + bounds({ + {PI - m_cfg.bridge_slope, PI}, // Must not exceed the slope limit + {-PI, PI}, // azimuth can be a full search + {radius + m_cfg.head_back_radius_mm, + fallback_ratio * m_cfg.max_bridge_length_mm} + })); + + if (oresult.score >= stopval) { + polar = std::get<0>(oresult.optimum); + azimuth = std::get<1>(oresult.optimum); + double t = std::get<2>(oresult.optimum); + Vec3d endp = jp + t * spheric_to_dir(polar, azimuth); + + return DiffBridge(jp, endp, radius, m_cfg.head_back_radius_mm); + } + + return {}; } void SupportTreeBuildsteps::filter() @@ -672,7 +631,7 @@ void SupportTreeBuildsteps::filter() // Get the points that are too close to each other and keep only the // first one auto aliases = cluster(m_points, D_SP, 2); - + PtIndices filtered_indices; filtered_indices.reserve(aliases.size()); m_iheads.reserve(aliases.size()); @@ -681,136 +640,130 @@ void SupportTreeBuildsteps::filter() // Here we keep only the front point of the cluster. filtered_indices.emplace_back(a.front()); } - + // calculate the normals to the triangles for filtered points auto nmls = sla::normals(m_points, m_mesh, m_cfg.head_front_radius_mm, m_thr, filtered_indices); - + // Not all of the support points have to be a valid position for // support creation. The angle may be inappropriate or there may // not be enough space for the pinhead. Filtering is applied for // these reasons. - - ccr::SpinningMutex mutex; - auto addfn = [&mutex](PtIndices &container, unsigned val) { - std::lock_guard lk(mutex); - container.emplace_back(val); - }; - - auto filterfn = [this, &nmls, addfn](unsigned fidx, size_t i) { + + std::vector heads; heads.reserve(m_support_pts.size()); + for (const SupportPoint &sp : m_support_pts) { m_thr(); - + heads.emplace_back( + std::nan(""), + sp.head_front_radius, + 0., + m_cfg.head_penetration_mm, + Vec3d::Zero(), // dir + sp.pos.cast() // displacement + ); + } + + std::function filterfn; + filterfn = [this, &nmls, &heads, &filterfn](unsigned fidx, size_t i, double back_r) { + m_thr(); + auto n = nmls.row(Eigen::Index(i)); - + // for all normals we generate the spherical coordinates and // saturate the polar angle to 45 degrees from the bottom then // convert back to standard coordinates to get the new normal. // Then we just create a quaternion from the two normals // (Quaternion::FromTwoVectors) and apply the rotation to the // arrow head. - + auto [polar, azimuth] = dir_to_spheric(n); - + // skip if the tilt is not sane - if(polar >= PI - m_cfg.normal_cutoff_angle) { - - // We saturate the polar angle to 3pi/4 - polar = std::max(polar, 3*PI / 4); - - // save the head (pinpoint) position - Vec3d hp = m_points.row(fidx); - - double w = m_cfg.head_width_mm + - m_cfg.head_back_radius_mm + - 2*m_cfg.head_front_radius_mm; - - double pin_r = double(m_support_pts[fidx].head_front_radius); - - // Reassemble the now corrected normal - auto nn = spheric_to_dir(polar, azimuth).normalized(); - - // check available distance - EigenMesh3D::hit_result t - = pinhead_mesh_intersect(hp, // touching point - nn, // normal - pin_r, - m_cfg.head_back_radius_mm, - w); - - if(t.distance() <= w) { - - // Let's try to optimize this angle, there might be a - // viable normal that doesn't collide with the model - // geometry and its very close to the default. - - StopCriteria stc; - stc.max_iterations = m_cfg.optimizer_max_iterations; - stc.relative_score_difference = m_cfg.optimizer_rel_score_diff; - stc.stop_score = w; // space greater than w is enough - GeneticOptimizer solver(stc); - solver.seed(0); // we want deterministic behavior - - auto oresult = solver.optimize_max( - [this, pin_r, w, hp](double plr, double azm) - { - auto dir = spheric_to_dir(plr, azm).normalized(); - - double score = pinhead_mesh_distance( - hp, dir, pin_r, m_cfg.head_back_radius_mm, w); - - return score; - }, - initvals(polar, azimuth), // start with what we have - bound(3 * PI / 4, PI), // Must not exceed the tilt limit - bound(-PI, PI) // azimuth can be a full search - ); - - if(oresult.score > w) { - polar = std::get<0>(oresult.optimum); - azimuth = std::get<1>(oresult.optimum); - nn = spheric_to_dir(polar, azimuth).normalized(); - t = EigenMesh3D::hit_result(oresult.score); - } - } - - // save the verified and corrected normal - m_support_nmls.row(fidx) = nn; - - if (t.distance() > w) { - // Check distance from ground, we might have zero elevation. - if (hp(Z) + w * nn(Z) < m_builder.ground_level) { - addfn(m_iheadless, fidx); - } else { - // mark the point for needing a head. - addfn(m_iheads, fidx); - } - } else if (polar >= 3 * PI / 4) { - // Headless supports do not tilt like the headed ones - // so the normal should point almost to the ground. - addfn(m_iheadless, fidx); + if (polar < PI - m_cfg.normal_cutoff_angle) return; + + // We saturate the polar angle to 3pi/4 + polar = std::max(polar, PI - m_cfg.bridge_slope); + + // save the head (pinpoint) position + Vec3d hp = m_points.row(fidx); + + double lmin = m_cfg.head_width_mm, lmax = lmin; + + if (back_r < m_cfg.head_back_radius_mm) { + lmin = 0., lmax = m_cfg.head_penetration_mm; + } + + // The distance needed for a pinhead to not collide with model. + double w = lmin + 2 * back_r + 2 * m_cfg.head_front_radius_mm - + m_cfg.head_penetration_mm; + + double pin_r = double(m_support_pts[fidx].head_front_radius); + + // Reassemble the now corrected normal + auto nn = spheric_to_dir(polar, azimuth).normalized(); + + // check available distance + IndexedMesh::hit_result t = pinhead_mesh_intersect(hp, nn, pin_r, + back_r, w); + + if (t.distance() < w) { + // Let's try to optimize this angle, there might be a + // viable normal that doesn't collide with the model + // geometry and its very close to the default. + + Optimizer solver(get_criteria(m_cfg)); + solver.seed(0); // we want deterministic behavior + + auto oresult = solver.to_max().optimize( + [this, pin_r, back_r, hp](const opt::Input<3> &input) + { + auto &[plr, azm, l] = input; + + auto dir = spheric_to_dir(plr, azm).normalized(); + + return pinhead_mesh_intersect( + hp, dir, pin_r, back_r, l).distance(); + }, + initvals({polar, azimuth, (lmin + lmax) / 2.}), // start with what we have + bounds({ + {PI - m_cfg.bridge_slope, PI}, // Must not exceed the slope limit + {-PI, PI}, // azimuth can be a full search + {lmin, lmax} + })); + + if(oresult.score > w) { + polar = std::get<0>(oresult.optimum); + azimuth = std::get<1>(oresult.optimum); + nn = spheric_to_dir(polar, azimuth).normalized(); + lmin = std::get<2>(oresult.optimum); + t = IndexedMesh::hit_result(oresult.score); } } + + if (t.distance() > w && hp(Z) + w * nn(Z) >= m_builder.ground_level) { + Head &h = heads[fidx]; + h.id = fidx; h.dir = nn; h.width_mm = lmin; h.r_back_mm = back_r; + } else if (back_r > m_cfg.head_fallback_radius_mm) { + filterfn(fidx, i, m_cfg.head_fallback_radius_mm); + } }; - - ccr::enumerate(filtered_indices.begin(), filtered_indices.end(), filterfn); - + + ccr::for_each(size_t(0), filtered_indices.size(), + [this, &filterfn, &filtered_indices] (size_t i) { + filterfn(filtered_indices[i], i, m_cfg.head_back_radius_mm); + }); + + for (size_t i = 0; i < heads.size(); ++i) + if (heads[i].is_valid()) { + m_builder.add_head(i, heads[i]); + m_iheads.emplace_back(i); + } + m_thr(); } void SupportTreeBuildsteps::add_pinheads() { - for (unsigned i : m_iheads) { - m_thr(); - m_builder.add_head( - i, - m_cfg.head_back_radius_mm, - m_support_pts[i].head_front_radius, - m_cfg.head_width_mm, - m_cfg.head_penetration_mm, - m_support_nmls.row(i), // dir - m_support_pts[i].pos.cast() // displacement - ); - } } void SupportTreeBuildsteps::classify() @@ -819,37 +772,37 @@ void SupportTreeBuildsteps::classify() PtIndices ground_head_indices; ground_head_indices.reserve(m_iheads.size()); m_iheads_onmodel.reserve(m_iheads.size()); - + // First we decide which heads reach the ground and can be full // pillars and which shall be connected to the model surface (or // search a suitable path around the surface that leads to the // ground -- TODO) for(unsigned i : m_iheads) { m_thr(); - - auto& head = m_builder.head(i); + + Head &head = m_builder.head(i); double r = head.r_back_mm; Vec3d headjp = head.junction_point(); - + // collision check auto hit = bridge_mesh_intersect(headjp, DOWN, r); - + if(std::isinf(hit.distance())) ground_head_indices.emplace_back(i); else if(m_cfg.ground_facing_only) head.invalidate(); else m_iheads_onmodel.emplace_back(i); - + m_head_to_ground_scans[i] = hit; } - + // We want to search for clusters of points that are far enough // from each other in the XY plane to not cross their pillar bases // These clusters of support points will join in one pillar, // possibly in their centroid support point. - + auto pointfn = [this](unsigned i) { return m_builder.head(i).junction_point(); }; - + auto predicate = [this](const PointIndexEl &e1, const PointIndexEl &e2) { double d2d = distance(to_2d(e1.first), to_2d(e2.first)); @@ -864,14 +817,12 @@ void SupportTreeBuildsteps::classify() void SupportTreeBuildsteps::routing_to_ground() { - const double pradius = m_cfg.head_back_radius_mm; - ClusterEl cl_centroids; cl_centroids.reserve(m_pillar_clusters.size()); - + for (auto &cl : m_pillar_clusters) { m_thr(); - + // place all the centroid head positions into the index. We // will query for alternative pillar positions. If a sidehead // cannot connect to the cluster centroid, we have to search @@ -879,9 +830,9 @@ void SupportTreeBuildsteps::routing_to_ground() // elements in the cluster, the centroid is arbitrary and the // sidehead is allowed to connect to a nearby pillar to // increase structural stability. - + if (cl.empty()) continue; - + // get the current cluster centroid auto & thr = m_thr; const auto &points = m_points; @@ -895,43 +846,44 @@ void SupportTreeBuildsteps::routing_to_ground() assert(lcid >= 0); unsigned hid = cl[size_t(lcid)]; // Head ID - + cl_centroids.emplace_back(hid); - + Head &h = m_builder.head(hid); - h.transform(); - - create_ground_pillar(h.junction_point(), h.dir, h.r_back_mm, h.id); + + if (!create_ground_pillar(h.junction_point(), h.dir, h.r_back_mm, h.id)) { + BOOST_LOG_TRIVIAL(warning) + << "Pillar cannot be created for support point id: " << hid; + m_iheads_onmodel.emplace_back(h.id); + continue; + } } - + // now we will go through the clusters ones again and connect the // sidepoints with the cluster centroid (which is a ground pillar) // or a nearby pillar if the centroid is unreachable. size_t ci = 0; for (auto cl : m_pillar_clusters) { m_thr(); - + auto cidx = cl_centroids[ci++]; - - // TODO: don't consider the cluster centroid but calculate a - // central position where the pillar can be placed. this way - // the weight is distributed more effectively on the pillar. - - auto centerpillarID = m_builder.head_pillar(cidx).id; - - for (auto c : cl) { - m_thr(); - if (c == cidx) continue; - - auto &sidehead = m_builder.head(c); - sidehead.transform(); - - if (!connect_to_nearpillar(sidehead, centerpillarID) && - !search_pillar_and_connect(sidehead)) { - Vec3d pstart = sidehead.junction_point(); - // Vec3d pend = Vec3d{pstart(X), pstart(Y), gndlvl}; - // Could not find a pillar, create one - create_ground_pillar(pstart, sidehead.dir, pradius, sidehead.id); + + auto q = m_pillar_index.query(m_builder.head(cidx).junction_point(), 1); + if (!q.empty()) { + long centerpillarID = q.front().second; + for (auto c : cl) { + m_thr(); + if (c == cidx) continue; + + auto &sidehead = m_builder.head(c); + + if (!connect_to_nearpillar(sidehead, centerpillarID) && + !search_pillar_and_connect(sidehead)) { + Vec3d pstart = sidehead.junction_point(); + // Vec3d pend = Vec3d{pstart(X), pstart(Y), gndlvl}; + // Could not find a pillar, create one + create_ground_pillar(pstart, sidehead.dir, sidehead.r_back_mm, sidehead.id); + } } } } @@ -943,62 +895,66 @@ bool SupportTreeBuildsteps::connect_to_ground(Head &head, const Vec3d &dir) double r = head.r_back_mm; double t = bridge_mesh_distance(hjp, dir, head.r_back_mm); double d = 0, tdown = 0; - t = std::min(t, m_cfg.max_bridge_length_mm); + t = std::min(t, m_cfg.max_bridge_length_mm * r / m_cfg.head_back_radius_mm); while (d < t && !std::isinf(tdown = bridge_mesh_distance(hjp + d * dir, DOWN, r))) d += r; - + if(!std::isinf(tdown)) return false; - + Vec3d endp = hjp + d * dir; - m_builder.add_bridge(head.id, endp); - m_builder.add_junction(endp, head.r_back_mm); - - this->create_ground_pillar(endp, dir, head.r_back_mm); - - return true; + bool ret = false; + + if ((ret = create_ground_pillar(endp, dir, head.r_back_mm))) { + m_builder.add_bridge(head.id, endp); + m_builder.add_junction(endp, head.r_back_mm); + } + + return ret; } bool SupportTreeBuildsteps::connect_to_ground(Head &head) { if (connect_to_ground(head, head.dir)) return true; - + // Optimize bridge direction: // Straight path failed so we will try to search for a suitable // direction out of the cavity. auto [polar, azimuth] = dir_to_spheric(head.dir); - - StopCriteria stc; - stc.max_iterations = m_cfg.optimizer_max_iterations; - stc.relative_score_difference = m_cfg.optimizer_rel_score_diff; - stc.stop_score = 1e6; - GeneticOptimizer solver(stc); + + Optimizer solver(get_criteria(m_cfg).stop_score(1e6)); solver.seed(0); // we want deterministic behavior - + double r_back = head.r_back_mm; - Vec3d hjp = head.junction_point(); - auto oresult = solver.optimize_max( - [this, hjp, r_back](double plr, double azm) { + Vec3d hjp = head.junction_point(); + auto oresult = solver.to_max().optimize( + [this, hjp, r_back](const opt::Input<2> &input) { + auto &[plr, azm] = input; Vec3d n = spheric_to_dir(plr, azm).normalized(); return bridge_mesh_distance(hjp, n, r_back); }, - initvals(polar, azimuth), // let's start with what we have - bound(3*PI/4, PI), // Must not exceed the slope limit - bound(-PI, PI) // azimuth can be a full range search - ); - + initvals({polar, azimuth}), // let's start with what we have + bounds({ {PI - m_cfg.bridge_slope, PI}, {-PI, PI} }) + ); + Vec3d bridgedir = spheric_to_dir(oresult.optimum).normalized(); return connect_to_ground(head, bridgedir); } bool SupportTreeBuildsteps::connect_to_model_body(Head &head) { - if (head.id <= ID_UNSET) return false; - + if (head.id <= SupportTreeNode::ID_UNSET) return false; + auto it = m_head_to_ground_scans.find(unsigned(head.id)); if (it == m_head_to_ground_scans.end()) return false; - + auto &hit = it->second; + + if (!hit.is_hit()) { + // TODO scan for potential anchor points on model surface + return false; + } + Vec3d hjp = head.junction_point(); double zangle = std::asin(hit.direction()(Z)); zangle = std::max(zangle, PI/4); @@ -1006,9 +962,11 @@ bool SupportTreeBuildsteps::connect_to_model_body(Head &head) // The width of the tail head that we would like to have... h = std::min(hit.distance() - head.r_back_mm, h); - - if(h <= 0.) return false; - + + // If this is a mini pillar dont bother with the tail width, can be 0. + if (head.r_back_mm < m_cfg.head_back_radius_mm) h = std::max(h, 0.); + else if (h <= 0.) return false; + Vec3d endp{hjp(X), hjp(Y), hjp(Z) - hit.distance() + h}; auto center_hit = m_mesh.query_ray_hit(hjp, DOWN); @@ -1016,13 +974,11 @@ bool SupportTreeBuildsteps::connect_to_model_body(Head &head) Vec3d hitp = std::abs(hitdiff) < 2*head.r_back_mm? center_hit.position() : hit.position(); - head.transform(); - - long pillar_id = m_builder.add_pillar(head.id, endp, head.r_back_mm); + long pillar_id = m_builder.add_pillar(head.id, hjp.z() - endp.z()); Pillar &pill = m_builder.pillar(pillar_id); Vec3d taildir = endp - hitp; - double dist = distance(endp, hitp) + m_cfg.head_penetration_mm; + double dist = (hitp - endp).norm() + m_cfg.head_penetration_mm; double w = dist - 2 * head.r_pin_mm - head.r_back_mm; if (w < 0.) { @@ -1030,43 +986,77 @@ bool SupportTreeBuildsteps::connect_to_model_body(Head &head) w = 0.; } - Head tailhead(head.r_back_mm, head.r_pin_mm, w, - m_cfg.head_penetration_mm, taildir, hitp); + m_builder.add_anchor(head.r_back_mm, head.r_pin_mm, w, + m_cfg.head_penetration_mm, taildir, hitp); - tailhead.transform(); - pill.base = tailhead.mesh; - m_pillar_index.guarded_insert(pill.endpoint(), pill.id); - + return true; } +bool SupportTreeBuildsteps::search_pillar_and_connect(const Head &source) +{ + // Hope that a local copy takes less time than the whole search loop. + // We also need to remove elements progressively from the copied index. + PointIndex spindex = m_pillar_index.guarded_clone(); + + long nearest_id = SupportTreeNode::ID_UNSET; + + Vec3d querypt = source.junction_point(); + + while(nearest_id < 0 && !spindex.empty()) { m_thr(); + // loop until a suitable head is not found + // if there is a pillar closer than the cluster center + // (this may happen as the clustering is not perfect) + // than we will bridge to this closer pillar + + Vec3d qp(querypt(X), querypt(Y), m_builder.ground_level); + auto qres = spindex.nearest(qp, 1); + if(qres.empty()) break; + + auto ne = qres.front(); + nearest_id = ne.second; + + if(nearest_id >= 0) { + if (size_t(nearest_id) < m_builder.pillarcount()) { + if(!connect_to_nearpillar(source, nearest_id) || + m_builder.pillar(nearest_id).r < source.r_back_mm) { + nearest_id = SupportTreeNode::ID_UNSET; // continue searching + spindex.remove(ne); // without the current pillar + } + } + } + } + + return nearest_id >= 0; +} + void SupportTreeBuildsteps::routing_to_model() -{ +{ // We need to check if there is an easy way out to the bed surface. // If it can be routed there with a bridge shorter than // min_bridge_distance. - ccr::enumerate(m_iheads_onmodel.begin(), m_iheads_onmodel.end(), - [this] (const unsigned idx, size_t) { + ccr::for_each(m_iheads_onmodel.begin(), m_iheads_onmodel.end(), + [this] (const unsigned idx) { m_thr(); - + auto& head = m_builder.head(idx); - + // Search nearby pillar - if(search_pillar_and_connect(head)) { head.transform(); return; } - + if (search_pillar_and_connect(head)) { return; } + // Cannot connect to nearby pillar. We will try to search for // a route to the ground. - if(connect_to_ground(head)) { head.transform(); return; } - + if (connect_to_ground(head)) { return; } + // No route to the ground, so connect to the model body as a last resort if (connect_to_model_body(head)) { return; } - + // We have failed to route this head. BOOST_LOG_TRIVIAL(warning) - << "Failed to route model facing support point. ID: " << idx; - + << "Failed to route model facing support point. ID: " << idx; + head.invalidate(); }); } @@ -1076,19 +1066,19 @@ void SupportTreeBuildsteps::interconnect_pillars() // Now comes the algorithm that connects pillars with each other. // Ideally every pillar should be connected with at least one of its // neighbors if that neighbor is within max_pillar_link_distance - + // Pillars with height exceeding H1 will require at least one neighbor // to connect with. Height exceeding H2 require two neighbors. double H1 = m_cfg.max_solo_pillar_height_mm; double H2 = m_cfg.max_dual_pillar_height_mm; double d = m_cfg.max_pillar_link_distance_mm; - + //A connection between two pillars only counts if the height ratio is // bigger than 50% double min_height_ratio = 0.5; - + std::set pairs; - + // A function to connect one pillar with its neighbors. THe number of // neighbors is given in the configuration. This function if called // for every pillar in the pillar index. A pair of pillar will not @@ -1098,66 +1088,68 @@ void SupportTreeBuildsteps::interconnect_pillars() [this, d, &pairs, min_height_ratio, H1] (const PointIndexEl& el) { Vec3d qp = el.first; // endpoint of the pillar - + const Pillar& pillar = m_builder.pillar(el.second); // actual pillar - + // Get the max number of neighbors a pillar should connect to unsigned neighbors = m_cfg.pillar_cascade_neighbors; - + // connections are already enough for the pillar if(pillar.links >= neighbors) return; - + + double max_d = d * pillar.r / m_cfg.head_back_radius_mm; // Query all remaining points within reach - auto qres = m_pillar_index.query([qp, d](const PointIndexEl& e){ - return distance(e.first, qp) < d; + auto qres = m_pillar_index.query([qp, max_d](const PointIndexEl& e){ + return distance(e.first, qp) < max_d; }); - + // sort the result by distance (have to check if this is needed) std::sort(qres.begin(), qres.end(), [qp](const PointIndexEl& e1, const PointIndexEl& e2){ return distance(e1.first, qp) < distance(e2.first, qp); }); - + for(auto& re : qres) { // process the queried neighbors - + if(re.second == el.second) continue; // Skip self - + auto a = el.second, b = re.second; - + // Get unique hash for the given pair (order doesn't matter) auto hashval = pairhash(a, b); - + // Search for the pair amongst the remembered pairs if(pairs.find(hashval) != pairs.end()) continue; - + const Pillar& neighborpillar = m_builder.pillar(re.second); - + // this neighbor is occupied, skip - if(neighborpillar.links >= neighbors) continue; - + if (neighborpillar.links >= neighbors) continue; + if (neighborpillar.r < pillar.r) continue; + if(interconnect(pillar, neighborpillar)) { pairs.insert(hashval); - + // If the interconnection length between the two pillars is // less than 50% of the longer pillar's height, don't count if(pillar.height < H1 || neighborpillar.height / pillar.height > min_height_ratio) m_builder.increment_links(pillar); - + if(neighborpillar.height < H1 || pillar.height / neighborpillar.height > min_height_ratio) m_builder.increment_links(neighborpillar); - + } - + // connections are enough for one pillar if(pillar.links >= neighbors) break; } }; - + // Run the cascade for the pillars in the index m_pillar_index.foreach(cascadefn); - + // We would be done here if we could allow some pillars to not be // connected with any neighbors. But this might leave the support tree // unprintable. @@ -1165,16 +1157,16 @@ void SupportTreeBuildsteps::interconnect_pillars() // The current solution is to insert additional pillars next to these // lonely pillars. One or even two additional pillar might get inserted // depending on the length of the lonely pillar. - + size_t pillarcount = m_builder.pillarcount(); - + // Again, go through all pillars, this time in the whole support tree // not just the index. for(size_t pid = 0; pid < pillarcount; pid++) { auto pillar = [this, pid]() { return m_builder.pillar(pid); }; - + // Decide how many additional pillars will be needed: - + unsigned needpillars = 0; if (pillar().bridges > m_cfg.max_bridges_on_pillar) needpillars = 3; @@ -1185,28 +1177,28 @@ void SupportTreeBuildsteps::interconnect_pillars() // No neighbors could be found and the pillar is too long. needpillars = 1; } - + needpillars = std::max(pillar().links, needpillars) - pillar().links; if (needpillars == 0) continue; - + // Search for new pillar locations: - + bool found = false; double alpha = 0; // goes to 2Pi double r = 2 * m_cfg.base_radius_mm; Vec3d pillarsp = pillar().startpoint(); - + // temp value for starting point detection Vec3d sp(pillarsp(X), pillarsp(Y), pillarsp(Z) - r); - + // A vector of bool for placement feasbility std::vector canplace(needpillars, false); std::vector spts(needpillars); // vector of starting points - + double gnd = m_builder.ground_level; double min_dist = m_cfg.pillar_base_safety_distance_mm + m_cfg.base_radius_mm + EPSILON; - + while(!found && alpha < 2*PI) { for (unsigned n = 0; n < needpillars && (!n || canplace[n - 1]); @@ -1217,36 +1209,38 @@ void SupportTreeBuildsteps::interconnect_pillars() s(X) += std::cos(a) * r; s(Y) += std::sin(a) * r; spts[n] = s; - + // Check the path vertically down Vec3d check_from = s + Vec3d{0., 0., pillar().r}; auto hr = bridge_mesh_intersect(check_from, DOWN, pillar().r); Vec3d gndsp{s(X), s(Y), gnd}; - + // If the path is clear, check for pillar base collisions canplace[n] = std::isinf(hr.distance()) && std::sqrt(m_mesh.squared_distance(gndsp)) > min_dist; } - + found = std::all_of(canplace.begin(), canplace.end(), [](bool v) { return v; }); - + // 20 angles will be tried... alpha += 0.1 * PI; } - + std::vector newpills; newpills.reserve(needpillars); if (found) for (unsigned n = 0; n < needpillars; n++) { - Vec3d s = spts[n]; - Pillar p(s, Vec3d(s(X), s(Y), gnd), pillar().r); - p.add_base(m_cfg.base_height_mm, m_cfg.base_radius_mm); + Vec3d s = spts[n]; + Pillar p(Vec3d{s.x(), s.y(), gnd}, s.z() - gnd, pillar().r); if (interconnect(pillar(), p)) { Pillar &pp = m_builder.pillar(m_builder.add_pillar(p)); + + add_pillar_base(pp.id); + m_pillar_index.insert(pp.endpoint(), unsigned(pp.id)); m_builder.add_junction(s, pillar().r); @@ -1255,9 +1249,8 @@ void SupportTreeBuildsteps::interconnect_pillars() if (distance(pillarsp, s) < t) m_builder.add_bridge(pillarsp, s, pillar().r); - if (pillar().endpoint()(Z) > m_builder.ground_level) - m_builder.add_junction(pillar().endpoint(), - pillar().r); + if (pillar().endpoint()(Z) > m_builder.ground_level + pillar().r) + m_builder.add_junction(pillar().endpoint(), pillar().r); newpills.emplace_back(pp.id); m_builder.increment_links(pillar()); @@ -1275,51 +1268,10 @@ void SupportTreeBuildsteps::interconnect_pillars() m_builder.increment_links(nxpll); } } - + m_pillar_index.foreach(cascadefn); } } } -void SupportTreeBuildsteps::routing_headless() -{ - // For now we will just generate smaller headless sticks with a sharp - // ending point that connects to the mesh surface. - - // We will sink the pins into the model surface for a distance of 1/3 of - // the pin radius - for(unsigned i : m_iheadless) { - m_thr(); - - const auto R = double(m_support_pts[i].head_front_radius); - const double HWIDTH_MM = std::min(R, m_cfg.head_penetration_mm); - - // Exact support position - Vec3d sph = m_support_pts[i].pos.cast(); - Vec3d n = m_support_nmls.row(i); // mesh outward normal - Vec3d sp = sph - n * HWIDTH_MM; // stick head start point - - Vec3d sj = sp + R * n; // stick start point - - // This is only for checking - double idist = bridge_mesh_distance(sph, DOWN, R, true); - double realdist = ray_mesh_intersect(sj, DOWN).distance(); - double dist = realdist; - - if (std::isinf(dist)) dist = sph(Z) - m_builder.ground_level; - - if(std::isnan(idist) || idist < 2*R || std::isnan(dist) || dist < 2*R) { - BOOST_LOG_TRIVIAL(warning) << "Can not find route for headless" - << " support stick at: " - << sj.transpose(); - continue; - } - - bool use_endball = !std::isinf(realdist); - Vec3d ej = sj + (dist + HWIDTH_MM) * DOWN ; - m_builder.add_compact_bridge(sp, ej, n, R, use_endball); - } -} - -} -} +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportTreeBuildsteps.hpp b/src/libslic3r/SLA/SupportTreeBuildsteps.hpp index cfe78fe97a..013666f074 100644 --- a/src/libslic3r/SLA/SupportTreeBuildsteps.hpp +++ b/src/libslic3r/SLA/SupportTreeBuildsteps.hpp @@ -5,6 +5,7 @@ #include #include +#include namespace Slic3r { namespace sla { @@ -16,9 +17,7 @@ enum { // For indexing Eigen vectors as v(X), v(Y), v(Z) instead of numbers X, Y, Z }; -inline Vec2d to_vec2(const Vec3d& v3) { - return {v3(X), v3(Y)}; -} +inline Vec2d to_vec2(const Vec3d &v3) { return {v3(X), v3(Y)}; } inline std::pair dir_to_spheric(const Vec3d &n, double norm = 1.) { @@ -46,55 +45,71 @@ inline Vec3d spheric_to_dir(const std::pair &v) return spheric_to_dir(v.first, v.second); } -// This function returns the position of the centroid in the input 'clust' -// vector of point indices. -template -long cluster_centroid(const ClusterEl& clust, - const std::function &pointfn, - DistFn df) +inline Vec3d spheric_to_dir(const std::array &v) { - switch(clust.size()) { - case 0: /* empty cluster */ return ID_UNSET; - case 1: /* only one element */ return 0; - case 2: /* if two elements, there is no center */ return 0; - default: ; + return spheric_to_dir(v[0], v[1]); +} + +// Give points on a 3D ring with given center, radius and orientation +// method based on: +// https://math.stackexchange.com/questions/73237/parametric-equation-of-a-circle-in-3d-space +template +class PointRing { + std::array m_phis; + + // Two vectors that will be perpendicular to each other and to the + // axis. Values for a(X) and a(Y) are now arbitrary, a(Z) is just a + // placeholder. + // a and b vectors are perpendicular to the ring direction and to each other. + // Together they define the plane where we have to iterate with the + // given angles in the 'm_phis' vector + Vec3d a = {0, 1, 0}, b; + double m_radius = 0.; + + static inline bool constexpr is_one(double val) + { + return std::abs(std::abs(val) - 1) < 1e-20; } - // The function works by calculating for each point the average distance - // from all the other points in the cluster. We create a selector bitmask of - // the same size as the cluster. The bitmask will have two true bits and - // false bits for the rest of items and we will loop through all the - // permutations of the bitmask (combinations of two points). Get the - // distance for the two points and add the distance to the averages. - // The point with the smallest average than wins. +public: - // The complexity should be O(n^2) but we will mostly apply this function - // for small clusters only (cca 3 elements) + PointRing(const Vec3d &n) + { + m_phis = linspace_array(0., 2 * PI); - std::vector sel(clust.size(), false); // create full zero bitmask - std::fill(sel.end() - 2, sel.end(), true); // insert the two ones - std::vector avgs(clust.size(), 0.0); // store the average distances + // We have to address the case when the direction vector v (same as + // dir) is coincident with one of the world axes. In this case two of + // its components will be completely zero and one is 1.0. Our method + // becomes dangerous here due to division with zero. Instead, vector + // 'a' can be an element-wise rotated version of 'v' + if(is_one(n(X)) || is_one(n(Y)) || is_one(n(Z))) { + a = {n(Z), n(X), n(Y)}; + b = {n(Y), n(Z), n(X)}; + } + else { + a(Z) = -(n(Y)*a(Y)) / n(Z); a.normalize(); + b = a.cross(n); + } + } - do { - std::array idx; - for(size_t i = 0, j = 0; i < clust.size(); i++) if(sel[i]) idx[j++] = i; + Vec3d get(size_t idx, const Vec3d src, double r) const + { + double phi = m_phis[idx]; + double sinphi = std::sin(phi); + double cosphi = std::cos(phi); - double d = df(pointfn(clust[idx[0]]), - pointfn(clust[idx[1]])); + double rpscos = r * cosphi; + double rpssin = r * sinphi; - // add the distance to the sums for both associated points - for(auto i : idx) avgs[i] += d; + // Point on the sphere + return {src(X) + rpscos * a(X) + rpssin * b(X), + src(Y) + rpscos * a(Y) + rpssin * b(Y), + src(Z) + rpscos * a(Z) + rpssin * b(Z)}; + } +}; - // now continue with the next permutation of the bitmask with two 1s - } while(std::next_permutation(sel.begin(), sel.end())); - - // Divide by point size in the cluster to get the average (may be redundant) - for(auto& a : avgs) a /= clust.size(); - - // get the lowest average distance and return the index - auto minit = std::min_element(avgs.begin(), avgs.end()); - return long(minit - avgs.begin()); -} +//IndexedMesh::hit_result query_hit(const SupportableMesh &msh, const Bridge &br, double safety_d = std::nan("")); +//IndexedMesh::hit_result query_hit(const SupportableMesh &msh, const Head &br, double safety_d = std::nan("")); inline Vec3d dirv(const Vec3d& startp, const Vec3d& endp) { return (endp - startp).normalized(); @@ -170,8 +185,8 @@ IntegerOnly pairhash(I a, I b) } class SupportTreeBuildsteps { - const SupportConfig& m_cfg; - const EigenMesh3D& m_mesh; + const SupportTreeConfig& m_cfg; + const IndexedMesh& m_mesh; const std::vector& m_support_pts; using PtIndices = std::vector; @@ -180,7 +195,7 @@ class SupportTreeBuildsteps { PtIndices m_iheads_onmodel; PtIndices m_iheadless; // headless support points - std::map m_head_to_ground_scans; + std::map m_head_to_ground_scans; // normals for support points from model faces. PointSet m_support_nmls; @@ -206,7 +221,7 @@ class SupportTreeBuildsteps { // When bridging heads to pillars... TODO: find a cleaner solution ccr::BlockingMutex m_bridge_mutex; - inline EigenMesh3D::hit_result ray_mesh_intersect(const Vec3d& s, + inline IndexedMesh::hit_result ray_mesh_intersect(const Vec3d& s, const Vec3d& dir) { return m_mesh.query_ray_hit(s, dir); @@ -223,16 +238,24 @@ class SupportTreeBuildsteps { // point was inside the model, an "invalid" hit_result will be returned // with a zero distance value instead of a NAN. This way the result can // be used safely for comparison with other distances. - EigenMesh3D::hit_result pinhead_mesh_intersect( + IndexedMesh::hit_result pinhead_mesh_intersect( const Vec3d& s, const Vec3d& dir, double r_pin, double r_back, - double width); - - template - inline double pinhead_mesh_distance(Args&&...args) { - return pinhead_mesh_intersect(std::forward(args)...).distance(); + double width, + double safety_d); + + IndexedMesh::hit_result pinhead_mesh_intersect( + const Vec3d& s, + const Vec3d& dir, + double r_pin, + double r_back, + double width) + { + return pinhead_mesh_intersect(s, dir, r_pin, r_back, width, + r_back * m_cfg.safety_distance_mm / + m_cfg.head_back_radius_mm); } // Checking bridge (pillar and stick as well) intersection with the model. @@ -243,11 +266,21 @@ class SupportTreeBuildsteps { // point was inside the model, an "invalid" hit_result will be returned // with a zero distance value instead of a NAN. This way the result can // be used safely for comparison with other distances. - EigenMesh3D::hit_result bridge_mesh_intersect( + IndexedMesh::hit_result bridge_mesh_intersect( const Vec3d& s, const Vec3d& dir, double r, - bool ins_check = false); + double safety_d); + + IndexedMesh::hit_result bridge_mesh_intersect( + const Vec3d& s, + const Vec3d& dir, + double r) + { + return bridge_mesh_intersect(s, dir, r, + r * m_cfg.safety_distance_mm / + m_cfg.head_back_radius_mm); + } template inline double bridge_mesh_distance(Args&&...args) { @@ -268,20 +301,29 @@ class SupportTreeBuildsteps { inline bool connect_to_ground(Head& head); bool connect_to_model_body(Head &head); - - bool search_pillar_and_connect(const Head& head); + + bool search_pillar_and_connect(const Head& source); // This is a proxy function for pillar creation which will mind the gap // between the pad and the model bottom in zero elevation mode. // jp is the starting junction point which needs to be routed down. // sourcedir is the allowed direction of an optional bridge between the // jp junction and the final pillar. - void create_ground_pillar(const Vec3d &jp, + bool create_ground_pillar(const Vec3d &jp, const Vec3d &sourcedir, double radius, - long head_id = ID_UNSET); - - + long head_id = SupportTreeNode::ID_UNSET); + + void add_pillar_base(long pid) + { + m_builder.add_pillar_base(pid, m_cfg.base_height_mm, m_cfg.base_radius_mm); + } + + std::optional search_widening_path(const Vec3d &jp, + const Vec3d &dir, + double radius, + double new_radius); + public: SupportTreeBuildsteps(SupportTreeBuilder & builder, const SupportableMesh &sm); @@ -324,11 +366,6 @@ public: void interconnect_pillars(); - // Step: process the support points where there is not enough space for a - // full pinhead. In this case we will use a rounded sphere as a touching - // point and use a thinner bridge (let's call it a stick). - void routing_headless (); - inline void merge_result() { m_builder.merged_mesh(); } static bool execute(SupportTreeBuilder & builder, const SupportableMesh &sm); diff --git a/src/libslic3r/SLA/SupportTreeMesher.cpp b/src/libslic3r/SLA/SupportTreeMesher.cpp new file mode 100644 index 0000000000..15491775b4 --- /dev/null +++ b/src/libslic3r/SLA/SupportTreeMesher.cpp @@ -0,0 +1,266 @@ +#include "SupportTreeMesher.hpp" + +namespace Slic3r { namespace sla { + +Contour3D sphere(double rho, Portion portion, double fa) { + + Contour3D ret; + + // prohibit close to zero radius + if(rho <= 1e-6 && rho >= -1e-6) return ret; + + auto& vertices = ret.points; + auto& facets = ret.faces3; + + // Algorithm: + // Add points one-by-one to the sphere grid and form facets using relative + // coordinates. Sphere is composed effectively of a mesh of stacked circles. + + // adjust via rounding to get an even multiple for any provided angle. + double angle = (2*PI / floor(2*PI / fa)); + + // Ring to be scaled to generate the steps of the sphere + std::vector ring; + + for (double i = 0; i < 2*PI; i+=angle) ring.emplace_back(i); + + const auto sbegin = size_t(2*std::get<0>(portion)/angle); + const auto send = size_t(2*std::get<1>(portion)/angle); + + const size_t steps = ring.size(); + const double increment = 1.0 / double(steps); + + // special case: first ring connects to 0,0,0 + // insert and form facets. + if(sbegin == 0) + vertices.emplace_back(Vec3d(0.0, 0.0, -rho + increment*sbegin*2.0*rho)); + + auto id = coord_t(vertices.size()); + for (size_t i = 0; i < ring.size(); i++) { + // Fixed scaling + const double z = -rho + increment*rho*2.0 * (sbegin + 1.0); + // radius of the circle for this step. + const double r = std::sqrt(std::abs(rho*rho - z*z)); + Vec2d b = Eigen::Rotation2Dd(ring[i]) * Eigen::Vector2d(0, r); + vertices.emplace_back(Vec3d(b(0), b(1), z)); + + if (sbegin == 0) + (i == 0) ? facets.emplace_back(coord_t(ring.size()), 0, 1) : + facets.emplace_back(id - 1, 0, id); + ++id; + } + + // General case: insert and form facets for each step, + // joining it to the ring below it. + for (size_t s = sbegin + 2; s < send - 1; s++) { + const double z = -rho + increment*double(s*2.0*rho); + const double r = std::sqrt(std::abs(rho*rho - z*z)); + + for (size_t i = 0; i < ring.size(); i++) { + Vec2d b = Eigen::Rotation2Dd(ring[i]) * Eigen::Vector2d(0, r); + vertices.emplace_back(Vec3d(b(0), b(1), z)); + auto id_ringsize = coord_t(id - int(ring.size())); + if (i == 0) { + // wrap around + facets.emplace_back(id - 1, id, id + coord_t(ring.size() - 1) ); + facets.emplace_back(id - 1, id_ringsize, id); + } else { + facets.emplace_back(id_ringsize - 1, id_ringsize, id); + facets.emplace_back(id - 1, id_ringsize - 1, id); + } + id++; + } + } + + // special case: last ring connects to 0,0,rho*2.0 + // only form facets. + if(send >= size_t(2*PI / angle)) { + vertices.emplace_back(Vec3d(0.0, 0.0, -rho + increment*send*2.0*rho)); + for (size_t i = 0; i < ring.size(); i++) { + auto id_ringsize = coord_t(id - int(ring.size())); + if (i == 0) { + // third vertex is on the other side of the ring. + facets.emplace_back(id - 1, id_ringsize, id); + } else { + auto ci = coord_t(id_ringsize + coord_t(i)); + facets.emplace_back(ci - 1, ci, id); + } + } + } + id++; + + return ret; +} + +Contour3D cylinder(double r, double h, size_t ssteps, const Vec3d &sp) +{ + assert(ssteps > 0); + + Contour3D ret; + + auto steps = int(ssteps); + auto& points = ret.points; + auto& indices = ret.faces3; + points.reserve(2*ssteps); + double a = 2*PI/steps; + + Vec3d jp = sp; + Vec3d endp = {sp(X), sp(Y), sp(Z) + h}; + + // Upper circle points + for(int i = 0; i < steps; ++i) { + double phi = i*a; + double ex = endp(X) + r*std::cos(phi); + double ey = endp(Y) + r*std::sin(phi); + points.emplace_back(ex, ey, endp(Z)); + } + + // Lower circle points + for(int i = 0; i < steps; ++i) { + double phi = i*a; + double x = jp(X) + r*std::cos(phi); + double y = jp(Y) + r*std::sin(phi); + points.emplace_back(x, y, jp(Z)); + } + + // Now create long triangles connecting upper and lower circles + indices.reserve(2*ssteps); + auto offs = steps; + for(int i = 0; i < steps - 1; ++i) { + indices.emplace_back(i, i + offs, offs + i + 1); + indices.emplace_back(i, offs + i + 1, i + 1); + } + + // Last triangle connecting the first and last vertices + auto last = steps - 1; + indices.emplace_back(0, last, offs); + indices.emplace_back(last, offs + last, offs); + + // According to the slicing algorithms, we need to aid them with generating + // a watertight body. So we create a triangle fan for the upper and lower + // ending of the cylinder to close the geometry. + points.emplace_back(jp); int ci = int(points.size() - 1); + for(int i = 0; i < steps - 1; ++i) + indices.emplace_back(i + offs + 1, i + offs, ci); + + indices.emplace_back(offs, steps + offs - 1, ci); + + points.emplace_back(endp); ci = int(points.size() - 1); + for(int i = 0; i < steps - 1; ++i) + indices.emplace_back(ci, i, i + 1); + + indices.emplace_back(steps - 1, 0, ci); + + return ret; +} + +Contour3D pinhead(double r_pin, double r_back, double length, size_t steps) +{ + assert(steps > 0); + assert(length >= 0.); + assert(r_back > 0.); + assert(r_pin > 0.); + + Contour3D mesh; + + // We create two spheres which will be connected with a robe that fits + // both circles perfectly. + + // Set up the model detail level + const double detail = 2 * PI / steps; + + // We don't generate whole circles. Instead, we generate only the + // portions which are visible (not covered by the robe) To know the + // exact portion of the bottom and top circles we need to use some + // rules of tangent circles from which we can derive (using simple + // triangles the following relations: + + // The height of the whole mesh + const double h = r_back + r_pin + length; + double phi = PI / 2. - std::acos((r_back - r_pin) / h); + + // To generate a whole circle we would pass a portion of (0, Pi) + // To generate only a half horizontal circle we can pass (0, Pi/2) + // The calculated phi is an offset to the half circles needed to smooth + // the transition from the circle to the robe geometry + + auto &&s1 = sphere(r_back, make_portion(0, PI / 2 + phi), detail); + auto &&s2 = sphere(r_pin, make_portion(PI / 2 + phi, PI), detail); + + for (auto &p : s2.points) p.z() += h; + + mesh.merge(s1); + mesh.merge(s2); + + for (size_t idx1 = s1.points.size() - steps, idx2 = s1.points.size(); + idx1 < s1.points.size() - 1; idx1++, idx2++) { + coord_t i1s1 = coord_t(idx1), i1s2 = coord_t(idx2); + coord_t i2s1 = i1s1 + 1, i2s2 = i1s2 + 1; + + mesh.faces3.emplace_back(i1s1, i2s1, i2s2); + mesh.faces3.emplace_back(i1s1, i2s2, i1s2); + } + + auto i1s1 = coord_t(s1.points.size()) - coord_t(steps); + auto i2s1 = coord_t(s1.points.size()) - 1; + auto i1s2 = coord_t(s1.points.size()); + auto i2s2 = coord_t(s1.points.size()) + coord_t(steps) - 1; + + mesh.faces3.emplace_back(i2s2, i2s1, i1s1); + mesh.faces3.emplace_back(i1s2, i2s2, i1s1); + + return mesh; +} + +Contour3D halfcone(double baseheight, + double r_bottom, + double r_top, + const Vec3d &pos, + size_t steps) +{ + assert(steps > 0); + + if (baseheight <= 0 || steps <= 0) return {}; + + Contour3D base; + + double a = 2 * PI / steps; + auto last = int(steps - 1); + Vec3d ep{pos.x(), pos.y(), pos.z() + baseheight}; + for (size_t i = 0; i < steps; ++i) { + double phi = i * a; + double x = pos.x() + r_top * std::cos(phi); + double y = pos.y() + r_top * std::sin(phi); + base.points.emplace_back(x, y, ep.z()); + } + + for (size_t i = 0; i < steps; ++i) { + double phi = i * a; + double x = pos.x() + r_bottom * std::cos(phi); + double y = pos.y() + r_bottom * std::sin(phi); + base.points.emplace_back(x, y, pos.z()); + } + + base.points.emplace_back(pos); + base.points.emplace_back(ep); + + auto &indices = base.faces3; + auto hcenter = int(base.points.size() - 1); + auto lcenter = int(base.points.size() - 2); + auto offs = int(steps); + for (int i = 0; i < last; ++i) { + indices.emplace_back(i, i + offs, offs + i + 1); + indices.emplace_back(i, offs + i + 1, i + 1); + indices.emplace_back(i, i + 1, hcenter); + indices.emplace_back(lcenter, offs + i + 1, offs + i); + } + + indices.emplace_back(0, last, offs); + indices.emplace_back(last, offs + last, offs); + indices.emplace_back(hcenter, last, 0); + indices.emplace_back(offs, offs + last, lcenter); + + return base; +} + +}} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportTreeMesher.hpp b/src/libslic3r/SLA/SupportTreeMesher.hpp new file mode 100644 index 0000000000..63182745da --- /dev/null +++ b/src/libslic3r/SLA/SupportTreeMesher.hpp @@ -0,0 +1,117 @@ +#ifndef SUPPORTTREEMESHER_HPP +#define SUPPORTTREEMESHER_HPP + +#include "libslic3r/Point.hpp" + +#include "libslic3r/SLA/SupportTreeBuilder.hpp" +#include "libslic3r/SLA/Contour3D.hpp" + +namespace Slic3r { namespace sla { + +using Portion = std::tuple; + +inline Portion make_portion(double a, double b) +{ + return std::make_tuple(a, b); +} + +Contour3D sphere(double rho, + Portion portion = make_portion(0., 2. * PI), + double fa = (2. * PI / 360.)); + +// Down facing cylinder in Z direction with arguments: +// r: radius +// h: Height +// ssteps: how many edges will create the base circle +// sp: starting point +Contour3D cylinder(double r, + double h, + size_t steps = 45, + const Vec3d &sp = Vec3d::Zero()); + +Contour3D pinhead(double r_pin, double r_back, double length, size_t steps = 45); + +Contour3D halfcone(double baseheight, + double r_bottom, + double r_top, + const Vec3d &pt = Vec3d::Zero(), + size_t steps = 45); + +inline Contour3D get_mesh(const Head &h, size_t steps) +{ + Contour3D mesh = pinhead(h.r_pin_mm, h.r_back_mm, h.width_mm, steps); + + for(auto& p : mesh.points) p.z() -= (h.fullwidth() - h.r_back_mm); + + using Quaternion = Eigen::Quaternion; + + // We rotate the head to the specified direction. The head's pointing + // side is facing upwards so this means that it would hold a support + // point with a normal pointing straight down. This is the reason of + // the -1 z coordinate + auto quatern = Quaternion::FromTwoVectors(Vec3d{0, 0, -1}, h.dir); + + for(auto& p : mesh.points) p = quatern * p + h.pos; + + return mesh; +} + +inline Contour3D get_mesh(const Pillar &p, size_t steps) +{ + if(p.height > EPSILON) { // Endpoint is below the starting point + // We just create a bridge geometry with the pillar parameters and + // move the data. + return cylinder(p.r, p.height, steps, p.endpoint()); + } + + return {}; +} + +inline Contour3D get_mesh(const Pedestal &p, size_t steps) +{ + return halfcone(p.height, p.r_bottom, p.r_top, p.pos, steps); +} + +inline Contour3D get_mesh(const Junction &j, size_t steps) +{ + Contour3D mesh = sphere(j.r, make_portion(0, PI), 2 *PI / steps); + for(auto& p : mesh.points) p += j.pos; + return mesh; +} + +inline Contour3D get_mesh(const Bridge &br, size_t steps) +{ + using Quaternion = Eigen::Quaternion; + Vec3d v = (br.endp - br.startp); + Vec3d dir = v.normalized(); + double d = v.norm(); + + Contour3D mesh = cylinder(br.r, d, steps); + + auto quater = Quaternion::FromTwoVectors(Vec3d{0,0,1}, dir); + for(auto& p : mesh.points) p = quater * p + br.startp; + + return mesh; +} + +inline Contour3D get_mesh(const DiffBridge &br, size_t steps) +{ + double h = br.get_length(); + Contour3D mesh = halfcone(h, br.r, br.end_r, Vec3d::Zero(), steps); + + using Quaternion = Eigen::Quaternion; + + // We rotate the head to the specified direction. The head's pointing + // side is facing upwards so this means that it would hold a support + // point with a normal pointing straight down. This is the reason of + // the -1 z coordinate + auto quatern = Quaternion::FromTwoVectors(Vec3d{0, 0, 1}, br.get_dir()); + + for(auto& p : mesh.points) p = quatern * p + br.startp; + + return mesh; +} + +}} // namespace Slic3r::sla + +#endif // SUPPORTTREEMESHER_HPP diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 2402207a8a..f36e48aa66 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -4,6 +4,7 @@ #include "ClipperUtils.hpp" #include "Geometry.hpp" #include "MTUtils.hpp" +#include "Thread.hpp" #include #include @@ -35,13 +36,16 @@ bool is_zero_elevation(const SLAPrintObjectConfig &c) } // Compile the argument for support creation from the static print config. -sla::SupportConfig make_support_cfg(const SLAPrintObjectConfig& c) +sla::SupportTreeConfig make_support_cfg(const SLAPrintObjectConfig& c) { - sla::SupportConfig scfg; + sla::SupportTreeConfig scfg; scfg.enabled = c.supports_enable.getBool(); scfg.head_front_radius_mm = 0.5*c.support_head_front_diameter.getFloat(); - scfg.head_back_radius_mm = 0.5*c.support_pillar_diameter.getFloat(); + double pillar_r = 0.5 * c.support_pillar_diameter.getFloat(); + scfg.head_back_radius_mm = pillar_r; + scfg.head_fallback_radius_mm = + 0.01 * c.support_small_pillar_diameter_percent.getFloat() * pillar_r; scfg.head_penetration_mm = c.support_head_penetration.getFloat(); scfg.head_width_mm = c.support_head_width.getFloat(); scfg.object_elevation_mm = is_zero_elevation(c) ? @@ -172,6 +176,16 @@ static std::vector sla_instances(const ModelObject &mo return instances; } +std::vector SLAPrint::print_object_ids() const +{ + std::vector out; + // Reserve one more for the caller to append the ID of the Print itself. + out.reserve(m_objects.size() + 1); + for (const SLAPrintObject *print_object : m_objects) + out.emplace_back(print_object->id()); + return out; +} + SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig config) { #ifdef _DEBUG @@ -182,7 +196,6 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig con config.option("sla_print_settings_id", true); config.option("sla_material_settings_id", true); config.option("printer_settings_id", true); - config.normalize(); // Collect changes to print config. t_config_option_keys print_diff = m_print_config.diff(config); t_config_option_keys printer_diff = m_printer_config.diff(config); @@ -392,12 +405,12 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig con model_object.assign_copy(model_object_new); } else { // Synchronize Object's config. - bool object_config_changed = model_object.config != model_object_new.config; + bool object_config_changed = ! model_object.config.timestamp_matches(model_object_new.config); if (object_config_changed) - static_cast(model_object.config) = static_cast(model_object_new.config); + model_object.config.assign_config(model_object_new.config); if (! object_diff.empty() || object_config_changed) { SLAPrintObjectConfig new_config = m_default_object_config; - normalize_and_apply_config(new_config, model_object.config); + new_config.apply(model_object.config.get(), true); if (it_print_object_status != print_object_status.end()) { t_config_option_keys diff = it_print_object_status->print_object->config().diff(new_config); if (! diff.empty()) { @@ -461,9 +474,8 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig con print_object->set_instances(std::move(new_instances)); - SLAPrintObjectConfig new_config = m_default_object_config; - normalize_and_apply_config(new_config, model_object.config); - print_object->config_apply(new_config, true); + print_object->config_apply(m_default_object_config, true); + print_object->config_apply(model_object.config.get(), true); print_objects_new.emplace_back(print_object); new_objects = true; } @@ -616,7 +628,7 @@ std::string SLAPrint::validate() const return L("Cannot proceed without support points! " "Add support points or disable support generation."); - sla::SupportConfig cfg = make_support_cfg(po->config()); + sla::SupportTreeConfig cfg = make_support_cfg(po->config()); double elv = cfg.object_elevation_mm; @@ -678,7 +690,10 @@ bool SLAPrint::invalidate_step(SLAPrintStep step) void SLAPrint::process() { - if(m_objects.empty()) return; + if (m_objects.empty()) + return; + + name_tbb_thread_pool_threads(); // Assumption: at this point the print objects should be populated only with // the model objects we have to process and the instances are also filtered @@ -925,6 +940,7 @@ bool SLAPrintObject::invalidate_state_by_config_options(const std::vectorm_config.apply(other, ignore_nonexistent); } + void config_apply(const ConfigBase &other, bool ignore_nonexistent = false) { m_config.apply(other, ignore_nonexistent); } void config_apply_only(const ConfigBase &other, const t_config_option_keys &keys, bool ignore_nonexistent = false) { this->m_config.apply_only(other, keys, ignore_nonexistent); } @@ -374,7 +374,7 @@ protected: std::vector m_layers; virtual uqptr create_raster() const = 0; - virtual sla::EncodedRaster encode_raster(const sla::RasterBase &rst) const = 0; + virtual sla::RasterEncoder get_encoder() const = 0; public: virtual ~SLAPrinter() = default; @@ -385,12 +385,13 @@ public: template void draw_layers(size_t layer_num, Fn &&drawfn) { m_layers.resize(layer_num); - sla::ccr::enumerate(m_layers.begin(), m_layers.end(), - [this, &drawfn](sla::EncodedRaster& enc, size_t idx) { - auto rst = create_raster(); - drawfn(*rst, idx); - enc = encode_raster(*rst); - }); + sla::ccr::for_each(size_t(0), m_layers.size(), + [this, &drawfn] (size_t idx) { + sla::EncodedRaster& enc = m_layers[idx]; + auto rst = create_raster(); + drawfn(*rst, idx); + enc = rst->encode(get_encoder()); + }); } }; @@ -419,6 +420,8 @@ public: void clear() override; bool empty() const override { return m_objects.empty(); } + // List of existing PrintObject IDs, to remove notifications for non-existent IDs. + std::vector print_object_ids() const; ApplyStatus apply(const Model &model, DynamicPrintConfig config) override; void set_task(const TaskParams ¶ms) override; void process() override; @@ -433,7 +436,7 @@ public: // in the notification center. const SLAPrintObject* get_object(ObjectID object_id) const { auto it = std::find_if(m_objects.begin(), m_objects.end(), - [object_id](const SLAPrintObject *obj) { return *static_cast(obj) == object_id; }); + [object_id](const SLAPrintObject *obj) { return obj->id() == object_id; }); return (it == m_objects.end()) ? nullptr : *it; } @@ -544,7 +547,7 @@ private: bool is_zero_elevation(const SLAPrintObjectConfig &c); -sla::SupportConfig make_support_cfg(const SLAPrintObjectConfig& c); +sla::SupportTreeConfig make_support_cfg(const SLAPrintObjectConfig& c); sla::PadConfig::EmbedObject builtin_pad_cfg(const SLAPrintObjectConfig& c); diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index e421e9c1dc..11c8c6f4e6 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -92,9 +93,10 @@ void SLAPrint::Steps::apply_printer_corrections(SLAPrintObject &po, SliceOrigin coord_t clpr_offs = scaled(doffs); faded_lyrs = std::min(po.m_slice_index.size(), faded_lyrs); + size_t faded_lyrs_efc = std::max(size_t(1), faded_lyrs - 1); - auto efc = [start_efc, faded_lyrs](size_t pos) { - return (faded_lyrs - 1 - pos) * start_efc / (faded_lyrs - 1); + auto efc = [start_efc, faded_lyrs_efc](size_t pos) { + return (faded_lyrs_efc - pos) * start_efc / faded_lyrs_efc; }; std::vector &slices = o == soModel ? @@ -187,7 +189,7 @@ void SLAPrint::Steps::drill_holes(SLAPrintObject &po) } if (MeshBoolean::cgal::does_self_intersect(*holes_mesh_cgal)) - throw std::runtime_error(L("Too much overlapping holes.")); + throw Slic3r::SlicingError(L("Too many overlapping holes.")); auto hollowed_mesh_cgal = MeshBoolean::cgal::triangle_mesh_to_cgal(hollowed_mesh); @@ -195,7 +197,7 @@ void SLAPrint::Steps::drill_holes(SLAPrintObject &po) MeshBoolean::cgal::minus(*hollowed_mesh_cgal, *holes_mesh_cgal); hollowed_mesh = MeshBoolean::cgal::cgal_to_triangle_mesh(*hollowed_mesh_cgal); } catch (const std::runtime_error &) { - throw std::runtime_error(L( + throw Slic3r::SlicingError(L( "Drilling holes into the mesh failed. " "This is usually caused by broken model. Try to fix it first.")); } @@ -241,7 +243,7 @@ void SLAPrint::Steps::slice_model(SLAPrintObject &po) if(slindex_it == po.m_slice_index.end()) //TRN To be shown at the status bar on SLA slicing error. - throw std::runtime_error( + throw Slic3r::RuntimeError( L("Slicing had to be stopped due to an internal error: " "Inconsistent slice index.")); @@ -264,11 +266,12 @@ void SLAPrint::Steps::slice_model(SLAPrintObject &po) std::vector interior_slices; interior_slicer.slice(slice_grid, SlicingMode::Regular, closing_r, &interior_slices, thr); - sla::ccr::enumerate(interior_slices.begin(), interior_slices.end(), - [&po](const ExPolygons &slice, size_t i) { - po.m_model_slices[i] = - diff_ex(po.m_model_slices[i], slice); - }); + sla::ccr::for_each(size_t(0), interior_slices.size(), + [&po, &interior_slices] (size_t i) { + const ExPolygons &slice = interior_slices[i]; + po.m_model_slices[i] = + diff_ex(po.m_model_slices[i], slice); + }); } auto mit = slindex_it; @@ -360,18 +363,6 @@ void SLAPrint::Steps::support_points(SLAPrintObject &po) // removed them on purpose. No calculation will be done. po.m_supportdata->pts = po.transformed_support_points(); } - - // If the zero elevation mode is engaged, we have to filter out all the - // points that are on the bottom of the object - if (is_zero_elevation(po.config())) { - double tolerance = po.config().pad_enable.getBool() ? - po.m_config.pad_wall_thickness.getFloat() : - po.m_config.support_base_height.getFloat(); - - remove_bottom_points(po.m_supportdata->pts, - po.m_supportdata->emesh.ground_level(), - tolerance); - } } void SLAPrint::Steps::support_tree(SLAPrintObject &po) @@ -382,6 +373,13 @@ void SLAPrint::Steps::support_tree(SLAPrintObject &po) if (pcfg.embed_object) po.m_supportdata->emesh.ground_level_offset(pcfg.wall_thickness_mm); + + // If the zero elevation mode is engaged, we have to filter out all the + // points that are on the bottom of the object + if (is_zero_elevation(po.config())) { + remove_bottom_points(po.m_supportdata->pts, + float(po.m_supportdata->emesh.ground_level() + EPSILON)); + } po.m_supportdata->cfg = make_support_cfg(po.m_config); // po.m_supportdata->emesh.load_holes(po.transformed_drainhole_points()); @@ -449,7 +447,7 @@ void SLAPrint::Steps::generate_pad(SLAPrintObject &po) { auto &pad_mesh = po.m_supportdata->support_tree_ptr->retrieve_mesh(sla::MeshType::Pad); if (!validate_pad(pad_mesh, pcfg)) - throw std::runtime_error( + throw Slic3r::SlicingError( L("No pad can be generated for this model with the " "current configuration")); @@ -617,7 +615,7 @@ void SLAPrint::Steps::initialize_printer_input() for(const SliceRecord& slicerecord : o->get_slice_index()) { if (!slicerecord.is_valid()) - throw std::runtime_error( + throw Slic3r::SlicingError( L("There are unprintable objects. Try to " "adjust support settings to make the " "objects printable.")); @@ -684,14 +682,16 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { using Lock = std::lock_guard; // Going to parallel: - auto printlayerfn = [ + auto printlayerfn = [this, // functions and read only vars areafn, area_fill, display_area, exp_time, init_exp_time, fast_tilt, slow_tilt, delta_fade_time, // write vars &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers, - &fast_layers, &fade_layer_time](PrintLayer& layer, size_t sliced_layer_cnt) + &fast_layers, &fade_layer_time](size_t sliced_layer_cnt) { + PrintLayer &layer = m_print->m_printer_input[sliced_layer_cnt]; + // vector of slice record references auto& slicerecord_references = layer.slices(); @@ -794,7 +794,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { // sequential version for debugging: // for(size_t i = 0; i < m_printer_input.size(); ++i) printlayerfn(i); - sla::ccr::enumerate(printer_input.begin(), printer_input.end(), printlayerfn); + sla::ccr::for_each(size_t(0), printer_input.size(), printlayerfn); auto SCALING2 = SCALING_FACTOR * SCALING_FACTOR; print_statistics.support_used_material = supports_volume * SCALING2; diff --git a/src/libslic3r/Semver.hpp b/src/libslic3r/Semver.hpp index 24ca74f837..f55fa9f9f4 100644 --- a/src/libslic3r/Semver.hpp +++ b/src/libslic3r/Semver.hpp @@ -10,6 +10,8 @@ #include "semver/semver.h" +#include "Exception.hpp" + namespace Slic3r { @@ -38,7 +40,7 @@ public: { auto parsed = parse(str); if (! parsed) { - throw std::runtime_error(std::string("Could not parse version string: ") + str); + throw Slic3r::RuntimeError(std::string("Could not parse version string: ") + str); } ver = parsed->ver; parsed->ver = semver_zero(); diff --git a/src/libslic3r/ShortestPath.cpp b/src/libslic3r/ShortestPath.cpp index 314bbf7163..3d5903df13 100644 --- a/src/libslic3r/ShortestPath.cpp +++ b/src/libslic3r/ShortestPath.cpp @@ -1973,4 +1973,59 @@ std::vector chain_print_object_instances(const Print &prin return out; } +Polylines chain_lines(const std::vector &lines, const double point_distance_epsilon) +{ + // Create line end point lookup. + struct LineEnd { + LineEnd(const Line *line, bool start) : line(line), start(start) {} + const Line *line; + // Is it the start or end point? + bool start; + const Point& point() const { return start ? line->a : line->b; } + const Point& other_point() const { return start ? line->b : line->a; } + LineEnd other_end() const { return LineEnd(line, ! start); } + bool operator==(const LineEnd &rhs) const { return this->line == rhs.line && this->start == rhs.start; } + }; + struct LineEndAccessor { + const Point* operator()(const LineEnd &pt) const { return &pt.point(); } + }; + typedef ClosestPointInRadiusLookup ClosestPointLookupType; + ClosestPointLookupType closest_end_point_lookup(point_distance_epsilon); + for (const Line &line : lines) { + closest_end_point_lookup.insert(LineEnd(&line, true)); + closest_end_point_lookup.insert(LineEnd(&line, false)); + } + + // Chain the lines. + std::vector line_consumed(lines.size(), false); + static const double point_distance_epsilon2 = point_distance_epsilon * point_distance_epsilon; + Polylines out; + for (const Line &seed : lines) + if (! line_consumed[&seed - lines.data()]) { + line_consumed[&seed - lines.data()] = true; + closest_end_point_lookup.erase(LineEnd(&seed, false)); + closest_end_point_lookup.erase(LineEnd(&seed, true)); + Polyline pl { seed.a, seed.b }; + for (size_t round = 0; round < 2; ++ round) { + for (;;) { + auto [line_end, dist2] = closest_end_point_lookup.find(pl.last_point()); + if (line_end == nullptr || dist2 >= point_distance_epsilon2) + // Cannot extent in this direction. + break; + // Average the last point. + pl.points.back() = (0.5 * (pl.points.back().cast() + line_end->point().cast())).cast(); + // and extend with the new line segment. + pl.points.emplace_back(line_end->other_point()); + closest_end_point_lookup.erase(*line_end); + closest_end_point_lookup.erase(line_end->other_end()); + line_consumed[line_end->line - lines.data()] = true; + } + // reverse and try the oter direction. + pl.reverse(); + } + out.emplace_back(std::move(pl)); + } + return out; +} + } // namespace Slic3r diff --git a/src/libslic3r/ShortestPath.hpp b/src/libslic3r/ShortestPath.hpp index 65d8b7f239..14912ee857 100644 --- a/src/libslic3r/ShortestPath.hpp +++ b/src/libslic3r/ShortestPath.hpp @@ -33,6 +33,8 @@ class Print; struct PrintInstance; std::vector chain_print_object_instances(const Print &print); +// Chain lines into polylines. +Polylines chain_lines(const std::vector &lines, const double point_distance_epsilon); } // namespace Slic3r diff --git a/src/libslic3r/Slicing.cpp b/src/libslic3r/Slicing.cpp index 82d2d19890..16068dde44 100644 --- a/src/libslic3r/Slicing.cpp +++ b/src/libslic3r/Slicing.cpp @@ -170,24 +170,15 @@ SlicingParameters SlicingParameters::create_from_config( return params; } -std::vector> layer_height_ranges(const t_layer_config_ranges &config_ranges) -{ - std::vector> out; - out.reserve(config_ranges.size()); - for (const auto &kvp : config_ranges) - out.emplace_back(kvp.first, kvp.second.option("layer_height")->getFloat()); - return out; -} - // Convert layer_config_ranges to layer_height_profile. Both are referenced to z=0, meaning the raft layers are not accounted for // in the height profile and the printed object may be lifted by the raft thickness at the time of the G-code generation. std::vector layer_height_profile_from_ranges( const SlicingParameters &slicing_params, - const t_layer_config_ranges &layer_config_ranges) // #ys_FIXME_experiment + const t_layer_config_ranges &layer_config_ranges) { // 1) If there are any height ranges, trim one by the other to make them non-overlapping. Insert the 1st layer if fixed. std::vector> ranges_non_overlapping; - ranges_non_overlapping.reserve(layer_config_ranges.size() * 4); // #ys_FIXME_experiment + ranges_non_overlapping.reserve(layer_config_ranges.size() * 4); if (slicing_params.first_object_layer_height_fixed()) ranges_non_overlapping.push_back(std::pair( t_layer_height_range(0., slicing_params.first_object_layer_height), diff --git a/src/libslic3r/Slicing.hpp b/src/libslic3r/Slicing.hpp index 2fd609b2c5..e151b208f4 100644 --- a/src/libslic3r/Slicing.hpp +++ b/src/libslic3r/Slicing.hpp @@ -17,6 +17,7 @@ namespace Slic3r class PrintConfig; class PrintObjectConfig; +class ModelConfig; class ModelObject; class DynamicPrintConfig; @@ -128,9 +129,7 @@ inline bool equal_layering(const SlicingParameters &sp1, const SlicingParameters } typedef std::pair t_layer_height_range; -typedef std::map t_layer_config_ranges; - -extern std::vector> layer_height_ranges(const t_layer_config_ranges &config_ranges); +typedef std::map t_layer_config_ranges; extern std::vector layer_height_profile_from_ranges( const SlicingParameters &slicing_params, diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 43f582d5f9..1669f60d21 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -409,7 +409,7 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) export_print_z_polygons_and_extrusions_to_svg( debug_out_path("support-w-fills-%d-%lf.svg", iRun, layers_sorted[i]->print_z).c_str(), layers_sorted.data() + i, j - i, - *object.support_layers[layer_id]); + *object.support_layers()[layer_id]); ++layer_id; } i = j; @@ -597,8 +597,8 @@ public: ::fwrite(&n_points, 4, 1, file); for (uint32_t j = 0; j < n_points; ++ j) { const Point &pt = poly.points[j]; - ::fwrite(&pt.x, sizeof(coord_t), 1, file); - ::fwrite(&pt.y, sizeof(coord_t), 1, file); + ::fwrite(&pt.x(), sizeof(coord_t), 1, file); + ::fwrite(&pt.y(), sizeof(coord_t), 1, file); } } n_polygons = m_trimming_polygons->size(); @@ -609,8 +609,8 @@ public: ::fwrite(&n_points, 4, 1, file); for (uint32_t j = 0; j < n_points; ++ j) { const Point &pt = poly.points[j]; - ::fwrite(&pt.x, sizeof(coord_t), 1, file); - ::fwrite(&pt.y, sizeof(coord_t), 1, file); + ::fwrite(&pt.x(), sizeof(coord_t), 1, file); + ::fwrite(&pt.y(), sizeof(coord_t), 1, file); } } ::fclose(file); @@ -972,8 +972,8 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ std::vector blockers = object.slice_support_blockers(); // Append custom supports. - object.project_and_append_custom_enforcers(enforcers); - object.project_and_append_custom_blockers(blockers); + object.project_and_append_custom_facets(false, EnforcerBlockerType::ENFORCER, enforcers); + object.project_and_append_custom_facets(false, EnforcerBlockerType::BLOCKER, blockers); // Output layers, sorted by top Z. MyLayersPtr contact_out; @@ -1134,7 +1134,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ { ::Slic3r::SVG svg(debug_out_path("support-top-contacts-raw-run%d-layer%d-region%d.svg", iRun, layer_id, - std::find_if(layer.regions.begin(), layer.regions.end(), [layerm](const LayerRegion* other){return other == layerm;}) - layer.regions.begin()), + std::find_if(layer.regions().begin(), layer.regions().end(), [layerm](const LayerRegion* other){return other == layerm;}) - layer.regions().begin()), get_extents(diff_polygons)); Slic3r::ExPolygons expolys = union_ex(diff_polygons, false); svg.draw(expolys); @@ -1152,7 +1152,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ Slic3r::SVG::export_expolygons( debug_out_path("support-top-contacts-filtered-run%d-layer%d-region%d-z%f.svg", iRun, layer_id, - std::find_if(layer.regions.begin(), layer.regions.end(), [layerm](const LayerRegion* other){return other == layerm;}) - layer.regions.begin(), + std::find_if(layer.regions().begin(), layer.regions().end(), [layerm](const LayerRegion* other){return other == layerm;}) - layer.regions().begin(), layer.print_z), union_ex(diff_polygons, false)); #endif /* SLIC3R_DEBUG */ @@ -1482,7 +1482,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::bottom_conta svg.draw(union_ex(top, false), "blue", 0.5f); svg.draw(union_ex(projection_raw, true), "red", 0.5f); svg.draw_outline(union_ex(projection_raw, true), "red", "blue", scale_(0.1f)); - svg.draw(layer.slices, "green", 0.5f); + svg.draw(layer.lslices, "green", 0.5f); } #endif /* SLIC3R_DEBUG */ diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index c6991c057b..b45440605b 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -15,7 +15,7 @@ #define ENABLE_RENDER_STATISTICS 0 // Shows an imgui dialog with camera related data #define ENABLE_CAMERA_STATISTICS 0 -// Render the picking pass instead of the main scene (use [T] key to toggle between regular rendering and picking pass only rendering) +// Render the picking pass instead of the main scene (use [T] key to toggle between regular rendering and picking pass only rendering) #define ENABLE_RENDER_PICKING_PASS 0 // Enable extracting thumbnails from selected gcode and save them as png files #define ENABLE_THUMBNAIL_GENERATOR_DEBUG 0 @@ -39,11 +39,8 @@ //=================== #define ENABLE_2_3_0_ALPHA1 1 -// Enable rendering of objects colored by facets' slope -#define ENABLE_SLOPE_RENDERING (1 && ENABLE_2_3_0_ALPHA1) - // Enable rendering of objects using environment map -#define ENABLE_ENVIRONMENT_MAP (1 && ENABLE_2_3_0_ALPHA1) +#define ENABLE_ENVIRONMENT_MAP (0 && ENABLE_2_3_0_ALPHA1) // Enable smoothing of objects normals #define ENABLE_SMOOTH_NORMALS (0 && ENABLE_2_3_0_ALPHA1) @@ -54,8 +51,10 @@ // Enable built-in DPI changed event handler of wxWidgets 3.1.3 #define ENABLE_WX_3_1_3_DPI_CHANGED_EVENT (1 && ENABLE_2_3_0_ALPHA1) -// Enable changing application layout without the need to restart -#define ENABLE_LAYOUT_NO_RESTART (1 && ENABLE_2_3_0_ALPHA1) +// Enable G-Code viewer +#define ENABLE_GCODE_VIEWER (1 && ENABLE_2_3_0_ALPHA1) +#define ENABLE_GCODE_VIEWER_STATISTICS (0 && ENABLE_GCODE_VIEWER) +#define ENABLE_GCODE_VIEWER_DATA_CHECKING (0 && ENABLE_GCODE_VIEWER) #endif // _prusaslicer_technologies_h_ diff --git a/src/libslic3r/Thread.cpp b/src/libslic3r/Thread.cpp new file mode 100644 index 0000000000..a78820fe49 --- /dev/null +++ b/src/libslic3r/Thread.cpp @@ -0,0 +1,203 @@ +#ifdef _WIN32 + #include + #include + #include +#else + // any posix system + #include +#endif + +#include +#include +#include +#include +#include + +#define SLIC3R_THREAD_NAME_WIN32_MODERN + +#include "Thread.hpp" + +namespace Slic3r { + +#ifdef _WIN32 +#ifdef SLIC3R_THREAD_NAME_WIN32_MODERN + + static void WindowsSetThreadName(HANDLE hThread, const char *thread_name) + { + size_t len = strlen(thread_name); + if (len < 1024) { + // Allocate the temp string on stack. + wchar_t buf[1024]; + ::SetThreadDescription(hThread, boost::nowide::widen(buf, 1024, thread_name)); + } else { + // Allocate dynamically. + ::SetThreadDescription(hThread, boost::nowide::widen(thread_name).c_str()); + } + } + +#else // SLIC3R_THREAD_NAME_WIN32_MODERN + // use the old way by throwing an exception + + const DWORD MS_VC_EXCEPTION=0x406D1388; + + #pragma pack(push,8) + typedef struct tagTHREADNAME_INFO + { + DWORD dwType; // Must be 0x1000. + LPCSTR szName; // Pointer to name (in user addr space). + DWORD dwThreadID; // Thread ID (-1=caller thread). + DWORD dwFlags; // Reserved for future use, must be zero. + } THREADNAME_INFO; + #pragma pack(pop) + static void WindowsSetThreadName(HANDLE hThread, const char *thread_name) + { + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = threadName; + info.dwThreadID = ::GetThreadId(hThread); + info.dwFlags = 0; + + __try + { + RaiseException(MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info); + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + } + } + +#endif // SLIC3R_THREAD_NAME_WIN32_MODERN + +// posix +void set_thread_name(std::thread &thread, const char *thread_name) +{ + WindowsSetThreadName(static_cast(thread.native_handle()), thread_name); +} + +void set_thread_name(boost::thread &thread, const char *thread_name) +{ + WindowsSetThreadName(static_cast(thread.native_handle()), thread_name); +} + +void set_current_thread_name(const char *thread_name) +{ + WindowsSetThreadName(::GetCurrentThread(), thread_name); +} + +std::string get_current_thread_name() +{ + wchar_t *ptr = nullptr; + ::GetThreadDescription(::GetCurrentThread(), &ptr); + return (ptr == nullptr) ? std::string() : boost::nowide::narrow(ptr); +} + +#else // _WIN32 + +#ifdef __APPLE__ + +// Appe screwed the Posix norm. +void set_thread_name(std::thread &thread, const char *thread_name) +{ +// not supported +// pthread_setname_np(thread.native_handle(), thread_name); + throw CriticalException("Not supported"); +} + +void set_thread_name(boost::thread &thread, const char *thread_name) +{ +// not supported +// pthread_setname_np(thread.native_handle(), thread_name); + throw CriticalException("Not supported"); +} + +void set_current_thread_name(const char *thread_name) +{ + pthread_setname_np(thread_name); +} + +std::string get_current_thread_name() +{ +// not supported +// char buf[16]; +// return std::string(thread_getname_np(buf, 16) == 0 ? buf : ""); + throw CriticalException("Not supported"); +} + +#else + +// posix +void set_thread_name(std::thread &thread, const char *thread_name) +{ + pthread_setname_np(thread.native_handle(), thread_name); +} + +void set_thread_name(boost::thread &thread, const char *thread_name) +{ + pthread_setname_np(thread.native_handle(), thread_name); +} + +void set_current_thread_name(const char *thread_name) +{ + pthread_setname_np(pthread_self(), thread_name); +} + +std::string get_current_thread_name() +{ + char buf[16]; + return std::string(pthread_getname_np(pthread_self(), buf, 16) == 0 ? buf : ""); +} + +#endif + +#endif // _WIN32 + +// Spawn (n - 1) worker threads on Intel TBB thread pool and name them by an index and a system thread ID. +void name_tbb_thread_pool_threads() +{ + static bool initialized = false; + if (initialized) + return; + initialized = true; + + const size_t nthreads_hw = std::thread::hardware_concurrency(); + size_t nthreads = nthreads_hw; + +#ifdef SLIC3R_PROFILE + // Shiny profiler is not thread safe, thus disable parallelization. + nthreads = 1; +#endif + + if (nthreads != nthreads_hw) + new tbb::task_scheduler_init(nthreads); + + std::atomic nthreads_running(0); + std::condition_variable cv; + std::mutex cv_m; + auto master_thread_id = tbb::this_tbb_thread::get_id(); + tbb::parallel_for( + tbb::blocked_range(0, nthreads, 1), + [&nthreads_running, nthreads, &master_thread_id, &cv, &cv_m](const tbb::blocked_range &range) { + assert(range.begin() + 1 == range.end()); + if (nthreads_running.fetch_add(1) + 1 == nthreads) { + // All threads are spinning. + // Wake them up. + cv.notify_all(); + } else { + // Wait for the last thread to wake the others. + std::unique_lock lk(cv_m); + cv.wait(lk, [&nthreads_running, nthreads]{return nthreads_running == nthreads;}); + } + auto thread_id = tbb::this_tbb_thread::get_id(); + if (thread_id == master_thread_id) { + // The calling thread runs the 0'th task. + assert(range.begin() == 0); + } else { + assert(range.begin() > 0); + std::ostringstream name; + name << "slic3r_tbb_" << range.begin(); + set_current_thread_name(name.str().c_str()); + } + }); +} + +} diff --git a/src/libslic3r/Thread.hpp b/src/libslic3r/Thread.hpp new file mode 100644 index 0000000000..e1052180d3 --- /dev/null +++ b/src/libslic3r/Thread.hpp @@ -0,0 +1,47 @@ +#ifndef GUI_THREAD_HPP +#define GUI_THREAD_HPP + +#include +#include +#include +#include + +namespace Slic3r { + +// Set / get thread name. +// pthread_setname_np supports maximum 15 character thread names! (16th character is the null terminator) +// Methods taking the thread as an argument are not supported by OSX. +void set_thread_name(std::thread &thread, const char *thread_name); +inline void set_thread_name(std::thread &thread, const std::string &thread_name) { set_thread_name(thread, thread_name.c_str()); } +void set_thread_name(boost::thread &thread, const char *thread_name); +inline void set_thread_name(boost::thread &thread, const std::string &thread_name) { set_thread_name(thread, thread_name.c_str()); } +void set_current_thread_name(const char *thread_name); +inline void set_current_thread_name(const std::string &thread_name) { set_current_thread_name(thread_name.c_str()); } + +// Not supported by OSX. +std::string get_current_thread_name(); + +// To be called somewhere before the TBB threads are spinned for the first time, to +// give them names recognizible in the debugger. +void name_tbb_thread_pool_threads(); + +template +inline boost::thread create_thread(boost::thread::attributes &attrs, Fn &&fn) +{ + // Duplicating the stack allocation size of Thread Building Block worker + // threads of the thread pool: allocate 4MB on a 64bit system, allocate 2MB + // on a 32bit system by default. + + attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024)); + return boost::thread{attrs, std::forward(fn)}; +} + +template inline boost::thread create_thread(Fn &&fn) +{ + boost::thread::attributes attrs; + return create_thread(attrs, std::forward(fn)); +} + +} + +#endif // GUI_THREAD_HPP diff --git a/src/libslic3r/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp index 17edf1b5a8..8ba34e5160 100644 --- a/src/libslic3r/TriangleMesh.cpp +++ b/src/libslic3r/TriangleMesh.cpp @@ -1,3 +1,4 @@ +#include "Exception.hpp" #include "TriangleMesh.hpp" #include "ClipperUtils.hpp" #include "Geometry.hpp" @@ -70,7 +71,7 @@ TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector &fac stl_get_size(&stl); } -TriangleMesh::TriangleMesh(const indexed_triangle_set &M) +TriangleMesh::TriangleMesh(const indexed_triangle_set &M) : repaired(false) { stl.stats.type = inmemory; @@ -420,7 +421,7 @@ std::deque TriangleMesh::find_unvisited_neighbors(std::vectorrepaired) - throw std::runtime_error("find_unvisited_neighbors() requires repair()"); + throw Slic3r::RuntimeError("find_unvisited_neighbors() requires repair()"); // If the visited list is empty, populate it with false for every facet. if (facet_visited.empty()) @@ -683,7 +684,7 @@ void TriangleMeshSlicer::init(const TriangleMesh *_mesh, throw_on_cancel_callbac { mesh = _mesh; if (! mesh->has_shared_vertices()) - throw std::invalid_argument("TriangleMeshSlicer was passed a mesh without shared vertices."); + throw Slic3r::InvalidArgument("TriangleMeshSlicer was passed a mesh without shared vertices."); throw_on_cancel(); facets_edges.assign(_mesh->stl.stats.number_of_facets * 3, -1); diff --git a/src/libslic3r/TriangleSelector.cpp b/src/libslic3r/TriangleSelector.cpp new file mode 100644 index 0000000000..c69ab6d9af --- /dev/null +++ b/src/libslic3r/TriangleSelector.cpp @@ -0,0 +1,766 @@ +#include "TriangleSelector.hpp" +#include "Model.hpp" + + +namespace Slic3r { + + + +// sides_to_split==-1 : just restore previous split +void TriangleSelector::Triangle::set_division(int sides_to_split, int special_side_idx) +{ + assert(sides_to_split >=-1 && sides_to_split <= 3); + assert(special_side_idx >=-1 && special_side_idx < 3); + + // If splitting one or two sides, second argument must be provided. + assert(sides_to_split != 1 || special_side_idx != -1); + assert(sides_to_split != 2 || special_side_idx != -1); + + if (sides_to_split != -1) { + this->number_of_splits = sides_to_split; + if (sides_to_split != 0) { + assert(old_number_of_splits == 0); + this->special_side_idx = special_side_idx; + this->old_number_of_splits = sides_to_split; + } + } + else { + assert(old_number_of_splits != 0); + this->number_of_splits = old_number_of_splits; + // indices of children should still be there. + } +} + + + +void TriangleSelector::select_patch(const Vec3f& hit, int facet_start, + const Vec3f& source, float radius, + CursorType cursor_type, EnforcerBlockerType new_state, + const Transform3d& trafo) +{ + assert(facet_start < m_orig_size_indices); + + // Save current cursor center, squared radius and camera direction, so we don't + // have to pass it around. + m_cursor = Cursor(hit, source, radius, cursor_type, trafo); + + // In case user changed cursor size since last time, update triangle edge limit. + if (m_old_cursor_radius != radius) { + set_edge_limit(radius / 5.f); + m_old_cursor_radius = radius; + } + + // Now start with the facet the pointer points to and check all adjacent facets. + std::vector facets_to_check{facet_start}; + std::vector visited(m_orig_size_indices, false); // keep track of facets we already processed + int facet_idx = 0; // index into facets_to_check + while (facet_idx < int(facets_to_check.size())) { + int facet = facets_to_check[facet_idx]; + if (! visited[facet]) { + if (select_triangle(facet, new_state)) { + // add neighboring facets to list to be proccessed later + for (int n=0; n<3; ++n) { + int neighbor_idx = m_mesh->stl.neighbors_start[facet].neighbor[n]; + if (neighbor_idx >=0 && (m_cursor.type == SPHERE || faces_camera(neighbor_idx))) + facets_to_check.push_back(neighbor_idx); + } + } + } + visited[facet] = true; + ++facet_idx; + } +} + + + +// Selects either the whole triangle (discarding any children it had), or divides +// the triangle recursively, selecting just subtriangles truly inside the circle. +// This is done by an actual recursive call. Returns false if the triangle is +// outside the cursor. +bool TriangleSelector::select_triangle(int facet_idx, EnforcerBlockerType type, bool recursive_call) +{ + assert(facet_idx < int(m_triangles.size())); + + Triangle* tr = &m_triangles[facet_idx]; + if (! tr->valid) + return false; + + int num_of_inside_vertices = vertices_inside(facet_idx); + + if (num_of_inside_vertices == 0 + && ! is_pointer_in_triangle(facet_idx) + && ! is_edge_inside_cursor(facet_idx)) + return false; + + if (num_of_inside_vertices == 3) { + // dump any subdivision and select whole triangle + undivide_triangle(facet_idx); + tr->set_state(type); + } else { + // the triangle is partially inside, let's recursively divide it + // (if not already) and try selecting its children. + + if (! tr->is_split() && tr->get_state() == type) { + // This is leaf triangle that is already of correct type as a whole. + // No need to split, all children would end up selected anyway. + return true; + } + + split_triangle(facet_idx); + tr = &m_triangles[facet_idx]; // might have been invalidated + + + int num_of_children = tr->number_of_split_sides() + 1; + if (num_of_children != 1) { + for (int i=0; ichildren.size())); + assert(tr->children[i] < int(m_triangles.size())); + + select_triangle(tr->children[i], type, true); + tr = &m_triangles[facet_idx]; // might have been invalidated + } + } + } + + if (! recursive_call) { + // In case that all children are leafs and have the same state now, + // they may be removed and substituted by the parent triangle. + remove_useless_children(facet_idx); + + // Make sure that we did not lose track of invalid triangles. + assert(m_invalid_triangles == std::count_if(m_triangles.begin(), m_triangles.end(), + [](const Triangle& tr) { return ! tr.valid; })); + + // Do garbage collection maybe? + if (2*m_invalid_triangles > int(m_triangles.size())) + garbage_collect(); + } + return true; +} + + + +void TriangleSelector::set_facet(int facet_idx, EnforcerBlockerType state) +{ + assert(facet_idx < m_orig_size_indices); + undivide_triangle(facet_idx); + assert(! m_triangles[facet_idx].is_split()); + m_triangles[facet_idx].set_state(state); +} + +void TriangleSelector::split_triangle(int facet_idx) +{ + if (m_triangles[facet_idx].is_split()) { + // The triangle is divided already. + return; + } + + Triangle* tr = &m_triangles[facet_idx]; + + EnforcerBlockerType old_type = tr->get_state(); + + if (tr->was_split_before() != 0) { + // This triangle is not split at the moment, but was at one point + // in history. We can just restore it and resurrect its children. + tr->set_division(-1); + for (int i=0; i<=tr->number_of_split_sides(); ++i) { + m_triangles[tr->children[i]].set_state(old_type); + m_triangles[tr->children[i]].valid = true; + --m_invalid_triangles; + } + return; + } + + // If we got here, we are about to actually split the triangle. + const double limit_squared = m_edge_limit_sqr; + + std::array& facet = tr->verts_idxs; + std::array pts = { &m_vertices[facet[0]].v, + &m_vertices[facet[1]].v, + &m_vertices[facet[2]].v}; + std::array pts_transformed; // must stay in scope of pts !!! + + // In case the object is non-uniformly scaled, transform the + // points to world coords. + if (! m_cursor.uniform_scaling) { + for (size_t i=0; i sides; + sides = { (*pts[2]-*pts[1]).squaredNorm(), + (*pts[0]-*pts[2]).squaredNorm(), + (*pts[1]-*pts[0]).squaredNorm() }; + + std::vector sides_to_split; + int side_to_keep = -1; + for (int pt_idx = 0; pt_idx<3; ++pt_idx) { + if (sides[pt_idx] > limit_squared) + sides_to_split.push_back(pt_idx); + else + side_to_keep = pt_idx; + } + if (sides_to_split.empty()) { + // This shall be unselected. + tr->set_division(0); + return; + } + + // Save how the triangle will be split. Second argument makes sense only for one + // or two split sides, otherwise the value is ignored. + tr->set_division(sides_to_split.size(), + sides_to_split.size() == 2 ? side_to_keep : sides_to_split[0]); + + perform_split(facet_idx, old_type); +} + + + +// Is pointer in a triangle? +bool TriangleSelector::is_pointer_in_triangle(int facet_idx) const +{ + const Vec3f& p1 = m_vertices[m_triangles[facet_idx].verts_idxs[0]].v; + const Vec3f& p2 = m_vertices[m_triangles[facet_idx].verts_idxs[1]].v; + const Vec3f& p3 = m_vertices[m_triangles[facet_idx].verts_idxs[2]].v; + return m_cursor.is_pointer_in_triangle(p1, p2, p3); +} + + + +// Determine whether this facet is potentially visible (still can be obscured). +bool TriangleSelector::faces_camera(int facet) const +{ + assert(facet < m_orig_size_indices); + // The normal is cached in mesh->stl, use it. + Vec3f normal = m_mesh->stl.facet_start[facet].normal; + + if (! m_cursor.uniform_scaling) { + // Transform the normal into world coords. + normal = m_cursor.trafo_normal * normal; + } + return (normal.dot(m_cursor.dir) < 0.); +} + + +// How many vertices of a triangle are inside the circle? +int TriangleSelector::vertices_inside(int facet_idx) const +{ + int inside = 0; + for (size_t i=0; i<3; ++i) { + if (m_cursor.is_mesh_point_inside(m_vertices[m_triangles[facet_idx].verts_idxs[i]].v)) + ++inside; + } + return inside; +} + + +// Is edge inside cursor? +bool TriangleSelector::is_edge_inside_cursor(int facet_idx) const +{ + std::array pts; + for (int i=0; i<3; ++i) { + pts[i] = m_vertices[m_triangles[facet_idx].verts_idxs[i]].v; + if (! m_cursor.uniform_scaling) + pts[i] = m_cursor.trafo * pts[i]; + } + + const Vec3f& p = m_cursor.center; + + for (int side = 0; side < 3; ++side) { + const Vec3f& a = pts[side]; + const Vec3f& b = pts[side<2 ? side+1 : 0]; + Vec3f s = (b-a).normalized(); + float t = (p-a).dot(s); + Vec3f vector = a+t*s - p; + + // vector is 3D vector from center to the intersection. What we want to + // measure is length of its projection onto plane perpendicular to dir. + float dist_sqr = vector.squaredNorm() - std::pow(vector.dot(m_cursor.dir), 2.f); + if (dist_sqr < m_cursor.radius_sqr && t>=0.f && t<=(b-a).norm()) + return true; + } + return false; +} + + + +// Recursively remove all subtriangles. +void TriangleSelector::undivide_triangle(int facet_idx) +{ + assert(facet_idx < int(m_triangles.size())); + Triangle& tr = m_triangles[facet_idx]; + + if (tr.is_split()) { + for (int i=0; i<=tr.number_of_split_sides(); ++i) { + undivide_triangle(tr.children[i]); + m_triangles[tr.children[i]].valid = false; + ++m_invalid_triangles; + } + tr.set_division(0); // not split + } +} + + +void TriangleSelector::remove_useless_children(int facet_idx) +{ + // Check that all children are leafs of the same type. If not, try to + // make them (recursive call). Remove them if sucessful. + + assert(facet_idx < int(m_triangles.size()) && m_triangles[facet_idx].valid); + Triangle& tr = m_triangles[facet_idx]; + + if (! tr.is_split()) { + // This is a leaf, there nothing to do. This can happen during the + // first (non-recursive call). Shouldn't otherwise. + return; + } + + // Call this for all non-leaf children. + for (int child_idx=0; child_idx<=tr.number_of_split_sides(); ++child_idx) { + assert(child_idx < int(m_triangles.size()) && m_triangles[child_idx].valid); + if (m_triangles[tr.children[child_idx]].is_split()) + remove_useless_children(tr.children[child_idx]); + } + + + // Return if a child is not leaf or two children differ in type. + EnforcerBlockerType first_child_type = EnforcerBlockerType::NONE; + for (int child_idx=0; child_idx<=tr.number_of_split_sides(); ++child_idx) { + if (m_triangles[tr.children[child_idx]].is_split()) + return; + if (child_idx == 0) + first_child_type = m_triangles[tr.children[0]].get_state(); + else if (m_triangles[tr.children[child_idx]].get_state() != first_child_type) + return; + } + + // If we got here, the children can be removed. + undivide_triangle(facet_idx); + tr.set_state(first_child_type); +} + + + +void TriangleSelector::garbage_collect() +{ + // First make a map from old to new triangle indices. + int new_idx = m_orig_size_indices; + std::vector new_triangle_indices(m_triangles.size(), -1); + for (int i = m_orig_size_indices; i new_vertices_indices(m_vertices.size(), -1); + for (int i=m_orig_size_vertices; i= 0); + if (m_vertices[i].ref_cnt != 0) { + new_vertices_indices[i] = new_idx; + ++new_idx; + } + } + + // We can remove all invalid triangles and vertices that are no longer referenced. + m_triangles.erase(std::remove_if(m_triangles.begin()+m_orig_size_indices, m_triangles.end(), + [](const Triangle& tr) { return ! tr.valid; }), + m_triangles.end()); + m_vertices.erase(std::remove_if(m_vertices.begin()+m_orig_size_vertices, m_vertices.end(), + [](const Vertex& vert) { return vert.ref_cnt == 0; }), + m_vertices.end()); + + // Now go through all remaining triangles and update changed indices. + for (Triangle& tr : m_triangles) { + assert(tr.valid); + + if (tr.is_split()) { + // There are children. Update their indices. + for (int j=0; j<=tr.number_of_split_sides(); ++j) { + assert(new_triangle_indices[tr.children[j]] != -1); + tr.children[j] = new_triangle_indices[tr.children[j]]; + } + } + + // Update indices into m_vertices. The original vertices are never + // touched and need not be reindexed. + for (int& idx : tr.verts_idxs) { + if (idx >= m_orig_size_vertices) { + assert(new_vertices_indices[idx] != -1); + idx = new_vertices_indices[idx]; + } + } + + // If this triangle was split before, forget it. + // Children referenced in the cache are dead by now. + tr.forget_history(); + } + + m_invalid_triangles = 0; +} + +TriangleSelector::TriangleSelector(const TriangleMesh& mesh) + : m_mesh{&mesh} +{ + reset(); +} + + +void TriangleSelector::reset() +{ + if (! m_orig_size_indices != 0) // unless this is run from constructor + garbage_collect(); + m_vertices.clear(); + m_triangles.clear(); + for (const stl_vertex& vert : m_mesh->its.vertices) + m_vertices.emplace_back(vert); + for (const stl_triangle_vertex_indices& ind : m_mesh->its.indices) + push_triangle(ind[0], ind[1], ind[2]); + m_orig_size_vertices = m_vertices.size(); + m_orig_size_indices = m_triangles.size(); + m_invalid_triangles = 0; +} + + + + + +void TriangleSelector::set_edge_limit(float edge_limit) +{ + float new_limit_sqr = std::pow(edge_limit, 2.f); + + if (new_limit_sqr != m_edge_limit_sqr) { + m_edge_limit_sqr = new_limit_sqr; + + // The way how triangles split may be different now, forget + // all cached splits. + garbage_collect(); + } +} + + + +void TriangleSelector::push_triangle(int a, int b, int c) +{ + for (int i : {a, b, c}) { + assert(i >= 0 && i < int(m_vertices.size())); + ++m_vertices[i].ref_cnt; + } + m_triangles.emplace_back(a, b, c); +} + + +void TriangleSelector::perform_split(int facet_idx, EnforcerBlockerType old_state) +{ + Triangle* tr = &m_triangles[facet_idx]; + + assert(tr->is_split()); + + // Read info about how to split this triangle. + int sides_to_split = tr->number_of_split_sides(); + + // indices of triangle vertices + std::vector verts_idxs; + int idx = tr->special_side(); + for (int j=0; j<3; ++j) { + verts_idxs.push_back(tr->verts_idxs[idx++]); + if (idx == 3) + idx = 0; + } + + if (sides_to_split == 1) { + m_vertices.emplace_back((m_vertices[verts_idxs[1]].v + m_vertices[verts_idxs[2]].v)/2.); + verts_idxs.insert(verts_idxs.begin()+2, m_vertices.size() - 1); + + push_triangle(verts_idxs[0], verts_idxs[1], verts_idxs[2]); + push_triangle(verts_idxs[2], verts_idxs[3], verts_idxs[0]); + } + + if (sides_to_split == 2) { + m_vertices.emplace_back((m_vertices[verts_idxs[0]].v + m_vertices[verts_idxs[1]].v)/2.); + verts_idxs.insert(verts_idxs.begin()+1, m_vertices.size() - 1); + + m_vertices.emplace_back((m_vertices[verts_idxs[0]].v + m_vertices[verts_idxs[3]].v)/2.); + verts_idxs.insert(verts_idxs.begin()+4, m_vertices.size() - 1); + + push_triangle(verts_idxs[0], verts_idxs[1], verts_idxs[4]); + push_triangle(verts_idxs[1], verts_idxs[2], verts_idxs[4]); + push_triangle(verts_idxs[2], verts_idxs[3], verts_idxs[4]); + } + + if (sides_to_split == 3) { + m_vertices.emplace_back((m_vertices[verts_idxs[0]].v + m_vertices[verts_idxs[1]].v)/2.); + verts_idxs.insert(verts_idxs.begin()+1, m_vertices.size() - 1); + m_vertices.emplace_back((m_vertices[verts_idxs[2]].v + m_vertices[verts_idxs[3]].v)/2.); + verts_idxs.insert(verts_idxs.begin()+3, m_vertices.size() - 1); + m_vertices.emplace_back((m_vertices[verts_idxs[4]].v + m_vertices[verts_idxs[0]].v)/2.); + verts_idxs.insert(verts_idxs.begin()+5, m_vertices.size() - 1); + + push_triangle(verts_idxs[0], verts_idxs[1], verts_idxs[5]); + push_triangle(verts_idxs[1], verts_idxs[2], verts_idxs[3]); + push_triangle(verts_idxs[3], verts_idxs[4], verts_idxs[5]); + push_triangle(verts_idxs[1], verts_idxs[3], verts_idxs[5]); + } + + tr = &m_triangles[facet_idx]; // may have been invalidated + + // And save the children. All children should start in the same state as the triangle we just split. + assert(sides_to_split <= 3); + for (int i=0; i<=sides_to_split; ++i) { + tr->children[i] = m_triangles.size()-1-i; + m_triangles[tr->children[i]].set_state(old_state); + } +} + + + +indexed_triangle_set TriangleSelector::get_facets(EnforcerBlockerType state) const +{ + indexed_triangle_set out; + for (const Triangle& tr : m_triangles) { + if (tr.valid && ! tr.is_split() && tr.get_state() == state) { + stl_triangle_vertex_indices indices; + for (int i=0; i<3; ++i) { + out.vertices.emplace_back(m_vertices[tr.verts_idxs[i]].v); + indices[i] = out.vertices.size() - 1; + } + out.indices.emplace_back(indices); + } + } + return out; +} + + + +std::map> TriangleSelector::serialize() const +{ + // Each original triangle of the mesh is assigned a number encoding its state + // or how it is split. Each triangle is encoded by 4 bits (xxyy): + // leaf triangle: xx = EnforcerBlockerType, yy = 0 + // non-leaf: xx = special side, yy = number of split sides + // These are bitwise appended and formed into one 64-bit integer. + + // The function returns a map from original triangle indices to + // stream of bits encoding state and offsprings. + + std::map> out; + for (int i=0; i data; // complete encoding of this mesh triangle + int stored_triangles = 0; // how many have been already encoded + + std::function serialize_recursive; + serialize_recursive = [this, &serialize_recursive, &stored_triangles, &data](int facet_idx) { + const Triangle& tr = m_triangles[facet_idx]; + + // Always save number of split sides. It is zero for unsplit triangles. + int split_sides = tr.number_of_split_sides(); + assert(split_sides >= 0 && split_sides <= 3); + + //data |= (split_sides << (stored_triangles * 4)); + data.push_back(split_sides & 0b01); + data.push_back(split_sides & 0b10); + + if (tr.is_split()) { + // If this triangle is split, save which side is split (in case + // of one split) or kept (in case of two splits). The value will + // be ignored for 3-side split. + assert(split_sides > 0); + assert(tr.special_side() >= 0 && tr.special_side() <= 3); + data.push_back(tr.special_side() & 0b01); + data.push_back(tr.special_side() & 0b10); + ++stored_triangles; + // Now save all children. + for (int child_idx=0; child_idx<=split_sides; ++child_idx) + serialize_recursive(tr.children[child_idx]); + } else { + // In case this is leaf, we better save information about its state. + assert(int(tr.get_state()) <= 3); + data.push_back(int(tr.get_state()) & 0b01); + data.push_back(int(tr.get_state()) & 0b10); + ++stored_triangles; + } + }; + + serialize_recursive(i); + out[i] = data; + } + + return out; +} + +void TriangleSelector::deserialize(const std::map> data) +{ + reset(); // dump any current state + for (const auto& [triangle_id, code] : data) { + assert(triangle_id < int(m_triangles.size())); + assert(! code.empty()); + int processed_triangles = 0; + struct ProcessingInfo { + int facet_id = 0; + int processed_children = 0; + int total_children = 0; + }; + + // Vector to store all parents that have offsprings. + std::vector parents; + + while (true) { + // Read next triangle info. + int next_code = 0; + for (int i=3; i>=0; --i) { + next_code = next_code << 1; + next_code |= int(code[4 * processed_triangles + i]); + } + ++processed_triangles; + + int num_of_split_sides = (next_code & 0b11); + int num_of_children = num_of_split_sides != 0 ? num_of_split_sides + 1 : 0; + bool is_split = num_of_children != 0; + EnforcerBlockerType state = EnforcerBlockerType(next_code >> 2); + int special_side = (next_code >> 2); + + // Take care of the first iteration separately, so handling of the others is simpler. + if (parents.empty()) { + if (! is_split) { + // root is not split. just set the state and that's it. + m_triangles[triangle_id].set_state(state); + break; + } else { + // root is split, add it into list of parents and split it. + // then go to the next. + parents.push_back({triangle_id, 0, num_of_children}); + m_triangles[triangle_id].set_division(num_of_children-1, special_side); + perform_split(triangle_id, EnforcerBlockerType::NONE); + continue; + } + } + + // This is not the first iteration. This triangle is a child of last seen parent. + assert(! parents.empty()); + assert(parents.back().processed_children < parents.back().total_children); + + if (is_split) { + // split the triangle and save it as parent of the next ones. + const ProcessingInfo& last = parents.back(); + int this_idx = m_triangles[last.facet_id].children[last.processed_children]; + m_triangles[this_idx].set_division(num_of_children-1, special_side); + perform_split(this_idx, EnforcerBlockerType::NONE); + parents.push_back({this_idx, 0, num_of_children}); + } else { + // this triangle belongs to last split one + m_triangles[m_triangles[parents.back().facet_id].children[parents.back().processed_children]].set_state(state); + ++parents.back().processed_children; + } + + + // If all children of the past parent triangle are claimed, move to grandparent. + while (parents.back().processed_children == parents.back().total_children) { + parents.pop_back(); + + if (parents.empty()) + break; + + // And increment the grandparent children counter, because + // we have just finished that branch and got back here. + ++parents.back().processed_children; + } + + // In case we popped back the root, we should be done. + if (parents.empty()) + break; + } + + } +} + + +TriangleSelector::Cursor::Cursor( + const Vec3f& center_, const Vec3f& source_, float radius_world, + CursorType type_, const Transform3d& trafo_) + : center{center_}, + source{source_}, + type{type_}, + trafo{trafo_.cast()} +{ + Vec3d sf = Geometry::Transformation(trafo_).get_scaling_factor(); + if (is_approx(sf(0), sf(1)) && is_approx(sf(1), sf(2))) { + radius_sqr = std::pow(radius_world / sf(0), 2); + uniform_scaling = true; + } + else { + // In case that the transformation is non-uniform, all checks whether + // something is inside the cursor should be done in world coords. + // First transform center, source and dir in world coords and remember + // that we did this. + center = trafo * center; + source = trafo * source; + uniform_scaling = false; + radius_sqr = radius_world * radius_world; + trafo_normal = trafo.linear().inverse().transpose(); + } + + // Calculate dir, in whatever coords is appropriate. + dir = (center - source).normalized(); +} + + +// Is a point (in mesh coords) inside a cursor? +bool TriangleSelector::Cursor::is_mesh_point_inside(Vec3f point) const +{ + if (! uniform_scaling) + point = trafo * point; + + Vec3f diff = center - point; + + if (type == CIRCLE) + return (diff - diff.dot(dir) * dir).squaredNorm() < radius_sqr; + else // SPHERE + return diff.squaredNorm() < radius_sqr; +} + + + +// p1, p2, p3 are in mesh coords! +bool TriangleSelector::Cursor::is_pointer_in_triangle(const Vec3f& p1_, + const Vec3f& p2_, + const Vec3f& p3_) const +{ + const Vec3f& q1 = center + dir; + const Vec3f& q2 = center - dir; + + auto signed_volume_sign = [](const Vec3f& a, const Vec3f& b, + const Vec3f& c, const Vec3f& d) -> bool { + return ((b-a).cross(c-a)).dot(d-a) > 0.; + }; + + // In case the object is non-uniformly scaled, do the check in world coords. + const Vec3f& p1 = uniform_scaling ? p1_ : Vec3f(trafo * p1_); + const Vec3f& p2 = uniform_scaling ? p2_ : Vec3f(trafo * p2_); + const Vec3f& p3 = uniform_scaling ? p3_ : Vec3f(trafo * p3_); + + if (signed_volume_sign(q1,p1,p2,p3) != signed_volume_sign(q2,p1,p2,p3)) { + bool pos = signed_volume_sign(q1,q2,p1,p2); + if (signed_volume_sign(q1,q2,p2,p3) == pos && signed_volume_sign(q1,q2,p3,p1) == pos) + return true; + } + return false; +} + + + + +} // namespace Slic3r diff --git a/src/libslic3r/TriangleSelector.hpp b/src/libslic3r/TriangleSelector.hpp new file mode 100644 index 0000000000..6f4ca29ac4 --- /dev/null +++ b/src/libslic3r/TriangleSelector.hpp @@ -0,0 +1,170 @@ +#ifndef libslic3r_TriangleSelector_hpp_ +#define libslic3r_TriangleSelector_hpp_ + +// #define PRUSASLICER_TRIANGLE_SELECTOR_DEBUG + + +#include "Point.hpp" +#include "TriangleMesh.hpp" + +namespace Slic3r { + +enum class EnforcerBlockerType : int8_t; + + + +// Following class holds information about selected triangles. It also has power +// to recursively subdivide the triangles and make the selection finer. +class TriangleSelector { +public: + enum CursorType { + CIRCLE, + SPHERE + }; + + void set_edge_limit(float edge_limit); + + // Create new object on a TriangleMesh. The referenced mesh must + // stay valid, a ptr to it is saved and used. + explicit TriangleSelector(const TriangleMesh& mesh); + + // Select all triangles fully inside the circle, subdivide where needed. + void select_patch(const Vec3f& hit, // point where to start + int facet_start, // facet that point belongs to + const Vec3f& source, // camera position (mesh coords) + float radius, // radius of the cursor + CursorType type, // current type of cursor + EnforcerBlockerType new_state, // enforcer or blocker? + const Transform3d& trafo); // matrix to get from mesh to world + + // Get facets currently in the given state. + indexed_triangle_set get_facets(EnforcerBlockerType state) const; + + // Set facet of the mesh to a given state. Only works for original triangles. + void set_facet(int facet_idx, EnforcerBlockerType state); + + // Clear everything and make the tree empty. + void reset(); + + // Remove all unnecessary data. + void garbage_collect(); + + // Store the division trees in compact form (a long stream of + // bits for each triangle of the original mesh). + std::map> serialize() const; + + // Load serialized data. Assumes that correct mesh is loaded. + void deserialize(const std::map> data); + + +protected: + // Triangle and info about how it's split. + class Triangle { + public: + // Use TriangleSelector::push_triangle to create a new triangle. + // It increments/decrements reference counter on vertices. + Triangle(int a, int b, int c) + : verts_idxs{a, b, c}, + state{EnforcerBlockerType(0)}, + number_of_splits{0}, + special_side_idx{0}, + old_number_of_splits{0} + {} + // Indices into m_vertices. + std::array verts_idxs; + + // Is this triangle valid or marked to be removed? + bool valid{true}; + + // Children triangles. + std::array children; + + // Set the division type. + void set_division(int sides_to_split, int special_side_idx = -1); + + // Get/set current state. + void set_state(EnforcerBlockerType type) { assert(! is_split()); state = type; } + EnforcerBlockerType get_state() const { assert(! is_split()); return state; } + + // Get info on how it's split. + bool is_split() const { return number_of_split_sides() != 0; } + int number_of_split_sides() const { return number_of_splits; } + int special_side() const { assert(is_split()); return special_side_idx; } + bool was_split_before() const { return old_number_of_splits != 0; } + void forget_history() { old_number_of_splits = 0; } + + private: + int number_of_splits; + int special_side_idx; + EnforcerBlockerType state; + + // How many children were spawned during last split? + // Is not reset on remerging the triangle. + int old_number_of_splits; + }; + + struct Vertex { + explicit Vertex(const stl_vertex& vert) + : v{vert}, + ref_cnt{0} + {} + stl_vertex v; + int ref_cnt; + }; + + // Lists of vertices and triangles, both original and new + std::vector m_vertices; + std::vector m_triangles; + const TriangleMesh* m_mesh; + + // Number of invalid triangles (to trigger garbage collection). + int m_invalid_triangles; + + // Limiting length of triangle side (squared). + float m_edge_limit_sqr = 1.f; + + // Number of original vertices and triangles. + int m_orig_size_vertices = 0; + int m_orig_size_indices = 0; + + // Cache for cursor position, radius and direction. + struct Cursor { + Cursor() = default; + Cursor(const Vec3f& center_, const Vec3f& source_, float radius_world, + CursorType type_, const Transform3d& trafo_); + bool is_mesh_point_inside(Vec3f pt) const; + bool is_pointer_in_triangle(const Vec3f& p1, const Vec3f& p2, const Vec3f& p3) const; + + Vec3f center; + Vec3f source; + Vec3f dir; + float radius_sqr; + CursorType type; + Transform3f trafo; + Transform3f trafo_normal; + bool uniform_scaling; + }; + + Cursor m_cursor; + float m_old_cursor_radius; + + // Private functions: + bool select_triangle(int facet_idx, EnforcerBlockerType type, + bool recursive_call = false); + int vertices_inside(int facet_idx) const; + bool faces_camera(int facet) const; + void undivide_triangle(int facet_idx); + void split_triangle(int facet_idx); + void remove_useless_children(int facet_idx); // No hidden meaning. Triangles are meant. + bool is_pointer_in_triangle(int facet_idx) const; + bool is_edge_inside_cursor(int facet_idx) const; + void push_triangle(int a, int b, int c); + void perform_split(int facet_idx, EnforcerBlockerType old_state); +}; + + + + +} // namespace Slic3r + +#endif // libslic3r_TriangleSelector_hpp_ diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 5cdf75037c..13be6d9ecb 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -7,6 +7,8 @@ #include #include +#include + #include "libslic3r.h" namespace boost { namespace filesystem { class directory_entry; }} @@ -73,11 +75,12 @@ enum CopyFileResult { FAIL_CHECK_TARGET_NOT_OPENED }; // Copy a file, adjust the access attributes, so that the target is writable. -CopyFileResult copy_file_inner(const std::string &from, const std::string &to); +CopyFileResult copy_file_inner(const std::string &from, const std::string &to, std::string& error_message); // Copy file to a temp file first, then rename it to the final file name. // If with_check is true, then the content of the copied file is compared to the content // of the source file before renaming. -extern CopyFileResult copy_file(const std::string &from, const std::string &to, const bool with_check = false); +// Additional error info is passed in error message. +extern CopyFileResult copy_file(const std::string &from, const std::string &to, std::string& error_message, const bool with_check = false); // Compares two files if identical. extern CopyFileResult check_copy(const std::string& origin, const std::string& copy); @@ -107,22 +110,29 @@ std::string string_printf(const char *format, ...); // to be placed at the top of Slic3r generated files. std::string header_slic3r_generated(); +#if ENABLE_GCODE_VIEWER +// Standard "generated by PrusaGCodeViewer version xxx timestamp xxx" header string, +// to be placed at the top of Slic3r generated files. +std::string header_gcodeviewer_generated(); +#endif // ENABLE_GCODE_VIEWER + // getpid platform wrapper extern unsigned get_current_pid(); +#if !ENABLE_GCODE_VIEWER template Real round_nearest(Real value, unsigned int decimals) { Real res = (Real)0; if (decimals == 0) res = ::round(value); - else - { + else { Real power = ::pow((Real)10, (int)decimals); res = ::round(value * power + (Real)0.5) / power; } return res; } +#endif // !ENABLE_GCODE_VIEWER // Compute the next highest power of 2 of 32-bit v // http://graphics.stanford.edu/~seander/bithacks.html @@ -337,6 +347,25 @@ inline std::string get_time_dhms(float time_in_secs) return buffer; } +inline std::string get_time_dhm(float time_in_secs) +{ + int days = (int)(time_in_secs / 86400.0f); + time_in_secs -= (float)days * 86400.0f; + int hours = (int)(time_in_secs / 3600.0f); + time_in_secs -= (float)hours * 3600.0f; + int minutes = (int)(time_in_secs / 60.0f); + + char buffer[64]; + if (days > 0) + ::sprintf(buffer, "%dd %dh %dm", days, hours, minutes); + else if (hours > 0) + ::sprintf(buffer, "%dh %dm", hours, minutes); + else if (minutes > 0) + ::sprintf(buffer, "%dm", minutes); + + return buffer; +} + } // namespace Slic3r #if WIN32 diff --git a/src/libslic3r/Zipper.cpp b/src/libslic3r/Zipper.cpp index 02f022083b..7a95829cd0 100644 --- a/src/libslic3r/Zipper.cpp +++ b/src/libslic3r/Zipper.cpp @@ -1,5 +1,6 @@ #include +#include "Exception.hpp" #include "Zipper.hpp" #include "miniz_extension.hpp" #include @@ -29,7 +30,7 @@ public: SLIC3R_NORETURN void blow_up() const { - throw std::runtime_error(formatted_errorstr()); + throw Slic3r::RuntimeError(formatted_errorstr()); } bool is_alive() diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index e3816b87f9..a404d230dd 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -2,9 +2,13 @@ #define _libslic3r_h_ #include "libslic3r_version.h" +#define GCODEVIEWER_APP_NAME "PrusaSlicer G-code Viewer" +#define GCODEVIEWER_APP_KEY "PrusaSlicerGcodeViewer" +#define GCODEVIEWER_BUILD_ID std::string("PrusaSlicer G-code Viewer-") + std::string(SLIC3R_VERSION) + std::string("-UNKNOWN") // this needs to be included early for MSVC (listing it in Build.PL is not enough) #include +#include #include #include #include @@ -260,6 +264,20 @@ using IntegerOnly = std::enable_if_t::value, O>; template using ArithmeticOnly = std::enable_if_t::value, O>; +template +using IteratorOnly = std::enable_if_t< + !std::is_same_v::value_type, void>, O +>; + +template // Arbitrary allocator can be used +IntegerOnly> reserve_vector(I capacity) +{ + std::vector ret; + if (capacity > I(0)) ret.reserve(size_t(capacity)); + + return ret; +} + } // namespace Slic3r #endif diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index ad91e5239b..886dcf46a9 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -417,7 +417,7 @@ std::error_code rename_file(const std::string &from, const std::string &to) #endif } -CopyFileResult copy_file_inner(const std::string& from, const std::string& to) +CopyFileResult copy_file_inner(const std::string& from, const std::string& to, std::string& error_message) { const boost::filesystem::path source(from); const boost::filesystem::path target(to); @@ -429,20 +429,31 @@ CopyFileResult copy_file_inner(const std::string& from, const std::string& to) // the copy_file() function will fail appropriately and we don't want the permission() // calls to cause needless failures on permissionless filesystems (ie. FATs on SD cards etc.) // or when the target file doesn't exist. + + //This error code is ignored boost::system::error_code ec; + boost::filesystem::permissions(target, perms, ec); + //if (ec) + // BOOST_LOG_TRIVIAL(error) << "Copy file permisions before copy error message: " << ec.message(); + // This error code is passed up + ec.clear(); boost::filesystem::copy_file(source, target, boost::filesystem::copy_option::overwrite_if_exists, ec); if (ec) { + error_message = ec.message(); return FAIL_COPY_FILE; } + //ec.clear(); boost::filesystem::permissions(target, perms, ec); + //if (ec) + // BOOST_LOG_TRIVIAL(error) << "Copy file permisions after copy error message: " << ec.message(); return SUCCESS; } -CopyFileResult copy_file(const std::string &from, const std::string &to, const bool with_check) +CopyFileResult copy_file(const std::string &from, const std::string &to, std::string& error_message, const bool with_check) { std::string to_temp = to + ".tmp"; - CopyFileResult ret_val = copy_file_inner(from,to_temp); + CopyFileResult ret_val = copy_file_inner(from, to_temp, error_message); if(ret_val == SUCCESS) { if (with_check) @@ -604,9 +615,16 @@ std::string string_printf(const char *format, ...) std::string header_slic3r_generated() { - return std::string("generated by " SLIC3R_APP_NAME " " SLIC3R_VERSION " on " ) + Utils::utc_timestamp(); + return std::string("generated by " SLIC3R_APP_NAME " " SLIC3R_VERSION " on " ) + Utils::utc_timestamp(); } +#if ENABLE_GCODE_VIEWER +std::string header_gcodeviewer_generated() +{ + return std::string("generated by " GCODEVIEWER_APP_NAME " " SLIC3R_VERSION " on ") + Utils::utc_timestamp(); +} +#endif // ENABLE_GCODE_VIEWER + unsigned get_current_pid() { #ifdef WIN32 diff --git a/src/platform/msw/PrusaSlicer-gcodeviewer.rc.in b/src/platform/msw/PrusaSlicer-gcodeviewer.rc.in new file mode 100644 index 0000000000..eed737cb77 --- /dev/null +++ b/src/platform/msw/PrusaSlicer-gcodeviewer.rc.in @@ -0,0 +1,25 @@ +1 VERSIONINFO +FILEVERSION @SLIC3R_RC_VERSION@ +PRODUCTVERSION @SLIC3R_RC_VERSION@ +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "CompanyName", "Prusa Research" + VALUE "FileDescription", "@SLIC3R_APP_NAME@ G-code Viewer" + VALUE "FileVersion", "@SLIC3R_BUILD_ID@" + VALUE "ProductName", "@SLIC3R_APP_NAME@ G-code Viewer" + VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" + VALUE "InternalName", "@SLIC3R_APP_NAME@ G-code Viewer" + VALUE "LegalCopyright", "Copyright \251 2016-2020 Prusa Research, \251 2011-2018 Alessandro Ranellucci" + VALUE "OriginalFilename", "prusa-gcodeviewer.exe" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x409, 1252 + } +} +2 ICON "@SLIC3R_RESOURCES_DIR@/icons/PrusaSlicer-gcodeviewer.ico" +1 24 "PrusaSlicer.manifest" diff --git a/src/platform/msw/PrusaSlicer.rc.in b/src/platform/msw/PrusaSlicer.rc.in index fb75305c8a..a4520c6d73 100644 --- a/src/platform/msw/PrusaSlicer.rc.in +++ b/src/platform/msw/PrusaSlicer.rc.in @@ -12,7 +12,7 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@ VALUE "ProductName", "@SLIC3R_APP_NAME@" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" VALUE "InternalName", "@SLIC3R_APP_NAME@" - VALUE "LegalCopyright", "Copyright \251 2016-2020 Prusa Research, \251 2011-2018 Alessandro Ranelucci" + VALUE "LegalCopyright", "Copyright \251 2016-2020 Prusa Research, \251 2011-2018 Alessandro Ranellucci" VALUE "OriginalFilename", "prusa-slicer.exe" } } diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in index fc4b6a8756..e922b23f56 100644 --- a/src/platform/osx/Info.plist.in +++ b/src/platform/osx/Info.plist.in @@ -103,7 +103,7 @@ CFBundleTypeName GCODE CFBundleTypeRole - Editor + Viewer LISsAppleDefaultForType LSHandlerRank diff --git a/src/platform/unix/PrusaSlicer.desktop b/src/platform/unix/PrusaSlicer.desktop new file mode 100644 index 0000000000..464873f458 --- /dev/null +++ b/src/platform/unix/PrusaSlicer.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=PrusaSlicer +Exec=prusa-slicer %F +Icon=PrusaSlicer +Terminal=false +Type=Application +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;application/x-amf; +Categories=Graphics;3DGraphics; +Keywords=3D;Printing;Slicer; \ No newline at end of file diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 7e02c0fdd7..3cb8dbfd99 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.13) project(libslic3r_gui) include(PrecompiledHeader) @@ -12,8 +12,6 @@ set(SLIC3R_GUI_SOURCES GUI/SysInfoDialog.hpp GUI/KBShortcutsDialog.cpp GUI/KBShortcutsDialog.hpp - GUI/AppConfig.cpp - GUI/AppConfig.hpp GUI/BackgroundSlicingProcess.cpp GUI/BackgroundSlicingProcess.hpp GUI/BitmapCache.cpp @@ -23,6 +21,8 @@ set(SLIC3R_GUI_SOURCES GUI/3DScene.cpp GUI/3DScene.hpp GUI/format.hpp + GUI/GLShadersManager.hpp + GUI/GLShadersManager.cpp GUI/GLShader.cpp GUI/GLShader.hpp GUI/GLCanvas3D.hpp @@ -53,22 +53,28 @@ set(SLIC3R_GUI_SOURCES GUI/Gizmos/GLGizmoCut.hpp GUI/Gizmos/GLGizmoHollow.cpp GUI/Gizmos/GLGizmoHollow.hpp + GUI/Gizmos/GLGizmoPainterBase.cpp + GUI/Gizmos/GLGizmoPainterBase.hpp + GUI/Gizmos/GLGizmoSeam.cpp + GUI/Gizmos/GLGizmoSeam.hpp GUI/GLSelectionRectangle.cpp GUI/GLSelectionRectangle.hpp + GUI/GLModel.hpp + GUI/GLModel.cpp GUI/GLTexture.hpp GUI/GLTexture.cpp GUI/GLToolbar.hpp GUI/GLToolbar.cpp + GUI/GCodeViewer.hpp + GUI/GCodeViewer.cpp GUI/Preferences.cpp GUI/Preferences.hpp - GUI/Preset.cpp - GUI/Preset.hpp - GUI/PresetBundle.cpp - GUI/PresetBundle.hpp GUI/PresetHints.cpp GUI/PresetHints.hpp GUI/GUI.cpp GUI/GUI.hpp + GUI/GUI_Init.cpp + GUI/GUI_Init.hpp GUI/GUI_Preview.cpp GUI/GUI_Preview.hpp GUI/GUI_App.cpp @@ -81,6 +87,12 @@ set(SLIC3R_GUI_SOURCES GUI/MainFrame.hpp GUI/Plater.cpp GUI/Plater.hpp + GUI/PresetComboBoxes.hpp + GUI/PresetComboBoxes.cpp + GUI/SavePresetDialog.hpp + GUI/SavePresetDialog.cpp + GUI/PhysicalPrinterDialog.hpp + GUI/PhysicalPrinterDialog.cpp GUI/GUI_ObjectList.cpp GUI/GUI_ObjectList.hpp GUI/GUI_ObjectManipulation.cpp @@ -163,6 +175,12 @@ set(SLIC3R_GUI_SOURCES GUI/InstanceCheck.hpp GUI/Search.cpp GUI/Search.hpp + GUI/NotificationManager.cpp + GUI/NotificationManager.hpp + GUI/UnsavedChangesDialog.cpp + GUI/UnsavedChangesDialog.hpp + GUI/ExtraRenderers.cpp + GUI/ExtraRenderers.hpp Utils/Http.cpp Utils/Http.hpp Utils/FixModelByWin10.cpp @@ -181,13 +199,13 @@ set(SLIC3R_GUI_SOURCES Utils/Bonjour.hpp Utils/PresetUpdater.cpp Utils/PresetUpdater.hpp + Utils/Process.cpp + Utils/Process.hpp + Utils/Profile.hpp Utils/UndoRedo.cpp Utils/UndoRedo.hpp Utils/HexFile.cpp Utils/HexFile.hpp - Utils/Thread.hpp - Utils/SLAImport.hpp - Utils/SLAImport.cpp ) if (APPLE) diff --git a/src/slic3r/Config/Snapshot.cpp b/src/slic3r/Config/Snapshot.cpp index 2264afa7d2..45dc998741 100644 --- a/src/slic3r/Config/Snapshot.cpp +++ b/src/slic3r/Config/Snapshot.cpp @@ -1,6 +1,4 @@ #include "Snapshot.hpp" -#include "../GUI/AppConfig.hpp" -#include "../GUI/PresetBundle.hpp" #include @@ -11,7 +9,7 @@ #include #include - +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/libslic3r.h" #include "libslic3r/Time.hpp" #include "libslic3r/Config.hpp" @@ -317,7 +315,7 @@ size_t SnapshotDB::load_db() // Sort the snapshots by their date/time. std::sort(m_snapshots.begin(), m_snapshots.end(), [](const Snapshot &s1, const Snapshot &s2) { return s1.time_captured < s2.time_captured; }); if (! errors_cummulative.empty()) - throw std::runtime_error(errors_cummulative); + throw Slic3r::RuntimeError(errors_cummulative); return m_snapshots.size(); } @@ -341,7 +339,7 @@ static void copy_config_dir_single_level(const boost::filesystem::path &path_src { if (! boost::filesystem::is_directory(path_dst) && ! boost::filesystem::create_directory(path_dst)) - throw std::runtime_error(std::string("Slic3r was unable to create a directory at ") + path_dst.string()); + throw Slic3r::RuntimeError(std::string("Slic3r was unable to create a directory at ") + path_dst.string()); for (auto &dir_entry : boost::filesystem::directory_iterator(path_src)) if (Slic3r::is_ini_file(dir_entry)) @@ -431,7 +429,7 @@ const Snapshot& SnapshotDB::restore_snapshot(const std::string &id, AppConfig &a this->restore_snapshot(snapshot, app_config); return snapshot; } - throw std::runtime_error(std::string("Snapshot with id " + id + " was not found.")); + throw Slic3r::RuntimeError(std::string("Snapshot with id " + id + " was not found.")); } void SnapshotDB::restore_snapshot(const Snapshot &snapshot, AppConfig &app_config) @@ -503,7 +501,7 @@ boost::filesystem::path SnapshotDB::create_db_dir() subdir.make_preferred(); if (! boost::filesystem::is_directory(subdir) && ! boost::filesystem::create_directory(subdir)) - throw std::runtime_error(std::string("Slic3r was unable to create a directory at ") + subdir.string()); + throw Slic3r::RuntimeError(std::string("Slic3r was unable to create a directory at ") + subdir.string()); } return snapshots_dir; } diff --git a/src/slic3r/Config/Version.cpp b/src/slic3r/Config/Version.cpp index d00e4a2abf..04ce05ab5b 100644 --- a/src/slic3r/Config/Version.cpp +++ b/src/slic3r/Config/Version.cpp @@ -324,7 +324,7 @@ std::vector Index::load_db() } if (! errors_cummulative.empty()) - throw std::runtime_error(errors_cummulative); + throw Slic3r::RuntimeError(errors_cummulative); return index_db; } diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 6c070ca99a..8a29d08bd8 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -5,15 +5,24 @@ #include "libslic3r/Polygon.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/BoundingBox.hpp" +#if ENABLE_GCODE_VIEWER +#include "libslic3r/Geometry.hpp" +#endif // ENABLE_GCODE_VIEWER #include "GUI_App.hpp" -#include "PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include "GLCanvas3D.hpp" +#if ENABLE_GCODE_VIEWER +#include "3DScene.hpp" +#endif // ENABLE_GCODE_VIEWER #include #include #include +#if ENABLE_GCODE_VIEWER +#include +#endif // ENABLE_GCODE_VIEWER static const float GROUND_Z = -0.02f; @@ -36,10 +45,8 @@ bool GeometryBuffer::set_from_triangles(const Polygons& triangles, float z, bool float max_y = min_y; unsigned int v_count = 0; - for (const Polygon& t : triangles) - { - for (unsigned int i = 0; i < 3; ++i) - { + for (const Polygon& t : triangles) { + for (unsigned int i = 0; i < 3; ++i) { Vertex& v = m_vertices[v_count]; const Point& p = t.points[i]; @@ -50,8 +57,7 @@ bool GeometryBuffer::set_from_triangles(const Polygons& triangles, float z, bool v.position[1] = y; v.position[2] = z; - if (generate_tex_coords) - { + if (generate_tex_coords) { v.tex_coords[0] = x; v.tex_coords[1] = y; @@ -65,17 +71,14 @@ bool GeometryBuffer::set_from_triangles(const Polygons& triangles, float z, bool } } - if (generate_tex_coords) - { + if (generate_tex_coords) { float size_x = max_x - min_x; float size_y = max_y - min_y; - if ((size_x != 0.0f) && (size_y != 0.0f)) - { + if ((size_x != 0.0f) && (size_y != 0.0f)) { float inv_size_x = 1.0f / size_x; float inv_size_y = -1.0f / size_y; - for (Vertex& v : m_vertices) - { + for (Vertex& v : m_vertices) { v.tex_coords[0] = (v.tex_coords[0] - min_x) * inv_size_x; v.tex_coords[1] = (v.tex_coords[1] - min_y) * inv_size_y; } @@ -96,8 +99,7 @@ bool GeometryBuffer::set_from_lines(const Lines& lines, float z) m_vertices = std::vector(v_size, Vertex()); unsigned int v_count = 0; - for (const Line& l : lines) - { + for (const Line& l : lines) { Vertex& v1 = m_vertices[v_count]; v1.position[0] = unscale(l.a(0)); v1.position[1] = unscale(l.a(1)); @@ -119,10 +121,24 @@ const float* GeometryBuffer::get_vertices_data() const return (m_vertices.size() > 0) ? (const float*)m_vertices.data() : nullptr; } +#if ENABLE_GCODE_VIEWER +const float Bed3D::Axes::DefaultStemRadius = 0.5f; +const float Bed3D::Axes::DefaultStemLength = 25.0f; +const float Bed3D::Axes::DefaultTipRadius = 2.5f * Bed3D::Axes::DefaultStemRadius; +const float Bed3D::Axes::DefaultTipLength = 5.0f; +#else const double Bed3D::Axes::Radius = 0.5; const double Bed3D::Axes::ArrowBaseRadius = 2.5 * Bed3D::Axes::Radius; const double Bed3D::Axes::ArrowLength = 5.0; +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER +void Bed3D::Axes::set_stem_length(float length) +{ + m_stem_length = length; + m_arrow.reset(); +} +#else Bed3D::Axes::Axes() : origin(Vec3d::Zero()) , length(25.0 * Vec3d::Ones()) @@ -137,9 +153,47 @@ Bed3D::Axes::~Axes() if (m_quadric != nullptr) ::gluDeleteQuadric(m_quadric); } +#endif // ENABLE_GCODE_VIEWER void Bed3D::Axes::render() const { +#if ENABLE_GCODE_VIEWER + auto render_axis = [this](const Transform3f& transform) { + glsafe(::glPushMatrix()); + glsafe(::glMultMatrixf(transform.data())); + m_arrow.render(); + glsafe(::glPopMatrix()); + }; + + m_arrow.init_from(stilized_arrow(16, DefaultTipRadius, DefaultTipLength, DefaultStemRadius, m_stem_length)); + + GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); + if (shader == nullptr) + return; + + glsafe(::glEnable(GL_DEPTH_TEST)); + + shader->start_using(); + + // x axis + std::array color = { 0.75f, 0.0f, 0.0f, 1.0f }; + shader->set_uniform("uniform_color", color); + render_axis(Geometry::assemble_transform(m_origin, { 0.0, 0.5 * M_PI, 0.0f }).cast()); + + // y axis + color = { 0.0f, 0.75f, 0.0f, 1.0f }; + shader->set_uniform("uniform_color", color); + render_axis(Geometry::assemble_transform(m_origin, { -0.5 * M_PI, 0.0, 0.0f }).cast()); + + // z axis + color = { 0.0f, 0.0f, 0.75f, 1.0f }; + shader->set_uniform("uniform_color", color); + render_axis(Geometry::assemble_transform(m_origin).cast()); + + shader->stop_using(); + + glsafe(::glDisable(GL_DEPTH_TEST)); +#else if (m_quadric == nullptr) return; @@ -171,8 +225,10 @@ void Bed3D::Axes::render() const glsafe(::glDisable(GL_LIGHTING)); glsafe(::glDisable(GL_DEPTH_TEST)); +#endif // !ENABLE_GCODE_VIEWER } +#if !ENABLE_GCODE_VIEWER void Bed3D::Axes::render_axis(double length) const { ::gluQuadricOrientation(m_quadric, GLU_OUTSIDE); @@ -185,6 +241,7 @@ void Bed3D::Axes::render_axis(double length) const ::gluQuadricOrientation(m_quadric, GLU_INSIDE); ::gluDisk(m_quadric, 0.0, ArrowBaseRadius, 32, 1); } +#endif // !ENABLE_GCODE_VIEWER Bed3D::Bed3D() : m_type(Custom) @@ -193,7 +250,7 @@ Bed3D::Bed3D() { } -bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model) +bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom) { auto check_texture = [](const std::string& texture) { return !texture.empty() && (boost::algorithm::iends_with(texture, ".png") || boost::algorithm::iends_with(texture, ".svg")) && boost::filesystem::exists(texture); @@ -203,30 +260,39 @@ bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, c return !model.empty() && boost::algorithm::iends_with(model, ".stl") && boost::filesystem::exists(model); }; - auto [new_type, system_model, system_texture] = detect_type(shape); + EType type; + std::string model; + std::string texture; + if (force_as_custom) + type = Custom; + else { + auto [new_type, system_model, system_texture] = detect_type(shape); + type = new_type; + model = system_model; + texture = system_texture; + } - std::string texture_filename = custom_texture.empty() ? system_texture : custom_texture; + std::string texture_filename = custom_texture.empty() ? texture : custom_texture; if (!check_texture(texture_filename)) texture_filename.clear(); - std::string model_filename = custom_model.empty() ? system_model : custom_model; + std::string model_filename = custom_model.empty() ? model : custom_model; if (!check_model(model_filename)) model_filename.clear(); - if ((m_shape == shape) && (m_type == new_type) && (m_texture_filename == texture_filename) && (m_model_filename == model_filename)) + if (m_shape == shape && m_type == type && m_texture_filename == texture_filename && m_model_filename == model_filename) // No change, no need to update the UI. return false; m_shape = shape; m_texture_filename = texture_filename; m_model_filename = model_filename; - m_type = new_type; + m_type = type; calc_bounding_boxes(); ExPolygon poly; - for (const Vec2d& p : m_shape) - { + for (const Vec2d& p : m_shape) { poly.contour.append(Point(scale_(p(0)), scale_(p(1)))); } @@ -242,8 +308,13 @@ bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, c m_model.reset(); // Set the origin and size for rendering the coordinate system axes. +#if ENABLE_GCODE_VIEWER + m_axes.set_origin({ 0.0, 0.0, static_cast(GROUND_Z) }); + m_axes.set_stem_length(0.1f * static_cast(m_bounding_box.max_size())); +#else m_axes.origin = Vec3d(0.0, 0.0, (double)GROUND_Z); m_axes.length = 0.1 * m_bounding_box.max_size() * Vec3d::Ones(); +#endif // ENABLE_GCODE_VIEWER // Let the calee to update the UI. return true; @@ -282,25 +353,35 @@ void Bed3D::render(GLCanvas3D& canvas, bool bottom, float scale_factor, void Bed3D::calc_bounding_boxes() const { m_bounding_box = BoundingBoxf3(); - for (const Vec2d& p : m_shape) - { + for (const Vec2d& p : m_shape) { m_bounding_box.merge(Vec3d(p(0), p(1), 0.0)); } m_extended_bounding_box = m_bounding_box; // extend to contain axes - m_extended_bounding_box.merge(m_axes.length + Axes::ArrowLength * Vec3d::Ones()); +#if ENABLE_GCODE_VIEWER + m_extended_bounding_box.merge(m_axes.get_origin() + m_axes.get_total_length() * Vec3d::Ones()); + m_extended_bounding_box.merge(m_extended_bounding_box.min + Vec3d(-Axes::DefaultTipRadius, -Axes::DefaultTipRadius, m_extended_bounding_box.max(2))); + // extend to contain model, if any + BoundingBoxf3 model_bb = m_model.get_bounding_box(); + if (model_bb.defined) { + model_bb.translate(m_model_offset); + m_extended_bounding_box.merge(model_bb); + } +#else + m_extended_bounding_box.merge(m_axes.length + Axes::ArrowLength * Vec3d::Ones()); // extend to contain model, if any if (!m_model.get_filename().empty()) m_extended_bounding_box.merge(m_model.get_transformed_bounding_box()); +#endif // ENABLE_GCODE_VIEWER } void Bed3D::calc_triangles(const ExPolygon& poly) { Polygons triangles; - poly.triangulate(&triangles); + poly.triangulate_p2t(&triangles); if (!m_triangles.set_from_triangles(triangles, GROUND_Z, true)) printf("Unable to create bed triangles\n"); @@ -309,15 +390,13 @@ void Bed3D::calc_triangles(const ExPolygon& poly) void Bed3D::calc_gridlines(const ExPolygon& poly, const BoundingBox& bed_bbox) { Polylines axes_lines; - for (coord_t x = bed_bbox.min(0); x <= bed_bbox.max(0); x += scale_(10.0)) - { + for (coord_t x = bed_bbox.min(0); x <= bed_bbox.max(0); x += scale_(10.0)) { Polyline line; line.append(Point(x, bed_bbox.min(1))); line.append(Point(x, bed_bbox.max(1))); axes_lines.push_back(line); } - for (coord_t y = bed_bbox.min(1); y <= bed_bbox.max(1); y += scale_(10.0)) - { + for (coord_t y = bed_bbox.min(1); y <= bed_bbox.max(1); y += scale_(10.0)) { Polyline line; line.append(Point(bed_bbox.min(0), y)); line.append(Point(bed_bbox.max(0), y)); @@ -335,6 +414,7 @@ void Bed3D::calc_gridlines(const ExPolygon& poly, const BoundingBox& bed_bbox) printf("Unable to create bed grid lines\n"); } +#if !ENABLE_GCODE_VIEWER static std::string system_print_bed_model(const Preset &preset) { std::string out; @@ -352,23 +432,25 @@ static std::string system_print_bed_texture(const Preset &preset) out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_texture; return out; } +#endif // !ENABLE_GCODE_VIEWER std::tuple Bed3D::detect_type(const Pointfs& shape) const { auto bundle = wxGetApp().preset_bundle; - if (bundle != nullptr) - { + if (bundle != nullptr) { const Preset* curr = &bundle->printers.get_selected_preset(); - while (curr != nullptr) - { - if (curr->config.has("bed_shape")) - { - if (shape == dynamic_cast(curr->config.option("bed_shape"))->values) - { + while (curr != nullptr) { + if (curr->config.has("bed_shape")) { + if (shape == dynamic_cast(curr->config.option("bed_shape"))->values) { +#if ENABLE_GCODE_VIEWER + std::string model_filename = PresetUtils::system_printer_bed_model(*curr); + std::string texture_filename = PresetUtils::system_printer_bed_texture(*curr); +#else std::string model_filename = system_print_bed_model(*curr); std::string texture_filename = system_print_bed_texture(*curr); +#endif // ENABLE_GCODE_VIEWER if (!model_filename.empty() && !texture_filename.empty()) - return std::make_tuple(System, model_filename, texture_filename); + return { System, model_filename, texture_filename }; } } @@ -376,7 +458,7 @@ std::tuple Bed3D::detect_type(const Poin } } - return std::make_tuple(Custom, "", ""); + return { Custom, "", "" }; } void Bed3D::render_axes() const @@ -396,26 +478,21 @@ void Bed3D::render_system(GLCanvas3D& canvas, bool bottom, bool show_texture) co void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const { - if (m_texture_filename.empty()) - { + if (m_texture_filename.empty()) { m_texture.reset(); render_default(bottom); return; } - if ((m_texture.get_id() == 0) || (m_texture.get_source() != m_texture_filename)) - { + if ((m_texture.get_id() == 0) || (m_texture.get_source() != m_texture_filename)) { m_texture.reset(); - if (boost::algorithm::iends_with(m_texture_filename, ".svg")) - { + if (boost::algorithm::iends_with(m_texture_filename, ".svg")) { // use higher resolution images if graphic card and opengl version allow GLint max_tex_size = OpenGLManager::get_gl_info().get_max_tex_size(); - if ((m_temp_texture.get_id() == 0) || (m_temp_texture.get_source() != m_texture_filename)) - { + if ((m_temp_texture.get_id() == 0) || (m_temp_texture.get_source() != m_texture_filename)) { // generate a temporary lower resolution texture to show while no main texture levels have been compressed - if (!m_temp_texture.load_from_svg_file(m_texture_filename, false, false, false, max_tex_size / 8)) - { + if (!m_temp_texture.load_from_svg_file(m_texture_filename, false, false, false, max_tex_size / 8)) { render_default(bottom); return; } @@ -423,19 +500,15 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const } // starts generating the main texture, compression will run asynchronously - if (!m_texture.load_from_svg_file(m_texture_filename, true, true, true, max_tex_size)) - { + if (!m_texture.load_from_svg_file(m_texture_filename, true, true, true, max_tex_size)) { render_default(bottom); return; } - } - else if (boost::algorithm::iends_with(m_texture_filename, ".png")) - { + } + else if (boost::algorithm::iends_with(m_texture_filename, ".png")) { // generate a temporary lower resolution texture to show while no main texture levels have been compressed - if ((m_temp_texture.get_id() == 0) || (m_temp_texture.get_source() != m_texture_filename)) - { - if (!m_temp_texture.load_from_file(m_texture_filename, false, GLTexture::None, false)) - { + if ((m_temp_texture.get_id() == 0) || (m_temp_texture.get_source() != m_texture_filename)) { + if (!m_temp_texture.load_from_file(m_texture_filename, false, GLTexture::None, false)) { render_default(bottom); return; } @@ -443,20 +516,17 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const } // starts generating the main texture, compression will run asynchronously - if (!m_texture.load_from_file(m_texture_filename, true, GLTexture::MultiThreaded, true)) - { + if (!m_texture.load_from_file(m_texture_filename, true, GLTexture::MultiThreaded, true)) { render_default(bottom); return; } } - else - { + else { render_default(bottom); return; } } - else if (m_texture.unsent_compressed_data_available()) - { + else if (m_texture.unsent_compressed_data_available()) { // sends to gpu the already available compressed levels of the main texture m_texture.send_compressed_data_to_gpu(); @@ -468,19 +538,14 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const } - if (m_triangles.get_vertices_count() > 0) - { - if (m_shader.get_shader_program_id() == 0) - m_shader.init("printbed.vs", "printbed.fs"); + if (m_triangles.get_vertices_count() > 0) { + GLShaderProgram* shader = wxGetApp().get_shader("printbed"); + if (shader != nullptr) { + shader->start_using(); + shader->set_uniform("transparent_background", bottom); + shader->set_uniform("svg_source", boost::algorithm::iends_with(m_texture.get_source(), ".svg")); - if (m_shader.is_initialized()) - { - m_shader.start_using(); - m_shader.set_uniform("transparent_background", bottom); - m_shader.set_uniform("svg_source", boost::algorithm::iends_with(m_texture.get_source(), ".svg")); - - if (m_vbo_id == 0) - { + if (m_vbo_id == 0) { glsafe(::glGenBuffers(1, &m_vbo_id)); glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id)); glsafe(::glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)m_triangles.get_vertices_data_size(), (const GLvoid*)m_triangles.get_vertices_data(), GL_STATIC_DRAW)); @@ -498,8 +563,8 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const unsigned int stride = m_triangles.get_vertex_data_size(); - GLint position_id = m_shader.get_attrib_location("v_position"); - GLint tex_coords_id = m_shader.get_attrib_location("v_tex_coords"); + GLint position_id = shader->get_attrib_location("v_position"); + GLint tex_coords_id = shader->get_attrib_location("v_tex_coords"); // show the temporary texture while no compressed data is available GLuint tex_id = (GLuint)m_temp_texture.get_id(); @@ -509,13 +574,11 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const glsafe(::glBindTexture(GL_TEXTURE_2D, tex_id)); glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id)); - if (position_id != -1) - { + if (position_id != -1) { glsafe(::glEnableVertexAttribArray(position_id)); glsafe(::glVertexAttribPointer(position_id, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)(intptr_t)m_triangles.get_position_offset())); } - if (tex_coords_id != -1) - { + if (tex_coords_id != -1) { glsafe(::glEnableVertexAttribArray(tex_coords_id)); glsafe(::glVertexAttribPointer(tex_coords_id, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*)(intptr_t)m_triangles.get_tex_coords_offset())); } @@ -537,7 +600,7 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas) const glsafe(::glDisable(GL_BLEND)); glsafe(::glDepthMask(GL_TRUE)); - m_shader.stop_using(); + shader->stop_using(); } } } @@ -547,29 +610,41 @@ void Bed3D::render_model() const if (m_model_filename.empty()) return; - if ((m_model.get_filename() != m_model_filename) && m_model.init_from_file(m_model_filename)) - { + if ((m_model.get_filename() != m_model_filename) && m_model.init_from_file(m_model_filename)) { // move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad Vec3d shift = m_bounding_box.center(); shift(2) = -0.03; +#if ENABLE_GCODE_VIEWER + m_model_offset = shift; +#else m_model.set_offset(shift); +#endif // ENABLE_GCODE_VIEWER // update extended bounding box calc_bounding_boxes(); } - if (!m_model.get_filename().empty()) - { - glsafe(::glEnable(GL_LIGHTING)); - m_model.render(); - glsafe(::glDisable(GL_LIGHTING)); + if (!m_model.get_filename().empty()) { + GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); + if (shader != nullptr) { + shader->start_using(); +#if ENABLE_GCODE_VIEWER + shader->set_uniform("uniform_color", m_model_color); + ::glPushMatrix(); + ::glTranslated(m_model_offset(0), m_model_offset(1), m_model_offset(2)); +#endif // ENABLE_GCODE_VIEWER + m_model.render(); +#if ENABLE_GCODE_VIEWER + ::glPopMatrix(); +#endif // ENABLE_GCODE_VIEWER + shader->stop_using(); + } } } void Bed3D::render_custom(GLCanvas3D& canvas, bool bottom, bool show_texture) const { - if (m_texture_filename.empty() && m_model_filename.empty()) - { + if (m_texture_filename.empty() && m_model_filename.empty()) { render_default(bottom); return; } @@ -586,8 +661,7 @@ void Bed3D::render_default(bool bottom) const m_texture.reset(); unsigned int triangles_vcount = m_triangles.get_vertices_count(); - if (triangles_vcount > 0) - { + if (triangles_vcount > 0) { bool has_model = !m_model.get_filename().empty(); glsafe(::glEnable(GL_DEPTH_TEST)); @@ -596,11 +670,14 @@ void Bed3D::render_default(bool bottom) const glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); - if (!has_model && !bottom) - { + if (!has_model && !bottom) { // draw background glsafe(::glDepthMask(GL_FALSE)); +#if ENABLE_GCODE_VIEWER + glsafe(::glColor4fv(m_model_color.data())); +#else glsafe(::glColor4f(0.35f, 0.35f, 0.35f, 0.4f)); +#endif // ENABLE_GCODE_VIEWER glsafe(::glNormal3d(0.0f, 0.0f, 1.0f)); glsafe(::glVertexPointer(3, GL_FLOAT, m_triangles.get_vertex_data_size(), (GLvoid*)m_triangles.get_vertices_data())); glsafe(::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)triangles_vcount)); @@ -608,11 +685,11 @@ void Bed3D::render_default(bool bottom) const } // draw grid - glsafe(::glLineWidth(3.0f * m_scale_factor)); + glsafe(::glLineWidth(1.5f * m_scale_factor)); if (has_model && !bottom) - glsafe(::glColor4f(0.75f, 0.75f, 0.75f, 1.0f)); + glsafe(::glColor4f(0.9f, 0.9f, 0.9f, 1.0f)); else - glsafe(::glColor4f(0.2f, 0.2f, 0.2f, 0.4f)); + glsafe(::glColor4f(0.9f, 0.9f, 0.9f, 0.6f)); glsafe(::glVertexPointer(3, GL_FLOAT, m_triangles.get_vertex_data_size(), (GLvoid*)m_gridlines.get_vertices_data())); glsafe(::glDrawArrays(GL_LINES, 0, (GLsizei)m_gridlines.get_vertices_count())); @@ -624,8 +701,7 @@ void Bed3D::render_default(bool bottom) const void Bed3D::reset() { - if (m_vbo_id > 0) - { + if (m_vbo_id > 0) { glsafe(::glDeleteBuffers(1, &m_vbo_id)); m_vbo_id = 0; } diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp index abdfca1fe0..fbfc3078c1 100644 --- a/src/slic3r/GUI/3DBed.hpp +++ b/src/slic3r/GUI/3DBed.hpp @@ -3,12 +3,19 @@ #include "GLTexture.hpp" #include "3DScene.hpp" -#include "GLShader.hpp" +#if ENABLE_GCODE_VIEWER +#include "GLModel.hpp" +#endif // ENABLE_GCODE_VIEWER #include +#if ENABLE_GCODE_VIEWER +#include +#endif // ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER class GLUquadric; typedef class GLUquadric GLUquadricObj; +#endif // !ENABLE_GCODE_VIEWER namespace Slic3r { namespace GUI { @@ -45,22 +52,53 @@ public: class Bed3D { +#if ENABLE_GCODE_VIEWER + class Axes + { + public: + static const float DefaultStemRadius; + static const float DefaultStemLength; + static const float DefaultTipRadius; + static const float DefaultTipLength; + + private: +#else struct Axes { static const double Radius; static const double ArrowBaseRadius; static const double ArrowLength; +#endif // ENABLE_GCODE_VIEWER + +#if ENABLE_GCODE_VIEWER + Vec3d m_origin{ Vec3d::Zero() }; + float m_stem_length{ DefaultStemLength }; + mutable GLModel m_arrow; + + public: +#else Vec3d origin; Vec3d length; GLUquadricObj* m_quadric; +#endif // ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER Axes(); ~Axes(); +#endif // !ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER + const Vec3d& get_origin() const { return m_origin; } + void set_origin(const Vec3d& origin) { m_origin = origin; } + void set_stem_length(float length); + float get_total_length() const { return m_stem_length + DefaultTipLength; } +#endif // ENABLE_GCODE_VIEWER void render() const; +#if !ENABLE_GCODE_VIEWER private: void render_axis(double length) const; +#endif // !ENABLE_GCODE_VIEWER }; public: @@ -82,10 +120,15 @@ private: GeometryBuffer m_triangles; GeometryBuffer m_gridlines; mutable GLTexture m_texture; +#if ENABLE_GCODE_VIEWER + mutable GLModel m_model; + mutable Vec3d m_model_offset{ Vec3d::Zero() }; + std::array m_model_color{ 0.235f, 0.235f, 0.235f, 1.0f }; +#else mutable GLBed m_model; +#endif // ENABLE_GCODE_VIEWER // temporary texture shown until the main texture has still no levels compressed mutable GLTexture m_temp_texture; - mutable Shader m_shader; mutable unsigned int m_vbo_id; Axes m_axes; @@ -101,7 +144,7 @@ public: const Pointfs& get_shape() const { return m_shape; } // Return true if the bed shape changed, so the calee will update the UI. - bool set_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model); + bool set_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom = false); const BoundingBoxf3& get_bounding_box(bool extended) const { return extended ? m_extended_bounding_box : m_bounding_box; diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 5dc0d430f1..fc285e3356 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -7,23 +7,28 @@ #endif // ENABLE_SMOOTH_NORMALS #include "3DScene.hpp" -#if ENABLE_ENVIRONMENT_MAP +#include "GLShader.hpp" #include "GUI_App.hpp" +#if ENABLE_ENVIRONMENT_MAP #include "Plater.hpp" -#include "AppConfig.hpp" #endif // ENABLE_ENVIRONMENT_MAP #include "libslic3r/ExtrusionEntity.hpp" #include "libslic3r/ExtrusionEntityCollection.hpp" #include "libslic3r/Geometry.hpp" +#if !ENABLE_GCODE_VIEWER #include "libslic3r/GCode/PreviewData.hpp" +#endif // !ENABLE_GCODE_VIEWER #include "libslic3r/Print.hpp" #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Slicing.hpp" +#if !ENABLE_GCODE_VIEWER #include "libslic3r/GCode/Analyzer.hpp" +#endif // !ENABLE_GCODE_VIEWER #include "slic3r/GUI/BitmapCache.hpp" #include "libslic3r/Format/STL.hpp" #include "libslic3r/Utils.hpp" +#include "libslic3r/AppConfig.hpp" #include #include @@ -301,6 +306,7 @@ const float GLVolume::MODEL_COLOR[4][4] = { }; const float GLVolume::SLA_SUPPORT_COLOR[4] = { 0.75f, 0.75f, 0.75f, 1.0f }; const float GLVolume::SLA_PAD_COLOR[4] = { 0.0f, 0.2f, 0.0f, 1.0f }; +const float GLVolume::NEUTRAL_COLOR[4] = { 0.9f, 0.9f, 0.9f, 1.0f }; GLVolume::GLVolume(float r, float g, float b, float a) : m_transformed_bounding_box_dirty(true) @@ -322,6 +328,7 @@ GLVolume::GLVolume(float r, float g, float b, float a) , is_extrusion_path(false) , force_transparent(false) , force_native_color(false) + , force_neutral_color(false) , tverts_range(0, size_t(-1)) , qverts_range(0, size_t(-1)) { @@ -347,12 +354,16 @@ void GLVolume::set_render_color(const float* rgba, unsigned int size) void GLVolume::set_render_color() { - if (force_native_color) + if (force_native_color || force_neutral_color) { if (is_outside && shader_outside_printer_detection_enabled) set_render_color(OUTSIDE_COLOR, 4); - else - set_render_color(color, 4); + else { + if (force_native_color) + set_render_color(color, 4); + else + set_render_color(NEUTRAL_COLOR, 4); + } } else { if (hover == HS_Select) @@ -442,7 +453,6 @@ BoundingBoxf3 GLVolume::transformed_convex_hull_bounding_box(const Transform3d & bounding_box().transformed(trafo); } - void GLVolume::set_range(double min_z, double max_z) { this->qverts_range.first = 0; @@ -496,24 +506,6 @@ void GLVolume::render() const glFrontFace(GL_CCW); } -#if !ENABLE_SLOPE_RENDERING -void GLVolume::render(int color_id, int detection_id, int worldmatrix_id) const -{ - if (color_id >= 0) - glsafe(::glUniform4fv(color_id, 1, (const GLfloat*)render_color)); - else - glsafe(::glColor4fv(render_color)); - - if (detection_id != -1) - glsafe(::glUniform1i(detection_id, shader_outside_printer_detection_enabled ? 1 : 0)); - - if (worldmatrix_id != -1) - glsafe(::glUniformMatrix4fv(worldmatrix_id, 1, GL_FALSE, (const GLfloat*)world_matrix().cast().data())); - - render(); -} -#endif // !ENABLE_SLOPE_RENDERING - bool GLVolume::is_sla_support() const { return this->composite_id.volume_id == -int(slaposSupportTree); } bool GLVolume::is_sla_pad() const { return this->composite_id.volume_id == -int(slaposPad); } @@ -747,6 +739,10 @@ GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCo void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disable_cullface, const Transform3d& view_matrix, std::function filter_func) const { + GLShaderProgram* shader = GUI::wxGetApp().get_current_shader(); + if (shader == nullptr) + return; + glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); @@ -757,89 +753,35 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); - GLint current_program_id; - glsafe(::glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_program_id)); - GLint color_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "uniform_color") : -1; - GLint z_range_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "z_range") : -1; - GLint clipping_plane_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "clipping_plane") : -1; - - GLint print_box_min_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "print_box.min") : -1; - GLint print_box_max_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "print_box.max") : -1; - GLint print_box_active_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "print_box.actived") : -1; - GLint print_box_worldmatrix_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "print_box.volume_world_matrix") : -1; - -#if ENABLE_SLOPE_RENDERING - GLint slope_active_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "slope.actived") : -1; - GLint slope_normal_matrix_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "slope.volume_world_normal_matrix") : -1; - GLint slope_z_range_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "slope.z_range") : -1; -#endif // ENABLE_SLOPE_RENDERING - -#if ENABLE_ENVIRONMENT_MAP - GLint use_environment_tex_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "use_environment_tex") : -1; -#endif // ENABLE_ENVIRONMENT_MAP - glcheck(); - - if (print_box_min_id != -1) - glsafe(::glUniform3fv(print_box_min_id, 1, (const GLfloat*)m_print_box_min)); - - if (print_box_max_id != -1) - glsafe(::glUniform3fv(print_box_max_id, 1, (const GLfloat*)m_print_box_max)); - - if (z_range_id != -1) - glsafe(::glUniform2fv(z_range_id, 1, (const GLfloat*)m_z_range)); - - if (clipping_plane_id != -1) - glsafe(::glUniform4fv(clipping_plane_id, 1, (const GLfloat*)m_clipping_plane)); - -#if ENABLE_SLOPE_RENDERING - if (slope_z_range_id != -1) - glsafe(::glUniform2fv(slope_z_range_id, 1, (const GLfloat*)m_slope.z_range.data())); -#endif // ENABLE_SLOPE_RENDERING + shader->set_uniform("print_box.min", m_print_box_min, 3); + shader->set_uniform("print_box.max", m_print_box_max, 3); + shader->set_uniform("z_range", m_z_range, 2); + shader->set_uniform("clipping_plane", m_clipping_plane, 4); + shader->set_uniform("slope.normal_z", m_slope.normal_z); #if ENABLE_ENVIRONMENT_MAP unsigned int environment_texture_id = GUI::wxGetApp().plater()->get_environment_texture_id(); - bool use_environment_texture = current_program_id > 0 && environment_texture_id > 0 && GUI::wxGetApp().app_config->get("use_environment_map") == "1"; - - if (use_environment_tex_id != -1) - { - glsafe(::glUniform1i(use_environment_tex_id, use_environment_texture ? 1 : 0)); - if (use_environment_texture) - glsafe(::glBindTexture(GL_TEXTURE_2D, environment_texture_id)); - } + bool use_environment_texture = environment_texture_id > 0 && GUI::wxGetApp().app_config->get("use_environment_map") == "1"; + shader->set_uniform("use_environment_tex", use_environment_texture); + if (use_environment_texture) + glsafe(::glBindTexture(GL_TEXTURE_2D, environment_texture_id)); #endif // ENABLE_ENVIRONMENT_MAP + glcheck(); GLVolumeWithIdAndZList to_render = volumes_to_render(this->volumes, type, view_matrix, filter_func); for (GLVolumeWithIdAndZ& volume : to_render) { volume.first->set_render_color(); -#if ENABLE_SLOPE_RENDERING - if (color_id >= 0) - glsafe(::glUniform4fv(color_id, 1, (const GLfloat*)volume.first->render_color)); - else - glsafe(::glColor4fv(volume.first->render_color)); - - if (print_box_active_id != -1) - glsafe(::glUniform1i(print_box_active_id, volume.first->shader_outside_printer_detection_enabled ? 1 : 0)); - - if (print_box_worldmatrix_id != -1) - glsafe(::glUniformMatrix4fv(print_box_worldmatrix_id, 1, GL_FALSE, (const GLfloat*)volume.first->world_matrix().cast().data())); - - if (slope_active_id != -1) - glsafe(::glUniform1i(slope_active_id, m_slope.active && !volume.first->is_modifier && !volume.first->is_wipe_tower ? 1 : 0)); - - if (slope_normal_matrix_id != -1) - { - Matrix3f normal_matrix = volume.first->world_matrix().matrix().block(0, 0, 3, 3).inverse().transpose().cast(); - glsafe(::glUniformMatrix3fv(slope_normal_matrix_id, 1, GL_FALSE, (const GLfloat*)normal_matrix.data())); - } + shader->set_uniform("uniform_color", volume.first->render_color, 4); + shader->set_uniform("print_box.actived", volume.first->shader_outside_printer_detection_enabled); + shader->set_uniform("print_box.volume_world_matrix", volume.first->world_matrix()); + shader->set_uniform("slope.actived", m_slope.active && !volume.first->is_modifier && !volume.first->is_wipe_tower); + shader->set_uniform("slope.volume_world_normal_matrix", static_cast(volume.first->world_matrix().matrix().block(0, 0, 3, 3).inverse().transpose().cast())); volume.first->render(); -#else - volume.first->render(color_id, print_box_detection_id, print_box_worldmatrix_id); -#endif // ENABLE_SLOPE_RENDERING } #if ENABLE_ENVIRONMENT_MAP - if (use_environment_tex_id != -1 && use_environment_texture) + if (use_environment_texture) glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); #endif // ENABLE_ENVIRONMENT_MAP @@ -1057,6 +999,7 @@ bool GLVolumeCollection::has_toolpaths_to_export() const return false; } +#if !ENABLE_GCODE_VIEWER void GLVolumeCollection::export_toolpaths_to_obj(const char* filename) const { if (filename == nullptr) @@ -1338,6 +1281,7 @@ void GLVolumeCollection::export_toolpaths_to_obj(const char* filename) const fclose(fp); } +#endif // !ENABLE_GCODE_VIEWER // caller is responsible for supplying NO lines with zero length static void thick_lines_to_indexed_vertex_array( @@ -1964,7 +1908,7 @@ void _3DScene::extrusionentity_to_verts(const ExtrusionEntity *extrusion_entity, if (extrusion_entity_collection != nullptr) extrusionentity_to_verts(*extrusion_entity_collection, print_z, copy, volume); else { - throw std::runtime_error("Unexpected extrusion_entity type in to_verts()"); + throw Slic3r::RuntimeError("Unexpected extrusion_entity type in to_verts()"); } } } @@ -1985,6 +1929,7 @@ void _3DScene::point3_to_verts(const Vec3crd& point, double width, double height thick_point_to_verts(point, width, height, volume); } +#if !ENABLE_GCODE_VIEWER GLModel::GLModel() : m_filename("") { @@ -2040,6 +1985,10 @@ void GLModel::reset() void GLModel::render() const { + GLShaderProgram* shader = GUI::wxGetApp().get_current_shader(); + if (shader == nullptr) + return; + glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); @@ -2047,21 +1996,8 @@ void GLModel::render() const glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); - GLint current_program_id; - glsafe(::glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_program_id)); - GLint color_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "uniform_color") : -1; - glcheck(); - -#if ENABLE_SLOPE_RENDERING - if (color_id >= 0) - glsafe(::glUniform4fv(color_id, 1, (const GLfloat*)m_volume.render_color)); - else - glsafe(::glColor4fv(m_volume.render_color)); - + shader->set_uniform("uniform_color", m_volume.render_color, 4); m_volume.render(); -#else - m_volume.render(color_id, -1, -1); -#endif // ENABLE_SLOPE_RENDERING glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); @@ -2274,5 +2210,6 @@ bool GLBed::on_init_from_file(const std::string& filename) return true; } +#endif // !ENABLE_GCODE_VIEWER } // namespace Slic3r diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index f935f0fb47..a6362dadc6 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -26,12 +26,6 @@ #endif // HAS_GLSAFE namespace Slic3r { -namespace GUI { -class Bed3D; -struct Camera; -class GLToolbar; -} // namespace GUI - class SLAPrintObject; enum SLAPrintObjectStep : unsigned int; class DynamicPrintConfig; @@ -257,6 +251,7 @@ public: static const float MODEL_COLOR[4][4]; static const float SLA_SUPPORT_COLOR[4]; static const float SLA_PAD_COLOR[4]; + static const float NEUTRAL_COLOR[4]; enum EHoverState : unsigned char { @@ -342,6 +337,8 @@ public: bool force_transparent : 1; // Whether or not always use the volume's own color (not using SELECTED/HOVER/DISABLED/OUTSIDE) bool force_native_color : 1; + // Whether or not render this volume in neutral + bool force_neutral_color : 1; }; // Is mouse or rectangle selection over this object to select/deselect it ? @@ -450,9 +447,6 @@ public: void set_range(double low, double high); void render() const; -#if !ENABLE_SLOPE_RENDERING - void render(int color_id, int detection_id, int worldmatrix_id) const; -#endif // !ENABLE_SLOPE_RENDERING void finalize_geometry(bool opengl_initialized) { this->indexed_vertex_array.finalize_geometry(opengl_initialized); } void release_geometry() { this->indexed_vertex_array.release_geometry(); } @@ -497,26 +491,19 @@ private: // plane coeffs for clipping in shaders float m_clipping_plane[4]; -#if ENABLE_SLOPE_RENDERING struct Slope { // toggle for slope rendering bool active{ false }; - // [0] = yellow, [1] = red - std::array z_range; + float normal_z; }; Slope m_slope; -#endif // ENABLE_SLOPE_RENDERING public: GLVolumePtrs volumes; -#if ENABLE_SLOPE_RENDERING - GLVolumeCollection() { set_default_slope_z_range(); } -#else - GLVolumeCollection() = default; -#endif // ENABLE_SLOPE_RENDERING + GLVolumeCollection() { set_default_slope_normal_z(); } ~GLVolumeCollection() { clear(); } std::vector load_object( @@ -575,14 +562,12 @@ public: void set_z_range(float min_z, float max_z) { m_z_range[0] = min_z; m_z_range[1] = max_z; } void set_clipping_plane(const double* coeffs) { m_clipping_plane[0] = coeffs[0]; m_clipping_plane[1] = coeffs[1]; m_clipping_plane[2] = coeffs[2]; m_clipping_plane[3] = coeffs[3]; } -#if ENABLE_SLOPE_RENDERING bool is_slope_active() const { return m_slope.active; } void set_slope_active(bool active) { m_slope.active = active; } - const std::array& get_slope_z_range() const { return m_slope.z_range; } - void set_slope_z_range(const std::array& range) { m_slope.z_range = range; } - void set_default_slope_z_range() { m_slope.z_range = { -::cos(Geometry::deg2rad(90.0f - 45.0f)), -::cos(Geometry::deg2rad(90.0f - 70.0f)) }; } -#endif // ENABLE_SLOPE_RENDERING + float get_slope_normal_z() const { return m_slope.normal_z; } + void set_slope_normal_z(float normal_z) { m_slope.normal_z = normal_z; } + void set_default_slope_normal_z() { m_slope.normal_z = -::cos(Geometry::deg2rad(90.0f - 45.0f)); } // returns true if all the volumes are completely contained in the print volume // returns the containment state in the given out_state, if non-null @@ -603,8 +588,10 @@ public: std::string log_memory_info() const; bool has_toolpaths_to_export() const; +#if !ENABLE_GCODE_VIEWER // Export the geometry of the GLVolumes toolpaths of this collection into the file with the given path, in obj format void export_toolpaths_to_obj(const char* filename) const; +#endif // !ENABLE_GCODE_VIEWER private: GLVolumeCollection(const GLVolumeCollection &other); @@ -613,6 +600,7 @@ private: GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCollection::ERenderType type, const Transform3d& view_matrix, std::function filter_func = nullptr); +#if !ENABLE_GCODE_VIEWER class GLModel { protected: @@ -672,6 +660,7 @@ class GLBed : public GLModel protected: bool on_init_from_file(const std::string& filename) override; }; +#endif // !ENABLE_GCODE_VIEWER struct _3DScene { diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 92f8d1fdbd..2b1bea13cf 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -37,10 +37,17 @@ void AboutDialogLogo::onRepaint(wxEvent &event) // CopyrightsDialog // ----------------------------------------- CopyrightsDialog::CopyrightsDialog() +#if ENABLE_GCODE_VIEWER + : DPIDialog(NULL, wxID_ANY, from_u8((boost::format("%1% - %2%") + % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) + % _utf8(L("Portions copyright"))).str()), + wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +#else : DPIDialog(NULL, wxID_ANY, from_u8((boost::format("%1% - %2%") % SLIC3R_APP_NAME % _utf8(L("Portions copyright"))).str()), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +#endif // ENABLE_GCODE_VIEWER { this->SetFont(wxGetApp().normal_font()); this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); @@ -52,7 +59,7 @@ CopyrightsDialog::CopyrightsDialog() m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxSize(40 * em_unit(), 20 * em_unit()), wxHW_SCROLLBAR_AUTO); - wxFont font = GetFont(); + wxFont font = get_default_font(this); const int fs = font.GetPointSize(); const int fs2 = static_cast(1.2f*fs); int size[] = { fs, fs, fs, fs, fs2, fs2, fs2 }; @@ -201,8 +208,13 @@ void CopyrightsDialog::onCloseDialog(wxEvent &) } AboutDialog::AboutDialog() +#if ENABLE_GCODE_VIEWER + : DPIDialog(NULL, wxID_ANY, from_u8((boost::format(_utf8(L("About %s"))) % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME)).str()), wxDefaultPosition, + wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +#else : DPIDialog(NULL, wxID_ANY, from_u8((boost::format(_utf8(L("About %s"))) % SLIC3R_APP_NAME).str()), wxDefaultPosition, wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +#endif // ENABLE_GCODE_VIEWER { SetFont(wxGetApp().normal_font()); @@ -214,7 +226,11 @@ AboutDialog::AboutDialog() main_sizer->Add(hsizer, 0, wxEXPAND | wxALL, 20); // logo +#if ENABLE_GCODE_VIEWER + m_logo_bitmap = ScalableBitmap(this, wxGetApp().is_editor() ? "PrusaSlicer_192px.png" : "PrusaSlicer-gcodeviewer_192px.png", 192); +#else m_logo_bitmap = ScalableBitmap(this, "PrusaSlicer_192px.png", 192); +#endif // ENABLE_GCODE_VIEWER m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp()); hsizer->Add(m_logo, 1, wxALIGN_CENTER_VERTICAL); @@ -223,7 +239,11 @@ AboutDialog::AboutDialog() // title { +#if ENABLE_GCODE_VIEWER + wxStaticText* title = new wxStaticText(this, wxID_ANY, wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME, wxDefaultPosition, wxDefaultSize); +#else wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_APP_NAME, wxDefaultPosition, wxDefaultSize); +#endif // ENABLE_GCODE_VIEWER wxFont title_font = GUI::wxGetApp().bold_font(); title_font.SetFamily(wxFONTFAMILY_ROMAN); title_font.SetPointSize(24); @@ -233,7 +253,7 @@ AboutDialog::AboutDialog() // version { - auto version_string = _(L("Version"))+ " " + std::string(SLIC3R_VERSION); + auto version_string = _L("Version")+ " " + std::string(SLIC3R_VERSION); wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize); wxFont version_font = GetFont(); #ifdef __WXMSW__ @@ -249,7 +269,7 @@ AboutDialog::AboutDialog() m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO/*NEVER*/); { m_html->SetMinSize(wxSize(-1, 16 * wxGetApp().em_unit())); - wxFont font = GetFont(); + wxFont font = get_default_font(this); const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue()); auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue()); @@ -294,7 +314,7 @@ AboutDialog::AboutDialog() wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCLOSE); m_copy_rights_btn_id = NewControlId(); - auto copy_rights_btn = new wxButton(this, m_copy_rights_btn_id, _(L("Portions copyright"))+dots); + auto copy_rights_btn = new wxButton(this, m_copy_rights_btn_id, _L("Portions copyright")+dots); buttons->Insert(0, copy_rights_btn, 0, wxLEFT, 5); copy_rights_btn->Bind(wxEVT_BUTTON, &AboutDialog::onCopyrightBtn, this); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 8d50998c48..36187f81ec 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -19,8 +19,11 @@ #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/GCode/PostProcessor.hpp" +#if !ENABLE_GCODE_VIEWER #include "libslic3r/GCode/PreviewData.hpp" +#endif // !ENABLE_GCODE_VIEWER #include "libslic3r/Format/SL1.hpp" +#include "libslic3r/Thread.hpp" #include "libslic3r/libslic3r.h" #include @@ -34,11 +37,40 @@ #include "I18N.hpp" #include "RemovableDriveManager.hpp" -#include "slic3r/Utils/Thread.hpp" #include "slic3r/GUI/Plater.hpp" namespace Slic3r { +bool SlicingProcessCompletedEvent::critical_error() const +{ + try { + this->rethrow_exception(); + } catch (const Slic3r::SlicingError &) { + // Exception derived from SlicingError is non-critical. + return false; + } catch (...) { + } + return true; +} + +std::string SlicingProcessCompletedEvent::format_error_message() const +{ + std::string error; + try { + this->rethrow_exception(); + } catch (const std::bad_alloc& ex) { + wxString errmsg = GUI::from_u8((boost::format(_utf8(L("%s has encountered an error. It was likely caused by running out of memory. " + "If you are sure you have enough RAM on your system, this may also be a bug and we would " + "be glad if you reported it."))) % SLIC3R_APP_NAME).str()); + error = std::string(errmsg.ToUTF8()) + "\n\n" + std::string(ex.what()); + } catch (std::exception &ex) { + error = ex.what(); + } catch (...) { + error = "Unknown C++ exception."; + } + return error; +} + BackgroundSlicingProcess::BackgroundSlicingProcess() { boost::filesystem::path temp_path(wxStandardPaths::Get().GetTempDir().utf8_str().data()); @@ -89,34 +121,44 @@ void BackgroundSlicingProcess::process_fff() { assert(m_print == m_fff_print); m_print->process(); - wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_slicing_completed_id)); - m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data, m_thumbnail_cb); - + wxCommandEvent evt(m_event_slicing_completed_id); + // Post the Slicing Finished message for the G-code viewer to update. + // Passing the timestamp + evt.SetInt((int)(m_fff_print->step_state_with_timestamp(PrintStep::psSlicingFinished).timestamp)); + wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt.Clone()); +#if ENABLE_GCODE_VIEWER + m_fff_print->export_gcode(m_temp_output_path, m_gcode_result, m_thumbnail_cb); +#else + m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data, m_thumbnail_cb); +#endif // ENABLE_GCODE_VIEWER if (this->set_step_started(bspsGCodeFinalize)) { if (! m_export_path.empty()) { + wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); //FIXME localize the messages // Perform the final post-processing of the export path by applying the print statistics over the file name. std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path); - int copy_ret_val = copy_file(m_temp_output_path, export_path, m_export_path_on_removable_media); + std::string error_message; + int copy_ret_val = copy_file(m_temp_output_path, export_path, error_message, m_export_path_on_removable_media); switch (copy_ret_val) { case SUCCESS: break; // no error case FAIL_COPY_FILE: - throw std::runtime_error(_utf8(L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"))); + throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%"))) % error_message).str()); break; case FAIL_FILES_DIFFERENT: - throw std::runtime_error((boost::format(_utf8(L("Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."))) % export_path).str()); + throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."))) % export_path).str()); break; case FAIL_RENAMING: - throw std::runtime_error((boost::format(_utf8(L("Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."))) % export_path).str()); + throw Slic3r::RuntimeError((boost::format(_utf8(L("Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."))) % export_path).str()); break; case FAIL_CHECK_ORIGIN_NOT_OPENED: - throw std::runtime_error((boost::format(_utf8(L("Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."))) % m_temp_output_path % export_path).str()); + throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."))) % m_temp_output_path % export_path).str()); break; case FAIL_CHECK_TARGET_NOT_OPENED: - throw std::runtime_error((boost::format(_utf8(L("Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."))) % export_path).str()); + throw Slic3r::RuntimeError((boost::format(_utf8(L("Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."))) % export_path).str()); break; default: - BOOST_LOG_TRIVIAL(warning) << "Unexpected fail code(" << (int)copy_ret_val << ") durring copy_file() to " << export_path << "."; + throw Slic3r::RuntimeError(_utf8(L("Unknown error occured during exporting G-code."))); + BOOST_LOG_TRIVIAL(error) << "Unexpected fail code(" << (int)copy_ret_val << ") durring copy_file() to " << export_path << "."; break; } @@ -124,6 +166,7 @@ void BackgroundSlicingProcess::process_fff() run_post_process_scripts(export_path, m_fff_print->config()); m_print->set_status(100, (boost::format(_utf8(L("G-code file exported to %1%"))) % export_path).str()); } else if (! m_upload_job.empty()) { + wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); prepare_upload(); } else { m_print->set_status(100, _utf8(L("Slicing complete"))); @@ -149,6 +192,8 @@ void BackgroundSlicingProcess::process_sla() m_print->process(); if (this->set_step_started(bspsGCodeFinalize)) { if (! m_export_path.empty()) { + wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); + const std::string export_path = m_sla_print->print_statistics().finalize_output_path(m_export_path); Zipper zipper(export_path); @@ -170,6 +215,7 @@ void BackgroundSlicingProcess::process_sla() m_print->set_status(100, (boost::format(_utf8(L("Masked SLA file exported to %1%"))) % export_path).str()); } else if (! m_upload_job.empty()) { + wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); prepare_upload(); } else { m_print->set_status(100, _utf8(L("Slicing complete"))); @@ -180,6 +226,9 @@ void BackgroundSlicingProcess::process_sla() void BackgroundSlicingProcess::thread_proc() { + set_current_thread_name("slic3r_BgSlcPcs"); + name_tbb_thread_pool_threads(); + assert(m_print != nullptr); assert(m_print == m_fff_print || m_print == m_sla_print); std::unique_lock lck(m_mutex); @@ -198,7 +247,7 @@ void BackgroundSlicingProcess::thread_proc() // Process the background slicing task. m_state = STATE_RUNNING; lck.unlock(); - std::string error; + std::exception_ptr exception; try { assert(m_print != nullptr); switch(m_print->technology()) { @@ -209,15 +258,8 @@ void BackgroundSlicingProcess::thread_proc() } catch (CanceledException & /* ex */) { // Canceled, this is all right. assert(m_print->canceled()); - } catch (const std::bad_alloc& ex) { - wxString errmsg = GUI::from_u8((boost::format(_utf8(L("%s has encountered an error. It was likely caused by running out of memory. " - "If you are sure you have enough RAM on your system, this may also be a bug and we would " - "be glad if you reported it."))) % SLIC3R_APP_NAME).str()); - error = std::string(errmsg.ToUTF8()) + "\n\n" + std::string(ex.what()); - } catch (std::exception &ex) { - error = ex.what(); } catch (...) { - error = "Unknown C++ exception."; + exception = std::current_exception(); } m_print->finalize(); lck.lock(); @@ -225,9 +267,9 @@ void BackgroundSlicingProcess::thread_proc() if (m_print->cancel_status() != Print::CANCELED_INTERNAL) { // Only post the canceled event, if canceled by user. // Don't post the canceled event, if canceled from Print::apply(). - wxCommandEvent evt(m_event_finished_id); - evt.SetString(GUI::from_u8(error)); - evt.SetInt(m_print->canceled() ? -1 : (error.empty() ? 1 : 0)); + SlicingProcessCompletedEvent evt(m_event_finished_id, 0, + (m_state == STATE_CANCELED) ? SlicingProcessCompletedEvent::Cancelled : + exception ? SlicingProcessCompletedEvent::Error : SlicingProcessCompletedEvent::Finished, exception); wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt.Clone()); } m_print->restart(); @@ -287,7 +329,7 @@ bool BackgroundSlicingProcess::start() // The background processing thread is already running. return false; if (! this->idle()) - throw std::runtime_error("Cannot start a background task, the worker thread is not idle."); + throw Slic3r::RuntimeError("Cannot start a background task, the worker thread is not idle."); m_state = STATE_STARTED; m_print->set_cancel_callback([this](){ this->stop_internal(); }); lck.unlock(); @@ -376,6 +418,17 @@ Print::ApplyStatus BackgroundSlicingProcess::apply(const Model &model, const Dyn assert(m_print != nullptr); assert(config.opt_enum("printer_technology") == m_print->technology()); Print::ApplyStatus invalidated = m_print->apply(model, config); +#if ENABLE_GCODE_VIEWER + if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) != 0 && m_print->technology() == ptFFF && + !this->m_fff_print->is_step_done(psGCodeExport)) + { + // Some FFF status was invalidated, and the G-code was not exported yet. + // Let the G-code preview UI know that the final G-code preview is not valid. + // In addition, this early memory deallocation reduces memory footprint. + if (m_gcode_result != nullptr) + m_gcode_result->reset(); + } +#else if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) != 0 && m_print->technology() == ptFFF && m_gcode_preview_data != nullptr && ! this->m_fff_print->is_step_done(psGCodeExport)) { // Some FFF status was invalidated, and the G-code was not exported yet. @@ -383,6 +436,7 @@ Print::ApplyStatus BackgroundSlicingProcess::apply(const Model &model, const Dyn // In addition, this early memory deallocation reduces memory footprint. m_gcode_preview_data->reset(); } +#endif // ENABLE_GCODE_VIEWER return invalidated; } @@ -469,8 +523,9 @@ void BackgroundSlicingProcess::prepare_upload() if (m_print == m_fff_print) { m_print->set_status(95, _utf8(L("Running post-processing scripts"))); - if (copy_file(m_temp_output_path, source_path.string()) != SUCCESS) { - throw std::runtime_error(_utf8(L("Copying of the temporary G-code to the output G-code failed"))); + std::string error_message; + if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS) { + throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed"))); } run_post_process_scripts(source_path.string(), m_fff_print->config()); m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp index 38e9e10755..1b2687e63a 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -11,6 +11,9 @@ #include "libslic3r/GCode/ThumbnailData.hpp" #include "libslic3r/Format/SL1.hpp" #include "slic3r/Utils/PrintHost.hpp" +#if ENABLE_GCODE_VIEWER +#include "libslic3r/GCode/GCodeProcessor.hpp" +#endif // ENABLE_GCODE_VIEWER namespace boost { namespace filesystem { class path; } } @@ -18,7 +21,9 @@ namespace boost { namespace filesystem { class path; } } namespace Slic3r { class DynamicPrintConfig; +#if !ENABLE_GCODE_VIEWER class GCodePreviewData; +#endif // !ENABLE_GCODE_VIEWER class Model; class SLAPrint; @@ -32,6 +37,36 @@ public: PrintBase::SlicingStatus status; }; +class SlicingProcessCompletedEvent : public wxEvent +{ +public: + enum StatusType { + Finished, + Cancelled, + Error + }; + + SlicingProcessCompletedEvent(wxEventType eventType, int winid, StatusType status, std::exception_ptr exception) : + wxEvent(winid, eventType), m_status(status), m_exception(exception) {} + virtual wxEvent* Clone() const { return new SlicingProcessCompletedEvent(*this); } + + StatusType status() const { return m_status; } + bool finished() const { return m_status == Finished; } + bool success() const { return m_status == Finished; } + bool cancelled() const { return m_status == Cancelled; } + bool error() const { return m_status == Error; } + // Unhandled error produced by stdlib or a Win32 structured exception, or unhandled Slic3r's own critical exception. + bool critical_error() const; + // Only valid if error() + void rethrow_exception() const { assert(this->error()); assert(m_exception); std::rethrow_exception(m_exception); } + // Produce a human readable message to be displayed by a notification or a message box. + std::string format_error_message() const; + +private: + StatusType m_status; + std::exception_ptr m_exception; +}; + wxDEFINE_EVENT(EVT_SLICING_UPDATE, SlicingStatusEvent); // Print step IDs for keeping track of the print state. @@ -50,8 +85,12 @@ public: void set_fff_print(Print *print) { m_fff_print = print; } void set_sla_print(SLAPrint *print) { m_sla_print = print; m_sla_print->set_printer(&m_sla_archive); } - void set_gcode_preview_data(GCodePreviewData *gpd) { m_gcode_preview_data = gpd; } - void set_thumbnail_cb(ThumbnailsGeneratorCallback cb) { m_thumbnail_cb = cb; } + void set_thumbnail_cb(ThumbnailsGeneratorCallback cb) { m_thumbnail_cb = cb; } +#if ENABLE_GCODE_VIEWER + void set_gcode_result(GCodeProcessor::Result* result) { m_gcode_result = result; } +#else + void set_gcode_preview_data(GCodePreviewData* gpd) { m_gcode_preview_data = gpd; } +#endif // ENABLE_GCODE_VIEWER // The following wxCommandEvent will be sent to the UI thread / Plater window, when the slicing is finished // and the background processing will transition into G-code export. @@ -60,6 +99,10 @@ public: // The following wxCommandEvent will be sent to the UI thread / Plater window, when the G-code export is finished. // The wxCommandEvent is sent to the UI thread asynchronously without waiting for the event to be processed. void set_finished_event(int event_id) { m_event_finished_id = event_id; } + // The following wxCommandEvent will be sent to the UI thread / Plater window, when the G-code is being exported to + // specified path or uploaded. + // The wxCommandEvent is sent to the UI thread asynchronously without waiting for the event to be processed. + void set_export_began_event(int event_id) { m_event_export_began_id = event_id; } // Activate either m_fff_print or m_sla_print. // Return true if changed. @@ -153,12 +196,17 @@ private: // Non-owned pointers to Print instances. Print *m_fff_print = nullptr; SLAPrint *m_sla_print = nullptr; +#if ENABLE_GCODE_VIEWER + // Data structure, to which the G-code export writes its annotations. + GCodeProcessor::Result *m_gcode_result = nullptr; +#else // Data structure, to which the G-code export writes its annotations. GCodePreviewData *m_gcode_preview_data = nullptr; - // Callback function, used to write thumbnails into gcode. - ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr; - SL1Archive m_sla_archive; - // Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID. +#endif // ENABLE_GCODE_VIEWER + // Callback function, used to write thumbnails into gcode. + ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr; + SL1Archive m_sla_archive; + // Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID. std::string m_temp_output_path; // Output path provided by the user. The output path may be set even if the slicing is running, // but once set, it cannot be re-set. @@ -190,6 +238,9 @@ private: int m_event_slicing_completed_id = 0; // wxWidgets command ID to be sent to the plater to inform that the task finished. int m_event_finished_id = 0; + // wxWidgets command ID to be sent to the plater to inform that the G-code is being exported. + int m_event_export_began_id = 0; + }; }; // namespace Slic3r diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index f08b1a3794..7818382331 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -21,6 +21,160 @@ namespace Slic3r { namespace GUI { +BedShape::BedShape(const ConfigOptionPoints& points) +{ + auto polygon = Polygon::new_scale(points.values); + + // is this a rectangle ? + if (points.size() == 4) { + auto lines = polygon.lines(); + if (lines[0].parallel_to(lines[2]) && lines[1].parallel_to(lines[3])) { + // okay, it's a rectangle + // find origin + coordf_t x_min, x_max, y_min, y_max; + x_max = x_min = points.values[0](0); + y_max = y_min = points.values[0](1); + for (auto pt : points.values) + { + x_min = std::min(x_min, pt(0)); + x_max = std::max(x_max, pt(0)); + y_min = std::min(y_min, pt(1)); + y_max = std::max(y_max, pt(1)); + } + + m_type = Type::Rectangular; + m_rectSize = Vec2d(x_max - x_min, y_max - y_min); + m_rectOrigin = Vec2d(-x_min, -y_min); + + return; + } + } + + // is this a circle ? + { + // Analyze the array of points.Do they reside on a circle ? + auto center = polygon.bounding_box().center(); + std::vector vertex_distances; + double avg_dist = 0; + for (auto pt : polygon.points) + { + double distance = (pt - center).cast().norm(); + vertex_distances.push_back(distance); + avg_dist += distance; + } + + avg_dist /= vertex_distances.size(); + bool defined_value = true; + for (auto el : vertex_distances) + { + if (abs(el - avg_dist) > 10 * SCALED_EPSILON) + defined_value = false; + break; + } + if (defined_value) { + // all vertices are equidistant to center + m_type = Type::Circular; + m_diameter = unscale(avg_dist * 2); + + return; + } + } + + if (points.size() < 3) + return; + + // This is a custom bed shape, use the polygon provided. + m_type = Type::Custom; +} + +static std::string get_option_label(BedShape::Parameter param) +{ + switch (param) { + case BedShape::Parameter::RectSize : return L("Size"); + case BedShape::Parameter::RectOrigin: return L("Origin"); + case BedShape::Parameter::Diameter : return L("Diameter"); + default: return ""; + } +} + +void BedShape::append_option_line(ConfigOptionsGroupShp optgroup, Parameter param) +{ + ConfigOptionDef def; + + if (param == Parameter::RectSize) { + def.type = coPoints; + def.set_default_value(new ConfigOptionPoints{ Vec2d(200, 200) }); + def.min = 0; + def.max = 1200; + def.label = get_option_label(param); + def.tooltip = L("Size in X and Y of the rectangular plate."); + + Option option(def, "rect_size"); + optgroup->append_single_option_line(option); + } + else if (param == Parameter::RectOrigin) { + def.type = coPoints; + def.set_default_value(new ConfigOptionPoints{ Vec2d(0, 0) }); + def.min = -600; + def.max = 600; + def.label = get_option_label(param); + def.tooltip = L("Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."); + + Option option(def, "rect_origin"); + optgroup->append_single_option_line(option); + } + else if (param == Parameter::Diameter) { + def.type = coFloat; + def.set_default_value(new ConfigOptionFloat(200)); + def.sidetext = L("mm"); + def.label = get_option_label(param); + def.tooltip = L("Diameter of the print bed. It is assumed that origin (0,0) is located in the center."); + + Option option(def, "diameter"); + optgroup->append_single_option_line(option); + } +} + +wxString BedShape::get_name(Type type) +{ + switch (type) { + case Type::Rectangular : return _L("Rectangular"); + case Type::Circular : return _L("Circular"); + case Type::Custom : return _L("Custom"); + case Type::Invalid : + default : return _L("Invalid"); + } +} + +size_t BedShape::get_type() +{ + return static_cast(m_type == Type::Invalid ? Type::Rectangular : m_type); +} + +wxString BedShape::get_full_name_with_params() +{ + wxString out = _L("Shape") + ": " + get_name(m_type); + + if (m_type == Type::Rectangular) { + out += "\n" + _(get_option_label(Parameter::RectSize)) + ": [" + ConfigOptionPoint(m_rectSize).serialize() + "]"; + out += "\n" + _(get_option_label(Parameter::RectOrigin))+ ": [" + ConfigOptionPoint(m_rectOrigin).serialize() + "]"; + } + else if (m_type == Type::Circular) + out += "\n" + _L(get_option_label(Parameter::Diameter)) + ": [" + double_to_string(m_diameter) + "]"; + + return out; +} + +void BedShape::apply_optgroup_values(ConfigOptionsGroupShp optgroup) +{ + if (m_type == Type::Rectangular || m_type == Type::Invalid) { + optgroup->set_value("rect_size" , new ConfigOptionPoints{ m_rectSize }); + optgroup->set_value("rect_origin" , new ConfigOptionPoints{ m_rectOrigin }); + } + else if (m_type == Type::Circular) + optgroup->set_value("diameter", double_to_string(m_diameter)); +} + void BedShapeDialog::build_dialog(const ConfigOptionPoints& default_pt, const ConfigOptionString& custom_texture, const ConfigOptionString& custom_model) { SetFont(wxGetApp().normal_font()); @@ -72,54 +226,35 @@ void BedShapePanel::build_panel(const ConfigOptionPoints& default_pt, const Conf m_shape_options_book = new wxChoicebook(this, wxID_ANY, wxDefaultPosition, wxSize(25*wxGetApp().em_unit(), -1), wxCHB_TOP); sbsizer->Add(m_shape_options_book); - auto optgroup = init_shape_options_page(_(L("Rectangular"))); - ConfigOptionDef def; - def.type = coPoints; - def.set_default_value(new ConfigOptionPoints{ Vec2d(200, 200) }); - def.min = 0; - def.max = 1200; - def.label = L("Size"); - def.tooltip = L("Size in X and Y of the rectangular plate."); - Option option(def, "rect_size"); - optgroup->append_single_option_line(option); + auto optgroup = init_shape_options_page(BedShape::get_name(BedShape::Type::Rectangular)); + BedShape::append_option_line(optgroup, BedShape::Parameter::RectSize); + BedShape::append_option_line(optgroup, BedShape::Parameter::RectOrigin); + activate_options_page(optgroup); - def.type = coPoints; - def.set_default_value(new ConfigOptionPoints{ Vec2d(0, 0) }); - def.min = -600; - def.max = 600; - def.label = L("Origin"); - def.tooltip = L("Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."); - option = Option(def, "rect_origin"); - optgroup->append_single_option_line(option); + optgroup = init_shape_options_page(BedShape::get_name(BedShape::Type::Circular)); + BedShape::append_option_line(optgroup, BedShape::Parameter::Diameter); + activate_options_page(optgroup); - optgroup = init_shape_options_page(_(L("Circular"))); - def.type = coFloat; - def.set_default_value(new ConfigOptionFloat(200)); - def.sidetext = L("mm"); - def.label = L("Diameter"); - def.tooltip = L("Diameter of the print bed. It is assumed that origin (0,0) is located in the center."); - option = Option(def, "diameter"); - optgroup->append_single_option_line(option); + optgroup = init_shape_options_page(BedShape::get_name(BedShape::Type::Custom)); - optgroup = init_shape_options_page(_(L("Custom"))); Line line{ "", "" }; line.full_width = 1; line.widget = [this](wxWindow* parent) { - wxButton* shape_btn = new wxButton(parent, wxID_ANY, _(L("Load shape from STL..."))); + wxButton* shape_btn = new wxButton(parent, wxID_ANY, _L("Load shape from STL...")); wxSizer* shape_sizer = new wxBoxSizer(wxHORIZONTAL); shape_sizer->Add(shape_btn, 1, wxEXPAND); wxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(shape_sizer, 1, wxEXPAND); - shape_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent& e) - { + shape_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { load_stl(); - })); + }); return sizer; }; optgroup->append_line(line); + activate_options_page(optgroup); wxPanel* texture_panel = init_texture_panel(); wxPanel* model_panel = init_model_panel(); @@ -149,10 +284,6 @@ void BedShapePanel::build_panel(const ConfigOptionPoints& default_pt, const Conf update_preview(); } -#define SHAPE_RECTANGULAR 0 -#define SHAPE_CIRCULAR 1 -#define SHAPE_CUSTOM 2 - // Called from the constructor. // Create a panel for a rectangular / circular / custom bed shape. ConfigOptionsGroupShp BedShapePanel::init_shape_options_page(const wxString& title) @@ -166,12 +297,18 @@ ConfigOptionsGroupShp BedShapePanel::init_shape_options_page(const wxString& tit }; m_optgroups.push_back(optgroup); - panel->SetSizerAndFit(optgroup->sizer); +// panel->SetSizerAndFit(optgroup->sizer); m_shape_options_book->AddPage(panel, title); return optgroup; } +void BedShapePanel::activate_options_page(ConfigOptionsGroupShp options_group) +{ + options_group->activate(); + options_group->parent()->SetSizerAndFit(options_group->sizer); +} + wxPanel* BedShapePanel::init_texture_panel() { wxPanel* panel = new wxPanel(this); @@ -245,6 +382,7 @@ wxPanel* BedShapePanel::init_texture_panel() return sizer; }; optgroup->append_line(line); + optgroup->activate(); panel->SetSizerAndFit(optgroup->sizer); @@ -324,6 +462,7 @@ wxPanel* BedShapePanel::init_model_panel() return sizer; }; optgroup->append_line(line); + optgroup->activate(); panel->SetSizerAndFit(optgroup->sizer); @@ -337,83 +476,18 @@ wxPanel* BedShapePanel::init_model_panel() // with the list of points in the ini file directly. void BedShapePanel::set_shape(const ConfigOptionPoints& points) { - auto polygon = Polygon::new_scale(points.values); + BedShape shape(points); - // is this a rectangle ? - if (points.size() == 4) { - auto lines = polygon.lines(); - if (lines[0].parallel_to(lines[2]) && lines[1].parallel_to(lines[3])) { - // okay, it's a rectangle - // find origin - coordf_t x_min, x_max, y_min, y_max; - x_max = x_min = points.values[0](0); - y_max = y_min = points.values[0](1); - for (auto pt : points.values) - { - x_min = std::min(x_min, pt(0)); - x_max = std::max(x_max, pt(0)); - y_min = std::min(y_min, pt(1)); - y_max = std::max(y_max, pt(1)); - } + m_shape_options_book->SetSelection(shape.get_type()); + shape.apply_optgroup_values(m_optgroups[shape.get_type()]); - auto origin = new ConfigOptionPoints{ Vec2d(-x_min, -y_min) }; + // Copy the polygon to the canvas, make a copy of the array, if custom shape is selected + if (shape.is_custom()) + m_loaded_shape = points.values; - m_shape_options_book->SetSelection(SHAPE_RECTANGULAR); - auto optgroup = m_optgroups[SHAPE_RECTANGULAR]; - optgroup->set_value("rect_size", new ConfigOptionPoints{ Vec2d(x_max - x_min, y_max - y_min) });//[x_max - x_min, y_max - y_min]); - optgroup->set_value("rect_origin", origin); - update_shape(); - return; - } - } - - // is this a circle ? - { - // Analyze the array of points.Do they reside on a circle ? - auto center = polygon.bounding_box().center(); - std::vector vertex_distances; - double avg_dist = 0; - for (auto pt: polygon.points) - { - double distance = (pt - center).cast().norm(); - vertex_distances.push_back(distance); - avg_dist += distance; - } - - avg_dist /= vertex_distances.size(); - bool defined_value = true; - for (auto el: vertex_distances) - { - if (abs(el - avg_dist) > 10 * SCALED_EPSILON) - defined_value = false; - break; - } - if (defined_value) { - // all vertices are equidistant to center - m_shape_options_book->SetSelection(SHAPE_CIRCULAR); - auto optgroup = m_optgroups[SHAPE_CIRCULAR]; - boost::any ret = wxNumberFormatter::ToString(unscale(avg_dist * 2), 0); - optgroup->set_value("diameter", ret); - update_shape(); - return; - } - } - - if (points.size() < 3) { - // Invalid polygon.Revert to default bed dimensions. - m_shape_options_book->SetSelection(SHAPE_RECTANGULAR); - auto optgroup = m_optgroups[SHAPE_RECTANGULAR]; - optgroup->set_value("rect_size", new ConfigOptionPoints{ Vec2d(200, 200) }); - optgroup->set_value("rect_origin", new ConfigOptionPoints{ Vec2d(0, 0) }); - update_shape(); - return; - } - - // This is a custom bed shape, use the polygon provided. - m_shape_options_book->SetSelection(SHAPE_CUSTOM); - // Copy the polygon to the canvas, make a copy of the array. - m_loaded_shape = points.values; update_shape(); + + return; } void BedShapePanel::update_preview() @@ -426,21 +500,20 @@ void BedShapePanel::update_preview() void BedShapePanel::update_shape() { auto page_idx = m_shape_options_book->GetSelection(); - if (page_idx == SHAPE_RECTANGULAR) { + auto opt_group = m_optgroups[page_idx]; + + BedShape::Type page_type = static_cast(page_idx); + + if (page_type == BedShape::Type::Rectangular) { Vec2d rect_size(Vec2d::Zero()); Vec2d rect_origin(Vec2d::Zero()); - try{ - rect_size = boost::any_cast(m_optgroups[SHAPE_RECTANGULAR]->get_value("rect_size")); } - catch (const std::exception & /* e */) { - return; - } - try { - rect_origin = boost::any_cast(m_optgroups[SHAPE_RECTANGULAR]->get_value("rect_origin")); - } - catch (const std::exception & /* e */) { - return; - } - + + try { rect_size = boost::any_cast(opt_group->get_value("rect_size")); } + catch (const std::exception& /* e */) { return; } + + try { rect_origin = boost::any_cast(opt_group->get_value("rect_origin")); } + catch (const std::exception & /* e */) { return; } + auto x = rect_size(0); auto y = rect_size(1); // empty strings or '-' or other things @@ -462,14 +535,11 @@ void BedShapePanel::update_shape() Vec2d(x1, y1), Vec2d(x0, y1) }; } - else if(page_idx == SHAPE_CIRCULAR) { + else if (page_type == BedShape::Type::Circular) { double diameter; - try{ - diameter = boost::any_cast(m_optgroups[SHAPE_CIRCULAR]->get_value("diameter")); - } - catch (const std::exception & /* e */) { - return; - } + try { diameter = boost::any_cast(opt_group->get_value("diameter")); } + catch (const std::exception & /* e */) { return; } + if (diameter == 0.0) return ; auto r = diameter / 2; auto twopi = 2 * PI; @@ -481,7 +551,7 @@ void BedShapePanel::update_shape() } m_shape = points; } - else if (page_idx == SHAPE_CUSTOM) + else if (page_type == BedShape::Type::Custom) m_shape = m_loaded_shape; update_preview(); diff --git a/src/slic3r/GUI/BedShapeDialog.hpp b/src/slic3r/GUI/BedShapeDialog.hpp index b583eca4a1..370129f2ed 100644 --- a/src/slic3r/GUI/BedShapeDialog.hpp +++ b/src/slic3r/GUI/BedShapeDialog.hpp @@ -16,6 +16,42 @@ namespace GUI { class ConfigOptionsGroup; using ConfigOptionsGroupShp = std::shared_ptr; + +struct BedShape +{ + enum class Type { + Rectangular = 0, + Circular, + Custom, + Invalid + }; + + enum class Parameter { + RectSize, + RectOrigin, + Diameter + }; + + BedShape(const ConfigOptionPoints& points); + + bool is_custom() { return m_type == Type::Custom; } + + static void append_option_line(ConfigOptionsGroupShp optgroup, Parameter param); + static wxString get_name(Type type); + + // convert Type to size_t + size_t get_type(); + + wxString get_full_name_with_params(); + void apply_optgroup_values(ConfigOptionsGroupShp optgroup); + +private: + Type m_type {Type::Invalid}; + Vec2d m_rectSize {200, 200}; + Vec2d m_rectOrigin {0, 0}; + double m_diameter {0}; +}; + class BedShapePanel : public wxPanel { static const std::string NONE; @@ -39,6 +75,7 @@ public: private: ConfigOptionsGroupShp init_shape_options_page(const wxString& title); + void activate_options_page(ConfigOptionsGroupShp options_group); wxPanel* init_texture_panel(); wxPanel* init_model_panel(); void set_shape(const ConfigOptionPoints& points); diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp index 74a4bc1c87..cc4c831ae9 100644 --- a/src/slic3r/GUI/BitmapCache.cpp +++ b/src/slic3r/GUI/BitmapCache.cpp @@ -3,6 +3,9 @@ #include "libslic3r/Utils.hpp" #include "../Utils/MacDarkMode.hpp" #include "GUI.hpp" +#if ENABLE_GCODE_VIEWER +#include "GUI_Utils.hpp" +#endif // ENABLE_GCODE_VIEWER #include @@ -355,6 +358,7 @@ wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsi } +#if !ENABLE_GCODE_VIEWER static inline int hex_digit_to_int(const char c) { return @@ -362,6 +366,7 @@ static inline int hex_digit_to_int(const char c) (c >= 'A' && c <= 'F') ? int(c - 'A') + 10 : (c >= 'a' && c <= 'f') ? int(c - 'a') + 10 : -1; } +#endif // !ENABLE_GCODE_VIEWER bool BitmapCache::parse_color(const std::string& scolor, unsigned char* rgb_out) { diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index ac32767c4b..3bd22590f5 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -1,10 +1,11 @@ #include "libslic3r/libslic3r.h" +#include "libslic3r/AppConfig.hpp" #include "Camera.hpp" #include "GUI_App.hpp" -#include "AppConfig.hpp" #if ENABLE_CAMERA_STATISTICS #include "Mouse3DController.hpp" +#include "Plater.hpp" #endif // ENABLE_CAMERA_STATISTICS #include diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index ece999c078..6e42562351 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -84,6 +84,7 @@ public: double get_near_z() const { return m_frustrum_zs.first; } double get_far_z() const { return m_frustrum_zs.second; } + const std::pair& get_z_range() const { return m_frustrum_zs; } double get_fov() const; diff --git a/src/slic3r/GUI/ConfigExceptions.hpp b/src/slic3r/GUI/ConfigExceptions.hpp index 9038d3445e..181442d4e3 100644 --- a/src/slic3r/GUI/ConfigExceptions.hpp +++ b/src/slic3r/GUI/ConfigExceptions.hpp @@ -1,15 +1,15 @@ #include namespace Slic3r { -class ConfigError : public std::runtime_error { -using std::runtime_error::runtime_error; +class ConfigError : public Slic3r::RuntimeError { + using Slic3r::RuntimeError::RuntimeError; }; namespace GUI { class ConfigGUITypeError : public ConfigError { -using ConfigError::ConfigError; + using ConfigError::ConfigError; }; -} -} +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index a0df4c6598..845dc1c0bd 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -2,7 +2,8 @@ #include "ConfigManipulation.hpp" #include "I18N.hpp" #include "GUI_App.hpp" -#include "PresetBundle.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/PresetBundle.hpp" #include @@ -27,9 +28,7 @@ void ConfigManipulation::toggle_field(const std::string& opt_key, const bool tog if (local_config->option(opt_key) == nullptr) return; } - Field* field = get_field(opt_key, opt_index); - if (field==nullptr) return; - field->toggle(toggle); + cb_toggle_field(opt_key, toggle, opt_index); } void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config) @@ -353,6 +352,7 @@ void ConfigManipulation::toggle_print_sla_options(DynamicPrintConfig* config) toggle_field("support_head_penetration", supports_en); toggle_field("support_head_width", supports_en); toggle_field("support_pillar_diameter", supports_en); + toggle_field("support_small_pillar_diameter_percent", supports_en); toggle_field("support_max_bridges_on_pillar", supports_en); toggle_field("support_pillar_connection_mode", supports_en); toggle_field("support_buildplate_only", supports_en); diff --git a/src/slic3r/GUI/ConfigManipulation.hpp b/src/slic3r/GUI/ConfigManipulation.hpp index 7344f758be..1e91dbec2b 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -10,9 +10,11 @@ #include "libslic3r/PrintConfig.hpp" #include "Field.hpp" -//#include namespace Slic3r { + +class ModelConfig; + namespace GUI { class ConfigManipulation @@ -21,25 +23,25 @@ class ConfigManipulation // function to loading of changed configuration std::function load_config = nullptr; - std::function get_field = nullptr; + std::function cb_toggle_field = nullptr; // callback to propagation of changed value, if needed std::function cb_value_change = nullptr; - DynamicPrintConfig* local_config = nullptr; + ModelConfig* local_config = nullptr; public: ConfigManipulation(std::function load_config, - std::function get_field, + std::function cb_toggle_field, std::function cb_value_change, - DynamicPrintConfig* local_config = nullptr) : + ModelConfig* local_config = nullptr) : load_config(load_config), - get_field(get_field), + cb_toggle_field(cb_toggle_field), cb_value_change(cb_value_change), local_config(local_config) {} ConfigManipulation() {} ~ConfigManipulation() { load_config = nullptr; - get_field = nullptr; + cb_toggle_field = nullptr; cb_value_change = nullptr; } diff --git a/src/slic3r/GUI/ConfigSnapshotDialog.cpp b/src/slic3r/GUI/ConfigSnapshotDialog.cpp index 6a44b96dc6..48b5a2b007 100644 --- a/src/slic3r/GUI/ConfigSnapshotDialog.cpp +++ b/src/slic3r/GUI/ConfigSnapshotDialog.cpp @@ -114,7 +114,7 @@ ConfigSnapshotDialog::ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db // text html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO); { - wxFont font = wxGetApp().normal_font();//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + wxFont font = get_default_font(this); #ifdef __WXMSW__ const int fs = font.GetPointSize(); const int fs1 = static_cast(0.8f*fs); @@ -140,7 +140,7 @@ ConfigSnapshotDialog::ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db void ConfigSnapshotDialog::on_dpi_changed(const wxRect &suggested_rect) { - wxFont font = GetFont(); + wxFont font = get_default_font(this); const int fs = font.GetPointSize(); const int fs1 = static_cast(0.8f*fs); const int fs2 = static_cast(1.1f*fs); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 60323976c8..cd944f6890 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -122,7 +123,7 @@ Bundle& BundleMap::prusa_bundle() { auto it = find(PresetBundle::PRUSA_BUNDLE); if (it == end()) { - throw std::runtime_error("ConfigWizard: Internal error in BundleMap: PRUSA_BUNDLE not loaded"); + throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: PRUSA_BUNDLE not loaded"); } return it->second; @@ -561,30 +562,37 @@ const std::string PageMaterials::EMPTY; PageMaterials::PageMaterials(ConfigWizard *parent, Materials *materials, wxString title, wxString shortname, wxString list1name) : ConfigWizardPage(parent, std::move(title), std::move(shortname)) , materials(materials) - , list_l1(new StringList(this)) - , list_l2(new StringList(this)) - , list_l3(new PresetList(this)) + , list_printer(new StringList(this, wxLB_MULTIPLE)) + , list_type(new StringList(this)) + , list_vendor(new StringList(this)) + , list_profile(new PresetList(this)) { append_spacer(VERTICAL_SPACING); const int em = parent->em_unit(); const int list_h = 30*em; - list_l1->SetMinSize(wxSize(8*em, list_h)); - list_l2->SetMinSize(wxSize(13*em, list_h)); - list_l3->SetMinSize(wxSize(25*em, list_h)); - auto *grid = new wxFlexGridSizer(3, em/2, em); - grid->AddGrowableCol(2, 1); + list_printer->SetMinSize(wxSize(23*em, list_h)); + list_type->SetMinSize(wxSize(8*em, list_h)); + list_vendor->SetMinSize(wxSize(13*em, list_h)); + list_profile->SetMinSize(wxSize(23*em, list_h)); + + + + grid = new wxFlexGridSizer(4, em/2, em); + grid->AddGrowableCol(3, 1); grid->AddGrowableRow(1, 1); + grid->Add(new wxStaticText(this, wxID_ANY, _(L("Printer:")))); grid->Add(new wxStaticText(this, wxID_ANY, list1name)); grid->Add(new wxStaticText(this, wxID_ANY, _(L("Vendor:")))); grid->Add(new wxStaticText(this, wxID_ANY, _(L("Profile:")))); - grid->Add(list_l1, 0, wxEXPAND); - grid->Add(list_l2, 0, wxEXPAND); - grid->Add(list_l3, 1, wxEXPAND); + grid->Add(list_printer, 0, wxEXPAND); + grid->Add(list_type, 0, wxEXPAND); + grid->Add(list_vendor, 0, wxEXPAND); + grid->Add(list_profile, 1, wxEXPAND); auto *btn_sizer = new wxBoxSizer(wxHORIZONTAL); auto *sel_all = new wxButton(this, wxID_ANY, _(L("All"))); @@ -592,121 +600,460 @@ PageMaterials::PageMaterials(ConfigWizard *parent, Materials *materials, wxStrin btn_sizer->Add(sel_all, 0, wxRIGHT, em / 2); btn_sizer->Add(sel_none); + + grid->Add(new wxBoxSizer(wxHORIZONTAL)); grid->Add(new wxBoxSizer(wxHORIZONTAL)); grid->Add(new wxBoxSizer(wxHORIZONTAL)); grid->Add(btn_sizer, 0, wxALIGN_RIGHT); append(grid, 1, wxEXPAND); - list_l1->Bind(wxEVT_LISTBOX, [this](wxCommandEvent &) { - update_lists(list_l1->GetSelection(), list_l2->GetSelection()); + append_spacer(VERTICAL_SPACING); + + html_window = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, + wxSize(60 * em, 20 * em), wxHW_SCROLLBAR_AUTO); + append(html_window, 0, wxEXPAND); + + list_printer->Bind(wxEVT_LISTBOX, [this](wxCommandEvent& evt) { + update_lists(evt.GetInt(), list_type->GetSelection(), list_vendor->GetSelection()); + }); + list_type->Bind(wxEVT_LISTBOX, [this](wxCommandEvent &) { + update_lists(list_printer->GetSelection(), list_type->GetSelection(), list_vendor->GetSelection()); }); - list_l2->Bind(wxEVT_LISTBOX, [this](wxCommandEvent &) { - update_lists(list_l1->GetSelection(), list_l2->GetSelection()); + list_vendor->Bind(wxEVT_LISTBOX, [this](wxCommandEvent &) { + update_lists(list_printer->GetSelection(), list_type->GetSelection(), list_vendor->GetSelection()); }); - list_l3->Bind(wxEVT_CHECKLISTBOX, [this](wxCommandEvent &evt) { select_material(evt.GetInt()); }); + list_profile->Bind(wxEVT_CHECKLISTBOX, [this](wxCommandEvent &evt) { select_material(evt.GetInt()); }); + list_profile->Bind(wxEVT_LISTBOX, [this](wxCommandEvent& evt) { on_material_highlighted(evt.GetInt()); }); sel_all->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { select_all(true); }); sel_none->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { select_all(false); }); + /* + Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) {on_paint();}); + list_profile->Bind(wxEVT_MOTION, [this](wxMouseEvent& evt) { on_mouse_move_on_profiles(evt); }); + list_profile->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& evt) { on_mouse_enter_profiles(evt); }); + list_profile->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& evt) { on_mouse_leave_profiles(evt); }); + */ reload_presets(); + set_compatible_printers_html_window(std::vector(), false); +} +void PageMaterials::on_paint() +{ +} +void PageMaterials::on_mouse_move_on_profiles(wxMouseEvent& evt) +{ + const wxClientDC dc(list_profile); + const wxPoint pos = evt.GetLogicalPosition(dc); + int item = list_profile->HitTest(pos); + on_material_hovered(item); +} +void PageMaterials::on_mouse_enter_profiles(wxMouseEvent& evt) +{} +void PageMaterials::on_mouse_leave_profiles(wxMouseEvent& evt) +{ + on_material_hovered(-1); } - void PageMaterials::reload_presets() { clear(); - list_l1->append(_(L("(All)")), &EMPTY); - - for (const std::string &type : materials->types) { - list_l1->append(type, &type); - } - - if (list_l1->GetCount() > 0) { - list_l1->SetSelection(0); - sel1_prev = wxNOT_FOUND; - sel2_prev = wxNOT_FOUND; - update_lists(0, 0); + list_printer->append(_(L("(All)")), &EMPTY); + //list_printer->SetLabelMarkup("bald"); + for (const Preset* printer : materials->printers) { + list_printer->append(printer->name, &printer->name); + } + sort_list_data(list_printer, true, false); + if (list_printer->GetCount() > 0) { + list_printer->SetSelection(0); + sel_printer_count_prev = wxNOT_FOUND; + sel_printer_item_prev = wxNOT_FOUND; + sel_type_prev = wxNOT_FOUND; + sel_vendor_prev = wxNOT_FOUND; + update_lists(0, 0, 0); } presets_loaded = true; } -void PageMaterials::update_lists(int sel1, int sel2) +void PageMaterials::set_compatible_printers_html_window(const std::vector& printer_names, bool all_printers) { - wxWindowUpdateLocker freeze_guard(this); - (void)freeze_guard; - - if (sel1 != sel1_prev) { - // Refresh the second list - - // XXX: The vendor list is created with quadratic complexity here, - // but the number of vendors is going to be very small this shouldn't be a problem. - - list_l2->Clear(); - list_l2->append(_(L("(All)")), &EMPTY); - if (sel1 != wxNOT_FOUND) { - const std::string &type = list_l1->get_data(sel1); - - materials->filter_presets(type, EMPTY, [this](const Preset *p) { - const std::string &vendor = this->materials->get_vendor(p); - - if (list_l2->find(vendor) == wxNOT_FOUND) { - list_l2->append(vendor, &vendor); - } - }); + const auto bgr_clr = +#if defined(__APPLE__) + wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); +#else + wxSystemSettings::GetColour(wxSYS_COLOUR_MENU); +#endif + const auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue()); + const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + const auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue()); + wxString first_line = _(L("Filaments marked with * are not compatible with some installed printers.")); + wxString text; + if (all_printers) { + wxString second_line = _(L("All installed printers are compatible with the selected filament.")); + text = wxString::Format( + "" + "" + "" + "" + "" + "%s

%s" + "
" + "
" + "" + "" + , bgr_clr_str + , text_clr_str + , first_line + , second_line + ); + } else { + wxString second_line = _(L("Only the following installed printers are compatible with the selected filament:")); + text = wxString::Format( + "" + "" + "" + "" + "" + "%s

%s" + "" + "" + , bgr_clr_str + , text_clr_str + , first_line + , second_line); + for (int i = 0; i < printer_names.size(); ++i) + { + text += wxString::Format("", boost::nowide::widen(printer_names[i])); + if (i % 3 == 2) { + text += wxString::Format( + "" + ""); + } } - - sel1_prev = sel1; - sel2 = 0; - sel2_prev = wxNOT_FOUND; - list_l2->SetSelection(sel2); - list_l3->Clear(); + text += wxString::Format( + "" + "
%s
" + "
" + "
" + "" + "" + ); } + + wxFont font = get_default_font_for_dpi(this, get_dpi_for_window(this)); + const int fs = font.GetPointSize(); + int size[] = { fs,fs,fs,fs,fs,fs,fs }; + html_window->SetFonts(font.GetFaceName(), font.GetFaceName(), size); + html_window->SetPage(text); +} - if (sel2 != sel2_prev) { - // Refresh the third list +void PageMaterials::clear_compatible_printers_label() +{ + set_compatible_printers_html_window(std::vector(), false); +} - list_l3->Clear(); - if (sel1 != wxNOT_FOUND && sel2 != wxNOT_FOUND) { - const std::string &type = list_l1->get_data(sel1); - const std::string &vendor = list_l2->get_data(sel2); +void PageMaterials::on_material_hovered(int sel_material) +{ - materials->filter_presets(type, vendor, [this](const Preset *p) { - bool was_checked = false; +} - int cur_i = list_l3->find(p->alias); - if (cur_i == wxNOT_FOUND) - cur_i = list_l3->append(p->alias, &p->alias); - else - was_checked = list_l3->IsChecked(cur_i); - - const std::string& section = materials->appconfig_section(); - - const bool checked = wizard_p()->appconfig_new.has(section, p->name); - list_l3->Check(cur_i, checked | was_checked); - - /* Update preset selection in config. - * If one preset from aliases bundle is selected, - * than mark all presets with this aliases as selected - * */ - if (checked && !was_checked) - wizard_p()->update_presets_in_config(section, p->alias, true); - else if (!checked && was_checked) - wizard_p()->appconfig_new.set(section, p->name, "1"); - } ); +void PageMaterials::on_material_highlighted(int sel_material) +{ + if (sel_material == last_hovered_item) + return; + if (sel_material == -1) { + clear_compatible_printers_label(); + return; + } + last_hovered_item = sel_material; + std::vector tabs; + tabs.push_back(std::string()); + tabs.push_back(std::string()); + tabs.push_back(std::string()); + //selected material string + std::string material_name = list_profile->get_data(sel_material); + // get material preset + const std::vector matching_materials = materials->get_presets_by_alias(material_name); + if (matching_materials.empty()) + { + clear_compatible_printers_label(); + return; + } + //find matching printers + std::vector names; + for (const Preset* printer : materials->printers) { + for (const Preset* material : matching_materials) { + if (is_compatible_with_printer(PresetWithVendorProfile(*material, material->vendor), PresetWithVendorProfile(*printer, printer->vendor))) { + names.push_back(printer->name); + break; + } } + } + set_compatible_printers_html_window(names, names.size() == materials->printers.size()); +} - sel2_prev = sel2; +void PageMaterials::update_lists(int sel_printer, int sel_type, int sel_vendor) +{ + wxWindowUpdateLocker freeze_guard(this); + (void)freeze_guard; + + wxArrayInt sel_printers; + int sel_printers_count = list_printer->GetSelections(sel_printers); + + if (sel_printers_count != sel_printer_count_prev || (sel_printers_count == 1 && sel_printer_item_prev != sel_printer && sel_printer != -1)) { + // Refresh type list + list_type->Clear(); + list_type->append(_(L("(All)")), &EMPTY); + if (sel_printers_count > 0) { + // If all is selected with other printers + // unselect "all" or all printers depending on last value + if (sel_printers[0] == 0 && sel_printers_count > 1) { + if (sel_printer == 0) { + list_printer->SetSelection(wxNOT_FOUND); + list_printer->SetSelection(0); + } else { + list_printer->SetSelection(0, false); + sel_printers_count = list_printer->GetSelections(sel_printers); + } + } + if (sel_printers[0] != 0) { + for (size_t i = 0; i < sel_printers_count; i++) { + const std::string& printer_name = list_printer->get_data(sel_printers[i]); + const Preset* printer = nullptr; + for (const Preset* it : materials->printers) { + if (it->name == printer_name) { + printer = it; + break; + } + } + materials->filter_presets(printer, EMPTY, EMPTY, [this](const Preset* p) { + const std::string& type = this->materials->get_type(p); + if (list_type->find(type) == wxNOT_FOUND) { + list_type->append(type, &type); + } + }); + } + } else { + //clear selection except "ALL" + list_printer->SetSelection(wxNOT_FOUND); + list_printer->SetSelection(0); + sel_printers_count = list_printer->GetSelections(sel_printers); + + materials->filter_presets(nullptr, EMPTY, EMPTY, [this](const Preset* p) { + const std::string& type = this->materials->get_type(p); + if (list_type->find(type) == wxNOT_FOUND) { + list_type->append(type, &type); + } + }); + } + sort_list_data(list_type, true, true); + } + + sel_printer_count_prev = sel_printers_count; + sel_printer_item_prev = sel_printer; + sel_type = 0; + sel_type_prev = wxNOT_FOUND; + list_type->SetSelection(sel_type); + list_profile->Clear(); + } + + if (sel_type != sel_type_prev) { + // Refresh vendor list + + // XXX: The vendor list is created with quadratic complexity here, + // but the number of vendors is going to be very small this shouldn't be a problem. + + list_vendor->Clear(); + list_vendor->append(_(L("(All)")), &EMPTY); + if (sel_printers_count != 0 && sel_type != wxNOT_FOUND) { + const std::string& type = list_type->get_data(sel_type); + // find printer preset + for (size_t i = 0; i < sel_printers_count; i++) { + const std::string& printer_name = list_printer->get_data(sel_printers[i]); + const Preset* printer = nullptr; + for (const Preset* it : materials->printers) { + if (it->name == printer_name) { + printer = it; + break; + } + } + materials->filter_presets(printer, type, EMPTY, [this](const Preset* p) { + const std::string& vendor = this->materials->get_vendor(p); + if (list_vendor->find(vendor) == wxNOT_FOUND) { + list_vendor->append(vendor, &vendor); + } + }); + } + sort_list_data(list_vendor, true, false); + } + + sel_type_prev = sel_type; + sel_vendor = 0; + sel_vendor_prev = wxNOT_FOUND; + list_vendor->SetSelection(sel_vendor); + list_profile->Clear(); + } + + if (sel_vendor != sel_vendor_prev) { + // Refresh material list + + list_profile->Clear(); + clear_compatible_printers_label(); + if (sel_printers_count != 0 && sel_type != wxNOT_FOUND && sel_vendor != wxNOT_FOUND) { + const std::string& type = list_type->get_data(sel_type); + const std::string& vendor = list_vendor->get_data(sel_vendor); + // finst printer preset + std::vector to_list; + for (size_t i = 0; i < sel_printers_count; i++) { + const std::string& printer_name = list_printer->get_data(sel_printers[i]); + const Preset* printer = nullptr; + for (const Preset* it : materials->printers) { + if (it->name == printer_name) { + printer = it; + break; + } + } + + materials->filter_presets(printer, type, vendor, [this, &to_list](const Preset* p) { + bool was_checked = false; + //size_t printer_counter = materials->get_printer_counter(p); + int cur_i = list_profile->find(p->alias); + bool emplace_to_to_list = false; + if (cur_i == wxNOT_FOUND) { + cur_i = list_profile->append(p->alias + (materials->get_omnipresent(p) ? "" : " *"), &p->alias); + emplace_to_to_list = true; + } else + was_checked = list_profile->IsChecked(cur_i); + + const std::string& section = materials->appconfig_section(); + + const bool checked = wizard_p()->appconfig_new.has(section, p->name); + list_profile->Check(cur_i, checked || was_checked); + if (emplace_to_to_list) + to_list.emplace_back(p->alias, materials->get_omnipresent(p), checked || was_checked); + + /* Update preset selection in config. + * If one preset from aliases bundle is selected, + * than mark all presets with this aliases as selected + * */ + if (checked && !was_checked) + wizard_p()->update_presets_in_config(section, p->alias, true); + else if (!checked && was_checked) + wizard_p()->appconfig_new.set(section, p->name, "1"); + }); + } + sort_list_data(list_profile, to_list); + } + + sel_vendor_prev = sel_vendor; + } +} + +void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool material_type_ordering) +{ +// get data from list +// sort data +// first should be +// then prusa profiles +// then the rest +// in alphabetical order + + std::vector> prusa_profiles; + std::vector> other_profiles; + for (int i = 0 ; i < list->size(); ++i) { + const std::string& data = list->get_data(i); + if (data == EMPTY) // do not sort item + continue; + if (!material_type_ordering && data.find("Prusa") != std::string::npos) + prusa_profiles.push_back(data); + else + other_profiles.push_back(data); + } + if(material_type_ordering) { + + const ConfigOptionDef* def = print_config_def.get("filament_type"); + std::vectorenum_values = def->enum_values; + int end_of_sorted = 0; + for (size_t vals = 0; vals < enum_values.size(); vals++) { + for (size_t profs = end_of_sorted; profs < other_profiles.size(); profs++) + { + // find instead compare because PET vs PETG + if (other_profiles[profs].get().find(enum_values[vals]) != std::string::npos) { + //swap + if(profs != end_of_sorted) { + std::reference_wrapper aux = other_profiles[end_of_sorted]; + other_profiles[end_of_sorted] = other_profiles[profs]; + other_profiles[profs] = aux; + } + end_of_sorted++; + break; + } + } + } + } else { + std::sort(prusa_profiles.begin(), prusa_profiles.end(), [](std::reference_wrapper a, std::reference_wrapper b) { + return a.get() < b.get(); + }); + std::sort(other_profiles.begin(), other_profiles.end(), [](std::reference_wrapper a, std::reference_wrapper b) { + return a.get() < b.get(); + }); + } + + list->Clear(); + if (add_All_item) + list->append(_(L("(All)")), &EMPTY); + for (const auto& item : prusa_profiles) + list->append(item, &const_cast(item.get())); + for (const auto& item : other_profiles) + list->append(item, &const_cast(item.get())); +} + +void PageMaterials::sort_list_data(PresetList* list, const std::vector& data) +{ + // sort data + // then prusa profiles + // then the rest + // in alphabetical order + std::vector prusa_profiles; + std::vector other_profiles; + //for (int i = 0; i < data.size(); ++i) { + for (const auto& item : data) { + const std::string& name = item.name; + if (name.find("Prusa") != std::string::npos) + prusa_profiles.emplace_back(item); + else + other_profiles.emplace_back(item); + } + std::sort(prusa_profiles.begin(), prusa_profiles.end(), [](ProfilePrintData a, ProfilePrintData b) { + return a.name.get() < b.name.get(); + }); + std::sort(other_profiles.begin(), other_profiles.end(), [](ProfilePrintData a, ProfilePrintData b) { + return a.name.get() < b.name.get(); + }); + list->Clear(); + //for (const auto& item : prusa_profiles) + for (int i = 0; i < prusa_profiles.size(); ++i) { + list->append(std::string(prusa_profiles[i].name) + (prusa_profiles[i].omnipresent ? "" : " *"), &const_cast(prusa_profiles[i].name.get())); + list->Check(i, prusa_profiles[i].checked); + } + //for (const auto& item : other_profiles) + for (int i = 0; i < other_profiles.size(); ++i) { + list->append(std::string(other_profiles[i].name) + (other_profiles[i].omnipresent ? "" : " *"), &const_cast(other_profiles[i].name.get())); + list->Check(i + prusa_profiles.size(), other_profiles[i].checked); } } void PageMaterials::select_material(int i) { - const bool checked = list_l3->IsChecked(i); + const bool checked = list_profile->IsChecked(i); - const std::string& alias_key = list_l3->get_data(i); + const std::string& alias_key = list_profile->get_data(i); wizard_p()->update_presets_in_config(materials->appconfig_section(), alias_key, checked); } @@ -715,10 +1062,10 @@ void PageMaterials::select_all(bool select) wxWindowUpdateLocker freeze_guard(this); (void)freeze_guard; - for (unsigned i = 0; i < list_l3->GetCount(); i++) { - const bool current = list_l3->IsChecked(i); + for (unsigned i = 0; i < list_profile->GetCount(); i++) { + const bool current = list_profile->IsChecked(i); if (current != select) { - list_l3->Check(i, select); + list_profile->Check(i, select); select_material(i); } } @@ -726,11 +1073,14 @@ void PageMaterials::select_all(bool select) void PageMaterials::clear() { - list_l1->Clear(); - list_l2->Clear(); - list_l3->Clear(); - sel1_prev = wxNOT_FOUND; - sel2_prev = wxNOT_FOUND; + list_printer->Clear(); + list_type->Clear(); + list_vendor->Clear(); + list_profile->Clear(); + sel_printer_count_prev = wxNOT_FOUND; + sel_printer_item_prev = wxNOT_FOUND; + sel_type_prev = wxNOT_FOUND; + sel_vendor_prev = wxNOT_FOUND; presets_loaded = false; } @@ -740,6 +1090,7 @@ void PageMaterials::on_activate() wizard_p()->update_materials(materials->technology); reload_presets(); } + first_paint = true; } @@ -1314,16 +1665,23 @@ const std::string Materials::UNKNOWN = "(Unknown)"; void Materials::push(const Preset *preset) { - presets.push_back(preset); + presets.emplace_back(preset); types.insert(technology & T_FFF ? Materials::get_filament_type(preset) : Materials::get_material_type(preset)); } +void Materials::add_printer(const Preset* preset) +{ + printers.insert(preset); +} + void Materials::clear() { presets.clear(); types.clear(); + printers.clear(); + compatibility_counter.clear(); } const std::string& Materials::appconfig_section() const @@ -1373,7 +1731,6 @@ const std::string& Materials::get_material_vendor(const Preset *preset) return opt != nullptr ? opt->value : UNKNOWN; } - // priv static const std::unordered_map> legacy_preset_map {{ @@ -1601,28 +1958,62 @@ void ConfigWizard::priv::update_materials(Technology technology) if (any_fff_selected && (technology & T_FFF)) { filaments.clear(); aliases_fff.clear(); - // Iterate filaments in all bundles for (const auto &pair : bundles) { for (const auto &filament : pair.second.preset_bundle->filaments) { // Check if filament is already added - if (filaments.containts(&filament)) - continue; + if (filaments.containts(&filament)) + continue; // Iterate printers in all bundles - // For now, we only allow the profiles to be compatible with another profiles inside the same bundle. -// for (const auto &pair : bundles) - for (const auto &printer : pair.second.preset_bundle->printers) - // Filter out inapplicable printers - if (printer.is_visible && printer.printer_technology() == ptFFF && - is_compatible_with_printer(PresetWithVendorProfile(filament, nullptr), PresetWithVendorProfile(printer, nullptr)) && - // Check if filament is already added - ! filaments.containts(&filament)) { - filaments.push(&filament); - if (!filament.alias.empty()) - aliases_fff[filament.alias].insert(filament.name); - } + for (const auto &printer : pair.second.preset_bundle->printers) { + if (!printer.is_visible || printer.printer_technology() != ptFFF) + continue; + // Filter out inapplicable printers + if (is_compatible_with_printer(PresetWithVendorProfile(filament, filament.vendor), PresetWithVendorProfile(printer, printer.vendor))) { + if (!filaments.containts(&filament)) { + filaments.push(&filament); + if (!filament.alias.empty()) + aliases_fff[filament.alias].insert(filament.name); + } + filaments.add_printer(&printer); + } + } + } } + // count compatible printers + for (const auto& preset : filaments.presets) { + + const auto filter = [preset](const std::pair element) { + return preset->alias == element.first; + }; + if (std::find_if(filaments.compatibility_counter.begin(), filaments.compatibility_counter.end(), filter) != filaments.compatibility_counter.end()) { + continue; + } + std::vector idx_with_same_alias; + for (size_t i = 0; i < filaments.presets.size(); ++i) { + if (preset->alias == filaments.presets[i]->alias) + idx_with_same_alias.push_back(i); + } + size_t counter = 0; + for (const auto& printer : filaments.printers) { + if (!(*printer).is_visible || (*printer).printer_technology() != ptFFF) + continue; + bool compatible = false; + // Test otrher materials with same alias + for (size_t i = 0; i < idx_with_same_alias.size() && !compatible; ++i) { + const Preset& prst = *(filaments.presets[idx_with_same_alias[i]]); + const Preset& prntr = *printer; + if (is_compatible_with_printer(PresetWithVendorProfile(prst, prst.vendor), PresetWithVendorProfile(prntr, prntr.vendor))) { + compatible = true; + break; + } + } + if (compatible) + counter++; + } + filaments.compatibility_counter.emplace_back(preset->alias, counter); + } } if (any_sla_selected && (technology & T_SLA)) { @@ -1637,19 +2028,55 @@ void ConfigWizard::priv::update_materials(Technology technology) continue; // Iterate printers in all bundles // For now, we only allow the profiles to be compatible with another profiles inside the same bundle. -// for (const auto &pair : bundles) - for (const auto &printer : pair.second.preset_bundle->printers) - // Filter out inapplicable printers - if (printer.is_visible && printer.printer_technology() == ptSLA && - is_compatible_with_printer(PresetWithVendorProfile(material, nullptr), PresetWithVendorProfile(printer, nullptr)) && - // Check if material is already added - ! sla_materials.containts(&material)) { + for (const auto& printer : pair.second.preset_bundle->printers) { + if(!printer.is_visible || printer.printer_technology() != ptSLA) + continue; + // Filter out inapplicable printers + if (is_compatible_with_printer(PresetWithVendorProfile(material, nullptr), PresetWithVendorProfile(printer, nullptr))) { + // Check if material is already added + if(!sla_materials.containts(&material)) { sla_materials.push(&material); if (!material.alias.empty()) aliases_sla[material.alias].insert(material.name); } + sla_materials.add_printer(&printer); + } + } } } + // count compatible printers + for (const auto& preset : sla_materials.presets) { + + const auto filter = [preset](const std::pair element) { + return preset->alias == element.first; + }; + if (std::find_if(sla_materials.compatibility_counter.begin(), sla_materials.compatibility_counter.end(), filter) != sla_materials.compatibility_counter.end()) { + continue; + } + std::vector idx_with_same_alias; + for (size_t i = 0; i < sla_materials.presets.size(); ++i) { + if(preset->alias == sla_materials.presets[i]->alias) + idx_with_same_alias.push_back(i); + } + size_t counter = 0; + for (const auto& printer : sla_materials.printers) { + if (!(*printer).is_visible || (*printer).printer_technology() != ptSLA) + continue; + bool compatible = false; + // Test otrher materials with same alias + for (size_t i = 0; i < idx_with_same_alias.size() && !compatible; ++i) { + const Preset& prst = *(sla_materials.presets[idx_with_same_alias[i]]); + const Preset& prntr = *printer; + if (is_compatible_with_printer(PresetWithVendorProfile(prst, prst.vendor), PresetWithVendorProfile(prntr, prntr.vendor))) { + compatible = true; + break; + } + } + if (compatible) + counter++; + } + sla_materials.compatibility_counter.emplace_back(preset->alias, counter); + } } } diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp index c99c5952b9..0f0febe91b 100644 --- a/src/slic3r/GUI/ConfigWizard_private.hpp +++ b/src/slic3r/GUI/ConfigWizard_private.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -18,11 +19,11 @@ #include #include #include +#include #include "libslic3r/PrintConfig.hpp" +#include "libslic3r/PresetBundle.hpp" #include "slic3r/Utils/PresetUpdater.hpp" -#include "AppConfig.hpp" -#include "PresetBundle.hpp" #include "BedShapeDialog.hpp" #include "GUI.hpp" #include "wxExtensions.hpp" @@ -58,32 +59,91 @@ enum Technology { T_ANY = ~0, }; +struct Bundle +{ + std::unique_ptr preset_bundle; + VendorProfile* vendor_profile{ nullptr }; + bool is_in_resources{ false }; + bool is_prusa_bundle{ false }; + + Bundle() = default; + Bundle(Bundle&& other); + + // Returns false if not loaded. Reason for that is logged as boost::log error. + bool load(fs::path source_path, bool is_in_resources, bool is_prusa_bundle = false); + + const std::string& vendor_id() const { return vendor_profile->id; } +}; + +struct BundleMap : std::unordered_map +{ + static BundleMap load(); + + Bundle& prusa_bundle(); + const Bundle& prusa_bundle() const; +}; + struct Materials { Technology technology; // use vector for the presets to purpose of save of presets sorting in the bundle std::vector presets; + // String is alias of material, size_t number of compatible counters + std::vector> compatibility_counter; std::set types; + std::set printers; Materials(Technology technology) : technology(technology) {} void push(const Preset *preset); + void add_printer(const Preset* preset); void clear(); bool containts(const Preset *preset) const { - return std::find(presets.begin(), presets.end(), preset) != presets.end(); + //return std::find(presets.begin(), presets.end(), preset) != presets.end(); + return std::find_if(presets.begin(), presets.end(), + [preset](const Preset* element) { return element == preset; }) != presets.end(); + } + + bool get_omnipresent(const Preset* preset) { + return get_printer_counter(preset) == printers.size(); + } + + const std::vector get_presets_by_alias(const std::string name) { + std::vector ret_vec; + for (auto it = presets.begin(); it != presets.end(); ++it) { + if ((*it)->alias == name) + ret_vec.push_back((*it)); + } + return ret_vec; + } + + + + size_t get_printer_counter(const Preset* preset) { + for (auto it : compatibility_counter) { + if (it.first == preset->alias) + return it.second; + } + return 0; + } const std::string& appconfig_section() const; const std::string& get_type(const Preset *preset) const; const std::string& get_vendor(const Preset *preset) const; + + template void filter_presets(const Preset* printer, const std::string& type, const std::string& vendor, F cb) { + for (auto preset : presets) { + const Preset& prst = *(preset); + const Preset& prntr = *printer; + if ((printer == nullptr || is_compatible_with_printer(PresetWithVendorProfile(prst, prst.vendor), PresetWithVendorProfile(prntr, prntr.vendor))) && + (type.empty() || get_type(preset) == type) && + (vendor.empty() || get_vendor(preset) == vendor)) { - template void filter_presets(const std::string &type, const std::string &vendor, F cb) { - for (const Preset *preset : presets) { - if ((type.empty() || get_type(preset) == type) && (vendor.empty() || get_vendor(preset) == vendor)) { - cb(preset); - } - } - } + cb(preset); + } + } + } static const std::string UNKNOWN; static const std::string& get_filament_type(const Preset *preset); @@ -92,33 +152,9 @@ struct Materials static const std::string& get_material_vendor(const Preset *preset); }; -struct Bundle -{ - std::unique_ptr preset_bundle; - VendorProfile *vendor_profile { nullptr }; - bool is_in_resources { false }; - bool is_prusa_bundle { false }; - - Bundle() = default; - Bundle(Bundle &&other); - - // Returns false if not loaded. Reason for that is logged as boost::log error. - bool load(fs::path source_path, bool is_in_resources, bool is_prusa_bundle = false); - - const std::string& vendor_id() const { return vendor_profile->id; } -}; - -struct BundleMap: std::unordered_map -{ - static BundleMap load(); - - Bundle& prusa_bundle(); - const Bundle& prusa_bundle() const; -}; struct PrinterPickerEvent; - // GUI elements typedef std::function ModelFilter; @@ -226,6 +262,7 @@ struct PagePrinters: ConfigWizardPage template struct DataList : public T { DataList(wxWindow *parent) : T(parent, wxID_ANY) {} + DataList(wxWindow* parent, int style) : T(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, style) {} // Note: We're _not_ using wxLB_SORT here because it doesn't do the right thing, // eg. "ABS" is sorted before "(All)" @@ -253,29 +290,74 @@ template struct DataList : public T } int size() { return this->GetCount(); } + + void on_mouse_move(const wxPoint& position) { + int item = T::HitTest(position); + + if(item == wxHitTest::wxHT_WINDOW_INSIDE) + BOOST_LOG_TRIVIAL(error) << "hit test wxHT_WINDOW_INSIDE"; + else if (item == wxHitTest::wxHT_WINDOW_OUTSIDE) + BOOST_LOG_TRIVIAL(error) << "hit test wxHT_WINDOW_OUTSIDE"; + else if(item == wxHitTest::wxHT_WINDOW_CORNER) + BOOST_LOG_TRIVIAL(error) << "hit test wxHT_WINDOW_CORNER"; + else if (item == wxHitTest::wxHT_WINDOW_VERT_SCROLLBAR) + BOOST_LOG_TRIVIAL(error) << "hit test wxHT_WINDOW_VERT_SCROLLBAR"; + else if (item == wxHitTest::wxHT_NOWHERE) + BOOST_LOG_TRIVIAL(error) << "hit test wxHT_NOWHERE"; + else if (item == wxHitTest::wxHT_MAX) + BOOST_LOG_TRIVIAL(error) << "hit test wxHT_MAX"; + else + BOOST_LOG_TRIVIAL(error) << "hit test: " << item; + } }; typedef DataList StringList; typedef DataList PresetList; +struct ProfilePrintData +{ + std::reference_wrapper name; + bool omnipresent; + bool checked; + ProfilePrintData(const std::string& n, bool o, bool c) : name(n), omnipresent(o), checked(c) {} +}; + struct PageMaterials: ConfigWizardPage { Materials *materials; - StringList *list_l1, *list_l2; - PresetList *list_l3; - int sel1_prev, sel2_prev; + StringList *list_printer, *list_type, *list_vendor; + PresetList *list_profile; + int sel_printer_count_prev, sel_printer_item_prev, sel_type_prev, sel_vendor_prev; bool presets_loaded; + wxFlexGridSizer *grid; + wxHtmlWindow* html_window; + + int compatible_printers_width = { 100 }; + std::string empty_printers_label; + bool first_paint = { false }; static const std::string EMPTY; + int last_hovered_item = { -1 } ; PageMaterials(ConfigWizard *parent, Materials *materials, wxString title, wxString shortname, wxString list1name); void reload_presets(); - void update_lists(int sel1, int sel2); + void update_lists(int sel1, int sel2, int sel3); + void on_material_highlighted(int sel_material); + void on_material_hovered(int sel_material); void select_material(int i); void select_all(bool select); void clear(); + void set_compatible_printers_html_window(const std::vector& printer_names, bool all_printers = false); + void clear_compatible_printers_label(); + void sort_list_data(StringList* list, bool add_All_item, bool material_type_ordering); + void sort_list_data(PresetList* list, const std::vector& data); + + void on_paint(); + void on_mouse_move_on_profiles(wxMouseEvent& evt); + void on_mouse_enter_profiles(wxMouseEvent& evt); + void on_mouse_leave_profiles(wxMouseEvent& evt); virtual void on_activate() override; }; @@ -483,6 +565,9 @@ struct ConfigWizard::priv priv(ConfigWizard *q) : q(q) +#if ENABLE_GCODE_VIEWER + , appconfig_new(AppConfig::EAppMode::Editor) +#endif // ENABLE_GCODE_VIEWER , filaments(T_FFF) , sla_materials(T_SLA) {} diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp index a4b65c1b82..911ee9c420 100644 --- a/src/slic3r/GUI/DoubleSlider.cpp +++ b/src/slic3r/GUI/DoubleSlider.cpp @@ -1,5 +1,11 @@ +#include "libslic3r/libslic3r.h" +#if ENABLE_GCODE_VIEWER +#include "DoubleSlider.hpp" +#include "libslic3r/GCode.hpp" +#else #include "wxExtensions.hpp" #include "libslic3r/GCode/PreviewData.hpp" +#endif // ENABLE_GCODE_VIEWER #include "GUI.hpp" #include "GUI_App.hpp" #include "Plater.hpp" @@ -15,7 +21,9 @@ #include #include #include +#if !ENABLE_GCODE_VIEWER #include +#endif // !ENABLE_GCODE_VIEWER #include #include @@ -72,8 +80,13 @@ Control::Control( wxWindow *parent, if (!is_osx) SetDoubleBuffered(true);// SetDoubleBuffered exists on Win and Linux/GTK, but is missing on OSX +#if ENABLE_GCODE_VIEWER + m_bmp_thumb_higher = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "thumb_right") : ScalableBitmap(this, "thumb_up")); + m_bmp_thumb_lower = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "thumb_left") : ScalableBitmap(this, "thumb_down")); +#else m_bmp_thumb_higher = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "right_half_circle.png") : ScalableBitmap(this, "thumb_up")); m_bmp_thumb_lower = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "left_half_circle.png" ) : ScalableBitmap(this, "thumb_down")); +#endif // ENABLE_GCODE_VIEWER m_thumb_size = m_bmp_thumb_lower.GetBmpSize(); m_bmp_add_tick_on = ScalableBitmap(this, "colorchange_add"); @@ -247,8 +260,7 @@ void Control::draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_p wxCoord segm_end_x = is_horizontal() ? higher_pos : width*0.5 - 1; wxCoord segm_end_y = is_horizontal() ? height*0.5 - 1 : higher_pos-1; - for (size_t id = 0; id < m_line_pens.size(); id++) - { + for (size_t id = 0; id < m_line_pens.size(); id++) { dc.SetPen(*m_line_pens[id]); dc.DrawLine(line_beg_x, line_beg_y, line_end_x, line_end_y); dc.SetPen(*m_segm_pens[id]); @@ -275,14 +287,14 @@ wxCoord Control::get_position_from_value(const int value) return wxCoord(SLIDER_MARGIN + int(val*step + 0.5)); } -wxSize Control::get_size() +wxSize Control::get_size() const { int w, h; get_size(&w, &h); return wxSize(w, h); } -void Control::get_size(int *w, int *h) +void Control::get_size(int* w, int* h) const { GetSize(w, h); is_horizontal() ? *w -= m_lock_icon_dim : *h -= m_lock_icon_dim; @@ -302,14 +314,22 @@ double Control::get_double_value(const SelectedSlider& selection) Info Control::GetTicksValues() const { Info custom_gcode_per_print_z; +#if ENABLE_GCODE_VIEWER + std::vector& values = custom_gcode_per_print_z.gcodes; +#else std::vector& values = custom_gcode_per_print_z.gcodes; +#endif // ENABLE_GCODE_VIEWER const int val_size = m_values.size(); if (!m_values.empty()) for (const TickCode& tick : m_ticks.ticks) { if (tick.tick > val_size) break; +#if ENABLE_GCODE_VIEWER + values.emplace_back(CustomGCode::Item{ m_values[tick.tick], tick.type, tick.extruder, tick.color, tick.extra }); +#else values.emplace_back(Item{m_values[tick.tick], tick.type, tick.extruder, tick.color, tick.extra}); +#endif // ENABLE_GCODE_VIEWER } if (m_force_mode_apply) @@ -320,8 +340,7 @@ Info Control::GetTicksValues() const void Control::SetTicksValues(const Info& custom_gcode_per_print_z) { - if (m_values.empty()) - { + if (m_values.empty()) { m_ticks.mode = m_mode; return; } @@ -329,7 +348,11 @@ void Control::SetTicksValues(const Info& custom_gcode_per_print_z) const bool was_empty = m_ticks.empty(); m_ticks.ticks.clear(); +#if ENABLE_GCODE_VIEWER + const std::vector& heights = custom_gcode_per_print_z.gcodes; +#else const std::vector& heights = custom_gcode_per_print_z.gcodes; +#endif // ENABLE_GCODE_VIEWER for (auto h : heights) { auto it = std::lower_bound(m_values.begin(), m_values.end(), h.print_z - epsilon()); @@ -401,7 +424,15 @@ void Control::draw_focus_rect() void Control::render() { +#if ENABLE_GCODE_VIEWER +#ifdef _WIN32 + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#else SetBackgroundColour(GetParent()->GetBackgroundColour()); +#endif // _WIN32 +#else + SetBackgroundColour(GetParent()->GetBackgroundColour()); +#endif // ENABLE_GCODE_VIEWER draw_focus_rect(); wxPaintDC dc(this); @@ -414,32 +445,37 @@ void Control::render() // and only in a case of no-empty m_values draw_colored_band(dc); - // draw line - draw_scroll_line(dc, lower_pos, higher_pos); + if (!m_render_as_disabled) { + // draw line + draw_scroll_line(dc, lower_pos, higher_pos); - //draw color print ticks - draw_ticks(dc); + // draw color print ticks + draw_ticks(dc); - // draw both sliders - draw_thumbs(dc, lower_pos, higher_pos); + // draw both sliders + draw_thumbs(dc, lower_pos, higher_pos); - //draw lock/unlock - draw_one_layer_icon(dc); + // draw lock/unlock + draw_one_layer_icon(dc); - //draw revert bitmap (if it's shown) - draw_revert_icon(dc); + // draw revert bitmap (if it's shown) + draw_revert_icon(dc); - //draw cog bitmap (if it's shown) - draw_cog_icon(dc); + // draw cog bitmap (if it's shown) + draw_cog_icon(dc); - //draw mouse position - draw_tick_on_mouse_position(dc); + // draw mouse position + draw_tick_on_mouse_position(dc); + } } void Control::draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_end) { const int tick = m_selection == ssLower ? m_lower_value : m_higher_value; + if (!m_enable_action_icon) + return; + // suppress add tick on first layer if (tick == 0) return; @@ -544,10 +580,21 @@ wxString Control::get_label(int tick) const if (value >= m_values.size()) return "ErrVal"; - const wxString str = m_values.empty() ? - wxNumberFormatter::ToString(m_label_koef*value, 2, wxNumberFormatter::Style_None) : - wxNumberFormatter::ToString(m_values[value], 2, wxNumberFormatter::Style_None); - return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value+1); +#if ENABLE_GCODE_VIEWER + if (m_draw_mode == dmSequentialGCodeView) + return wxString::Format("%d", static_cast(m_values[value])); + else { + const wxString str = m_values.empty() ? + wxString::Format("%.*f", 2, m_label_koef * value) : + wxString::Format("%.*f", 2, m_values[value]); + return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1); + } +#else + const wxString str = m_values.empty() ? + wxNumberFormatter::ToString(m_label_koef * value, 2, wxNumberFormatter::Style_None) : + wxNumberFormatter::ToString(m_values[value], 2, wxNumberFormatter::Style_None); + return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1); +#endif // ENABLE_GCODE_VIEWER } void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_side/*=true*/) const @@ -556,13 +603,36 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_ const wxString label = get_label(tick); dc.GetMultiLineTextExtent(label, &text_width, &text_height); wxPoint text_pos; - if (right_side) - text_pos = is_horizontal() ? wxPoint(pos.x + 1, pos.y + m_thumb_size.x) : - wxPoint(pos.x + m_thumb_size.x+1, pos.y - 0.5*text_height - 1); - else - text_pos = is_horizontal() ? wxPoint(pos.x - text_width - 1, pos.y - m_thumb_size.x - text_height) : - wxPoint(pos.x - text_width - 1 - m_thumb_size.x, pos.y - 0.5*text_height + 1); - dc.DrawText(label, text_pos); + if (right_side) { + if (is_horizontal()) { + int width; + int height; + get_size(&width, &height); + + int x_right = pos.x + 1 + text_width; + int xx = (x_right < width) ? pos.x + 1 : pos.x - text_width - 1; + text_pos = wxPoint(xx, pos.y + m_thumb_size.x / 2 + 1); + } + else + text_pos = wxPoint(pos.x + m_thumb_size.x + 1, pos.y - 0.5 * text_height - 1); + + // update text rectangle + m_rect_lower_thumb_text = wxRect(text_pos, wxSize(text_width, text_height)); + } + else { + if (is_horizontal()) { + int x = pos.x - text_width - 1; + int xx = (x > 0) ? x : pos.x + 1; + text_pos = wxPoint(xx, pos.y - m_thumb_size.x / 2 - text_height - 1); + } + else + text_pos = wxPoint(pos.x - text_width - 1 - m_thumb_size.x, pos.y - 0.5 * text_height + 1); + + // update text rectangle + m_rect_higher_thumb_text = wxRect(text_pos, wxSize(text_width, text_height)); + } + + dc.DrawText(label, text_pos); } void Control::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const @@ -572,6 +642,10 @@ void Control::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider void Control::draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) { +#if ENABLE_GCODE_VIEWER + wxCoord x_draw = pos.x - int(0.5 * m_thumb_size.x); + wxCoord y_draw = pos.y - int(0.5 * m_thumb_size.y); +#else wxCoord x_draw, y_draw; if (selection == ssLower) { if (is_horizontal()) { @@ -583,7 +657,7 @@ void Control::draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider y_draw = pos.y - int(0.5*m_thumb_size.y); } } - else{ + else { if (is_horizontal()) { x_draw = pos.x; y_draw = pos.y - int(0.5*m_thumb_size.y); @@ -593,6 +667,7 @@ void Control::draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider y_draw = pos.y - int(0.5*m_thumb_size.y); } } +#endif // ENABLE_GCODE_VIEWER dc.DrawBitmap(selection == ssLower ? m_bmp_thumb_lower.bmp() : m_bmp_thumb_higher.bmp(), x_draw, y_draw); // Update thumb rect @@ -649,8 +724,7 @@ void Control::draw_ticks(wxDC& dc) int height, width; get_size(&width, &height); const wxCoord mid = is_horizontal() ? 0.5*height : 0.5*width; - for (auto tick : m_ticks.ticks) - { + for (auto tick : m_ticks.ticks) { const wxCoord pos = get_position_from_value(tick.tick); is_horizontal() ? dc.DrawLine(pos, mid-14, pos, mid-9) : @@ -677,8 +751,7 @@ void Control::draw_ticks(wxDC& dc) icon_name = focused_tick ? "edit_gcode_f" : "edit_gcode"; // Draw icon for "Pause print", "Custom Gcode" or conflict tick - if (!icon_name.empty()) - { + if (!icon_name.empty()) { wxBitmap icon = create_scaled_bitmap(icon_name); wxCoord x_draw, y_draw; is_horizontal() ? x_draw = pos - 0.5 * m_tick_icon_dim : y_draw = pos - 0.5 * m_tick_icon_dim; @@ -754,9 +827,16 @@ void Control::draw_colored_band(wxDC& dc) wxRect main_band = get_colored_band_rect(); // don't color a band for MultiExtruder mode - if (m_ticks.empty() || m_mode == MultiExtruder) - { + if (m_ticks.empty() || m_mode == MultiExtruder) { +#if ENABLE_GCODE_VIEWER +#ifdef _WIN32 + draw_band(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW), main_band); +#else draw_band(dc, GetParent()->GetBackgroundColour(), main_band); +#endif // _WIN32 +#else + draw_band(dc, GetParent()->GetBackgroundColour(), main_band); +#endif // ENABLE_GCODE_VIEWER return; } @@ -788,6 +868,11 @@ void Control::draw_colored_band(wxDC& dc) void Control::draw_one_layer_icon(wxDC& dc) { +#if ENABLE_GCODE_VIEWER + if (m_draw_mode == dmSequentialGCodeView) + return; +#endif // ENABLE_GCODE_VIEWER + const wxBitmap& icon = m_is_one_layer ? m_focus == fiOneLayerIcon ? m_bmp_one_layer_lock_off.bmp() : m_bmp_one_layer_lock_on.bmp() : m_focus == fiOneLayerIcon ? m_bmp_one_layer_unlock_off.bmp() : m_bmp_one_layer_unlock_on.bmp(); @@ -829,8 +914,18 @@ void Control::draw_cog_icon(wxDC& dc) get_size(&width, &height); wxCoord x_draw, y_draw; - is_horizontal() ? x_draw = width-2 : x_draw = width - m_cog_icon_dim - 2; - is_horizontal() ? y_draw = height - m_cog_icon_dim - 2 : y_draw = height-2; +#if ENABLE_GCODE_VIEWER + if (m_draw_mode == dmSequentialGCodeView) { + is_horizontal() ? x_draw = width - 2 : x_draw = 0.5 * width - 0.5 * m_cog_icon_dim; + is_horizontal() ? y_draw = 0.5 * height - 0.5 * m_cog_icon_dim : y_draw = height - 2; + } + else { +#endif // ENABLE_GCODE_VIEWER + is_horizontal() ? x_draw = width - 2 : x_draw = width - m_cog_icon_dim - 2; + is_horizontal() ? y_draw = height - m_cog_icon_dim - 2 : y_draw = height - 2; +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER dc.DrawBitmap(m_bmp_cog.bmp(), x_draw, y_draw); @@ -838,9 +933,12 @@ void Control::draw_cog_icon(wxDC& dc) m_rect_cog_icon = wxRect(x_draw, y_draw, m_cog_icon_dim, m_cog_icon_dim); } -void Control::update_thumb_rect(const wxCoord& begin_x, const wxCoord& begin_y, const SelectedSlider& selection) +void Control::update_thumb_rect(const wxCoord begin_x, const wxCoord begin_y, const SelectedSlider& selection) { - const wxRect& rect = wxRect(begin_x, begin_y + (selection == ssLower ? int(m_thumb_size.y * 0.5) : 0), m_thumb_size.x, int(m_thumb_size.y*0.5)); + const wxRect rect = is_horizontal() ? + wxRect(begin_x + (selection == ssHigher ? m_thumb_size.x / 2 : 0), begin_y, m_thumb_size.x / 2, m_thumb_size.y) : + wxRect(begin_x, begin_y + (selection == ssLower ? m_thumb_size.y / 2 : 0), m_thumb_size.x, m_thumb_size.y / 2); + if (selection == ssLower) m_rect_lower_thumb = rect; else @@ -861,7 +959,7 @@ int Control::get_value_from_position(const wxCoord x, const wxCoord y) bool Control::detect_selected_slider(const wxPoint& pt) { if (is_point_in_rect(pt, m_rect_lower_thumb)) - m_selection = ssLower; + m_selection = m_lower_editable ? ssLower : ssUndef; else if(is_point_in_rect(pt, m_rect_higher_thumb)) m_selection = ssHigher; else @@ -921,8 +1019,7 @@ void Control::OnLeftDown(wxMouseEvent& event) m_mouse = maOneLayerIconClick; else if (is_point_in_rect(pos, m_rect_cog_icon)) m_mouse = maCogIconClick; - else if (m_draw_mode == dmRegular) - { + else if (m_draw_mode == dmRegular) { if (is_point_in_rect(pos, m_rect_tick_action)) { auto it = m_ticks.ticks.find(TickCode{ m_selection == ssLower ? m_lower_value : m_higher_value }); m_mouse = it == m_ticks.ticks.end() ? maAddTick : maDeleteTick; @@ -968,10 +1065,19 @@ wxString Control::get_tooltip(int tick/*=-1*/) if (m_focus == fiRevertIcon) return _L("Discard all custom changes"); if (m_focus == fiCogIcon) - return m_mode == MultiAsSingle ? +#if ENABLE_GCODE_VIEWER + { + if (m_draw_mode == dmSequentialGCodeView) + return _L("Jump to move") + " (Shift + G)"; + else +#endif // ENABLE_GCODE_VIEWER + return m_mode == MultiAsSingle ? GUI::from_u8((boost::format(_u8L("Jump to height %s or " - "Set extruder sequence for the entire print")) % " (Shift + G)\n").str()) : - _L("Jump to height") + " (Shift + G)"; + "Set extruder sequence for the entire print")) % " (Shift + G)\n").str()) : + _L("Jump to height") + " (Shift + G)"; +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER if (m_focus == fiColorBand) return m_mode != SingleExtruder ? "" : _L("Edit current color - Right click the colored slider segment"); @@ -1084,8 +1190,7 @@ void Control::OnMotion(wxMouseEvent& event) const wxPoint pos = event.GetLogicalPosition(wxClientDC(this)); int tick = -1; - if (!m_is_left_down && !m_is_right_down) - { + if (!m_is_left_down && !m_is_right_down) { if (is_point_in_rect(pos, m_rect_one_layer_icon)) m_focus = fiOneLayerIcon; else if (is_point_in_rect(pos, m_rect_tick_action)) { @@ -1099,6 +1204,14 @@ void Control::OnMotion(wxMouseEvent& event) else if (m_mode == SingleExtruder && is_point_in_rect(pos, get_colored_band_rect()) && get_edited_tick_for_position(pos) >= 0 ) m_focus = fiColorBand; + else if (is_point_in_rect(pos, m_rect_lower_thumb)) + m_focus = fiLowerThumb; + else if (is_point_in_rect(pos, m_rect_higher_thumb)) + m_focus = fiHigherThumb; + else if (is_point_in_rect(pos, m_rect_lower_thumb_text)) + m_focus = fiLowerThumbText; + else if (is_point_in_rect(pos, m_rect_higher_thumb_text)) + m_focus = fiHigherThumbText; else { m_focus = fiTick; tick = get_tick_near_point(pos); @@ -1127,8 +1240,7 @@ void Control::OnMotion(wxMouseEvent& event) // Set tooltips with information for each icon this->SetToolTip(get_tooltip(tick)); - if (action) - { + if (action) { wxCommandEvent e(wxEVT_SCROLL_CHANGED); e.SetEventObject(this); e.SetString("moving"); @@ -1139,19 +1251,17 @@ void Control::OnMotion(wxMouseEvent& event) void Control::append_change_extruder_menu_item(wxMenu* menu, bool switch_current_code/* = false*/) { const int extruders_cnt = GUI::wxGetApp().extruders_edited_cnt(); - if (extruders_cnt > 1) - { + if (extruders_cnt > 1) { std::array active_extruders = get_active_extruders_for_tick(m_selection == ssLower ? m_lower_value : m_higher_value); std::vector icons = get_extruder_color_icons(true); wxMenu* change_extruder_menu = new wxMenu(); - for (int i = 1; i <= extruders_cnt; i++) - { + for (int i = 1; i <= extruders_cnt; i++) { const bool is_active_extruder = i == active_extruders[0] || i == active_extruders[1]; - const wxString item_name = wxString::Format(_(L("Extruder %d")), i) + - (is_active_extruder ? " (" + _(L("active")) + ")" : ""); + const wxString item_name = wxString::Format(_L("Extruder %d"), i) + + (is_active_extruder ? " (" + _L("active") + ")" : ""); if (m_mode == MultiAsSingle) append_menu_item(change_extruder_menu, wxID_ANY, item_name, "", @@ -1163,7 +1273,7 @@ void Control::append_change_extruder_menu_item(wxMenu* menu, bool switch_current (switch_current_code ? _L("Switch code to Change extruder") : _L("Change extruder") ) : _L("Change extruder (N/A)"); - wxMenuItem* change_extruder_menu_item = menu->AppendSubMenu(change_extruder_menu, change_extruder_menu_name, _(L("Use another extruder"))); + wxMenuItem* change_extruder_menu_item = menu->AppendSubMenu(change_extruder_menu, change_extruder_menu_name, _L("Use another extruder")); change_extruder_menu_item->SetBitmap(create_scaled_bitmap(active_extruders[1] > 0 ? "edit_uni" : "change_extruder")); GUI::wxGetApp().plater()->Bind(wxEVT_UPDATE_UI, [this, change_extruder_menu_item](wxUpdateUIEvent& evt) { @@ -1175,19 +1285,17 @@ void Control::append_change_extruder_menu_item(wxMenu* menu, bool switch_current void Control::append_add_color_change_menu_item(wxMenu* menu, bool switch_current_code/* = false*/) { const int extruders_cnt = GUI::wxGetApp().extruders_edited_cnt(); - if (extruders_cnt > 1) - { + if (extruders_cnt > 1) { int tick = m_selection == ssLower ? m_lower_value : m_higher_value; std::set used_extruders_for_tick = m_ticks.get_used_extruders_for_tick(tick, m_only_extruder, m_values[tick]); wxMenu* add_color_change_menu = new wxMenu(); - for (int i = 1; i <= extruders_cnt; i++) - { + for (int i = 1; i <= extruders_cnt; i++) { const bool is_used_extruder = used_extruders_for_tick.empty() ? true : // #ys_FIXME till used_extruders_for_tick doesn't filled correct for mmMultiExtruder used_extruders_for_tick.find(i) != used_extruders_for_tick.end(); - const wxString item_name = wxString::Format(_(L("Extruder %d")), i) + - (is_used_extruder ? " (" + _(L("used")) + ")" : ""); + const wxString item_name = wxString::Format(_L("Extruder %d"), i) + + (is_used_extruder ? " (" + _L("used") + ")" : ""); append_menu_item(add_color_change_menu, wxID_ANY, item_name, "", [this, i](wxCommandEvent&) { add_code_as_tick(ColorChange, i); }, "", menu, @@ -1223,7 +1331,11 @@ void Control::OnLeftUp(wxMouseEvent& event) if (m_mode == MultiAsSingle && m_draw_mode == dmRegular) show_cog_icon_context_menu(); else +#if ENABLE_GCODE_VIEWER + jump_to_value(); +#else jump_to_print_z(); +#endif // ENABLE_GCODE_VIEWER break; case maOneLayerIconClick: switch_one_layer_mode(); @@ -1262,6 +1374,15 @@ void Control::move_current_thumb(const bool condition) if (is_horizontal()) delta *= -1; + // accelerators + int accelerator = 0; + if (wxGetKeyState(WXK_SHIFT)) + accelerator += 5; + if (wxGetKeyState(WXK_CONTROL)) + accelerator += 5; + if (accelerator > 0) + delta *= accelerator; + if (m_selection == ssLower) { m_lower_value -= delta; correct_lower_value(); @@ -1281,8 +1402,7 @@ void Control::move_current_thumb(const bool condition) void Control::OnWheel(wxMouseEvent& event) { // Set nearest to the mouse thumb as a selected, if there is not selected thumb - if (m_selection == ssUndef) - { + if (m_selection == ssUndef) { const wxPoint& pt = event.GetLogicalPosition(wxClientDC(this)); if (is_horizontal()) @@ -1295,12 +1415,35 @@ void Control::OnWheel(wxMouseEvent& event) ssLower : ssHigher; } + if (m_selection == ssLower && !m_lower_editable) + m_selection = ssUndef; + +#if ENABLE_GCODE_VIEWER + move_current_thumb((m_draw_mode == dmSequentialGCodeView) ? event.GetWheelRotation() < 0 : event.GetWheelRotation() > 0); +#else move_current_thumb(event.GetWheelRotation() > 0); +#endif // ENABLE_GCODE_VIEWER } void Control::OnKeyDown(wxKeyEvent &event) { const int key = event.GetKeyCode(); +#if ENABLE_GCODE_VIEWER + if (m_draw_mode != dmSequentialGCodeView && key == WXK_NUMPAD_ADD) { + // OnChar() is called immediately after OnKeyDown(), which can cause call of add_tick() twice. + // To avoid this case we should suppress second add_tick() call. + m_ticks.suppress_plus(true); + add_current_tick(true); + } + else if (m_draw_mode != dmSequentialGCodeView && (key == WXK_NUMPAD_SUBTRACT || key == WXK_DELETE || key == WXK_BACK)) { + // OnChar() is called immediately after OnKeyDown(), which can cause call of delete_tick() twice. + // To avoid this case we should suppress second delete_tick() call. + m_ticks.suppress_minus(true); + delete_current_tick(); + } + else if (m_draw_mode != dmSequentialGCodeView && event.GetKeyCode() == WXK_SHIFT) + UseDefaultColors(false); +#else if (key == WXK_NUMPAD_ADD) { // OnChar() is called immediately after OnKeyDown(), which can cause call of add_tick() twice. // To avoid this case we should suppress second add_tick() call. @@ -1315,22 +1458,40 @@ void Control::OnKeyDown(wxKeyEvent &event) } else if (event.GetKeyCode() == WXK_SHIFT) UseDefaultColors(false); - else if (is_horizontal()) - { - if (key == WXK_LEFT || key == WXK_RIGHT) - move_current_thumb(key == WXK_LEFT); - else if (key == WXK_UP || key == WXK_DOWN) { - m_selection = key == WXK_UP ? ssHigher : ssLower; - Refresh(); +#endif // ENABLE_GCODE_VIEWER + else if (is_horizontal()) { +#if ENABLE_GCODE_VIEWER + if (m_is_focused) { +#endif // ENABLE_GCODE_VIEWER + if (key == WXK_LEFT || key == WXK_RIGHT) + move_current_thumb(key == WXK_LEFT); + else if (key == WXK_UP || key == WXK_DOWN) { + if (key == WXK_UP) + m_selection = ssHigher; + else if (key == WXK_DOWN && m_lower_editable) + m_selection = ssLower; + Refresh(); + } +#if ENABLE_GCODE_VIEWER } +#endif // ENABLE_GCODE_VIEWER } else { - if (key == WXK_LEFT || key == WXK_RIGHT) { - m_selection = key == WXK_LEFT ? ssHigher : ssLower; - Refresh(); +#if ENABLE_GCODE_VIEWER + if (m_is_focused) { +#endif // ENABLE_GCODE_VIEWER + if (key == WXK_LEFT || key == WXK_RIGHT) { + if (key == WXK_LEFT) + m_selection = ssHigher; + else if (key == WXK_RIGHT && m_lower_editable) + m_selection = ssLower; + Refresh(); + } + else if (key == WXK_UP || key == WXK_DOWN) + move_current_thumb(key == WXK_UP); +#if ENABLE_GCODE_VIEWER } - else if (key == WXK_UP || key == WXK_DOWN) - move_current_thumb(key == WXK_UP); +#endif // ENABLE_GCODE_VIEWER } event.Skip(); // !Needed to have EVT_CHAR generated as well @@ -1351,16 +1512,27 @@ void Control::OnKeyUp(wxKeyEvent &event) void Control::OnChar(wxKeyEvent& event) { const int key = event.GetKeyCode(); - if (key == '+' && !m_ticks.suppressed_plus()) { - add_current_tick(true); - m_ticks.suppress_plus(false); - } - else if (key == '-' && !m_ticks.suppressed_minus()) { - delete_current_tick(); - m_ticks.suppress_minus(false); +#if ENABLE_GCODE_VIEWER + if (m_draw_mode != dmSequentialGCodeView) + { +#endif // ENABLE_GCODE_VIEWER + if (key == '+' && !m_ticks.suppressed_plus()) { + add_current_tick(true); + m_ticks.suppress_plus(false); + } + else if (key == '-' && !m_ticks.suppressed_minus()) { + delete_current_tick(); + m_ticks.suppress_minus(false); + } +#if ENABLE_GCODE_VIEWER } +#endif // ENABLE_GCODE_VIEWER if (key == 'G') +#if ENABLE_GCODE_VIEWER + jump_to_value(); +#else jump_to_print_z(); +#endif // ENABLE_GCODE_VIEWER } void Control::OnRightDown(wxMouseEvent& event) @@ -1372,8 +1544,7 @@ void Control::OnRightDown(wxMouseEvent& event) m_mouse = maNone; if (m_draw_mode == dmRegular) { - if (is_point_in_rect(pos, m_rect_tick_action)) - { + if (is_point_in_rect(pos, m_rect_tick_action)) { const int tick = m_selection == ssLower ? m_lower_value : m_higher_value; m_mouse = m_ticks.ticks.find(TickCode{ tick }) == m_ticks.ticks.end() ? maAddMenu : maEditMenu; @@ -1432,8 +1603,7 @@ std::set TickCodeInfo::get_used_extruders_for_tick(int tick, int only_extru { Mode e_mode = !force_mode ? mode : force_mode; - if (e_mode == MultiExtruder) - { + if (e_mode == MultiExtruder) { // #ys_FIXME: get tool ordering from _correct_ place const ToolOrdering& tool_ordering = GUI::wxGetApp().plater()->fff_print().get_tool_ordering(); @@ -1443,8 +1613,7 @@ std::set TickCodeInfo::get_used_extruders_for_tick(int tick, int only_extru std::set used_extruders; auto it_layer_tools = std::lower_bound(tool_ordering.begin(), tool_ordering.end(), LayerTools(print_z)); - for (; it_layer_tools != tool_ordering.end(); ++it_layer_tools) - { + for (; it_layer_tools != tool_ordering.end(); ++it_layer_tools) { const std::vector& extruders = it_layer_tools->extruders; for (const auto& extruder : extruders) used_extruders.emplace(extruder+1); @@ -1528,18 +1697,18 @@ void Control::show_edit_context_menu() append_add_color_change_menu_item(&menu, true); } else - append_menu_item(&menu, wxID_ANY, it->type == ColorChange ? _(L("Edit color")) : - it->type == PausePrint ? _(L("Edit pause print message")) : - _(L("Edit custom G-code")), "", + append_menu_item(&menu, wxID_ANY, it->type == ColorChange ? _L("Edit color") : + it->type == PausePrint ? _L("Edit pause print message") : + _L("Edit custom G-code"), "", [this](wxCommandEvent&) { edit_tick(); }, "edit_uni", &menu); if (it->type == ColorChange && m_mode == MultiAsSingle) append_change_extruder_menu_item(&menu, true); - append_menu_item(&menu, wxID_ANY, it->type == ColorChange ? _(L("Delete color change")) : - it->type == ToolChange ? _(L("Delete tool change")) : - it->type == PausePrint ? _(L("Delete pause print")) : - _(L("Delete custom G-code")), "", + append_menu_item(&menu, wxID_ANY, it->type == ColorChange ? _L("Delete color change") : + it->type == ToolChange ? _L("Delete tool change") : + it->type == PausePrint ? _L("Delete pause print") : + _L("Delete custom G-code"), "", [this](wxCommandEvent&) { delete_current_tick();}, "colorchange_del_f", &menu); GUI::wxGetApp().plater()->PopupMenu(&menu); @@ -1549,10 +1718,14 @@ void Control::show_cog_icon_context_menu() { wxMenu menu; - append_menu_item(&menu, wxID_ANY, _(L("Jump to height")) + " (Shift+G)", "", - [this](wxCommandEvent&) { jump_to_print_z(); }, "", &menu); + append_menu_item(&menu, wxID_ANY, _L("Jump to height") + " (Shift+G)", "", +#if ENABLE_GCODE_VIEWER + [this](wxCommandEvent&) { jump_to_value(); }, "", & menu); +#else + [this](wxCommandEvent&) { jump_to_print_z(); }, "", &menu); +#endif // ENABLE_GCODE_VIEWER - append_menu_item(&menu, wxID_ANY, _(L("Set extruder sequence for the entire print")), "", + append_menu_item(&menu, wxID_ANY, _L("Set extruder sequence for the entire print"), "", [this](wxCommandEvent&) { edit_extruder_sequence(); }, "", &menu); GUI::wxGetApp().plater()->PopupMenu(&menu); @@ -1565,8 +1738,7 @@ void Control::OnRightUp(wxMouseEvent& event) this->ReleaseMouse(); m_is_right_down = m_is_one_layer = false; - if (m_mouse == maForceColorEdit) - { + if (m_mouse == maForceColorEdit) { wxPoint pos = event.GetLogicalPosition(wxClientDC(this)); int edited_tick = get_edited_tick_for_position(pos); if (edited_tick >= 0) @@ -1625,13 +1797,12 @@ static void upgrade_text_entry_dialog(wxTextEntryDialog* dlg, double min = -1.0, btn_OK->Bind(wxEVT_UPDATE_UI, [textctrl, min, max](wxUpdateUIEvent& evt) { bool disable = textctrl->IsEmpty(); - if (!disable && min >= 0.0 && max >= 0.0) - { + if (!disable && min >= 0.0 && max >= 0.0) { double value = -1.0; if (!textctrl->GetValue().ToCDouble(&value)) // input value couldn't be converted to double disable = true; else - disable = value < min || value > max; // is input value is out of valid range ? + disable = value < min - epsilon() || value > max + epsilon(); // is input value is out of valid range ? } evt.Enable(!disable); @@ -1670,11 +1841,21 @@ static std::string get_pause_print_msg(const std::string& msg_in, double height) return into_u8(dlg.GetValue()); } +#if ENABLE_GCODE_VIEWER +static double get_value_to_jump(double active_value, double min_z, double max_z, DrawMode mode) +#else static double get_print_z_to_jump(double active_print_z, double min_z, double max_z) +#endif // ENABLE_GCODE_VIEWER { - wxString msg_text = _(L("Enter the height you want to jump to")) + ":"; - wxString msg_header = _(L("Jump to height")); +#if ENABLE_GCODE_VIEWER + wxString msg_text = (mode == dmSequentialGCodeView) ? _L("Enter the move you want to jump to") + ":" : _L("Enter the height you want to jump to") + ":"; + wxString msg_header = (mode == dmSequentialGCodeView) ? _L("Jump to move") : _L("Jump to height"); + wxString msg_in = GUI::double_to_string(active_value); +#else + wxString msg_text = _L("Enter the height you want to jump to") + ":"; + wxString msg_header = _L("Jump to height"); wxString msg_in = GUI::double_to_string(active_print_z); +#endif // ENABLE_GCODE_VIEWER // get custom gcode wxTextEntryDialog dlg(nullptr, msg_text, msg_header, msg_in, wxTextEntryDialogStyle); @@ -1741,8 +1922,7 @@ void Control::add_current_tick(bool call_from_keyboard /*= false*/) /* Menu position will be calculated from mouse click position, but... * if function is called from keyboard (pressing "+"), we should to calculate it * */ - if (call_from_keyboard) - { + if (call_from_keyboard) { int width, height; get_size(&width, &height); @@ -1797,7 +1977,7 @@ void Control::switch_one_layer_mode() SetHigherValue(m_max_value); } m_selection == ssLower ? correct_lower_value() : correct_higher_value(); - if (!m_selection) m_selection = ssHigher; + if (m_selection == ssUndef) m_selection = ssHigher; } // discard all custom changes on DoubleSlider @@ -1807,7 +1987,7 @@ void Control::discard_all_thicks() SetHigherValue(m_max_value); m_selection == ssLower ? correct_lower_value() : correct_higher_value(); - if (!m_selection) m_selection = ssHigher; + if (m_selection == ssUndef) m_selection = ssHigher; m_ticks.ticks.clear(); post_ticks_changed_event(); @@ -1821,19 +2001,14 @@ void Control::move_current_thumb_to_pos(wxPoint pos) const int tick_val = get_tick_near_point(pos); const int mouse_val = tick_val >= 0 && m_draw_mode == dmRegular ? tick_val : get_value_from_position(pos); - if (mouse_val >= 0) - { - // if (abs(mouse_val - m_lower_value) < abs(mouse_val - m_higher_value)) { - // if (mouse_val <= m_lower_value) { + if (mouse_val >= 0) { if (m_selection == ssLower) { SetLowerValue(mouse_val); correct_lower_value(); - // m_selection = ssLower; } - else { + else { // even m_selection is ssUndef, upper thumb should be selected SetHigherValue(mouse_val); correct_higher_value(); - m_selection = ssHigher; } } } @@ -1866,8 +2041,7 @@ void Control::edit_extruder_sequence() extruder++; if (extruder == extr_cnt) extruder = 0; - if (m_extruders_sequence.is_mm_intervals) - { + if (m_extruders_sequence.is_mm_intervals) { value += m_extruders_sequence.interval_by_mm; auto val_it = std::lower_bound(m_values.begin(), m_values.end(), value - epsilon()); @@ -1883,6 +2057,23 @@ void Control::edit_extruder_sequence() post_ticks_changed_event(ToolChange); } +#if ENABLE_GCODE_VIEWER +void Control::jump_to_value() +{ + double value = get_value_to_jump(m_values[m_selection == ssLower ? m_lower_value : m_higher_value], + m_values[m_min_value], m_values[m_max_value], m_draw_mode); + if (value < 0.0) + return; + + auto it = std::lower_bound(m_values.begin(), m_values.end(), value - epsilon()); + int tick_value = it - m_values.begin(); + + if (m_selection == ssLower) + SetLowerValue(tick_value); + else + SetHigherValue(tick_value); +} +#else void Control::jump_to_print_z() { double print_z = get_print_z_to_jump(m_values[m_selection == ssLower ? m_lower_value : m_higher_value], @@ -1898,10 +2089,11 @@ void Control::jump_to_print_z() else SetHigherValue(tick_value); } +#endif // ENABLE_GCODE_VIEWER void Control::post_ticks_changed_event(Type type /*= Custom*/) { - m_force_mode_apply = type != ToolChange; +// m_force_mode_apply = type != ToolChange; // It looks like this condition is no needed now. Leave it for the testing wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED)); } @@ -1935,8 +2127,7 @@ bool Control::check_ticks_changed_event(Type type) return false; } // m_ticks_mode == MultiAsSingle - if( m_ticks.has_tick_with_code(ToolChange) ) - { + if( m_ticks.has_tick_with_code(ToolChange) ) { wxString message = m_mode == SingleExtruder ? ( _L("The last color change data was saved for a multi extruder printing.") + "\n\n" + _L("Select YES if you want to delete all saved tool changes, \n" @@ -1966,9 +2157,12 @@ bool Control::check_ticks_changed_event(Type type) std::string TickCodeInfo::get_color_for_tick(TickCode tick, Type type, const int extruder) { - if (mode == SingleExtruder && type == ColorChange && m_use_default_colors) - { + if (mode == SingleExtruder && type == ColorChange && m_use_default_colors) { +#if ENABLE_GCODE_VIEWER + const std::vector& colors = ColorPrintColors::get(); +#else const std::vector& colors = GCodePreviewData::ColorPrintColors(); +#endif // ENABLE_GCODE_VIEWER if (ticks.empty()) return colors[0]; m_default_color_idx++; @@ -1978,10 +2172,8 @@ std::string TickCodeInfo::get_color_for_tick(TickCode tick, Type type, const int std::string color = (*m_colors)[extruder - 1]; - if (type == ColorChange) - { - if (!ticks.empty()) - { + if (type == ColorChange) { + if (!ticks.empty()) { auto before_tick_it = std::lower_bound(ticks.begin(), ticks.end(), tick ); while (before_tick_it != ticks.begin()) { --before_tick_it; @@ -2008,15 +2200,13 @@ bool TickCodeInfo::add_tick(const int tick, Type type, const int extruder, doubl return false; custom_gcode = extra; } - else if (type == PausePrint) - { + else if (type == PausePrint) { extra = get_pause_print_msg(pause_print_msg, print_z); if (extra.empty()) return false; pause_print_msg = extra; } - else - { + else { color = get_color_for_tick(TickCode{ tick }, type, extruder); if (color.empty()) return false; @@ -2069,8 +2259,7 @@ bool TickCodeInfo::edit_tick(std::set::iterator it, double print_z) void TickCodeInfo::switch_code(Type type_from, Type type_to) { for (auto it{ ticks.begin() }, end{ ticks.end() }; it != end; ) - if (it->type == type_from) - { + if (it->type == type_from) { TickCode tick = *it; tick.type = type_to; tick.extruder = 1; @@ -2127,8 +2316,7 @@ ConflictType TickCodeInfo::is_conflict_tick(const TickCode& tick, Mode out_mode, return ctModeConflict; // check ColorChange tick - if (tick.type == ColorChange) - { + if (tick.type == ColorChange) { // We should mark a tick as a "MeaninglessColorChange", // if it has a ColorChange for unused extruder from current print to end of the print std::set used_extruders_for_tick = get_used_extruders_for_tick(tick.tick, only_extruder, print_z, out_mode); @@ -2155,8 +2343,7 @@ ConflictType TickCodeInfo::is_conflict_tick(const TickCode& tick, Mode out_mode, } // check ToolChange tick - if (mode == MultiAsSingle && tick.type == ToolChange) - { + if (mode == MultiAsSingle && tick.type == ToolChange) { // We should mark a tick as a "MeaninglessToolChange", // if it has a ToolChange to the same extruder auto it = ticks.find(tick); diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp index e39db6fb43..4711f08322 100644 --- a/src/slic3r/GUI/DoubleSlider.hpp +++ b/src/slic3r/GUI/DoubleSlider.hpp @@ -4,7 +4,9 @@ #include "libslic3r/CustomGCode.hpp" #include "wxExtensions.hpp" +#if !ENABLE_GCODE_VIEWER #include +#endif // !ENABLE_GCODE_VIEWER #include #include #include @@ -42,6 +44,10 @@ enum FocusedItem { fiCogIcon, fiColorBand, fiActionIcon, + fiLowerThumb, + fiHigherThumb, + fiLowerThumbText, + fiHigherThumbText, fiTick }; @@ -73,6 +79,9 @@ enum DrawMode dmRegular, dmSlaPrint, dmSequentialFffPrint, +#if ENABLE_GCODE_VIEWER + dmSequentialGCodeView, +#endif // ENABLE_GCODE_VIEWER }; struct TickCode @@ -210,19 +219,26 @@ public: void SetTicksValues(const Info &custom_gcode_per_print_z); void SetDrawMode(bool is_sla_print, bool is_sequential_print); +#if ENABLE_GCODE_VIEWER + void SetDrawMode(DrawMode mode) { m_draw_mode = mode; } +#endif // ENABLE_GCODE_VIEWER void SetManipulationMode(Mode mode) { m_mode = mode; } Mode GetManipulationMode() const { return m_mode; } void SetModeAndOnlyExtruder(const bool is_one_extruder_printed_model, const int only_extruder); void SetExtruderColors(const std::vector& extruder_colors); + void set_lower_editable(bool editable) { m_lower_editable = editable; } + void set_render_as_disabled(bool value) { m_render_as_disabled = value; } + bool is_rendering_as_disabled() const { return m_render_as_disabled; } + bool is_horizontal() const { return m_style == wxSL_HORIZONTAL; } bool is_one_layer() const { return m_is_one_layer; } bool is_lower_at_min() const { return m_lower_value == m_min_value; } bool is_higher_at_max() const { return m_higher_value == m_max_value; } bool is_full_span() const { return this->is_lower_at_min() && this->is_higher_at_max(); } - void OnPaint(wxPaintEvent& ) { render();} + void OnPaint(wxPaintEvent& ) { render(); } void OnLeftDown(wxMouseEvent& event); void OnMotion(wxMouseEvent& event); void OnLeftUp(wxMouseEvent& event); @@ -246,7 +262,12 @@ public: void discard_all_thicks(); void move_current_thumb_to_pos(wxPoint pos); void edit_extruder_sequence(); +#if ENABLE_GCODE_VIEWER + void jump_to_value(); + void enable_action_icon(bool enable) { m_enable_action_icon = enable; } +#else void jump_to_print_z(); +#endif // ENABLE_GCODE_VIEWER void show_add_context_menu(); void show_edit_context_menu(); void show_cog_icon_context_menu(); @@ -272,7 +293,7 @@ protected: void draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_side = true) const; void draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const; - void update_thumb_rect(const wxCoord& begin_x, const wxCoord& begin_y, const SelectedSlider& selection); + void update_thumb_rect(const wxCoord begin_x, const wxCoord begin_y, const SelectedSlider& selection); bool detect_selected_slider(const wxPoint& pt); void correct_lower_value(); void correct_higher_value(); @@ -290,8 +311,8 @@ private: int get_value_from_position(const wxCoord x, const wxCoord y); int get_value_from_position(const wxPoint pos) { return get_value_from_position(pos.x, pos.y); } wxCoord get_position_from_value(const int value); - wxSize get_size(); - void get_size(int *w, int *h); + wxSize get_size() const; + void get_size(int* w, int* h) const; double get_double_value(const SelectedSlider& selection); wxString get_tooltip(int tick = -1); int get_edited_tick_for_position(wxPoint pos, Type type = ColorChange); @@ -318,6 +339,10 @@ private: int m_max_value; int m_lower_value; int m_higher_value; + + bool m_lower_editable{ true }; + bool m_render_as_disabled{ false }; + ScalableBitmap m_bmp_thumb_higher; ScalableBitmap m_bmp_thumb_lower; ScalableBitmap m_bmp_add_tick_on; @@ -336,6 +361,9 @@ private: bool m_is_one_layer = false; bool m_is_focused = false; bool m_force_mode_apply = true; +#if ENABLE_GCODE_VIEWER + bool m_enable_action_icon = true; +#endif // ENABLE_GCODE_VIEWER DrawMode m_draw_mode = dmRegular; @@ -348,6 +376,8 @@ private: wxRect m_rect_lower_thumb; wxRect m_rect_higher_thumb; + mutable wxRect m_rect_lower_thumb_text; + mutable wxRect m_rect_higher_thumb_text; wxRect m_rect_tick_action; wxRect m_rect_one_layer_icon; wxRect m_rect_revert_icon; diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp new file mode 100644 index 0000000000..2915d498c0 --- /dev/null +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -0,0 +1,333 @@ +#include "ExtraRenderers.hpp" +#include "wxExtensions.hpp" +#include "GUI.hpp" +#include "I18N.hpp" + +#include +#ifdef wxHAS_GENERIC_DATAVIEWCTRL +#include "wx/generic/private/markuptext.h" +#include "wx/generic/private/rowheightcache.h" +#include "wx/generic/private/widthcalc.h" +#endif +/* +#ifdef __WXGTK__ +#include "wx/gtk/private.h" +#include "wx/gtk/private/value.h" +#endif +*/ +#if wxUSE_ACCESSIBILITY +#include "wx/private/markupparser.h" +#endif // wxUSE_ACCESSIBILITY + +using Slic3r::GUI::from_u8; +using Slic3r::GUI::into_u8; + + +//----------------------------------------------------------------------------- +// DataViewBitmapText +//----------------------------------------------------------------------------- + +wxIMPLEMENT_DYNAMIC_CLASS(DataViewBitmapText, wxObject) + +IMPLEMENT_VARIANT_OBJECT(DataViewBitmapText) + +// --------------------------------------------------------- +// BitmapTextRenderer +// --------------------------------------------------------- + +#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING +BitmapTextRenderer::BitmapTextRenderer(wxDataViewCellMode mode /*= wxDATAVIEW_CELL_EDITABLE*/, + int align /*= wxDVR_DEFAULT_ALIGNMENT*/): +wxDataViewRenderer(wxT("PrusaDataViewBitmapText"), mode, align) +{ + SetMode(mode); + SetAlignment(align); +} +#endif // ENABLE_NONCUSTOM_DATA_VIEW_RENDERING + +BitmapTextRenderer::~BitmapTextRenderer() +{ +#ifdef SUPPORTS_MARKUP + #ifdef wxHAS_GENERIC_DATAVIEWCTRL + if (m_markupText) + delete m_markupText; + #endif //wxHAS_GENERIC_DATAVIEWCTRL +#endif // SUPPORTS_MARKUP +} + +void BitmapTextRenderer::EnableMarkup(bool enable) +{ +#ifdef SUPPORTS_MARKUP +#ifdef wxHAS_GENERIC_DATAVIEWCTRL + if (enable) { + if (!m_markupText) + m_markupText = new wxItemMarkupText(wxString()); + } + else { + if (m_markupText) { + delete m_markupText; + m_markupText = nullptr; + } + } +#else + is_markupText = enable; +#endif //wxHAS_GENERIC_DATAVIEWCTRL +#endif // SUPPORTS_MARKUP +} + +bool BitmapTextRenderer::SetValue(const wxVariant &value) +{ + m_value << value; + +#ifdef SUPPORTS_MARKUP +#ifdef wxHAS_GENERIC_DATAVIEWCTRL + if (m_markupText) + m_markupText->SetMarkup(m_value.GetText()); + /* +#else +#if defined(__WXGTK__) + GValue gvalue = G_VALUE_INIT; + g_value_init(&gvalue, G_TYPE_STRING); + g_value_set_string(&gvalue, wxGTK_CONV_FONT(str.GetText(), GetOwner()->GetOwner()->GetFont())); + g_object_set_property(G_OBJECT(m_renderer/ *.GetText()* /), is_markupText ? "markup" : "text", &gvalue); + g_value_unset(&gvalue); +#endif // __WXGTK__ + */ +#endif // wxHAS_GENERIC_DATAVIEWCTRL +#endif // SUPPORTS_MARKUP + + return true; +} + +bool BitmapTextRenderer::GetValue(wxVariant& WXUNUSED(value)) const +{ + return false; +} + +#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING && wxUSE_ACCESSIBILITY +wxString BitmapTextRenderer::GetAccessibleDescription() const +{ +#ifdef SUPPORTS_MARKUP + if (m_markupText) + return wxMarkupParser::Strip(m_text); +#endif // SUPPORTS_MARKUP + + return m_value.GetText(); +} +#endif // wxUSE_ACCESSIBILITY && ENABLE_NONCUSTOM_DATA_VIEW_RENDERING + +bool BitmapTextRenderer::Render(wxRect rect, wxDC *dc, int state) +{ + int xoffset = 0; + + const wxBitmap& icon = m_value.GetBitmap(); + if (icon.IsOk()) + { +#ifdef __APPLE__ + wxSize icon_sz = icon.GetScaledSize(); +#else + wxSize icon_sz = icon.GetSize(); +#endif + dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon_sz.y) / 2); + xoffset = icon_sz.x + 4; + } + +#if defined(SUPPORTS_MARKUP) && defined(wxHAS_GENERIC_DATAVIEWCTRL) + if (m_markupText) + { + rect.x += xoffset; + m_markupText->Render(GetView(), *dc, rect, 0, GetEllipsizeMode()); + } + else +#endif // SUPPORTS_MARKUP && wxHAS_GENERIC_DATAVIEWCTRL + RenderText(m_value.GetText(), xoffset, rect, dc, state); + + return true; +} + +wxSize BitmapTextRenderer::GetSize() const +{ + if (!m_value.GetText().empty()) + { + wxSize size; +#if defined(SUPPORTS_MARKUP) && defined(wxHAS_GENERIC_DATAVIEWCTRL) + if (m_markupText) + { + wxDataViewCtrl* const view = GetView(); + wxClientDC dc(view); + if (GetAttr().HasFont()) + dc.SetFont(GetAttr().GetEffectiveFont(view->GetFont())); + + size = m_markupText->Measure(dc); + + int lines = m_value.GetText().Freq('\n') + 1; + size.SetHeight(size.GetHeight() * lines); + } + else +#endif // SUPPORTS_MARKUP && wxHAS_GENERIC_DATAVIEWCTRL + size = GetTextExtent(m_value.GetText()); + + if (m_value.GetBitmap().IsOk()) + size.x += m_value.GetBitmap().GetWidth() + 4; + return size; + } + return wxSize(80, 20); +} + + +wxWindow* BitmapTextRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) +{ + if (can_create_editor_ctrl && !can_create_editor_ctrl()) + return nullptr; + + DataViewBitmapText data; + data << value; + + m_was_unusable_symbol = false; + + wxPoint position = labelRect.GetPosition(); + if (data.GetBitmap().IsOk()) { + const int bmp_width = data.GetBitmap().GetWidth(); + position.x += bmp_width; + labelRect.SetWidth(labelRect.GetWidth() - bmp_width); + } + + wxTextCtrl* text_editor = new wxTextCtrl(parent, wxID_ANY, data.GetText(), + position, labelRect.GetSize(), wxTE_PROCESS_ENTER); + text_editor->SetInsertionPointEnd(); + text_editor->SelectAll(); + + return text_editor; +} + +bool BitmapTextRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) +{ + wxTextCtrl* text_editor = wxDynamicCast(ctrl, wxTextCtrl); + if (!text_editor || text_editor->GetValue().IsEmpty()) + return false; + + std::string chosen_name = into_u8(text_editor->GetValue()); + const char* unusable_symbols = "<>:/\\|?*\""; + for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { + if (chosen_name.find_first_of(unusable_symbols[i]) != std::string::npos) { + m_was_unusable_symbol = true; + return false; + } + } + + // The icon can't be edited so get its old value and reuse it. + wxVariant valueOld; + GetView()->GetModel()->GetValue(valueOld, m_item, /*colName*/0); + + DataViewBitmapText bmpText; + bmpText << valueOld; + + // But replace the text with the value entered by user. + bmpText.SetText(text_editor->GetValue()); + + value << bmpText; + return true; +} + +// ---------------------------------------------------------------------------- +// BitmapChoiceRenderer +// ---------------------------------------------------------------------------- + +bool BitmapChoiceRenderer::SetValue(const wxVariant& value) +{ + m_value << value; + return true; +} + +bool BitmapChoiceRenderer::GetValue(wxVariant& value) const +{ + value << m_value; + return true; +} + +bool BitmapChoiceRenderer::Render(wxRect rect, wxDC* dc, int state) +{ + int xoffset = 0; + + const wxBitmap& icon = m_value.GetBitmap(); + if (icon.IsOk()) + { + dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon.GetHeight()) / 2); + xoffset = icon.GetWidth() + 4; + + if (rect.height==0) + rect.height= icon.GetHeight(); + } + + RenderText(m_value.GetText(), xoffset, rect, dc, state); + + return true; +} + +wxSize BitmapChoiceRenderer::GetSize() const +{ + wxSize sz = GetTextExtent(m_value.GetText()); + + if (m_value.GetBitmap().IsOk()) + sz.x += m_value.GetBitmap().GetWidth() + 4; + + return sz; +} + + +wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) +{ + if (can_create_editor_ctrl && !can_create_editor_ctrl()) + return nullptr; + + std::vector icons = get_extruder_color_icons(); + if (icons.empty()) + return nullptr; + + DataViewBitmapText data; + data << value; + + auto c_editor = new wxBitmapComboBox(parent, wxID_ANY, wxEmptyString, + labelRect.GetTopLeft(), wxSize(labelRect.GetWidth(), -1), + 0, nullptr , wxCB_READONLY); + + int i=0; + for (wxBitmap* bmp : icons) { + if (i==0) { + c_editor->Append(_L("default"), *bmp); + ++i; + } + + c_editor->Append(wxString::Format("%d", i), *bmp); + ++i; + } + c_editor->SetSelection(atoi(data.GetText().c_str())); + + // to avoid event propagation to other sidebar items + c_editor->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { + evt.StopPropagation(); + // FinishEditing grabs new selection and triggers config update. We better call + // it explicitly, automatic update on KILL_FOCUS didn't work on Linux. + this->FinishEditing(); + }); + + return c_editor; +} + +bool BitmapChoiceRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) +{ + wxBitmapComboBox* c = (wxBitmapComboBox*)ctrl; + int selection = c->GetSelection(); + if (selection < 0) + return false; + + DataViewBitmapText bmpText; + + bmpText.SetText(c->GetString(selection)); + bmpText.SetBitmap(c->GetItemBitmap(selection)); + + value << bmpText; + return true; +} + + diff --git a/src/slic3r/GUI/ExtraRenderers.hpp b/src/slic3r/GUI/ExtraRenderers.hpp new file mode 100644 index 0000000000..6593963b78 --- /dev/null +++ b/src/slic3r/GUI/ExtraRenderers.hpp @@ -0,0 +1,162 @@ +#ifndef slic3r_GUI_ExtraRenderers_hpp_ +#define slic3r_GUI_ExtraRenderers_hpp_ + +#include + +#include + +#if wxUSE_MARKUP && wxCHECK_VERSION(3, 1, 1) + #define SUPPORTS_MARKUP +#endif + +// ---------------------------------------------------------------------------- +// DataViewBitmapText: helper class used by BitmapTextRenderer +// ---------------------------------------------------------------------------- + +class DataViewBitmapText : public wxObject +{ +public: + DataViewBitmapText( const wxString &text = wxEmptyString, + const wxBitmap& bmp = wxNullBitmap) : + m_text(text), + m_bmp(bmp) + { } + + DataViewBitmapText(const DataViewBitmapText &other) + : wxObject(), + m_text(other.m_text), + m_bmp(other.m_bmp) + { } + + void SetText(const wxString &text) { m_text = text; } + wxString GetText() const { return m_text; } + void SetBitmap(const wxBitmap &bmp) { m_bmp = bmp; } + const wxBitmap &GetBitmap() const { return m_bmp; } + + bool IsSameAs(const DataViewBitmapText& other) const { + return m_text == other.m_text && m_bmp.IsSameAs(other.m_bmp); + } + + bool operator==(const DataViewBitmapText& other) const { + return IsSameAs(other); + } + + bool operator!=(const DataViewBitmapText& other) const { + return !IsSameAs(other); + } + +private: + wxString m_text; + wxBitmap m_bmp; + + wxDECLARE_DYNAMIC_CLASS(DataViewBitmapText); +}; +DECLARE_VARIANT_OBJECT(DataViewBitmapText) + +// ---------------------------------------------------------------------------- +// BitmapTextRenderer +// ---------------------------------------------------------------------------- +#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING +class BitmapTextRenderer : public wxDataViewRenderer +#else +class BitmapTextRenderer : public wxDataViewCustomRenderer +#endif //ENABLE_NONCUSTOM_DATA_VIEW_RENDERING +{ +public: + BitmapTextRenderer(bool use_markup = false, + wxDataViewCellMode mode = +#ifdef __WXOSX__ + wxDATAVIEW_CELL_INERT +#else + wxDATAVIEW_CELL_EDITABLE +#endif + + , int align = wxDVR_DEFAULT_ALIGNMENT +#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING + ); +#else + ) : + wxDataViewCustomRenderer(wxT("DataViewBitmapText"), mode, align) + { + EnableMarkup(use_markup); + } +#endif //ENABLE_NONCUSTOM_DATA_VIEW_RENDERING + + ~BitmapTextRenderer(); + + void EnableMarkup(bool enable = true); + + bool SetValue(const wxVariant& value) override; + bool GetValue(wxVariant& value) const override; +#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING && wxUSE_ACCESSIBILITY + virtual wxString GetAccessibleDescription() const override; +#endif // wxUSE_ACCESSIBILITY && ENABLE_NONCUSTOM_DATA_VIEW_RENDERING + + virtual bool Render(wxRect cell, wxDC* dc, int state) override; + virtual wxSize GetSize() const override; + + bool HasEditorCtrl() const override + { +#ifdef __WXOSX__ + return false; +#else + return true; +#endif + } + wxWindow* CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) override; + bool GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) override; + bool WasCanceled() const { return m_was_unusable_symbol; } + + void set_can_create_editor_ctrl_function(std::function can_create_fn) { can_create_editor_ctrl = can_create_fn; } + +private: + DataViewBitmapText m_value; + bool m_was_unusable_symbol{ false }; + + std::function can_create_editor_ctrl { nullptr }; + +#ifdef SUPPORTS_MARKUP + #ifdef wxHAS_GENERIC_DATAVIEWCTRL + class wxItemMarkupText* m_markupText { nullptr };; + #else + bool is_markupText {false}; + #endif +#endif // SUPPORTS_MARKUP +}; + + +// ---------------------------------------------------------------------------- +// BitmapChoiceRenderer +// ---------------------------------------------------------------------------- + +class BitmapChoiceRenderer : public wxDataViewCustomRenderer +{ +public: + BitmapChoiceRenderer(wxDataViewCellMode mode = +#ifdef __WXOSX__ + wxDATAVIEW_CELL_INERT +#else + wxDATAVIEW_CELL_EDITABLE +#endif + , int align = wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL + ) : wxDataViewCustomRenderer(wxT("DataViewBitmapText"), mode, align) {} + + bool SetValue(const wxVariant& value) override; + bool GetValue(wxVariant& value) const override; + + virtual bool Render(wxRect cell, wxDC* dc, int state) override; + virtual wxSize GetSize() const override; + + bool HasEditorCtrl() const override { return true; } + wxWindow* CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) override; + bool GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) override; + + void set_can_create_editor_ctrl_function(std::function can_create_fn) { can_create_editor_ctrl = can_create_fn; } + +private: + DataViewBitmapText m_value; + std::function can_create_editor_ctrl { nullptr }; +}; + + +#endif // slic3r_GUI_ExtraRenderers_hpp_ diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 3a06c3056e..95fd13577b 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -51,6 +51,20 @@ wxString double_to_string(double const value, const int max_precision /*= 4*/) return s; } +Field::~Field() +{ + if (m_on_kill_focus) + m_on_kill_focus = nullptr; + if (m_on_set_focus) + m_on_set_focus = nullptr; + if (m_on_change) + m_on_change = nullptr; + if (m_back_to_initial_value) + m_back_to_initial_value = nullptr; + if (m_back_to_sys_value) + m_back_to_sys_value = nullptr; +} + void Field::PostInitialize() { auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); @@ -295,6 +309,7 @@ void Field::msw_rescale(bool rescale_sidetext) { m_Undo_to_sys_btn->msw_rescale(); m_Undo_btn->msw_rescale(); + m_blinking_bmp->msw_rescale(); // update em_unit value m_em_unit = em_unit(m_parent); @@ -317,7 +332,7 @@ void Field::sys_color_changed() template bool is_defined_input_value(wxWindow* win, const ConfigOptionType& type) { - if (static_cast(win)->GetValue().empty() && type != coString && type != coStrings) + if (!win || (static_cast(win)->GetValue().empty() && type != coString && type != coStrings)) return false; return true; } @@ -372,7 +387,9 @@ void TextCtrl::BUILD() { const long style = m_opt.multiline ? wxTE_MULTILINE : wxTE_PROCESS_ENTER/*0*/; auto temp = new wxTextCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, style); - temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + temp->SetFont(m_opt.is_code ? + Slic3r::GUI::wxGetApp().code_font(): + Slic3r::GUI::wxGetApp().normal_font()); if (! m_opt.multiline && !wxOSX) // Only disable background refresh for single line input fields, as they are completely painted over by the edit control. @@ -1069,6 +1086,8 @@ boost::any& Choice::get_value() m_value = static_cast(ret_enum); else if (m_opt_id.compare("gcode_flavor") == 0) m_value = static_cast(ret_enum); + else if (m_opt_id.compare("machine_limits_usage") == 0) + m_value = static_cast(ret_enum); else if (m_opt_id.compare("support_material_pattern") == 0) m_value = static_cast(ret_enum); else if (m_opt_id.compare("seam_position") == 0) @@ -1079,6 +1098,8 @@ boost::any& Choice::get_value() m_value = static_cast(ret_enum); else if (m_opt_id.compare("support_pillar_connection_mode") == 0) m_value = static_cast(ret_enum); + else if (m_opt_id == "printhost_authorization_type") + m_value = static_cast(ret_enum); } else if (m_opt.gui_type == "f_enum_open") { const int ret_enum = field->GetSelection(); @@ -1101,8 +1122,7 @@ void Choice::msw_rescale(bool rescale_sidetext/* = false*/) Field::msw_rescale(); wxBitmapComboBox* field = dynamic_cast(window); - - const wxString selection = field->GetString(field->GetSelection()); + const wxString selection = field->GetValue();// field->GetString(index); /* To correct scaling (set new controll size) of a wxBitmapCombobox * we need to refill control with new bitmaps. So, in our case : diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 484b2059f0..d919304a92 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -145,12 +145,14 @@ public: Field(const ConfigOptionDef& opt, const t_config_option_key& id) : m_opt(opt), m_opt_id(id) {}; Field(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : m_parent(parent), m_opt(opt), m_opt_id(id) {}; - virtual ~Field() {} + virtual ~Field(); /// If you don't know what you are getting back, check both methods for nullptr. virtual wxSizer* getSizer() { return nullptr; } virtual wxWindow* getWindow() { return nullptr; } + wxStaticText* getLabel() { return m_Label; } + bool is_matched(const std::string& string, const std::string& pattern); void get_value_by_opt_type(wxString& str, const bool check_value = true); diff --git a/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp index fe7ff4e5de..879e7fe34e 100644 --- a/src/slic3r/GUI/FirmwareDialog.cpp +++ b/src/slic3r/GUI/FirmwareDialog.cpp @@ -766,7 +766,7 @@ const char* FirmwareDialog::priv::avr109_dev_name(Avr109Pid usb_pid) { return "Original Prusa CW1"; break; - default: throw std::runtime_error((boost::format("Invalid avr109 device USB PID: %1%") % usb_pid.boot).str()); + default: throw Slic3r::RuntimeError((boost::format("Invalid avr109 device USB PID: %1%") % usb_pid.boot).str()); } } @@ -790,7 +790,7 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) : SetFont(font); wxFont status_font = font;//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); status_font.MakeBold(); - wxFont mono_font(wxFontInfo().Family(wxFONTFAMILY_TELETYPE)); + wxFont mono_font = GUI::wxGetApp().code_font(); mono_font.MakeSmaller(); // Create GUI components and layout diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp new file mode 100644 index 0000000000..679a30e72d --- /dev/null +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -0,0 +1,2717 @@ +#include "libslic3r/libslic3r.h" +#include "GCodeViewer.hpp" + +#if ENABLE_GCODE_VIEWER +#include "libslic3r/Print.hpp" +#include "libslic3r/Geometry.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/Utils.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "Plater.hpp" +#include "libslic3r/PresetBundle.hpp" +#include "Camera.hpp" +#include "I18N.hpp" +#include "GUI_Utils.hpp" +#include "GUI.hpp" +#include "DoubleSlider.hpp" +#include "GLCanvas3D.hpp" +#include "GLToolbar.hpp" +#include "GUI_Preview.hpp" +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +static unsigned char buffer_id(EMoveType type) { + return static_cast(type) - static_cast(EMoveType::Retract); +} + +static EMoveType buffer_type(unsigned char id) { + return static_cast(static_cast(EMoveType::Retract) + id); +} + +static std::array decode_color(const std::string& color) { + static const float INV_255 = 1.0f / 255.0f; + + std::array ret = { 0.0f, 0.0f, 0.0f }; + const char* c = color.data() + 1; + if (color.size() == 7 && color.front() == '#') { + for (size_t j = 0; j < 3; ++j) { + int digit1 = hex_digit_to_int(*c++); + int digit2 = hex_digit_to_int(*c++); + if (digit1 == -1 || digit2 == -1) + break; + + ret[j] = float(digit1 * 16 + digit2) * INV_255; + } + } + return ret; +} + +static std::vector> decode_colors(const std::vector& colors) { + std::vector> output(colors.size(), { 0.0f, 0.0f, 0.0f }); + for (size_t i = 0; i < colors.size(); ++i) { + output[i] = decode_color(colors[i]); + } + return output; +} + +static float round_to_nearest(float value, unsigned int decimals) +{ + float res = 0.0f; + if (decimals == 0) + res = std::round(value); + else { + char buf[64]; + sprintf(buf, "%.*g", decimals, value); + res = std::stof(buf); + } + return res; +} + +void GCodeViewer::VBuffer::reset() +{ + // release gpu memory + if (id > 0) { + glsafe(::glDeleteBuffers(1, &id)); + id = 0; + } + + count = 0; +} + +void GCodeViewer::IBuffer::reset() +{ + // release gpu memory + if (id > 0) { + glsafe(::glDeleteBuffers(1, &id)); + id = 0; + } + + count = 0; +} + +bool GCodeViewer::Path::matches(const GCodeProcessor::MoveVertex& move) const +{ + switch (move.type) + { + case EMoveType::Tool_change: + case EMoveType::Color_change: + case EMoveType::Pause_Print: + case EMoveType::Custom_GCode: + case EMoveType::Retract: + case EMoveType::Unretract: + case EMoveType::Extrude: + { + // use rounding to reduce the number of generated paths + return type == move.type && role == move.extrusion_role && height == round_to_nearest(move.height, 2) && + width == round_to_nearest(move.width, 2) && feedrate == move.feedrate && fan_speed == move.fan_speed && + volumetric_rate == round_to_nearest(move.volumetric_rate(), 2) && extruder_id == move.extruder_id && + cp_color_id == move.cp_color_id; + } + case EMoveType::Travel: + { + return type == move.type && feedrate == move.feedrate && extruder_id == move.extruder_id && cp_color_id == move.cp_color_id; + } + default: { return false; } + } +} + +void GCodeViewer::TBuffer::reset() +{ + // release gpu memory + vertices.reset(); + for (IBuffer& buffer : indices) { + buffer.reset(); + } + + // release cpu memory + indices = std::vector(); + paths = std::vector(); + render_paths = std::vector(); +} + +void GCodeViewer::TBuffer::add_path(const GCodeProcessor::MoveVertex& move, unsigned int b_id, size_t i_id, size_t s_id) +{ + Path::Endpoint endpoint = { b_id, i_id, s_id, move.position }; + // use rounding to reduce the number of generated paths + paths.push_back({ move.type, move.extrusion_role, endpoint, endpoint, move.delta_extruder, + round_to_nearest(move.height, 2), round_to_nearest(move.width, 2), move.feedrate, move.fan_speed, + round_to_nearest(move.volumetric_rate(), 2), move.extruder_id, move.cp_color_id }); +} + +GCodeViewer::Color GCodeViewer::Extrusions::Range::get_color_at(float value) const +{ + // Input value scaled to the colors range + const float step = step_size(); + const float global_t = (step != 0.0f) ? std::max(0.0f, value - min) / step : 0.0f; // lower limit of 0.0f + + const size_t color_max_idx = Range_Colors.size() - 1; + + // Compute the two colors just below (low) and above (high) the input value + const size_t color_low_idx = std::clamp(static_cast(global_t), 0, color_max_idx); + const size_t color_high_idx = std::clamp(color_low_idx + 1, 0, color_max_idx); + + // Compute how far the value is between the low and high colors so that they can be interpolated + const float local_t = std::clamp(global_t - static_cast(color_low_idx), 0.0f, 1.0f); + + // Interpolate between the low and high colors to find exactly which color the input value should get + Color ret; + for (unsigned int i = 0; i < 3; ++i) { + ret[i] = lerp(Range_Colors[color_low_idx][i], Range_Colors[color_high_idx][i], local_t); + } + return ret; +} + +void GCodeViewer::SequentialView::Marker::init() +{ + m_model.init_from(stilized_arrow(16, 2.0f, 4.0f, 1.0f, 8.0f)); +} + +void GCodeViewer::SequentialView::Marker::set_world_position(const Vec3f& position) +{ + m_world_position = position; + m_world_transform = (Geometry::assemble_transform((position + m_z_offset * Vec3f::UnitZ()).cast()) * Geometry::assemble_transform(m_model.get_bounding_box().size()[2] * Vec3d::UnitZ(), { M_PI, 0.0, 0.0 })).cast(); +} + +void GCodeViewer::SequentialView::Marker::render() const +{ + if (!m_visible) + return; + + GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); + if (shader == nullptr) + return; + + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + + shader->start_using(); + shader->set_uniform("uniform_color", m_color); + + glsafe(::glPushMatrix()); + glsafe(::glMultMatrixf(m_world_transform.data())); + + m_model.render(); + + glsafe(::glPopMatrix()); + + shader->stop_using(); + + glsafe(::glDisable(GL_BLEND)); + + static float last_window_width = 0.0f; + static size_t last_text_length = 0; + + ImGuiWrapper& imgui = *wxGetApp().imgui(); + Size cnv_size = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size(); + imgui.set_next_window_pos(0.5f * static_cast(cnv_size.get_width()), static_cast(cnv_size.get_height()), ImGuiCond_Always, 0.5f, 1.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGui::SetNextWindowBgAlpha(0.25f); + imgui.begin(std::string("ToolPosition"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _u8L("Tool position") + ":"); + ImGui::SameLine(); + char buf[1024]; + sprintf(buf, "X: %.2f, Y: %.2f, Z: %.2f", m_world_position(0), m_world_position(1), m_world_position(2)); + imgui.text(std::string(buf)); + + // force extra frame to automatically update window size + float width = ImGui::GetWindowWidth(); + size_t length = strlen(buf); + if (width != last_window_width || length != last_text_length) { + last_window_width = width; + last_text_length = length; + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + + imgui.end(); + ImGui::PopStyleVar(); +} + +const std::vector GCodeViewer::Extrusion_Role_Colors {{ + { 0.75f, 0.75f, 0.75f }, // erNone + { 1.00f, 0.90f, 0.30f }, // erPerimeter + { 1.00f, 0.49f, 0.22f }, // erExternalPerimeter + { 0.12f, 0.12f, 1.00f }, // erOverhangPerimeter + { 0.69f, 0.19f, 0.16f }, // erInternalInfill + { 0.59f, 0.33f, 0.80f }, // erSolidInfill + { 0.94f, 0.25f, 0.25f }, // erTopSolidInfill + { 1.00f, 0.55f, 0.41f }, // erIroning + { 0.30f, 0.50f, 0.73f }, // erBridgeInfill + { 1.00f, 1.00f, 1.00f }, // erGapFill + { 0.00f, 0.53f, 0.43f }, // erSkirt + { 0.00f, 1.00f, 0.00f }, // erSupportMaterial + { 0.00f, 0.50f, 0.00f }, // erSupportMaterialInterface + { 0.70f, 0.89f, 0.67f }, // erWipeTower + { 0.37f, 0.82f, 0.58f }, // erCustom + { 0.00f, 0.00f, 0.00f } // erMixed +}}; + +const std::vector GCodeViewer::Options_Colors {{ + { 0.803f, 0.135f, 0.839f }, // Retractions + { 0.287f, 0.679f, 0.810f }, // Unretractions + { 0.758f, 0.744f, 0.389f }, // ToolChanges + { 0.856f, 0.582f, 0.546f }, // ColorChanges + { 0.322f, 0.942f, 0.512f }, // PausePrints + { 0.886f, 0.825f, 0.262f } // CustomGCodes +}}; + +const std::vector GCodeViewer::Travel_Colors {{ + { 0.219f, 0.282f, 0.609f }, // Move + { 0.112f, 0.422f, 0.103f }, // Extrude + { 0.505f, 0.064f, 0.028f } // Retract +}}; + +const std::vector GCodeViewer::Range_Colors {{ + { 0.043f, 0.173f, 0.478f }, // bluish + { 0.075f, 0.349f, 0.522f }, + { 0.110f, 0.533f, 0.569f }, + { 0.016f, 0.839f, 0.059f }, + { 0.667f, 0.949f, 0.000f }, + { 0.988f, 0.975f, 0.012f }, + { 0.961f, 0.808f, 0.039f }, + { 0.890f, 0.533f, 0.125f }, + { 0.820f, 0.408f, 0.188f }, + { 0.761f, 0.322f, 0.235f }, + { 0.581f, 0.149f, 0.087f } // reddish +}}; + +void GCodeViewer::load(const GCodeProcessor::Result& gcode_result, const Print& print, bool initialized) +{ + init(); + + // avoid processing if called with the same gcode_result + if (m_last_result_id == gcode_result.id) + return; + + m_last_result_id = gcode_result.id; + + // release gpu memory, if used + reset(); + + load_toolpaths(gcode_result); + if (wxGetApp().is_editor()) + load_shells(print, initialized); + else { + Pointfs bed_shape; + std::string texture; + std::string model; + + if (!gcode_result.bed_shape.empty()) { + // bed shape detected in the gcode + bed_shape = gcode_result.bed_shape; + auto bundle = wxGetApp().preset_bundle; + if (bundle != nullptr && !gcode_result.printer_settings_id.empty()) { + const Preset* preset = bundle->printers.find_preset(gcode_result.printer_settings_id); + if (preset != nullptr) { + model = PresetUtils::system_printer_bed_model(*preset); + texture = PresetUtils::system_printer_bed_texture(*preset); + } + } + } + else { + // adjust printbed size in dependence of toolpaths bbox + const double margin = 10.0; + Vec2d min(m_paths_bounding_box.min(0) - margin, m_paths_bounding_box.min(1) - margin); + Vec2d max(m_paths_bounding_box.max(0) + margin, m_paths_bounding_box.max(1) + margin); + + Vec2d size = max - min; + bed_shape = { + { min(0), min(1) }, + { max(0), min(1) }, + { max(0), min(1) + 0.442265 * size[1]}, + { max(0) - 10.0, min(1) + 0.4711325 * size[1]}, + { max(0) + 10.0, min(1) + 0.5288675 * size[1]}, + { max(0), min(1) + 0.557735 * size[1]}, + { max(0), max(1) }, + { min(0) + 0.557735 * size[0], max(1)}, + { min(0) + 0.5288675 * size[0], max(1) - 10.0}, + { min(0) + 0.4711325 * size[0], max(1) + 10.0}, + { min(0) + 0.442265 * size[0], max(1)}, + { min(0), max(1) } }; + } + + wxGetApp().plater()->set_bed_shape(bed_shape, texture, model, gcode_result.bed_shape.empty()); + } + + m_time_statistics = gcode_result.time_statistics; +} + +void GCodeViewer::refresh(const GCodeProcessor::Result& gcode_result, const std::vector& str_tool_colors) +{ +#if ENABLE_GCODE_VIEWER_STATISTICS + auto start_time = std::chrono::high_resolution_clock::now(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + if (m_moves_count == 0) + return; + + wxBusyCursor busy; + + if (m_view_type == EViewType::Tool && !gcode_result.extruder_colors.empty()) + // update tool colors from config stored in the gcode + m_tool_colors = decode_colors(gcode_result.extruder_colors); + else + // update tool colors + m_tool_colors = decode_colors(str_tool_colors); + + // update ranges for coloring / legend + m_extrusions.reset_ranges(); + for (size_t i = 0; i < m_moves_count; ++i) { + // skip first vertex + if (i == 0) + continue; + + const GCodeProcessor::MoveVertex& curr = gcode_result.moves[i]; + + switch (curr.type) + { + case EMoveType::Extrude: + { + m_extrusions.ranges.height.update_from(round_to_nearest(curr.height, 2)); + m_extrusions.ranges.width.update_from(round_to_nearest(curr.width, 2)); + m_extrusions.ranges.fan_speed.update_from(curr.fan_speed); + m_extrusions.ranges.volumetric_rate.update_from(round_to_nearest(curr.volumetric_rate(), 2)); + [[fallthrough]]; + } + case EMoveType::Travel: + { + if (m_buffers[buffer_id(curr.type)].visible) + m_extrusions.ranges.feedrate.update_from(curr.feedrate); + + break; + } + default: { break; } + } + } + +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.refresh_time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start_time).count(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + // update buffers' render paths + refresh_render_paths(false, false); + + log_memory_used("Refreshed G-code extrusion paths, "); +} + +void GCodeViewer::reset() +{ + m_moves_count = 0; + for (TBuffer& buffer : m_buffers) { + buffer.reset(); + } + + m_paths_bounding_box = BoundingBoxf3(); + m_max_bounding_box = BoundingBoxf3(); + m_tool_colors = std::vector(); + m_extruder_ids = std::vector(); + m_extrusions.reset_role_visibility_flags(); + m_extrusions.reset_ranges(); + m_shells.volumes.clear(); + m_layers_zs = std::vector(); + m_layers_z_range = { 0.0, 0.0 }; + m_roles = std::vector(); + m_time_statistics.reset(); + m_time_estimate_mode = PrintEstimatedTimeStatistics::ETimeMode::Normal; + +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.reset_all(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS +} + +void GCodeViewer::render() const +{ + auto init_gl_data = [this]() { + static bool first_run = true; + if (first_run) { + m_sequential_view.marker.init(); + + std::array point_sizes; + ::glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_sizes.data()); + m_detected_point_sizes = { static_cast(point_sizes[0]), static_cast(point_sizes[1]) }; + first_run = false; + } + }; + +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.reset_opengl(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + // OpenGL data must be initialized after the glContext has been created. + // This is ensured when this method is called by GLCanvas3D::_render_gcode(). + init_gl_data(); + + if (m_roles.empty()) + return; + + glsafe(::glEnable(GL_DEPTH_TEST)); + render_toolpaths(); + m_sequential_view.marker.set_world_position(m_sequential_view.current_position); + m_sequential_view.marker.render(); + render_shells(); + render_legend(); +#if ENABLE_GCODE_VIEWER_STATISTICS + render_statistics(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS +} + +void GCodeViewer::update_sequential_view_current(unsigned int first, unsigned int last) +{ + auto is_visible = [this](unsigned int id) { + for (const TBuffer& buffer : m_buffers) { + if (buffer.visible) { + for (const Path& path : buffer.paths) { + if (path.first.s_id <= id && id <= path.last.s_id) + return true; + } + } + } + return false; + }; + + int first_diff = static_cast(first) - static_cast(m_sequential_view.last_current.first); + int last_diff = static_cast(last) - static_cast(m_sequential_view.last_current.last); + + unsigned int new_first = first; + unsigned int new_last = last; + + if (m_sequential_view.skip_invisible_moves) { + while (!is_visible(new_first)) { + if (first_diff > 0) + ++new_first; + else + --new_first; + } + + while (!is_visible(new_last)) { + if (last_diff > 0) + ++new_last; + else + --new_last; + } + } + + m_sequential_view.current.first = new_first; + m_sequential_view.current.last = new_last; + m_sequential_view.last_current = m_sequential_view.current; + + refresh_render_paths(true, true); + + if (new_first != first || new_last != last) + wxGetApp().plater()->update_preview_moves_slider(); +} + +bool GCodeViewer::is_toolpath_move_type_visible(EMoveType type) const +{ + size_t id = static_cast(buffer_id(type)); + return (id < m_buffers.size()) ? m_buffers[id].visible : false; +} + +void GCodeViewer::set_toolpath_move_type_visible(EMoveType type, bool visible) +{ + size_t id = static_cast(buffer_id(type)); + if (id < m_buffers.size()) + m_buffers[id].visible = visible; +} + +unsigned int GCodeViewer::get_options_visibility_flags() const +{ + auto set_flag = [](unsigned int flags, unsigned int flag, bool active) { + return active ? (flags | (1 << flag)) : flags; + }; + + unsigned int flags = 0; + flags = set_flag(flags, static_cast(Preview::OptionType::Travel), is_toolpath_move_type_visible(EMoveType::Travel)); + flags = set_flag(flags, static_cast(Preview::OptionType::Retractions), is_toolpath_move_type_visible(EMoveType::Retract)); + flags = set_flag(flags, static_cast(Preview::OptionType::Unretractions), is_toolpath_move_type_visible(EMoveType::Unretract)); + flags = set_flag(flags, static_cast(Preview::OptionType::ToolChanges), is_toolpath_move_type_visible(EMoveType::Tool_change)); + flags = set_flag(flags, static_cast(Preview::OptionType::ColorChanges), is_toolpath_move_type_visible(EMoveType::Color_change)); + flags = set_flag(flags, static_cast(Preview::OptionType::PausePrints), is_toolpath_move_type_visible(EMoveType::Pause_Print)); + flags = set_flag(flags, static_cast(Preview::OptionType::CustomGCodes), is_toolpath_move_type_visible(EMoveType::Custom_GCode)); + flags = set_flag(flags, static_cast(Preview::OptionType::Shells), m_shells.visible); + flags = set_flag(flags, static_cast(Preview::OptionType::ToolMarker), m_sequential_view.marker.is_visible()); + flags = set_flag(flags, static_cast(Preview::OptionType::Legend), is_legend_enabled()); + return flags; +} + +void GCodeViewer::set_options_visibility_from_flags(unsigned int flags) +{ + auto is_flag_set = [flags](unsigned int flag) { + return (flags & (1 << flag)) != 0; + }; + + set_toolpath_move_type_visible(EMoveType::Travel, is_flag_set(static_cast(Preview::OptionType::Travel))); + set_toolpath_move_type_visible(EMoveType::Retract, is_flag_set(static_cast(Preview::OptionType::Retractions))); + set_toolpath_move_type_visible(EMoveType::Unretract, is_flag_set(static_cast(Preview::OptionType::Unretractions))); + set_toolpath_move_type_visible(EMoveType::Tool_change, is_flag_set(static_cast(Preview::OptionType::ToolChanges))); + set_toolpath_move_type_visible(EMoveType::Color_change, is_flag_set(static_cast(Preview::OptionType::ColorChanges))); + set_toolpath_move_type_visible(EMoveType::Pause_Print, is_flag_set(static_cast(Preview::OptionType::PausePrints))); + set_toolpath_move_type_visible(EMoveType::Custom_GCode, is_flag_set(static_cast(Preview::OptionType::CustomGCodes))); + m_shells.visible = is_flag_set(static_cast(Preview::OptionType::Shells)); + m_sequential_view.marker.set_visible(is_flag_set(static_cast(Preview::OptionType::ToolMarker))); + enable_legend(is_flag_set(static_cast(Preview::OptionType::Legend))); +} + +void GCodeViewer::set_layers_z_range(const std::array& layers_z_range) +{ + bool keep_sequential_current_first = layers_z_range[0] >= m_layers_z_range[0]; + bool keep_sequential_current_last = layers_z_range[1] <= m_layers_z_range[1]; + m_layers_z_range = layers_z_range; + refresh_render_paths(keep_sequential_current_first, keep_sequential_current_last); + wxGetApp().plater()->update_preview_moves_slider(); +} + +void GCodeViewer::export_toolpaths_to_obj(const char* filename) const +{ + if (filename == nullptr) + return; + + if (!has_data()) + return; + + wxBusyCursor busy; + + // the data needed is contained into the Extrude TBuffer + const TBuffer& buffer = m_buffers[buffer_id(EMoveType::Extrude)]; + if (!buffer.has_data()) + return; + + // collect color information to generate materials + std::vector colors; + for (const RenderPath& path : buffer.render_paths) { + colors.push_back(path.color); + } + + // save materials file + boost::filesystem::path mat_filename(filename); + mat_filename.replace_extension("mtl"); + FILE* fp = boost::nowide::fopen(mat_filename.string().c_str(), "w"); + if (fp == nullptr) { + BOOST_LOG_TRIVIAL(error) << "GCodeViewer::export_toolpaths_to_obj: Couldn't open " << mat_filename.string().c_str() << " for writing"; + return; + } + + fprintf(fp, "# G-Code Toolpaths Materials\n"); + fprintf(fp, "# Generated by %s based on Slic3r\n", SLIC3R_BUILD_ID); + + unsigned int colors_count = 1; + for (const Color& color : colors) { + fprintf(fp, "\nnewmtl material_%d\n", colors_count++); + fprintf(fp, "Ka 1 1 1\n"); + fprintf(fp, "Kd %f %f %f\n", color[0], color[1], color[2]); + fprintf(fp, "Ks 0 0 0\n"); + } + + fclose(fp); + + // save geometry file + fp = boost::nowide::fopen(filename, "w"); + if (fp == nullptr) { + BOOST_LOG_TRIVIAL(error) << "GCodeViewer::export_toolpaths_to_obj: Couldn't open " << filename << " for writing"; + return; + } + + fprintf(fp, "# G-Code Toolpaths\n"); + fprintf(fp, "# Generated by %s based on Slic3r\n", SLIC3R_BUILD_ID); + fprintf(fp, "\nmtllib ./%s\n", mat_filename.filename().string().c_str()); + + // get vertices data from vertex buffer on gpu + size_t floats_per_vertex = buffer.vertices.vertex_size_floats(); + std::vector vertices = std::vector(buffer.vertices.count * floats_per_vertex); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, buffer.vertices.id)); + glsafe(::glGetBufferSubData(GL_ARRAY_BUFFER, 0, buffer.vertices.data_size_bytes(), vertices.data())); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + + // get indices data from index buffer on gpu + MultiIndexBuffer indices; + for (size_t i = 0; i < buffer.indices.size(); ++i) { + indices.push_back(IndexBuffer(buffer.indices[i].count)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer.indices[i].id)); + glsafe(::glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, static_cast(indices.back().size() * sizeof(unsigned int)), indices.back().data())); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + } + + auto get_vertex = [&vertices, floats_per_vertex](unsigned int id) { + // extract vertex from vector of floats + unsigned int base_id = id * floats_per_vertex; + return Vec3f(vertices[base_id + 0], vertices[base_id + 1], vertices[base_id + 2]); + }; + + struct Segment + { + Vec3f v1; + Vec3f v2; + Vec3f dir; + Vec3f right; + Vec3f up; + Vec3f rl_displacement; + Vec3f tb_displacement; + float length; + }; + + auto generate_segment = [get_vertex](unsigned int start_id, unsigned int end_id, float half_width, float half_height) { + auto local_basis = [](const Vec3f& dir) { + // calculate local basis (dir, right, up) on given segment + std::array ret; + ret[0] = dir.normalized(); + if (std::abs(ret[0][2]) < EPSILON) { + // segment parallel to XY plane + ret[1] = { ret[0][1], -ret[0][0], 0.0f }; + ret[2] = Vec3f::UnitZ(); + } + else if (std::abs(std::abs(ret[0].dot(Vec3f::UnitZ())) - 1.0f) < EPSILON) { + // segment parallel to Z axis + ret[1] = Vec3f::UnitX(); + ret[2] = Vec3f::UnitY(); + } + else { + ret[0] = dir.normalized(); + ret[1] = ret[0].cross(Vec3f::UnitZ()).normalized(); + ret[2] = ret[1].cross(ret[0]); + } + return ret; + }; + + Vec3f v1 = get_vertex(start_id) - half_height * Vec3f::UnitZ(); + Vec3f v2 = get_vertex(end_id) - half_height * Vec3f::UnitZ(); + float length = (v2 - v1).norm(); + const auto&& [dir, right, up] = local_basis(v2 - v1); + return Segment({ v1, v2, dir, right, up, half_width * right, half_height * up, length }); + }; + + size_t out_vertices_count = 0; + unsigned int indices_per_segment = buffer.indices_per_segment(); + unsigned int start_vertex_offset = buffer.start_segment_vertex_offset(); + unsigned int end_vertex_offset = buffer.end_segment_vertex_offset(); + + for (size_t i = 0; i < buffer.render_paths.size(); ++i) { + // get paths segments from buffer paths + const RenderPath& render_path = buffer.render_paths[i]; + const IndexBuffer& ibuffer = indices[render_path.index_buffer_id]; + const Path& path = buffer.paths[render_path.path_id]; + float half_width = 0.5f * path.width; + // clamp height to avoid artifacts due to z-fighting when importing the obj file into blender and similar + float half_height = std::max(0.5f * path.height, 0.005f); + + // generates vertices/normals/triangles + std::vector out_vertices; + std::vector out_normals; + using Triangle = std::array; + std::vector out_triangles; + for (size_t j = 0; j < render_path.offsets.size(); ++j) { + unsigned int start = static_cast(render_path.offsets[j] / sizeof(unsigned int)); + unsigned int end = start + render_path.sizes[j]; + + for (size_t k = start; k < end; k += static_cast(indices_per_segment)) { + Segment curr = generate_segment(ibuffer[k + start_vertex_offset], ibuffer[k + end_vertex_offset], half_width, half_height); + if (k == start) { + // starting endpoint vertices/normals + out_vertices.push_back(curr.v1 + curr.rl_displacement); out_normals.push_back(curr.right); // right + out_vertices.push_back(curr.v1 + curr.tb_displacement); out_normals.push_back(curr.up); // top + out_vertices.push_back(curr.v1 - curr.rl_displacement); out_normals.push_back(-curr.right); // left + out_vertices.push_back(curr.v1 - curr.tb_displacement); out_normals.push_back(-curr.up); // bottom + out_vertices_count += 4; + + // starting cap triangles + size_t base_id = out_vertices_count - 4 + 1; + out_triangles.push_back({ base_id + 0, base_id + 1, base_id + 2 }); + out_triangles.push_back({ base_id + 0, base_id + 2, base_id + 3 }); + } + else { + // for the endpoint shared by the current and the previous segments + // we keep the top and bottom vertices of the previous vertices + // and add new left/right vertices for the current segment + out_vertices.push_back(curr.v1 + curr.rl_displacement); out_normals.push_back(curr.right); // right + out_vertices.push_back(curr.v1 - curr.rl_displacement); out_normals.push_back(-curr.right); // left + out_vertices_count += 2; + + size_t first_vertex_id = k - static_cast(indices_per_segment); + Segment prev = generate_segment(ibuffer[first_vertex_id + start_vertex_offset], ibuffer[first_vertex_id + end_vertex_offset], half_width, half_height); + float disp = 0.0f; + float cos_dir = prev.dir.dot(curr.dir); + if (cos_dir > -0.9998477f) { + // if the angle between adjacent segments is smaller than 179 degrees + Vec3f med_dir = (prev.dir + curr.dir).normalized(); + disp = half_width * ::tan(::acos(std::clamp(curr.dir.dot(med_dir), -1.0f, 1.0f))); + } + + Vec3f disp_vec = disp * prev.dir; + + bool is_right_turn = prev.up.dot(prev.dir.cross(curr.dir)) <= 0.0f; + if (cos_dir < 0.7071068f) { + // if the angle between two consecutive segments is greater than 45 degrees + // we add a cap in the outside corner + // and displace the vertices in the inside corner to the same position, if possible + if (is_right_turn) { + // corner cap triangles (left) + size_t base_id = out_vertices_count - 6 + 1; + out_triangles.push_back({ base_id + 5, base_id + 2, base_id + 1 }); + out_triangles.push_back({ base_id + 5, base_id + 3, base_id + 2 }); + + // update right vertices + if (disp > 0.0f && disp < prev.length && disp < curr.length) { + base_id = out_vertices.size() - 6; + out_vertices[base_id + 0] -= disp_vec; + out_vertices[base_id + 4] = out_vertices[base_id + 0]; + } + } + else { + // corner cap triangles (right) + size_t base_id = out_vertices_count - 6 + 1; + out_triangles.push_back({ base_id + 0, base_id + 4, base_id + 1 }); + out_triangles.push_back({ base_id + 0, base_id + 3, base_id + 4 }); + + // update left vertices + if (disp > 0.0f && disp < prev.length && disp < curr.length) { + base_id = out_vertices.size() - 6; + out_vertices[base_id + 2] -= disp_vec; + out_vertices[base_id + 5] = out_vertices[base_id + 2]; + } + } + } + else { + // if the angle between two consecutive segments is lesser than 45 degrees + // displace the vertices to the same position + if (is_right_turn) { + size_t base_id = out_vertices.size() - 6; + // right + out_vertices[base_id + 0] -= disp_vec; + out_vertices[base_id + 4] = out_vertices[base_id + 0]; + // left + out_vertices[base_id + 2] += disp_vec; + out_vertices[base_id + 5] = out_vertices[base_id + 2]; + } + else { + size_t base_id = out_vertices.size() - 6; + // right + out_vertices[base_id + 0] += disp_vec; + out_vertices[base_id + 4] = out_vertices[base_id + 0]; + // left + out_vertices[base_id + 2] -= disp_vec; + out_vertices[base_id + 5] = out_vertices[base_id + 2]; + } + } + } + + // current second endpoint vertices/normals + out_vertices.push_back(curr.v2 + curr.rl_displacement); out_normals.push_back(curr.right); // right + out_vertices.push_back(curr.v2 + curr.tb_displacement); out_normals.push_back(curr.up); // top + out_vertices.push_back(curr.v2 - curr.rl_displacement); out_normals.push_back(-curr.right); // left + out_vertices.push_back(curr.v2 - curr.tb_displacement); out_normals.push_back(-curr.up); // bottom + out_vertices_count += 4; + + // sides triangles + if (k == start) { + size_t base_id = out_vertices_count - 8 + 1; + out_triangles.push_back({ base_id + 0, base_id + 4, base_id + 5 }); + out_triangles.push_back({ base_id + 0, base_id + 5, base_id + 1 }); + out_triangles.push_back({ base_id + 1, base_id + 5, base_id + 6 }); + out_triangles.push_back({ base_id + 1, base_id + 6, base_id + 2 }); + out_triangles.push_back({ base_id + 2, base_id + 6, base_id + 7 }); + out_triangles.push_back({ base_id + 2, base_id + 7, base_id + 3 }); + out_triangles.push_back({ base_id + 3, base_id + 7, base_id + 4 }); + out_triangles.push_back({ base_id + 3, base_id + 4, base_id + 0 }); + } + else { + size_t base_id = out_vertices_count - 10 + 1; + out_triangles.push_back({ base_id + 4, base_id + 6, base_id + 7 }); + out_triangles.push_back({ base_id + 4, base_id + 7, base_id + 1 }); + out_triangles.push_back({ base_id + 1, base_id + 7, base_id + 8 }); + out_triangles.push_back({ base_id + 1, base_id + 8, base_id + 5 }); + out_triangles.push_back({ base_id + 5, base_id + 8, base_id + 9 }); + out_triangles.push_back({ base_id + 5, base_id + 9, base_id + 3 }); + out_triangles.push_back({ base_id + 3, base_id + 9, base_id + 6 }); + out_triangles.push_back({ base_id + 3, base_id + 6, base_id + 4 }); + } + + if (k + 2 == end) { + // ending cap triangles + size_t base_id = out_vertices_count - 4 + 1; + out_triangles.push_back({ base_id + 0, base_id + 2, base_id + 1 }); + out_triangles.push_back({ base_id + 0, base_id + 3, base_id + 2 }); + } + } + } + + // save to file + fprintf(fp, "\n# vertices path %zu\n", i + 1); + for (const Vec3f& v : out_vertices) { + fprintf(fp, "v %g %g %g\n", v[0], v[1], v[2]); + } + + fprintf(fp, "\n# normals path %zu\n", i + 1); + for (const Vec3f& n : out_normals) { + fprintf(fp, "vn %g %g %g\n", n[0], n[1], n[2]); + } + + fprintf(fp, "\n# material path %zu\n", i + 1); + fprintf(fp, "usemtl material_%zu\n", i + 1); + + fprintf(fp, "\n# triangles path %zu\n", i + 1); + for (const Triangle& t : out_triangles) { + fprintf(fp, "f %zu//%zu %zu//%zu %zu//%zu\n", t[0], t[0], t[1], t[1], t[2], t[2]); + } + } + + fclose(fp); +} + +void GCodeViewer::init() +{ + if (m_initialized) + return; + + for (size_t i = 0; i < m_buffers.size(); ++i) { + TBuffer& buffer = m_buffers[i]; + switch (buffer_type(i)) + { + default: { break; } + case EMoveType::Tool_change: + case EMoveType::Color_change: + case EMoveType::Pause_Print: + case EMoveType::Custom_GCode: + case EMoveType::Retract: + case EMoveType::Unretract: + { + buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Point; + buffer.vertices.format = VBuffer::EFormat::Position; + buffer.shader = wxGetApp().is_glsl_version_greater_or_equal_to(1, 20) ? "options_120" : "options_110"; + break; + } + case EMoveType::Extrude: + { + buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Triangle; + buffer.vertices.format = VBuffer::EFormat::PositionNormal3; + buffer.shader = "gouraud_light"; + break; + } + case EMoveType::Travel: + { + buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Line; + buffer.vertices.format = VBuffer::EFormat::PositionNormal1; + buffer.shader = "toolpaths_lines"; + break; + } + } + } + + set_toolpath_move_type_visible(EMoveType::Extrude, true); +// m_sequential_view.skip_invisible_moves = true; + + m_initialized = true; +} + +void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) +{ +#if ENABLE_GCODE_VIEWER_STATISTICS + auto start_time = std::chrono::high_resolution_clock::now(); + m_statistics.results_size = SLIC3R_STDVEC_MEMSIZE(gcode_result.moves, GCodeProcessor::MoveVertex); + m_statistics.results_time = gcode_result.time; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + // vertices data + m_moves_count = gcode_result.moves.size(); + if (m_moves_count == 0) + return; + + unsigned int progress_count = 0; + static const unsigned int progress_threshold = 1000; + wxProgressDialog* progress_dialog = wxGetApp().is_gcode_viewer() ? + new wxProgressDialog(_L("Generating toolpaths"), "...", + 100, wxGetApp().plater(), wxPD_AUTO_HIDE | wxPD_APP_MODAL) : nullptr; + + for (size_t i = 0; i < m_moves_count; ++i) { + const GCodeProcessor::MoveVertex& move = gcode_result.moves[i]; + if (wxGetApp().is_gcode_viewer()) + // for the gcode viewer we need all moves to correctly size the printbed + m_paths_bounding_box.merge(move.position.cast()); + else { + if (move.type == EMoveType::Extrude && move.width != 0.0f && move.height != 0.0f) + m_paths_bounding_box.merge(move.position.cast()); + } + } + + // max bounding box (account for tool marker) + m_max_bounding_box = m_paths_bounding_box; + m_max_bounding_box.merge(m_paths_bounding_box.max + m_sequential_view.marker.get_bounding_box().size()[2] * Vec3d::UnitZ()); + + auto log_memory_usage = [this](const std::string& label, const std::vector>& vertices, const std::vector& indices) { + long long vertices_size = 0; + for (size_t i = 0; i < vertices.size(); ++i) { + vertices_size += SLIC3R_STDVEC_MEMSIZE(vertices[i], float); + } + long long indices_size = 0; + for (size_t i = 0; i < indices.size(); ++i) { + for (size_t j = 0; j < indices[i].size(); ++j) { + indices_size += SLIC3R_STDVEC_MEMSIZE(indices[i][j], unsigned int); + } + } + log_memory_used(label, vertices_size + indices_size); + }; + + // format data into the buffers to be rendered as points + auto add_vertices_as_point = [](const GCodeProcessor::MoveVertex& curr, std::vector& buffer_vertices) { + for (int j = 0; j < 3; ++j) { + buffer_vertices.push_back(curr.position[j]); + } + }; + auto add_indices_as_point = [](const GCodeProcessor::MoveVertex& curr, TBuffer& buffer, + unsigned int index_buffer_id, IndexBuffer& buffer_indices, size_t move_id) { + buffer.add_path(curr, index_buffer_id, buffer_indices.size(), move_id); + buffer_indices.push_back(static_cast(buffer_indices.size())); + }; + + // format data into the buffers to be rendered as lines + auto add_vertices_as_line = [](const GCodeProcessor::MoveVertex& prev, const GCodeProcessor::MoveVertex& curr, + TBuffer& buffer, std::vector& buffer_vertices) { + // x component of the normal to the current segment (the normal is parallel to the XY plane) + float normal_x = (curr.position - prev.position).normalized()[1]; + + auto add_vertex = [&buffer_vertices, normal_x](const GCodeProcessor::MoveVertex& vertex) { + // add position + for (int j = 0; j < 3; ++j) { + buffer_vertices.push_back(vertex.position[j]); + } + // add normal x component + buffer_vertices.push_back(normal_x); + }; + + // add previous vertex + add_vertex(prev); + // add current vertex + add_vertex(curr); + }; + auto add_indices_as_line = [](const GCodeProcessor::MoveVertex& prev, const GCodeProcessor::MoveVertex& curr, TBuffer& buffer, + unsigned int index_buffer_id, IndexBuffer& buffer_indices, size_t move_id) { + // x component of the normal to the current segment (the normal is parallel to the XY plane) + float normal_x = (curr.position - prev.position).normalized()[1]; + + if (prev.type != curr.type || !buffer.paths.back().matches(curr)) { + // add starting index + buffer_indices.push_back(static_cast(buffer_indices.size())); + buffer.add_path(curr, index_buffer_id, buffer_indices.size() - 1, move_id - 1); + buffer.paths.back().first.position = prev.position; + } + + Path& last_path = buffer.paths.back(); + if (last_path.first.i_id != last_path.last.i_id) { + // add previous index + buffer_indices.push_back(static_cast(buffer_indices.size())); + } + + // add current index + buffer_indices.push_back(static_cast(buffer_indices.size())); + last_path.last = { index_buffer_id, buffer_indices.size() - 1, move_id, curr.position }; + }; + + // format data into the buffers to be rendered as solid + auto add_vertices_as_solid = [](const GCodeProcessor::MoveVertex& prev, const GCodeProcessor::MoveVertex& curr, TBuffer& buffer, + std::vector& buffer_vertices, size_t move_id) { + static Vec3f prev_dir; + static Vec3f prev_up; + static float prev_length; + auto store_vertex = [](std::vector& buffer_vertices, const Vec3f& position, const Vec3f& normal) { + // append position + for (int j = 0; j < 3; ++j) { + buffer_vertices.push_back(position[j]); + } + // append normal + for (int j = 0; j < 3; ++j) { + buffer_vertices.push_back(normal[j]); + } + }; + auto extract_position_at = [](const std::vector& vertices, size_t id) { + return Vec3f(vertices[id + 0], vertices[id + 1], vertices[id + 2]); + }; + auto update_position_at = [](std::vector& vertices, size_t id, const Vec3f& position) { + vertices[id + 0] = position[0]; + vertices[id + 1] = position[1]; + vertices[id + 2] = position[2]; + }; + + if (prev.type != curr.type || !buffer.paths.back().matches(curr)) { + buffer.add_path(curr, 0, 0, move_id - 1); + buffer.paths.back().first.position = prev.position; + } + + unsigned int starting_vertices_size = static_cast(buffer_vertices.size() / buffer.vertices.vertex_size_floats()); + + Vec3f dir = (curr.position - prev.position).normalized(); + Vec3f right = (std::abs(std::abs(dir.dot(Vec3f::UnitZ())) - 1.0f) < EPSILON) ? -Vec3f::UnitY() : Vec3f(dir[1], -dir[0], 0.0f).normalized(); + Vec3f left = -right; + Vec3f up = right.cross(dir); + Vec3f down = -up; + + Path& last_path = buffer.paths.back(); + + float half_width = 0.5f * last_path.width; + float half_height = 0.5f * last_path.height; + + Vec3f prev_pos = prev.position - half_height * up; + Vec3f curr_pos = curr.position - half_height * up; + + float length = (curr_pos - prev_pos).norm(); + if (last_path.vertices_count() == 1) { + // 1st segment + + // vertices 1st endpoint + store_vertex(buffer_vertices, prev_pos + half_height * up, up); + store_vertex(buffer_vertices, prev_pos + half_width * right, right); + store_vertex(buffer_vertices, prev_pos + half_height * down, down); + store_vertex(buffer_vertices, prev_pos + half_width * left, left); + + // vertices 2nd endpoint + store_vertex(buffer_vertices, curr_pos + half_height * up, up); + store_vertex(buffer_vertices, curr_pos + half_width * right, right); + store_vertex(buffer_vertices, curr_pos + half_height * down, down); + store_vertex(buffer_vertices, curr_pos + half_width * left, left); + } + else { + // any other segment + float displacement = 0.0f; + float cos_dir = prev_dir.dot(dir); + if (cos_dir > -0.9998477f) { + // if the angle between adjacent segments is smaller than 179 degrees + Vec3f med_dir = (prev_dir + dir).normalized(); + displacement = half_width * ::tan(::acos(std::clamp(dir.dot(med_dir), -1.0f, 1.0f))); + } + + Vec3f displacement_vec = displacement * prev_dir; + bool can_displace = displacement > 0.0f && displacement < prev_length&& displacement < length; + + size_t prev_right_id = (starting_vertices_size - 3) * buffer.vertices.vertex_size_floats(); + size_t prev_left_id = (starting_vertices_size - 1) * buffer.vertices.vertex_size_floats(); + Vec3f prev_right_pos = extract_position_at(buffer_vertices, prev_right_id); + Vec3f prev_left_pos = extract_position_at(buffer_vertices, prev_left_id); + + bool is_right_turn = prev_up.dot(prev_dir.cross(dir)) <= 0.0f; + // whether the angle between adjacent segments is greater than 45 degrees + bool is_sharp = cos_dir < 0.7071068f; + + bool right_displaced = false; + bool left_displaced = false; + + // displace the vertex (inner with respect to the corner) of the previous segment 2nd enpoint, if possible + if (can_displace) { + if (is_right_turn) { + prev_right_pos -= displacement_vec; + update_position_at(buffer_vertices, prev_right_id, prev_right_pos); + right_displaced = true; + } + else { + prev_left_pos -= displacement_vec; + update_position_at(buffer_vertices, prev_left_id, prev_left_pos); + left_displaced = true; + } + } + + if (!is_sharp) { + // displace the vertex (outer with respect to the corner) of the previous segment 2nd enpoint, if possible + if (can_displace) { + if (is_right_turn) { + prev_left_pos += displacement_vec; + update_position_at(buffer_vertices, prev_left_id, prev_left_pos); + left_displaced = true; + } + else { + prev_right_pos += displacement_vec; + update_position_at(buffer_vertices, prev_right_id, prev_right_pos); + right_displaced = true; + } + } + + // vertices 1st endpoint (top and bottom are from previous segment 2nd endpoint) + // vertices position matches that of the previous segment 2nd endpoint, if displaced + store_vertex(buffer_vertices, right_displaced ? prev_right_pos : prev_pos + half_width * right, right); + store_vertex(buffer_vertices, left_displaced ? prev_left_pos : prev_pos + half_width * left, left); + } + else { + // vertices 1st endpoint (top and bottom are from previous segment 2nd endpoint) + // the inner corner vertex position matches that of the previous segment 2nd endpoint, if displaced + if (is_right_turn) { + store_vertex(buffer_vertices, right_displaced ? prev_right_pos : prev_pos + half_width * right, right); + store_vertex(buffer_vertices, prev_pos + half_width * left, left); + } + else { + store_vertex(buffer_vertices, prev_pos + half_width * right, right); + store_vertex(buffer_vertices, left_displaced ? prev_left_pos : prev_pos + half_width * left, left); + } + } + + // vertices 2nd endpoint + store_vertex(buffer_vertices, curr_pos + half_height * up, up); + store_vertex(buffer_vertices, curr_pos + half_width * right, right); + store_vertex(buffer_vertices, curr_pos + half_height * down, down); + store_vertex(buffer_vertices, curr_pos + half_width * left, left); + } + + last_path.last = { 0, 0, move_id, curr.position }; + prev_dir = dir; + prev_up = up; + prev_length = length; + }; + auto add_indices_as_solid = [](const GCodeProcessor::MoveVertex& prev, const GCodeProcessor::MoveVertex& curr, TBuffer& buffer, + size_t& buffer_vertices_size, unsigned int index_buffer_id, IndexBuffer& buffer_indices, size_t move_id) { + static Vec3f prev_dir; + static Vec3f prev_up; + static float prev_length; + auto store_triangle = [](IndexBuffer& buffer_indices, unsigned int i1, unsigned int i2, unsigned int i3) { + buffer_indices.push_back(i1); + buffer_indices.push_back(i2); + buffer_indices.push_back(i3); + }; + auto append_dummy_cap = [store_triangle](IndexBuffer& buffer_indices, unsigned int id) { + store_triangle(buffer_indices, id, id, id); + store_triangle(buffer_indices, id, id, id); + }; + + if (prev.type != curr.type || !buffer.paths.back().matches(curr)) { + buffer.add_path(curr, index_buffer_id, buffer_indices.size(), move_id - 1); + buffer.paths.back().first.position = prev.position; + } + + unsigned int starting_vertices_size = static_cast(buffer_vertices_size); + + Vec3f dir = (curr.position - prev.position).normalized(); + Vec3f right = (std::abs(std::abs(dir.dot(Vec3f::UnitZ())) - 1.0f) < EPSILON) ? -Vec3f::UnitY() : Vec3f(dir[1], -dir[0], 0.0f).normalized(); + Vec3f up = right.cross(dir); + + Path& last_path = buffer.paths.back(); + + float half_width = 0.5f * last_path.width; + float half_height = 0.5f * last_path.height; + + Vec3f prev_pos = prev.position - half_height * up; + Vec3f curr_pos = curr.position - half_height * up; + + float length = (curr_pos - prev_pos).norm(); + if (last_path.vertices_count() == 1) { + // 1st segment + buffer_vertices_size += 8; + + // triangles starting cap + store_triangle(buffer_indices, starting_vertices_size + 0, starting_vertices_size + 2, starting_vertices_size + 1); + store_triangle(buffer_indices, starting_vertices_size + 0, starting_vertices_size + 3, starting_vertices_size + 2); + + // dummy triangles outer corner cap + append_dummy_cap(buffer_indices, starting_vertices_size); + + // triangles sides + store_triangle(buffer_indices, starting_vertices_size + 0, starting_vertices_size + 1, starting_vertices_size + 4); + store_triangle(buffer_indices, starting_vertices_size + 1, starting_vertices_size + 5, starting_vertices_size + 4); + store_triangle(buffer_indices, starting_vertices_size + 1, starting_vertices_size + 2, starting_vertices_size + 5); + store_triangle(buffer_indices, starting_vertices_size + 2, starting_vertices_size + 6, starting_vertices_size + 5); + store_triangle(buffer_indices, starting_vertices_size + 2, starting_vertices_size + 3, starting_vertices_size + 6); + store_triangle(buffer_indices, starting_vertices_size + 3, starting_vertices_size + 7, starting_vertices_size + 6); + store_triangle(buffer_indices, starting_vertices_size + 3, starting_vertices_size + 0, starting_vertices_size + 7); + store_triangle(buffer_indices, starting_vertices_size + 0, starting_vertices_size + 4, starting_vertices_size + 7); + + // triangles ending cap + store_triangle(buffer_indices, starting_vertices_size + 4, starting_vertices_size + 6, starting_vertices_size + 7); + store_triangle(buffer_indices, starting_vertices_size + 4, starting_vertices_size + 5, starting_vertices_size + 6); + } + else { + // any other segment + float displacement = 0.0f; + float cos_dir = prev_dir.dot(dir); + if (cos_dir > -0.9998477f) { + // if the angle between adjacent segments is smaller than 179 degrees + Vec3f med_dir = (prev_dir + dir).normalized(); + displacement = half_width * ::tan(::acos(std::clamp(dir.dot(med_dir), -1.0f, 1.0f))); + } + + Vec3f displacement_vec = displacement * prev_dir; + bool can_displace = displacement > 0.0f && displacement < prev_length && displacement < length; + + bool is_right_turn = prev_up.dot(prev_dir.cross(dir)) <= 0.0f; + // whether the angle between adjacent segments is greater than 45 degrees + bool is_sharp = cos_dir < 0.7071068f; + + bool right_displaced = false; + bool left_displaced = false; + + if (!is_sharp) { + if (can_displace) { + if (is_right_turn) + left_displaced = true; + else + right_displaced = true; + } + } + + buffer_vertices_size += 6; + + // triangles starting cap + store_triangle(buffer_indices, starting_vertices_size - 4, starting_vertices_size - 2, starting_vertices_size + 0); + store_triangle(buffer_indices, starting_vertices_size - 4, starting_vertices_size + 1, starting_vertices_size - 2); + + // triangles outer corner cap + if (is_right_turn) { + if (left_displaced) + // dummy triangles + append_dummy_cap(buffer_indices, starting_vertices_size); + else { + store_triangle(buffer_indices, starting_vertices_size - 4, starting_vertices_size + 1, starting_vertices_size - 1); + store_triangle(buffer_indices, starting_vertices_size + 1, starting_vertices_size - 2, starting_vertices_size - 1); + } + } + else { + if (right_displaced) + // dummy triangles + append_dummy_cap(buffer_indices, starting_vertices_size); + else { + store_triangle(buffer_indices, starting_vertices_size - 4, starting_vertices_size - 3, starting_vertices_size + 0); + store_triangle(buffer_indices, starting_vertices_size - 3, starting_vertices_size - 2, starting_vertices_size + 0); + } + } + + // triangles sides + store_triangle(buffer_indices, starting_vertices_size - 4, starting_vertices_size + 0, starting_vertices_size + 2); + store_triangle(buffer_indices, starting_vertices_size + 0, starting_vertices_size + 3, starting_vertices_size + 2); + store_triangle(buffer_indices, starting_vertices_size + 0, starting_vertices_size - 2, starting_vertices_size + 3); + store_triangle(buffer_indices, starting_vertices_size - 2, starting_vertices_size + 4, starting_vertices_size + 3); + store_triangle(buffer_indices, starting_vertices_size - 2, starting_vertices_size + 1, starting_vertices_size + 4); + store_triangle(buffer_indices, starting_vertices_size + 1, starting_vertices_size + 5, starting_vertices_size + 4); + store_triangle(buffer_indices, starting_vertices_size + 1, starting_vertices_size - 4, starting_vertices_size + 5); + store_triangle(buffer_indices, starting_vertices_size - 4, starting_vertices_size + 2, starting_vertices_size + 5); + + // triangles ending cap + store_triangle(buffer_indices, starting_vertices_size + 2, starting_vertices_size + 4, starting_vertices_size + 5); + store_triangle(buffer_indices, starting_vertices_size + 2, starting_vertices_size + 3, starting_vertices_size + 4); + } + + last_path.last = { index_buffer_id, buffer_indices.size() - 1, move_id, curr.position }; + prev_dir = dir; + prev_up = up; + prev_length = length; + }; + + wxBusyCursor busy; + + // to reduce the peak in memory usage, we split the generation of the vertex and index buffers in two steps. + // the data are deleted as soon as they are sent to the gpu. + std::vector> vertices(m_buffers.size()); + std::vector indices(m_buffers.size()); + + // toolpaths data -> extract vertices from result + for (size_t i = 0; i < m_moves_count; ++i) { + // skip first vertex + if (i == 0) + continue; + + ++progress_count; + if (progress_dialog != nullptr && progress_count % progress_threshold == 0) { + progress_dialog->Update(int(100.0f * float(i) / (2.0f * float(m_moves_count))), + _L("Generating vertex buffer") + ": " + wxNumberFormatter::ToString(100.0 * double(i) / double(m_moves_count), 0, wxNumberFormatter::Style_None) + "%"); + progress_dialog->Fit(); + progress_count = 0; + } + + const GCodeProcessor::MoveVertex& prev = gcode_result.moves[i - 1]; + const GCodeProcessor::MoveVertex& curr = gcode_result.moves[i]; + + unsigned char id = buffer_id(curr.type); + TBuffer& buffer = m_buffers[id]; + std::vector& buffer_vertices = vertices[id]; + + switch (buffer.render_primitive_type) + { + case TBuffer::ERenderPrimitiveType::Point: + { + add_vertices_as_point(curr, buffer_vertices); + break; + } + case TBuffer::ERenderPrimitiveType::Line: + { + add_vertices_as_line(prev, curr, buffer, buffer_vertices); + break; + } + case TBuffer::ERenderPrimitiveType::Triangle: + { + add_vertices_as_solid(prev, curr, buffer, buffer_vertices, i); + break; + } + } + } + + log_memory_usage("Loaded G-code generated vertex buffers, ", vertices, indices); + + // toolpaths data -> send vertices data to gpu + for (size_t i = 0; i < m_buffers.size(); ++i) { + TBuffer& buffer = m_buffers[i]; + + const std::vector& buffer_vertices = vertices[i]; + buffer.vertices.count = buffer_vertices.size() / buffer.vertices.vertex_size_floats(); +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.vertices_gpu_size += buffer_vertices.size() * sizeof(float); + m_statistics.max_vertices_in_vertex_buffer = std::max(m_statistics.max_vertices_in_vertex_buffer, static_cast(buffer.vertices.count)); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + glsafe(::glGenBuffers(1, &buffer.vertices.id)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, buffer.vertices.id)); + glsafe(::glBufferData(GL_ARRAY_BUFFER, buffer_vertices.size() * sizeof(float), buffer_vertices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + } + + // dismiss vertices data, no more needed + std::vector>().swap(vertices); + + // toolpaths data -> extract indices from result + // ensure that at least one index buffer is defined for each multibuffer + for (auto i : indices) { + i.push_back(IndexBuffer()); + } + // paths may have been filled while extracting vertices, + // so reset them, they will be filled again while extracting indices + for (TBuffer& buffer : m_buffers) { + buffer.paths.clear(); + } + // variable used to keep track of the current size (in vertices) of the vertex buffer + size_t curr_buffer_vertices_size = 0; + for (size_t i = 0; i < m_moves_count; ++i) { + // skip first vertex + if (i == 0) + continue; + + ++progress_count; + if (progress_dialog != nullptr && progress_count % progress_threshold == 0) { + progress_dialog->Update(int(100.0f * float(m_moves_count + i) / (2.0f * float(m_moves_count))), + _L("Generating index buffers") + ": " + wxNumberFormatter::ToString(100.0 * double(i) / double(m_moves_count), 0, wxNumberFormatter::Style_None) + "%"); + progress_dialog->Fit(); + progress_count = 0; + } + + const GCodeProcessor::MoveVertex& prev = gcode_result.moves[i - 1]; + const GCodeProcessor::MoveVertex& curr = gcode_result.moves[i]; + + unsigned char id = buffer_id(curr.type); + TBuffer& buffer = m_buffers[id]; + MultiIndexBuffer& buffer_indices = indices[id]; + if (buffer_indices.empty()) + buffer_indices.push_back(IndexBuffer()); + + static const size_t THRESHOLD = 1024 * 1024 * 128; + // if adding the indices for the current segment exceeds the threshold size of the current index buffer + // create another index buffer, and move the current path indices into it + if (buffer_indices.back().size() >= THRESHOLD - static_cast(buffer.indices_per_segment())) { + buffer_indices.push_back(IndexBuffer()); + if (curr.type == EMoveType::Extrude || curr.type == EMoveType::Travel) { + if (!(prev.type != curr.type || !buffer.paths.back().matches(curr))) { + Path& last_path = buffer.paths.back(); + size_t delta_id = last_path.last.i_id - last_path.first.i_id; + + // move indices of the last path from the previous into the new index buffer + IndexBuffer& src_buffer = buffer_indices[buffer_indices.size() - 2]; + IndexBuffer& dst_buffer = buffer_indices[buffer_indices.size() - 1]; + std::move(src_buffer.begin() + last_path.first.i_id, src_buffer.end(), std::back_inserter(dst_buffer)); + src_buffer.erase(src_buffer.begin() + last_path.first.i_id, src_buffer.end()); + + // updates path indices + last_path.first.b_id = buffer_indices.size() - 1; + last_path.first.i_id = 0; + last_path.last.b_id = buffer_indices.size() - 1; + last_path.last.i_id = delta_id; + } + } + } + + switch (buffer.render_primitive_type) + { + case TBuffer::ERenderPrimitiveType::Point: + { + add_indices_as_point(curr, buffer, static_cast(buffer_indices.size()) - 1, buffer_indices.back(), i); + break; + } + case TBuffer::ERenderPrimitiveType::Line: + { + add_indices_as_line(prev, curr, buffer, static_cast(buffer_indices.size()) - 1, buffer_indices.back(), i); + break; + } + case TBuffer::ERenderPrimitiveType::Triangle: + { + add_indices_as_solid(prev, curr, buffer, curr_buffer_vertices_size, static_cast(buffer_indices.size()) - 1, buffer_indices.back(), i); + break; + } + } + } + + log_memory_usage("Loaded G-code generated indices buffers, ", vertices, indices); + + // toolpaths data -> send indices data to gpu + for (size_t i = 0; i < m_buffers.size(); ++i) { + TBuffer& buffer = m_buffers[i]; + + for (size_t j = 0; j < indices[i].size(); ++j) { + const IndexBuffer& buffer_indices = indices[i][j]; + buffer.indices.push_back(IBuffer()); + IBuffer& ibuffer = buffer.indices.back(); + ibuffer.count = buffer_indices.size(); +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.indices_gpu_size += ibuffer.count * sizeof(unsigned int); + m_statistics.max_indices_in_index_buffer = std::max(m_statistics.max_indices_in_index_buffer, static_cast(ibuffer.count)); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + if (ibuffer.count > 0) { + glsafe(::glGenBuffers(1, &ibuffer.id)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibuffer.id)); + glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, buffer_indices.size() * sizeof(unsigned int), buffer_indices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + } + } + } + +#if ENABLE_GCODE_VIEWER_STATISTICS + for (const TBuffer& buffer : m_buffers) { + m_statistics.paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.paths, Path); + } + unsigned int travel_buffer_id = buffer_id(EMoveType::Travel); + const MultiIndexBuffer& travel_buffer_indices = indices[travel_buffer_id]; + for (size_t i = 0; i < travel_buffer_indices.size(); ++i) { + m_statistics.travel_segments_count = travel_buffer_indices[i].size() / m_buffers[travel_buffer_id].indices_per_segment(); + } + unsigned int extrude_buffer_id = buffer_id(EMoveType::Extrude); + const MultiIndexBuffer& extrude_buffer_indices = indices[extrude_buffer_id]; + for (size_t i = 0; i < extrude_buffer_indices.size(); ++i) { + m_statistics.extrude_segments_count = extrude_buffer_indices[i].size() / m_buffers[extrude_buffer_id].indices_per_segment(); + } +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + // dismiss indices data, no more needed + std::vector().swap(indices); + + // layers zs / roles / extruder ids / cp color ids -> extract from result + for (size_t i = 0; i < m_moves_count; ++i) { + const GCodeProcessor::MoveVertex& move = gcode_result.moves[i]; + if (move.type == EMoveType::Extrude) + m_layers_zs.emplace_back(static_cast(move.position[2])); + + m_extruder_ids.emplace_back(move.extruder_id); + + if (i > 0) + m_roles.emplace_back(move.extrusion_role); + } + + // layers zs -> replace intervals of layers with similar top positions with their average value. + std::sort(m_layers_zs.begin(), m_layers_zs.end()); + int n = int(m_layers_zs.size()); + int k = 0; + for (int i = 0; i < n;) { + int j = i + 1; + double zmax = m_layers_zs[i] + EPSILON; + for (; j < n && m_layers_zs[j] <= zmax; ++j); + m_layers_zs[k++] = (j > i + 1) ? (0.5 * (m_layers_zs[i] + m_layers_zs[j - 1])) : m_layers_zs[i]; + i = j; + } + if (k < n) { + m_layers_zs.erase(m_layers_zs.begin() + k, m_layers_zs.end()); + m_layers_zs.shrink_to_fit(); + } + + // set layers z range + m_layers_z_range = { m_layers_zs.front(), m_layers_zs.back() }; + + // roles -> remove duplicates + std::sort(m_roles.begin(), m_roles.end()); + m_roles.erase(std::unique(m_roles.begin(), m_roles.end()), m_roles.end()); + m_roles.shrink_to_fit(); + + // extruder ids -> remove duplicates + std::sort(m_extruder_ids.begin(), m_extruder_ids.end()); + m_extruder_ids.erase(std::unique(m_extruder_ids.begin(), m_extruder_ids.end()), m_extruder_ids.end()); + m_extruder_ids.shrink_to_fit(); + + log_memory_usage("Loaded G-code generated extrusion paths, ", vertices, indices); + +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.load_time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start_time).count(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + if (progress_dialog != nullptr) + progress_dialog->Destroy(); +} + +void GCodeViewer::load_shells(const Print& print, bool initialized) +{ + if (print.objects().empty()) + // no shells, return + return; + + // adds objects' volumes + int object_id = 0; + for (const PrintObject* obj : print.objects()) { + const ModelObject* model_obj = obj->model_object(); + + std::vector instance_ids(model_obj->instances.size()); + for (int i = 0; i < (int)model_obj->instances.size(); ++i) { + instance_ids[i] = i; + } + + m_shells.volumes.load_object(model_obj, object_id, instance_ids, "object", initialized); + + ++object_id; + } + + if (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptFFF) { + // adds wipe tower's volume + double max_z = print.objects()[0]->model_object()->get_model()->bounding_box().max(2); + const PrintConfig& config = print.config(); + size_t extruders_count = config.nozzle_diameter.size(); + if ((extruders_count > 1) && config.wipe_tower && !config.complete_objects) { + const DynamicPrintConfig& print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + double layer_height = print_config.opt_float("layer_height"); + double first_layer_height = print_config.get_abs_value("first_layer_height", layer_height); + double nozzle_diameter = print.config().nozzle_diameter.values[0]; + float depth = print.wipe_tower_data(extruders_count, first_layer_height, nozzle_diameter).depth; + float brim_width = print.wipe_tower_data(extruders_count, first_layer_height, nozzle_diameter).brim_width; + + m_shells.volumes.load_wipe_tower_preview(1000, config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle, + !print.is_step_done(psWipeTower), brim_width, initialized); + } + } + + // remove modifiers + while (true) { + GLVolumePtrs::iterator it = std::find_if(m_shells.volumes.volumes.begin(), m_shells.volumes.volumes.end(), [](GLVolume* volume) { return volume->is_modifier; }); + if (it != m_shells.volumes.volumes.end()) { + delete (*it); + m_shells.volumes.volumes.erase(it); + } + else + break; + } + + for (GLVolume* volume : m_shells.volumes.volumes) { + volume->zoom_to_volumes = false; + volume->color[3] = 0.25f; + volume->force_native_color = true; + volume->set_render_color(); + } +} + +void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool keep_sequential_current_last) const +{ +#if ENABLE_GCODE_VIEWER_STATISTICS + auto start_time = std::chrono::high_resolution_clock::now(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + auto extrusion_color = [this](const Path& path) { + Color color; + switch (m_view_type) + { + case EViewType::FeatureType: { color = Extrusion_Role_Colors[static_cast(path.role)]; break; } + case EViewType::Height: { color = m_extrusions.ranges.height.get_color_at(path.height); break; } + case EViewType::Width: { color = m_extrusions.ranges.width.get_color_at(path.width); break; } + case EViewType::Feedrate: { color = m_extrusions.ranges.feedrate.get_color_at(path.feedrate); break; } + case EViewType::FanSpeed: { color = m_extrusions.ranges.fan_speed.get_color_at(path.fan_speed); break; } + case EViewType::VolumetricRate: { color = m_extrusions.ranges.volumetric_rate.get_color_at(path.volumetric_rate); break; } + case EViewType::Tool: { color = m_tool_colors[path.extruder_id]; break; } + case EViewType::ColorPrint: { color = m_tool_colors[path.cp_color_id]; break; } + default: { color = { 1.0f, 1.0f, 1.0f }; break; } + } + return color; + }; + + auto travel_color = [this](const Path& path) { + return (path.delta_extruder < 0.0f) ? Travel_Colors[2] /* Retract */ : + ((path.delta_extruder > 0.0f) ? Travel_Colors[1] /* Extrude */ : + Travel_Colors[0] /* Move */); + }; + + auto is_in_z_range = [](const Path& path, double min_z, double max_z) { + auto in_z_range = [min_z, max_z](double z) { + return z > min_z - EPSILON && z < max_z + EPSILON; + }; + + return in_z_range(path.first.position[2]) || in_z_range(path.last.position[2]); + }; + + auto is_travel_in_z_range = [this, is_in_z_range](size_t path_id, double min_z, double max_z) { + const TBuffer& buffer = m_buffers[buffer_id(EMoveType::Travel)]; + if (path_id >= buffer.paths.size()) + return false; + + Path path = buffer.paths[path_id]; + int first = static_cast(path_id); + unsigned int last = static_cast(path_id); + + // check adjacent paths + while (first > 0 && path.first.position.isApprox(buffer.paths[first - 1].last.position)) { + --first; + path.first = buffer.paths[first].first; + } + while (last < static_cast(buffer.paths.size() - 1) && path.last.position.isApprox(buffer.paths[last + 1].first.position)) { + ++last; + path.last = buffer.paths[last].last; + } + + return is_in_z_range(path, min_z, max_z); + }; + +#if ENABLE_GCODE_VIEWER_STATISTICS + m_statistics.render_paths_size = 0; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + + bool top_layer_only = get_app_config()->get("seq_top_layer_only") == "1"; + + SequentialView::Endpoints global_endpoints = { m_moves_count , 0 }; + SequentialView::Endpoints top_layer_endpoints = global_endpoints; + if (top_layer_only || !keep_sequential_current_first) m_sequential_view.current.first = 0; + if (!keep_sequential_current_last) m_sequential_view.current.last = m_moves_count; + + // first pass: collect visible paths and update sequential view data + std::vector> paths; + for (TBuffer& buffer : m_buffers) { + // reset render paths + buffer.render_paths.clear(); + + if (!buffer.visible) + continue; + + for (size_t i = 0; i < buffer.paths.size(); ++i) { + const Path& path = buffer.paths[i]; + if (path.type == EMoveType::Travel) { + if (!is_travel_in_z_range(i, m_layers_z_range[0], m_layers_z_range[1])) + continue; + } + else if (!is_in_z_range(path, m_layers_z_range[0], m_layers_z_range[1])) + continue; + + if (path.type == EMoveType::Extrude && !is_visible(path)) + continue; + + // store valid path + paths.push_back({ &buffer, path.first.b_id, static_cast(i) }); + + global_endpoints.first = std::min(global_endpoints.first, path.first.s_id); + global_endpoints.last = std::max(global_endpoints.last, path.last.s_id); + + if (top_layer_only) { + if (path.type == EMoveType::Travel) { + if (is_travel_in_z_range(i, m_layers_z_range[1], m_layers_z_range[1])) { + top_layer_endpoints.first = std::min(top_layer_endpoints.first, path.first.s_id); + top_layer_endpoints.last = std::max(top_layer_endpoints.last, path.last.s_id); + } + } + else if (is_in_z_range(path, m_layers_z_range[1], m_layers_z_range[1])) { + top_layer_endpoints.first = std::min(top_layer_endpoints.first, path.first.s_id); + top_layer_endpoints.last = std::max(top_layer_endpoints.last, path.last.s_id); + } + } + } + } + + // update current sequential position + m_sequential_view.current.first = !top_layer_only && keep_sequential_current_first ? std::clamp(m_sequential_view.current.first, global_endpoints.first, global_endpoints.last) : global_endpoints.first; + m_sequential_view.current.last = keep_sequential_current_last ? std::clamp(m_sequential_view.current.last, global_endpoints.first, global_endpoints.last) : global_endpoints.last; + + // get the world position from gpu + bool found = false; + for (const TBuffer& buffer : m_buffers) { + // searches the path containing the current position + for (const Path& path : buffer.paths) { + if (path.contains(m_sequential_view.current.last)) { + unsigned int offset = static_cast(m_sequential_view.current.last - path.first.s_id); + if (offset > 0) { + if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::Line) + offset = 2 * offset - 1; + else if (buffer.render_primitive_type == TBuffer::ERenderPrimitiveType::Triangle) { + unsigned int indices_count = buffer.indices_per_segment(); + offset = indices_count * (offset - 1) + (indices_count - 6); + } + } + offset += static_cast(path.first.i_id); + + // gets the index from the index buffer on gpu + unsigned int index = 0; + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer.indices[path.first.b_id].id)); + glsafe(::glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, static_cast(offset * sizeof(unsigned int)), static_cast(sizeof(unsigned int)), static_cast(&index))); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + + // gets the position from the vertices buffer on gpu + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, buffer.vertices.id)); + glsafe(::glGetBufferSubData(GL_ARRAY_BUFFER, static_cast(index * buffer.vertices.vertex_size_bytes()), static_cast(3 * sizeof(float)), static_cast(m_sequential_view.current_position.data()))); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + found = true; + break; + } + } + if (found) + break; + } + + // second pass: filter paths by sequential data and collect them by color + for (const auto& [buffer, index_buffer_id, path_id] : paths) { + const Path& path = buffer->paths[path_id]; + if (m_sequential_view.current.last <= path.first.s_id || path.last.s_id <= m_sequential_view.current.first) + continue; + + Color color; + switch (path.type) + { + case EMoveType::Extrude: { + if (!top_layer_only || m_sequential_view.current.last == global_endpoints.last || is_in_z_range(path, m_layers_z_range[1], m_layers_z_range[1])) + color = extrusion_color(path); + else + color = { 0.25f, 0.25f, 0.25f }; + + break; + } + case EMoveType::Travel: { + if (!top_layer_only || m_sequential_view.current.last == global_endpoints.last || is_travel_in_z_range(path_id, m_layers_z_range[1], m_layers_z_range[1])) + color = (m_view_type == EViewType::Feedrate || m_view_type == EViewType::Tool || m_view_type == EViewType::ColorPrint) ? extrusion_color(path) : travel_color(path); + else + color = { 0.25f, 0.25f, 0.25f }; + + break; + } + default: { color = { 0.0f, 0.0f, 0.0f }; break; } + } + + unsigned int ibuffer_id = index_buffer_id; + auto it = std::find_if(buffer->render_paths.begin(), buffer->render_paths.end(), + [color, ibuffer_id](const RenderPath& path) { return path.index_buffer_id == ibuffer_id && path.color == color; }); + if (it == buffer->render_paths.end()) { + it = buffer->render_paths.insert(buffer->render_paths.end(), RenderPath()); + it->color = color; + it->path_id = path_id; + it->index_buffer_id = index_buffer_id; + } + + unsigned int segments_count = std::min(m_sequential_view.current.last, path.last.s_id) - std::max(m_sequential_view.current.first, path.first.s_id) + 1; + unsigned int size_in_indices = 0; + switch (buffer->render_primitive_type) + { + case TBuffer::ERenderPrimitiveType::Point: { size_in_indices = segments_count; break; } + case TBuffer::ERenderPrimitiveType::Line: + case TBuffer::ERenderPrimitiveType::Triangle: { size_in_indices = buffer->indices_per_segment() * (segments_count - 1); break; } + } + it->sizes.push_back(size_in_indices); + + unsigned int delta_1st = 0; + if (path.first.s_id < m_sequential_view.current.first && m_sequential_view.current.first <= path.last.s_id) + delta_1st = m_sequential_view.current.first - path.first.s_id; + + if (buffer->render_primitive_type == TBuffer::ERenderPrimitiveType::Triangle) + delta_1st *= buffer->indices_per_segment(); + + it->offsets.push_back(static_cast((path.first.i_id + delta_1st) * sizeof(unsigned int))); + } + + // set sequential data to their final value + m_sequential_view.endpoints = top_layer_only ? top_layer_endpoints : global_endpoints; + m_sequential_view.current.first = !top_layer_only && keep_sequential_current_first ? std::clamp(m_sequential_view.current.first, m_sequential_view.endpoints.first, m_sequential_view.endpoints.last) : m_sequential_view.endpoints.first; + + wxGetApp().plater()->enable_preview_moves_slider(!paths.empty()); + +#if ENABLE_GCODE_VIEWER_STATISTICS + for (const TBuffer& buffer : m_buffers) { + m_statistics.render_paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.render_paths, RenderPath); + for (const RenderPath& path : buffer.render_paths) { + m_statistics.render_paths_size += SLIC3R_STDVEC_MEMSIZE(path.sizes, unsigned int); + m_statistics.render_paths_size += SLIC3R_STDVEC_MEMSIZE(path.offsets, size_t); + } + } + m_statistics.refresh_paths_time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start_time).count(); +#endif // ENABLE_GCODE_VIEWER_STATISTICS +} + +void GCodeViewer::render_toolpaths() const +{ + float point_size = 0.8f; + std::array light_intensity = { 0.25f, 0.70f, 0.75f, 0.75f }; + const Camera& camera = wxGetApp().plater()->get_camera(); + double zoom = camera.get_zoom(); + const std::array& viewport = camera.get_viewport(); + float near_plane_height = camera.get_type() == Camera::Perspective ? static_cast(viewport[3]) / (2.0f * static_cast(2.0 * std::tan(0.5 * Geometry::deg2rad(camera.get_fov())))) : + static_cast(viewport[3]) * 0.0005; + + auto set_uniform_color = [](const std::array& color, GLShaderProgram& shader) { + std::array color4 = { color[0], color[1], color[2], 1.0f }; + shader.set_uniform("uniform_color", color4); + }; + + auto render_as_points = [this, zoom, point_size, near_plane_height, set_uniform_color] + (const TBuffer& buffer, unsigned int index_buffer_id, EOptionsColors color_id, GLShaderProgram& shader) { + set_uniform_color(Options_Colors[static_cast(color_id)], shader); + shader.set_uniform("zoom", zoom); + shader.set_uniform("percent_outline_radius", 0.0f); + shader.set_uniform("percent_center_radius", 0.33f); + shader.set_uniform("point_size", point_size); + shader.set_uniform("near_plane_height", near_plane_height); + + glsafe(::glEnable(GL_VERTEX_PROGRAM_POINT_SIZE)); + glsafe(::glEnable(GL_POINT_SPRITE)); + + for (const RenderPath& path : buffer.render_paths) { + if (path.index_buffer_id == index_buffer_id) { + glsafe(::glMultiDrawElements(GL_POINTS, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); +#if ENABLE_GCODE_VIEWER_STATISTICS + ++m_statistics.gl_multi_points_calls_count; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + } + } + + glsafe(::glDisable(GL_POINT_SPRITE)); + glsafe(::glDisable(GL_VERTEX_PROGRAM_POINT_SIZE)); + }; + + auto render_as_lines = [this, light_intensity, set_uniform_color](const TBuffer& buffer, unsigned int index_buffer_id, GLShaderProgram& shader) { + shader.set_uniform("light_intensity", light_intensity); + for (const RenderPath& path : buffer.render_paths) { + if (path.index_buffer_id == index_buffer_id) { + set_uniform_color(path.color, shader); + glsafe(::glMultiDrawElements(GL_LINES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); +#if ENABLE_GCODE_VIEWER_STATISTICS + ++m_statistics.gl_multi_lines_calls_count; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + } + } + }; + + auto render_as_triangles = [this, set_uniform_color](const TBuffer& buffer, unsigned int index_buffer_id, GLShaderProgram& shader) { + for (const RenderPath& path : buffer.render_paths) { + if (path.index_buffer_id == index_buffer_id) { + set_uniform_color(path.color, shader); + glsafe(::glMultiDrawElements(GL_TRIANGLES, (const GLsizei*)path.sizes.data(), GL_UNSIGNED_INT, (const void* const*)path.offsets.data(), (GLsizei)path.sizes.size())); +#if ENABLE_GCODE_VIEWER_STATISTICS + ++m_statistics.gl_multi_triangles_calls_count; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + } + } + }; + + auto line_width = [](double zoom) { + return (zoom < 5.0) ? 1.0 : (1.0 + 5.0 * (zoom - 5.0) / (100.0 - 5.0)); + }; + + glsafe(::glLineWidth(static_cast(line_width(zoom)))); + + unsigned char begin_id = buffer_id(EMoveType::Retract); + unsigned char end_id = buffer_id(EMoveType::Count); + + for (unsigned char i = begin_id; i < end_id; ++i) { + const TBuffer& buffer = m_buffers[i]; + if (!buffer.visible || !buffer.has_data()) + continue; + + GLShaderProgram* shader = wxGetApp().get_shader(buffer.shader.c_str()); + if (shader != nullptr) { + shader->start_using(); + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, buffer.vertices.id)); + glsafe(::glVertexPointer(buffer.vertices.position_size_floats(), GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.position_offset_size())); + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); + bool has_normals = buffer.vertices.normal_size_floats() > 0; + if (has_normals) { + glsafe(::glNormalPointer(GL_FLOAT, buffer.vertices.vertex_size_bytes(), (const void*)buffer.vertices.normal_offset_size())); + glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); + } + + for (size_t j = 0; j < buffer.indices.size(); ++j) { + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer.indices[j].id)); + + switch (buffer.render_primitive_type) + { + case TBuffer::ERenderPrimitiveType::Point: + { + EOptionsColors color; + switch (buffer_type(i)) + { + case EMoveType::Tool_change: { color = EOptionsColors::ToolChanges; break; } + case EMoveType::Color_change: { color = EOptionsColors::ColorChanges; break; } + case EMoveType::Pause_Print: { color = EOptionsColors::PausePrints; break; } + case EMoveType::Custom_GCode: { color = EOptionsColors::CustomGCodes; break; } + case EMoveType::Retract: { color = EOptionsColors::Retractions; break; } + case EMoveType::Unretract: { color = EOptionsColors::Unretractions; break; } + } + render_as_points(buffer, static_cast(j), color, *shader); + break; + } + case TBuffer::ERenderPrimitiveType::Line: + { + render_as_lines(buffer, static_cast(j), *shader); + break; + } + case TBuffer::ERenderPrimitiveType::Triangle: + { + render_as_triangles(buffer, static_cast(j), *shader); + break; + } + } + + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + } + + if (has_normals) + glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); + + glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + + shader->stop_using(); + } + } +} + +void GCodeViewer::render_shells() const +{ + if (!m_shells.visible || m_shells.volumes.empty()) + return; + + GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); + if (shader == nullptr) + return; + +// glsafe(::glDepthMask(GL_FALSE)); + + shader->start_using(); + m_shells.volumes.render(GLVolumeCollection::Transparent, true, wxGetApp().plater()->get_camera().get_view_matrix()); + shader->stop_using(); + +// glsafe(::glDepthMask(GL_TRUE)); +} + +void GCodeViewer::render_legend() const +{ + if (!m_legend_enabled) + return; + + ImGuiWrapper& imgui = *wxGetApp().imgui(); + + imgui.set_next_window_pos(0.0f, 0.0f, ImGuiCond_Always); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGui::SetNextWindowBgAlpha(0.6f); + imgui.begin(std::string("Legend"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove); + + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + + enum class EItemType : unsigned char + { + Rect, + Circle, + Hexagon, + Line + }; + + const PrintEstimatedTimeStatistics::Mode& time_mode = m_time_statistics.modes[static_cast(m_time_estimate_mode)]; + + float icon_size = ImGui::GetTextLineHeight(); + float percent_bar_size = 2.0f * ImGui::GetTextLineHeight(); + + auto append_item = [this, draw_list, icon_size, percent_bar_size, &imgui](EItemType type, const Color& color, const std::string& label, + bool visible = true, const std::string& time = "", float percent = 0.0f, float max_percent = 0.0f, const std::array& offsets = { 0.0f, 0.0f }, + std::function callback = nullptr) { + if (!visible) + ImGui::PushStyleVar(ImGuiStyleVar_Alpha, 0.3333f); + ImVec2 pos = ImGui::GetCursorScreenPos(); + switch (type) + { + default: + case EItemType::Rect: + { + draw_list->AddRectFilled({ pos.x + 1.0f, pos.y + 1.0f }, { pos.x + icon_size - 1.0f, pos.y + icon_size - 1.0f }, + ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f })); + break; + } + case EItemType::Circle: + { + ImVec2 center(0.5f * (pos.x + pos.x + icon_size), 0.5f * (pos.y + pos.y + icon_size)); + if (m_buffers[buffer_id(EMoveType::Retract)].shader == "options_120") { + draw_list->AddCircleFilled(center, 0.5f * icon_size, + ImGui::GetColorU32({ 0.5f * color[0], 0.5f * color[1], 0.5f * color[2], 1.0f }), 16); + float radius = 0.5f * icon_size; + draw_list->AddCircleFilled(center, radius, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 16); + radius = 0.5f * icon_size * 0.01f * 33.0f; + draw_list->AddCircleFilled(center, radius, ImGui::GetColorU32({ 0.5f * color[0], 0.5f * color[1], 0.5f * color[2], 1.0f }), 16); + } + else + draw_list->AddCircleFilled(center, 0.5f * icon_size, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 16); + + break; + } + case EItemType::Hexagon: + { + ImVec2 center(0.5f * (pos.x + pos.x + icon_size), 0.5f * (pos.y + pos.y + icon_size)); + draw_list->AddNgonFilled(center, 0.5f * icon_size, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 6); + break; + } + case EItemType::Line: + { + draw_list->AddLine({ pos.x + 1, pos.y + icon_size - 1 }, { pos.x + icon_size - 1, pos.y + 1 }, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 3.0f); + break; + } + } + + // draw text + ImGui::Dummy({ icon_size, icon_size }); + ImGui::SameLine(); + if (callback != nullptr) { + if (ImGui::MenuItem(label.c_str())) + callback(); + else { + // show tooltip + if (ImGui::IsItemHovered()) { + if (!visible) + ImGui::PopStyleVar(); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); + ImGui::BeginTooltip(); + imgui.text(visible ? _u8L("Click to hide") : _u8L("Click to show")); + ImGui::EndTooltip(); + ImGui::PopStyleColor(); + if (!visible) + ImGui::PushStyleVar(ImGuiStyleVar_Alpha, 0.3333f); + + // to avoid the tooltip to change size when moving the mouse + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + } + + if (!time.empty()) { + ImGui::SameLine(offsets[0]); + imgui.text(time); + ImGui::SameLine(offsets[1]); + pos = ImGui::GetCursorScreenPos(); + float width = std::max(1.0f, percent_bar_size * percent / max_percent); + draw_list->AddRectFilled({ pos.x, pos.y + 2.0f }, { pos.x + width, pos.y + icon_size - 2.0f }, + ImGui::GetColorU32(ImGuiWrapper::COL_ORANGE_LIGHT)); + ImGui::Dummy({ percent_bar_size, icon_size }); + ImGui::SameLine(); + char buf[64]; + ::sprintf(buf, "%.1f%%", 100.0f * percent); + ImGui::TextUnformatted((percent > 0.0f) ? buf : ""); + } + } + else + imgui.text(label); + + if (!visible) + ImGui::PopStyleVar(); + }; + + auto append_range = [this, draw_list, &imgui, append_item](const Extrusions::Range& range, unsigned int decimals) { + auto append_range_item = [this, draw_list, &imgui, append_item](int i, float value, unsigned int decimals) { + char buf[1024]; + ::sprintf(buf, "%.*f", decimals, value); + append_item(EItemType::Rect, Range_Colors[i], buf); + }; + + if (range.count == 1) + // single item use case + append_range_item(0, range.min, decimals); + else if (range.count == 2) { + append_range_item(static_cast(Range_Colors.size()) - 1, range.max, decimals); + append_range_item(0, range.min, decimals); + } + else { + float step_size = range.step_size(); + for (int i = static_cast(Range_Colors.size()) - 1; i >= 0; --i) { + append_range_item(i, range.min + static_cast(i) * step_size, decimals); + } + } + }; + + auto append_headers = [&imgui](const std::array& texts, const std::array& offsets) { + imgui.text(texts[0]); + ImGui::SameLine(offsets[0]); + imgui.text(texts[1]); + ImGui::SameLine(offsets[1]); + imgui.text(texts[2]); + ImGui::Separator(); + }; + + auto max_width = [](const std::vector& items, const std::string& title, float extra_size = 0.0f) { + float ret = ImGui::CalcTextSize(title.c_str()).x; + for (const std::string& item : items) { + ret = std::max(ret, extra_size + ImGui::CalcTextSize(item.c_str()).x); + } + return ret; + }; + + auto calculate_offsets = [max_width](const std::vector& labels, const std::vector& times, + const std::array& titles, float extra_size = 0.0f) { + const ImGuiStyle& style = ImGui::GetStyle(); + std::array ret = { 0.0f, 0.0f }; + ret[0] = max_width(labels, titles[0], extra_size) + 3.0f * style.ItemSpacing.x; + ret[1] = ret[0] + max_width(times, titles[1]) + style.ItemSpacing.x; + return ret; + }; + + auto color_print_ranges = [this](unsigned char extruder_id, const std::vector& custom_gcode_per_print_z) { + std::vector>> ret; + ret.reserve(custom_gcode_per_print_z.size()); + + for (const auto& item : custom_gcode_per_print_z) { + if (extruder_id + 1 != static_cast(item.extruder)) + continue; + + if (item.type != ColorChange) + continue; + + auto lower_b = std::lower_bound(m_layers_zs.begin(), m_layers_zs.end(), item.print_z - Slic3r::DoubleSlider::epsilon()); + + if (lower_b == m_layers_zs.end()) + continue; + + double current_z = *lower_b; + double previous_z = lower_b == m_layers_zs.begin() ? 0.0 : *(--lower_b); + + // to avoid duplicate values, check adding values + if (ret.empty() || !(ret.back().second.first == previous_z && ret.back().second.second == current_z)) + ret.push_back({ decode_color(item.color), { previous_z, current_z } }); + } + + return ret; + }; + + auto upto_label = [](double z) { + char buf[64]; + ::sprintf(buf, "%.2f", z); + return _u8L("up to") + " " + std::string(buf) + " " + _u8L("mm"); + }; + + auto above_label = [](double z) { + char buf[64]; + ::sprintf(buf, "%.2f", z); + return _u8L("above") + " " + std::string(buf) + " " + _u8L("mm"); + }; + + auto fromto_label = [](double z1, double z2) { + char buf1[64]; + ::sprintf(buf1, "%.2f", z1); + char buf2[64]; + ::sprintf(buf2, "%.2f", z2); + return _u8L("from") + " " + std::string(buf1) + " " + _u8L("to") + " " + std::string(buf2) + " " + _u8L("mm"); + }; + + auto role_time_and_percent = [this, time_mode](ExtrusionRole role) { + auto it = std::find_if(time_mode.roles_times.begin(), time_mode.roles_times.end(), [role](const std::pair& item) { return role == item.first; }); + return (it != time_mode.roles_times.end()) ? std::make_pair(it->second, it->second / time_mode.time) : std::make_pair(0.0f, 0.0f); + }; + + // data used to properly align items in columns when showing time + std::array offsets = { 0.0f, 0.0f }; + std::vector labels; + std::vector times; + std::vector percents; + float max_percent = 0.0f; + + if (m_view_type == EViewType::FeatureType) { + // calculate offsets to align time/percentage data + for (size_t i = 0; i < m_roles.size(); ++i) { + ExtrusionRole role = m_roles[i]; + if (role < erCount) { + labels.push_back(_u8L(ExtrusionEntity::role_to_string(role))); + auto [time, percent] = role_time_and_percent(role); + times.push_back((time > 0.0f) ? short_time(get_time_dhms(time)) : ""); + percents.push_back(percent); + max_percent = std::max(max_percent, percent); + } + } + + offsets = calculate_offsets(labels, times, { _u8L("Feature type"), _u8L("Time") }, icon_size); + } + + // extrusion paths section -> title + switch (m_view_type) + { + case EViewType::FeatureType: + { + append_headers({ _u8L("Feature type"), _u8L("Time"), _u8L("Percentage") }, offsets); + break; + } + case EViewType::Height: { imgui.title(_u8L("Height (mm)")); break; } + case EViewType::Width: { imgui.title(_u8L("Width (mm)")); break; } + case EViewType::Feedrate: { imgui.title(_u8L("Speed (mm/s)")); break; } + case EViewType::FanSpeed: { imgui.title(_u8L("Fan Speed (%)")); break; } + case EViewType::VolumetricRate: { imgui.title(_u8L("Volumetric flow rate (mm³/s)")); break; } + case EViewType::Tool: { imgui.title(_u8L("Tool")); break; } + case EViewType::ColorPrint: { imgui.title(_u8L("Color Print")); break; } + default: { break; } + } + + // extrusion paths section -> items + switch (m_view_type) + { + case EViewType::FeatureType: + { + for (size_t i = 0; i < m_roles.size(); ++i) { + ExtrusionRole role = m_roles[i]; + if (role >= erCount) + continue; + bool visible = is_visible(role); + append_item(EItemType::Rect, Extrusion_Role_Colors[static_cast(role)], labels[i], + visible, times[i], percents[i], max_percent, offsets, [this, role, visible]() { + m_extrusions.role_visibility_flags = visible ? m_extrusions.role_visibility_flags & ~(1 << role) : m_extrusions.role_visibility_flags | (1 << role); + // update buffers' render paths + refresh_render_paths(false, false); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->update_preview_bottom_toolbar(); + } + ); + } + break; + } + case EViewType::Height: { append_range(m_extrusions.ranges.height, 3); break; } + case EViewType::Width: { append_range(m_extrusions.ranges.width, 3); break; } + case EViewType::Feedrate: { append_range(m_extrusions.ranges.feedrate, 1); break; } + case EViewType::FanSpeed: { append_range(m_extrusions.ranges.fan_speed, 0); break; } + case EViewType::VolumetricRate: { append_range(m_extrusions.ranges.volumetric_rate, 3); break; } + case EViewType::Tool: + { + // shows only extruders actually used + for (unsigned char i : m_extruder_ids) { + append_item(EItemType::Rect, m_tool_colors[i], _u8L("Extruder") + " " + std::to_string(i + 1)); + } + break; + } + case EViewType::ColorPrint: + { + const std::vector& custom_gcode_per_print_z = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes; + const int extruders_count = wxGetApp().extruders_edited_cnt(); + if (extruders_count == 1) { // single extruder use case + std::vector>> cp_values = color_print_ranges(0, custom_gcode_per_print_z); + const int items_cnt = static_cast(cp_values.size()); + if (items_cnt == 0) { // There are no color changes, but there are some pause print or custom Gcode + append_item(EItemType::Rect, m_tool_colors.front(), _u8L("Default color")); + } + else { + for (int i = items_cnt; i >= 0; --i) { + // create label for color change item + if (i == 0) { + append_item(EItemType::Rect, m_tool_colors[0], upto_label(cp_values.front().second.first)); + break; + } + else if (i == items_cnt) { + append_item(EItemType::Rect, cp_values[i - 1].first, above_label(cp_values[i - 1].second.second)); + continue; + } + append_item(EItemType::Rect, cp_values[i - 1].first, fromto_label(cp_values[i - 1].second.second, cp_values[i].second.first)); + } + } + } + else // multi extruder use case + { + // shows only extruders actually used + for (unsigned char i : m_extruder_ids) { + std::vector>> cp_values = color_print_ranges(i, custom_gcode_per_print_z); + const int items_cnt = static_cast(cp_values.size()); + if (items_cnt == 0) { // There are no color changes, but there are some pause print or custom Gcode + append_item(EItemType::Rect, m_tool_colors[i], _u8L("Extruder") + " " + std::to_string(i + 1) + " " + _u8L("default color")); + } + else { + for (int j = items_cnt; j >= 0; --j) { + // create label for color change item + std::string label = _u8L("Extruder") + " " + std::to_string(i + 1); + if (j == 0) { + label += " " + upto_label(cp_values.front().second.first); + append_item(EItemType::Rect, m_tool_colors[i], label); + break; + } + else if (j == items_cnt) { + label += " " + above_label(cp_values[j - 1].second.second); + append_item(EItemType::Rect, cp_values[j - 1].first, label); + continue; + } + + label += " " + fromto_label(cp_values[j - 1].second.second, cp_values[j].second.first); + append_item(EItemType::Rect, cp_values[j - 1].first, label); + } + } + } + } + + break; + } + default: { break; } + } + + // partial estimated printing time section + if (m_view_type == EViewType::ColorPrint) { + using Times = std::pair; + using TimesList = std::vector>; + + // helper structure containig the data needed to render the time items + struct PartialTime + { + enum class EType : unsigned char + { + Print, + ColorChange, + Pause + }; + EType type; + int extruder_id; + Color color1; + Color color2; + Times times; + }; + using PartialTimes = std::vector; + + auto generate_partial_times = [this](const TimesList& times) { + PartialTimes items; + + std::vector custom_gcode_per_print_z = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes; + int extruders_count = wxGetApp().extruders_edited_cnt(); + std::vector last_color(extruders_count); + for (int i = 0; i < extruders_count; ++i) { + last_color[i] = m_tool_colors[i]; + } + int last_extruder_id = 1; + for (const auto& time_rec : times) { + switch (time_rec.first) + { + case CustomGCode::PausePrint: + { + auto it = std::find_if(custom_gcode_per_print_z.begin(), custom_gcode_per_print_z.end(), [time_rec](const CustomGCode::Item& item) { return item.type == time_rec.first; }); + if (it != custom_gcode_per_print_z.end()) { + items.push_back({ PartialTime::EType::Print, it->extruder, Color(), Color(), time_rec.second }); + items.push_back({ PartialTime::EType::Pause, it->extruder, Color(), Color(), time_rec.second }); + custom_gcode_per_print_z.erase(it); + } + break; + } + case CustomGCode::ColorChange: + { + auto it = std::find_if(custom_gcode_per_print_z.begin(), custom_gcode_per_print_z.end(), [time_rec](const CustomGCode::Item& item) { return item.type == time_rec.first; }); + if (it != custom_gcode_per_print_z.end()) { + items.push_back({ PartialTime::EType::Print, it->extruder, Color(), Color(), time_rec.second }); + items.push_back({ PartialTime::EType::ColorChange, it->extruder, last_color[it->extruder - 1], decode_color(it->color), time_rec.second }); + last_color[it->extruder - 1] = decode_color(it->color); + last_extruder_id = it->extruder; + custom_gcode_per_print_z.erase(it); + } + else + items.push_back({ PartialTime::EType::Print, last_extruder_id, Color(), Color(), time_rec.second }); + + break; + } + default: { break; } + } + } + + return items; + }; + + auto append_color = [this, &imgui](const Color& color1, const Color& color2, std::array& offsets, const Times& times) { + imgui.text(_u8L("Color change")); + ImGui::SameLine(); + + float icon_size = ImGui::GetTextLineHeight(); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + ImVec2 pos = ImGui::GetCursorScreenPos(); + pos.x -= 0.5f * ImGui::GetStyle().ItemSpacing.x; + + draw_list->AddRectFilled({ pos.x + 1.0f, pos.y + 1.0f }, { pos.x + icon_size - 1.0f, pos.y + icon_size - 1.0f }, + ImGui::GetColorU32({ color1[0], color1[1], color1[2], 1.0f })); + pos.x += icon_size; + draw_list->AddRectFilled({ pos.x + 1.0f, pos.y + 1.0f }, { pos.x + icon_size - 1.0f, pos.y + icon_size - 1.0f }, + ImGui::GetColorU32({ color2[0], color2[1], color2[2], 1.0f })); + + ImGui::SameLine(offsets[0]); + imgui.text(short_time(get_time_dhms(times.second - times.first))); + }; + + PartialTimes partial_times = generate_partial_times(time_mode.custom_gcode_times); + if (!partial_times.empty()) { + labels.clear(); + times.clear(); + + for (const PartialTime& item : partial_times) { + switch (item.type) + { + case PartialTime::EType::Print: { labels.push_back(_u8L("Print")); break; } + case PartialTime::EType::Pause: { labels.push_back(_u8L("Pause")); break; } + case PartialTime::EType::ColorChange: { labels.push_back(_u8L("Color change")); break; } + } + times.push_back(short_time(get_time_dhms(item.times.second))); + } + offsets = calculate_offsets(labels, times, { _u8L("Event"), _u8L("Remaining time") }, 2.0f * icon_size); + + ImGui::Spacing(); + append_headers({ _u8L("Event"), _u8L("Remaining time"), _u8L("Duration") }, offsets); + for (const PartialTime& item : partial_times) { + switch (item.type) + { + case PartialTime::EType::Print: + { + imgui.text(_u8L("Print")); + ImGui::SameLine(offsets[0]); + imgui.text(short_time(get_time_dhms(item.times.second))); + ImGui::SameLine(offsets[1]); + imgui.text(short_time(get_time_dhms(item.times.first))); + break; + } + case PartialTime::EType::Pause: + { + imgui.text(_u8L("Pause")); + ImGui::SameLine(offsets[0]); + imgui.text(short_time(get_time_dhms(item.times.second - item.times.first))); + break; + } + case PartialTime::EType::ColorChange: + { + append_color(item.color1, item.color2, offsets, item.times); + break; + } + } + } + } + } + + // travel paths section + if (m_buffers[buffer_id(EMoveType::Travel)].visible) { + switch (m_view_type) + { + case EViewType::Feedrate: + case EViewType::Tool: + case EViewType::ColorPrint: + { + break; + } + default: + { + // title + ImGui::Spacing(); + imgui.title(_u8L("Travel")); + + // items + append_item(EItemType::Line, Travel_Colors[0], _u8L("Movement")); + append_item(EItemType::Line, Travel_Colors[1], _u8L("Extrusion")); + append_item(EItemType::Line, Travel_Colors[2], _u8L("Retraction")); + + break; + } + } + } + + auto any_option_available = [this]() { + auto available = [this](EMoveType type) { + const TBuffer& buffer = m_buffers[buffer_id(type)]; + return buffer.visible && buffer.has_data(); + }; + + return available(EMoveType::Color_change) || + available(EMoveType::Custom_GCode) || + available(EMoveType::Pause_Print) || + available(EMoveType::Retract) || + available(EMoveType::Tool_change) || + available(EMoveType::Unretract); + }; + + auto add_option = [this, append_item](EMoveType move_type, EOptionsColors color, const std::string& text) { + const TBuffer& buffer = m_buffers[buffer_id(move_type)]; + if (buffer.visible && buffer.has_data()) + append_item((buffer.shader == "options_110") ? EItemType::Rect : EItemType::Circle, Options_Colors[static_cast(color)], text); + }; + + // options section + if (any_option_available()) { + // title + ImGui::Spacing(); + imgui.title(_u8L("Options")); + + // items + add_option(EMoveType::Retract, EOptionsColors::Retractions, _u8L("Retractions")); + add_option(EMoveType::Unretract, EOptionsColors::Unretractions, _u8L("Deretractions")); + add_option(EMoveType::Tool_change, EOptionsColors::ToolChanges, _u8L("Tool changes")); + add_option(EMoveType::Color_change, EOptionsColors::ColorChanges, _u8L("Color changes")); + add_option(EMoveType::Pause_Print, EOptionsColors::PausePrints, _u8L("Pause prints")); + add_option(EMoveType::Custom_GCode, EOptionsColors::CustomGCodes, _u8L("Custom GCodes")); + } + + // total estimated printing time section + if (time_mode.time > 0.0f && (m_view_type == EViewType::FeatureType || + (m_view_type == EViewType::ColorPrint && !time_mode.custom_gcode_times.empty()))) { + + ImGui::Spacing(); + ImGui::Spacing(); + ImGui::PushStyleColor(ImGuiCol_Separator, { 1.0f, 1.0f, 1.0f, 1.0f }); + ImGui::Separator(); + ImGui::PopStyleColor(); + ImGui::Spacing(); + + ImGui::AlignTextToFramePadding(); + switch (m_time_estimate_mode) + { + case PrintEstimatedTimeStatistics::ETimeMode::Normal: + { + imgui.text(_u8L("Estimated printing time") + " [" + _u8L("Normal mode") + "]:"); + break; + } + case PrintEstimatedTimeStatistics::ETimeMode::Stealth: + { + imgui.text(_u8L("Estimated printing time") + " [" + _u8L("Stealth mode") + "]:"); + break; + } + } + ImGui::SameLine(); + imgui.text(short_time(get_time_dhms(time_mode.time))); + + auto show_mode_button = [this, &imgui](const std::string& label, PrintEstimatedTimeStatistics::ETimeMode mode) { + bool show = false; + for (size_t i = 0; i < m_time_statistics.modes.size(); ++i) { + if (i != static_cast(mode) && + short_time(get_time_dhms(m_time_statistics.modes[static_cast(mode)].time)) != short_time(get_time_dhms(m_time_statistics.modes[i].time))) { + show = true; + break; + } + } + if (show && m_time_statistics.modes[static_cast(mode)].roles_times.size() > 0) { + if (imgui.button(label)) { + m_time_estimate_mode = mode; + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + } + }; + + switch (m_time_estimate_mode) + { + case PrintEstimatedTimeStatistics::ETimeMode::Normal: + { + show_mode_button(_u8L("Show stealth mode"), PrintEstimatedTimeStatistics::ETimeMode::Stealth); + break; + } + case PrintEstimatedTimeStatistics::ETimeMode::Stealth: + { + show_mode_button(_u8L("Show normal mode"), PrintEstimatedTimeStatistics::ETimeMode::Normal); + break; + } + } + } + + imgui.end(); + ImGui::PopStyleVar(); +} + +#if ENABLE_GCODE_VIEWER_STATISTICS +void GCodeViewer::render_statistics() const +{ + static const float offset = 250.0f; + + ImGuiWrapper& imgui = *wxGetApp().imgui(); + + auto add_time = [this, &imgui](const std::string& label, long long time) { + char buf[1024]; + sprintf(buf, "%lld ms (%s)", time, get_time_dhms(static_cast(time) * 0.001f).c_str()); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); + ImGui::SameLine(offset); + imgui.text(buf); + }; + + auto add_memory = [this, &imgui](const std::string& label, long long memory) { + static const float mb = 1024.0f * 1024.0f; + static const float inv_mb = 1.0f / mb; + static const float gb = 1024.0f * mb; + static const float inv_gb = 1.0f / gb; + char buf[1024]; + if (static_cast(memory) < gb) + sprintf(buf, "%lld bytes (%.3f MB)", memory, static_cast(memory) * inv_mb); + else + sprintf(buf, "%lld bytes (%.3f GB)", memory, static_cast(memory) * inv_gb); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); + ImGui::SameLine(offset); + imgui.text(buf); + }; + + auto add_counter = [this, &imgui](const std::string& label, long long counter) { + char buf[1024]; + sprintf(buf, "%lld", counter); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label); + ImGui::SameLine(offset); + imgui.text(buf); + }; + + imgui.set_next_window_pos(0.5f * wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_width(), 0.0f, ImGuiCond_Once, 0.5f, 0.0f); + ImGui::SetNextWindowSizeConstraints({ 300, -1 }, { 600, -1 }); + imgui.begin(std::string("GCodeViewer Statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize); + ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); + + if (ImGui::CollapsingHeader("Time")) { + add_time(std::string("GCodeProcessor:"), m_statistics.results_time); + + ImGui::Separator(); + add_time(std::string("Load:"), m_statistics.load_time); + add_time(std::string("Refresh:"), m_statistics.refresh_time); + add_time(std::string("Refresh paths:"), m_statistics.refresh_paths_time); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + + if (ImGui::CollapsingHeader("OpenGL calls")) { + add_counter(std::string("Multi GL_POINTS:"), m_statistics.gl_multi_points_calls_count); + add_counter(std::string("Multi GL_LINES:"), m_statistics.gl_multi_lines_calls_count); + add_counter(std::string("Multi GL_TRIANGLES:"), m_statistics.gl_multi_triangles_calls_count); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + + if (ImGui::CollapsingHeader("CPU memory")) { + add_memory(std::string("GCodeProcessor results:"), m_statistics.results_size); + + ImGui::Separator(); + add_memory(std::string("Paths:"), m_statistics.paths_size); + add_memory(std::string("Render paths:"), m_statistics.render_paths_size); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + + if (ImGui::CollapsingHeader("GPU memory")) { + add_memory(std::string("Vertices:"), m_statistics.vertices_gpu_size); + add_memory(std::string("Indices:"), m_statistics.indices_gpu_size); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + + if (ImGui::CollapsingHeader("Other")) { + add_counter(std::string("Travel segments count:"), m_statistics.travel_segments_count); + add_counter(std::string("Extrude segments count:"), m_statistics.extrude_segments_count); + add_counter(std::string("Max vertices in vertex buffer:"), m_statistics.max_vertices_in_vertex_buffer); + add_counter(std::string("Max indices in index buffer:"), m_statistics.max_indices_in_index_buffer); + + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); + } + + imgui.end(); +} +#endif // ENABLE_GCODE_VIEWER_STATISTICS + +void GCodeViewer::log_memory_used(const std::string& label, long long additional) const +{ + if (Slic3r::get_logging_level() >= 5) { + long long paths_size = 0; + long long render_paths_size = 0; + for (const TBuffer& buffer : m_buffers) { + paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.paths, Path); + render_paths_size += SLIC3R_STDVEC_MEMSIZE(buffer.render_paths, RenderPath); + for (const RenderPath& path : buffer.render_paths) { + render_paths_size += SLIC3R_STDVEC_MEMSIZE(path.sizes, unsigned int); + render_paths_size += SLIC3R_STDVEC_MEMSIZE(path.offsets, size_t); + } + } + long long layers_zs_size = SLIC3R_STDVEC_MEMSIZE(m_layers_zs, double); + BOOST_LOG_TRIVIAL(trace) << label + << format_memsize_MB(additional + paths_size + render_paths_size + layers_zs_size) + << log_memory_info(); + } +} + +} // namespace GUI +} // namespace Slic3r + +#endif // ENABLE_GCODE_VIEWER diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp new file mode 100644 index 0000000000..1cf5385843 --- /dev/null +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -0,0 +1,481 @@ +#ifndef slic3r_GCodeViewer_hpp_ +#define slic3r_GCodeViewer_hpp_ + +#if ENABLE_GCODE_VIEWER +#include "3DScene.hpp" +#include "libslic3r/GCode/GCodeProcessor.hpp" +#include "GLModel.hpp" + +#include + +namespace Slic3r { + +class Print; +class TriangleMesh; + +namespace GUI { + +class GCodeViewer +{ + using Color = std::array; + using IndexBuffer = std::vector; + using MultiIndexBuffer = std::vector; + + static const std::vector Extrusion_Role_Colors; + static const std::vector Options_Colors; + static const std::vector Travel_Colors; + static const std::vector Range_Colors; + + enum class EOptionsColors : unsigned char + { + Retractions, + Unretractions, + ToolChanges, + ColorChanges, + PausePrints, + CustomGCodes + }; + + // vbo buffer containing vertices data used to rendder a specific toolpath type + struct VBuffer + { + enum class EFormat : unsigned char + { + // vertex format: 3 floats -> position.x|position.y|position.z + Position, + // vertex format: 4 floats -> position.x|position.y|position.z|normal.x + PositionNormal1, + // vertex format: 6 floats -> position.x|position.y|position.z|normal.x|normal.y|normal.z + PositionNormal3 + }; + + EFormat format{ EFormat::Position }; + // vbo id + unsigned int id{ 0 }; + // count of vertices, updated after data are sent to gpu + size_t count{ 0 }; + + size_t data_size_bytes() const { return count * vertex_size_bytes(); } + + size_t vertex_size_floats() const { return position_size_floats() + normal_size_floats(); } + size_t vertex_size_bytes() const { return vertex_size_floats() * sizeof(float); } + + size_t position_offset_floats() const { return 0; } + size_t position_offset_size() const { return position_offset_floats() * sizeof(float); } + size_t position_size_floats() const + { + switch (format) + { + case EFormat::Position: + case EFormat::PositionNormal3: { return 3; } + case EFormat::PositionNormal1: { return 4; } + default: { return 0; } + } + } + size_t position_size_bytes() const { return position_size_floats() * sizeof(float); } + + size_t normal_offset_floats() const + { + switch (format) + { + case EFormat::Position: + case EFormat::PositionNormal1: { return 0; } + case EFormat::PositionNormal3: { return 3; } + default: { return 0; } + } + } + size_t normal_offset_size() const { return normal_offset_floats() * sizeof(float); } + size_t normal_size_floats() const { + switch (format) + { + default: + case EFormat::Position: + case EFormat::PositionNormal1: { return 0; } + case EFormat::PositionNormal3: { return 3; } + } + } + size_t normal_size_bytes() const { return normal_size_floats() * sizeof(float); } + + void reset(); + }; + + // ibo buffer containing indices data (lines/triangles) used to render a specific toolpath type + struct IBuffer + { + // ibo id + unsigned int id{ 0 }; + // count of indices, updated after data are sent to gpu + size_t count{ 0 }; + + void reset(); + }; + + // Used to identify different toolpath sub-types inside a IBuffer + struct Path + { + struct Endpoint + { + // index of the index buffer + unsigned int b_id{ 0 }; + // index into the index buffer + size_t i_id{ 0 }; + // sequential id (index into the vertex buffer) + size_t s_id{ 0 }; + Vec3f position{ Vec3f::Zero() }; + }; + + EMoveType type{ EMoveType::Noop }; + ExtrusionRole role{ erNone }; + Endpoint first; + Endpoint last; + float delta_extruder{ 0.0f }; + float height{ 0.0f }; + float width{ 0.0f }; + float feedrate{ 0.0f }; + float fan_speed{ 0.0f }; + float volumetric_rate{ 0.0f }; + unsigned char extruder_id{ 0 }; + unsigned char cp_color_id{ 0 }; + + bool matches(const GCodeProcessor::MoveVertex& move) const; + size_t vertices_count() const { return last.s_id - first.s_id + 1; } + bool contains(size_t id) const { return first.s_id <= id && id <= last.s_id; } + }; + + // Used to batch the indices needed to render paths + struct RenderPath + { + Color color; + unsigned int path_id; + unsigned int index_buffer_id; + std::vector sizes; + std::vector offsets; // use size_t because we need an unsigned int whose size matches pointer's size (used in the call glMultiDrawElements()) + }; + + // buffer containing data for rendering a specific toolpath type + struct TBuffer + { + enum class ERenderPrimitiveType : unsigned char + { + Point, + Line, + Triangle + }; + + ERenderPrimitiveType render_primitive_type; + VBuffer vertices; + std::vector indices; + + std::string shader; + std::vector paths; + std::vector render_paths; + bool visible{ false }; + + void reset(); + // b_id index of buffer contained in this->indices + // i_id index of first index contained in this->indices[b_id] + // s_id index of first vertex contained in this->vertices + void add_path(const GCodeProcessor::MoveVertex& move, unsigned int b_id, size_t i_id, size_t s_id); + unsigned int indices_per_segment() const { + switch (render_primitive_type) + { + case ERenderPrimitiveType::Point: { return 1; } + case ERenderPrimitiveType::Line: { return 2; } + case ERenderPrimitiveType::Triangle: { return 42; } // 3 indices x 14 triangles + default: { return 0; } + } + } + unsigned int start_segment_vertex_offset() const { + switch (render_primitive_type) + { + case ERenderPrimitiveType::Point: + case ERenderPrimitiveType::Line: + case ERenderPrimitiveType::Triangle: + default: { return 0; } + } + } + unsigned int end_segment_vertex_offset() const { + switch (render_primitive_type) + { + case ERenderPrimitiveType::Point: { return 0; } + case ERenderPrimitiveType::Line: { return 1; } + case ERenderPrimitiveType::Triangle: { return 36; } // 1 vertex of 13th triangle + default: { return 0; } + } + } + + bool has_data() const { return vertices.id != 0 && !indices.empty() && indices.front().id != 0; } + }; + + // helper to render shells + struct Shells + { + GLVolumeCollection volumes; + bool visible{ false }; + }; + + // helper to render extrusion paths + struct Extrusions + { + struct Range + { + float min; + float max; + unsigned int count; + + Range() { reset(); } + + void update_from(const float value) { + if (value != max && value != min) + ++count; + min = std::min(min, value); + max = std::max(max, value); + } + void reset() { min = FLT_MAX; max = -FLT_MAX; count = 0; } + + float step_size() const { return (max - min) / (static_cast(Range_Colors.size()) - 1.0f); } + Color get_color_at(float value) const; + }; + + struct Ranges + { + // Color mapping by layer height. + Range height; + // Color mapping by extrusion width. + Range width; + // Color mapping by feedrate. + Range feedrate; + // Color mapping by fan speed. + Range fan_speed; + // Color mapping by volumetric extrusion rate. + Range volumetric_rate; + + void reset() { + height.reset(); + width.reset(); + feedrate.reset(); + fan_speed.reset(); + volumetric_rate.reset(); + } + }; + + unsigned int role_visibility_flags{ 0 }; + Ranges ranges; + + void reset_role_visibility_flags() { + role_visibility_flags = 0; + for (unsigned int i = 0; i < erCount; ++i) { + role_visibility_flags |= 1 << i; + } + } + + void reset_ranges() { ranges.reset(); } + }; + +#if ENABLE_GCODE_VIEWER_STATISTICS + struct Statistics + { + // time + long long results_time{ 0 }; + long long load_time{ 0 }; + long long refresh_time{ 0 }; + long long refresh_paths_time{ 0 }; + // opengl calls + long long gl_multi_points_calls_count{ 0 }; + long long gl_multi_lines_calls_count{ 0 }; + long long gl_multi_triangles_calls_count{ 0 }; + // memory + long long results_size{ 0 }; + long long vertices_gpu_size{ 0 }; + long long indices_gpu_size{ 0 }; + long long paths_size{ 0 }; + long long render_paths_size{ 0 }; + // other + long long travel_segments_count{ 0 }; + long long extrude_segments_count{ 0 }; + long long max_vertices_in_vertex_buffer{ 0 }; + long long max_indices_in_index_buffer{ 0 }; + + void reset_all() { + reset_times(); + reset_opengl(); + reset_sizes(); + reset_others(); + } + + void reset_times() { + results_time = 0; + load_time = 0; + refresh_time = 0; + refresh_paths_time = 0; + } + + void reset_opengl() { + gl_multi_points_calls_count = 0; + gl_multi_lines_calls_count = 0; + gl_multi_triangles_calls_count = 0; + } + + void reset_sizes() { + results_size = 0; + vertices_gpu_size = 0; + indices_gpu_size = 0; + paths_size = 0; + render_paths_size = 0; + } + + void reset_others() { + travel_segments_count = 0; + extrude_segments_count = 0; + max_vertices_in_vertex_buffer = 0; + max_indices_in_index_buffer = 0; + } + }; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + +public: + struct SequentialView + { + class Marker + { + GLModel m_model; + Vec3f m_world_position; + Transform3f m_world_transform; + float m_z_offset{ 0.5f }; + std::array m_color{ 1.0f, 1.0f, 1.0f, 0.5f }; + bool m_visible{ false }; + + public: + void init(); + + const BoundingBoxf3& get_bounding_box() const { return m_model.get_bounding_box(); } + + void set_world_position(const Vec3f& position); + void set_color(const std::array& color) { m_color = color; } + + bool is_visible() const { return m_visible; } + void set_visible(bool visible) { m_visible = visible; } + + void render() const; + }; + + struct Endpoints + { + size_t first{ 0 }; + size_t last{ 0 }; + }; + + bool skip_invisible_moves{ false }; + Endpoints endpoints; + Endpoints current; + Endpoints last_current; + Vec3f current_position{ Vec3f::Zero() }; + Marker marker; + }; + + enum class EViewType : unsigned char + { + FeatureType, + Height, + Width, + Feedrate, + FanSpeed, + VolumetricRate, + Tool, + ColorPrint, + Count + }; + +private: + bool m_initialized{ false }; + unsigned int m_last_result_id{ 0 }; + size_t m_moves_count{ 0 }; + mutable std::vector m_buffers{ static_cast(EMoveType::Extrude) }; + // bounding box of toolpaths + BoundingBoxf3 m_paths_bounding_box; + // bounding box of toolpaths + marker tools + BoundingBoxf3 m_max_bounding_box; + std::vector m_tool_colors; + std::vector m_layers_zs; + std::array m_layers_z_range; + std::vector m_roles; + std::vector m_extruder_ids; + mutable Extrusions m_extrusions; + mutable SequentialView m_sequential_view; + Shells m_shells; + EViewType m_view_type{ EViewType::FeatureType }; + bool m_legend_enabled{ true }; + PrintEstimatedTimeStatistics m_time_statistics; + mutable PrintEstimatedTimeStatistics::ETimeMode m_time_estimate_mode{ PrintEstimatedTimeStatistics::ETimeMode::Normal }; +#if ENABLE_GCODE_VIEWER_STATISTICS + mutable Statistics m_statistics; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + mutable std::array m_detected_point_sizes = { 0.0f, 0.0f }; + +public: + GCodeViewer() = default; + ~GCodeViewer() { reset(); } + + // extract rendering data from the given parameters + void load(const GCodeProcessor::Result& gcode_result, const Print& print, bool initialized); + // recalculate ranges in dependence of what is visible and sets tool/print colors + void refresh(const GCodeProcessor::Result& gcode_result, const std::vector& str_tool_colors); + + void reset(); + void render() const; + + bool has_data() const { return !m_roles.empty(); } + + const BoundingBoxf3& get_paths_bounding_box() const { return m_paths_bounding_box; } + const BoundingBoxf3& get_max_bounding_box() const { return m_max_bounding_box; } + const std::vector& get_layers_zs() const { return m_layers_zs; }; + + const SequentialView& get_sequential_view() const { return m_sequential_view; } + void update_sequential_view_current(unsigned int first, unsigned int last); + + EViewType get_view_type() const { return m_view_type; } + void set_view_type(EViewType type) { + if (type == EViewType::Count) + type = EViewType::FeatureType; + + m_view_type = type; + } + + bool is_toolpath_move_type_visible(EMoveType type) const; + void set_toolpath_move_type_visible(EMoveType type, bool visible); + unsigned int get_toolpath_role_visibility_flags() const { return m_extrusions.role_visibility_flags; } + void set_toolpath_role_visibility_flags(unsigned int flags) { m_extrusions.role_visibility_flags = flags; } + unsigned int get_options_visibility_flags() const; + void set_options_visibility_from_flags(unsigned int flags); + void set_layers_z_range(const std::array& layers_z_range); + + bool is_legend_enabled() const { return m_legend_enabled; } + void enable_legend(bool enable) { m_legend_enabled = enable; } + + void export_toolpaths_to_obj(const char* filename) const; + +private: + void init(); + void load_toolpaths(const GCodeProcessor::Result& gcode_result); + void load_shells(const Print& print, bool initialized); + void refresh_render_paths(bool keep_sequential_current_first, bool keep_sequential_current_last) const; + void render_toolpaths() const; + void render_shells() const; + void render_legend() const; +#if ENABLE_GCODE_VIEWER_STATISTICS + void render_statistics() const; +#endif // ENABLE_GCODE_VIEWER_STATISTICS + bool is_visible(ExtrusionRole role) const { + return role < erCount && (m_extrusions.role_visibility_flags & (1 << role)) != 0; + } + bool is_visible(const Path& path) const { return is_visible(path.role); } + void log_memory_used(const std::string& label, long long additional = 0) const; +}; + +} // namespace GUI +} // namespace Slic3r + +#endif // ENABLE_GCODE_VIEWER + +#endif // slic3r_GCodeViewer_hpp_ + diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b4e672c4fb..179a82c8a6 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5,7 +5,9 @@ #include "polypartition.h" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/PrintConfig.hpp" +#if !ENABLE_GCODE_VIEWER #include "libslic3r/GCode/PreviewData.hpp" +#endif // !ENABLE_GCODE_VIEWER #include "libslic3r/GCode/ThumbnailData.hpp" #include "libslic3r/Geometry.hpp" #include "libslic3r/ExtrusionEntity.hpp" @@ -13,11 +15,11 @@ #include "libslic3r/Utils.hpp" #include "libslic3r/Technologies.hpp" #include "libslic3r/Tesselate.hpp" +#include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/3DScene.hpp" #include "slic3r/GUI/BackgroundSlicingProcess.hpp" #include "slic3r/GUI/GLShader.hpp" #include "slic3r/GUI/GUI.hpp" -#include "slic3r/GUI/PresetBundle.hpp" #include "slic3r/GUI/Tab.hpp" #include "slic3r/GUI/GUI_Preview.hpp" #include "slic3r/GUI/OpenGLManager.hpp" @@ -31,6 +33,7 @@ #include "GUI_ObjectManipulation.hpp" #include "Mouse3DController.hpp" #include "I18N.hpp" +#include "NotificationManager.hpp" #if ENABLE_RETINA_GL #include "slic3r/Utils/RetinaHelper.hpp" @@ -157,11 +160,8 @@ GLCanvas3D::LayersEditing::~LayersEditing() const float GLCanvas3D::LayersEditing::THICKNESS_BAR_WIDTH = 70.0f; -bool GLCanvas3D::LayersEditing::init(const std::string& vertex_shader_filename, const std::string& fragment_shader_filename) +void GLCanvas3D::LayersEditing::init() { - if (!m_shader.init(vertex_shader_filename, fragment_shader_filename)) - return false; - glsafe(::glGenTextures(1, (GLuint*)&m_z_texture_id)); glsafe(::glBindTexture(GL_TEXTURE_2D, m_z_texture_id)); glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)); @@ -170,8 +170,6 @@ bool GLCanvas3D::LayersEditing::init(const std::string& vertex_shader_filename, glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST)); glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1)); glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); - - return true; } void GLCanvas3D::LayersEditing::set_config(const DynamicPrintConfig* config) @@ -204,7 +202,7 @@ void GLCanvas3D::LayersEditing::select_object(const Model &model, int object_id) bool GLCanvas3D::LayersEditing::is_allowed() const { - return m_shader.is_initialized() && m_shader.get_shader()->shader_program_id > 0 && m_z_texture_id > 0; + return wxGetApp().get_shader("variable_layer_height") != nullptr && m_z_texture_id > 0; } bool GLCanvas3D::LayersEditing::is_enabled() const @@ -217,64 +215,52 @@ void GLCanvas3D::LayersEditing::set_enabled(bool enabled) m_enabled = is_allowed() && enabled; } +float GLCanvas3D::LayersEditing::s_overelay_window_width; + void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const { if (!m_enabled) return; - static const ImVec4 ORANGE(1.0f, 0.49f, 0.22f, 1.0f); - const Size& cnv_size = canvas.get_canvas_size(); - float canvas_w = (float)cnv_size.get_width(); - float canvas_h = (float)cnv_size.get_height(); ImGuiWrapper& imgui = *wxGetApp().imgui(); - imgui.set_next_window_pos(canvas_w - imgui.get_style_scaling() * THICKNESS_BAR_WIDTH, canvas_h, ImGuiCond_Always, 1.0f, 1.0f); + imgui.set_next_window_pos(static_cast(cnv_size.get_width()) - imgui.get_style_scaling() * THICKNESS_BAR_WIDTH, + static_cast(cnv_size.get_height()), ImGuiCond_Always, 1.0f, 1.0f); - imgui.begin(_(L("Variable layer height")), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse); + imgui.begin(_L("Variable layer height"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse); - ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); - imgui.text(_(L("Left mouse button:"))); - ImGui::PopStyleColor(); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _L("Left mouse button:")); ImGui::SameLine(); - imgui.text(_(L("Add detail"))); + imgui.text(_L("Add detail")); - ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); - imgui.text(_(L("Right mouse button:"))); - ImGui::PopStyleColor(); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _L("Right mouse button:")); ImGui::SameLine(); - imgui.text(_(L("Remove detail"))); + imgui.text(_L("Remove detail")); - ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); - imgui.text(_(L("Shift + Left mouse button:"))); - ImGui::PopStyleColor(); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _L("Shift + Left mouse button:")); ImGui::SameLine(); - imgui.text(_(L("Reset to base"))); + imgui.text(_L("Reset to base")); - ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); - imgui.text(_(L("Shift + Right mouse button:"))); - ImGui::PopStyleColor(); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _L("Shift + Right mouse button:")); ImGui::SameLine(); - imgui.text(_(L("Smoothing"))); + imgui.text(_L("Smoothing")); - ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); - imgui.text(_(L("Mouse wheel:"))); - ImGui::PopStyleColor(); + imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _L("Mouse wheel:")); ImGui::SameLine(); - imgui.text(_(L("Increase/decrease edit area"))); + imgui.text(_L("Increase/decrease edit area")); ImGui::Separator(); - if (imgui.button(_(L("Adaptive")))) + if (imgui.button(_L("Adaptive"))) wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), Event(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, m_adaptive_quality)); ImGui::SameLine(); float text_align = ImGui::GetCursorPosX(); ImGui::AlignTextToFramePadding(); - imgui.text(_(L("Quality / Speed"))); - if (ImGui::IsItemHovered()) - { + imgui.text(_L("Quality / Speed")); + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); - ImGui::TextUnformatted(_(L("Higher print quality versus higher print speed.")).ToUTF8()); + ImGui::TextUnformatted(_L("Higher print quality versus higher print speed.").ToUTF8()); ImGui::EndTooltip(); } @@ -285,13 +271,13 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const ImGui::SliderFloat("", &m_adaptive_quality, 0.0f, 1.f, "%.2f"); ImGui::Separator(); - if (imgui.button(_(L("Smooth")))) + if (imgui.button(_L("Smooth"))) wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), HeightProfileSmoothEvent(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, m_smooth_params)); ImGui::SameLine(); ImGui::SetCursorPosX(text_align); ImGui::AlignTextToFramePadding(); - imgui.text(_(L("Radius"))); + imgui.text(_L("Radius")); ImGui::SameLine(); ImGui::SetCursorPosX(widget_align); ImGui::PushItemWidth(imgui.get_style_scaling() * 120.0f); @@ -301,7 +287,7 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const ImGui::SetCursorPosX(text_align); ImGui::AlignTextToFramePadding(); - imgui.text(_(L("Keep min"))); + imgui.text(_L("Keep min")); ImGui::SameLine(); if (ImGui::GetCursorPosX() < widget_align) // because of line lenght after localization ImGui::SetCursorPosX(widget_align); @@ -310,9 +296,10 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const imgui.checkbox("##2", m_smooth_params.keep_min); ImGui::Separator(); - if (imgui.button(_(L("Reset")))) + if (imgui.button(_L("Reset"))) wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), SimpleEvent(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE)); + GLCanvas3D::LayersEditing::s_overelay_window_width = ImGui::GetWindowSize().x /*+ (float)m_layers_texture.width/4*/; imgui.end(); const Rect& bar_rect = get_bar_rect_viewport(canvas); @@ -362,7 +349,7 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas) bool GLCanvas3D::LayersEditing::is_initialized() const { - return m_shader.is_initialized(); + return wxGetApp().get_shader("variable_layer_height") != nullptr; } std::string GLCanvas3D::LayersEditing::get_tooltip(const GLCanvas3D& canvas) const @@ -396,13 +383,17 @@ std::string GLCanvas3D::LayersEditing::get_tooltip(const GLCanvas3D& canvas) con void GLCanvas3D::LayersEditing::render_active_object_annotations(const GLCanvas3D& canvas, const Rect& bar_rect) const { - m_shader.start_using(); + GLShaderProgram* shader = wxGetApp().get_shader("variable_layer_height"); + if (shader == nullptr) + return; - m_shader.set_uniform("z_to_texture_row", float(m_layers_texture.cells - 1) / (float(m_layers_texture.width) * m_object_max_z)); - m_shader.set_uniform("z_texture_row_to_normalized", 1.0f / (float)m_layers_texture.height); - m_shader.set_uniform("z_cursor", m_object_max_z * this->get_cursor_z_relative(canvas)); - m_shader.set_uniform("z_cursor_band_width", band_width); - m_shader.set_uniform("object_max_z", m_object_max_z); + shader->start_using(); + + shader->set_uniform("z_to_texture_row", float(m_layers_texture.cells - 1) / (float(m_layers_texture.width) * m_object_max_z)); + shader->set_uniform("z_texture_row_to_normalized", 1.0f / (float)m_layers_texture.height); + shader->set_uniform("z_cursor", m_object_max_z * this->get_cursor_z_relative(canvas)); + shader->set_uniform("z_cursor_band_width", band_width); + shader->set_uniform("object_max_z", m_object_max_z); glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); glsafe(::glBindTexture(GL_TEXTURE_2D, m_z_texture_id)); @@ -422,7 +413,7 @@ void GLCanvas3D::LayersEditing::render_active_object_annotations(const GLCanvas3 glsafe(::glEnd()); glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); - m_shader.stop_using(); + shader->stop_using(); } void GLCanvas3D::LayersEditing::render_profile(const Rect& bar_rect) const @@ -456,73 +447,50 @@ void GLCanvas3D::LayersEditing::render_volumes(const GLCanvas3D& canvas, const G { assert(this->is_allowed()); assert(this->last_object_id != -1); - GLint shader_id = m_shader.get_shader()->shader_program_id; - assert(shader_id > 0); + GLShaderProgram* shader = wxGetApp().get_shader("variable_layer_height"); + if (shader == nullptr) + return; - GLint current_program_id; - glsafe(::glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_program_id)); - if (shader_id > 0 && shader_id != current_program_id) + GLShaderProgram* current_shader = wxGetApp().get_current_shader(); + if (shader->get_id() != current_shader->get_id()) // The layer editing shader is not yet active. Activate it. - glsafe(::glUseProgram(shader_id)); + shader->start_using(); else // The layer editing shader was already active. - current_program_id = -1; + current_shader = nullptr; - GLint z_to_texture_row_id = ::glGetUniformLocation(shader_id, "z_to_texture_row"); - GLint z_texture_row_to_normalized_id = ::glGetUniformLocation(shader_id, "z_texture_row_to_normalized"); - GLint z_cursor_id = ::glGetUniformLocation(shader_id, "z_cursor"); - GLint z_cursor_band_width_id = ::glGetUniformLocation(shader_id, "z_cursor_band_width"); - GLint world_matrix_id = ::glGetUniformLocation(shader_id, "volume_world_matrix"); - GLint object_max_z_id = ::glGetUniformLocation(shader_id, "object_max_z"); - glcheck(); + const_cast(this)->generate_layer_height_texture(); - if (z_to_texture_row_id != -1 && z_texture_row_to_normalized_id != -1 && z_cursor_id != -1 && z_cursor_band_width_id != -1 && world_matrix_id != -1) - { - const_cast(this)->generate_layer_height_texture(); + // Uniforms were resolved, go ahead using the layer editing shader. + shader->set_uniform("z_to_texture_row", float(m_layers_texture.cells - 1) / (float(m_layers_texture.width) * float(m_object_max_z))); + shader->set_uniform("z_texture_row_to_normalized", 1.0f / float(m_layers_texture.height)); + shader->set_uniform("z_cursor", float(m_object_max_z) * float(this->get_cursor_z_relative(canvas))); + shader->set_uniform("z_cursor_band_width", float(this->band_width)); - // Uniforms were resolved, go ahead using the layer editing shader. - glsafe(::glUniform1f(z_to_texture_row_id, GLfloat(m_layers_texture.cells - 1) / (GLfloat(m_layers_texture.width) * GLfloat(m_object_max_z)))); - glsafe(::glUniform1f(z_texture_row_to_normalized_id, GLfloat(1.0f / m_layers_texture.height))); - glsafe(::glUniform1f(z_cursor_id, GLfloat(m_object_max_z) * GLfloat(this->get_cursor_z_relative(canvas)))); - glsafe(::glUniform1f(z_cursor_band_width_id, GLfloat(this->band_width))); - // Initialize the layer height texture mapping. - GLsizei w = (GLsizei)m_layers_texture.width; - GLsizei h = (GLsizei)m_layers_texture.height; - GLsizei half_w = w / 2; - GLsizei half_h = h / 2; - glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); - glsafe(::glBindTexture(GL_TEXTURE_2D, m_z_texture_id)); - glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)); - glsafe(::glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, half_w, half_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)); - glsafe(::glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, m_layers_texture.data.data())); - glsafe(::glTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, half_w, half_h, GL_RGBA, GL_UNSIGNED_BYTE, m_layers_texture.data.data() + m_layers_texture.width * m_layers_texture.height * 4)); - for (const GLVolume* glvolume : volumes.volumes) { - // Render the object using the layer editing shader and texture. - if (! glvolume->is_active || glvolume->composite_id.object_id != this->last_object_id || glvolume->is_modifier) - continue; - if (world_matrix_id != -1) - glsafe(::glUniformMatrix4fv(world_matrix_id, 1, GL_FALSE, (const GLfloat*)glvolume->world_matrix().cast().data())); - if (object_max_z_id != -1) - glsafe(::glUniform1f(object_max_z_id, GLfloat(0))); - glvolume->render(); - } - // Revert back to the previous shader. - glBindTexture(GL_TEXTURE_2D, 0); - if (current_program_id > 0) - glsafe(::glUseProgram(current_program_id)); - } - else - { - // Something went wrong. Just render the object. - assert(false); - for (const GLVolume* glvolume : volumes.volumes) { - // Render the object using the layer editing shader and texture. - if (!glvolume->is_active || glvolume->composite_id.object_id != this->last_object_id || glvolume->is_modifier) - continue; - glsafe(::glUniformMatrix4fv(world_matrix_id, 1, GL_FALSE, (const GLfloat*)glvolume->world_matrix().cast().data())); - glvolume->render(); - } - } + // Initialize the layer height texture mapping. + GLsizei w = (GLsizei)m_layers_texture.width; + GLsizei h = (GLsizei)m_layers_texture.height; + GLsizei half_w = w / 2; + GLsizei half_h = h / 2; + glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); + glsafe(::glBindTexture(GL_TEXTURE_2D, m_z_texture_id)); + glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)); + glsafe(::glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, half_w, half_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)); + glsafe(::glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, m_layers_texture.data.data())); + glsafe(::glTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, half_w, half_h, GL_RGBA, GL_UNSIGNED_BYTE, m_layers_texture.data.data() + m_layers_texture.width * m_layers_texture.height * 4)); + for (const GLVolume* glvolume : volumes.volumes) { + // Render the object using the layer editing shader and texture. + if (! glvolume->is_active || glvolume->composite_id.object_id != this->last_object_id || glvolume->is_modifier) + continue; + + shader->set_uniform("volume_world_matrix", glvolume->world_matrix()); + shader->set_uniform("object_max_z", GLfloat(0)); + glvolume->render(); + } + // Revert back to the previous shader. + glBindTexture(GL_TEXTURE_2D, 0); + if (current_shader != nullptr) + current_shader->start_using(); } void GLCanvas3D::LayersEditing::adjust_layer_height_profile() @@ -546,7 +514,7 @@ void GLCanvas3D::LayersEditing::adaptive_layer_height_profile(GLCanvas3D& canvas { this->update_slicing_parameters(); m_layer_height_profile = layer_height_profile_adaptive(*m_slicing_parameters, *m_model_object, quality_factor); - const_cast(m_model_object)->layer_height_profile = m_layer_height_profile; + const_cast(m_model_object)->layer_height_profile.set(m_layer_height_profile); m_layers_texture.valid = false; canvas.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); } @@ -555,7 +523,7 @@ void GLCanvas3D::LayersEditing::smooth_layer_height_profile(GLCanvas3D& canvas, { this->update_slicing_parameters(); m_layer_height_profile = smooth_height_profile(m_layer_height_profile, *m_slicing_parameters, smoothing_params); - const_cast(m_model_object)->layer_height_profile = m_layer_height_profile; + const_cast(m_model_object)->layer_height_profile.set(m_layer_height_profile); m_layers_texture.valid = false; canvas.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); } @@ -595,7 +563,7 @@ void GLCanvas3D::LayersEditing::accept_changes(GLCanvas3D& canvas) if (last_object_id >= 0) { if (m_layer_height_profile_modified) { wxGetApp().plater()->take_snapshot(_(L("Variable layer height - Manual edit"))); - const_cast(m_model_object)->layer_height_profile = m_layer_height_profile; + const_cast(m_model_object)->layer_height_profile.set(m_layer_height_profile); canvas.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); } } @@ -655,13 +623,44 @@ GLCanvas3D::WarningTexture::WarningTexture() void GLCanvas3D::WarningTexture::activate(WarningTexture::Warning warning, bool state, const GLCanvas3D& canvas) { + // Since we have NotificationsManager.hpp the warning textures are no loger needed. + // However i have left the infrastructure here and only commented the rendering. + // The plater warning / error notifications are added and closed from here. + + std::string text; + bool error = false; + switch (warning) { + case ObjectOutside: text = L("An object outside the print area was detected."); break; + case ToolpathOutside: text = L("A toolpath outside the print area was detected."); error = true; break; + case SlaSupportsOutside: text = L("SLA supports outside the print area were detected."); error = true; break; + case SomethingNotShown: text = L("Some objects are not visible."); break; + case ObjectClashed: + text = L( "An object outside the print area was detected.\n" + "Resolve the current problem to continue slicing."); + error = true; + break; + } + auto ¬ification_manager = *wxGetApp().plater()->get_notification_manager(); + if (state) { + if(error) + notification_manager.push_plater_error_notification(text,*(wxGetApp().plater()->get_current_canvas3D())); + else + notification_manager.push_plater_warning_notification(text, *(wxGetApp().plater()->get_current_canvas3D())); + } else { + if (error) + notification_manager.close_plater_error_notification(text); + else + notification_manager.close_plater_warning_notification(text); + } + + /* auto it = std::find(m_warnings.begin(), m_warnings.end(), warning); if (state) { if (it != m_warnings.end()) // this warning is already set to be shown return; - m_warnings.emplace_back(warning); + m_warnings.push_back(warning); std::sort(m_warnings.begin(), m_warnings.end()); } else { @@ -683,7 +682,7 @@ void GLCanvas3D::WarningTexture::activate(WarningTexture::Warning warning, bool case ObjectOutside : text = L("An object outside the print area was detected"); break; case ToolpathOutside : text = L("A toolpath outside the print area was detected"); break; case SlaSupportsOutside : text = L("SLA supports outside the print area were detected"); break; - case SomethingNotShown : text = L("Some objects are not visible"); break; + case SomethingNotShown : text = L("Some objects are not visible when editing supports"); break; case ObjectClashed: { text = L("An object outside the print area was detected\n" "Resolve the current problem to continue slicing"); @@ -697,6 +696,7 @@ void GLCanvas3D::WarningTexture::activate(WarningTexture::Warning warning, bool // save information for rescaling m_msg_text = text; m_is_colored_red = red_colored; + */ } @@ -883,6 +883,7 @@ void GLCanvas3D::WarningTexture::msw_rescale(const GLCanvas3D& canvas) generate(m_msg_text, canvas, true, m_is_colored_red); } +#if !ENABLE_GCODE_VIEWER const unsigned char GLCanvas3D::LegendTexture::Squares_Border_Color[3] = { 64, 64, 64 }; const unsigned char GLCanvas3D::LegendTexture::Default_Background_Color[3] = { (unsigned char)(DEFAULT_BG_LIGHT_COLOR[0] * 255.0f), (unsigned char)(DEFAULT_BG_LIGHT_COLOR[1] * 255.0f), (unsigned char)(DEFAULT_BG_LIGHT_COLOR[2] * 255.0f) }; const unsigned char GLCanvas3D::LegendTexture::Error_Background_Color[3] = { (unsigned char)(ERROR_BG_LIGHT_COLOR[0] * 255.0f), (unsigned char)(ERROR_BG_LIGHT_COLOR[1] * 255.0f), (unsigned char)(ERROR_BG_LIGHT_COLOR[2] * 255.0f) }; @@ -1241,6 +1242,7 @@ void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const GLTexture::render_sub_texture(m_id, left, right, bottom, top, uvs); } } +#endif // !ENABLE_GCODE_VIEWER void GLCanvas3D::Labels::render(const std::vector& sorted_instances) const { @@ -1413,7 +1415,7 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas ImGui::PushStyleVar(ImGuiStyleVar_Alpha, alpha); imgui.set_next_window_pos(position(0), position(1), ImGuiCond_Always, 0.0f, 0.0f); - imgui.begin(_(L("canvas_tooltip")), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing); + imgui.begin(_L("canvas_tooltip"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing); ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); ImGui::TextUnformatted(m_text.c_str()); @@ -1427,73 +1429,7 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas ImGui::PopStyleVar(2); } -#if ENABLE_SLOPE_RENDERING -void GLCanvas3D::Slope::render() const -{ - if (m_dialog_shown) - { - const std::array& z_range = m_volumes.get_slope_z_range(); - std::array angle_range = { Geometry::rad2deg(::acos(z_range[0])) - 90.0f, Geometry::rad2deg(::acos(z_range[1])) - 90.0f }; - bool modified = false; - - ImGuiWrapper& imgui = *wxGetApp().imgui(); - const Size& cnv_size = m_canvas.get_canvas_size(); - imgui.set_next_window_pos((float)cnv_size.get_width(), (float)cnv_size.get_height(), ImGuiCond_Always, 1.0f, 1.0f); - imgui.begin(_(L("Slope visualization")), nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); - - imgui.text(_(L("Facets' slope range (degrees)")) + ":"); - - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.75f, 0.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(1.0f, 0.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.85f, 0.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.25f, 0.0f, 0.0f, 1.0f)); - - // angle_range is range of normal angle, GUI should - // show facet slope angle - float slope_bound = 90.f - angle_range[1]; - bool mod = ImGui::SliderFloat("##red", &slope_bound, 0.0f, 90.0f, "%.1f"); - angle_range[1] = 90.f - slope_bound; - if (mod) - { - modified = true; - if (angle_range[0] > angle_range[1]) - angle_range[0] = angle_range[1]; - } - - ImGui::PopStyleColor(4); - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.75f, 0.75f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(1.0f, 1.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.85f, 0.85f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.25f, 0.25f, 0.0f, 1.0f)); - - slope_bound = 90.f - angle_range[0]; - mod = ImGui::SliderFloat("##yellow", &slope_bound, 0.0f, 90.0f, "%.1f"); - angle_range[0] = 90.f - slope_bound; - if (mod) - { - modified = true; - if (angle_range[1] < angle_range[0]) - angle_range[1] = angle_range[0]; - } - - ImGui::PopStyleColor(4); - - ImGui::Separator(); - - if (imgui.button(_(L("Default")))) - m_volumes.set_default_slope_z_range(); - - // to let the dialog immediately showup without waiting for a mouse move - if (ImGui::GetWindowContentRegionWidth() + 2.0f * ImGui::GetStyle().WindowPadding.x != ImGui::CalcWindowExpectedSize(ImGui::GetCurrentWindow()).x) - m_canvas.request_extra_frame(); - - imgui.end(); - - if (modified) - set_range(angle_range); - } - } -#endif // ENABLE_SLOPE_RENDERING +float GLCanvas3D::Slope::s_window_width; wxDEFINE_EVENT(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_OBJECT_SELECT, SimpleEvent); @@ -1515,7 +1451,11 @@ wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent); +#if ENABLE_GCODE_VIEWER +wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent); +#else wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, wxKeyEvent); +#endif // ENABLE_GCODE_VIEWER wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent); wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent); @@ -1546,7 +1486,9 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) , m_dirty(true) , m_initialized(false) , m_apply_zoom_to_volumes_filter(false) +#if !ENABLE_GCODE_VIEWER , m_legend_texture_enabled(false) +#endif // !ENABLE_GCODE_VIEWER , m_picking_enabled(false) , m_moving_enabled(false) , m_dynamic_background_enabled(false) @@ -1561,9 +1503,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) #endif // ENABLE_RENDER_PICKING_PASS , m_render_sla_auxiliaries(true) , m_labels(*this) -#if ENABLE_SLOPE_RENDERING , m_slope(*this, m_volumes) -#endif // ENABLE_SLOPE_RENDERING { if (m_canvas != nullptr) { m_timer.SetOwner(m_canvas); @@ -1591,7 +1531,7 @@ bool GLCanvas3D::init() if (m_initialized) return true; - if ((m_canvas == nullptr) || (m_context == nullptr)) + if (m_canvas == nullptr || m_context == nullptr) return false; glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); @@ -1637,17 +1577,8 @@ bool GLCanvas3D::init() if (m_multisample_allowed) glsafe(::glEnable(GL_MULTISAMPLE)); - if (!m_shader.init("gouraud.vs", "gouraud.fs")) - { - std::cout << "Unable to initialize gouraud shader: please, check that the files gouraud.vs and gouraud.fs are available" << std::endl; - return false; - } - - if (m_main_toolbar.is_enabled() && !m_layers_editing.init("variable_layer_height.vs", "variable_layer_height.fs")) - { - std::cout << "Unable to initialize variable_layer_height shader: please, check that the files variable_layer_height.vs and variable_layer_height.fs are available" << std::endl; - return false; - } + if (m_main_toolbar.is_enabled()) + m_layers_editing.init(); // on linux the gl context is not valid until the canvas is not shown on screen // we defer the geometry finalization of volumes until the first call to render() @@ -1725,7 +1656,20 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject if ((mo == nullptr || m_model->objects[vol->composite_id.object_id] == mo) && (instance_idx == -1 || vol->composite_id.instance_id == instance_idx)) { vol->is_active = visible; - vol->force_native_color = (instance_idx != -1); + + if (instance_idx == -1) { + vol->force_native_color = false; + vol->force_neutral_color = false; + } else { + const GLGizmosManager& gm = get_gizmos_manager(); + auto gizmo_type = gm.get_current_type(); + if ( (gizmo_type == GLGizmosManager::FdmSupports + || gizmo_type == GLGizmosManager::Seam) + && ! vol->is_modifier) + vol->force_neutral_color = true; + else + vol->force_native_color = true; + } } } } @@ -1860,11 +1804,6 @@ bool GLCanvas3D::is_reload_delayed() const void GLCanvas3D::enable_layers_editing(bool enable) { -#if ENABLE_SLOPE_RENDERING - if (enable && m_slope.is_dialog_shown()) - m_slope.show_dialog(false); -#endif // ENABLE_SLOPE_RENDERING - m_layers_editing.set_enabled(enable); const Selection::IndicesList& idxs = m_selection.get_volume_idxs(); for (unsigned int idx : idxs) @@ -1879,7 +1818,11 @@ void GLCanvas3D::enable_layers_editing(bool enable) void GLCanvas3D::enable_legend_texture(bool enable) { +#if ENABLE_GCODE_VIEWER + m_gcode_viewer.enable_legend(enable); +#else m_legend_texture_enabled = enable; +#endif // ENABLE_GCODE_VIEWER } void GLCanvas3D::enable_picking(bool enable) @@ -1941,6 +1884,13 @@ void GLCanvas3D::zoom_to_selection() _zoom_to_box(m_selection.get_bounding_box()); } +#if ENABLE_GCODE_VIEWER +void GLCanvas3D::zoom_to_gcode() +{ + _zoom_to_box(m_gcode_viewer.get_paths_bounding_box(), 1.05); +} +#endif // ENABLE_GCODE_VIEWER + void GLCanvas3D::select_view(const std::string& direction) { wxGetApp().plater()->get_camera().select_view(direction); @@ -1989,7 +1939,10 @@ void GLCanvas3D::render() } #if ENABLE_ENVIRONMENT_MAP - wxGetApp().plater()->init_environment_texture(); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER + wxGetApp().plater()->init_environment_texture(); #endif // ENABLE_ENVIRONMENT_MAP const Size& cnv_size = get_canvas_size(); @@ -2036,6 +1989,10 @@ void GLCanvas3D::render() _render_background(); _render_objects(); +#if ENABLE_GCODE_VIEWER + if (!m_main_toolbar.is_enabled()) + _render_gcode(); +#endif // ENABLE_GCODE_VIEWER _render_sla_slices(); _render_selection(); _render_bed(!camera.is_looking_downward(), true); @@ -2047,6 +2004,9 @@ void GLCanvas3D::render() // we need to set the mouse's scene position here because the depth buffer // could be invalidated by the following gizmo render methods // this position is used later into on_mouse() to drag the objects +#if ENABLE_GCODE_VIEWER + if (m_picking_enabled) +#endif // ENABLE_GCODE_VIEWER m_mouse.scene_position = _mouse_to_3d(m_mouse.position.cast()); _render_current_gizmo(); @@ -2084,11 +2044,13 @@ void GLCanvas3D::render() #endif // ENABLE_RENDER_STATISTICS #if ENABLE_CAMERA_STATISTICS - m_camera.debug_render(); + camera.debug_render(); #endif // ENABLE_CAMERA_STATISTICS std::string tooltip; + + // Negative coordinate means out of the window, likely because the window was deactivated. // In that case the tooltip should be hidden. if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.) @@ -2118,6 +2080,8 @@ void GLCanvas3D::render() m_tooltip.render(m_mouse.position, *this); wxGetApp().plater()->get_mouse3d_controller().render_settings_dialog(*this); + + wxGetApp().plater()->get_notification_manager()->render_notifications(*this, get_overlay_window_width()); wxGetApp().imgui()->render(); @@ -2187,6 +2151,40 @@ void GLCanvas3D::ensure_on_bed(unsigned int object_idx) } } + +#if ENABLE_GCODE_VIEWER +const std::vector& GLCanvas3D::get_gcode_layers_zs() const +{ + return m_gcode_viewer.get_layers_zs(); +} + +std::vector GLCanvas3D::get_volumes_print_zs(bool active_only) const +{ + return m_volumes.get_current_print_zs(active_only); +} + +void GLCanvas3D::set_gcode_options_visibility_from_flags(unsigned int flags) +{ + m_gcode_viewer.set_options_visibility_from_flags(flags); +} + +void GLCanvas3D::set_toolpath_role_visibility_flags(unsigned int flags) +{ + m_gcode_viewer.set_toolpath_role_visibility_flags(flags); +} + +void GLCanvas3D::set_toolpath_view_type(GCodeViewer::EViewType type) +{ + m_gcode_viewer.set_view_type(type); +} + +void GLCanvas3D::set_toolpaths_z_range(const std::array& range) +{ + m_volumes.set_range(range[0] - 1e-6, range[1] + 1e-6); + if (m_gcode_viewer.has_data()) + m_gcode_viewer.set_layers_z_range(range); +} +#else std::vector GLCanvas3D::get_current_print_zs(bool active_only) const { return m_volumes.get_current_print_zs(active_only); @@ -2196,6 +2194,7 @@ void GLCanvas3D::set_toolpaths_range(double low, double high) { m_volumes.set_range(low, high); } +#endif // ENABLE_GCODE_VIEWER std::vector GLCanvas3D::load_object(const ModelObject& model_object, int obj_idx, std::vector instance_idxs) { @@ -2593,6 +2592,8 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re _set_warning_texture(WarningTexture::ObjectClashed, state == ModelInstancePVS_Partly_Outside); _set_warning_texture(WarningTexture::ObjectOutside, state == ModelInstancePVS_Fully_Outside); + if(printer_technology != ptSLA || state == ModelInstancePVS_Inside) + _set_warning_texture(WarningTexture::SlaSupportsOutside, false); post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, contained_min_one && !m_model->objects.empty() && state != ModelInstancePVS_Partly_Outside)); @@ -2601,6 +2602,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re { _set_warning_texture(WarningTexture::ObjectOutside, false); _set_warning_texture(WarningTexture::ObjectClashed, false); + _set_warning_texture(WarningTexture::SlaSupportsOutside, false); post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false)); } @@ -2638,6 +2640,7 @@ static void reserve_new_volume_finalize_old_volume(GLVolume& vol_new, GLVolume& vol_old.finalize_geometry(gl_initialized); } +#if !ENABLE_GCODE_VIEWER static void load_gcode_retractions(const GCodePreviewData::Retraction& retractions, GLCanvas3D::GCodePreviewVolumeIndex::EType extrusion_type, GLVolumeCollection &volumes, GLCanvas3D::GCodePreviewVolumeIndex &volume_index, bool gl_initialized) { // nothing to render, return @@ -2668,7 +2671,23 @@ static void load_gcode_retractions(const GCodePreviewData::Retraction& retractio } volume->indexed_vertex_array.finalize_geometry(gl_initialized); } +#endif // !ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER +void GLCanvas3D::load_gcode_preview(const GCodeProcessor::Result& gcode_result) +{ + m_gcode_viewer.load(gcode_result, *this->fff_print(), m_initialized); + if (wxGetApp().is_editor()) + _show_warning_texture_if_needed(WarningTexture::ToolpathOutside); +} + +void GLCanvas3D::refresh_gcode_preview(const GCodeProcessor::Result& gcode_result, const std::vector& str_tool_colors) +{ + m_gcode_viewer.refresh(gcode_result, str_tool_colors); + set_as_dirty(); + request_extra_frame(); +} +#else void GLCanvas3D::load_gcode_preview(const GCodePreviewData& preview_data, const std::vector& str_tool_colors) { const Print *print = this->fff_print(); @@ -2737,6 +2756,7 @@ void GLCanvas3D::load_gcode_preview(const GCodePreviewData& preview_data, const _generate_legend_texture(preview_data, tool_colors); } } +#endif // ENABLE_GCODE_VIEWER void GLCanvas3D::load_sla_preview() { @@ -2770,6 +2790,7 @@ void GLCanvas3D::load_preview(const std::vector& str_tool_colors, c _update_toolpath_volumes_outside_state(); _show_warning_texture_if_needed(WarningTexture::ToolpathOutside); +#if !ENABLE_GCODE_VIEWER if (color_print_values.empty()) reset_legend_texture(); else { @@ -2778,12 +2799,12 @@ void GLCanvas3D::load_preview(const std::vector& str_tool_colors, c const std::vector tool_colors = _parse_colors(str_tool_colors); _generate_legend_texture(preview_data, tool_colors); } +#endif // !ENABLE_GCODE_VIEWER } void GLCanvas3D::bind_event_handlers() { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr) { m_canvas->Bind(wxEVT_SIZE, &GLCanvas3D::on_size, this); m_canvas->Bind(wxEVT_IDLE, &GLCanvas3D::on_idle, this); m_canvas->Bind(wxEVT_CHAR, &GLCanvas3D::on_char, this); @@ -2805,13 +2826,14 @@ void GLCanvas3D::bind_event_handlers() m_canvas->Bind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Bind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Bind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); + + m_event_handlers_bound = true; } } void GLCanvas3D::unbind_event_handlers() { - if (m_canvas != nullptr) - { + if (m_canvas != nullptr && m_event_handlers_bound) { m_canvas->Unbind(wxEVT_SIZE, &GLCanvas3D::on_size, this); m_canvas->Unbind(wxEVT_IDLE, &GLCanvas3D::on_idle, this); m_canvas->Unbind(wxEVT_CHAR, &GLCanvas3D::on_char, this); @@ -2833,6 +2855,8 @@ void GLCanvas3D::unbind_event_handlers() m_canvas->Unbind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Unbind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Unbind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); + + m_event_handlers_bound = false; } } @@ -2858,8 +2882,7 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt) _refresh_if_shown_on_screen(); - if (m_extra_frame_requested || mouse3d_controller_applied) - { + if (m_extra_frame_requested || mouse3d_controller_applied) { m_dirty = true; m_extra_frame_requested = false; evt.RequestMore(); @@ -2998,35 +3021,52 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case 'a': { post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); break; } case 'B': case 'b': { zoom_to_bed(); break; } -#if ENABLE_SLOPE_RENDERING - case 'D': - case 'd': { - if (!is_layers_editing_enabled()) - { - m_slope.show_dialog(!m_slope.is_dialog_shown()); - m_dirty = true; - } - break; - } -#endif // ENABLE_SLOPE_RENDERING case 'E': case 'e': { m_labels.show(!m_labels.is_shown()); m_dirty = true; break; } case 'I': case 'i': { _update_camera_zoom(1.0); break; } case 'K': case 'k': { wxGetApp().plater()->get_camera().select_next_type(); m_dirty = true; break; } +#if ENABLE_GCODE_VIEWER + case 'L': + case 'l': { + if (!m_main_toolbar.is_enabled()) { + m_gcode_viewer.enable_legend(!m_gcode_viewer.is_legend_enabled()); + m_dirty = true; + wxGetApp().plater()->update_preview_bottom_toolbar(); + } + break; + } +#endif // ENABLE_GCODE_VIEWER case 'O': case 'o': { _update_camera_zoom(-1.0); break; } #if ENABLE_RENDER_PICKING_PASS - case 'T': - case 't': { + case 'P': + case 'p': { m_show_picking_texture = !m_show_picking_texture; - m_dirty = true; + m_dirty = true; break; } #endif // ENABLE_RENDER_PICKING_PASS case 'Z': +#if ENABLE_GCODE_VIEWER + case 'z': + { + if (!m_selection.is_empty()) + zoom_to_selection(); + else + { + if (!m_volumes.empty()) + zoom_to_volumes(); + else + _zoom_to_box(m_gcode_viewer.get_paths_bounding_box()); + } + + break; + } +#else case 'z': { m_selection.is_empty() ? zoom_to_volumes() : zoom_to_selection(); break; } +#endif // ENABLE_GCODE_VIEWER default: { evt.Skip(); break; } } } @@ -3169,6 +3209,10 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) // m_canvas->HandleAsNavigationKey(evt); // XXX: Doesn't work in some cases / on Linux post_event(SimpleEvent(EVT_GLCANVAS_TAB)); } + else if (keyCode == WXK_TAB && evt.ShiftDown()) { + // Collapse side-panel with Shift+Tab + post_event(SimpleEvent(EVT_GLCANVAS_COLLAPSE_SIDEBAR)); + } else if (keyCode == WXK_SHIFT) { translationProcessor.process(evt); @@ -3269,7 +3313,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) keyCode == WXK_DOWN) { if (dynamic_cast(m_canvas->GetParent()) != nullptr) +#if ENABLE_GCODE_VIEWER + post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, evt)); +#else post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, evt)); +#endif // ENABLE_GCODE_VIEWER } } } @@ -3300,6 +3348,11 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) if (evt.MiddleIsDown()) return; + if (wxGetApp().imgui()->update_mouse_data(evt)) { + m_dirty = true; + return; + } + #if ENABLE_RETINA_GL const float scale = m_retina_helper->get_scale_factor(); evt.SetX(evt.GetX() * scale); @@ -3428,6 +3481,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) #ifdef SLIC3R_DEBUG_MOUSE_EVENTS printf((format_mouse_event_debug_message(evt) + " - Consumed by ImGUI\n").c_str()); #endif /* SLIC3R_DEBUG_MOUSE_EVENTS */ + m_dirty = true; // do not return if dragging or tooltip not empty to allow for tooltip update if (!m_mouse.dragging && m_tooltip.is_empty()) return; @@ -3451,40 +3505,35 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) #endif /* SLIC3R_DEBUG_MOUSE_EVENTS */ } - if (m_main_toolbar.on_mouse(evt, *this)) - { + if (m_main_toolbar.on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (m_undoredo_toolbar.on_mouse(evt, *this)) - { + if (m_undoredo_toolbar.on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (wxGetApp().plater()->get_collapse_toolbar().on_mouse(evt, *this)) - { + if (wxGetApp().plater()->get_collapse_toolbar().on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (wxGetApp().plater()->get_view_toolbar().on_mouse(evt, *this)) - { + if (wxGetApp().plater()->get_view_toolbar().on_mouse(evt, *this)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); m_mouse.set_start_position_3D_as_invalid(); return; } - if (m_gizmos.on_mouse(evt)) - { + if (m_gizmos.on_mouse(evt)) { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); @@ -3493,12 +3542,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; } + bool any_gizmo_active = m_gizmos.get_current() != nullptr; + int selected_object_idx = m_selection.get_object_idx(); int layer_editing_object_idx = is_layers_editing_enabled() ? selected_object_idx : -1; m_layers_editing.select_object(*m_model, layer_editing_object_idx); - if (m_mouse.drag.move_requires_threshold && m_mouse.is_move_start_threshold_position_2D_defined() && m_mouse.is_move_threshold_met(pos)) - { + if (m_mouse.drag.move_requires_threshold && m_mouse.is_move_start_threshold_position_2D_defined() && m_mouse.is_move_threshold_met(pos)) { m_mouse.drag.move_requires_threshold = false; m_mouse.set_move_start_threshold_position_2D_as_invalid(); } @@ -3507,8 +3557,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // Grab keyboard focus on any mouse click event. m_canvas->SetFocus(); - if (evt.Entering()) - { + if (evt.Entering()) { //#if defined(__WXMSW__) || defined(__linux__) // // On Windows and Linux needs focus in order to catch key events // Set focus in order to remove it from sidebar fields @@ -3533,48 +3582,41 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.set_start_position_2D_as_invalid(); //#endif } - else if (evt.Leaving()) - { + else if (evt.Leaving()) { _deactivate_undo_redo_toolbar_items(); // to remove hover on objects when the mouse goes out of this canvas m_mouse.position = Vec2d(-1.0, -1.0); m_dirty = true; } - else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) - { + else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) { if (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item()) return; // If user pressed left or right button we first check whether this happened // on a volume or not. m_layers_editing.state = LayersEditing::Unknown; - if ((layer_editing_object_idx != -1) && m_layers_editing.bar_rect_contains(*this, pos(0), pos(1))) - { + if (layer_editing_object_idx != -1 && m_layers_editing.bar_rect_contains(*this, pos(0), pos(1))) { // A volume is selected and the mouse is inside the layer thickness bar. // Start editing the layer height. m_layers_editing.state = LayersEditing::Editing; _perform_layer_editing_action(&evt); } - else if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) - { + else if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) { if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports - && m_gizmos.get_current_type() != GLGizmosManager::FdmSupports) - { + && m_gizmos.get_current_type() != GLGizmosManager::FdmSupports + && m_gizmos.get_current_type() != GLGizmosManager::Seam) { m_rectangle_selection.start_dragging(m_mouse.position, evt.ShiftDown() ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect); m_dirty = true; } } - else - { + else { // Select volume in this 3D canvas. - // Don't deselect a volume if layer editing is enabled. We want the object to stay selected + // Don't deselect a volume if layer editing is enabled or any gizmo is active. We want the object to stay selected // during the scene manipulation. - if (m_picking_enabled && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled())) - { - if (evt.LeftDown() && !m_hover_volume_idxs.empty()) - { + if (m_picking_enabled && (!any_gizmo_active || !evt.CmdDown()) && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled())) { + if (evt.LeftDown() && !m_hover_volume_idxs.empty()) { int volume_idx = get_first_hover_volume_idx(); bool already_selected = m_selection.contains_volume(volume_idx); bool ctrl_down = evt.CmdDown(); @@ -3583,8 +3625,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (already_selected && ctrl_down) m_selection.remove(volume_idx); - else - { + else { m_selection.add(volume_idx, !ctrl_down, true); m_mouse.drag.move_requires_threshold = !already_selected; if (already_selected) @@ -3594,8 +3635,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } // propagate event through callback - if (curr_idxs != m_selection.get_volume_idxs()) - { + if (curr_idxs != m_selection.get_volume_idxs()) { if (m_selection.is_empty()) m_gizmos.reset_all_states(); else @@ -3608,16 +3648,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } - if (!m_hover_volume_idxs.empty()) - { - if (evt.LeftDown() && m_moving_enabled && (m_mouse.drag.move_volume_idx == -1)) - { + if (!m_hover_volume_idxs.empty()) { + if (evt.LeftDown() && m_moving_enabled && m_mouse.drag.move_volume_idx == -1) { // Only accept the initial position, if it is inside the volume bounding box. int volume_idx = get_first_hover_volume_idx(); BoundingBoxf3 volume_bbox = m_volumes.volumes[volume_idx]->transformed_bounding_box(); volume_bbox.offset(1.0); - if (volume_bbox.contains(m_mouse.scene_position)) - { + if ((!any_gizmo_active || !evt.CmdDown()) && volume_bbox.contains(m_mouse.scene_position)) { m_volumes.volumes[volume_idx]->hover = GLVolume::HS_None; // The dragging operation is initiated. m_mouse.drag.move_volume_idx = volume_idx; @@ -3629,19 +3666,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } } - else if (evt.Dragging() && evt.LeftIsDown() && (m_layers_editing.state == LayersEditing::Unknown) && (m_mouse.drag.move_volume_idx != -1)) - { - if (!m_mouse.drag.move_requires_threshold) - { + else if (evt.Dragging() && evt.LeftIsDown() && m_layers_editing.state == LayersEditing::Unknown && m_mouse.drag.move_volume_idx != -1) { + if (!m_mouse.drag.move_requires_threshold) { m_mouse.dragging = true; - Vec3d cur_pos = m_mouse.drag.start_position_3D; // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag - if (m_selection.contains_volume(get_first_hover_volume_idx())) - { + if (m_selection.contains_volume(get_first_hover_volume_idx())) { const Camera& camera = wxGetApp().plater()->get_camera(); - if (std::abs(camera.get_dir_forward()(2)) < EPSILON) - { + if (std::abs(camera.get_dir_forward()(2)) < EPSILON) { // side view -> move selected volumes orthogonally to camera view direction Linef3 ray = mouse_ray(pos); Vec3d dir = ray.unit_vector(); @@ -3663,8 +3695,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // apply offset cur_pos = m_mouse.drag.start_position_3D + projection_x * camera_right + projection_z * camera_up; } - else - { + else { // Generic view // Get new position at the same Z of the initial click point. float z0 = 0.0f; @@ -3678,35 +3709,28 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } } - else if (evt.Dragging() && evt.LeftIsDown() && m_picking_enabled && m_rectangle_selection.is_dragging()) - { + else if (evt.Dragging() && evt.LeftIsDown() && m_picking_enabled && m_rectangle_selection.is_dragging()) { m_rectangle_selection.dragging(pos.cast()); m_dirty = true; } - else if (evt.Dragging()) - { + else if (evt.Dragging()) { m_mouse.dragging = true; - if ((m_layers_editing.state != LayersEditing::Unknown) && (layer_editing_object_idx != -1)) - { - if (m_layers_editing.state == LayersEditing::Editing) - { + if (m_layers_editing.state != LayersEditing::Unknown && layer_editing_object_idx != -1) { + if (m_layers_editing.state == LayersEditing::Editing) { _perform_layer_editing_action(&evt); m_mouse.position = pos.cast(); } } // do not process the dragging if the left mouse was set down in another canvas - else if (evt.LeftIsDown()) - { + else if (evt.LeftIsDown()) { // if dragging over blank area with left button, rotate - if (m_hover_volume_idxs.empty() && m_mouse.is_start_position_3D_defined()) - { + if ((any_gizmo_active || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) { const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.); if (wxGetApp().app_config->get("use_free_camera") == "1") // Virtual track ball (similar to the 3DConnexion mouse). wxGetApp().plater()->get_camera().rotate_local_around_target(Vec3d(rot.y(), rot.x(), 0.)); - else - { + else { // Forces camera right vector to be parallel to XY plane in case it has been misaligned using the 3D mouse free rotation. // It is cheaper to call this function right away instead of testing wxGetApp().plater()->get_mouse3d_controller().connected(), // which checks an atomics (flushes CPU caches). @@ -3720,11 +3744,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } m_mouse.drag.start_position_3D = Vec3d((double)pos(0), (double)pos(1), 0.0); } - else if (evt.MiddleIsDown() || evt.RightIsDown()) - { + else if (evt.MiddleIsDown() || evt.RightIsDown()) { // If dragging over blank area with right button, pan. - if (m_mouse.is_start_position_2D_defined()) - { + if (m_mouse.is_start_position_2D_defined()) { // get point in model space at Z = 0 float z = 0.0f; const Vec3d& cur_pos = _mouse_to_3d(pos, &z); @@ -3744,43 +3766,36 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.drag.start_position_2D = pos; } } - else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) - { - if (m_layers_editing.state != LayersEditing::Unknown) - { + else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) { + if (m_layers_editing.state != LayersEditing::Unknown) { m_layers_editing.state = LayersEditing::Unknown; _stop_timer(); m_layers_editing.accept_changes(*this); } - else if ((m_mouse.drag.move_volume_idx != -1) && m_mouse.dragging) - { + else if (m_mouse.drag.move_volume_idx != -1 && m_mouse.dragging) { do_move(L("Move Object")); wxGetApp().obj_manipul()->set_dirty(); // Let the plater know that the dragging finished, so a delayed refresh // of the scene with the background processing data should be performed. post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); } - else if (evt.LeftUp() && m_picking_enabled && m_rectangle_selection.is_dragging()) - { + else if (evt.LeftUp() && m_picking_enabled && m_rectangle_selection.is_dragging()) { if (evt.ShiftDown() || evt.AltDown()) _update_selection_from_hover(); m_rectangle_selection.stop_dragging(); } - else if (evt.LeftUp() && !m_mouse.ignore_left_up && !m_mouse.dragging && m_hover_volume_idxs.empty() && !is_layers_editing_enabled()) - { + else if (evt.LeftUp() && !m_mouse.ignore_left_up && !m_mouse.dragging && m_hover_volume_idxs.empty() && !is_layers_editing_enabled()) { // deselect and propagate event through callback - if (!evt.ShiftDown() && m_picking_enabled) + if (!evt.ShiftDown() && (!any_gizmo_active || !evt.CmdDown()) && m_picking_enabled) deselect_all(); } - else if (evt.RightUp()) - { + else if (evt.RightUp()) { m_mouse.position = pos.cast(); // forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while // the context menu is already shown render(); - if (!m_hover_volume_idxs.empty()) - { + if (!m_hover_volume_idxs.empty()) { // if right clicking on volume, propagate event through callback (shows context menu) int volume_idx = get_first_hover_volume_idx(); if (!m_volumes.volumes[volume_idx]->is_wipe_tower // no context menu for the wipe tower @@ -3812,17 +3827,20 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) mouse_up_cleanup(); } - else if (evt.Moving()) - { + else if (evt.Moving()) { m_mouse.position = pos.cast(); // updates gizmos overlay if (m_selection.is_empty()) m_gizmos.reset_all_states(); +#if ENABLE_GCODE_VIEWER + m_dirty = true; +#else // Only refresh if picking is enabled, in that case the objects may get highlighted if the mouse cursor hovers over. - if (m_picking_enabled) + //if (m_picking_enabled) m_dirty = true; +#endif // ENABLE_GCODE_VIEWER } else evt.Skip(); @@ -3883,6 +3901,7 @@ Vec2d GLCanvas3D::get_local_mouse_position() const return Vec2d(factor * mouse_pos.x, factor * mouse_pos.y); } +#if !ENABLE_GCODE_VIEWER void GLCanvas3D::reset_legend_texture() { if (m_legend_texture.get_id() != 0) @@ -3891,6 +3910,7 @@ void GLCanvas3D::reset_legend_texture() m_legend_texture.reset(); } } +#endif // !ENABLE_GCODE_VIEWER void GLCanvas3D::set_tooltip(const std::string& tooltip) const { @@ -4180,12 +4200,15 @@ void GLCanvas3D::update_ui_from_settings() } #endif // ENABLE_RETINA_GL +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) + wxGetApp().plater()->enable_collapse_toolbar(wxGetApp().app_config->get("show_collapse_button") == "1"); +#else bool enable_collapse = wxGetApp().app_config->get("show_collapse_button") == "1"; wxGetApp().plater()->get_collapse_toolbar().set_enabled(enable_collapse); +#endif // ENABLE_GCODE_VIEWER } - - GLCanvas3D::WipeTowerInfo GLCanvas3D::get_wipe_tower_info() const { WipeTowerInfo wti; @@ -4247,12 +4270,20 @@ void GLCanvas3D::update_tooltip_for_settings_item_in_main_toolbar() bool GLCanvas3D::has_toolpaths_to_export() const { +#if ENABLE_GCODE_VIEWER + return m_gcode_viewer.has_data(); +#else return m_volumes.has_toolpaths_to_export(); +#endif // ENABLE_GCODE_VIEWER } void GLCanvas3D::export_toolpaths_to_obj(const char* filename) const { +#if ENABLE_GCODE_VIEWER + m_gcode_viewer.export_toolpaths_to_obj(filename); +#else m_volumes.export_toolpaths_to_obj(filename); +#endif // ENABLE_GCODE_VIEWER } void GLCanvas3D::mouse_up_cleanup() @@ -4359,10 +4390,14 @@ bool GLCanvas3D::_render_search_list(float pos_x) const if (selected >= 0) { // selected == 9999 means that Esc kye was pressed + /*// revert commit https://github.com/prusa3d/PrusaSlicer/commit/91897589928789b261ca0dc735ffd46f2b0b99f2 if (selected == 9999) action_taken = true; else + sidebar.jump_to_option(selected);*/ + if (selected != 9999) sidebar.jump_to_option(selected); + action_taken = true; } imgui->end(); @@ -4395,22 +4430,19 @@ static void debug_output_thumbnail(const ThumbnailData& thumbnail_data) void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const { - auto is_visible = [](const GLVolume& v) -> bool - { + auto is_visible = [](const GLVolume& v) { bool ret = v.printable; ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside); return ret; }; - static const GLfloat orange[] = { 0.923f, 0.504f, 0.264f, 1.0f }; - static const GLfloat gray[] = { 0.64f, 0.64f, 0.64f, 1.0f }; + static const std::array orange = { 0.923f, 0.504f, 0.264f, 1.0f }; + static const std::array gray = { 0.64f, 0.64f, 0.64f, 1.0f }; GLVolumePtrs visible_volumes; - for (GLVolume* vol : m_volumes.volumes) - { - if (!vol->is_modifier && !vol->is_wipe_tower && (!parts_only || (vol->composite_id.volume_id >= 0))) - { + for (GLVolume* vol : m_volumes.volumes) { + if (!vol->is_modifier && !vol->is_wipe_tower && (!parts_only || (vol->composite_id.volume_id >= 0))) { if (!printable_only || is_visible(*vol)) visible_volumes.emplace_back(vol); } @@ -4420,8 +4452,7 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool return; BoundingBoxf3 box; - for (const GLVolume* vol : visible_volumes) - { + for (const GLVolume* vol : visible_volumes) { box.merge(vol->transformed_bounding_box()); } @@ -4435,8 +4466,7 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool double near_z = -1.0; double far_z = -1.0; - if (show_bed) - { + if (show_bed) { // extends the near and far z of the frustrum to avoid the bed being clipped // box in eye space @@ -4447,39 +4477,32 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool camera.apply_projection(box, near_z, far_z); + GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); + if (shader == nullptr) + return; + if (transparent_background) glsafe(::glClearColor(0.0f, 0.0f, 0.0f, 0.0f)); glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); - m_shader.start_using(); - - GLint shader_id = m_shader.get_shader_program_id(); - GLint color_id = ::glGetUniformLocation(shader_id, "uniform_color"); - GLint print_box_detection_id = ::glGetUniformLocation(shader_id, "print_box.volume_detection"); - glcheck(); - - if (print_box_detection_id != -1) - glsafe(::glUniform1i(print_box_detection_id, 0)); - - for (const GLVolume* vol : visible_volumes) - { - if (color_id >= 0) - glsafe(::glUniform4fv(color_id, 1, (vol->printable && !vol->is_outside) ? orange : gray)); - else - glsafe(::glColor4fv((vol->printable && !vol->is_outside) ? orange : gray)); + shader->start_using(); + shader->set_uniform("print_box.volume_detection", 0); + for (const GLVolume* vol : visible_volumes) { + shader->set_uniform("uniform_color", (vol->printable && !vol->is_outside) ? orange : gray); vol->render(); } - m_shader.stop_using(); + shader->stop_using(); glsafe(::glDisable(GL_DEPTH_TEST)); if (show_bed) _render_bed(!camera.is_looking_downward(), false); + // restore background color if (transparent_background) glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); } @@ -4762,7 +4785,7 @@ bool GLCanvas3D::_init_main_toolbar() m_main_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); m_main_toolbar.set_border(5.0f); m_main_toolbar.set_separator_size(5); - m_main_toolbar.set_gap_size(2); + m_main_toolbar.set_gap_size(4); GLToolbarItem::Data item; @@ -4873,7 +4896,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "settings"; - item.icon_filename = "cog_.svg"; + item.icon_filename = "settings.svg"; item.tooltip = _u8L("Switch to Settings") + "\n" + "[" + GUI::shortkey_ctrl_prefix() + "2] - " + _u8L("Print Settings Tab") + "\n" + "[" + GUI::shortkey_ctrl_prefix() + "3] - " + (m_process->current_printer_technology() == ptFFF ? _u8L("Filament Settings Tab") : _u8L("Material Settings Tab")) + "\n" + "[" + GUI::shortkey_ctrl_prefix() + "4] - " + _u8L("Printer Settings Tab") ; @@ -4885,35 +4908,16 @@ bool GLCanvas3D::_init_main_toolbar() if (!m_main_toolbar.add_item(item)) return false; + /* if (!m_main_toolbar.add_separator()) return false; - - item.name = "layersediting"; - item.icon_filename = "layers_white.svg"; - item.tooltip = _utf8(L("Variable layer height")); - item.sprite_id = 11; - item.left.toggable = true; - item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); }; - item.visibility_callback = [this]()->bool - { - bool res = m_process->current_printer_technology() == ptFFF; - // turns off if changing printer technology - if (!res && m_main_toolbar.is_item_visible("layersediting") && m_main_toolbar.is_item_pressed("layersediting")) - force_main_toolbar_left_action(get_main_toolbar_item_id("layersediting")); - - return res; - }; - item.enabling_callback = []()->bool { return wxGetApp().plater()->can_layers_editing(); }; - if (!m_main_toolbar.add_item(item)) - return false; - - if (!m_main_toolbar.add_separator()) - return false; + */ item.name = "search"; item.icon_filename = "search_.svg"; item.tooltip = _utf8(L("Search")) + " [" + GUI::shortkey_ctrl_prefix() + "F]"; - item.sprite_id = 12; + item.sprite_id = 11; + item.left.toggable = true; item.left.render_callback = [this](float left, float right, float, float) { if (m_canvas != nullptr) { @@ -4927,6 +4931,27 @@ bool GLCanvas3D::_init_main_toolbar() if (!m_main_toolbar.add_item(item)) return false; + if (!m_main_toolbar.add_separator()) + return false; + + item.name = "layersediting"; + item.icon_filename = "layers_white.svg"; + item.tooltip = _utf8(L("Variable layer height")); + item.sprite_id = 12; + item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); }; + item.visibility_callback = [this]()->bool { + bool res = m_process->current_printer_technology() == ptFFF; + // turns off if changing printer technology + if (!res && m_main_toolbar.is_item_visible("layersediting") && m_main_toolbar.is_item_pressed("layersediting")) + force_main_toolbar_left_action(get_main_toolbar_item_id("layersediting")); + + return res; + }; + item.enabling_callback = []()->bool { return wxGetApp().plater()->can_layers_editing(); }; + item.left.render_callback = GLToolbarItem::Default_Render_Callback; + if (!m_main_toolbar.add_item(item)) + return false; + return true; } @@ -4955,7 +4980,7 @@ bool GLCanvas3D::_init_undoredo_toolbar() m_undoredo_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); m_undoredo_toolbar.set_border(5.0f); m_undoredo_toolbar.set_separator_size(5); - m_undoredo_toolbar.set_gap_size(2); + m_undoredo_toolbar.set_gap_size(4); GLToolbarItem::Data item; @@ -5035,10 +5060,10 @@ bool GLCanvas3D::_init_undoredo_toolbar() if (!m_undoredo_toolbar.add_item(item)) return false; - + /* if (!m_undoredo_toolbar.add_separator()) return false; - + */ return true; } @@ -5059,7 +5084,7 @@ bool GLCanvas3D::_set_current() void GLCanvas3D::_resize(unsigned int w, unsigned int h) { - if ((m_canvas == nullptr) && (m_context == nullptr)) + if (m_canvas == nullptr && m_context == nullptr) return; auto *imgui = wxGetApp().imgui(); @@ -5090,6 +5115,12 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be } bb.merge(wxGetApp().plater()->get_bed().get_bounding_box(include_bed_model)); + +#if ENABLE_GCODE_VIEWER + if (!m_main_toolbar.is_enabled()) + bb.merge(m_gcode_viewer.get_max_bounding_box()); +#endif // ENABLE_GCODE_VIEWER + return bb; } @@ -5120,8 +5151,7 @@ void GLCanvas3D::_refresh_if_shown_on_screen() void GLCanvas3D::_picking_pass() const { - if (m_picking_enabled && !m_mouse.dragging && (m_mouse.position != Vec2d(DBL_MAX, DBL_MAX))) - { + if (m_picking_enabled && !m_mouse.dragging && m_mouse.position != Vec2d(DBL_MAX, DBL_MAX)) { m_hover_volume_idxs.clear(); // Render the object for picking. @@ -5155,17 +5185,17 @@ void GLCanvas3D::_picking_pass() const GLubyte color[4] = { 0, 0, 0, 0 }; const Size& cnv_size = get_canvas_size(); - bool inside = (0 <= m_mouse.position(0)) && (m_mouse.position(0) < cnv_size.get_width()) && (0 <= m_mouse.position(1)) && (m_mouse.position(1) < cnv_size.get_height()); - if (inside) - { + bool inside = 0 <= m_mouse.position(0) && m_mouse.position(0) < cnv_size.get_width() && 0 <= m_mouse.position(1) && m_mouse.position(1) < cnv_size.get_height(); + if (inside) { glsafe(::glReadPixels(m_mouse.position(0), cnv_size.get_height() - m_mouse.position(1) - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color)); if (picking_checksum_alpha_channel(color[0], color[1], color[2]) == color[3]) // Only non-interpolated colors are valid, those have their lowest three bits zeroed. volume_id = color[0] + (color[1] << 8) + (color[2] << 16); } - if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size())) - { - m_hover_volume_idxs.emplace_back(volume_id); + if (0 <= volume_id && volume_id < (int)m_volumes.volumes.size()) { + // do not add the volume id if any gizmo is active and CTRL is pressed + if (m_gizmos.get_current_type() == GLGizmosManager::EType::Undefined || !wxGetKeyState(WXK_CONTROL)) + m_hover_volume_idxs.emplace_back(volume_id); m_gizmos.set_hover_id(-1); } else @@ -5250,8 +5280,42 @@ void GLCanvas3D::_rectangular_selection_picking_pass() const _update_volumes_hover_state(); } +#if ENABLE_GCODE_VIEWER +static BoundingBoxf3 print_volume(const DynamicPrintConfig& config) +{ + // tolerance to avoid false detection at bed edges + const double tolerance_x = 0.05; + const double tolerance_y = 0.05; + + BoundingBoxf3 ret; + const ConfigOptionPoints* opt = dynamic_cast(config.option("bed_shape")); + if (opt != nullptr) { + BoundingBox bed_box_2D = get_extents(Polygon::new_scale(opt->values)); + ret = BoundingBoxf3(Vec3d(unscale(bed_box_2D.min(0)) - tolerance_x, unscale(bed_box_2D.min(1)) - tolerance_y, 0.0), Vec3d(unscale(bed_box_2D.max(0)) + tolerance_x, unscale(bed_box_2D.max(1)) + tolerance_y, config.opt_float("max_print_height"))); + // Allow the objects to protrude below the print bed + ret.min(2) = -1e10; + } + return ret; +} +#endif // ENABLE_GCODE_VIEWER + void GLCanvas3D::_render_background() const { +#if ENABLE_GCODE_VIEWER + bool use_error_color = false; + if (wxGetApp().is_editor()) { + use_error_color = m_dynamic_background_enabled && + (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA || !m_volumes.empty()); + + if (!m_volumes.empty()) + use_error_color &= _is_any_volume_outside(); + else { + BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3(); + use_error_color &= (test_volume.radius() > 0.0) ? !test_volume.contains(m_gcode_viewer.get_paths_bounding_box()) : false; + } + } +#endif // ENABLE_GCODE_VIEWER + glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); glsafe(::glMatrixMode(GL_PROJECTION)); @@ -5262,7 +5326,11 @@ void GLCanvas3D::_render_background() const glsafe(::glDisable(GL_DEPTH_TEST)); ::glBegin(GL_QUADS); +#if ENABLE_GCODE_VIEWER + if (use_error_color) +#else if (m_dynamic_background_enabled && _is_any_volume_outside()) +#endif // ENABLE_GCODE_VIEWER ::glColor3fv(ERROR_BG_DARK_COLOR); else ::glColor3fv(DEFAULT_BG_DARK_COLOR); @@ -5270,8 +5338,12 @@ void GLCanvas3D::_render_background() const ::glVertex2f(-1.0f, -1.0f); ::glVertex2f(1.0f, -1.0f); +#if ENABLE_GCODE_VIEWER + if (use_error_color) +#else if (m_dynamic_background_enabled && _is_any_volume_outside()) - ::glColor3fv(ERROR_BG_LIGHT_COLOR); +#endif // ENABLE_GCODE_VIEWER +::glColor3fv(ERROR_BG_LIGHT_COLOR); else ::glColor3fv(DEFAULT_BG_LIGHT_COLOR); @@ -5295,7 +5367,9 @@ void GLCanvas3D::_render_bed(bool bottom, bool show_axes) const bool show_texture = ! bottom || (m_gizmos.get_current_type() != GLGizmosManager::FdmSupports - && m_gizmos.get_current_type() != GLGizmosManager::SlaSupports); + && m_gizmos.get_current_type() != GLGizmosManager::SlaSupports + && m_gizmos.get_current_type() != GLGizmosManager::Hollow + && m_gizmos.get_current_type() != GLGizmosManager::Seam); wxGetApp().plater()->get_bed().render(const_cast(*this), bottom, scale_factor, show_axes, show_texture); } @@ -5309,13 +5383,11 @@ void GLCanvas3D::_render_objects() const m_camera_clipping_plane = m_gizmos.get_clipping_plane(); - if (m_picking_enabled) - { + if (m_picking_enabled) { // Update the layer editing selection to the first object selected, update the current object maximum Z. const_cast(m_layers_editing).select_object(*m_model, this->is_layers_editing_enabled() ? m_selection.get_object_idx() : -1); - if (m_config != nullptr) - { + if (m_config != nullptr) { const BoundingBoxf3& bed_bb = wxGetApp().plater()->get_bed().get_bounding_box(false); m_volumes.set_print_box((float)bed_bb.min(0), (float)bed_bb.min(1), 0.0f, (float)bed_bb.max(0), (float)bed_bb.max(1), (float)m_config->opt_float("max_print_height")); m_volumes.check_outside_state(m_config, nullptr); @@ -5329,28 +5401,53 @@ void GLCanvas3D::_render_objects() const m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data()); - m_shader.start_using(); - if (m_picking_enabled && !m_gizmos.is_dragging() && m_layers_editing.is_enabled() && (m_layers_editing.last_object_id != -1) && (m_layers_editing.object_max_z() > 0.0f)) { - int object_id = m_layers_editing.last_object_id; - m_volumes.render(GLVolumeCollection::Opaque, false, wxGetApp().plater()->get_camera().get_view_matrix(), [object_id](const GLVolume& volume) { - // Which volume to paint without the layer height profile shader? - return volume.is_active && (volume.is_modifier || volume.composite_id.object_id != object_id); - }); - // Let LayersEditing handle rendering of the active object using the layer height profile shader. - m_layers_editing.render_volumes(*this, this->m_volumes); - } else { + GLShaderProgram* shader = wxGetApp().get_shader("gouraud"); + if (shader != nullptr) { + shader->start_using(); + + if (m_picking_enabled && !m_gizmos.is_dragging() && m_layers_editing.is_enabled() && (m_layers_editing.last_object_id != -1) && (m_layers_editing.object_max_z() > 0.0f)) { + int object_id = m_layers_editing.last_object_id; + m_volumes.render(GLVolumeCollection::Opaque, false, wxGetApp().plater()->get_camera().get_view_matrix(), [object_id](const GLVolume& volume) { + // Which volume to paint without the layer height profile shader? + return volume.is_active && (volume.is_modifier || volume.composite_id.object_id != object_id); + }); + // Let LayersEditing handle rendering of the active object using the layer height profile shader. + m_layers_editing.render_volumes(*this, this->m_volumes); + } else { // do not cull backfaces to show broken geometry, if any m_volumes.render(GLVolumeCollection::Opaque, m_picking_enabled, wxGetApp().plater()->get_camera().get_view_matrix(), [this](const GLVolume& volume) { return (m_render_sla_auxiliaries || volume.composite_id.volume_id >= 0); }); - } + } - m_volumes.render(GLVolumeCollection::Transparent, false, wxGetApp().plater()->get_camera().get_view_matrix()); - m_shader.stop_using(); + // In case a painting gizmo is open, it should render the painted triangles + // before transparent objects are rendered. Otherwise they would not be + // visible when inside modifier meshes etc. + { + const GLGizmosManager& gm = get_gizmos_manager(); + GLGizmosManager::EType type = gm.get_current_type(); + if (type == GLGizmosManager::FdmSupports + || type == GLGizmosManager::Seam) { + shader->stop_using(); + gm.render_painter_gizmo(); + shader->start_using(); + } + } + + m_volumes.render(GLVolumeCollection::Transparent, false, wxGetApp().plater()->get_camera().get_view_matrix()); + shader->stop_using(); + } m_camera_clipping_plane = ClippingPlane::ClipsNothing(); } +#if ENABLE_GCODE_VIEWER +void GLCanvas3D::_render_gcode() const +{ + m_gcode_viewer.render(); +} +#endif // ENABLE_GCODE_VIEWER + void GLCanvas3D::_render_selection() const { float scale_factor = 1.0; @@ -5371,6 +5468,10 @@ void GLCanvas3D::_render_selection_center() const void GLCanvas3D::_check_and_update_toolbar_icon_scale() const { + // Don't update a toolbar scale, when we are on a Preview + if (wxGetApp().plater()->is_preview_shown()) + return; + float scale = wxGetApp().toolbar_icon_scale(); Size cnv_size = get_canvas_size(); @@ -5427,7 +5528,9 @@ void GLCanvas3D::_render_overlays() const _render_gizmos_overlay(); _render_warning_texture(); +#if !ENABLE_GCODE_VIEWER _render_legend_texture(); +#endif // !ENABLE_GCODE_VIEWER // main toolbar and undoredo toolbar need to be both updated before rendering because both their sizes are needed // to correctly place them @@ -5462,10 +5565,6 @@ void GLCanvas3D::_render_overlays() const } m_labels.render(sorted_instances); -#if ENABLE_SLOPE_RENDERING - m_slope.render(); -#endif // ENABLE_SLOPE_RENDERING - glsafe(::glPopMatrix()); } @@ -5474,6 +5573,7 @@ void GLCanvas3D::_render_warning_texture() const m_warning_texture.render(*this); } +#if !ENABLE_GCODE_VIEWER void GLCanvas3D::_render_legend_texture() const { if (!m_legend_texture_enabled) @@ -5481,6 +5581,7 @@ void GLCanvas3D::_render_legend_texture() const m_legend_texture.render(*this); } +#endif // !ENABLE_GCODE_VIEWER void GLCanvas3D::_render_volumes_for_picking() const { @@ -5758,7 +5859,7 @@ void GLCanvas3D::_render_sla_slices() const void GLCanvas3D::_render_selection_sidebar_hints() const { - m_selection.render_sidebar_hints(m_sidebar_field, m_shader); + m_selection.render_sidebar_hints(m_sidebar_field); } void GLCanvas3D::_update_volumes_hover_state() const @@ -6428,6 +6529,7 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const std::vector& str_ BOOST_LOG_TRIVIAL(debug) << "Loading wipe tower toolpaths in parallel - end" << m_volumes.log_memory_info() << log_memory_info(); } +#if !ENABLE_GCODE_VIEWER static inline int hex_digit_to_int(const char c) { return @@ -6755,6 +6857,7 @@ void GLCanvas3D::_load_fff_shells() } } } +#endif // !ENABLE_GCODE_VIEWER // While it looks like we can call // this->reload_scene(true, true) @@ -6812,6 +6915,7 @@ void GLCanvas3D::_load_sla_shells() update_volumes_colors_by_extruder(); } +#if !ENABLE_GCODE_VIEWER void GLCanvas3D::_update_gcode_volumes_visibility(const GCodePreviewData& preview_data) { unsigned int size = (unsigned int)m_gcode_preview_volume_index.first_volumes.size(); @@ -6869,9 +6973,13 @@ void GLCanvas3D::_update_gcode_volumes_visibility(const GCodePreviewData& previe } } } +#endif // !ENABLE_GCODE_VIEWER void GLCanvas3D::_update_toolpath_volumes_outside_state() { +#if ENABLE_GCODE_VIEWER + BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3(); +#else // tolerance to avoid false detection at bed edges static const double tolerance_x = 0.05; static const double tolerance_y = 0.05; @@ -6888,15 +6996,23 @@ void GLCanvas3D::_update_toolpath_volumes_outside_state() print_volume.min(2) = -1e10; } } +#endif // ENABLE_GCODE_VIEWER for (GLVolume* volume : m_volumes.volumes) { +#if ENABLE_GCODE_VIEWER + volume->is_outside = ((test_volume.radius() > 0.0) && volume->is_extrusion_path) ? !test_volume.contains(volume->bounding_box()) : false; +#else volume->is_outside = ((print_volume.radius() > 0.0) && volume->is_extrusion_path) ? !print_volume.contains(volume->bounding_box()) : false; +#endif // ENABLE_GCODE_VIEWER } } void GLCanvas3D::_update_sla_shells_outside_state() { +#if ENABLE_GCODE_VIEWER + BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3(); +#else // tolerance to avoid false detection at bed edges static const double tolerance_x = 0.05; static const double tolerance_y = 0.05; @@ -6913,17 +7029,37 @@ void GLCanvas3D::_update_sla_shells_outside_state() print_volume.min(2) = -1e10; } } +#endif // ENABLE_GCODE_VIEWER for (GLVolume* volume : m_volumes.volumes) { +#if ENABLE_GCODE_VIEWER + volume->is_outside = ((test_volume.radius() > 0.0) && volume->shader_outside_printer_detection_enabled) ? !test_volume.contains(volume->transformed_convex_hull_bounding_box()) : false; +#else volume->is_outside = ((print_volume.radius() > 0.0) && volume->shader_outside_printer_detection_enabled) ? !print_volume.contains(volume->transformed_convex_hull_bounding_box()) : false; +#endif // ENABLE_GCODE_VIEWER } } void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning) { _set_current(); +#if ENABLE_GCODE_VIEWER + bool show = false; + if (!m_volumes.empty()) + show = _is_any_volume_outside(); + else { + if (wxGetApp().is_editor()) { + BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3(); + const BoundingBoxf3& paths_volume = m_gcode_viewer.get_paths_bounding_box(); + if (test_volume.radius() > 0.0 && paths_volume.radius() > 0.0) + show = !test_volume.contains(paths_volume); + } + } + _set_warning_texture(warning, show); +#else _set_warning_texture(warning, _is_any_volume_outside()); +#endif // ENABLE_GCODE_VIEWER } std::vector GLCanvas3D::_parse_colors(const std::vector& colors) @@ -6951,10 +7087,12 @@ std::vector GLCanvas3D::_parse_colors(const std::vector& col return output; } +#if !ENABLE_GCODE_VIEWER void GLCanvas3D::_generate_legend_texture(const GCodePreviewData& preview_data, const std::vector& tool_colors) { m_legend_texture.generate(preview_data, tool_colors, *this, true); } +#endif // !ENABLE_GCODE_VIEWER void GLCanvas3D::_set_warning_texture(WarningTexture::Warning warning, bool state) { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index c9433a10ea..d0a130e898 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -6,13 +6,16 @@ #include #include "GLToolbar.hpp" -#include "GLShader.hpp" #include "Event.hpp" #include "Selection.hpp" #include "Gizmos/GLGizmosManager.hpp" #include "GUI_ObjectLayers.hpp" #include "GLSelectionRectangle.hpp" #include "MeshUtils.hpp" +#if ENABLE_GCODE_VIEWER +#include "libslic3r/GCode/GCodeProcessor.hpp" +#include "GCodeViewer.hpp" +#endif // ENABLE_GCODE_VIEWER #include "libslic3r/Slicing.hpp" @@ -36,7 +39,9 @@ namespace Slic3r { struct Camera; class BackgroundSlicingProcess; +#if !ENABLE_GCODE_VIEWER class GCodePreviewData; +#endif // !ENABLE_GCODE_VIEWER struct ThumbnailData; class ModelObject; class ModelInstance; @@ -103,7 +108,11 @@ wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent); +#if ENABLE_GCODE_VIEWER +wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent); +#else wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, wxKeyEvent); +#endif // ENABLE_GCODE_VIEWER wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent); wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent); @@ -118,6 +127,7 @@ class GLCanvas3D static const double DefaultCameraZoomToBoxMarginFactor; public: +#if !ENABLE_GCODE_VIEWER struct GCodePreviewVolumeIndex { enum EType @@ -144,6 +154,7 @@ public: void reset() { first_volumes.clear(); } }; +#endif // !ENABLE_GCODE_VIEWER private: class LayersEditing @@ -161,7 +172,6 @@ private: private: bool m_enabled; - Shader m_shader; unsigned int m_z_texture_id; // Not owned by LayersEditing. const DynamicPrintConfig *m_config; @@ -176,6 +186,8 @@ private: mutable float m_adaptive_quality; mutable HeightProfileSmoothingParams m_smooth_params; + + static float s_overelay_window_width; class LayersTexture { @@ -208,8 +220,9 @@ private: LayersEditing(); ~LayersEditing(); - bool init(const std::string& vertex_shader_filename, const std::string& fragment_shader_filename); - void set_config(const DynamicPrintConfig* config); + void init(); + + void set_config(const DynamicPrintConfig* config); void select_object(const Model &model, int object_id); bool is_allowed() const; @@ -230,6 +243,7 @@ private: static bool bar_rect_contains(const GLCanvas3D& canvas, float x, float y); static Rect get_bar_rect_screen(const GLCanvas3D& canvas); static Rect get_bar_rect_viewport(const GLCanvas3D& canvas); + static float get_overlay_window_width() { return LayersEditing::s_overelay_window_width; } float object_max_z() const { return m_object_max_z; } @@ -243,6 +257,7 @@ private: void update_slicing_parameters(); static float thickness_bar_width(const GLCanvas3D &canvas); + }; struct Mouse @@ -339,6 +354,7 @@ private: bool generate(const std::string& msg, const GLCanvas3D& canvas, bool compress, bool red_colored = false); }; +#if !ENABLE_GCODE_VIEWER class LegendTexture : public GUI::GLTexture { static const int Px_Title_Offset = 5; @@ -365,6 +381,7 @@ private: void render(const GLCanvas3D& canvas) const; }; +#endif // !ENABLE_GCODE_VIEWER #if ENABLE_RENDER_STATISTICS struct RenderStats @@ -405,14 +422,13 @@ private: bool is_in_imgui() const { return m_in_imgui; } }; -#if ENABLE_SLOPE_RENDERING class Slope { bool m_enabled{ false }; bool m_dialog_shown{ false }; GLCanvas3D& m_canvas; GLVolumeCollection& m_volumes; - + static float s_window_width; public: Slope(GLCanvas3D& canvas, GLVolumeCollection& volumes) : m_canvas(canvas), m_volumes(volumes) {} @@ -420,14 +436,11 @@ private: bool is_enabled() const { return m_enabled; } void use(bool use) { m_volumes.set_slope_active(m_enabled ? use : false); } bool is_used() const { return m_volumes.is_slope_active(); } - void show_dialog(bool show) { if (show && is_used()) return; use(show); m_dialog_shown = show; } - bool is_dialog_shown() const { return m_dialog_shown; } - void render() const; - void set_range(const std::array& range) const { - m_volumes.set_slope_z_range({ -::cos(Geometry::deg2rad(90.0f - range[0])), -::cos(Geometry::deg2rad(90.0f - range[1])) }); + void set_normal_angle(float angle_in_deg) const { + m_volumes.set_slope_normal_z(-::cos(Geometry::deg2rad(90.0f - angle_in_deg))); } + static float get_window_width() { return s_window_width; }; }; -#endif // ENABLE_SLOPE_RENDERING public: enum ECursorType : unsigned char @@ -443,11 +456,12 @@ private: std::unique_ptr m_retina_helper; #endif bool m_in_render; +#if !ENABLE_GCODE_VIEWER LegendTexture m_legend_texture; +#endif // !ENABLE_GCODE_VIEWER WarningTexture m_warning_texture; wxTimer m_timer; LayersEditing m_layers_editing; - Shader m_shader; Mouse m_mouse; mutable GLGizmosManager m_gizmos; mutable GLToolbar m_main_toolbar; @@ -460,8 +474,13 @@ private: // when true renders an extra frame by not resetting m_dirty to false // see request_extra_frame() bool m_extra_frame_requested; + bool m_event_handlers_bound{ false }; mutable GLVolumeCollection m_volumes; +#if ENABLE_GCODE_VIEWER + GCodeViewer m_gcode_viewer; +#endif // ENABLE_GCODE_VIEWER + Selection m_selection; const DynamicPrintConfig* m_config; Model* m_model; @@ -472,7 +491,9 @@ private: bool m_initialized; bool m_apply_zoom_to_volumes_filter; mutable std::vector m_hover_volume_idxs; +#if !ENABLE_GCODE_VIEWER bool m_legend_texture_enabled; +#endif // !ENABLE_GCODE_VIEWER bool m_picking_enabled; bool m_moving_enabled; bool m_dynamic_background_enabled; @@ -490,7 +511,9 @@ private: bool m_reload_delayed; +#if !ENABLE_GCODE_VIEWER GCodePreviewVolumeIndex m_gcode_preview_volume_index; +#endif // !ENABLE_GCODE_VIEWER #if ENABLE_RENDER_PICKING_PASS bool m_show_picking_texture; @@ -507,9 +530,7 @@ private: Labels m_labels; mutable Tooltip m_tooltip; mutable bool m_tooltip_enabled{ true }; -#if ENABLE_SLOPE_RENDERING Slope m_slope; -#endif // ENABLE_SLOPE_RENDERING public: explicit GLCanvas3D(wxGLCanvas* canvas); @@ -532,6 +553,12 @@ public: void reset_volumes(); int check_volumes_outside_state() const; +#if ENABLE_GCODE_VIEWER + void reset_gcode_toolpaths() { m_gcode_viewer.reset(); } + const GCodeViewer::SequentialView& get_gcode_sequential_view() const { return m_gcode_viewer.get_sequential_view(); } + void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } +#endif // ENABLE_GCODE_VIEWER + void toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1); void toggle_model_objects_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1); void update_instance_printable_state_for_object(size_t obj_idx); @@ -564,7 +591,6 @@ public: void set_color_by(const std::string& value); void refresh_camera_scene_box(); - const Shader& get_shader() const { return m_shader; } BoundingBoxf3 volumes_bounding_box() const; BoundingBoxf3 scene_bounding_box() const; @@ -589,14 +615,15 @@ public: void enable_undoredo_toolbar(bool enable); void enable_dynamic_background(bool enable); void enable_labels(bool enable) { m_labels.enable(enable); } -#if ENABLE_SLOPE_RENDERING void enable_slope(bool enable) { m_slope.enable(enable); } -#endif // ENABLE_SLOPE_RENDERING void allow_multisample(bool allow); void zoom_to_bed(); void zoom_to_volumes(); void zoom_to_selection(); +#if ENABLE_GCODE_VIEWER + void zoom_to_gcode(); +#endif // ENABLE_GCODE_VIEWER void select_view(const std::string& direction); void update_volumes_colors_by_extruder(); @@ -613,7 +640,20 @@ public: void delete_selected(); void ensure_on_bed(unsigned int object_idx); +#if ENABLE_GCODE_VIEWER + bool is_gcode_legend_enabled() const { return m_gcode_viewer.is_legend_enabled(); } + GCodeViewer::EViewType get_gcode_view_type() const { return m_gcode_viewer.get_view_type(); } + const std::vector& get_gcode_layers_zs() const; + std::vector get_volumes_print_zs(bool active_only) const; + unsigned int get_gcode_options_visibility_flags() const { return m_gcode_viewer.get_options_visibility_flags(); } + void set_gcode_options_visibility_from_flags(unsigned int flags); + unsigned int get_toolpath_role_visibility_flags() const { return m_gcode_viewer.get_toolpath_role_visibility_flags(); } + void set_toolpath_role_visibility_flags(unsigned int flags); + void set_toolpath_view_type(GCodeViewer::EViewType type); + void set_toolpaths_z_range(const std::array& range); +#else std::vector get_current_print_zs(bool active_only) const; +#endif // ENABLE_GCODE_VIEWER void set_toolpaths_range(double low, double high); std::vector load_object(const ModelObject& model_object, int obj_idx, std::vector instance_idxs); @@ -623,7 +663,14 @@ public: void reload_scene(bool refresh_immediately, bool force_full_scene_refresh = false); +#if ENABLE_GCODE_VIEWER + void load_gcode_preview(const GCodeProcessor::Result& gcode_result); + void refresh_gcode_preview(const GCodeProcessor::Result& gcode_result, const std::vector& str_tool_colors); + void set_gcode_view_preview_type(GCodeViewer::EViewType type) { return m_gcode_viewer.set_view_type(type); } + GCodeViewer::EViewType get_gcode_view_preview_type() const { return m_gcode_viewer.get_view_type(); } +#else void load_gcode_preview(const GCodePreviewData& preview_data, const std::vector& str_tool_colors); +#endif // ENABLE_GCODE_VIEWER void load_sla_preview(); void load_preview(const std::vector& str_tool_colors, const std::vector& color_print_values); void bind_event_handlers(); @@ -642,7 +689,9 @@ public: Size get_canvas_size() const; Vec2d get_local_mouse_position() const; +#if !ENABLE_GCODE_VIEWER void reset_legend_texture(); +#endif // !ENABLE_GCODE_VIEWER void set_tooltip(const std::string& tooltip) const; @@ -713,12 +762,9 @@ public: bool are_labels_shown() const { return m_labels.is_shown(); } void show_labels(bool show) { m_labels.show(show); } -#if ENABLE_SLOPE_RENDERING - bool is_slope_shown() const { return m_slope.is_dialog_shown(); } + bool is_using_slope() const { return m_slope.is_used(); } void use_slope(bool use) { m_slope.use(use); } - void show_slope(bool show) { m_slope.show_dialog(show); } - void set_slope_range(const std::array& range) { m_slope.set_range(range); } -#endif // ENABLE_SLOPE_RENDERING + void set_slope_normal_angle(float angle_in_deg) { m_slope.set_normal_angle(angle_in_deg); } private: bool _is_shown_on_screen() const; @@ -744,6 +790,9 @@ private: void _render_background() const; void _render_bed(bool bottom, bool show_axes) const; void _render_objects() const; +#if ENABLE_GCODE_VIEWER + void _render_gcode() const; +#endif // ENABLE_GCODE_VIEWER void _render_selection() const; #if ENABLE_RENDER_SELECTION_CENTER void _render_selection_center() const; @@ -751,7 +800,9 @@ private: void _check_and_update_toolbar_icon_scale() const; void _render_overlays() const; void _render_warning_texture() const; +#if !ENABLE_GCODE_VIEWER void _render_legend_texture() const; +#endif // !ENABLE_GCODE_VIEWER void _render_volumes_for_picking() const; void _render_current_gizmo() const; void _render_gizmos_overlay() const; @@ -799,22 +850,28 @@ private: // Create 3D thick extrusion lines for wipe tower extrusions void _load_wipe_tower_toolpaths(const std::vector& str_tool_colors); +#if !ENABLE_GCODE_VIEWER // generates gcode extrusion paths geometry void _load_gcode_extrusion_paths(const GCodePreviewData& preview_data, const std::vector& tool_colors); // generates gcode travel paths geometry void _load_gcode_travel_paths(const GCodePreviewData& preview_data, const std::vector& tool_colors); // generates objects and wipe tower geometry void _load_fff_shells(); +#endif // !ENABLE_GCODE_VIEWER // Load SLA objects and support structures for objects, for which the slaposSliceSupports step has been finished. void _load_sla_shells(); +#if !ENABLE_GCODE_VIEWER // sets gcode geometry visibility according to user selection void _update_gcode_volumes_visibility(const GCodePreviewData& preview_data); +#endif // !ENABLE_GCODE_VIEWER void _update_toolpath_volumes_outside_state(); void _update_sla_shells_outside_state(); void _show_warning_texture_if_needed(WarningTexture::Warning warning); +#if !ENABLE_GCODE_VIEWER // generates the legend texture in dependence of the current shown view type void _generate_legend_texture(const GCodePreviewData& preview_data, const std::vector& tool_colors); +#endif // !ENABLE_GCODE_VIEWER // generates a warning texture containing the given message void _set_warning_texture(WarningTexture::Warning warning, bool state); @@ -829,6 +886,8 @@ private: bool _activate_search_toolbar_item(); bool _deactivate_collapse_toolbar_items(); + float get_overlay_window_width() { return LayersEditing::get_overlay_window_width(); } + static std::vector _parse_colors(const std::vector& colors); public: diff --git a/src/slic3r/GUI/GLModel.cpp b/src/slic3r/GUI/GLModel.cpp new file mode 100644 index 0000000000..e738aa3c49 --- /dev/null +++ b/src/slic3r/GUI/GLModel.cpp @@ -0,0 +1,531 @@ +#include "libslic3r/libslic3r.h" +#include "GLModel.hpp" + +#include "3DScene.hpp" +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/Model.hpp" + +#include +#include + +#include + +namespace Slic3r { +namespace GUI { + +void GLModel::init_from(const GLModelInitializationData& data) +{ + assert(!data.positions.empty() && !data.triangles.empty()); + assert(data.positions.size() == data.normals.size()); + + if (m_vbo_id > 0) // call reset() if you want to reuse this model + return; + + // vertices/normals data + std::vector vertices(6 * data.positions.size()); + for (size_t i = 0; i < data.positions.size(); ++i) { + size_t offset = i * 6; + ::memcpy(static_cast(&vertices[offset]), static_cast(data.positions[i].data()), 3 * sizeof(float)); + ::memcpy(static_cast(&vertices[3 + offset]), static_cast(data.normals[i].data()), 3 * sizeof(float)); + } + + // indices data + std::vector indices(3 * data.triangles.size()); + for (size_t i = 0; i < data.triangles.size(); ++i) { + for (size_t j = 0; j < 3; ++j) { + indices[i * 3 + j] = static_cast(data.triangles[i][j]); + } + } + + m_indices_count = static_cast(indices.size()); + m_bounding_box = BoundingBoxf3(); + for (size_t i = 0; i < data.positions.size(); ++i) { + m_bounding_box.merge(data.positions[i].cast()); + } + + send_to_gpu(vertices, indices); +} + +void GLModel::init_from(const TriangleMesh& mesh) +{ + if (m_vbo_id > 0) // call reset() if you want to reuse this model + return; + + std::vector vertices = std::vector(18 * mesh.stl.stats.number_of_facets); + std::vector indices = std::vector(3 * mesh.stl.stats.number_of_facets); + + unsigned int vertices_count = 0; + for (uint32_t i = 0; i < mesh.stl.stats.number_of_facets; ++i) { + const stl_facet& facet = mesh.stl.facet_start[i]; + for (uint32_t j = 0; j < 3; ++j) { + uint32_t offset = i * 18 + j * 6; + ::memcpy(static_cast(&vertices[offset]), static_cast(facet.vertex[j].data()), 3 * sizeof(float)); + ::memcpy(static_cast(&vertices[3 + offset]), static_cast(facet.normal.data()), 3 * sizeof(float)); + } + for (uint32_t j = 0; j < 3; ++j) { + indices[i * 3 + j] = vertices_count + j; + } + vertices_count += 3; + } + + m_indices_count = static_cast(indices.size()); + m_bounding_box = mesh.bounding_box(); + + send_to_gpu(vertices, indices); +} + +bool GLModel::init_from_file(const std::string& filename) +{ + if (!boost::filesystem::exists(filename)) + return false; + + if (!boost::algorithm::iends_with(filename, ".stl")) + return false; + + Model model; + try + { + model = Model::read_from_file(filename); + } + catch (std::exception&) + { + return false; + } + + init_from(model.mesh()); + + m_filename = filename; + + return true; +} + +void GLModel::reset() +{ + // release gpu memory + if (m_ibo_id > 0) { + glsafe(::glDeleteBuffers(1, &m_ibo_id)); + m_ibo_id = 0; + } + + if (m_vbo_id > 0) { + glsafe(::glDeleteBuffers(1, &m_vbo_id)); + m_vbo_id = 0; + } + + m_indices_count = 0; + m_bounding_box = BoundingBoxf3(); + m_filename = std::string(); +} + +void GLModel::render() const +{ + if (m_vbo_id == 0 || m_ibo_id == 0) + return; + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id)); + glsafe(::glVertexPointer(3, GL_FLOAT, 6 * sizeof(float), (const void*)0)); + glsafe(::glNormalPointer(GL_FLOAT, 6 * sizeof(float), (const void*)(3 * sizeof(float)))); + + glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); + glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); + + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo_id)); + glsafe(::glDrawElements(GL_TRIANGLES, static_cast(m_indices_count), GL_UNSIGNED_INT, (const void*)0)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); + + glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); + glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); + + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); +} + +void GLModel::send_to_gpu(const std::vector& vertices, const std::vector& indices) +{ + // vertex data -> send to gpu + glsafe(::glGenBuffers(1, &m_vbo_id)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id)); + glsafe(::glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); + + // indices data -> send to gpu + glsafe(::glGenBuffers(1, &m_ibo_id)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo_id)); + glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), indices.data(), GL_STATIC_DRAW)); + glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); +} + +GLModelInitializationData stilized_arrow(int resolution, float tip_radius, float tip_height, float stem_radius, float stem_height) +{ + auto append_vertex = [](GLModelInitializationData& data, const Vec3f& position, const Vec3f& normal) { + data.positions.emplace_back(position); + data.normals.emplace_back(normal); + }; + + resolution = std::max(4, resolution); + + GLModelInitializationData data; + + const float angle_step = 2.0f * M_PI / static_cast(resolution); + std::vector cosines(resolution); + std::vector sines(resolution); + + for (int i = 0; i < resolution; ++i) + { + float angle = angle_step * static_cast(i); + cosines[i] = ::cos(angle); + sines[i] = -::sin(angle); + } + + const float total_height = tip_height + stem_height; + + // tip vertices/normals + append_vertex(data, { 0.0f, 0.0f, total_height }, Vec3f::UnitZ()); + for (int i = 0; i < resolution; ++i) + { + append_vertex(data, { tip_radius * sines[i], tip_radius * cosines[i], stem_height }, { sines[i], cosines[i], 0.0f }); + } + + // tip triangles + for (int i = 0; i < resolution; ++i) + { + int v3 = (i < resolution - 1) ? i + 2 : 1; + data.triangles.emplace_back(0, i + 1, v3); + } + + // tip cap outer perimeter vertices + for (int i = 0; i < resolution; ++i) + { + append_vertex(data, { tip_radius * sines[i], tip_radius * cosines[i], stem_height }, -Vec3f::UnitZ()); + } + + // tip cap inner perimeter vertices + for (int i = 0; i < resolution; ++i) + { + append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], stem_height }, -Vec3f::UnitZ()); + } + + // tip cap triangles + for (int i = 0; i < resolution; ++i) + { + int v2 = (i < resolution - 1) ? i + resolution + 2 : resolution + 1; + int v3 = (i < resolution - 1) ? i + 2 * resolution + 2 : 2 * resolution + 1; + data.triangles.emplace_back(i + resolution + 1, v3, v2); + data.triangles.emplace_back(i + resolution + 1, i + 2 * resolution + 1, v3); + } + + // stem bottom vertices + for (int i = 0; i < resolution; ++i) + { + append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], stem_height }, { sines[i], cosines[i], 0.0f }); + } + + // stem top vertices + for (int i = 0; i < resolution; ++i) + { + append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], 0.0f }, { sines[i], cosines[i], 0.0f }); + } + + // stem triangles + for (int i = 0; i < resolution; ++i) + { + int v2 = (i < resolution - 1) ? i + 3 * resolution + 2 : 3 * resolution + 1; + int v3 = (i < resolution - 1) ? i + 4 * resolution + 2 : 4 * resolution + 1; + data.triangles.emplace_back(i + 3 * resolution + 1, v3, v2); + data.triangles.emplace_back(i + 3 * resolution + 1, i + 4 * resolution + 1, v3); + } + + // stem cap vertices + append_vertex(data, Vec3f::Zero(), -Vec3f::UnitZ()); + for (int i = 0; i < resolution; ++i) + { + append_vertex(data, { stem_radius * sines[i], stem_radius * cosines[i], 0.0f }, -Vec3f::UnitZ()); + } + + // stem cap triangles + for (int i = 0; i < resolution; ++i) + { + int v3 = (i < resolution - 1) ? i + 5 * resolution + 3 : 5 * resolution + 2; + data.triangles.emplace_back(5 * resolution + 1, v3, i + 5 * resolution + 2); + } + + return data; +} + +GLModelInitializationData circular_arrow(int resolution, float radius, float tip_height, float tip_width, float stem_width, float thickness) +{ + auto append_vertex = [](GLModelInitializationData& data, const Vec3f& position, const Vec3f& normal) { + data.positions.emplace_back(position); + data.normals.emplace_back(normal); + }; + + resolution = std::max(2, resolution); + + GLModelInitializationData data; + + const float half_thickness = 0.5f * thickness; + const float half_stem_width = 0.5f * stem_width; + const float half_tip_width = 0.5f * tip_width; + + const float outer_radius = radius + half_stem_width; + const float inner_radius = radius - half_stem_width; + const float step_angle = 0.5f * PI / static_cast(resolution); + + // tip + // top face vertices + append_vertex(data, { 0.0f, outer_radius, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { 0.0f, radius + half_tip_width, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { -tip_height, radius, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { 0.0f, radius - half_tip_width, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { 0.0f, inner_radius, half_thickness }, Vec3f::UnitZ()); + + // top face triangles + data.triangles.emplace_back(0, 1, 2); + data.triangles.emplace_back(0, 2, 4); + data.triangles.emplace_back(4, 2, 3); + + // bottom face vertices + append_vertex(data, { 0.0f, outer_radius, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { 0.0f, radius + half_tip_width, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { -tip_height, radius, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { 0.0f, radius - half_tip_width, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { 0.0f, inner_radius, -half_thickness }, -Vec3f::UnitZ()); + + // bottom face triangles + data.triangles.emplace_back(5, 7, 6); + data.triangles.emplace_back(5, 9, 7); + data.triangles.emplace_back(9, 8, 7); + + // side faces vertices + append_vertex(data, { 0.0f, outer_radius, -half_thickness }, Vec3f::UnitX()); + append_vertex(data, { 0.0f, radius + half_tip_width, -half_thickness }, Vec3f::UnitX()); + append_vertex(data, { 0.0f, outer_radius, half_thickness }, Vec3f::UnitX()); + append_vertex(data, { 0.0f, radius + half_tip_width, half_thickness }, Vec3f::UnitX()); + + Vec3f normal(-half_tip_width, tip_height, 0.0f); + normal.normalize(); + append_vertex(data, { 0.0f, radius + half_tip_width, -half_thickness }, normal); + append_vertex(data, { -tip_height, radius, -half_thickness }, normal); + append_vertex(data, { 0.0f, radius + half_tip_width, half_thickness }, normal); + append_vertex(data, { -tip_height, radius, half_thickness }, normal); + + normal = Vec3f(-half_tip_width, -tip_height, 0.0f); + normal.normalize(); + append_vertex(data, { -tip_height, radius, -half_thickness }, normal); + append_vertex(data, { 0.0f, radius - half_tip_width, -half_thickness }, normal); + append_vertex(data, { -tip_height, radius, half_thickness }, normal); + append_vertex(data, { 0.0f, radius - half_tip_width, half_thickness }, normal); + + append_vertex(data, { 0.0f, radius - half_tip_width, -half_thickness }, Vec3f::UnitX()); + append_vertex(data, { 0.0f, inner_radius, -half_thickness }, Vec3f::UnitX()); + append_vertex(data, { 0.0f, radius - half_tip_width, half_thickness }, Vec3f::UnitX()); + append_vertex(data, { 0.0f, inner_radius, half_thickness }, Vec3f::UnitX()); + + // side face triangles + for (int i = 0; i < 4; ++i) + { + int ii = i * 4; + data.triangles.emplace_back(10 + ii, 11 + ii, 13 + ii); + data.triangles.emplace_back(10 + ii, 13 + ii, 12 + ii); + } + + // stem + // top face vertices + for (int i = 0; i <= resolution; ++i) + { + float angle = static_cast(i) * step_angle; + append_vertex(data, { inner_radius * ::sin(angle), inner_radius * ::cos(angle), half_thickness }, Vec3f::UnitZ()); + } + + for (int i = 0; i <= resolution; ++i) + { + float angle = static_cast(i) * step_angle; + append_vertex(data, { outer_radius * ::sin(angle), outer_radius * ::cos(angle), half_thickness }, Vec3f::UnitZ()); + } + + // top face triangles + for (int i = 0; i < resolution; ++i) + { + data.triangles.emplace_back(26 + i, 27 + i, 27 + resolution + i); + data.triangles.emplace_back(27 + i, 28 + resolution + i, 27 + resolution + i); + } + + // bottom face vertices + for (int i = 0; i <= resolution; ++i) + { + float angle = static_cast(i) * step_angle; + append_vertex(data, { inner_radius * ::sin(angle), inner_radius * ::cos(angle), -half_thickness }, -Vec3f::UnitZ()); + } + + for (int i = 0; i <= resolution; ++i) + { + float angle = static_cast(i) * step_angle; + append_vertex(data, { outer_radius * ::sin(angle), outer_radius * ::cos(angle), -half_thickness }, -Vec3f::UnitZ()); + } + + // bottom face triangles + for (int i = 0; i < resolution; ++i) + { + data.triangles.emplace_back(28 + 2 * resolution + i, 29 + 3 * resolution + i, 29 + 2 * resolution + i); + data.triangles.emplace_back(29 + 2 * resolution + i, 29 + 3 * resolution + i, 30 + 3 * resolution + i); + } + + // side faces vertices and triangles + for (int i = 0; i <= resolution; ++i) + { + float angle = static_cast(i) * step_angle; + float c = ::cos(angle); + float s = ::sin(angle); + append_vertex(data, { inner_radius * s, inner_radius * c, -half_thickness }, { -s, -c, 0.0f }); + } + + for (int i = 0; i <= resolution; ++i) + { + float angle = static_cast(i) * step_angle; + float c = ::cos(angle); + float s = ::sin(angle); + append_vertex(data, { inner_radius * s, inner_radius * c, half_thickness }, { -s, -c, 0.0f }); + } + + int first_id = 26 + 4 * (resolution + 1); + for (int i = 0; i < resolution; ++i) + { + int ii = first_id + i; + data.triangles.emplace_back(ii, ii + 1, ii + resolution + 2); + data.triangles.emplace_back(ii, ii + resolution + 2, ii + resolution + 1); + } + + append_vertex(data, { inner_radius, 0.0f, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { outer_radius, 0.0f, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { inner_radius, 0.0f, half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { outer_radius, 0.0f, half_thickness }, -Vec3f::UnitY()); + + first_id = 26 + 6 * (resolution + 1); + data.triangles.emplace_back(first_id, first_id + 1, first_id + 3); + data.triangles.emplace_back(first_id, first_id + 3, first_id + 2); + + for (int i = resolution; i >= 0; --i) + { + float angle = static_cast(i) * step_angle; + float c = ::cos(angle); + float s = ::sin(angle); + append_vertex(data, { outer_radius * s, outer_radius * c, -half_thickness }, { s, c, 0.0f }); + } + + for (int i = resolution; i >= 0; --i) + { + float angle = static_cast(i) * step_angle; + float c = ::cos(angle); + float s = ::sin(angle); + append_vertex(data, { outer_radius * s, outer_radius * c, +half_thickness }, { s, c, 0.0f }); + } + + first_id = 30 + 6 * (resolution + 1); + for (int i = 0; i < resolution; ++i) + { + int ii = first_id + i; + data.triangles.emplace_back(ii, ii + 1, ii + resolution + 2); + data.triangles.emplace_back(ii, ii + resolution + 2, ii + resolution + 1); + } + + return data; +} + +GLModelInitializationData straight_arrow(float tip_width, float tip_height, float stem_width, float stem_height, float thickness) +{ + auto append_vertex = [](GLModelInitializationData& data, const Vec3f& position, const Vec3f& normal) { + data.positions.emplace_back(position); + data.normals.emplace_back(normal); + }; + + GLModelInitializationData data; + + const float half_thickness = 0.5f * thickness; + const float half_stem_width = 0.5f * stem_width; + const float half_tip_width = 0.5f * tip_width; + const float total_height = tip_height + stem_height; + + // top face vertices + append_vertex(data, { half_stem_width, 0.0, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { half_stem_width, stem_height, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { half_tip_width, stem_height, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { 0.0, total_height, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { -half_tip_width, stem_height, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { -half_stem_width, stem_height, half_thickness }, Vec3f::UnitZ()); + append_vertex(data, { -half_stem_width, 0.0, half_thickness }, Vec3f::UnitZ()); + + // top face triangles + data.triangles.emplace_back(0, 1, 6); + data.triangles.emplace_back(6, 1, 5); + data.triangles.emplace_back(4, 5, 3); + data.triangles.emplace_back(5, 1, 3); + data.triangles.emplace_back(1, 2, 3); + + // bottom face vertices + append_vertex(data, { half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { 0.0, total_height, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { -half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { -half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitZ()); + append_vertex(data, { -half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitZ()); + + // bottom face triangles + data.triangles.emplace_back(7, 13, 8); + data.triangles.emplace_back(13, 12, 8); + data.triangles.emplace_back(12, 11, 10); + data.triangles.emplace_back(8, 12, 10); + data.triangles.emplace_back(9, 8, 10); + + // side faces vertices + append_vertex(data, { half_stem_width, 0.0, -half_thickness }, Vec3f::UnitX()); + append_vertex(data, { half_stem_width, stem_height, -half_thickness }, Vec3f::UnitX()); + append_vertex(data, { half_stem_width, 0.0, half_thickness }, Vec3f::UnitX()); + append_vertex(data, { half_stem_width, stem_height, half_thickness }, Vec3f::UnitX()); + + append_vertex(data, { half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { half_stem_width, stem_height, half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { half_tip_width, stem_height, half_thickness }, -Vec3f::UnitY()); + + Vec3f normal(tip_height, half_tip_width, 0.0f); + normal.normalize(); + append_vertex(data, { half_tip_width, stem_height, -half_thickness }, normal); + append_vertex(data, { 0.0, total_height, -half_thickness }, normal); + append_vertex(data, { half_tip_width, stem_height, half_thickness }, normal); + append_vertex(data, { 0.0, total_height, half_thickness }, normal); + + normal = Vec3f(-tip_height, half_tip_width, 0.0f); + normal.normalize(); + append_vertex(data, { 0.0, total_height, -half_thickness }, normal); + append_vertex(data, { -half_tip_width, stem_height, -half_thickness }, normal); + append_vertex(data, { 0.0, total_height, half_thickness }, normal); + append_vertex(data, { -half_tip_width, stem_height, half_thickness }, normal); + + append_vertex(data, { -half_tip_width, stem_height, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { -half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { -half_tip_width, stem_height, half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { -half_stem_width, stem_height, half_thickness }, -Vec3f::UnitY()); + + append_vertex(data, { -half_stem_width, stem_height, -half_thickness }, -Vec3f::UnitX()); + append_vertex(data, { -half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitX()); + append_vertex(data, { -half_stem_width, stem_height, half_thickness }, -Vec3f::UnitX()); + append_vertex(data, { -half_stem_width, 0.0, half_thickness }, -Vec3f::UnitX()); + + append_vertex(data, { -half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { half_stem_width, 0.0, -half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { -half_stem_width, 0.0, half_thickness }, -Vec3f::UnitY()); + append_vertex(data, { half_stem_width, 0.0, half_thickness }, -Vec3f::UnitY()); + + // side face triangles + for (int i = 0; i < 7; ++i) + { + int ii = i * 4; + data.triangles.emplace_back(14 + ii, 15 + ii, 17 + ii); + data.triangles.emplace_back(14 + ii, 17 + ii, 16 + ii); + } + + return data; +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/GLModel.hpp b/src/slic3r/GUI/GLModel.hpp new file mode 100644 index 0000000000..0b4a69bdb0 --- /dev/null +++ b/src/slic3r/GUI/GLModel.hpp @@ -0,0 +1,68 @@ +#ifndef slic3r_GLModel_hpp_ +#define slic3r_GLModel_hpp_ + +#include "libslic3r/Point.hpp" +#include "libslic3r/BoundingBox.hpp" +#include +#include + +namespace Slic3r { + +class TriangleMesh; + +namespace GUI { + + struct GLModelInitializationData + { + std::vector positions; + std::vector normals; + std::vector triangles; + }; + + class GLModel + { + unsigned int m_vbo_id{ 0 }; + unsigned int m_ibo_id{ 0 }; + size_t m_indices_count{ 0 }; + + BoundingBoxf3 m_bounding_box; + std::string m_filename; + + public: + virtual ~GLModel() { reset(); } + + void init_from(const GLModelInitializationData& data); + void init_from(const TriangleMesh& mesh); + bool init_from_file(const std::string& filename); + void reset(); + void render() const; + + const BoundingBoxf3& get_bounding_box() const { return m_bounding_box; } + + const std::string& get_filename() const { return m_filename; } + + private: + void send_to_gpu(const std::vector& vertices, const std::vector& indices); + }; + + + // create an arrow with cylindrical stem and conical tip, with the given dimensions and resolution + // the origin of the arrow is in the center of the stem cap + // the arrow has its axis of symmetry along the Z axis and is pointing upward + GLModelInitializationData stilized_arrow(int resolution, float tip_radius, float tip_height, float stem_radius, float stem_height); + + // create an arrow whose stem is a quarter of circle, with the given dimensions and resolution + // the origin of the arrow is in the center of the circle + // the arrow is contained in the 1st quadrant of the XY plane and is pointing counterclockwise + GLModelInitializationData circular_arrow(int resolution, float radius, float tip_height, float tip_width, float stem_width, float thickness); + + // create an arrow with the given dimensions + // the origin of the arrow is in the center of the stem cap + // the arrow is contained in XY plane and has its main axis along the Y axis + GLModelInitializationData straight_arrow(float tip_width, float tip_height, float stem_width, float stem_height, float thickness); + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_GLModel_hpp_ + diff --git a/src/slic3r/GUI/GLShader.cpp b/src/slic3r/GUI/GLShader.cpp index c310760603..3c2612b45e 100644 --- a/src/slic3r/GUI/GLShader.cpp +++ b/src/slic3r/GUI/GLShader.cpp @@ -1,366 +1,348 @@ -#include - +#include "libslic3r/libslic3r.h" #include "GLShader.hpp" -#include "libslic3r/Utils.hpp" #include "3DScene.hpp" -#include +#include "libslic3r/Utils.hpp" -#include -#include -#include +#include +#include +#include + +#include namespace Slic3r { -GLShader::~GLShader() +GLShaderProgram::~GLShaderProgram() { - assert(fragment_program_id == 0); - assert(vertex_program_id == 0); - assert(shader_program_id == 0); + if (m_id > 0) + glsafe(::glDeleteProgram(m_id)); } -// A safe wrapper around glGetString to report a "N/A" string in case glGetString returns nullptr. -inline std::string gl_get_string_safe(GLenum param) +bool GLShaderProgram::init_from_files(const std::string& name, const ShaderFilenames& filenames) { - const char *value = (const char*)glGetString(param); - return std::string(value ? value : "N/A"); + auto load_from_file = [](const std::string& filename) { + std::string path = resources_dir() + "/shaders/" + filename; + boost::nowide::ifstream s(path, boost::nowide::ifstream::binary); + if (!s.good()) { + BOOST_LOG_TRIVIAL(error) << "Couldn't open file: '" << path << "'"; + return std::string(); + } + + s.seekg(0, s.end); + int file_length = static_cast(s.tellg()); + s.seekg(0, s.beg); + std::string source(file_length, '\0'); + s.read(source.data(), file_length); + if (!s.good()) { + BOOST_LOG_TRIVIAL(error) << "Error while loading file: '" << path << "'"; + return std::string(); + } + + s.close(); + return source; + }; + + ShaderSources sources = {}; + for (size_t i = 0; i < static_cast(EShaderType::Count); ++i) { + sources[i] = filenames[i].empty() ? std::string() : load_from_file(filenames[i]); + } + + bool valid = !sources[static_cast(EShaderType::Vertex)].empty() && !sources[static_cast(EShaderType::Fragment)].empty() && sources[static_cast(EShaderType::Compute)].empty(); + valid |= !sources[static_cast(EShaderType::Compute)].empty() && sources[static_cast(EShaderType::Vertex)].empty() && sources[static_cast(EShaderType::Fragment)].empty() && + sources[static_cast(EShaderType::Geometry)].empty() && sources[static_cast(EShaderType::TessEvaluation)].empty() && sources[static_cast(EShaderType::TessControl)].empty(); + + return valid ? init_from_texts(name, sources) : false; } -bool GLShader::load_from_text(const char *fragment_shader, const char *vertex_shader) +bool GLShaderProgram::init_from_texts(const std::string& name, const ShaderSources& sources) { - std::string gl_version = gl_get_string_safe(GL_VERSION); - int major = atoi(gl_version.c_str()); - //int minor = atoi(gl_version.c_str() + gl_version.find('.') + 1); - if (major < 2) { - // Cannot create a shader object on OpenGL 1.x. - // Form an error message. - std::string gl_vendor = gl_get_string_safe(GL_VENDOR); - std::string gl_renderer = gl_get_string_safe(GL_RENDERER); - std::string glsl_version = gl_get_string_safe(GL_SHADING_LANGUAGE_VERSION); - last_error = "Your computer does not support OpenGL shaders.\n"; -#ifdef _WIN32 - if (gl_vendor == "Microsoft Corporation" && gl_renderer == "GDI Generic") { - last_error = "Windows is using a software OpenGL renderer.\n" - "You are either connected over remote desktop,\n" - "or a hardware acceleration is not available.\n"; + auto shader_type_as_string = [](EShaderType type) { + switch (type) + { + case EShaderType::Vertex: { return "vertex"; } + case EShaderType::Fragment: { return "fragment"; } + case EShaderType::Geometry: { return "geometry"; } + case EShaderType::TessEvaluation: { return "tesselation evaluation"; } + case EShaderType::TessControl: { return "tesselation control"; } + case EShaderType::Compute: { return "compute"; } + default: { return "unknown"; } } -#endif - last_error += "GL version: " + gl_version + "\n"; - last_error += "vendor: " + gl_vendor + "\n"; - last_error += "renderer: " + gl_renderer + "\n"; - last_error += "GLSL version: " + glsl_version + "\n"; - return false; - } + }; - if (fragment_shader != nullptr) { - this->fragment_program_id = ::glCreateShader(GL_FRAGMENT_SHADER); - glcheck(); - if (this->fragment_program_id == 0) { - last_error = "glCreateShader(GL_FRAGMENT_SHADER) failed."; - return false; + auto create_shader = [](EShaderType type) { + GLuint id = 0; + switch (type) + { + case EShaderType::Vertex: { id = ::glCreateShader(GL_VERTEX_SHADER); glcheck(); break; } + case EShaderType::Fragment: { id = ::glCreateShader(GL_FRAGMENT_SHADER); glcheck(); break; } + case EShaderType::Geometry: { id = ::glCreateShader(GL_GEOMETRY_SHADER); glcheck(); break; } + case EShaderType::TessEvaluation: { id = ::glCreateShader(GL_TESS_EVALUATION_SHADER); glcheck(); break; } + case EShaderType::TessControl: { id = ::glCreateShader(GL_TESS_CONTROL_SHADER); glcheck(); break; } + case EShaderType::Compute: { id = ::glCreateShader(GL_COMPUTE_SHADER); glcheck(); break; } + default: { break; } } - GLint len = (GLint)strlen(fragment_shader); - glsafe(::glShaderSource(this->fragment_program_id, 1, &fragment_shader, &len)); - glsafe(::glCompileShader(this->fragment_program_id)); - GLint params; - glsafe(::glGetShaderiv(this->fragment_program_id, GL_COMPILE_STATUS, ¶ms)); - if (params == GL_FALSE) { - // Compilation failed. Get the log. - glsafe(::glGetShaderiv(this->fragment_program_id, GL_INFO_LOG_LENGTH, ¶ms)); - std::vector msg(params); - glsafe(::glGetShaderInfoLog(this->fragment_program_id, params, ¶ms, msg.data())); - this->last_error = std::string("Fragment shader compilation failed:\n") + msg.data(); - this->release(); - return false; + + return (id == 0) ? std::make_pair(false, GLuint(0)) : std::make_pair(true, id); + }; + + auto release_shaders = [](const std::array(EShaderType::Count)>& shader_ids) { + for (size_t i = 0; i < static_cast(EShaderType::Count); ++i) { + if (shader_ids[i] > 0) + glsafe(::glDeleteShader(shader_ids[i])); + } + }; + + assert(m_id == 0); + + m_name = name; + + std::array(EShaderType::Count)> shader_ids = { 0 }; + + for (size_t i = 0; i < static_cast(EShaderType::Count); ++i) { + const std::string& source = sources[i]; + if (!source.empty()) + { + EShaderType type = static_cast(i); + auto [result, id] = create_shader(type); + if (result) + shader_ids[i] = id; + else { + BOOST_LOG_TRIVIAL(error) << "glCreateShader() failed for " << shader_type_as_string(type) << " shader of shader program '" << name << "'"; + + // release shaders + release_shaders(shader_ids); + return false; + } + + const char* source_ptr = source.c_str(); + glsafe(::glShaderSource(id, 1, &source_ptr, nullptr)); + glsafe(::glCompileShader(id)); + GLint params; + glsafe(::glGetShaderiv(id, GL_COMPILE_STATUS, ¶ms)); + if (params == GL_FALSE) { + // Compilation failed. + glsafe(::glGetShaderiv(id, GL_INFO_LOG_LENGTH, ¶ms)); + std::vector msg(params); + glsafe(::glGetShaderInfoLog(id, params, ¶ms, msg.data())); + BOOST_LOG_TRIVIAL(error) << "Unable to compile " << shader_type_as_string(type) << " shader of shader program '" << name << "':\n" << msg.data(); + + // release shaders + release_shaders(shader_ids); + return false; + } } } - if (vertex_shader != nullptr) { - this->vertex_program_id = ::glCreateShader(GL_VERTEX_SHADER); - glcheck(); - if (this->vertex_program_id == 0) { - last_error = "glCreateShader(GL_VERTEX_SHADER) failed."; - this->release(); - return false; - } - GLint len = (GLint)strlen(vertex_shader); - glsafe(::glShaderSource(this->vertex_program_id, 1, &vertex_shader, &len)); - glsafe(::glCompileShader(this->vertex_program_id)); - GLint params; - glsafe(::glGetShaderiv(this->vertex_program_id, GL_COMPILE_STATUS, ¶ms)); - if (params == GL_FALSE) { - // Compilation failed. Get the log. - glsafe(::glGetShaderiv(this->vertex_program_id, GL_INFO_LOG_LENGTH, ¶ms)); - std::vector msg(params); - glsafe(::glGetShaderInfoLog(this->vertex_program_id, params, ¶ms, msg.data())); - this->last_error = std::string("Vertex shader compilation failed:\n") + msg.data(); - this->release(); - return false; - } - } - - // Link shaders - this->shader_program_id = ::glCreateProgram(); + m_id = ::glCreateProgram(); glcheck(); - if (this->shader_program_id == 0) { - last_error = "glCreateProgram() failed."; - this->release(); + if (m_id == 0) { + BOOST_LOG_TRIVIAL(error) << "glCreateProgram() failed for shader program '" << name << "'"; + + // release shaders + release_shaders(shader_ids); return false; } - if (this->fragment_program_id) - glsafe(::glAttachShader(this->shader_program_id, this->fragment_program_id)); - if (this->vertex_program_id) - glsafe(::glAttachShader(this->shader_program_id, this->vertex_program_id)); - glsafe(::glLinkProgram(this->shader_program_id)); + for (size_t i = 0; i < static_cast(EShaderType::Count); ++i) { + if (shader_ids[i] > 0) + glsafe(::glAttachShader(m_id, shader_ids[i])); + } + glsafe(::glLinkProgram(m_id)); GLint params; - glsafe(::glGetProgramiv(this->shader_program_id, GL_LINK_STATUS, ¶ms)); + glsafe(::glGetProgramiv(m_id, GL_LINK_STATUS, ¶ms)); if (params == GL_FALSE) { - // Linking failed. Get the log. - glsafe(::glGetProgramiv(this->shader_program_id, GL_INFO_LOG_LENGTH, ¶ms)); + // Linking failed. + glsafe(::glGetProgramiv(m_id, GL_INFO_LOG_LENGTH, ¶ms)); std::vector msg(params); - glsafe(::glGetProgramInfoLog(this->shader_program_id, params, ¶ms, msg.data())); - this->last_error = std::string("Shader linking failed:\n") + msg.data(); - this->release(); + glsafe(::glGetProgramInfoLog(m_id, params, ¶ms, msg.data())); + BOOST_LOG_TRIVIAL(error) << "Unable to link shader program '" << name << "':\n" << msg.data(); + + // release shaders + release_shaders(shader_ids); + + // release shader program + glsafe(::glDeleteProgram(m_id)); + m_id = 0; + return false; } - last_error.clear(); + // release shaders, they are no more needed + release_shaders(shader_ids); + return true; } -bool GLShader::load_from_file(const char* fragment_shader_filename, const char* vertex_shader_filename) +void GLShaderProgram::start_using() const { - const std::string& path = resources_dir() + "/shaders/"; - - boost::nowide::ifstream vs(path + std::string(vertex_shader_filename), boost::nowide::ifstream::binary); - if (!vs.good()) - return false; - - vs.seekg(0, vs.end); - int file_length = (int)vs.tellg(); - vs.seekg(0, vs.beg); - std::string vertex_shader(file_length, '\0'); - vs.read(vertex_shader.data(), file_length); - if (!vs.good()) - return false; - - vs.close(); - - boost::nowide::ifstream fs(path + std::string(fragment_shader_filename), boost::nowide::ifstream::binary); - if (!fs.good()) - return false; - - fs.seekg(0, fs.end); - file_length = (int)fs.tellg(); - fs.seekg(0, fs.beg); - std::string fragment_shader(file_length, '\0'); - fs.read(fragment_shader.data(), file_length); - if (!fs.good()) - return false; - - fs.close(); - - return load_from_text(fragment_shader.c_str(), vertex_shader.c_str()); + assert(m_id > 0); + glsafe(::glUseProgram(m_id)); } -void GLShader::release() -{ - if (this->shader_program_id) { - if (this->vertex_program_id) - glsafe(::glDetachShader(this->shader_program_id, this->vertex_program_id)); - if (this->fragment_program_id) - glsafe(::glDetachShader(this->shader_program_id, this->fragment_program_id)); - glsafe(::glDeleteProgram(this->shader_program_id)); - this->shader_program_id = 0; - } - - if (this->vertex_program_id) { - glsafe(::glDeleteShader(this->vertex_program_id)); - this->vertex_program_id = 0; - } - if (this->fragment_program_id) { - glsafe(::glDeleteShader(this->fragment_program_id)); - this->fragment_program_id = 0; - } -} - -void GLShader::enable() const -{ - glsafe(::glUseProgram(this->shader_program_id)); -} - -void GLShader::disable() const +void GLShaderProgram::stop_using() const { glsafe(::glUseProgram(0)); } -// Return shader vertex attribute ID -int GLShader::get_attrib_location(const char *name) const -{ - return this->shader_program_id ? glGetAttribLocation(this->shader_program_id, name) : -1; -} - -// Return shader uniform variable ID -int GLShader::get_uniform_location(const char *name) const -{ - return this->shader_program_id ? glGetUniformLocation(this->shader_program_id, name) : -1; -} - -bool GLShader::set_uniform(const char *name, float value) const -{ - int id = this->get_uniform_location(name); - if (id >= 0) { - glsafe(::glUniform1fARB(id, value)); - return true; - } - return false; -} - -bool GLShader::set_uniform(const char* name, const float* matrix) const +bool GLShaderProgram::set_uniform(const char* name, int value) const { int id = get_uniform_location(name); - if (id >= 0) - { - glsafe(::glUniformMatrix4fv(id, 1, GL_FALSE, (const GLfloat*)matrix)); + if (id >= 0) { + glsafe(::glUniform1i(id, static_cast(value))); return true; } return false; } -bool GLShader::set_uniform(const char* name, int value) const +bool GLShaderProgram::set_uniform(const char* name, bool value) const +{ + return set_uniform(name, value ? 1 : 0); +} + +bool GLShaderProgram::set_uniform(const char* name, float value) const { int id = get_uniform_location(name); - if (id >= 0) - { - glsafe(::glUniform1i(id, value)); + if (id >= 0) { + glsafe(::glUniform1f(id, static_cast(value))); return true; } return false; } -/* -# Set shader vector -sub SetVector +bool GLShaderProgram::set_uniform(const char* name, double value) const { - my($self,$var,@values) = @_; - - my $id = $self->Map($var); - return 'Unable to map $var' if (!defined($id)); - - my $count = scalar(@values); - eval('glUniform'.$count.'fARB($id,@values)'); - - return ''; + return set_uniform(name, static_cast(value)); } -# Set shader 4x4 matrix -sub SetMatrix +bool GLShaderProgram::set_uniform(const char* name, const std::array& value) const { - my($self,$var,$oga) = @_; - - my $id = $self->Map($var); - return 'Unable to map $var' if (!defined($id)); - - glUniformMatrix4fvARB_c($id,1,0,$oga->ptr()); - return ''; -} -*/ - -Shader::Shader() - : m_shader(nullptr) -{ -} - -Shader::~Shader() -{ - reset(); -} - -bool Shader::init(const std::string& vertex_shader_filename, const std::string& fragment_shader_filename) -{ - if (is_initialized()) + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform2iv(id, 1, static_cast(value.data()))); return true; + } + return false; +} - m_shader = new GLShader(); - if (m_shader != nullptr) - { - if (!m_shader->load_from_file(fragment_shader_filename.c_str(), vertex_shader_filename.c_str())) - { - std::cout << "Compilaton of shader failed:" << std::endl; - std::cout << m_shader->last_error << std::endl; - reset(); - return false; +bool GLShaderProgram::set_uniform(const char* name, const std::array& value) const +{ + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform3iv(id, 1, static_cast(value.data()))); + return true; + } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const std::array& value) const +{ + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform4iv(id, 1, static_cast(value.data()))); + return true; + } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const std::array& value) const +{ + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform2fv(id, 1, static_cast(value.data()))); + return true; + } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const std::array& value) const +{ + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform3fv(id, 1, static_cast(value.data()))); + return true; + } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const std::array& value) const +{ + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform4fv(id, 1, static_cast(value.data()))); + return true; + } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const float* value, size_t size) const +{ + if (size == 1) + return set_uniform(name, value[0]); + else if (size < 5) { + int id = get_uniform_location(name); + if (id >= 0) { + if (size == 2) + glsafe(::glUniform2fv(id, 1, static_cast(value))); + else if (size == 3) + glsafe(::glUniform3fv(id, 1, static_cast(value))); + else + glsafe(::glUniform4fv(id, 1, static_cast(value))); + + return true; } } - - return true; + return false; } -bool Shader::is_initialized() const +bool GLShaderProgram::set_uniform(const char* name, const Transform3f& value) const { - return (m_shader != nullptr); -} - -bool Shader::start_using() const -{ - if (is_initialized()) - { - m_shader->enable(); + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniformMatrix4fv(id, 1, GL_FALSE, static_cast(value.matrix().data()))); return true; } - else - return false; + return false; } -void Shader::stop_using() const +bool GLShaderProgram::set_uniform(const char* name, const Transform3d& value) const { - if (m_shader != nullptr) - m_shader->disable(); + return set_uniform(name, value.cast()); } -int Shader::get_attrib_location(const std::string& name) const +bool GLShaderProgram::set_uniform(const char* name, const Matrix3f& value) const { - return (m_shader != nullptr) ? m_shader->get_attrib_location(name.c_str()) : -1; -} - -int Shader::get_uniform_location(const std::string& name) const -{ - return (m_shader != nullptr) ? m_shader->get_uniform_location(name.c_str()) : -1; -} - -void Shader::set_uniform(const std::string& name, float value) const -{ - if (m_shader != nullptr) - m_shader->set_uniform(name.c_str(), value); -} - -void Shader::set_uniform(const std::string& name, const float* matrix) const -{ - if (m_shader != nullptr) - m_shader->set_uniform(name.c_str(), matrix); -} - -void Shader::set_uniform(const std::string& name, bool value) const -{ - if (m_shader != nullptr) - m_shader->set_uniform(name.c_str(), value ? 1 : 0); -} - -unsigned int Shader::get_shader_program_id() const -{ - return (m_shader != nullptr) ? m_shader->shader_program_id : 0; -} - -void Shader::reset() -{ - if (m_shader != nullptr) - { - m_shader->release(); - delete m_shader; - m_shader = nullptr; + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniformMatrix3fv(id, 1, GL_FALSE, static_cast(value.data()))); + return true; } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const Vec3f& value) const +{ + int id = get_uniform_location(name); + if (id >= 0) { + glsafe(::glUniform3fv(id, 1, static_cast(value.data()))); + return true; + } + return false; +} + +bool GLShaderProgram::set_uniform(const char* name, const Vec3d& value) const +{ + return set_uniform(name, static_cast(value.cast())); +} + +int GLShaderProgram::get_attrib_location(const char* name) const +{ + return (m_id > 0) ? ::glGetAttribLocation(m_id, name) : -1; +} + +int GLShaderProgram::get_uniform_location(const char* name) const +{ + return (m_id > 0) ? ::glGetUniformLocation(m_id, name) : -1; } } // namespace Slic3r diff --git a/src/slic3r/GUI/GLShader.hpp b/src/slic3r/GUI/GLShader.hpp index df2a23f15c..84fdf5ebad 100644 --- a/src/slic3r/GUI/GLShader.hpp +++ b/src/slic3r/GUI/GLShader.hpp @@ -1,71 +1,69 @@ #ifndef slic3r_GLShader_hpp_ #define slic3r_GLShader_hpp_ -#include "libslic3r/libslic3r.h" +#include +#include + #include "libslic3r/Point.hpp" namespace Slic3r { -class GLShader +class GLShaderProgram { public: - GLShader() : - fragment_program_id(0), - vertex_program_id(0), - shader_program_id(0) - {} - ~GLShader(); + enum class EShaderType + { + Vertex, + Fragment, + Geometry, + TessEvaluation, + TessControl, + Compute, + Count + }; - bool load_from_text(const char *fragment_shader, const char *vertex_shader); - bool load_from_file(const char* fragment_shader_filename, const char* vertex_shader_filename); - - void release(); - - int get_attrib_location(const char *name) const; - int get_uniform_location(const char *name) const; - - bool set_uniform(const char *name, float value) const; - bool set_uniform(const char* name, const float* matrix) const; - bool set_uniform(const char* name, int value) const; - - void enable() const; - void disable() const; - - unsigned int fragment_program_id; - unsigned int vertex_program_id; - unsigned int shader_program_id; - std::string last_error; -}; - -class Shader -{ - GLShader* m_shader; - -public: - Shader(); - ~Shader(); - - bool init(const std::string& vertex_shader_filename, const std::string& fragment_shader_filename); - - bool is_initialized() const; - - bool start_using() const; - void stop_using() const; - - int get_attrib_location(const std::string& name) const; - int get_uniform_location(const std::string& name) const; - - void set_uniform(const std::string& name, float value) const; - void set_uniform(const std::string& name, const float* matrix) const; - void set_uniform(const std::string& name, bool value) const; - - const GLShader* get_shader() const { return m_shader; } - unsigned int get_shader_program_id() const; + typedef std::array(EShaderType::Count)> ShaderFilenames; + typedef std::array(EShaderType::Count)> ShaderSources; private: - void reset(); + std::string m_name; + unsigned int m_id{ 0 }; + +public: + ~GLShaderProgram(); + + bool init_from_files(const std::string& name, const ShaderFilenames& filenames); + bool init_from_texts(const std::string& name, const ShaderSources& sources); + + const std::string& get_name() const { return m_name; } + unsigned int get_id() const { return m_id; } + + void start_using() const; + void stop_using() const; + + bool set_uniform(const char* name, int value) const; + bool set_uniform(const char* name, bool value) const; + bool set_uniform(const char* name, float value) const; + bool set_uniform(const char* name, double value) const; + bool set_uniform(const char* name, const std::array& value) const; + bool set_uniform(const char* name, const std::array& value) const; + bool set_uniform(const char* name, const std::array& value) const; + bool set_uniform(const char* name, const std::array& value) const; + bool set_uniform(const char* name, const std::array& value) const; + bool set_uniform(const char* name, const std::array& value) const; + bool set_uniform(const char* name, const float* value, size_t size) const; + bool set_uniform(const char* name, const Transform3f& value) const; + bool set_uniform(const char* name, const Transform3d& value) const; + bool set_uniform(const char* name, const Matrix3f& value) const; + bool set_uniform(const char* name, const Vec3f& value) const; + bool set_uniform(const char* name, const Vec3d& value) const; + + // returns -1 if not found + int get_attrib_location(const char* name) const; + // returns -1 if not found + int get_uniform_location(const char* name) const; }; -} +} // namespace Slic3r #endif /* slic3r_GLShader_hpp_ */ diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp new file mode 100644 index 0000000000..1041faa3dc --- /dev/null +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -0,0 +1,75 @@ +#include "libslic3r/libslic3r.h" +#include "GLShadersManager.hpp" +#include "3DScene.hpp" +#include "GUI_App.hpp" + +#include +#include + +#include + +namespace Slic3r { + +std::pair GLShadersManager::init() +{ + std::string error; + + auto append_shader = [this, &error](const std::string& name, const GLShaderProgram::ShaderFilenames& filenames) { + m_shaders.push_back(std::make_unique()); + if (!m_shaders.back()->init_from_files(name, filenames)) { + error += name + "\n"; + // if any error happens while initializating the shader, we remove it from the list + m_shaders.pop_back(); + return false; + } + return true; + }; + + assert(m_shaders.empty()); + + bool valid = true; + + // used to render bed axes and model, selection hints, gcode sequential view marker model, preview shells + valid &= append_shader("gouraud_light", { "gouraud_light.vs", "gouraud_light.fs" }); + // used to render printbed + valid &= append_shader("printbed", { "printbed.vs", "printbed.fs" }); + // used to render options in gcode preview + valid &= append_shader("options_110", { "options_110.vs", "options_110.fs" }); + if (GUI::wxGetApp().is_glsl_version_greater_or_equal_to(1, 20)) + valid &= append_shader("options_120", { "options_120.vs", "options_120.fs" }); + // used to render extrusion and travel paths as lines in gcode preview + valid &= append_shader("toolpaths_lines", { "toolpaths_lines.vs", "toolpaths_lines.fs" }); + // used to render objects in 3d editor + valid &= append_shader("gouraud", { "gouraud.vs", "gouraud.fs" }); + // used to render variable layers heights in 3d editor + valid &= append_shader("variable_layer_height", { "variable_layer_height.vs", "variable_layer_height.fs" }); + + return { valid, error }; +} + +void GLShadersManager::shutdown() +{ + for (std::unique_ptr& shader : m_shaders) { + shader.reset(); + } +} + +GLShaderProgram* GLShadersManager::get_shader(const std::string& shader_name) +{ + auto it = std::find_if(m_shaders.begin(), m_shaders.end(), [shader_name](std::unique_ptr& p) { return p->get_name() == shader_name; }); + return (it != m_shaders.end()) ? it->get() : nullptr; +} + +GLShaderProgram* GLShadersManager::get_current_shader() +{ + GLint id = 0; + glsafe(::glGetIntegerv(GL_CURRENT_PROGRAM, &id)); + if (id == 0) + return nullptr; + + auto it = std::find_if(m_shaders.begin(), m_shaders.end(), [id](std::unique_ptr& p) { return static_cast(p->get_id()) == id; }); + return (it != m_shaders.end()) ? it->get() : nullptr; +} + +} // namespace Slic3r + diff --git a/src/slic3r/GUI/GLShadersManager.hpp b/src/slic3r/GUI/GLShadersManager.hpp new file mode 100644 index 0000000000..b2bbc140bd --- /dev/null +++ b/src/slic3r/GUI/GLShadersManager.hpp @@ -0,0 +1,30 @@ +#ifndef slic3r_GLShadersManager_hpp_ +#define slic3r_GLShadersManager_hpp_ + +#include "GLShader.hpp" + +#include +#include +#include + +namespace Slic3r { + +class GLShadersManager +{ + std::vector> m_shaders; + +public: + std::pair init(); + // call this method before to release the OpenGL context + void shutdown(); + + // returns nullptr if not found + GLShaderProgram* get_shader(const std::string& shader_name); + + // returns currently active shader, nullptr if none + GLShaderProgram* get_current_shader(); +}; + +} // namespace Slic3r + +#endif // slic3r_GLShadersManager_hpp_ diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 4ab282b066..46371b037a 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -230,24 +230,13 @@ void GLToolbar::set_icons_size(float size) void GLToolbar::set_scale(float scale) { - if (m_layout.scale != scale) - { + if (m_layout.scale != scale) { m_layout.scale = scale; m_layout.dirty = true; m_icons_texture_dirty = true; } } -bool GLToolbar::is_enabled() const -{ - return m_enabled; -} - -void GLToolbar::set_enabled(bool enable) -{ - m_enabled = enable;//true; etFIXME -} - bool GLToolbar::add_item(const GLToolbarItem::Data& data) { GLToolbarItem* item = new GLToolbarItem(GLToolbarItem::Action, data); diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 41c2735c9a..74e18de975 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -276,8 +276,8 @@ public: void set_icons_size(float size); void set_scale(float scale); - bool is_enabled() const; - void set_enabled(bool enable); + bool is_enabled() const { return m_enabled; } + void set_enabled(bool enable) { m_enabled = enable; } bool add_item(const GLToolbarItem::Data& data); bool add_separator(); diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index c119112c2c..d822c98736 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -184,6 +184,8 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("gcode_flavor") == 0) config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if (opt_key.compare("machine_limits_usage") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("support_material_pattern") == 0) config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("seam_position") == 0) @@ -194,6 +196,8 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if(opt_key.compare("support_pillar_connection_mode") == 0) config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if(opt_key == "printhost_authorization_type") + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); } break; case coPoints:{ @@ -253,7 +257,7 @@ void warning_catcher(wxWindow* parent, const wxString& message) msg.ShowModal(); } -void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string items, bool initial_value) +void create_combochecklist(wxComboCtrl* comboCtrl, const std::string& text, const std::string& items) { if (comboCtrl == nullptr) return; @@ -264,41 +268,59 @@ void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string // On the other side, with this line the combo box popup cannot be closed by clicking on the combo button on Windows 10. comboCtrl->UseAltPopupWindow(); + int max_width = 0; + // the following line messes up the popup size the first time it is shown on wxWidgets 3.1.3 // comboCtrl->EnablePopupAnimation(false); comboCtrl->SetPopupControl(popup); - popup->SetStringValue(from_u8(text)); - popup->Bind(wxEVT_CHECKLISTBOX, [popup](wxCommandEvent& evt) { popup->OnCheckListBox(evt); }); - popup->Bind(wxEVT_LISTBOX, [popup](wxCommandEvent& evt) { popup->OnListBoxSelection(evt); }); + wxString title = from_u8(text); + max_width = std::max(max_width, 60 + comboCtrl->GetTextExtent(title).x); + popup->SetStringValue(title); + popup->Bind(wxEVT_CHECKLISTBOX, [popup](wxCommandEvent& evt) { popup->OnCheckListBox(evt); }); + popup->Bind(wxEVT_LISTBOX, [popup](wxCommandEvent& evt) { popup->OnListBoxSelection(evt); }); popup->Bind(wxEVT_KEY_DOWN, [popup](wxKeyEvent& evt) { popup->OnKeyEvent(evt); }); popup->Bind(wxEVT_KEY_UP, [popup](wxKeyEvent& evt) { popup->OnKeyEvent(evt); }); std::vector items_str; boost::split(items_str, items, boost::is_any_of("|"), boost::token_compress_off); - for (const std::string& item : items_str) { - popup->Append(from_u8(item)); - } + // each item must be composed by 2 parts + assert(items_str.size() %2 == 0); - for (unsigned int i = 0; i < popup->GetCount(); ++i) { - popup->Check(i, initial_value); - } - } + for (size_t i = 0; i < items_str.size(); i += 2) { + wxString label = from_u8(items_str[i]); + max_width = std::max(max_width, 60 + popup->GetTextExtent(label).x); + popup->Append(label); + popup->Check(i / 2, items_str[i + 1] == "1"); + } + + comboCtrl->SetMinClientSize(wxSize(max_width, -1)); + } } -int combochecklist_get_flags(wxComboCtrl* comboCtrl) +unsigned int combochecklist_get_flags(wxComboCtrl* comboCtrl) { - int flags = 0; + unsigned int flags = 0; - wxCheckListBoxComboPopup* popup = wxDynamicCast(comboCtrl->GetPopupControl(), wxCheckListBoxComboPopup); - if (popup != nullptr) { - for (unsigned int i = 0; i < popup->GetCount(); ++i) { - if (popup->IsChecked(i)) - flags |= 1 << i; - } - } + wxCheckListBoxComboPopup* popup = wxDynamicCast(comboCtrl->GetPopupControl(), wxCheckListBoxComboPopup); + if (popup != nullptr) { + for (unsigned int i = 0; i < popup->GetCount(); ++i) { + if (popup->IsChecked(i)) + flags |= 1 << i; + } + } - return flags; + return flags; +} + +void combochecklist_set_flags(wxComboCtrl* comboCtrl, unsigned int flags) +{ + wxCheckListBoxComboPopup* popup = wxDynamicCast(comboCtrl->GetPopupControl(), wxCheckListBoxComboPopup); + if (popup != nullptr) { + for (unsigned int i = 0; i < popup->GetCount(); ++i) { + popup->Check(i, (flags & (1 << i)) != 0); + } + } } AppConfig* get_app_config() diff --git a/src/slic3r/GUI/GUI.hpp b/src/slic3r/GUI/GUI.hpp index a54288df45..cf133971e3 100644 --- a/src/slic3r/GUI/GUI.hpp +++ b/src/slic3r/GUI/GUI.hpp @@ -49,13 +49,17 @@ inline void show_info(wxWindow* parent, const std::string& message,const std::st void warning_catcher(wxWindow* parent, const wxString& message); // Creates a wxCheckListBoxComboPopup inside the given wxComboCtrl, filled with the given text and items. -// Items are all initialized to the given value. -// Items must be separated by '|', for example "Item1|Item2|Item3", and so on. -void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string items, bool initial_value); +// Items data must be separated by '|', and contain the item name to be shown followed by its initial value (0 for false, 1 for true). +// For example "Item1|0|Item2|1|Item3|0", and so on. +void create_combochecklist(wxComboCtrl* comboCtrl, const std::string& text, const std::string& items); // Returns the current state of the items listed in the wxCheckListBoxComboPopup contained in the given wxComboCtrl, -// encoded inside an int. -int combochecklist_get_flags(wxComboCtrl* comboCtrl); +// encoded inside an unsigned int. +unsigned int combochecklist_get_flags(wxComboCtrl* comboCtrl); + +// Sets the current state of the items listed in the wxCheckListBoxComboPopup contained in the given wxComboCtrl, +// with the flags encoded in the given unsigned int. +void combochecklist_set_flags(wxComboCtrl* comboCtrl, unsigned int flags); // wxString conversions: diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index a7b562bd75..5848192d03 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1,4 +1,6 @@ +#include "libslic3r/Technologies.hpp" #include "GUI_App.hpp" +#include "GUI_Init.hpp" #include "GUI_ObjectList.hpp" #include "GUI_ObjectManipulation.hpp" #include "I18N.hpp" @@ -23,25 +25,30 @@ #include #include #include -#include #include #include #include +#include +#include +#include +#include + #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/I18N.hpp" +#include "libslic3r/PresetBundle.hpp" #include "GUI.hpp" #include "GUI_Utils.hpp" -#include "AppConfig.hpp" -#include "PresetBundle.hpp" #include "3DScene.hpp" #include "MainFrame.hpp" #include "Plater.hpp" +#include "GLCanvas3D.hpp" #include "../Utils/PresetUpdater.hpp" #include "../Utils/PrintHost.hpp" +#include "../Utils/Process.hpp" #include "../Utils/MacDarkMode.hpp" #include "slic3r/Config/Snapshot.hpp" #include "ConfigSnapshotDialog.hpp" @@ -54,6 +61,11 @@ #include "Mouse3DController.hpp" #include "RemovableDriveManager.hpp" #include "InstanceCheck.hpp" +#include "NotificationManager.hpp" +#include "UnsavedChangesDialog.hpp" +#include "SavePresetDialog.hpp" + +#include "BitmapCache.hpp" #ifdef __WXMSW__ #include @@ -70,6 +82,329 @@ namespace GUI { class MainFrame; +class SplashScreen : public wxSplashScreen +{ +public: + SplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, wxPoint pos = wxDefaultPosition) + : wxSplashScreen(bitmap, splashStyle, milliseconds, nullptr, wxID_ANY, wxDefaultPosition, wxDefaultSize, +#ifdef __APPLE__ + wxSIMPLE_BORDER | wxFRAME_NO_TASKBAR | wxSTAY_ON_TOP +#else + wxSIMPLE_BORDER | wxFRAME_NO_TASKBAR +#endif // !__APPLE__ + ) + { + wxASSERT(bitmap.IsOk()); + + int init_dpi = get_dpi_for_window(this); + this->SetPosition(pos); + this->CenterOnScreen(); + int new_dpi = get_dpi_for_window(this); + + m_scale = (float)(new_dpi) / (float)(init_dpi); + m_main_bitmap = bitmap; + + scale_bitmap(m_main_bitmap, m_scale); + + // init constant texts and scale fonts + init_constant_text(); + + // this font will be used for the action string + m_action_font = m_constant_text.credits_font.Bold(); + + // draw logo and constant info text + Decorate(m_main_bitmap); + } + + void SetText(const wxString& text) + { + set_bitmap(m_main_bitmap); + if (!text.empty()) { + wxBitmap bitmap(m_main_bitmap); + + wxMemoryDC memDC; + memDC.SelectObject(bitmap); + + memDC.SetFont(m_action_font); + memDC.SetTextForeground(wxColour(237, 107, 33)); + memDC.DrawText(text, int(m_scale * 60), int(m_scale * 275)); + + memDC.SelectObject(wxNullBitmap); + set_bitmap(bitmap); +#ifdef __WXOSX__ + // without this code splash screen wouldn't be updated under OSX + wxYield(); +#endif + } + } + + static wxBitmap MakeBitmap(wxBitmap bmp) + { + if (!bmp.IsOk()) + return wxNullBitmap; + + // create dark grey background for the splashscreen + // It will be 5/3 of the weight of the bitmap + int width = lround((double)5 / 3 * bmp.GetWidth()); + int height = bmp.GetHeight(); + + wxImage image(width, height); + unsigned char* imgdata_ = image.GetData(); + for (int i = 0; i < width * height; ++i) { + *imgdata_++ = 51; + *imgdata_++ = 51; + *imgdata_++ = 51; + } + + wxBitmap new_bmp(image); + + wxMemoryDC memDC; + memDC.SelectObject(new_bmp); + memDC.DrawBitmap(bmp, width - bmp.GetWidth(), 0, true); + + return new_bmp; + } + + void Decorate(wxBitmap& bmp) + { + if (!bmp.IsOk()) + return; + + // draw text to the box at the left of the splashscreen. + // this box will be 2/5 of the weight of the bitmap, and be at the left. + int width = lround(bmp.GetWidth() * 0.4); + + // load bitmap for logo + BitmapCache bmp_cache; + int logo_size = lround(width * 0.25); +#if ENABLE_GCODE_VIEWER + wxBitmap logo_bmp = *bmp_cache.load_svg(wxGetApp().is_editor() ? "prusa_slicer_logo" : "add_gcode", logo_size, logo_size); +#else + wxBitmap logo_bmp = *bmp_cache.load_svg("prusa_slicer_logo", logo_size, logo_size); +#endif // ENABLE_GCODE_VIEWER + + wxCoord margin = int(m_scale * 20); + + wxRect banner_rect(wxPoint(0, logo_size), wxPoint(width, bmp.GetHeight())); + banner_rect.Deflate(margin, 2 * margin); + + // use a memory DC to draw directly onto the bitmap + wxMemoryDC memDc(bmp); + + // draw logo + memDc.DrawBitmap(logo_bmp, margin, margin, true); + + // draw the (white) labels inside of our black box (at the left of the splashscreen) + memDc.SetTextForeground(wxColour(255, 255, 255)); + + memDc.SetFont(m_constant_text.title_font); + memDc.DrawLabel(m_constant_text.title, banner_rect, wxALIGN_TOP | wxALIGN_LEFT); + + int title_height = memDc.GetTextExtent(m_constant_text.title).GetY(); + banner_rect.SetTop(banner_rect.GetTop() + title_height); + banner_rect.SetHeight(banner_rect.GetHeight() - title_height); + + memDc.SetFont(m_constant_text.version_font); + memDc.DrawLabel(m_constant_text.version, banner_rect, wxALIGN_TOP | wxALIGN_LEFT); + + memDc.SetFont(m_constant_text.credits_font); + memDc.DrawLabel(m_constant_text.credits, banner_rect, wxALIGN_BOTTOM | wxALIGN_LEFT); + } + +private: + wxBitmap m_main_bitmap; + wxFont m_action_font; + float m_scale {1.0}; + + struct ConstantText + { + wxString title; + wxString version; + wxString credits; + + wxFont title_font; + wxFont version_font; + wxFont credits_font; + + void init(wxFont init_font) + { + // title +#if ENABLE_GCODE_VIEWER + title = wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME; +#else + title = SLIC3R_APP_NAME; +#endif // ENABLE_GCODE_VIEWER + + // dynamically get the version to display + version = _L("Version") + " " + std::string(SLIC3R_VERSION); + + // credits infornation + credits = title + " " + + _L("is based on Slic3r by Alessandro Ranellucci and the RepRap community.") + "\n\n" + + title + " " + _L("is licensed under the") + " " + _L("GNU Affero General Public License, version 3") + "\n\n" + + _L("Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others.") + "\n\n" + + _L("Artwork model by Nora Al-Badri and Jan Nikolai Nelles"); + + title_font = version_font = credits_font = init_font; + } + } + m_constant_text; + + void init_constant_text() + { + m_constant_text.init(get_default_font(this)); + + // As default we use a system font for current display. + // Scale fonts in respect to banner width + + int text_banner_width = lround(0.4 * m_main_bitmap.GetWidth()) - roundl(m_scale * 50); // banner_width - margins + + float title_font_scale = (float)text_banner_width / GetTextExtent(m_constant_text.title).GetX(); + scale_font(m_constant_text.title_font, title_font_scale > 3.5f ? 3.5f : title_font_scale); + + scale_font(m_constant_text.version_font, 2.f); + + // The width of the credits information string doesn't respect to the banner width some times. + // So, scale credits_font in the respect to the longest string width + int longest_string_width = word_wrap_string(m_constant_text.credits); + float font_scale = (float)text_banner_width / longest_string_width; + scale_font(m_constant_text.credits_font, font_scale); + } + + void set_bitmap(wxBitmap& bmp) + { + m_window->SetBitmap(bmp); + m_window->Refresh(); + m_window->Update(); + } + + void scale_bitmap(wxBitmap& bmp, float scale) + { + if (scale == 1.0) + return; + + wxImage image = bmp.ConvertToImage(); + if (!image.IsOk() || image.GetWidth() == 0 || image.GetHeight() == 0) + return; + + int width = int(scale * image.GetWidth()); + int height = int(scale * image.GetHeight()); + image.Rescale(width, height, wxIMAGE_QUALITY_BILINEAR); + + bmp = wxBitmap(std::move(image)); + } + + void scale_font(wxFont& font, float scale) + { +#ifdef __WXMSW__ + // Workaround for the font scaling in respect to the current active display, + // not for the primary display, as it's implemented in Font.cpp + // See https://github.com/wxWidgets/wxWidgets/blob/master/src/msw/font.cpp + // void wxNativeFontInfo::SetFractionalPointSize(float pointSizeNew) + wxNativeFontInfo nfi= *font.GetNativeFontInfo(); + float pointSizeNew = scale * font.GetPointSize(); + nfi.lf.lfHeight = nfi.GetLogFontHeightAtPPI(pointSizeNew, get_dpi_for_window(this)); + nfi.pointSize = pointSizeNew; + font = wxFont(nfi); +#else + font.Scale(scale); +#endif //__WXMSW__ + } + + // wrap a string for the strings no longer then 55 symbols + // return extent of the longest string + int word_wrap_string(wxString& input) + { + size_t line_len = 55;// count of symbols in one line + int idx = -1; + size_t cur_len = 0; + + wxString longest_sub_string; + auto get_longest_sub_string = [longest_sub_string, input](wxString &longest_sub_str, int cur_len, size_t i) { + if (cur_len > longest_sub_str.Len()) + longest_sub_str = input.SubString(i - cur_len + 1, i); + }; + + for (size_t i = 0; i < input.Len(); i++) + { + cur_len++; + if (input[i] == ' ') + idx = i; + if (input[i] == '\n') + { + get_longest_sub_string(longest_sub_string, cur_len, i); + idx = -1; + cur_len = 0; + } + if (cur_len >= line_len && idx >= 0) + { + get_longest_sub_string(longest_sub_string, cur_len, i); + input[idx] = '\n'; + cur_len = i - static_cast(idx); + } + } + + return GetTextExtent(longest_sub_string).GetX(); + } +}; + + +#ifdef __linux__ +bool static check_old_linux_datadir(const wxString& app_name) { + // If we are on Linux and the datadir does not exist yet, look into the old + // location where the datadir was before version 2.3. If we find it there, + // tell the user that he might wanna migrate to the new location. + // (https://github.com/prusa3d/PrusaSlicer/issues/2911) + // To be precise, the datadir should exist, it is created when single instance + // lock happens. Instead of checking for existence, check the contents. + + namespace fs = boost::filesystem; + + // If running Linux, file layout should be already set to XDG. + assert(wxStandardPaths::Get().GetFileLayout() == wxStandardPaths::FileLayout_XDG); + + std::string new_path = Slic3r::data_dir(); + + if (new_path != (wxStandardPaths::Get().GetUserConfigDir() + "/" + app_name).ToUTF8().data()) { + // This happens when the user specifies a custom --datadir. + // Do not show anything in that case. + return true; + } + + fs::path data_dir = fs::path(new_path); + if (! fs::is_directory(data_dir)) + return true; // This should not happen. + + int file_count = std::distance(fs::directory_iterator(data_dir), fs::directory_iterator()); + + if (file_count <= 1) { // just cache dir with an instance lock + wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout_Classic); + std::string old_path = wxStandardPaths::Get().GetUserDataDir().ToUTF8().data(); + wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout_XDG); + + if (fs::is_directory(old_path)) { + wxString msg = from_u8((boost::format(_u8L("Starting with %1% 2.3, configuration " + "directory on Linux has changed (according to XDG Base Directory Specification) to \n%2%.\n\n" + "This directory did not exist yet (maybe you run the new version for the first time).\nHowever, " + "an old %1% configuration directory was detected in \n%3%.\n\n" + "Consider moving the contents of the old directory to the new location in order to access " + "your profiles, etc.\nNote that if you decide to downgrade %1% in future, it will use the old " + "location again.\n\n" + "What do you want to do now?")) % SLIC3R_APP_NAME % new_path % old_path).str()); + wxString caption = from_u8((boost::format(_u8L("%s - BREAKING CHANGE")) % SLIC3R_APP_NAME).str()); + wxRichMessageDialog dlg(nullptr, msg, caption, wxYES_NO); + dlg.SetYesNoLabels(_L("Quit, I will move my data now"), _L("Start the application")); + if (dlg.ShowModal() != wxID_NO) + return false; + } + } else { + // If the new directory exists, be silent. The user likely already saw the message. + } + return true; +} +#endif + + wxString file_wildcards(FileType file_type, const std::string &custom_extension) { static const std::string defaults[FT_SIZE] = { @@ -247,10 +582,10 @@ static void generic_exception_handle() } catch (const std::bad_alloc& ex) { // bad_alloc in main thread is most likely fatal. Report immediately to the user (wxLogError would be delayed) // and terminate the app so it is at least certain to happen now. - wxString errmsg = wxString::Format(_(L("%s has encountered an error. It was likely caused by running out of memory. " + wxString errmsg = wxString::Format(_L("%s has encountered an error. It was likely caused by running out of memory. " "If you are sure you have enough RAM on your system, this may also be a bug and we would " - "be glad if you reported it.\n\nThe application will now terminate.")), SLIC3R_APP_NAME); - wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _(L("Fatal error")), wxOK | wxICON_ERROR); + "be glad if you reported it.\n\nThe application will now terminate."), SLIC3R_APP_NAME); + wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Fatal error"), wxOK | wxICON_ERROR); BOOST_LOG_TRIVIAL(error) << boost::format("std::bad_alloc exception: %1%") % ex.what(); std::terminate(); } catch (const std::exception& ex) { @@ -260,10 +595,53 @@ static void generic_exception_handle() } } +void GUI_App::post_init() +{ + assert(initialized()); + if (! this->initialized()) + throw Slic3r::RuntimeError("Calling post_init() while not yet initialized"); + +#if ENABLE_GCODE_VIEWER + if (this->init_params->start_as_gcodeviewer) { + if (! this->init_params->input_files.empty()) + this->plater()->load_gcode(wxString::FromUTF8(this->init_params->input_files[0].c_str())); + } + else { +#endif // ENABLE_GCODE_VIEWER_AS +#if 0 + // Load the cummulative config over the currently active profiles. + //FIXME if multiple configs are loaded, only the last one will have an effect. + // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). + // As of now only the full configs are supported here. + if (!m_print_config.empty()) + this->gui->mainframe->load_config(m_print_config); +#endif + if (! this->init_params->load_configs.empty()) + // Load the last config to give it a name at the UI. The name of the preset may be later + // changed by loading an AMF or 3MF. + //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. + this->mainframe->load_config_file(this->init_params->load_configs.back()); + // If loading a 3MF file, the config is loaded from the last one. + if (! this->init_params->input_files.empty()) + this->plater()->load_files(this->init_params->input_files, true, true); + if (! this->init_params->extra_config.empty()) + this->mainframe->load_config(this->init_params->extra_config); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER +} + IMPLEMENT_APP(GUI_App) +#if ENABLE_GCODE_VIEWER +GUI_App::GUI_App(EAppMode mode) +#else GUI_App::GUI_App() +#endif // ENABLE_GCODE_VIEWER : wxApp() +#if ENABLE_GCODE_VIEWER + , m_app_mode(mode) +#endif // ENABLE_GCODE_VIEWER , m_em_unit(10) , m_imgui(new ImGuiWrapper()) , m_wizard(nullptr) @@ -313,17 +691,44 @@ void GUI_App::init_app_config() // Windows : "C:\Users\username\AppData\Roaming\Slic3r" or "C:\Documents and Settings\username\Application Data\Slic3r" // Mac : "~/Library/Application Support/Slic3r" - if (data_dir().empty()) - set_data_dir(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()); + if (data_dir().empty()) { + #ifndef __linux__ + set_data_dir(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()); + #else + // Since version 2.3, config dir on Linux is in ${XDG_CONFIG_HOME}. + // https://github.com/prusa3d/PrusaSlicer/issues/2911 + wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout_XDG); + set_data_dir((wxStandardPaths::Get().GetUserConfigDir() + "/" + GetAppName()).ToUTF8().data()); + #endif + } if (!app_config) - app_config = new AppConfig(); +#if ENABLE_GCODE_VIEWER + app_config = new AppConfig(is_editor() ? AppConfig::EAppMode::Editor : AppConfig::EAppMode::GCodeViewer); +#else + app_config = new AppConfig(); +#endif // ENABLE_GCODE_VIEWER // load settings - app_conf_exists = app_config->exists(); - if (app_conf_exists) { - app_config->load(); - } + m_app_conf_exists = app_config->exists(); + if (m_app_conf_exists) { + std::string error = app_config->load(); + if (!error.empty()) { + // Error while parsing config file. We'll customize the error message and rethrow to be displayed. + if (is_editor()) { + throw Slic3r::RuntimeError( + _u8L("Error parsing PrusaSlicer config file, it is probably corrupted. " + "Try to manually delete the file to recover from the error. Your user profiles will not be affected.") + + "\n\n" + app_config->config_path() + "\n\n" + error); + } + else { + throw Slic3r::RuntimeError( + _u8L("Error parsing PrusaGCodeViewer config file, it is probably corrupted. " + "Try to manually delete the file to recover from the error.") + + "\n\n" + app_config->config_path() + "\n\n" + error); + } + } + } } void GUI_App::init_single_instance_checker(const std::string &name, const std::string &path) @@ -349,50 +754,106 @@ bool GUI_App::on_init_inner() wxCHECK_MSG(wxDirExists(resources_dir), false, wxString::Format("Resources path does not exist or is not a directory: %s", resources_dir)); - // Enable this to get the default Win32 COMCTRL32 behavior of static boxes. +#ifdef __linux__ + if (! check_old_linux_datadir(GetAppName())) { + std::cerr << "Quitting, user chose to move his data to new location." << std::endl; + return false; + } +#endif + + // Enable this to get the default Win32 COMCTRL32 behavior of static boxes. // wxSystemOptions::SetOption("msw.staticbox.optimized-paint", 0); // Enable this to disable Windows Vista themes for all wxNotebooks. The themes seem to lead to terrible // performance when working on high resolution multi-display setups. // wxSystemOptions::SetOption("msw.notebook.themed-background", 0); // Slic3r::debugf "wxWidgets version %s, Wx version %s\n", wxVERSION_STRING, wxVERSION; - - std::string msg = Http::tls_global_init(); - std::string ssl_cert_store = app_config->get("tls_accepted_cert_store_location"); - bool ssl_accept = app_config->get("tls_cert_store_accepted") == "yes" && ssl_cert_store == Http::tls_system_cert_store(); - - if (!msg.empty() && !ssl_accept) { - wxRichMessageDialog - dlg(nullptr, - wxString::Format(_(L("%s\nDo you want to continue?")), msg), - "PrusaSlicer", wxICON_QUESTION | wxYES_NO); - dlg.ShowCheckBox(_(L("Remember my choice"))); - if (dlg.ShowModal() != wxID_YES) return false; - app_config->set("tls_cert_store_accepted", - dlg.IsCheckBoxChecked() ? "yes" : "no"); - app_config->set("tls_accepted_cert_store_location", - dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : ""); +#if ENABLE_GCODE_VIEWER + if (is_editor()) { +#endif // ENABLE_GCODE_VIEWER + std::string msg = Http::tls_global_init(); + std::string ssl_cert_store = app_config->get("tls_accepted_cert_store_location"); + bool ssl_accept = app_config->get("tls_cert_store_accepted") == "yes" && ssl_cert_store == Http::tls_system_cert_store(); + + if (!msg.empty() && !ssl_accept) { + wxRichMessageDialog + dlg(nullptr, + wxString::Format(_L("%s\nDo you want to continue?"), msg), + "PrusaSlicer", wxICON_QUESTION | wxYES_NO); + dlg.ShowCheckBox(_L("Remember my choice")); + if (dlg.ShowModal() != wxID_YES) return false; + + app_config->set("tls_cert_store_accepted", + dlg.IsCheckBoxChecked() ? "yes" : "no"); + app_config->set("tls_accepted_cert_store_location", + dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : ""); + } +#if ENABLE_GCODE_VIEWER } - +#endif // ENABLE_GCODE_VIEWER + app_config->set("version", SLIC3R_VERSION); app_config->save(); - + + wxInitAllImageHandlers(); + + SplashScreen* scrn = nullptr; + if (app_config->get("show_splash_screen") == "1") { + // make a bitmap with dark grey banner on the left side +#if ENABLE_GCODE_VIEWER + wxBitmap bmp = SplashScreen::MakeBitmap(wxBitmap(from_u8(var(is_editor() ? "splashscreen.jpg" : "splashscreen-gcodepreview.jpg")), wxBITMAP_TYPE_JPEG)); +#else + wxBitmap bmp = SplashScreen::MakeBitmap(wxBitmap(from_u8(var("splashscreen.jpg")), wxBITMAP_TYPE_JPEG)); +#endif // ENABLE_GCODE_VIEWER + + // Detect position (display) to show the splash screen + // Now this position is equal to the mainframe position + wxPoint splashscreen_pos = wxDefaultPosition; + if (app_config->has("window_mainframe")) { + auto metrics = WindowMetrics::deserialize(app_config->get("window_mainframe")); + if (metrics) + splashscreen_pos = metrics->get_rect().GetPosition(); + } + + // create splash screen with updated bmp + scrn = new SplashScreen(bmp.IsOk() ? bmp : create_scaled_bitmap("prusa_slicer_logo", nullptr, 400), + wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 4000, splashscreen_pos); + wxYield(); + scrn->SetText(_L("Loading configuration...")); + } + preset_bundle = new PresetBundle(); - + // just checking for existence of Slic3r::data_dir is not enough : it may be an empty directory // supplied as argument to --datadir; in that case we should still run the wizard preset_bundle->setup_directories(); -#ifdef __WXMSW__ - associate_3mf_files(); +#if ENABLE_GCODE_VIEWER + if (is_editor()) { +#endif // ENABLE_GCODE_VIEWER +#ifdef __WXMSW__ + associate_3mf_files(); #endif // __WXMSW__ - preset_updater = new PresetUpdater(); - Bind(EVT_SLIC3R_VERSION_ONLINE, [this](const wxCommandEvent &evt) { - app_config->set("version_online", into_u8(evt.GetString())); - app_config->save(); - }); + preset_updater = new PresetUpdater(); + Bind(EVT_SLIC3R_VERSION_ONLINE, [this](const wxCommandEvent& evt) { + app_config->set("version_online", into_u8(evt.GetString())); + app_config->save(); + if (this->plater_ != nullptr) { + if (*Semver::parse(SLIC3R_VERSION) < *Semver::parse(into_u8(evt.GetString()))) { + this->plater_->get_notification_manager()->push_notification(NotificationType::NewAppAvailable, *(this->plater_->get_current_canvas3D())); + } + } + }); +#if ENABLE_GCODE_VIEWER + } + else { +#ifdef __WXMSW__ + associate_gcode_files(); +#endif // __WXMSW__ + } +#endif // ENABLE_GCODE_VIEWER // initialize label colors and fonts init_label_colours(); @@ -420,11 +881,19 @@ bool GUI_App::on_init_inner() Slic3r::I18N::set_translate_callback(libslic3r_translate_callback); // application frame - if (wxImage::FindHandler(wxBITMAP_TYPE_PNG) == nullptr) - wxImage::AddHandler(new wxPNGHandler()); +#if ENABLE_GCODE_VIEWER + if (scrn && is_editor()) +#else + if (scrn) +#endif // ENABLE_GCODE_VIEWER + scrn->SetText(_L("Creating settings tabs...")); + mainframe = new MainFrame(); // hide settings tabs after first Layout - mainframe->select_tab(0); +#if ENABLE_GCODE_VIEWER + if (is_editor()) +#endif // ENABLE_GCODE_VIEWER + mainframe->select_tab(size_t(0)); sidebar().obj_list()->init_objects(); // propagate model objects to object list // update_mode(); // !!! do that later @@ -438,13 +907,21 @@ bool GUI_App::on_init_inner() if (! plater_) return; - //m_other_instance_message_handler->report(); if (app_config->dirty() && app_config->get("autosave") == "1") app_config->save(); this->obj_manipul()->update_if_dirty(); + static bool update_gui_after_init = true; + if (update_gui_after_init) { + update_gui_after_init = false; +#ifdef WIN32 + this->mainframe->register_win32_callbacks(); +#endif + this->post_init(); + } + // Preset updating & Configwizard are done after the above initializations, // and after MainFrame is created & shown. // The extra CallAfter() is needed because of Mac, where this is the only way @@ -455,13 +932,21 @@ bool GUI_App::on_init_inner() static bool once = true; if (once) { once = false; - check_updates(false); - CallAfter([this] { - config_wizard_startup(); - preset_updater->slic3r_update_notify(); - preset_updater->sync(preset_bundle); - }); +#if ENABLE_GCODE_VIEWER + if (preset_updater != nullptr) { +#endif // ENABLE_GCODE_VIEWER + check_updates(false); + + CallAfter([this] { + config_wizard_startup(); + preset_updater->slic3r_update_notify(); + preset_updater->sync(preset_bundle); + }); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + #ifdef _WIN32 //sets window property to mainframe so other instances can indentify it OtherInstanceMessageHandler::init_windows_properties(mainframe, m_instance_hash_int); @@ -469,8 +954,16 @@ bool GUI_App::on_init_inner() } }); - load_current_presets(); - +#if ENABLE_GCODE_VIEWER + if (is_gcode_viewer()) { + mainframe->update_layout(); + if (plater_ != nullptr) + // ensure the selected technology is ptFFF + plater_->set_printer_technology(ptFFF); + } + else +#endif // ENABLE_GCODE_VIEWER + load_current_presets(); mainframe->Show(true); /* Temporary workaround for the correct behavior of the Scrolled sidebar panel: @@ -483,6 +976,10 @@ bool GUI_App::on_init_inner() update_mode(); // update view mode after fix of the object_list size +#ifdef __APPLE__ + other_instance_message_handler()->bring_instance_forward(); +#endif //__APPLE__ + m_initialized = true; return true; } @@ -552,6 +1049,11 @@ void GUI_App::init_fonts() m_small_font.SetPointSize(11); m_bold_font.SetPointSize(13); #endif /*__WXMAC__*/ + + // wxSYS_OEM_FIXED_FONT and wxSYS_ANSI_FIXED_FONT use the same as + // DEFAULT in wxGtk. Use the TELETYPE family as a work-around + m_code_font = wxFont(wxFontInfo().Family(wxFONTFAMILY_TELETYPE)); + m_code_font.SetPointSize(m_normal_font.GetPointSize()); } void GUI_App::update_fonts(const MainFrame *main_frame) @@ -567,6 +1069,7 @@ void GUI_App::update_fonts(const MainFrame *main_frame) m_small_font = m_normal_font; m_bold_font = main_frame->normal_font().Bold(); m_em_unit = main_frame->em_unit(); + m_code_font.SetPointSize(m_normal_font.GetPointSize()); } void GUI_App::set_label_clr_modified(const wxColour& clr) { @@ -629,8 +1132,33 @@ void GUI_App::set_auto_toolbar_icon_scale(float scale) const app_config->set("auto_toolbar_size", val); } +// check user printer_presets for the containing information about "Print Host upload" +void GUI_App::check_printer_presets() +{ + std::vector preset_names = PhysicalPrinter::presets_with_print_host_information(preset_bundle->printers); + if (preset_names.empty()) + return; + + wxString msg_text = _L("You have the following presets with saved options for \"Print Host upload\"") + ":"; + for (const std::string& preset_name : preset_names) + msg_text += "\n \"" + from_u8(preset_name) + "\","; + msg_text.RemoveLast(); + msg_text += "\n\n" + _L("But from this version of PrusaSlicer we don't show/use this information in Printer Settings.\n" + "Now, this information will be exposed in physical printers settings.") + "\n\n" + + _L("By default new Printer devices will be named as \"Printer N\" during its creation.\n" + "Note: This name can be changed later from the physical printers settings"); + + wxMessageDialog(nullptr, msg_text, _L("Information"), wxOK | wxICON_INFORMATION).ShowModal(); + + preset_bundle->physical_printers.load_printers_from_presets(preset_bundle->printers); +} + void GUI_App::recreate_GUI(const wxString& msg_name) { +#if ENABLE_GCODE_VIEWER + m_is_recreating_gui = true; +#endif // ENABLE_GCODE_VIEWER + mainframe->shutdown(); wxProgressDialog dlg(msg_name, msg_name, 100, nullptr, wxPD_AUTO_HIDE); @@ -639,8 +1167,11 @@ void GUI_App::recreate_GUI(const wxString& msg_name) MainFrame *old_main_frame = mainframe; mainframe = new MainFrame(); - // hide settings tabs after first Layout - mainframe->select_tab(0); +#if ENABLE_GCODE_VIEWER + if (is_editor()) +#endif // ENABLE_GCODE_VIEWER + // hide settings tabs after first Layout + mainframe->select_tab(size_t(0)); // Propagate model objects to object list. sidebar().obj_list()->init_objects(); SetTopWindow(mainframe); @@ -670,6 +1201,10 @@ void GUI_App::recreate_GUI(const wxString& msg_name) // // Run the config wizard, don't offer the "reset user profile" checkbox. // config_wizard_startup(true); // }); + +#if ENABLE_GCODE_VIEWER + m_is_recreating_gui = false; +#endif // ENABLE_GCODE_VIEWER } void GUI_App::system_info() @@ -709,9 +1244,9 @@ void fatal_error(wxWindow* parent) // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. -void GUI_App::update_ui_from_settings() +void GUI_App::update_ui_from_settings(bool apply_free_camera_correction) { - mainframe->update_ui_from_settings(); + mainframe->update_ui_from_settings(apply_free_camera_correction); } void GUI_App::persist_window_geometry(wxTopLevelWindow *window, bool default_maximized) @@ -734,7 +1269,7 @@ void GUI_App::load_project(wxWindow *parent, wxString& input_file) const { input_file.Clear(); wxFileDialog dialog(parent ? parent : GetTopWindow(), - _(L("Choose one file (3MF/AMF):")), + _L("Choose one file (3MF/AMF):"), app_config->get_last_dir(), "", file_wildcards(FT_PROJECT), wxFD_OPEN | wxFD_FILE_MUST_EXIST); @@ -746,7 +1281,7 @@ void GUI_App::import_model(wxWindow *parent, wxArrayString& input_files) const { input_files.Clear(); wxFileDialog dialog(parent ? parent : GetTopWindow(), - _(L("Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):")), + _L("Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"), from_u8(app_config->get_last_dir()), "", file_wildcards(FT_MODEL), wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST); @@ -754,6 +1289,20 @@ void GUI_App::import_model(wxWindow *parent, wxArrayString& input_files) const dialog.GetPaths(input_files); } +#if ENABLE_GCODE_VIEWER +void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const +{ + input_file.Clear(); + wxFileDialog dialog(parent ? parent : GetTopWindow(), + _L("Choose one file (GCODE/.GCO/.G/.ngc/NGC):"), + app_config->get_last_dir(), "", + file_wildcards(FT_GCODE), wxFD_OPEN | wxFD_FILE_MUST_EXIST); + + if (dialog.ShowModal() == wxID_OK) + input_file = dialog.GetPath(); +} +#endif // ENABLE_GCODE_VIEWER + bool GUI_App::switch_language() { if (select_language()) { @@ -807,7 +1356,7 @@ bool GUI_App::select_language() // This is the language to highlight in the choice dialog initially. init_selection_default = init_selection; - const long index = wxGetSingleChoiceIndex(_(L("Select the language")), _(L("Language")), names, init_selection_default); + const long index = wxGetSingleChoiceIndex(_L("Select the language"), _L("Language"), names, init_selection_default); // Try to load a new language. if (index != -1 && (init_selection == -1 || init_selection != index)) { const wxLanguageInfo *new_language_info = language_infos[index]; @@ -937,7 +1486,7 @@ bool GUI_App::load_language(wxString language, bool initial) m_imgui->set_language(into_u8(language_info->CanonicalName)); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. wxSetlocale(LC_NUMERIC, "C"); - Preset::update_suffix_modified(); + Preset::update_suffix_modified((" (" + _L("modified") + ")").ToUTF8().data()); return true; } @@ -977,6 +1526,7 @@ void GUI_App::update_mode() tab->update_mode(); plater()->update_object_menu(); + plater()->canvas3D()->update_gizmos_on_off_state(); } void GUI_App::add_config_menu(wxMenuBar *menu) @@ -987,35 +1537,58 @@ void GUI_App::add_config_menu(wxMenuBar *menu) const auto config_wizard_name = _(ConfigWizard::name(true)); const auto config_wizard_tooltip = from_u8((boost::format(_utf8(L("Run %s"))) % config_wizard_name).str()); // Cmd+, is standard on OS X - what about other operating systems? - local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip); - local_menu->Append(config_id_base + ConfigMenuSnapshots, _(L("&Configuration Snapshots")) + dots, _(L("Inspect / activate configuration snapshots"))); - local_menu->Append(config_id_base + ConfigMenuTakeSnapshot, _(L("Take Configuration &Snapshot")), _(L("Capture a configuration snapshot"))); - local_menu->Append(config_id_base + ConfigMenuUpdate, _(L("Check for updates")), _(L("Check for configuration updates"))); - local_menu->AppendSeparator(); - local_menu->Append(config_id_base + ConfigMenuPreferences, _(L("&Preferences")) + dots + +#if ENABLE_GCODE_VIEWER + if (is_editor()) { +#endif // ENABLE_GCODE_VIEWER + local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip); + local_menu->Append(config_id_base + ConfigMenuSnapshots, _L("&Configuration Snapshots") + dots, _L("Inspect / activate configuration snapshots")); + local_menu->Append(config_id_base + ConfigMenuTakeSnapshot, _L("Take Configuration &Snapshot"), _L("Capture a configuration snapshot")); + local_menu->Append(config_id_base + ConfigMenuUpdate, _L("Check for updates"), _L("Check for configuration updates")); + local_menu->AppendSeparator(); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + local_menu->Append(config_id_base + ConfigMenuPreferences, _L("&Preferences") + dots + #ifdef __APPLE__ "\tCtrl+,", #else "\tCtrl+P", #endif - _(L("Application preferences"))); - local_menu->AppendSeparator(); - auto mode_menu = new wxMenu(); - mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _(L("Simple")), _(L("Simple View Mode"))); -// mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _(L("Advanced")), _(L("Advanced View Mode"))); - mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _CTX(L_CONTEXT("Advanced", "Mode"), "Mode"), _L("Advanced View Mode")); - mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _(L("Expert")), _(L("Expert View Mode"))); - Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if(get_mode() == comSimple) evt.Check(true); }, config_id_base + ConfigMenuModeSimple); - Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if(get_mode() == comAdvanced) evt.Check(true); }, config_id_base + ConfigMenuModeAdvanced); - Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if(get_mode() == comExpert) evt.Check(true); }, config_id_base + ConfigMenuModeExpert); + _L("Application preferences")); +#if ENABLE_GCODE_VIEWER + wxMenu* mode_menu = nullptr; + if (is_editor()) { +#endif // ENABLE_GCODE_VIEWER + local_menu->AppendSeparator(); +#if ENABLE_GCODE_VIEWER + mode_menu = new wxMenu(); +#else + auto mode_menu = new wxMenu(); +#endif // ENABLE_GCODE_VIEWER + mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _L("Simple"), _L("Simple View Mode")); +// mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _L("Advanced"), _L("Advanced View Mode")); + mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _CTX(L_CONTEXT("Advanced", "Mode"), "Mode"), _L("Advanced View Mode")); + mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _L("Expert"), _L("Expert View Mode")); + Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comSimple) evt.Check(true); }, config_id_base + ConfigMenuModeSimple); + Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comAdvanced) evt.Check(true); }, config_id_base + ConfigMenuModeAdvanced); + Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comExpert) evt.Check(true); }, config_id_base + ConfigMenuModeExpert); - local_menu->AppendSubMenu(mode_menu, _(L("Mode")), wxString::Format(_(L("%s View Mode")), SLIC3R_APP_NAME)); + local_menu->AppendSubMenu(mode_menu, _L("Mode"), wxString::Format(_L("%s View Mode"), SLIC3R_APP_NAME)); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER local_menu->AppendSeparator(); - local_menu->Append(config_id_base + ConfigMenuLanguage, _(L("&Language"))); - local_menu->AppendSeparator(); - local_menu->Append(config_id_base + ConfigMenuFlashFirmware, _(L("Flash printer &firmware")), _(L("Upload a firmware image into an Arduino based printer"))); - // TODO: for when we're able to flash dictionaries - // local_menu->Append(config_id_base + FirmwareMenuDict, _(L("Flash language file")), _(L("Upload a language dictionary file into a Prusa printer"))); + local_menu->Append(config_id_base + ConfigMenuLanguage, _L("&Language")); +#if ENABLE_GCODE_VIEWER + if (is_editor()) { +#endif // ENABLE_GCODE_VIEWER + local_menu->AppendSeparator(); + local_menu->Append(config_id_base + ConfigMenuFlashFirmware, _L("Flash printer &firmware"), _L("Upload a firmware image into an Arduino based printer")); + // TODO: for when we're able to flash dictionaries + // local_menu->Append(config_id_base + FirmwareMenuDict, _L("Flash language file"), _L("Upload a language dictionary file into a Prusa printer")); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER local_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent &event) { switch (event.GetId() - config_id_base) { @@ -1028,7 +1601,7 @@ void GUI_App::add_config_menu(wxMenuBar *menu) case ConfigMenuTakeSnapshot: // Take a configuration snapshot. if (check_unsaved_changes()) { - wxTextEntryDialog dlg(nullptr, _(L("Taking configuration snapshot")), _(L("Snapshot name"))); + wxTextEntryDialog dlg(nullptr, _L("Taking configuration snapshot"), _L("Snapshot name")); // set current normal font for dialog children, // because of just dlg.SetFont(normal_font()) has no result; @@ -1061,34 +1634,25 @@ void GUI_App::add_config_menu(wxMenuBar *menu) break; case ConfigMenuPreferences: { -#if ENABLE_LAYOUT_NO_RESTART bool app_layout_changed = false; -#else - bool recreate_app = false; -#endif // ENABLE_LAYOUT_NO_RESTART { // the dialog needs to be destroyed before the call to recreate_GUI() // or sometimes the application crashes into wxDialogBase() destructor // so we put it into an inner scope PreferencesDialog dlg(mainframe); dlg.ShowModal(); -#if ENABLE_LAYOUT_NO_RESTART app_layout_changed = dlg.settings_layout_changed(); -#else - recreate_app = dlg.settings_layout_changed(); -#endif // ENABLE_LAYOUT_NO_RESTART +#if ENABLE_GCODE_VIEWER + if (dlg.seq_top_layer_only_changed()) + this->plater_->refresh_print(); +#endif // ENABLE_GCODE_VIEWER } -#if ENABLE_LAYOUT_NO_RESTART if (app_layout_changed) { - mainframe->GetSizer()->Hide((size_t)0); + // hide full main_sizer for mainFrame + mainframe->GetSizer()->Show(false); mainframe->update_layout(); - mainframe->select_tab(0); - mainframe->GetSizer()->Show((size_t)0); + mainframe->select_tab(size_t(0)); } -#else - if (recreate_app) - recreate_GUI(_L("Changing of the settings layout") + dots); -#endif // ENABLE_LAYOUT_NO_RESTART break; } case ConfigMenuLanguage: @@ -1100,11 +1664,19 @@ void GUI_App::add_config_menu(wxMenuBar *menu) // the dialog needs to be destroyed before the call to switch_language() // or sometimes the application crashes into wxDialogBase() destructor // so we put it into an inner scope +#if ENABLE_GCODE_VIEWER + wxString title = is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME); + title += " - " + _L("Language selection"); +#endif // ENABLE_GCODE_VIEWER wxMessageDialog dialog(nullptr, - _(L("Switching the language will trigger application restart.\n" - "You will lose content of the plater.")) + "\n\n" + - _(L("Do you want to proceed?")), - wxString(SLIC3R_APP_NAME) + " - " + _(L("Language selection")), + _L("Switching the language will trigger application restart.\n" + "You will lose content of the plater.") + "\n\n" + + _L("Do you want to proceed?"), +#if ENABLE_GCODE_VIEWER + title, +#else + wxString(SLIC3R_APP_NAME) + " - " + _L("Language selection"), +#endif // ENABLE_GCODE_VIEWER wxICON_QUESTION | wxOK | wxCANCEL); if (dialog.ShowModal() == wxID_CANCEL) return; @@ -1122,42 +1694,54 @@ void GUI_App::add_config_menu(wxMenuBar *menu) }); using std::placeholders::_1; - - auto modfn = [this](int mode, wxCommandEvent&) { if(get_mode() != mode) save_mode(mode); }; - mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comSimple, _1), config_id_base + ConfigMenuModeSimple); - mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comAdvanced, _1), config_id_base + ConfigMenuModeAdvanced); - mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comExpert, _1), config_id_base + ConfigMenuModeExpert); - menu->Append(local_menu, _(L("&Configuration"))); +#if ENABLE_GCODE_VIEWER + if (mode_menu != nullptr) { +#endif // ENABLE_GCODE_VIEWER + auto modfn = [this](int mode, wxCommandEvent&) { if (get_mode() != mode) save_mode(mode); }; + mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comSimple, _1), config_id_base + ConfigMenuModeSimple); + mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comAdvanced, _1), config_id_base + ConfigMenuModeAdvanced); + mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comExpert, _1), config_id_base + ConfigMenuModeExpert); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + + menu->Append(local_menu, _L("&Configuration")); } // This is called when closing the application, when loading a config file or when starting the config wizard // to notify the user whether he is aware that some preset changes will be lost. bool GUI_App::check_unsaved_changes(const wxString &header) { - wxString dirty; PrinterTechnology printer_technology = preset_bundle->printers.get_edited_preset().printer_technology(); - for (Tab *tab : tabs_list) + + bool has_unsaved_changes = false; + for (Tab* tab : tabs_list) if (tab->supports_printer_technology(printer_technology) && tab->current_preset_is_dirty()) { - if (dirty.empty()) - dirty = tab->title(); - else - dirty += wxString(", ") + tab->title(); + has_unsaved_changes = true; + break; } - if (dirty.empty()) - // No changes, the application may close or reload presets. - return true; - // Ask the user. - wxString message; - if (! header.empty()) - message = header + "\n\n"; - message += _(L("The presets on the following tabs were modified")) + ": " + dirty + "\n\n" + _(L("Discard changes and continue anyway?")); - wxMessageDialog dialog(mainframe, - message, - wxString(SLIC3R_APP_NAME) + " - " + _(L("Unsaved Presets")), - wxICON_QUESTION | wxYES_NO | wxNO_DEFAULT); - return dialog.ShowModal() == wxID_YES; + if (has_unsaved_changes) + { + UnsavedChangesDialog dlg(header); + if (wxGetApp().app_config->get("default_action_on_close_application") == "none" && dlg.ShowModal() == wxID_CANCEL) + return false; + + if (dlg.save_preset()) // save selected changes + { + for (const std::pair& nt : dlg.get_names_and_types()) + preset_bundle->save_changes_for_preset(nt.first, nt.second, dlg.get_unselected_options(nt.second)); + + // if we saved changes to the new presets, we should to + // synchronize config.ini with the current selections. + preset_bundle->export_selections(*app_config); + + wxMessageBox(_L("The preset(s) modifications are successfully saved")); + } + } + + return true; } bool GUI_App::checked_tab(Tab* tab) @@ -1171,6 +1755,10 @@ bool GUI_App::checked_tab(Tab* tab) // Update UI / Tabs to reflect changes in the currently loaded presets void GUI_App::load_current_presets() { + // check printer_presets for the containing information about "Print Host upload" + // and create physical printer from it, if any exists + check_printer_presets(); + PrinterTechnology printer_technology = preset_bundle->printers.get_edited_preset().printer_technology(); this->plater()->set_printer_technology(printer_technology); for (Tab *tab : tabs_list) @@ -1191,13 +1779,58 @@ bool GUI_App::OnExceptionInMainLoop() } #ifdef __APPLE__ +// This callback is called from wxEntry()->wxApp::CallOnInit()->NSApplication run +// that is, before GUI_App::OnInit(), so we have a chance to switch GUI_App +// to a G-code viewer. +void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) +{ + size_t num_gcodes = 0; + for (const wxString &filename : fileNames) { + wxString fn = filename.Upper(); + if (fn.EndsWith(".G") || fn.EndsWith(".GCODE")) + ++ num_gcodes; + } + if (fileNames.size() == num_gcodes) { + // Opening PrusaSlicer by drag & dropping a G-Code onto PrusaSlicer icon in Finder, + // just G-codes were passed. Switch to G-code viewer mode. + m_app_mode = EAppMode::GCodeViewer; + unlock_lockfile(get_instance_hash_string() + ".lock", data_dir() + "/cache/"); + if(app_config != nullptr) + delete app_config; + app_config = nullptr; + init_app_config(); + } + wxApp::OSXStoreOpenFiles(fileNames); +} // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { std::vector files; - for (size_t i = 0; i < fileNames.GetCount(); ++ i) - files.emplace_back(fileNames[i].ToUTF8().data()); - this->plater()->load_files(files, true, true); + std::vector gcode_files; + std::vector non_gcode_files; + for (const auto& filename : fileNames) { + wxString fn = filename.Upper(); + if (fn.EndsWith(".G") || fn.EndsWith(".GCODE")) + gcode_files.emplace_back(filename); + else { + files.emplace_back(into_u8(filename)); + non_gcode_files.emplace_back(filename); + } + } + if (m_app_mode == EAppMode::GCodeViewer) { + // Running in G-code viewer. + // Load the first G-code into the G-code viewer. + // Or if no G-codes, send other files to slicer. + if (! gcode_files.empty()) + this->plater()->load_gcode(gcode_files.front()); + if (!non_gcode_files.empty()) + start_new_slicer(non_gcode_files, true); + } else { + if (! files.empty()) + this->plater()->load_files(files, true, true); + for (const wxString &filename : gcode_files) + start_new_gcodeviewer(&filename); + } } #endif /* __APPLE */ @@ -1304,9 +1937,9 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage if (preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA && Slic3r::model_has_multi_part_objects(wxGetApp().model())) { GUI::show_info(nullptr, - _(L("It's impossible to print multi-part object(s) with SLA technology.")) + "\n\n" + - _(L("Please check and fix your object list.")), - _(L("Attention!"))); + _L("It's impossible to print multi-part object(s) with SLA technology.") + "\n\n" + + _L("Please check and fix your object list."), + _L("Attention!")); } } @@ -1323,7 +1956,7 @@ void GUI_App::gcode_thumbnails_debug() unsigned int width = 0; unsigned int height = 0; - wxFileDialog dialog(GetTopWindow(), _(L("Select a gcode file:")), "", "", "G-code files (*.gcode)|*.gcode;*.GCODE;", wxFD_OPEN | wxFD_FILE_MUST_EXIST); + wxFileDialog dialog(GetTopWindow(), _L("Select a gcode file:"), "", "", "G-code files (*.gcode)|*.gcode;*.GCODE;", wxFD_OPEN | wxFD_FILE_MUST_EXIST); if (dialog.ShowModal() != wxID_OK) return; @@ -1431,7 +2064,7 @@ void GUI_App::window_pos_sanitize(wxTopLevelWindow* window) bool GUI_App::config_wizard_startup() { - if (!app_conf_exists || preset_bundle->printers.size() <= 1) { + if (!m_app_conf_exists || preset_bundle->printers.size() <= 1) { run_wizard(ConfigWizard::RR_DATA_EMPTY); return true; } else if (get_app_config()->legacy_datadir()) { @@ -1448,19 +2081,17 @@ bool GUI_App::config_wizard_startup() } void GUI_App::check_updates(const bool verbose) -{ - +{ PresetUpdater::UpdateResult updater_result; try { - updater_result = preset_updater->config_update(app_config->orig_version()); + updater_result = preset_updater->config_update(app_config->orig_version(), verbose); if (updater_result == PresetUpdater::R_INCOMPAT_EXIT) { mainframe->Close(); } else if (updater_result == PresetUpdater::R_INCOMPAT_CONFIGURED) { - app_conf_exists = true; + m_app_conf_exists = true; } - else if(verbose && updater_result == PresetUpdater::R_NOOP) - { + else if (verbose && updater_result == PresetUpdater::R_NOOP) { MsgNoUpdates dlg; dlg.ShowModal(); } @@ -1468,9 +2099,8 @@ void GUI_App::check_updates(const bool verbose) catch (const std::exception & ex) { show_error(nullptr, ex.what()); } - - } + // static method accepting a wxWindow object as first parameter // void warning_catcher{ // my($self, $message_dialog) = @_; @@ -1498,50 +2128,47 @@ void GUI_App::check_updates(const bool verbose) #ifdef __WXMSW__ -void GUI_App::associate_3mf_files() +static bool set_into_win_registry(HKEY hkeyHive, const wchar_t* pszVar, const wchar_t* pszValue) { // see as reference: https://stackoverflow.com/questions/20245262/c-program-needs-an-file-association + wchar_t szValueCurrent[1000]; + DWORD dwType; + DWORD dwSize = sizeof(szValueCurrent); - auto reg_set = [](HKEY hkeyHive, const wchar_t* pszVar, const wchar_t* pszValue)->bool - { - wchar_t szValueCurrent[1000]; - DWORD dwType; - DWORD dwSize = sizeof(szValueCurrent); + int iRC = ::RegGetValueW(hkeyHive, pszVar, nullptr, RRF_RT_ANY, &dwType, szValueCurrent, &dwSize); - int iRC = ::RegGetValueW(hkeyHive, pszVar, nullptr, RRF_RT_ANY, &dwType, szValueCurrent, &dwSize); + bool bDidntExist = iRC == ERROR_FILE_NOT_FOUND; - bool bDidntExist = iRC == ERROR_FILE_NOT_FOUND; + if ((iRC != ERROR_SUCCESS) && !bDidntExist) + // an error occurred + return false; - if ((iRC != ERROR_SUCCESS) && !bDidntExist) - // an error occurred + if (!bDidntExist) { + if (dwType != REG_SZ) + // invalid type return false; - if (!bDidntExist) - { - if (dwType != REG_SZ) - // invalid type - return false; + if (::wcscmp(szValueCurrent, pszValue) == 0) + // value already set + return false; + } - if (::wcscmp(szValueCurrent, pszValue) == 0) - // value already set - return false; - } - - DWORD dwDisposition; - HKEY hkey; - iRC = ::RegCreateKeyExW(hkeyHive, pszVar, 0, 0, 0, KEY_ALL_ACCESS, nullptr, &hkey, &dwDisposition); - bool ret = false; + DWORD dwDisposition; + HKEY hkey; + iRC = ::RegCreateKeyExW(hkeyHive, pszVar, 0, 0, 0, KEY_ALL_ACCESS, nullptr, &hkey, &dwDisposition); + bool ret = false; + if (iRC == ERROR_SUCCESS) { + iRC = ::RegSetValueExW(hkey, L"", 0, REG_SZ, (BYTE*)pszValue, (::wcslen(pszValue) + 1) * sizeof(wchar_t)); if (iRC == ERROR_SUCCESS) - { - iRC = ::RegSetValueExW(hkey, L"", 0, REG_SZ, (BYTE*)pszValue, (::wcslen(pszValue) + 1) * sizeof(wchar_t)); - if (iRC == ERROR_SUCCESS) - ret = true; - } + ret = true; + } - RegCloseKey(hkey); - return ret; - }; + RegCloseKey(hkey); + return ret; +} +void GUI_App::associate_3mf_files() +{ wchar_t app_path[MAX_PATH]; ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); @@ -1555,9 +2182,33 @@ void GUI_App::associate_3mf_files() std::wstring reg_prog_id_command = reg_prog_id + L"\\Shell\\Open\\Command"; bool is_new = false; - is_new |= reg_set(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str()); - is_new |= reg_set(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str()); - is_new |= reg_set(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str()); + is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str()); + is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str()); + is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str()); + + if (is_new) + // notify Windows only when any of the values gets changed + ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr); +} + +void GUI_App::associate_gcode_files() +{ + wchar_t app_path[MAX_PATH]; + ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); + + std::wstring prog_path = L"\"" + std::wstring(app_path) + L"\""; + std::wstring prog_id = L"PrusaSlicer.GCodeViewer.1"; + std::wstring prog_desc = L"PrusaSlicerGCodeViewer"; + std::wstring prog_command = prog_path + L" \"%1\""; + std::wstring reg_base = L"Software\\Classes"; + std::wstring reg_extension = reg_base + L"\\.gcode"; + std::wstring reg_prog_id = reg_base + L"\\" + prog_id; + std::wstring reg_prog_id_command = reg_prog_id + L"\\Shell\\Open\\Command"; + + bool is_new = false; + is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str()); + is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str()); + is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str()); if (is_new) // notify Windows only when any of the values gets changed diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index c2b257f458..f00cf02df5 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -3,10 +3,10 @@ #include #include -#include "Preset.hpp" #include "ImGuiWrapper.hpp" #include "ConfigWizard.hpp" #include "OpenGLManager.hpp" +#include "libslic3r/Preset.hpp" #include #include @@ -24,6 +24,7 @@ class wxNotebook; struct wxLanguageInfo; namespace Slic3r { + class AppConfig; class PresetBundle; class PresetUpdater; @@ -32,6 +33,7 @@ class PrintHostJobQueue; class Model; namespace GUI{ + class RemovableDriveManager; class OtherInstanceMessageHandler; class MainFrame; @@ -41,6 +43,7 @@ class ObjectSettings; class ObjectList; class ObjectLayers; class Plater; +struct GUI_InitParams; @@ -86,10 +89,31 @@ class ConfigWizard; static wxString dots("…", wxConvUTF8); +// Does our wxWidgets version support markup? +// https://github.com/prusa3d/PrusaSlicer/issues/4282#issuecomment-634676371 +#if wxUSE_MARKUP && wxCHECK_VERSION(3, 1, 1) + #define SUPPORTS_MARKUP +#endif + class GUI_App : public wxApp { +#if ENABLE_GCODE_VIEWER +public: + enum class EAppMode : unsigned char + { + Editor, + GCodeViewer + }; + +private: +#endif // ENABLE_GCODE_VIEWER + bool m_initialized { false }; - bool app_conf_exists{ false }; + bool m_app_conf_exists{ false }; +#if ENABLE_GCODE_VIEWER + EAppMode m_app_mode{ EAppMode::Editor }; + bool m_is_recreating_gui{ false }; +#endif // ENABLE_GCODE_VIEWER wxColour m_color_label_modified; wxColour m_color_label_sys; @@ -98,8 +122,9 @@ class GUI_App : public wxApp wxFont m_small_font; wxFont m_bold_font; wxFont m_normal_font; + wxFont m_code_font; - int m_em_unit; // width of a "m"-symbol in pixels for current system font + int m_em_unit; // width of a "m"-symbol in pixels for current system font // Note: for 100% Scale m_em_unit = 10 -> it's a good enough coefficient for a size setting of controls std::unique_ptr m_wxLocale; @@ -119,16 +144,32 @@ class GUI_App : public wxApp std::unique_ptr m_single_instance_checker; std::string m_instance_hash_string; size_t m_instance_hash_int; + public: bool OnInit() override; bool initialized() const { return m_initialized; } +#if ENABLE_GCODE_VIEWER + explicit GUI_App(EAppMode mode = EAppMode::Editor); +#else GUI_App(); +#endif // ENABLE_GCODE_VIEWER ~GUI_App() override; +#if ENABLE_GCODE_VIEWER + EAppMode get_app_mode() const { return m_app_mode; } + bool is_editor() const { return m_app_mode == EAppMode::Editor; } + bool is_gcode_viewer() const { return m_app_mode == EAppMode::GCodeViewer; } + bool is_recreating_gui() const { return m_is_recreating_gui; } +#endif // ENABLE_GCODE_VIEWER + + // To be called after the GUI is fully built up. + // Process command line parameters cached in this->init_params, + // load configs, STLs etc. + void post_init(); static std::string get_gl_info(bool format_as_html, bool extensions); - wxGLContext* init_glcontext(wxGLCanvas& canvas); - bool init_opengl(); + wxGLContext* init_glcontext(wxGLCanvas& canvas); + bool init_opengl(); static unsigned get_colour_approx_luma(const wxColour &colour); static bool dark_mode(); @@ -146,20 +187,26 @@ public: const wxFont& small_font() { return m_small_font; } const wxFont& bold_font() { return m_bold_font; } const wxFont& normal_font() { return m_normal_font; } + const wxFont& code_font() { return m_code_font; } int em_unit() const { return m_em_unit; } wxSize get_min_size() const; float toolbar_icon_scale(const bool is_limited = false) const; void set_auto_toolbar_icon_scale(float scale) const; + void check_printer_presets(); void recreate_GUI(const wxString& message); void system_info(); void keyboard_shortcuts(); void load_project(wxWindow *parent, wxString& input_file) const; void import_model(wxWindow *parent, wxArrayString& input_files) const; +#if ENABLE_GCODE_VIEWER + void load_gcode(wxWindow* parent, wxString& input_file) const; +#endif // ENABLE_GCODE_VIEWER + static bool catch_error(std::function cb, const std::string& err); void persist_window_geometry(wxTopLevelWindow *window, bool default_maximized = false); - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); bool switch_language(); bool load_language(wxString language, bool initial); @@ -182,6 +229,7 @@ public: virtual bool OnExceptionInMainLoop() override; #ifdef __APPLE__ + void OSXStoreOpenFiles(const wxArrayString &files) override; // wxWidgets override to get an event on open files. void MacOpenFiles(const wxArrayString &fileNames) override; #endif /* __APPLE */ @@ -194,12 +242,18 @@ public: Plater* plater(); Model& model(); + + // Parameters extracted from the command line to be passed to GUI after initialization. + const GUI_InitParams* init_params { nullptr }; + AppConfig* app_config{ nullptr }; PresetBundle* preset_bundle{ nullptr }; PresetUpdater* preset_updater{ nullptr }; MainFrame* mainframe{ nullptr }; Plater* plater_{ nullptr }; + PresetUpdater* get_preset_updater() { return preset_updater; } + wxNotebook* tab_panel() const ; int extruders_cnt() const; int extruders_edited_cnt() const; @@ -227,6 +281,12 @@ public: void gcode_thumbnails_debug(); #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG + GLShaderProgram* get_shader(const std::string& shader_name) { return m_opengl_mgr.get_shader(shader_name); } + GLShaderProgram* get_current_shader() { return m_opengl_mgr.get_current_shader(); } + + bool is_gl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const { return m_opengl_mgr.get_gl_info().is_version_greater_or_equal_to(major, minor); } + bool is_glsl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const { return m_opengl_mgr.get_gl_info().is_glsl_version_greater_or_equal_to(major, minor); } + private: bool on_init_inner(); void init_app_config(); @@ -240,11 +300,12 @@ private: #ifdef __WXMSW__ void associate_3mf_files(); + void associate_gcode_files(); #endif // __WXMSW__ }; DECLARE_APP(GUI_App) } // GUI -} //Slic3r +} // Slic3r #endif // slic3r_GUI_App_hpp_ diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp new file mode 100644 index 0000000000..d1c17bc896 --- /dev/null +++ b/src/slic3r/GUI/GUI_Init.cpp @@ -0,0 +1,96 @@ +#include "GUI_Init.hpp" + +#include "libslic3r/AppConfig.hpp" + +#include "slic3r/GUI/GUI.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/InstanceCheck.hpp" +#include "slic3r/GUI/format.hpp" +#include "slic3r/GUI/MainFrame.hpp" +#include "slic3r/GUI/Plater.hpp" + +// To show a message box if GUI initialization ends up with an exception thrown. +#include + +#include +#include + +namespace Slic3r { +namespace GUI { + +int GUI_Run(GUI_InitParams ¶ms) +{ + try { +#if ENABLE_GCODE_VIEWER + GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); + if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { + // G-code viewer is currently not performing instance check, a new G-code viewer is started every time. + bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; + if (Slic3r::instance_check(params.argc, params.argv, gui_single_instance_setting)) { + //TODO: do we have delete gui and other stuff? + return -1; + } + } +#else + GUI::GUI_App *gui = new GUI::GUI_App(); +#endif // ENABLE_GCODE_VIEWER + +// gui->autosave = m_config.opt_string("autosave"); + GUI::GUI_App::SetInstance(gui); + gui->init_params = ¶ms; +/* +#if ENABLE_GCODE_VIEWER + gui->CallAfter([gui, this, &load_configs, params.start_as_gcodeviewer] { +#else + gui->CallAfter([gui, this, &load_configs] { +#endif // ENABLE_GCODE_VIEWER + if (!gui->initialized()) { + return; + } + +#if ENABLE_GCODE_VIEWER + if (params.start_as_gcodeviewer) { + if (!m_input_files.empty()) + gui->plater()->load_gcode(wxString::FromUTF8(m_input_files[0].c_str())); + } else { +#endif // ENABLE_GCODE_VIEWER_AS +#if 0 + // Load the cummulative config over the currently active profiles. + //FIXME if multiple configs are loaded, only the last one will have an effect. + // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). + // As of now only the full configs are supported here. + if (!m_print_config.empty()) + gui->mainframe->load_config(m_print_config); +#endif + if (!load_configs.empty()) + // Load the last config to give it a name at the UI. The name of the preset may be later + // changed by loading an AMF or 3MF. + //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. + gui->mainframe->load_config_file(load_configs.back()); + // If loading a 3MF file, the config is loaded from the last one. + if (!m_input_files.empty()) + gui->plater()->load_files(m_input_files, true, true); + if (!m_extra_config.empty()) + gui->mainframe->load_config(m_extra_config); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + }); +*/ + int result = wxEntry(params.argc, params.argv); + return result; + } catch (const Slic3r::Exception &ex) { + boost::nowide::cerr << ex.what() << std::endl; + wxMessageBox(boost::nowide::widen(ex.what()), _L("PrusaSlicer GUI initialization failed"), wxICON_STOP); + } catch (const std::exception &ex) { + boost::nowide::cerr << "PrusaSlicer GUI initialization failed: " << ex.what() << std::endl; + wxMessageBox(format_wxstr(_L("Fatal error, exception catched: %1%"), ex.what()), _L("PrusaSlicer GUI initialization failed"), wxICON_STOP); + } + + // error + return 1; +} + +} +} diff --git a/src/slic3r/GUI/GUI_Init.hpp b/src/slic3r/GUI/GUI_Init.hpp new file mode 100644 index 0000000000..c420c9554a --- /dev/null +++ b/src/slic3r/GUI/GUI_Init.hpp @@ -0,0 +1,27 @@ +#ifndef slic3r_GUI_Init_hpp_ +#define slic3r_GUI_Init_hpp_ + +#include + +namespace Slic3r { + +namespace GUI { + +struct GUI_InitParams +{ + int argc; + char **argv; + + std::vector load_configs; + DynamicPrintConfig extra_config; + std::vector input_files; + + bool start_as_gcodeviewer; +}; + +int GUI_Run(GUI_InitParams ¶ms); + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_GUI_Init_hpp_ diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index b1a5512d4b..7d8643c7f8 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -3,7 +3,7 @@ #include "OptionsGroup.hpp" #include "GUI_App.hpp" -#include "PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/Model.hpp" #include "GLCanvas3D.hpp" #include "Plater.hpp" @@ -34,6 +34,7 @@ ObjectLayers::ObjectLayers(wxWindow* parent) : m_grid_sizer->Add(temp); } + m_og->activate(); m_og->sizer->Clear(true); m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); @@ -153,7 +154,7 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus void ObjectLayers::create_layers_list() { - for (const auto layer : m_object->layer_config_ranges) + for (const auto &layer : m_object->layer_config_ranges) { const t_layer_height_range& range = layer.first; auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index d44db72b10..0b3de9f6af 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1,4 +1,5 @@ #include "libslic3r/libslic3r.h" +#include "libslic3r/PresetBundle.hpp" #include "GUI_ObjectList.hpp" #include "GUI_ObjectManipulation.hpp" #include "GUI_ObjectLayers.hpp" @@ -7,7 +8,6 @@ #include "Plater.hpp" #include "OptionsGroup.hpp" -#include "PresetBundle.hpp" #include "Tab.hpp" #include "wxExtensions.hpp" #include "libslic3r/Model.hpp" @@ -88,12 +88,10 @@ ObjectList::ObjectList(wxWindow* parent) : { // Fill CATEGORY_ICON { - // Note: `this` isn't passed to create_scaled_bitmap() here because of bugs in the widget, - // see note in PresetBundle::load_compatible_bitmaps() - // ptFFF CATEGORY_ICON[L("Layers and Perimeters")] = create_scaled_bitmap("layers"); CATEGORY_ICON[L("Infill")] = create_scaled_bitmap("infill"); + CATEGORY_ICON[L("Ironing")] = create_scaled_bitmap("ironing"); CATEGORY_ICON[L("Support material")] = create_scaled_bitmap("support"); CATEGORY_ICON[L("Speed")] = create_scaled_bitmap("time"); CATEGORY_ICON[L("Extruders")] = create_scaled_bitmap("funnel"); @@ -279,7 +277,11 @@ void ObjectList::create_objects_ctrl() // column ItemName(Icon+Text) of the view control: // And Icon can be consisting of several bitmaps - AppendColumn(new wxDataViewColumn(_(L("Name")), new BitmapTextRenderer(this), + BitmapTextRenderer* bmp_text_renderer = new BitmapTextRenderer(); + bmp_text_renderer->set_can_create_editor_ctrl_function([this]() { + return m_objects_model->GetItemType(GetSelection()) & (itVolume | itObject); + }); + AppendColumn(new wxDataViewColumn(_L("Name"), bmp_text_renderer, colName, 20*em, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE)); // column PrintableProperty (Icon) of the view control: @@ -287,11 +289,15 @@ void ObjectList::create_objects_ctrl() wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE); // column Extruder of the view control: - AppendColumn(new wxDataViewColumn(_(L("Extruder")), new BitmapChoiceRenderer(), + BitmapChoiceRenderer* bmp_choice_renderer = new BitmapChoiceRenderer(); + bmp_choice_renderer->set_can_create_editor_ctrl_function([this]() { + return m_objects_model->GetItemType(GetSelection()) & (itVolume | itLayer | itObject); + }); + AppendColumn(new wxDataViewColumn(_L("Extruder"), bmp_choice_renderer, colExtruder, 8*em, wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE)); // column ItemEditing of the view control: - AppendBitmapColumn(_(L("Editing")), colEditing, wxDATAVIEW_CELL_INERT, 3*em, + AppendBitmapColumn(_L("Editing"), colEditing, wxDATAVIEW_CELL_INERT, 3*em, wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE); // For some reason under OSX on 4K(5K) monitors in wxDataViewColumn constructor doesn't set width of column. @@ -462,7 +468,7 @@ int ObjectList::get_selected_obj_idx() const return -1; } -DynamicPrintConfig& ObjectList::get_item_config(const wxDataViewItem& item) const +ModelConfig& ObjectList::get_item_config(const wxDataViewItem& item) const { assert(item); const ItemType type = m_objects_model->GetItemType(item); @@ -486,10 +492,10 @@ void ObjectList::update_extruder_values_for_items(const size_t max_extruder) auto object = (*m_objects)[i]; wxString extruder; if (!object->config.has("extruder") || - size_t(object->config.option("extruder")->value) > max_extruder) + size_t(object->config.extruder()) > max_extruder) extruder = _(L("default")); else - extruder = wxString::Format("%d", object->config.option("extruder")->value); + extruder = wxString::Format("%d", object->config.extruder()); m_objects_model->SetExtruder(extruder, item); @@ -498,10 +504,10 @@ void ObjectList::update_extruder_values_for_items(const size_t max_extruder) item = m_objects_model->GetItemByVolumeId(i, id); if (!item) continue; if (!object->volumes[id]->config.has("extruder") || - size_t(object->volumes[id]->config.option("extruder")->value) > max_extruder) + size_t(object->volumes[id]->config.extruder()) > max_extruder) extruder = _(L("default")); else - extruder = wxString::Format("%d", object->volumes[id]->config.option("extruder")->value); + extruder = wxString::Format("%d", object->volumes[id]->config.extruder()); m_objects_model->SetExtruder(extruder, item); } @@ -644,6 +650,7 @@ void ObjectList::msw_rescale_icons() // ptFFF CATEGORY_ICON[L("Layers and Perimeters")] = create_scaled_bitmap("layers"); CATEGORY_ICON[L("Infill")] = create_scaled_bitmap("infill"); + CATEGORY_ICON[L("Ironing")] = create_scaled_bitmap("ironing"); CATEGORY_ICON[L("Support material")] = create_scaled_bitmap("support"); CATEGORY_ICON[L("Speed")] = create_scaled_bitmap("time"); CATEGORY_ICON[L("Extruders")] = create_scaled_bitmap("funnel"); @@ -760,8 +767,7 @@ void ObjectList::copy_settings_to_clipboard() if (m_objects_model->GetItemType(item) & itSettings) item = m_objects_model->GetParent(item); - DynamicPrintConfig& config_cache = m_clipboard.get_config_cache(); - config_cache = get_item_config(item); + m_clipboard.get_config_cache() = get_item_config(item).get(); } void ObjectList::paste_settings_into_list() @@ -792,7 +798,7 @@ void ObjectList::paste_settings_into_list() } // Add settings item for object/sub-object and show them - show_settings(add_settings_item(item, m_config)); + show_settings(add_settings_item(item, &m_config->get())); } void ObjectList::paste_volumes_into_list(int obj_idx, const ModelVolumePtrs& volumes) @@ -811,8 +817,8 @@ void ObjectList::paste_volumes_into_list(int obj_idx, const ModelVolumePtrs& vol { const wxDataViewItem& vol_item = m_objects_model->AddVolumeChild(object_item, wxString::FromUTF8(volume->name.c_str()), volume->type(), volume->get_mesh_errors_count()>0 , - volume->config.has("extruder") ? volume->config.option("extruder")->value : 0); - add_settings_item(vol_item, &volume->config); + volume->config.has("extruder") ? volume->config.extruder() : 0); + add_settings_item(vol_item, &volume->config.get()); items.Add(vol_item); } @@ -1473,7 +1479,7 @@ void ObjectList::get_settings_choice(const wxString& category_name) // Add settings item for object/sub-object and show them if (!(item_type & (itObject | itVolume | itLayer))) item = m_objects_model->GetTopParent(item); - show_settings(add_settings_item(item, m_config)); + show_settings(add_settings_item(item, &m_config->get())); } void ObjectList::get_freq_settings_choice(const wxString& bundle_name) @@ -1530,7 +1536,7 @@ void ObjectList::get_freq_settings_choice(const wxString& bundle_name) // Add settings item for object/sub-object and show them if (!(item_type & (itObject | itVolume | itLayer))) item = m_objects_model->GetTopParent(item); - show_settings(add_settings_item(item, m_config)); + show_settings(add_settings_item(item, &m_config->get())); } void ObjectList::show_settings(const wxDataViewItem settings_item) @@ -1814,9 +1820,8 @@ void ObjectList::append_menu_item_change_extruder(wxMenu* menu) int initial_extruder = -1; // negative value for multiple object/part selection if (sels.Count()==1) { - DynamicPrintConfig& config = get_item_config(sels[0]); - initial_extruder = !config.has("extruder") ? 0 : - config.option("extruder")->value; + const ModelConfig &config = get_item_config(sels[0]); + initial_extruder = config.has("extruder") ? config.extruder() : 0; } for (int i = 0; i <= extruders_cnt; i++) @@ -1850,10 +1855,10 @@ void ObjectList::append_menu_item_scale_selection_to_fit_print_volume(wxMenu* me void ObjectList::append_menu_items_convert_unit(wxMenu* menu) { - append_menu_item(menu, wxID_ANY, _L("Convert from imperial unit"), _L("Convert from imperial unit"), + append_menu_item(menu, wxID_ANY, _L("Convert from imperial units"), _L("Convert from imperial units"), [](wxCommandEvent&) { wxGetApp().plater()->convert_unit(true); }, "", menu); - append_menu_item(menu, wxID_ANY, _L("Convert to imperial unit"), _L("Convert to imperial unit"), + append_menu_item(menu, wxID_ANY, _L("Revert conversion from imperial units"), _L("Revert conversion from imperial units"), [](wxCommandEvent&) { wxGetApp().plater()->convert_unit(false); }, "", menu); } @@ -2210,7 +2215,7 @@ void ObjectList::load_shape_object(const std::string& type_name) load_mesh_object(mesh, _(L("Shape")) + "-" + _(type_name)); } -void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name) +void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name, bool center) { // Add mesh to model as a new object Model& model = wxGetApp().plater()->model(); @@ -2220,6 +2225,7 @@ void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name #endif /* _DEBUG */ std::vector object_idxs; + auto bb = mesh.bounding_box(); ModelObject* new_object = model.add_object(); new_object->name = into_u8(name); new_object->add_instance(); // each object should have at list one instance @@ -2229,13 +2235,17 @@ void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name // set a default extruder value, since user can't add it manually new_volume->config.set_key_value("extruder", new ConfigOptionInt(0)); new_object->invalidate_bounding_box(); - - new_object->center_around_origin(); + new_object->translate(-bb.center()); + + if (center) { + const BoundingBoxf bed_shape = wxGetApp().plater()->bed_shape_bb(); + new_object->instances[0]->set_offset(Slic3r::to_3d(bed_shape.center().cast(), -new_object->origin_translation(2))); + } else { + new_object->instances[0]->set_offset(bb.center()); + } + new_object->ensure_on_bed(); - - const BoundingBoxf bed_shape = wxGetApp().plater()->bed_shape_bb(); - new_object->instances[0]->set_offset(Slic3r::to_3d(bed_shape.center().cast(), -new_object->origin_translation(2))); - + object_idxs.push_back(model.objects.size() - 1); #ifdef _DEBUG check_model_ids_validity(model); @@ -2308,9 +2318,7 @@ void ObjectList::del_settings_from_config(const wxDataViewItem& parent_item) take_snapshot(_(L("Delete Settings"))); - int extruder = -1; - if (m_config->has("extruder")) - extruder = m_config->option("extruder")->value; + int extruder = m_config->has("extruder") ? m_config->extruder() : -1; coordf_t layer_height = 0.0; if (is_layer_settings) @@ -2362,8 +2370,9 @@ void ObjectList::del_layers_from_object(const int obj_idx) bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, const int type) { - if (obj_idx == 1000) - // Cannot delete a wipe tower. + assert(idx >= 0); + if (obj_idx == 1000 || idx<0) + // Cannot delete a wipe tower or volume with negative id return false; ModelObject* object = (*m_objects)[obj_idx]; @@ -2446,11 +2455,10 @@ void ObjectList::split() const wxDataViewItem& vol_item = m_objects_model->AddVolumeChild(parent, from_u8(volume->name), volume->is_modifier() ? ModelVolumeType::PARAMETER_MODIFIER : ModelVolumeType::MODEL_PART, volume->get_mesh_errors_count()>0, - volume->config.has("extruder") ? - volume->config.option("extruder")->value : 0, + volume->config.has("extruder") ? volume->config.extruder() : 0, false); // add settings to the part, if it has those - add_settings_item(vol_item, &volume->config); + add_settings_item(vol_item, &volume->config.get()); } model_object->input_file.clear(); @@ -2566,7 +2574,7 @@ void ObjectList::merge(bool to_multipart_object) Model* model = (*m_objects)[0]->get_model(); ModelObject* new_object = model->add_object(); new_object->name = _u8L("Merged"); - DynamicPrintConfig* config = &new_object->config; + ModelConfig &config = new_object->config; for (int obj_idx : obj_idxs) { @@ -2603,8 +2611,8 @@ void ObjectList::merge(bool to_multipart_object) } // merge settings - auto new_opt_keys = config->keys(); - const DynamicPrintConfig& from_config = object->config; + auto new_opt_keys = config.keys(); + const ModelConfig& from_config = object->config; auto opt_keys = from_config.keys(); for (auto& opt_key : opt_keys) { @@ -2615,7 +2623,7 @@ void ObjectList::merge(bool to_multipart_object) // get it from default config values option = DynamicPrintConfig::new_from_defaults_keys({ opt_key })->option(opt_key); } - config->set_key_value(opt_key, option->clone()); + config.set_key_value(opt_key, option->clone()); } } // save extruder value if it was set @@ -2682,7 +2690,7 @@ void ObjectList::layers_editing() // set some default value if (ranges.empty()) { take_snapshot(_(L("Add Layers"))); - ranges[{ 0.0f, 2.0f }] = get_default_layer_config(obj_idx); + ranges[{ 0.0f, 2.0f }].assign_config(get_default_layer_config(obj_idx)); } // create layer root item @@ -2998,8 +3006,7 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed) auto model_object = (*m_objects)[obj_idx]; const wxString& item_name = from_u8(model_object->name); const auto item = m_objects_model->Add(item_name, - !model_object->config.has("extruder") ? 0 : - model_object->config.option("extruder")->value, + model_object->config.has("extruder") ? model_object->config.extruder() : 0, get_mesh_errors_count(obj_idx) > 0); // add volumes to the object @@ -3009,10 +3016,9 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed) from_u8(volume->name), volume->type(), volume->get_mesh_errors_count()>0, - !volume->config.has("extruder") ? 0 : - volume->config.option("extruder")->value, + volume->config.has("extruder") ? volume->config.extruder() : 0, false); - add_settings_item(vol_item, &volume->config); + add_settings_item(vol_item, &volume->config.get()); } Expand(item); } @@ -3032,7 +3038,7 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed) m_objects_model->SetPrintableState(model_object->instances[0]->printable ? piPrintable : piUnprintable, obj_idx); // add settings to the object, if it has those - add_settings_item(item, &model_object->config); + add_settings_item(item, &model_object->config.get()); // Add layers if it has add_layer_root_item(item); @@ -3110,7 +3116,7 @@ void ObjectList::delete_from_model_and_list(const std::vector& it if ((*m_objects)[item->obj_idx]->volumes.size() == 1 && (*m_objects)[item->obj_idx]->config.has("extruder")) { - const wxString extruder = wxString::Format("%d", (*m_objects)[item->obj_idx]->config.option("extruder")->value); + const wxString extruder = wxString::Format("%d", (*m_objects)[item->obj_idx]->config.extruder()); m_objects_model->SetExtruder(extruder, m_objects_model->GetItemById(item->obj_idx)); } wxGetApp().plater()->canvas3D()->ensure_on_bed(item->obj_idx); @@ -3276,7 +3282,7 @@ void ObjectList::add_layer_range_after_current(const t_layer_height_range curren const wxDataViewItem layers_item = GetSelection(); - t_layer_config_ranges& ranges = object(obj_idx)->layer_config_ranges; + auto& ranges = object(obj_idx)->layer_config_ranges; auto it_range = ranges.find(current_range); assert(it_range != ranges.end()); if (it_range == ranges.end()) @@ -3292,7 +3298,7 @@ void ObjectList::add_layer_range_after_current(const t_layer_height_range curren changed = true; const t_layer_height_range new_range = { current_range.second, current_range.second + 2. }; - ranges[new_range] = get_default_layer_config(obj_idx); + ranges[new_range].assign_config(get_default_layer_config(obj_idx)); add_layer_item(new_range, layers_item); } else if (const std::pair &next_range = it_next_range->first; current_range.second <= next_range.first) @@ -3329,7 +3335,7 @@ void ObjectList::add_layer_range_after_current(const t_layer_height_range curren add_layer_item(new_range, layers_item, layer_idx); new_range = { current_range.second, middle_layer_z }; - ranges[new_range] = get_default_layer_config(obj_idx); + ranges[new_range].assign_config(get_default_layer_config(obj_idx)); add_layer_item(new_range, layers_item, layer_idx); } } @@ -3340,7 +3346,7 @@ void ObjectList::add_layer_range_after_current(const t_layer_height_range curren changed = true; const t_layer_height_range new_range = { current_range.second, next_range.first }; - ranges[new_range] = get_default_layer_config(obj_idx); + ranges[new_range].assign_config(get_default_layer_config(obj_idx)); add_layer_item(new_range, layers_item, layer_idx); } } @@ -3366,7 +3372,7 @@ wxString ObjectList::can_add_new_range_after_current(const t_layer_height_range // This should not happen. return "ObjectList assert"; - t_layer_config_ranges& ranges = object(obj_idx)->layer_config_ranges; + auto& ranges = object(obj_idx)->layer_config_ranges; auto it_range = ranges.find(current_range); assert(it_range != ranges.end()); if (it_range == ranges.end()) @@ -3405,7 +3411,7 @@ void ObjectList::add_layer_item(const t_layer_height_range& range, const int obj_idx = m_objects_model->GetObjectIdByItem(layers_item); if (obj_idx < 0) return; - const DynamicPrintConfig& config = object(obj_idx)->layer_config_ranges[range]; + const DynamicPrintConfig& config = object(obj_idx)->layer_config_ranges[range].get(); if (!config.has("extruder")) return; @@ -3425,7 +3431,7 @@ bool ObjectList::edit_layer_range(const t_layer_height_range& range, coordf_t la if (obj_idx < 0) return false; - DynamicPrintConfig* config = &object(obj_idx)->layer_config_ranges[range]; + ModelConfig* config = &object(obj_idx)->layer_config_ranges[range]; if (fabs(layer_height - config->opt_float("layer_height")) < EPSILON) return false; @@ -3454,12 +3460,14 @@ bool ObjectList::edit_layer_range(const t_layer_height_range& range, const t_lay const ItemType sel_type = m_objects_model->GetItemType(GetSelection()); - t_layer_config_ranges& ranges = object(obj_idx)->layer_config_ranges; + auto& ranges = object(obj_idx)->layer_config_ranges; - const DynamicPrintConfig config = ranges[range]; + { + ModelConfig config = std::move(ranges[range]); + ranges.erase(range); + ranges[new_range] = std::move(config); + } - ranges.erase(range); - ranges[new_range] = config; changed_object(obj_idx); wxDataViewItem root_item = m_objects_model->GetLayerRootItem(m_objects_model->GetItemById(obj_idx)); @@ -4027,7 +4035,7 @@ void ObjectList::change_part_type() } else if (!settings_item && (new_type == ModelVolumeType::MODEL_PART || new_type == ModelVolumeType::PARAMETER_MODIFIER)) { - add_settings_item(item, &volume->config); + add_settings_item(item, &volume->config.get()); } } @@ -4052,14 +4060,14 @@ void ObjectList::update_and_show_object_settings_item() if (!item) return; const wxDataViewItem& obj_item = m_objects_model->IsSettingsItem(item) ? m_objects_model->GetParent(item) : item; - select_item(add_settings_item(obj_item, &get_item_config(obj_item))); + select_item(add_settings_item(obj_item, &get_item_config(obj_item).get())); } // Update settings item for item had it void ObjectList::update_settings_item_and_selection(wxDataViewItem item, wxDataViewItemArray& selections) { const wxDataViewItem old_settings_item = m_objects_model->GetSettingsItem(item); - const wxDataViewItem new_settings_item = add_settings_item(item, &get_item_config(item)); + const wxDataViewItem new_settings_item = add_settings_item(item, &get_item_config(item).get()); if (!new_settings_item && old_settings_item) m_objects_model->Delete(old_settings_item); @@ -4434,7 +4442,8 @@ void ObjectList::show_multi_selection_menu() }, wxGetApp().plater()); append_menu_items_convert_unit(menu); - append_menu_item_merge_to_multipart_object(menu); + if (can_merge_to_multipart_object()) + append_menu_item_merge_to_multipart_object(menu); wxGetApp().plater()->PopupMenu(menu); } @@ -4476,19 +4485,19 @@ void ObjectList::set_extruder_for_selected_items(const int extruder) const for (const wxDataViewItem& item : sels) { - DynamicPrintConfig& config = get_item_config(item); + ModelConfig& config = get_item_config(item); if (config.has("extruder")) { if (extruder == 0) config.erase("extruder"); else - config.option("extruder")->value = extruder; + config.set("extruder", extruder); } else if (extruder > 0) config.set_key_value("extruder", new ConfigOptionInt(extruder)); const wxString extruder_str = extruder == 0 ? wxString (_(L("default"))) : - wxString::Format("%d", config.option("extruder")->value); + wxString::Format("%d", config.extruder()); auto const type = m_objects_model->GetItemType(item); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index aa5264b07d..df27fcbdb1 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -24,6 +24,7 @@ class MenuWithSeparators; namespace Slic3r { class ConfigOptionsGroup; class DynamicPrintConfig; +class ModelConfig; class ModelObject; class ModelVolume; class TriangleMesh; @@ -39,9 +40,9 @@ typedef std::map< std::string, std::vector< std::pair typedef std::vector ModelVolumePtrs; -typedef double coordf_t; -typedef std::pair t_layer_height_range; -typedef std::map t_layer_config_ranges; +typedef double coordf_t; +typedef std::pair t_layer_height_range; +typedef std::map t_layer_config_ranges; namespace GUI { @@ -165,7 +166,7 @@ private: wxMenuItem* m_menu_item_split_instances { nullptr }; ObjectDataViewModel *m_objects_model{ nullptr }; - DynamicPrintConfig *m_config {nullptr}; + ModelConfig *m_config {nullptr}; std::vector *m_objects{ nullptr }; wxBitmapComboBox *m_extruder_editor { nullptr }; @@ -210,7 +211,7 @@ public: std::map CATEGORY_ICON; ObjectDataViewModel* GetModel() const { return m_objects_model; } - DynamicPrintConfig* config() const { return m_config; } + ModelConfig* config() const { return m_config; } std::vector* objects() const { return m_objects; } ModelObject* object(const int obj_idx) const ; @@ -294,7 +295,7 @@ public: void load_part(ModelObject* model_object, std::vector> &volumes_info, ModelVolumeType type); void load_generic_subobject(const std::string& type_name, const ModelVolumeType type); void load_shape_object(const std::string &type_name); - void load_mesh_object(const TriangleMesh &mesh, const wxString &name); + void load_mesh_object(const TriangleMesh &mesh, const wxString &name, bool center = true); void del_object(const int obj_idx); void del_subobject_item(wxDataViewItem& item); void del_settings_from_config(const wxDataViewItem& parent_item); @@ -320,7 +321,7 @@ public: wxPoint get_mouse_position_in_control() const { return wxGetMousePosition() - this->GetScreenPosition(); } wxBoxSizer* get_sizer() {return m_sizer;} int get_selected_obj_idx() const; - DynamicPrintConfig& get_item_config(const wxDataViewItem& item) const; + ModelConfig& get_item_config(const wxDataViewItem& item) const; SettingsBundle get_item_settings_bundle(const DynamicPrintConfig* config, const bool is_object_settings); void changed_object(const int obj_idx = -1) const; diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 2c35fc316d..2754d255a0 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -6,7 +6,7 @@ #include "OptionsGroup.hpp" #include "GUI_App.hpp" #include "wxExtensions.hpp" -#include "PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/Geometry.hpp" #include "Selection.hpp" @@ -65,8 +65,8 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); - temp->Append(_(L("World coordinates"))); - temp->Append(_(L("Local coordinates"))); + temp->Append(_L("World coordinates")); + temp->Append(_L("Local coordinates")); temp->SetSelection(0); temp->SetValue(temp->GetString(0)); @@ -85,7 +85,7 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) temp->SetItemBitmap(0, empty_bmp); #endif - temp->SetToolTip(_(L("Select coordinate space, in which the transformation will be performed."))); + temp->SetToolTip(_L("Select coordinate space, in which the transformation will be performed.")); return temp; } @@ -108,8 +108,8 @@ void msw_rescale_word_local_combo(wxBitmapComboBox* combo) // Set rescaled size combo->SetSize(size); - combo->Append(_(L("World coordinates"))); - combo->Append(_(L("Local coordinates"))); + combo->Append(_L("World coordinates")); + combo->Append(_L("Local coordinates")); wxBitmap empty_bmp(1, combo->GetFont().GetPixelSize().y + 2); empty_bmp.SetWidth(0); @@ -158,9 +158,9 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : sizer->Add(m_fix_throught_netfab_bitmap); - auto name_label = new wxStaticText(m_parent, wxID_ANY, _(L("Name"))+":"); + auto name_label = new wxStaticText(m_parent, wxID_ANY, _L("Name")+":"); set_font_and_background_style(name_label, wxGetApp().normal_font()); - name_label->SetToolTip(_(L("Object name"))); + name_label->SetToolTip(_L("Object name")); sizer->Add(name_label); m_main_grid_sizer->Add(sizer); @@ -268,7 +268,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : // We will add a button to toggle mirroring to each axis: auto btn = new ScalableButton(parent, wxID_ANY, "mirroring_off", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER | wxTRANSPARENT_WINDOW); - btn->SetToolTip(wxString::Format(_(L("Toggle %c axis mirroring")), (int)label)); + btn->SetToolTip(wxString::Format(_L("Toggle %c axis mirroring"), (int)label)); btn->SetBitmapDisabled_(m_mirror_bitmap_hidden); m_mirror_buttons[axis_idx].first = btn; @@ -342,7 +342,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : // Add drop to bed button m_drop_to_bed_button = new ScalableButton(parent, wxID_ANY, ScalableBitmap(parent, "drop_to_bed")); - m_drop_to_bed_button->SetToolTip(_(L("Drop to bed"))); + m_drop_to_bed_button->SetToolTip(_L("Drop to bed")); m_drop_to_bed_button->Bind(wxEVT_BUTTON, [=](wxCommandEvent& e) { // ??? GLCanvas3D* canvas = wxGetApp().plater()->canvas3D(); @@ -354,7 +354,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : const Geometry::Transformation& instance_trafo = volume->get_instance_transformation(); Vec3d diff = m_cache.position - instance_trafo.get_matrix(true).inverse() * Vec3d(0., 0., get_volume_min_z(volume)); - Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Drop to bed"))); + Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Drop to bed")); change_position_value(0, diff.x()); change_position_value(1, diff.y()); change_position_value(2, diff.z()); @@ -369,7 +369,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : // Add reset rotation button m_reset_rotation_button = new ScalableButton(parent, wxID_ANY, ScalableBitmap(parent, "undo")); - m_reset_rotation_button->SetToolTip(_(L("Reset rotation"))); + m_reset_rotation_button->SetToolTip(_L("Reset rotation")); m_reset_rotation_button->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { GLCanvas3D* canvas = wxGetApp().plater()->canvas3D(); Selection& selection = canvas->get_selection(); @@ -404,9 +404,9 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : // Add reset scale button m_reset_scale_button = new ScalableButton(parent, wxID_ANY, ScalableBitmap(parent, "undo")); - m_reset_scale_button->SetToolTip(_(L("Reset scale"))); + m_reset_scale_button->SetToolTip(_L("Reset scale")); m_reset_scale_button->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { - Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Reset scale"))); + Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Reset scale")); change_scale_value(0, 100.); change_scale_value(1, 100.); change_scale_value(2, 100.); @@ -431,6 +431,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : m_main_grid_sizer->Add(m_check_inch, 1, wxEXPAND); + m_og->activate(); m_og->sizer->Clear(true); m_og->sizer->Add(m_main_grid_sizer, 1, wxEXPAND | wxALL, border); } @@ -509,8 +510,7 @@ void ObjectManipulation::update_settings_value(const Selection& selection) m_world_coordinates = true; ObjectList* obj_list = wxGetApp().obj_list(); - if (selection.is_single_full_instance()) - { + if (selection.is_single_full_instance()) { // all volumes in the selection belongs to the same instance, any of them contains the needed instance data, so we take the first one const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); m_new_position = volume->get_instance_offset(); @@ -528,7 +528,8 @@ void ObjectManipulation::update_settings_value(const Selection& selection) m_new_rotation = Vec3d::Zero(); m_new_size = selection.get_scaled_instance_bounding_box().size(); m_new_scale = m_new_size.cwiseProduct(selection.get_unscaled_instance_bounding_box().size().cwiseInverse()) * 100.; - } else { + } + else { m_new_rotation = volume->get_instance_rotation() * (180. / M_PI); m_new_size = volume->get_instance_transformation().get_scaling_factor().cwiseProduct(wxGetApp().model().objects[volume->object_idx()]->raw_mesh_bounding_box().size()); m_new_scale = volume->get_instance_scaling_factor() * 100.; @@ -536,8 +537,7 @@ void ObjectManipulation::update_settings_value(const Selection& selection) m_new_enabled = true; } - else if (selection.is_single_full_object() && obj_list->is_selected(itObject)) - { + else if (selection.is_single_full_object() && obj_list->is_selected(itObject)) { const BoundingBoxf3& box = selection.get_bounding_box(); m_new_position = box.center(); m_new_rotation = Vec3d::Zero(); @@ -547,18 +547,16 @@ void ObjectManipulation::update_settings_value(const Selection& selection) m_new_scale_label_string = L("Scale"); m_new_enabled = true; } - else if (selection.is_single_modifier() || selection.is_single_volume()) - { + else if (selection.is_single_modifier() || selection.is_single_volume()) { // the selection contains a single volume const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); m_new_position = volume->get_volume_offset(); m_new_rotation = volume->get_volume_rotation() * (180. / M_PI); m_new_scale = volume->get_volume_scaling_factor() * 100.; - m_new_size = volume->get_volume_transformation().get_scaling_factor().cwiseProduct(volume->bounding_box().size()); + m_new_size = volume->get_instance_transformation().get_scaling_factor().cwiseProduct(volume->get_volume_transformation().get_scaling_factor().cwiseProduct(volume->bounding_box().size())); m_new_enabled = true; } - else if (obj_list->multiple_selection() || obj_list->is_selected(itInstanceRoot)) - { + else if (obj_list->multiple_selection() || obj_list->is_selected(itInstanceRoot)) { reset_settings_value(); m_new_move_label_string = L("Translate"); m_new_rotate_label_string = L("Rotate"); @@ -624,7 +622,7 @@ void ObjectManipulation::update_if_dirty() if (selection.requires_uniform_scale()) { m_lock_bnt->SetLock(true); - m_lock_bnt->SetToolTip(_(L("You cannot use non-uniform scaling mode for multiple objects/parts selection"))); + m_lock_bnt->SetToolTip(_L("You cannot use non-uniform scaling mode for multiple objects/parts selection")); m_lock_bnt->disable(); } else { @@ -924,11 +922,11 @@ void ObjectManipulation::set_uniform_scaling(const bool new_value) if (! Geometry::is_rotation_ninety_degrees(volume->get_instance_rotation())) { // Cannot apply scaling in the world coordinate system. wxMessageDialog dlg(GUI::wxGetApp().mainframe, - _(L("The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n" + _L("The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n" "Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n" - "once the rotation is embedded into the object coordinates.")) + "\n" + - _(L("This operation is irreversible.\n" - "Do you want to proceed?")), + "once the rotation is embedded into the object coordinates.") + "\n" + + _L("This operation is irreversible.\n" + "Do you want to proceed?"), SLIC3R_APP_NAME, wxYES_NO | wxCANCEL | wxCANCEL_DEFAULT | wxICON_QUESTION); if (dlg.ShowModal() != wxID_YES) { diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index ef78123a4c..2501ea4995 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -4,8 +4,8 @@ #include "OptionsGroup.hpp" #include "GUI_App.hpp" #include "wxExtensions.hpp" -#include "PresetBundle.hpp" #include "Plater.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/Model.hpp" #include @@ -58,6 +58,7 @@ wxSizer* OG_Settings::get_sizer() ObjectSettings::ObjectSettings(wxWindow* parent) : OG_Settings(parent, true) { + m_og->activate(); m_og->set_name(_(L("Additional Settings"))); m_settings_list_sizer = new wxBoxSizer(wxVERTICAL); @@ -82,7 +83,7 @@ bool ObjectSettings::update_settings_list() return false; const bool is_object_settings = objects_model->GetItemType(objects_model->GetParent(item)) == itObject; - SettingsBundle cat_options = objects_ctrl->get_item_settings_bundle(config, is_object_settings); + SettingsBundle cat_options = objects_ctrl->get_item_settings_bundle(&config->get(), is_object_settings); if (!cat_options.empty()) { @@ -148,14 +149,15 @@ bool ObjectSettings::update_settings_list() if (is_extruders_cat) option.opt.max = wxGetApp().extruders_edited_cnt(); optgroup->append_single_option_line(option); - + } + optgroup->activate(); + for (auto& opt : cat.second) optgroup->get_field(opt)->m_on_change = [optgroup](const std::string& opt_id, const boost::any& value) { // first of all take a snapshot and then change value in configuration wxGetApp().plater()->take_snapshot(from_u8((boost::format(_utf8(L("Change Option %s"))) % opt_id).str())); optgroup->on_change_OG(opt_id, value); }; - } optgroup->reload_config(); m_settings_list_sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 0); @@ -176,7 +178,7 @@ bool ObjectSettings::update_settings_list() return true; } -bool ObjectSettings::add_missed_options(DynamicPrintConfig* config_to, const DynamicPrintConfig& config_from) +bool ObjectSettings::add_missed_options(ModelConfig* config_to, const DynamicPrintConfig& config_from) { bool is_added = false; if (wxGetApp().plater()->printer_technology() == ptFFF) @@ -193,7 +195,7 @@ bool ObjectSettings::add_missed_options(DynamicPrintConfig* config_to, const Dyn return is_added; } -void ObjectSettings::update_config_values(DynamicPrintConfig* config) +void ObjectSettings::update_config_values(ModelConfig* config) { const auto objects_model = wxGetApp().obj_list()->GetModel(); const auto item = wxGetApp().obj_list()->GetSelection(); @@ -233,31 +235,30 @@ void ObjectSettings::update_config_values(DynamicPrintConfig* config) } }; - auto get_field = [this](const t_config_option_key & opt_key, int opt_index) + auto toggle_field = [this](const t_config_option_key & opt_key, bool toggle, int opt_index) { Field* field = nullptr; for (auto og : m_og_settings) { field = og->get_fieldc(opt_key, opt_index); if (field != nullptr) - return field; + break; } - return field; + if (field) + field->toggle(toggle); }; - ConfigManipulation config_manipulation(load_config, get_field, nullptr, config); + ConfigManipulation config_manipulation(load_config, toggle_field, nullptr, config); if (!is_object_settings) { const int obj_idx = objects_model->GetObjectIdByItem(item); assert(obj_idx >= 0); - DynamicPrintConfig* obj_config = &wxGetApp().model().objects[obj_idx]->config; - - main_config.apply(*obj_config, true); + main_config.apply(wxGetApp().model().objects[obj_idx]->config.get(), true); printer_technology == ptFFF ? config_manipulation.update_print_fff_config(&main_config) : config_manipulation.update_print_sla_config(&main_config) ; } - main_config.apply(*config, true); + main_config.apply(config->get(), true); printer_technology == ptFFF ? config_manipulation.update_print_fff_config(&main_config) : config_manipulation.update_print_sla_config(&main_config) ; diff --git a/src/slic3r/GUI/GUI_ObjectSettings.hpp b/src/slic3r/GUI/GUI_ObjectSettings.hpp index ff187eddcf..91cfe1dda4 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.hpp @@ -10,6 +10,7 @@ class wxBoxSizer; namespace Slic3r { class DynamicPrintConfig; +class ModelConfig; namespace GUI { class ConfigOptionsGroup; @@ -52,8 +53,8 @@ public: * Example: if Infill is set to 100%, and Fill Pattern is missed in config_to, * we should add fill_pattern to avoid endless loop in update */ - bool add_missed_options(DynamicPrintConfig *config_to, const DynamicPrintConfig &config_from); - void update_config_values(DynamicPrintConfig*config); + bool add_missed_options(ModelConfig *config_to, const DynamicPrintConfig &config_from); + void update_config_values(ModelConfig *config); void UpdateAndShow(const bool show) override; void msw_rescale(); }; diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index b4606ab7f0..134da4848b 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -1,5 +1,7 @@ #include "libslic3r/libslic3r.h" +#if !ENABLE_GCODE_VIEWER #include "libslic3r/GCode/PreviewData.hpp" +#endif // !ENABLE_GCODE_VIEWER #include "GUI_Preview.hpp" #include "GUI_App.hpp" #include "GUI.hpp" @@ -8,9 +10,12 @@ #include "BackgroundSlicingProcess.hpp" #include "OpenGLManager.hpp" #include "GLCanvas3D.hpp" -#include "PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include "DoubleSlider.hpp" #include "Plater.hpp" +#if ENABLE_GCODE_VIEWER +#include "MainFrame.hpp" +#endif // ENABLE_GCODE_VIEWER #include #include @@ -54,7 +59,6 @@ bool View3D::init(wxWindow* parent, Model* model, DynamicPrintConfig* config, Ba m_canvas = new GLCanvas3D(m_canvas_widget); m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); - m_canvas->bind_event_handlers(); m_canvas->allow_multisample(OpenGLManager::can_multisample()); // XXX: If have OpenGL @@ -69,9 +73,7 @@ bool View3D::init(wxWindow* parent, Model* model, DynamicPrintConfig* config, Ba m_canvas->enable_main_toolbar(true); m_canvas->enable_undoredo_toolbar(true); m_canvas->enable_labels(true); -#if ENABLE_SLOPE_RENDERING m_canvas->enable_slope(true); -#endif // ENABLE_SLOPE_RENDERING wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); @@ -169,36 +171,60 @@ void View3D::render() m_canvas->set_as_dirty(); } +#if ENABLE_GCODE_VIEWER +Preview::Preview( + wxWindow* parent, Model* model, DynamicPrintConfig* config, + BackgroundSlicingProcess* process, GCodeProcessor::Result* gcode_result, std::function schedule_background_process_func) +#else Preview::Preview( wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function schedule_background_process_func) +#endif // ENABLE_GCODE_VIEWER : m_canvas_widget(nullptr) , m_canvas(nullptr) +#if ENABLE_GCODE_VIEWER + , m_left_sizer(nullptr) + , m_layers_slider_sizer(nullptr) + , m_bottom_toolbar_panel(nullptr) +#else , m_double_slider_sizer(nullptr) +#endif // ENABLE_GCODE_VIEWER , m_label_view_type(nullptr) , m_choice_view_type(nullptr) - , m_label_show_features(nullptr) + , m_label_show(nullptr) , m_combochecklist_features(nullptr) +#if ENABLE_GCODE_VIEWER + , m_combochecklist_features_pos(0) + , m_combochecklist_options(nullptr) +#else , m_checkbox_travel(nullptr) , m_checkbox_retractions(nullptr) , m_checkbox_unretractions(nullptr) , m_checkbox_shells(nullptr) , m_checkbox_legend(nullptr) +#endif // ENABLE_GCODE_VIEWER , m_config(config) , m_process(process) +#if ENABLE_GCODE_VIEWER + , m_gcode_result(gcode_result) +#else , m_gcode_preview_data(gcode_preview_data) +#endif // ENABLE_GCODE_VIEWER , m_number_extruders(1) , m_preferred_color_mode("feature") , m_loaded(false) +#if !ENABLE_GCODE_VIEWER , m_enabled(false) +#endif // !ENABLE_GCODE_VIEWER , m_schedule_background_process(schedule_background_process_func) #ifdef __linux__ , m_volumes_cleanup_required(false) #endif // __linux__ { - if (init(parent, model)) - { + if (init(parent, model)) { +#if !ENABLE_GCODE_VIEWER show_hide_ui_elements("none"); +#endif // !ENABLE_GCODE_VIEWER load_print(); } } @@ -208,13 +234,21 @@ bool Preview::init(wxWindow* parent, Model* model) if (!Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 /* disable wxTAB_TRAVERSAL */)) return false; +#if ENABLE_GCODE_VIEWER + // to match the background of the sliders +#ifdef _WIN32 + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#else + SetBackgroundColour(GetParent()->GetBackgroundColour()); +#endif // _WIN32 +#endif // ENABLE_GCODE_VIEWER + m_canvas_widget = OpenGLManager::create_wxglcanvas(*this); if (m_canvas_widget == nullptr) return false; m_canvas = new GLCanvas3D(m_canvas_widget); m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); - m_canvas->bind_event_handlers(); m_canvas->allow_multisample(OpenGLManager::can_multisample()); m_canvas->set_config(m_config); m_canvas->set_model(model); @@ -222,52 +256,121 @@ bool Preview::init(wxWindow* parent, Model* model) m_canvas->enable_legend_texture(true); m_canvas->enable_dynamic_background(true); +#if ENABLE_GCODE_VIEWER + m_layers_slider_sizer = create_layers_slider_sizer(); + + m_bottom_toolbar_panel = new wxPanel(this); + m_label_view_type = new wxStaticText(m_bottom_toolbar_panel, wxID_ANY, _L("View")); + m_choice_view_type = new wxChoice(m_bottom_toolbar_panel, wxID_ANY); +#else m_double_slider_sizer = new wxBoxSizer(wxHORIZONTAL); create_double_slider(); - m_label_view_type = new wxStaticText(this, wxID_ANY, _(L("View"))); + m_label_view_type = new wxStaticText(this, wxID_ANY, _L("View")); m_choice_view_type = new wxChoice(this, wxID_ANY); - m_choice_view_type->Append(_(L("Feature type"))); - m_choice_view_type->Append(_(L("Height"))); - m_choice_view_type->Append(_(L("Width"))); - m_choice_view_type->Append(_(L("Speed"))); - m_choice_view_type->Append(_(L("Fan speed"))); - m_choice_view_type->Append(_(L("Volumetric flow rate"))); - m_choice_view_type->Append(_(L("Tool"))); - m_choice_view_type->Append(_(L("Color Print"))); +#endif // ENABLE_GCODE_VIEWER + m_choice_view_type->Append(_L("Feature type")); + m_choice_view_type->Append(_L("Height")); + m_choice_view_type->Append(_L("Width")); + m_choice_view_type->Append(_L("Speed")); + m_choice_view_type->Append(_L("Fan speed")); + m_choice_view_type->Append(_L("Volumetric flow rate")); + m_choice_view_type->Append(_L("Tool")); + m_choice_view_type->Append(_L("Color Print")); m_choice_view_type->SetSelection(0); - m_label_show_features = new wxStaticText(this, wxID_ANY, _(L("Show"))); +#if ENABLE_GCODE_VIEWER + m_label_show = new wxStaticText(m_bottom_toolbar_panel, wxID_ANY, _L("Show")); +#else + m_label_show = new wxStaticText(this, wxID_ANY, _L("Show")); +#endif // ENABLE_GCODE_VIEWER m_combochecklist_features = new wxComboCtrl(); - m_combochecklist_features->Create(this, wxID_ANY, _(L("Feature types")), wxDefaultPosition, wxSize(15 * wxGetApp().em_unit(), -1), wxCB_READONLY); - std::string feature_text = GUI::into_u8(_(L("Feature types"))); +#if ENABLE_GCODE_VIEWER + m_combochecklist_features->Create(m_bottom_toolbar_panel, wxID_ANY, _L("Feature types"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY); +#else + m_combochecklist_features->Create(this, wxID_ANY, _L("Feature types"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY); +#endif // ENABLE_GCODE_VIEWER std::string feature_items = GUI::into_u8( - _(L("Perimeter")) + "|" + - _(L("External perimeter")) + "|" + - _(L("Overhang perimeter")) + "|" + - _(L("Internal infill")) + "|" + - _(L("Solid infill")) + "|" + - _(L("Top solid infill")) + "|" + - _(L("Ironing")) + "|" + - _(L("Bridge infill")) + "|" + - _(L("Gap fill")) + "|" + - _(L("Skirt")) + "|" + - _(L("Support material")) + "|" + - _(L("Support material interface")) + "|" + - _(L("Wipe tower")) + "|" + - _(L("Custom")) +#if ENABLE_GCODE_VIEWER + _L("Unknown") + "|1|" + +#endif // ENABLE_GCODE_VIEWER + _L("Perimeter") + "|1|" + + _L("External perimeter") + "|1|" + + _L("Overhang perimeter") + "|1|" + + _L("Internal infill") + "|1|" + + _L("Solid infill") + "|1|" + + _L("Top solid infill") + "|1|" + + _L("Ironing") + "|1|" + + _L("Bridge infill") + "|1|" + + _L("Gap fill") + "|1|" + + _L("Skirt") + "|1|" + + _L("Support material") + "|1|" + + _L("Support material interface") + "|1|" + + _L("Wipe tower") + "|1|" + + _L("Custom") + "|1" ); - Slic3r::GUI::create_combochecklist(m_combochecklist_features, feature_text, feature_items, true); + Slic3r::GUI::create_combochecklist(m_combochecklist_features, GUI::into_u8(_L("Feature types")), feature_items); +#if ENABLE_GCODE_VIEWER + m_combochecklist_options = new wxComboCtrl(); + m_combochecklist_options->Create(m_bottom_toolbar_panel, wxID_ANY, _L("Options"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY); + std::string options_items = GUI::into_u8( + get_option_type_string(OptionType::Travel) + "|0|" + + get_option_type_string(OptionType::Retractions) + "|0|" + + get_option_type_string(OptionType::Unretractions) + "|0|" + + get_option_type_string(OptionType::ToolChanges) + "|0|" + + get_option_type_string(OptionType::ColorChanges) + "|0|" + + get_option_type_string(OptionType::PausePrints) + "|0|" + + get_option_type_string(OptionType::CustomGCodes) + "|0|" + + get_option_type_string(OptionType::Shells) + "|0|" + + get_option_type_string(OptionType::ToolMarker) + "|0|" + + get_option_type_string(OptionType::Legend) + "|1" +); + Slic3r::GUI::create_combochecklist(m_combochecklist_options, GUI::into_u8(_L("Options")), options_items); +#else m_checkbox_travel = new wxCheckBox(this, wxID_ANY, _(L("Travel"))); m_checkbox_retractions = new wxCheckBox(this, wxID_ANY, _(L("Retractions"))); - m_checkbox_unretractions = new wxCheckBox(this, wxID_ANY, _(L("Unretractions"))); + m_checkbox_unretractions = new wxCheckBox(this, wxID_ANY, _(L("Deretractions"))); m_checkbox_shells = new wxCheckBox(this, wxID_ANY, _(L("Shells"))); m_checkbox_legend = new wxCheckBox(this, wxID_ANY, _(L("Legend"))); m_checkbox_legend->SetValue(true); +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER + m_left_sizer = new wxBoxSizer(wxVERTICAL); + m_left_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); + + wxBoxSizer* right_sizer = new wxBoxSizer(wxVERTICAL); + right_sizer->Add(m_layers_slider_sizer, 1, wxEXPAND, 0); + + m_moves_slider = new DoubleSlider::Control(m_bottom_toolbar_panel, wxID_ANY, 0, 0, 0, 100, wxDefaultPosition, wxSize(-1, 3 * GetTextExtent("m").y), wxSL_HORIZONTAL); + m_moves_slider->set_lower_editable(get_app_config()->get("seq_top_layer_only") == "0"); + m_moves_slider->SetDrawMode(DoubleSlider::dmSequentialGCodeView); + + wxBoxSizer* bottom_toolbar_sizer = new wxBoxSizer(wxHORIZONTAL); + bottom_toolbar_sizer->AddSpacer(5); + bottom_toolbar_sizer->Add(m_label_view_type, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + bottom_toolbar_sizer->Add(m_choice_view_type, 0, wxALIGN_CENTER_VERTICAL, 0); + bottom_toolbar_sizer->AddSpacer(5); + bottom_toolbar_sizer->Add(m_label_show, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5); + bottom_toolbar_sizer->Add(m_combochecklist_options, 0, wxALIGN_CENTER_VERTICAL, 0); + // change the following number if editing the layout of the bottom toolbar sizer. It is used into update_bottom_toolbar() + m_combochecklist_features_pos = 6; + bottom_toolbar_sizer->Add(m_combochecklist_features, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 5); + bottom_toolbar_sizer->Hide(m_combochecklist_features); + bottom_toolbar_sizer->AddSpacer(5); + bottom_toolbar_sizer->Add(m_moves_slider, 1, wxALL | wxEXPAND, 0); + m_bottom_toolbar_panel->SetSizer(bottom_toolbar_sizer); + + m_left_sizer->Add(m_bottom_toolbar_panel, 0, wxALL | wxEXPAND, 0); + m_left_sizer->Hide(m_bottom_toolbar_panel); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxHORIZONTAL); + main_sizer->Add(m_left_sizer, 1, wxALL | wxEXPAND, 0); + main_sizer->Add(right_sizer, 0, wxALL | wxEXPAND, 0); +#else wxBoxSizer* top_sizer = new wxBoxSizer(wxHORIZONTAL); top_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); top_sizer->Add(m_double_slider_sizer, 0, wxEXPAND, 0); @@ -276,7 +379,7 @@ bool Preview::init(wxWindow* parent, Model* model) bottom_sizer->Add(m_label_view_type, 0, wxALIGN_CENTER_VERTICAL, 5); bottom_sizer->Add(m_choice_view_type, 0, wxEXPAND | wxALL, 5); bottom_sizer->AddSpacer(10); - bottom_sizer->Add(m_label_show_features, 0, wxALIGN_CENTER_VERTICAL, 5); + bottom_sizer->Add(m_label_show, 0, wxALIGN_CENTER_VERTICAL, 5); bottom_sizer->Add(m_combochecklist_features, 0, wxEXPAND | wxALL, 5); bottom_sizer->AddSpacer(20); bottom_sizer->Add(m_checkbox_travel, 0, wxEXPAND | wxALL, 5); @@ -292,6 +395,7 @@ bool Preview::init(wxWindow* parent, Model* model) wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(top_sizer, 1, wxALL | wxEXPAND, 0); main_sizer->Add(bottom_sizer, 0, wxALL | wxEXPAND, 0); +#endif // ENABLE_GCODE_VIEWER SetSizer(main_sizer); SetMinSize(GetSize()); @@ -299,6 +403,7 @@ bool Preview::init(wxWindow* parent, Model* model) bind_event_handlers(); +#if !ENABLE_GCODE_VIEWER // sets colors for gcode preview extrusion roles std::vector extrusion_roles_colors = { "Perimeter", "FFFF66", @@ -316,6 +421,7 @@ bool Preview::init(wxWindow* parent, Model* model) "Custom", "28CC94" }; m_gcode_preview_data->set_extrusion_paths_colors(extrusion_roles_colors); +#endif // !ENABLE_GCODE_VIEWER return true; } @@ -345,17 +451,24 @@ void Preview::set_number_extruders(unsigned int number_extruders) int tool_idx = m_choice_view_type->FindString(_(L("Tool"))); int type = (number_extruders > 1) ? tool_idx /* color by a tool number */ : 0; // color by a feature type m_choice_view_type->SetSelection(type); +#if ENABLE_GCODE_VIEWER + if ((0 <= type) && (type < static_cast(GCodeViewer::EViewType::Count))) + m_canvas->set_gcode_view_preview_type(static_cast(type)); +#else if ((0 <= type) && (type < (int)GCodePreviewData::Extrusion::Num_View_Types)) m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type; +#endif // ENABLE_GCODE_VIEWER m_preferred_color_mode = (type == tool_idx) ? "tool_or_feature" : "feature"; } } +#if !ENABLE_GCODE_VIEWER void Preview::set_enabled(bool enabled) { m_enabled = enabled; } +#endif // !ENABLE_GCODE_VIEWER void Preview::bed_shape_changed() { @@ -382,6 +495,9 @@ void Preview::load_print(bool keep_z_range) else if (tech == ptSLA) load_print_as_sla(); +#if ENABLE_GCODE_VIEWER + update_bottom_toolbar(); +#endif // ENABLE_GCODE_VIEWER Layout(); } @@ -403,7 +519,9 @@ void Preview::reload_print(bool keep_volumes) !keep_volumes) { m_canvas->reset_volumes(); +#if !ENABLE_GCODE_VIEWER m_canvas->reset_legend_texture(); +#endif // !ENABLE_GCODE_VIEWER m_loaded = false; #ifdef __linux__ m_volumes_cleanup_required = false; @@ -421,12 +539,20 @@ void Preview::refresh_print() return; load_print(true); +#if ENABLE_GCODE_VIEWER + m_moves_slider->set_lower_editable(get_app_config()->get("seq_top_layer_only") == "0"); +#endif // ENABLE_GCODE_VIEWER } void Preview::msw_rescale() { // rescale slider +#if ENABLE_GCODE_VIEWER + if (m_layers_slider != nullptr) m_layers_slider->msw_rescale(); + if (m_moves_slider != nullptr) m_moves_slider->msw_rescale(); +#else if (m_slider) m_slider->msw_rescale(); +#endif // ENABLE_GCODE_VIEWER // rescale warning legend on the canvas get_canvas3d()->msw_rescale(); @@ -435,28 +561,47 @@ void Preview::msw_rescale() refresh_print(); } +#if ENABLE_GCODE_VIEWER +void Preview::move_layers_slider(wxKeyEvent& evt) +{ + if (m_layers_slider != nullptr) m_layers_slider->OnKeyDown(evt); +} +#else void Preview::move_double_slider(wxKeyEvent& evt) { - if (m_slider) + if (m_slider) m_slider->OnKeyDown(evt); } +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER +void Preview::edit_layers_slider(wxKeyEvent& evt) +{ + if (m_layers_slider != nullptr) m_layers_slider->OnChar(evt); +} +#else void Preview::edit_double_slider(wxKeyEvent& evt) { - if (m_slider) + if (m_slider) m_slider->OnChar(evt); } +#endif // ENABLE_GCODE_VIEWER void Preview::bind_event_handlers() { this->Bind(wxEVT_SIZE, &Preview::on_size, this); m_choice_view_type->Bind(wxEVT_CHOICE, &Preview::on_choice_view_type, this); m_combochecklist_features->Bind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_features, this); +#if ENABLE_GCODE_VIEWER + m_combochecklist_options->Bind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_options, this); + m_moves_slider->Bind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this); +#else m_checkbox_travel->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_travel, this); m_checkbox_retractions->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_retractions, this); m_checkbox_unretractions->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_unretractions, this); m_checkbox_shells->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_shells, this); m_checkbox_legend->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_legend, this); +#endif // ENABLE_GCODE_VIEWER } void Preview::unbind_event_handlers() @@ -464,19 +609,25 @@ void Preview::unbind_event_handlers() this->Unbind(wxEVT_SIZE, &Preview::on_size, this); m_choice_view_type->Unbind(wxEVT_CHOICE, &Preview::on_choice_view_type, this); m_combochecklist_features->Unbind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_features, this); +#if ENABLE_GCODE_VIEWER + m_combochecklist_options->Unbind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_options, this); + m_moves_slider->Unbind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this); +#else m_checkbox_travel->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_travel, this); m_checkbox_retractions->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_retractions, this); m_checkbox_unretractions->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_unretractions, this); m_checkbox_shells->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_shells, this); m_checkbox_legend->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_legend, this); +#endif // ENABLE_GCODE_VIEWER } +#if !ENABLE_GCODE_VIEWER void Preview::show_hide_ui_elements(const std::string& what) { bool enable = (what == "full"); - m_label_show_features->Enable(enable); + m_label_show->Enable(enable); m_combochecklist_features->Enable(enable); - m_checkbox_travel->Enable(enable); + m_checkbox_travel->Enable(enable); m_checkbox_retractions->Enable(enable); m_checkbox_unretractions->Enable(enable); m_checkbox_shells->Enable(enable); @@ -487,7 +638,7 @@ void Preview::show_hide_ui_elements(const std::string& what) m_choice_view_type->Enable(enable); bool visible = (what != "none"); - m_label_show_features->Show(visible); + m_label_show->Show(visible); m_combochecklist_features->Show(visible); m_checkbox_travel->Show(visible); m_checkbox_retractions->Show(visible); @@ -497,26 +648,37 @@ void Preview::show_hide_ui_elements(const std::string& what) m_label_view_type->Show(visible); m_choice_view_type->Show(visible); } +#endif // !ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER +void Preview::hide_layers_slider() +{ + m_layers_slider_sizer->Hide((size_t)0); + Layout(); +} +#else void Preview::reset_sliders(bool reset_all) { m_enabled = false; -// reset_double_slider(); + // reset_double_slider(); if (reset_all) m_double_slider_sizer->Hide((size_t)0); else m_double_slider_sizer->GetItem(size_t(0))->GetSizer()->Hide(1); } +#endif // ENABLE_GCODE_VIEWER +#if !ENABLE_GCODE_VIEWER void Preview::update_sliders(const std::vector& layers_z, bool keep_z_range) { m_enabled = true; - update_double_slider(layers_z, keep_z_range); + m_double_slider_sizer->Show((size_t)0); Layout(); } +#endif // !ENABLE_GCODE_VIEWER void Preview::on_size(wxSizeEvent& evt) { @@ -528,19 +690,56 @@ void Preview::on_choice_view_type(wxCommandEvent& evt) { m_preferred_color_mode = (m_choice_view_type->GetStringSelection() == L("Tool")) ? "tool" : "feature"; int selection = m_choice_view_type->GetCurrentSelection(); +#if ENABLE_GCODE_VIEWER + if (0 <= selection && selection < static_cast(GCodeViewer::EViewType::Count)) + m_canvas->set_toolpath_view_type(static_cast(selection)); + + refresh_print(); +#else if ((0 <= selection) && (selection < (int)GCodePreviewData::Extrusion::Num_View_Types)) m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)selection; reload_print(); +#endif // ENABLE_GCODE_VIEWER } void Preview::on_combochecklist_features(wxCommandEvent& evt) { - int flags = Slic3r::GUI::combochecklist_get_flags(m_combochecklist_features); - m_gcode_preview_data->extrusion.role_flags = (unsigned int)flags; + unsigned int flags = Slic3r::GUI::combochecklist_get_flags(m_combochecklist_features); +#if ENABLE_GCODE_VIEWER + m_canvas->set_toolpath_role_visibility_flags(flags); +#else + m_gcode_preview_data->extrusion.role_flags = flags; +#endif // ENABLE_GCODE_VIEWER refresh_print(); } +#if ENABLE_GCODE_VIEWER +void Preview::on_combochecklist_options(wxCommandEvent& evt) +{ + auto xored = [](unsigned int flags1, unsigned int flags2, unsigned int flag) { + auto is_flag_set = [](unsigned int flags, unsigned int flag) { + return (flags & (1 << flag)) != 0; + }; + return !is_flag_set(flags1, flag) != !is_flag_set(flags2, flag); + }; + + unsigned int curr_flags = m_canvas->get_gcode_options_visibility_flags(); + unsigned int new_flags = Slic3r::GUI::combochecklist_get_flags(m_combochecklist_options); + if (curr_flags == new_flags) + return; + + m_canvas->set_gcode_options_visibility_from_flags(new_flags); + + bool skip_refresh = xored(curr_flags, new_flags, static_cast(OptionType::Shells)) || + xored(curr_flags, new_flags, static_cast(OptionType::ToolMarker)); + + if (!skip_refresh) + refresh_print(); + else + m_canvas->set_as_dirty(); +} +#else void Preview::on_checkbox_travel(wxCommandEvent& evt) { m_gcode_preview_data->travel.is_visible = m_checkbox_travel->IsChecked(); @@ -572,8 +771,9 @@ void Preview::on_checkbox_legend(wxCommandEvent& evt) m_canvas->enable_legend_texture(m_checkbox_legend->IsChecked()); m_canvas_widget->Refresh(); } +#endif // ENABLE_GCODE_VIEWER -void Preview::update_view_type(bool slice_completed) +void Preview::update_view_type(bool keep_volumes) { const DynamicPrintConfig& config = wxGetApp().preset_bundle->project_config; @@ -587,34 +787,113 @@ void Preview::update_view_type(bool slice_completed) int type = m_choice_view_type->FindString(choice); if (m_choice_view_type->GetSelection() != type) { m_choice_view_type->SetSelection(type); +#if ENABLE_GCODE_VIEWER + if ((0 <= type) && (type < static_cast(GCodeViewer::EViewType::Count))) + m_canvas->set_gcode_view_preview_type(static_cast(type)); +#else if (0 <= type && type < (int)GCodePreviewData::Extrusion::Num_View_Types) m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type; +#endif // ENABLE_GCODE_VIEWER m_preferred_color_mode = "feature"; } +#if ENABLE_GCODE_VIEWER + reload_print(keep_volumes); +#else reload_print(); +#endif // ENABLE_GCODE_VIEWER } +#if ENABLE_GCODE_VIEWER +void Preview::update_bottom_toolbar() +{ + combochecklist_set_flags(m_combochecklist_features, m_canvas->get_toolpath_role_visibility_flags()); + combochecklist_set_flags(m_combochecklist_options, m_canvas->get_gcode_options_visibility_flags()); + + // updates visibility of features combobox + if (m_bottom_toolbar_panel->IsShown()) + { + wxSizer* sizer = m_bottom_toolbar_panel->GetSizer(); + bool show = !m_canvas->is_gcode_legend_enabled() || m_canvas->get_gcode_view_type() != GCodeViewer::EViewType::FeatureType; + + if (show) + { + if (sizer->GetItem(m_combochecklist_features) == nullptr) + { + sizer->Insert(m_combochecklist_features_pos, m_combochecklist_features, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 5); + sizer->Show(m_combochecklist_features); + sizer->Layout(); + Refresh(); + } + } + else + { + if (sizer->GetItem(m_combochecklist_features) != nullptr) + { + sizer->Hide(m_combochecklist_features); + sizer->Detach(m_combochecklist_features); + sizer->Layout(); + Refresh(); + } + } + } +} +#endif // ENABLE_GCODE_VIEWER + +#if ENABLE_GCODE_VIEWER +wxBoxSizer* Preview::create_layers_slider_sizer() +{ + wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); + m_layers_slider = new DoubleSlider::Control(this, wxID_ANY, 0, 0, 0, 100); + + m_layers_slider->SetDrawMode(wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA, + wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects")); + m_layers_slider->enable_action_icon(wxGetApp().is_editor()); + + sizer->Add(m_layers_slider, 0, wxEXPAND, 0); + + // sizer, m_canvas_widget + m_canvas_widget->Bind(wxEVT_KEY_DOWN, &Preview::update_layers_slider_from_canvas, this); + m_canvas_widget->Bind(wxEVT_KEY_UP, [this](wxKeyEvent& event) { + if (event.GetKeyCode() == WXK_SHIFT) + m_layers_slider->UseDefaultColors(true); + event.Skip(); + }); + + m_layers_slider->Bind(wxEVT_SCROLL_CHANGED, &Preview::on_layers_slider_scroll_changed, this); + + Bind(DoubleSlider::wxCUSTOMEVT_TICKSCHANGED, [this](wxEvent&) { + Model& model = wxGetApp().plater()->model(); + model.custom_gcode_per_print_z = m_layers_slider->GetTicksValues(); + m_schedule_background_process(); + + update_view_type(false); + }); + + return sizer; +} +#else void Preview::create_double_slider() { m_slider = new DoubleSlider::Control(this, wxID_ANY, 0, 0, 0, 100); + bool sla_print_technology = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA; bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects"); m_slider->SetDrawMode(sla_print_technology, sequential_print); m_double_slider_sizer->Add(m_slider, 0, wxEXPAND, 0); + // sizer, m_canvas_widget m_canvas_widget->Bind(wxEVT_KEY_DOWN, &Preview::update_double_slider_from_canvas, this); m_canvas_widget->Bind(wxEVT_KEY_UP, [this](wxKeyEvent& event) { if (event.GetKeyCode() == WXK_SHIFT) m_slider->UseDefaultColors(true); event.Skip(); - }); + }); m_slider->Bind(wxEVT_SCROLL_CHANGED, &Preview::on_sliders_scroll_changed, this); - Bind(DoubleSlider::wxCUSTOMEVT_TICKSCHANGED, [this](wxEvent&) { Model& model = wxGetApp().plater()->model(); model.custom_gcode_per_print_z = m_slider->GetTicksValues(); @@ -623,6 +902,7 @@ void Preview::create_double_slider() update_view_type(false); }); } +#endif // ENABLE_GCODE_VIEWER // Find an index of a value in a sorted vector, which is in . // Returns -1 if there is no such member. @@ -651,8 +931,12 @@ static int find_close_layer_idx(const std::vector& zs, double &z, double return -1; } +#if ENABLE_GCODE_VIEWER +void Preview::check_layers_slider_values(std::vector& ticks_from_model, const std::vector& layers_z) +#else void Preview::check_slider_values(std::vector& ticks_from_model, const std::vector& layers_z) +#endif // ENABLE_GCODE_VIEWER { // All ticks that would end up outside the slider range should be erased. // TODO: this should be placed into more appropriate part of code, @@ -669,12 +953,66 @@ void Preview::check_slider_values(std::vector& ticks_from_mod m_schedule_background_process(); } -void Preview::update_double_slider(const std::vector& layers_z, bool keep_z_range) +#if ENABLE_GCODE_VIEWER +void Preview::update_layers_slider(const std::vector& layers_z, bool keep_z_range) +{ + // Save the initial slider span. + double z_low = m_layers_slider->GetLowerValueD(); + double z_high = m_layers_slider->GetHigherValueD(); + bool was_empty = m_layers_slider->GetMaxValue() == 0; + + bool force_sliders_full_range = was_empty; + if (!keep_z_range) + { + bool span_changed = layers_z.empty() || std::abs(layers_z.back() - m_layers_slider->GetMaxValueD()) > DoubleSlider::epsilon()/*1e-6*/; + force_sliders_full_range |= span_changed; + } + bool snap_to_min = force_sliders_full_range || m_layers_slider->is_lower_at_min(); + bool snap_to_max = force_sliders_full_range || m_layers_slider->is_higher_at_max(); + + // Detect and set manipulation mode for double slider + update_layers_slider_mode(); + + CustomGCode::Info& ticks_info_from_model = wxGetApp().plater()->model().custom_gcode_per_print_z; + check_layers_slider_values(ticks_info_from_model.gcodes, layers_z); + + m_layers_slider->SetSliderValues(layers_z); + assert(m_layers_slider->GetMinValue() == 0); + m_layers_slider->SetMaxValue(layers_z.empty() ? 0 : layers_z.size() - 1); + + int idx_low = 0; + int idx_high = m_layers_slider->GetMaxValue(); + if (!layers_z.empty()) { + if (!snap_to_min) { + int idx_new = find_close_layer_idx(layers_z, z_low, DoubleSlider::epsilon()/*1e-6*/); + if (idx_new != -1) + idx_low = idx_new; + } + if (!snap_to_max) { + int idx_new = find_close_layer_idx(layers_z, z_high, DoubleSlider::epsilon()/*1e-6*/); + if (idx_new != -1) + idx_high = idx_new; + } + } + m_layers_slider->SetSelectionSpan(idx_low, idx_high); + m_layers_slider->SetTicksValues(ticks_info_from_model); + + bool sla_print_technology = wxGetApp().plater()->printer_technology() == ptSLA; + bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects"); + m_layers_slider->SetDrawMode(sla_print_technology, sequential_print); + m_layers_slider->SetExtruderColors(wxGetApp().plater()->get_extruder_colors_from_plater_config()); + + m_layers_slider_sizer->Show((size_t)0); + Layout(); +} +#else +void Preview::update_double_slider(const std::vector & layers_z, bool keep_z_range) { // Save the initial slider span. double z_low = m_slider->GetLowerValueD(); double z_high = m_slider->GetHigherValueD(); bool was_empty = m_slider->GetMaxValue() == 0; + bool force_sliders_full_range = was_empty; if (!keep_z_range) { @@ -682,27 +1020,27 @@ void Preview::update_double_slider(const std::vector& layers_z, bool kee force_sliders_full_range |= span_changed; } bool snap_to_min = force_sliders_full_range || m_slider->is_lower_at_min(); - bool snap_to_max = force_sliders_full_range || m_slider->is_higher_at_max(); + bool snap_to_max = force_sliders_full_range || m_slider->is_higher_at_max(); // Detect and set manipulation mode for double slider update_double_slider_mode(); - CustomGCode::Info &ticks_info_from_model = wxGetApp().plater()->model().custom_gcode_per_print_z; + CustomGCode::Info& ticks_info_from_model = wxGetApp().plater()->model().custom_gcode_per_print_z; check_slider_values(ticks_info_from_model.gcodes, layers_z); m_slider->SetSliderValues(layers_z); assert(m_slider->GetMinValue() == 0); m_slider->SetMaxValue(layers_z.empty() ? 0 : layers_z.size() - 1); - int idx_low = 0; + int idx_low = 0; int idx_high = m_slider->GetMaxValue(); - if (! layers_z.empty()) { - if (! snap_to_min) { + if (!layers_z.empty()) { + if (!snap_to_min) { int idx_new = find_close_layer_idx(layers_z, z_low, DoubleSlider::epsilon()/*1e-6*/); if (idx_new != -1) idx_low = idx_new; } - if (! snap_to_max) { + if (!snap_to_max) { int idx_new = find_close_layer_idx(layers_z, z_high, DoubleSlider::epsilon()/*1e-6*/); if (idx_new != -1) idx_high = idx_new; @@ -718,8 +1056,13 @@ void Preview::update_double_slider(const std::vector& layers_z, bool kee m_slider->SetExtruderColors(wxGetApp().plater()->get_extruder_colors_from_plater_config()); } +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER +void Preview::update_layers_slider_mode() +#else void Preview::update_double_slider_mode() +#endif // ENABLE_GCODE_VIEWER { // true -> single-extruder printer profile OR // multi-extruder printer profile , but whole model is printed by only one extruder @@ -768,16 +1111,78 @@ void Preview::update_double_slider_mode() } } +#if ENABLE_GCODE_VIEWER + m_layers_slider->SetModeAndOnlyExtruder(one_extruder_printed_model, only_extruder); +#else m_slider->SetModeAndOnlyExtruder(one_extruder_printed_model, only_extruder); +#endif // ENABLE_GCODE_VIEWER } +#if ENABLE_GCODE_VIEWER +void Preview::reset_layers_slider() +{ + m_layers_slider->SetHigherValue(0); + m_layers_slider->SetLowerValue(0); +} +#else void Preview::reset_double_slider() { m_slider->SetHigherValue(0); m_slider->SetLowerValue(0); } +#endif // ENABLE_GCODE_VIEWER -void Preview::update_double_slider_from_canvas(wxKeyEvent& event) +#if ENABLE_GCODE_VIEWER +void Preview::update_layers_slider_from_canvas(wxKeyEvent& event) +{ + if (event.HasModifiers()) { + event.Skip(); + return; + } + + const auto key = event.GetKeyCode(); + + if (key == 'U' || key == 'D') { + const int new_pos = key == 'U' ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1; + m_layers_slider->SetHigherValue(new_pos); + if (event.ShiftDown() || m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); + } + else if (key == 'S') + m_layers_slider->ChangeOneLayerLock(); + else if (key == WXK_SHIFT) + m_layers_slider->UseDefaultColors(false); + else + event.Skip(); +} + +void Preview::update_moves_slider() +{ + const GCodeViewer::SequentialView& view = m_canvas->get_gcode_sequential_view(); + // this should not be needed, but it is here to try to prevent rambling crashes on Mac Asan + if (view.endpoints.last < view.endpoints.first) + return; + + std::vector values(view.endpoints.last - view.endpoints.first + 1); + unsigned int count = 0; + for (unsigned int i = view.endpoints.first; i <= view.endpoints.last; ++i) { + values[count++] = static_cast(i + 1); + } + + m_moves_slider->SetSliderValues(values); + m_moves_slider->SetMaxValue(view.endpoints.last - view.endpoints.first); + m_moves_slider->SetSelectionSpan(view.current.first - view.endpoints.first, view.current.last - view.endpoints.first); +} + +void Preview::enable_moves_slider(bool enable) +{ + bool render_as_disabled = !enable; + if (m_moves_slider != nullptr && m_moves_slider->is_rendering_as_disabled() != render_as_disabled) { + m_moves_slider->set_render_as_disabled(render_as_disabled); + m_moves_slider->Refresh(); + } +} +#else +void Preview::update_double_slider_from_canvas(wxKeyEvent & event) { if (event.HasModifiers()) { event.Skip(); @@ -803,9 +1208,16 @@ void Preview::update_double_slider_from_canvas(wxKeyEvent& event) else event.Skip(); } +#endif // ENABLE_GCODE_VIEWER void Preview::load_print_as_fff(bool keep_z_range) { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().mainframe == nullptr || wxGetApp().is_recreating_gui()) + // avoid processing while mainframe is being constructed + return; +#endif // ENABLE_GCODE_VIEWER + if (m_loaded || m_process->current_printer_technology() != ptFFF) return; @@ -829,67 +1241,122 @@ void Preview::load_print_as_fff(bool keep_z_range) } } - if (! has_layers) - { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor() && !has_layers) { + hide_layers_slider(); + m_left_sizer->Hide(m_bottom_toolbar_panel); + m_left_sizer->Layout(); + Refresh(); +#else + if (! has_layers) { reset_sliders(true); m_canvas->reset_legend_texture(); +#endif // ENABLE_GCODE_VIEWER m_canvas_widget->Refresh(); return; } - if (m_preferred_color_mode == "tool_or_feature") - { + if (m_preferred_color_mode == "tool_or_feature") { // It is left to Slic3r to decide whether the print shall be colored by the tool or by the feature. // Color by feature if it is a single extruder print. unsigned int number_extruders = (unsigned int)print->extruders().size(); int tool_idx = m_choice_view_type->FindString(_(L("Tool"))); int type = (number_extruders > 1) ? tool_idx /* color by a tool number */ : 0; // color by a feature type m_choice_view_type->SetSelection(type); +#if ENABLE_GCODE_VIEWER + if (0 <= type && type < static_cast(GCodeViewer::EViewType::Count)) + m_canvas->set_gcode_view_preview_type(static_cast(type)); +#else if ((0 <= type) && (type < (int)GCodePreviewData::Extrusion::Num_View_Types)) m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type; +#endif // ENABLE_GCODE_VIEWER // If the->SetSelection changed the following line, revert it to "decide yourself". m_preferred_color_mode = "tool_or_feature"; } +#if ENABLE_GCODE_VIEWER + GCodeViewer::EViewType gcode_view_type = m_canvas->get_gcode_view_preview_type(); + bool gcode_preview_data_valid = !m_gcode_result->moves.empty(); +#else bool gcode_preview_data_valid = print->is_step_done(psGCodeExport) && ! m_gcode_preview_data->empty(); +#endif // ENABLE_GCODE_VIEWER // Collect colors per extruder. std::vector colors; std::vector color_print_values = {}; // set color print values, if it si selected "ColorPrint" view type - if (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint) - { +#if ENABLE_GCODE_VIEWER + if (gcode_view_type == GCodeViewer::EViewType::ColorPrint) { +#else + if (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint) { +#endif // ENABLE_GCODE_VIEWER colors = wxGetApp().plater()->get_colors_for_color_print(); +#if !ENABLE_GCODE_VIEWER colors.push_back("#808080"); // gray color for pause print or custom G-code +#endif // !ENABLE_GCODE_VIEWER - if (!gcode_preview_data_valid) + if (!gcode_preview_data_valid) { color_print_values = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes; +#if ENABLE_GCODE_VIEWER + colors.push_back("#808080"); // gray color for pause print or custom G-code +#endif // ENABLE_GCODE_VIEWER + } } - else if (gcode_preview_data_valid || (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::Tool) ) - { +#if ENABLE_GCODE_VIEWER + else if (gcode_preview_data_valid || gcode_view_type == GCodeViewer::EViewType::Tool) { +#else + else if (gcode_preview_data_valid || (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::Tool) ) { +#endif // ENABLE_GCODE_VIEWER colors = wxGetApp().plater()->get_extruder_colors_from_plater_config(); color_print_values.clear(); } - if (IsShown()) - { + if (IsShown()) { +#if ENABLE_GCODE_VIEWER + std::vector zs; +#endif // ENABLE_GCODE_VIEWER + m_canvas->set_selected_extruder(0); if (gcode_preview_data_valid) { // Load the real G-code preview. +#if ENABLE_GCODE_VIEWER + m_canvas->load_gcode_preview(*m_gcode_result); + m_canvas->refresh_gcode_preview(*m_gcode_result, colors); + m_left_sizer->Show(m_bottom_toolbar_panel); + m_left_sizer->Layout(); + Refresh(); + zs = m_canvas->get_gcode_layers_zs(); +#else m_canvas->load_gcode_preview(*m_gcode_preview_data, colors); +#endif // ENABLE_GCODE_VIEWER m_loaded = true; } else { // Load the initial preview based on slices, not the final G-code. m_canvas->load_preview(colors, color_print_values); +#if ENABLE_GCODE_VIEWER + m_left_sizer->Hide(m_bottom_toolbar_panel); + m_left_sizer->Layout(); + Refresh(); + zs = m_canvas->get_volumes_print_zs(true); +#endif // ENABLE_GCODE_VIEWER } +#if !ENABLE_GCODE_VIEWER show_hide_ui_elements(gcode_preview_data_valid ? "full" : "simple"); - // recalculates zs and update sliders accordingly std::vector zs = m_canvas->get_current_print_zs(true); +#endif // !ENABLE_GCODE_VIEWER if (zs.empty()) { // all layers filtered out +#if ENABLE_GCODE_VIEWER + hide_layers_slider(); +#else reset_sliders(true); +#endif // ENABLE_GCODE_VIEWER m_canvas_widget->Refresh(); } else +#if ENABLE_GCODE_VIEWER + update_layers_slider(zs, keep_z_range); +#else update_sliders(zs, keep_z_range); +#endif // ENABLE_GCODE_VIEWER } } @@ -917,43 +1384,98 @@ void Preview::load_print_as_sla() n_layers = (unsigned int)zs.size(); if (n_layers == 0) { +#if ENABLE_GCODE_VIEWER + hide_layers_slider(); +#else reset_sliders(true); +#endif // ENABLE_GCODE_VIEWER m_canvas_widget->Refresh(); } if (IsShown()) { m_canvas->load_sla_preview(); +#if ENABLE_GCODE_VIEWER + m_left_sizer->Hide(m_bottom_toolbar_panel); + m_left_sizer->Hide(m_bottom_toolbar_panel); + m_left_sizer->Layout(); + Refresh(); +#else show_hide_ui_elements("none"); +#endif // ENABLE_GCODE_VIEWER if (n_layers > 0) +#if ENABLE_GCODE_VIEWER + update_layers_slider(zs); +#else update_sliders(zs); +#endif // ENABLE_GCODE_VIEWER m_loaded = true; } } +#if ENABLE_GCODE_VIEWER +void Preview::on_layers_slider_scroll_changed(wxCommandEvent& event) +#else void Preview::on_sliders_scroll_changed(wxCommandEvent& event) +#endif // ENABLE_GCODE_VIEWER { if (IsShown()) { PrinterTechnology tech = m_process->current_printer_technology(); if (tech == ptFFF) { +#if ENABLE_GCODE_VIEWER + m_canvas->set_toolpaths_z_range({ m_layers_slider->GetLowerValueD(), m_layers_slider->GetHigherValueD() }); + m_canvas->set_as_dirty(); +#else m_canvas->set_toolpaths_range(m_slider->GetLowerValueD() - 1e-6, m_slider->GetHigherValueD() + 1e-6); m_canvas->render(); m_canvas->set_use_clipping_planes(false); +#endif // ENABLE_GCODE_VIEWER } else if (tech == ptSLA) { +#if ENABLE_GCODE_VIEWER + m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), -m_layers_slider->GetLowerValueD())); + m_canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), m_layers_slider->GetHigherValueD())); + m_canvas->set_use_clipping_planes(m_layers_slider->GetHigherValue() != 0); +#else m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), -m_slider->GetLowerValueD())); m_canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), m_slider->GetHigherValueD())); m_canvas->set_use_clipping_planes(m_slider->GetHigherValue() != 0); +#endif // ENABLE_GCODE_VIEWER m_canvas->render(); } } } +#if ENABLE_GCODE_VIEWER +void Preview::on_moves_slider_scroll_changed(wxCommandEvent& event) +{ + m_canvas->update_gcode_sequential_view_current(static_cast(m_moves_slider->GetLowerValueD() - 1.0), static_cast(m_moves_slider->GetHigherValueD() - 1.0)); + m_canvas->render(); +} + +wxString Preview::get_option_type_string(OptionType type) const +{ + switch (type) + { + case OptionType::Travel: { return _L("Travel"); } + case OptionType::Retractions: { return _L("Retractions"); } + case OptionType::Unretractions: { return _L("Deretractions"); } + case OptionType::ToolChanges: { return _L("Tool changes"); } + case OptionType::ColorChanges: { return _L("Color changes"); } + case OptionType::PausePrints: { return _L("Pause prints"); } + case OptionType::CustomGCodes: { return _L("Custom GCodes"); } + case OptionType::Shells: { return _L("Shells"); } + case OptionType::ToolMarker: { return _L("Tool marker"); } + case OptionType::Legend: { return _L("Legend/Estimated printing time"); } + default: { return ""; } + } +} +#endif // ENABLE_GCODE_VIEWER } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index bbf2774b89..3628bfd971 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -7,7 +7,9 @@ #include "libslic3r/CustomGCode.hpp" #include - +#if ENABLE_GCODE_VIEWER +#include "libslic3r/GCode/GCodeProcessor.hpp" +#endif // ENABLE_GCODE_VIEWER class wxNotebook; class wxGLCanvas; @@ -23,7 +25,9 @@ namespace Slic3r { class DynamicPrintConfig; class Print; class BackgroundSlicingProcess; +#if !ENABLE_GCODE_VIEWER class GCodePreviewData; +#endif // !ENABLE_GCODE_VIEWER class Model; namespace DoubleSlider { @@ -79,20 +83,35 @@ class Preview : public wxPanel { wxGLCanvas* m_canvas_widget; GLCanvas3D* m_canvas; +#if ENABLE_GCODE_VIEWER + wxBoxSizer* m_left_sizer; + wxBoxSizer* m_layers_slider_sizer; + wxPanel* m_bottom_toolbar_panel; +#else wxBoxSizer* m_double_slider_sizer; +#endif // ENABLE_GCODE_VIEWER wxStaticText* m_label_view_type; wxChoice* m_choice_view_type; - wxStaticText* m_label_show_features; + wxStaticText* m_label_show; wxComboCtrl* m_combochecklist_features; +#if ENABLE_GCODE_VIEWER + size_t m_combochecklist_features_pos; + wxComboCtrl* m_combochecklist_options; +#else wxCheckBox* m_checkbox_travel; wxCheckBox* m_checkbox_retractions; wxCheckBox* m_checkbox_unretractions; wxCheckBox* m_checkbox_shells; wxCheckBox* m_checkbox_legend; +#endif // ENABLE_GCODE_VIEWER DynamicPrintConfig* m_config; BackgroundSlicingProcess* m_process; +#if ENABLE_GCODE_VIEWER + GCodeProcessor::Result* m_gcode_result; +#else GCodePreviewData* m_gcode_preview_data; +#endif // ENABLE_GCODE_VIEWER #ifdef __linux__ // We are getting mysterious crashes on Linux in gtk due to OpenGL context activation GH #1874 #1955. @@ -107,13 +126,39 @@ class Preview : public wxPanel std::string m_preferred_color_mode; bool m_loaded; +#if !ENABLE_GCODE_VIEWER bool m_enabled; +#endif // !ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER + DoubleSlider::Control* m_layers_slider{ nullptr }; + DoubleSlider::Control* m_moves_slider{ nullptr }; +#else DoubleSlider::Control* m_slider {nullptr}; +#endif // ENABLE_GCODE_VIEWER public: - Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, +#if ENABLE_GCODE_VIEWER + enum class OptionType : unsigned int + { + Travel, + Retractions, + Unretractions, + ToolChanges, + ColorChanges, + PausePrints, + CustomGCodes, + Shells, + ToolMarker, + Legend + }; + +Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, + GCodeProcessor::Result* gcode_result, std::function schedule_background_process = []() {}); +#else +Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function schedule_background_process = []() {}); +#endif // ENABLE_GCODE_VIEWER virtual ~Preview(); wxGLCanvas* get_wxglcanvas() { return m_canvas_widget; } @@ -122,7 +167,9 @@ public: void set_as_dirty(); void set_number_extruders(unsigned int number_extruders); +#if !ENABLE_GCODE_VIEWER void set_enabled(bool enabled); +#endif // !ENABLE_GCODE_VIEWER void bed_shape_changed(); void select_view(const std::string& direction); void set_drop_target(wxDropTarget* target); @@ -132,47 +179,83 @@ public: void refresh_print(); void msw_rescale(); +#if ENABLE_GCODE_VIEWER + void move_layers_slider(wxKeyEvent& evt); + void edit_layers_slider(wxKeyEvent& evt); +#else void move_double_slider(wxKeyEvent& evt); void edit_double_slider(wxKeyEvent& evt); +#endif // ENABLE_GCODE_VIEWER - void update_view_type(bool slice_completed); + void update_view_type(bool keep_volumes); bool is_loaded() const { return m_loaded; } +#if ENABLE_GCODE_VIEWER + void update_bottom_toolbar(); + void update_moves_slider(); + void enable_moves_slider(bool enable); + void hide_layers_slider(); +#endif // ENABLE_GCODE_VIEWER + private: bool init(wxWindow* parent, Model* model); void bind_event_handlers(); void unbind_event_handlers(); +#if !ENABLE_GCODE_VIEWER void show_hide_ui_elements(const std::string& what); void reset_sliders(bool reset_all); void update_sliders(const std::vector& layers_z, bool keep_z_range = false); +#endif // !ENABLE_GCODE_VIEWER void on_size(wxSizeEvent& evt); void on_choice_view_type(wxCommandEvent& evt); void on_combochecklist_features(wxCommandEvent& evt); +#if ENABLE_GCODE_VIEWER + void on_combochecklist_options(wxCommandEvent& evt); +#else void on_checkbox_travel(wxCommandEvent& evt); void on_checkbox_retractions(wxCommandEvent& evt); void on_checkbox_unretractions(wxCommandEvent& evt); void on_checkbox_shells(wxCommandEvent& evt); void on_checkbox_legend(wxCommandEvent& evt); +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER + // Create/Update/Reset double slider on 3dPreview + wxBoxSizer* create_layers_slider_sizer(); + void check_layers_slider_values(std::vector& ticks_from_model, + const std::vector& layers_z); + void reset_layers_slider(); + void update_layers_slider(const std::vector& layers_z, bool keep_z_range = false); + void update_layers_slider_mode(); + // update vertical DoubleSlider after keyDown in canvas + void update_layers_slider_from_canvas(wxKeyEvent& event); +#else // Create/Update/Reset double slider on 3dPreview void create_double_slider(); - void check_slider_values(std::vector &ticks_from_model, - const std::vector &layers_z); + void check_slider_values(std::vector& ticks_from_model, + const std::vector& layers_z); void reset_double_slider(); void update_double_slider(const std::vector& layers_z, bool keep_z_range = false); void update_double_slider_mode(); // update DoubleSlider after keyDown in canvas void update_double_slider_from_canvas(wxKeyEvent& event); +#endif // ENABLE_GCODE_VIEWER void load_print_as_fff(bool keep_z_range = false); void load_print_as_sla(); +#if ENABLE_GCODE_VIEWER + void on_layers_slider_scroll_changed(wxCommandEvent& event); + void on_moves_slider_scroll_changed(wxCommandEvent& event); + wxString get_option_type_string(OptionType type) const; +#else void on_sliders_scroll_changed(wxCommandEvent& event); +#endif // ENABLE_GCODE_VIEWER }; } // namespace GUI diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index 7db3d57ffc..e2a6ccb885 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -75,7 +75,7 @@ template typename F::FN winapi_get_function(const wchar_t *dll, const c #endif // If called with nullptr, a DPI for the primary monitor is returned. -int get_dpi_for_window(wxWindow *window) +int get_dpi_for_window(const wxWindow *window) { #ifdef _WIN32 enum MONITOR_DPI_TYPE_ { @@ -126,7 +126,7 @@ int get_dpi_for_window(wxWindow *window) #endif } -wxFont get_default_font_for_dpi(int dpi) +wxFont get_default_font_for_dpi(const wxWindow *window, int dpi) { #ifdef _WIN32 // First try to load the font with the Windows 10 specific way. @@ -137,7 +137,7 @@ wxFont get_default_font_for_dpi(int dpi) memset(&nm, 0, sizeof(NONCLIENTMETRICS)); nm.cbSize = sizeof(NONCLIENTMETRICS); if (SystemParametersInfoForDpi_fn(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &nm, 0, dpi)) - return wxFont(wxNativeFontInfo(nm.lfMessageFont)); + return wxFont(wxNativeFontInfo(nm.lfMessageFont, window)); } // Then try to guesstimate the font DPI scaling on Windows 8. // Let's hope that the font returned by the SystemParametersInfo(), which is used by wxWidgets internally, makes sense. @@ -267,5 +267,26 @@ std::ostream& operator<<(std::ostream &os, const WindowMetrics& metrics) } +TaskTimer::TaskTimer(std::string task_name): + task_name(task_name.empty() ? "task" : task_name) +{ + start_timer = std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()); +} + +TaskTimer::~TaskTimer() +{ + std::chrono::milliseconds stop_timer = std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()); + auto process_duration = std::chrono::milliseconds(stop_timer - start_timer).count(); + std::string out = (boost::format("\n!!! %1% duration = %2% ms \n\n") % task_name % process_duration).str(); + printf("%s", out.c_str()); +#ifdef __WXMSW__ + std::wstring stemp = std::wstring(out.begin(), out.end()); + OutputDebugString(stemp.c_str()); +#endif +} + + } } diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index 2737b3edbf..edc9fba1fe 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -18,6 +18,8 @@ #include #include +#include + #include "Event.hpp" class wxCheckBox; @@ -53,8 +55,9 @@ void on_window_geometry(wxTopLevelWindow *tlw, std::function callback); enum { DPI_DEFAULT = 96 }; -int get_dpi_for_window(wxWindow *window); -wxFont get_default_font_for_dpi(int dpi); +int get_dpi_for_window(const wxWindow *window); +wxFont get_default_font_for_dpi(const wxWindow* window, int dpi); +inline wxFont get_default_font(const wxWindow* window) { return get_default_font_for_dpi(window, get_dpi_for_window(window)); } #if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) struct DpiChangedEvent : public wxEvent { @@ -84,7 +87,7 @@ public: int dpi = get_dpi_for_window(this); m_scale_factor = (float)dpi / (float)DPI_DEFAULT; m_prev_scale_factor = m_scale_factor; - m_normal_font = get_default_font_for_dpi(dpi); + m_normal_font = get_default_font_for_dpi(this, dpi); /* Because of default window font is a primary display font, * We should set correct font for window before getting em_unit value. @@ -92,10 +95,13 @@ public: #ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList this->SetFont(m_normal_font); #endif - // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window. -#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT + + // Linux specific issue : get_dpi_for_window(this) still doesn't responce to the Display's scale in new wxWidgets(3.1.3). + // So, calculate the m_em_unit value from the font size, as before +#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && !defined(__WXGTK__) m_em_unit = std::max(10, 10.0f * m_scale_factor); #else + // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window. m_em_unit = std::max(10, this->GetTextExtent("m").x - 1); #endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT @@ -103,37 +109,22 @@ public: #if wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) this->Bind(wxEVT_DPI_CHANGED, [this](wxDPIChangedEvent& evt) { - m_scale_factor = (float)evt.GetNewDPI().x / (float)DPI_DEFAULT; - - m_new_font_point_size = get_default_font_for_dpi(evt.GetNewDPI().x).GetPointSize(); - - if (!m_can_rescale) - return; - -#if ENABLE_LAYOUT_NO_RESTART - if (m_force_rescale || is_new_scale_factor()) - rescale(wxRect()); -#else - if (is_new_scale_factor()) - rescale(wxRect()); -#endif // ENABLE_LAYOUT_NO_RESTART + m_scale_factor = (float)evt.GetNewDPI().x / (float)DPI_DEFAULT; + m_new_font_point_size = get_default_font_for_dpi(this, evt.GetNewDPI().x).GetPointSize(); + if (m_can_rescale && (m_force_rescale || is_new_scale_factor())) + rescale(wxRect()); }); #else this->Bind(EVT_DPI_CHANGED_SLICER, [this](const DpiChangedEvent& evt) { m_scale_factor = (float)evt.dpi / (float)DPI_DEFAULT; - m_new_font_point_size = get_default_font_for_dpi(evt.dpi).GetPointSize(); + m_new_font_point_size = get_default_font_for_dpi(this, evt.dpi).GetPointSize(); if (!m_can_rescale) return; -#if ENABLE_LAYOUT_NO_RESTART if (m_force_rescale || is_new_scale_factor()) rescale(evt.rect); -#else - if (is_new_scale_factor()) - rescale(evt.rect); -#endif // ENABLE_LAYOUT_NO_RESTART }); #endif // wxVERSION_EQUAL_OR_GREATER_THAN @@ -175,9 +166,7 @@ public: int em_unit() const { return m_em_unit; } // int font_size() const { return m_font_size; } const wxFont& normal_font() const { return m_normal_font; } -#if ENABLE_LAYOUT_NO_RESTART void enable_force_rescale() { m_force_rescale = true; } -#endif // ENABLE_LAYOUT_NO_RESTART protected: virtual void on_dpi_changed(const wxRect &suggested_rect) = 0; @@ -191,9 +180,7 @@ private: wxFont m_normal_font; float m_prev_scale_factor; bool m_can_rescale{ true }; -#if ENABLE_LAYOUT_NO_RESTART bool m_force_rescale{ false }; -#endif // ENABLE_LAYOUT_NO_RESTART int m_new_font_point_size; @@ -233,17 +220,13 @@ private: { this->Freeze(); -#if ENABLE_LAYOUT_NO_RESTART && wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) - if (m_force_rescale) { -#endif // ENABLE_LAYOUT_NO_RESTART - // rescale fonts of all controls - scale_controls_fonts(this, m_new_font_point_size); - // rescale current window font - scale_win_font(this, m_new_font_point_size); -#if ENABLE_LAYOUT_NO_RESTART && wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) - m_force_rescale = false; - } -#endif // ENABLE_LAYOUT_NO_RESTART + m_force_rescale = false; +#if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) + // rescale fonts of all controls + scale_controls_fonts(this, m_new_font_point_size); + // rescale current window font + scale_win_font(this, m_new_font_point_size); +#endif // wxVERSION_EQUAL_OR_GREATER_THAN // set normal application font as a current window font m_normal_font = this->GetFont(); @@ -401,6 +384,25 @@ public: std::ostream& operator<<(std::ostream &os, const WindowMetrics& metrics); +#if ENABLE_GCODE_VIEWER +inline int hex_digit_to_int(const char c) +{ + return + (c >= '0' && c <= '9') ? int(c - '0') : + (c >= 'A' && c <= 'F') ? int(c - 'A') + 10 : + (c >= 'a' && c <= 'f') ? int(c - 'a') + 10 : -1; +} +#endif // ENABLE_GCODE_VIEWER + +class TaskTimer +{ + std::chrono::milliseconds start_timer; + std::string task_name; +public: + TaskTimer(std::string task_name); + + ~TaskTimer(); +}; }} diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 3ab58c2585..44f0a69729 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -124,7 +124,6 @@ public: void set_state(EState state) { m_state = state; on_set_state(); } int get_shortcut_key() const { return m_shortcut_key; } - void set_shortcut_key(int key) { m_shortcut_key = key; } const std::string& get_icon_filename() const { return m_icon_filename; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index cd42857247..3384804b4d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -1,41 +1,40 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoFdmSupports.hpp" + +#include "libslic3r/Model.hpp" + +//#include "slic3r/GUI/3DScene.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" -#include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/Plater.hpp" + #include -#include "slic3r/GUI/GUI_App.hpp" -#include "slic3r/GUI/PresetBundle.hpp" -#include "slic3r/GUI/Camera.hpp" -#include "slic3r/GUI/Plater.hpp" -#include "libslic3r/Model.hpp" - - namespace Slic3r { + namespace GUI { -static constexpr size_t MaxVertexBuffers = 50; -GLGizmoFdmSupports::GLGizmoFdmSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) - : GLGizmoBase(parent, icon_filename, sprite_id) - , m_quadric(nullptr) + +void GLGizmoFdmSupports::on_shutdown() { - m_clipping_plane.reset(new ClippingPlane()); - m_quadric = ::gluNewQuadric(); - if (m_quadric != nullptr) - // using GLU_FILL does not work when the instance's transformation - // contains mirroring (normals are reverted) - ::gluQuadricDrawStyle(m_quadric, GLU_FILL); + if (m_setting_angle) { + m_setting_angle = false; + m_parent.use_slope(false); + } } -GLGizmoFdmSupports::~GLGizmoFdmSupports() + + +std::string GLGizmoFdmSupports::on_get_name() const { - if (m_quadric != nullptr) - ::gluDeleteQuadric(m_quadric); + return (_(L("FDM Support Editing")) + " [L]").ToUTF8().data(); } + + bool GLGizmoFdmSupports::on_init() { m_shortcut_key = WXK_CONTROL_L; @@ -43,539 +42,220 @@ bool GLGizmoFdmSupports::on_init() m_desc["clipping_of_view"] = _L("Clipping of view") + ": "; m_desc["reset_direction"] = _L("Reset direction"); m_desc["cursor_size"] = _L("Cursor size") + ": "; + m_desc["cursor_type"] = _L("Cursor type") + ": "; m_desc["enforce_caption"] = _L("Left mouse button") + ": "; m_desc["enforce"] = _L("Enforce supports"); m_desc["block_caption"] = _L("Right mouse button") + " "; m_desc["block"] = _L("Block supports"); m_desc["remove_caption"] = _L("Shift + Left mouse button") + ": "; m_desc["remove"] = _L("Remove selection"); - m_desc["remove_all"] = _L("Remove all"); + m_desc["remove_all"] = _L("Remove all selection"); + m_desc["circle"] = _L("Circle"); + m_desc["sphere"] = _L("Sphere"); return true; } -void GLGizmoFdmSupports::activate_internal_undo_redo_stack(bool activate) -{ - if (activate && ! m_internal_stack_active) { - Plater::TakeSnapshot(wxGetApp().plater(), _L("FDM gizmo turned on")); - wxGetApp().plater()->enter_gizmos_stack(); - m_internal_stack_active = true; - } - if (! activate && m_internal_stack_active) { - wxGetApp().plater()->leave_gizmos_stack(); - Plater::TakeSnapshot(wxGetApp().plater(), _L("FDM gizmo turned off")); - m_internal_stack_active = false; - } -} -void GLGizmoFdmSupports::set_fdm_support_data(ModelObject* model_object, const Selection& selection) -{ - if (m_state != On) - return; - - const ModelObject* mo = m_c->selection_info() ? m_c->selection_info()->model_object() : nullptr; - - if (mo && selection.is_from_single_instance() - && (m_schedule_update || mo->id() != m_old_mo_id || mo->volumes.size() != m_old_volumes_size)) - { - update_from_model_object(); - m_old_mo_id = mo->id(); - m_old_volumes_size = mo->volumes.size(); - m_schedule_update = false; - } -} - - - -void GLGizmoFdmSupports::on_render() const +void GLGizmoFdmSupports::render_painter_gizmo() const { const Selection& selection = m_parent.get_selection(); glsafe(::glEnable(GL_BLEND)); glsafe(::glEnable(GL_DEPTH_TEST)); - render_triangles(selection); + if (! m_setting_angle) + render_triangles(selection); + m_c->object_clipper()->render_cut(); - render_cursor_circle(); + render_cursor(); glsafe(::glDisable(GL_BLEND)); } -void GLGizmoFdmSupports::render_triangles(const Selection& selection) const + + +void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_limit) { - if (m_setting_angle) + if (! m_c->selection_info()->model_object()) return; - const ModelObject* mo = m_c->selection_info()->model_object(); + const float approx_height = m_imgui->scaled(14.0f); + y = std::min(y, bottom_limit - approx_height); + m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); - glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); - ScopeGuard offset_fill_guard([]() { glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); } ); - glsafe(::glPolygonOffset(-1.0, 1.0)); + if (! m_setting_angle) { + m_imgui->begin(on_get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); - // Take care of the clipping plane. The normal of the clipping plane is - // saved with opposite sign than we need to pass to OpenGL (FIXME) - bool clipping_plane_active = m_c->object_clipper()->get_position() != 0.; - if (clipping_plane_active) { - const ClippingPlane* clp = m_c->object_clipper()->get_clipping_plane(); - double clp_data[4]; - memcpy(clp_data, clp->get_data(), 4 * sizeof(double)); - for (int i=0; i<3; ++i) - clp_data[i] = -1. * clp_data[i]; + // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that: + const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x, + m_imgui->calc_text_size(m_desc.at("reset_direction")).x) + + m_imgui->scaled(1.5f); + const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.f); + const float cursor_type_radio_left = m_imgui->calc_text_size(m_desc.at("cursor_type")).x + m_imgui->scaled(1.f); + const float cursor_type_radio_width1 = m_imgui->calc_text_size(m_desc["circle"]).x + + m_imgui->scaled(2.5f); + const float cursor_type_radio_width2 = m_imgui->calc_text_size(m_desc["sphere"]).x + + m_imgui->scaled(2.5f); + const float button_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.f); + const float minimal_slider_width = m_imgui->scaled(4.f); - glsafe(::glClipPlane(GL_CLIP_PLANE0, (GLdouble*)clp_data)); - glsafe(::glEnable(GL_CLIP_PLANE0)); - } + float caption_max = 0.f; + float total_text_max = 0.; + for (const std::string& t : {"enforce", "block", "remove"}) { + caption_max = std::max(caption_max, m_imgui->calc_text_size(m_desc.at(t+"_caption")).x); + total_text_max = std::max(total_text_max, caption_max + m_imgui->calc_text_size(m_desc.at(t)).x); + } + caption_max += m_imgui->scaled(1.f); + total_text_max += m_imgui->scaled(1.f); - int mesh_id = -1; - for (const ModelVolume* mv : mo->volumes) { - if (! mv->is_model_part()) - continue; + float window_width = minimal_slider_width + std::max(cursor_slider_left, clipping_slider_left); + window_width = std::max(window_width, total_text_max); + window_width = std::max(window_width, button_width); + window_width = std::max(window_width, cursor_type_radio_left + cursor_type_radio_width1 + cursor_type_radio_width2); - ++mesh_id; + auto draw_text_with_caption = [this, &caption_max](const wxString& caption, const wxString& text) { + m_imgui->text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, caption); + ImGui::SameLine(caption_max); + m_imgui->text(text); + }; - const Transform3d trafo_matrix = - mo->instances[selection.get_instance_idx()]->get_transformation().get_matrix() * - mv->get_matrix(); + for (const std::string& t : {"enforce", "block", "remove"}) + draw_text_with_caption(m_desc.at(t + "_caption"), m_desc.at(t)); - bool is_left_handed = trafo_matrix.matrix().determinant() < 0.; - if (is_left_handed) - glsafe(::glFrontFace(GL_CW)); + m_imgui->text(""); - glsafe(::glPushMatrix()); - glsafe(::glMultMatrixd(trafo_matrix.data())); + if (m_imgui->button("Autoset by angle...")) { + m_setting_angle = true; + } - // Now render both enforcers and blockers. - for (int i=0; i<2; ++i) { - glsafe(::glColor4f(i ? 1.f : 0.2f, 0.2f, i ? 0.2f : 1.0f, 0.5f)); - for (const GLIndexedVertexArray& iva : m_ivas[mesh_id][i]) { - if (iva.has_VBOs()) - iva.render(); + ImGui::SameLine(); + + if (m_imgui->button(m_desc.at("remove_all"))) { + Plater::TakeSnapshot(wxGetApp().plater(), wxString(_L("Reset selection"))); + ModelObject* mo = m_c->selection_info()->model_object(); + int idx = -1; + for (ModelVolume* mv : mo->volumes) { + if (mv->is_model_part()) { + ++idx; + m_triangle_selectors[idx]->reset(); + } } - } - glsafe(::glPopMatrix()); - if (is_left_handed) - glsafe(::glFrontFace(GL_CCW)); - } - if (clipping_plane_active) - glsafe(::glDisable(GL_CLIP_PLANE0)); -} - -void GLGizmoFdmSupports::render_cursor_circle() const -{ - const Camera& camera = wxGetApp().plater()->get_camera(); - float zoom = (float)camera.get_zoom(); - float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; - - Size cnv_size = m_parent.get_canvas_size(); - float cnv_half_width = 0.5f * (float)cnv_size.get_width(); - float cnv_half_height = 0.5f * (float)cnv_size.get_height(); - if ((cnv_half_width == 0.0f) || (cnv_half_height == 0.0f)) - return; - Vec2d mouse_pos(m_parent.get_local_mouse_position()(0), m_parent.get_local_mouse_position()(1)); - Vec2d center(mouse_pos(0) - cnv_half_width, cnv_half_height - mouse_pos(1)); - center = center * inv_zoom; - - glsafe(::glLineWidth(1.5f)); - float color[3]; - color[0] = 0.f; - color[1] = 1.f; - color[2] = 0.3f; - glsafe(::glColor3fv(color)); - glsafe(::glDisable(GL_DEPTH_TEST)); - - glsafe(::glPushMatrix()); - glsafe(::glLoadIdentity()); - // ensure that the circle is renderered inside the frustrum - glsafe(::glTranslated(0.0, 0.0, -(camera.get_near_z() + 0.5))); - // ensure that the overlay fits the frustrum near z plane - double gui_scale = camera.get_gui_scale(); - glsafe(::glScaled(gui_scale, gui_scale, 1.0)); - - glsafe(::glPushAttrib(GL_ENABLE_BIT)); - glsafe(::glLineStipple(4, 0xAAAA)); - glsafe(::glEnable(GL_LINE_STIPPLE)); - - ::glBegin(GL_LINE_LOOP); - for (double angle=0; angle<2*M_PI; angle+=M_PI/20.) - ::glVertex2f(GLfloat(center.x()+m_cursor_radius*cos(angle)), GLfloat(center.y()+m_cursor_radius*sin(angle))); - glsafe(::glEnd()); - - glsafe(::glPopAttrib()); - glsafe(::glPopMatrix()); -} - - -void GLGizmoFdmSupports::update_model_object() const -{ - ModelObject* mo = m_c->selection_info()->model_object(); - int idx = -1; - for (ModelVolume* mv : mo->volumes) { - ++idx; - if (! mv->is_model_part()) - continue; - for (int i=0; im_supported_facets.set_facet(i, m_selected_facets[idx][i]); - } -} - - -void GLGizmoFdmSupports::update_from_model_object() -{ - wxBusyCursor wait; - - const ModelObject* mo = m_c->selection_info()->model_object(); - size_t num_of_volumes = 0; - for (const ModelVolume* mv : mo->volumes) - if (mv->is_model_part()) - ++num_of_volumes; - m_selected_facets.resize(num_of_volumes); - - m_ivas.clear(); - m_ivas.resize(num_of_volumes); - for (size_t i=0; ivolumes) { - if (! mv->is_model_part()) - continue; - - ++volume_id; - - // This mesh does not account for the possible Z up SLA offset. - const TriangleMesh* mesh = &mv->mesh(); - - m_selected_facets[volume_id].assign(mesh->its.indices.size(), FacetSupportType::NONE); - - // Load current state from ModelVolume. - for (FacetSupportType type : {FacetSupportType::ENFORCER, FacetSupportType::BLOCKER}) { - const std::vector& list = mv->m_supported_facets.get_facets(type); - for (int i : list) - m_selected_facets[volume_id][i] = type; - } - update_vertex_buffers(mesh, volume_id, FacetSupportType::ENFORCER); - update_vertex_buffers(mesh, volume_id, FacetSupportType::BLOCKER); - } -} - - - -bool GLGizmoFdmSupports::is_mesh_point_clipped(const Vec3d& point) const -{ - if (m_c->object_clipper()->get_position() == 0.) - return false; - - auto sel_info = m_c->selection_info(); - int active_inst = m_c->selection_info()->get_active_instance(); - const ModelInstance* mi = sel_info->model_object()->instances[active_inst]; - const Transform3d& trafo = mi->get_transformation().get_matrix(); - - Vec3d transformed_point = trafo * point; - transformed_point(2) += sel_info->get_sla_shift(); - return m_c->object_clipper()->get_clipping_plane()->is_point_clipped(transformed_point); -} - - -// Following function is called from GLCanvas3D to inform the gizmo about a mouse/keyboard event. -// The gizmo has an opportunity to react - if it does, it should return true so that the Canvas3D is -// aware that the event was reacted to and stops trying to make different sense of it. If the gizmo -// concludes that the event was not intended for it, it should return false. -bool GLGizmoFdmSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down) -{ - if (action == SLAGizmoEventType::MouseWheelUp - || action == SLAGizmoEventType::MouseWheelDown) { - if (control_down) { - double pos = m_c->object_clipper()->get_position(); - pos = action == SLAGizmoEventType::MouseWheelDown - ? std::max(0., pos - 0.01) - : std::min(1., pos + 0.01); - m_c->object_clipper()->set_position(pos, true); - return true; - } - else if (alt_down) { - m_cursor_radius = action == SLAGizmoEventType::MouseWheelDown - ? std::max(m_cursor_radius - CursorRadiusStep, CursorRadiusMin) - : std::min(m_cursor_radius + CursorRadiusStep, CursorRadiusMax); + update_model_object(); + m_parent.set_as_dirty(); + } + + const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("cursor_size")); + ImGui::SameLine(cursor_slider_left); + ImGui::PushItemWidth(window_width - cursor_slider_left); + ImGui::SliderFloat(" ", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f"); + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Alt + Mouse wheel").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("cursor_type")); + ImGui::SameLine(cursor_type_radio_left + m_imgui->scaled(0.f)); + ImGui::PushItemWidth(cursor_type_radio_width1); + + bool sphere_sel = m_cursor_type == TriangleSelector::CursorType::SPHERE; + if (m_imgui->radio_button(m_desc["sphere"], sphere_sel)) + sphere_sel = true; + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Paints all facets inside, regardless of their orientation.").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + ImGui::SameLine(cursor_type_radio_left + cursor_type_radio_width2 + m_imgui->scaled(0.f)); + ImGui::PushItemWidth(cursor_type_radio_width2); + + if (m_imgui->radio_button(m_desc["circle"], ! sphere_sel)) + sphere_sel = false; + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Ignores facets facing away from the camera.").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + m_cursor_type = sphere_sel + ? TriangleSelector::CursorType::SPHERE + : TriangleSelector::CursorType::CIRCLE; + + + + + ImGui::Separator(); + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("clipping_of_view")); + } + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this](){ + m_c->object_clipper()->set_position(-1., false); + }); + } + } + + ImGui::SameLine(clipping_slider_left); + ImGui::PushItemWidth(window_width - clipping_slider_left); + float clp_dist = m_c->object_clipper()->get_position(); + if (ImGui::SliderFloat(" ", &clp_dist, 0.f, 1.f, "%.2f")) + m_c->object_clipper()->set_position(clp_dist, true); + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Ctrl + Mouse wheel").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + m_imgui->end(); + } + else { + m_imgui->begin(_L("Autoset custom supports"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); + ImGui::AlignTextToFramePadding(); + m_imgui->text(_L("Threshold:") + " " + _L("deg")); + ImGui::SameLine(); + if (m_imgui->slider_float("", &m_angle_threshold_deg, 0.f, 90.f, "%.f")) + m_parent.set_slope_normal_angle(90.f - m_angle_threshold_deg); + if (m_imgui->button(_L("Enforce"))) + select_facets_by_angle(m_angle_threshold_deg, false); + ImGui::SameLine(); + if (m_imgui->button(_L("Block"))) + select_facets_by_angle(m_angle_threshold_deg, true); + ImGui::SameLine(); + if (m_imgui->button(_L("Cancel"))) + m_setting_angle = false; + m_imgui->end(); + bool needs_update = !(m_setting_angle && m_parent.is_using_slope()); + if (needs_update) { + m_parent.use_slope(m_setting_angle); m_parent.set_as_dirty(); - return true; } } - - if (action == SLAGizmoEventType::ResetClippingPlane) { - m_c->object_clipper()->set_position(-1., false); - return true; - } - - if (action == SLAGizmoEventType::LeftDown - || action == SLAGizmoEventType::RightDown - || (action == SLAGizmoEventType::Dragging && m_button_down != Button::None)) { - - FacetSupportType new_state = FacetSupportType::NONE; - if (! shift_down) { - if (action == SLAGizmoEventType::Dragging) - new_state = m_button_down == Button::Left - ? FacetSupportType::ENFORCER - : FacetSupportType::BLOCKER; - else - new_state = action == SLAGizmoEventType::LeftDown - ? FacetSupportType::ENFORCER - : FacetSupportType::BLOCKER; - } - - const Camera& camera = wxGetApp().plater()->get_camera(); - const Selection& selection = m_parent.get_selection(); - const ModelObject* mo = m_c->selection_info()->model_object(); - const ModelInstance* mi = mo->instances[selection.get_instance_idx()]; - const Transform3d& instance_trafo = mi->get_transformation().get_matrix(); - - std::vector>> hit_positions_and_facet_ids; - bool clipped_mesh_was_hit = false; - - Vec3f normal = Vec3f::Zero(); - Vec3f hit = Vec3f::Zero(); - size_t facet = 0; - Vec3f closest_hit = Vec3f::Zero(); - double closest_hit_squared_distance = std::numeric_limits::max(); - size_t closest_facet = 0; - int closest_hit_mesh_id = -1; - - // Transformations of individual meshes - std::vector trafo_matrices; - - int mesh_id = -1; - // Cast a ray on all meshes, pick the closest hit and save it for the respective mesh - for (const ModelVolume* mv : mo->volumes) { - if (! mv->is_model_part()) - continue; - - ++mesh_id; - - trafo_matrices.push_back(instance_trafo * mv->get_matrix()); - hit_positions_and_facet_ids.push_back(std::vector>()); - - if (m_c->raycaster()->raycasters()[mesh_id]->unproject_on_mesh( - mouse_position, - trafo_matrices[mesh_id], - camera, - hit, - normal, - m_clipping_plane.get(), - &facet)) - { - // In case this hit is clipped, skip it. - if (is_mesh_point_clipped(hit.cast())) { - clipped_mesh_was_hit = true; - continue; - } - - // Is this hit the closest to the camera so far? - double hit_squared_distance = (camera.get_position()-trafo_matrices[mesh_id]*hit.cast()).squaredNorm(); - if (hit_squared_distance < closest_hit_squared_distance) { - closest_hit_squared_distance = hit_squared_distance; - closest_facet = facet; - closest_hit_mesh_id = mesh_id; - closest_hit = hit; - } - } - } - - bool dragging_while_painting = (action == SLAGizmoEventType::Dragging && m_button_down != Button::None); - - // The mouse button click detection is enabled when there is a valid hit - // or when the user clicks the clipping plane. Missing the object entirely - // shall not capture the mouse. - if (closest_hit_mesh_id != -1 || clipped_mesh_was_hit) { - if (m_button_down == Button::None) - m_button_down = ((action == SLAGizmoEventType::LeftDown) ? Button::Left : Button::Right); - } - - if (closest_hit_mesh_id == -1) { - // In case we have no valid hit, we can return. The event will - // be stopped in following two cases: - // 1. clicking the clipping plane - // 2. dragging while painting (to prevent scene rotations and moving the object) - return clipped_mesh_was_hit - || dragging_while_painting; - } - - // Now propagate the hits - mesh_id = -1; - const TriangleMesh* mesh = nullptr; - for (const ModelVolume* mv : mo->volumes) { - if (! mv->is_model_part()) - continue; - ++mesh_id; - if (mesh_id == closest_hit_mesh_id) { - mesh = &mv->mesh(); - break; - } - } - - bool update_both = false; - - const Transform3d& trafo_matrix = trafo_matrices[mesh_id]; - - // Calculate how far can a point be from the line (in mesh coords). - // FIXME: The scaling of the mesh can be non-uniform. - const Vec3d sf = Geometry::Transformation(trafo_matrix).get_scaling_factor(); - const float avg_scaling = (sf(0) + sf(1) + sf(2))/3.; - const float limit = pow(m_cursor_radius/avg_scaling , 2.f); - - const std::pair& hit_and_facet = { closest_hit, closest_facet }; - - // Calculate direction from camera to the hit (in mesh coords): - Vec3f dir = ((trafo_matrix.inverse() * camera.get_position()).cast() - hit_and_facet.first).normalized(); - - // A lambda to calculate distance from the centerline: - auto squared_distance_from_line = [&hit_and_facet, &dir](const Vec3f& point) -> float { - Vec3f diff = hit_and_facet.first - point; - return (diff - diff.dot(dir) * dir).squaredNorm(); - }; - - // A lambda to determine whether this facet is potentionally visible (still can be obscured) - auto faces_camera = [&dir, &mesh](const size_t& facet) -> bool { - return (mesh->stl.facet_start[facet].normal.dot(dir) > 0.); - }; - // Now start with the facet the pointer points to and check all adjacent facets. - std::vector facets_to_select{hit_and_facet.second}; - std::vector visited(m_selected_facets[mesh_id].size(), false); // keep track of facets we already processed - size_t facet_idx = 0; // index into facets_to_select - while (facet_idx < facets_to_select.size()) { - size_t facet = facets_to_select[facet_idx]; - if (! visited[facet]) { - // check all three vertices and in case they're close enough, - // add neighboring facets to be proccessed later - for (size_t i=0; i<3; ++i) { - float dist = squared_distance_from_line( - mesh->its.vertices[mesh->its.indices[facet](i)]); - if (dist < limit) { - for (int n=0; n<3; ++n) { - if (faces_camera(mesh->stl.neighbors_start[facet].neighbor[n])) - facets_to_select.push_back(mesh->stl.neighbors_start[facet].neighbor[n]); - } - } - } - visited[facet] = true; - } - ++facet_idx; - } - - std::vector new_facets; - new_facets.reserve(facets_to_select.size()); - - // Now just select all facets that passed and remember which - // ones have really changed state. - for (size_t next_facet : facets_to_select) { - FacetSupportType& facet = m_selected_facets[mesh_id][next_facet]; - - if (facet != new_state) { - if (facet != FacetSupportType::NONE) { - // this triangle is currently in the other VBA. - // Both VBAs need to be refreshed. - update_both = true; - } - facet = new_state; - new_facets.push_back(next_facet); - } - } - - if (! new_facets.empty()) { - if (new_state != FacetSupportType::NONE) { - // append triangles into the respective VBA - update_vertex_buffers(mesh, mesh_id, new_state, &new_facets); - if (update_both) { - auto other = new_state == FacetSupportType::ENFORCER - ? FacetSupportType::BLOCKER - : FacetSupportType::ENFORCER; - update_vertex_buffers(mesh, mesh_id, other); // regenerate the other VBA - } - } - else { - update_vertex_buffers(mesh, mesh_id, FacetSupportType::ENFORCER); - update_vertex_buffers(mesh, mesh_id, FacetSupportType::BLOCKER); - } - } - - return true; - } - - if ((action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::RightUp) - && m_button_down != Button::None) { - // Take snapshot and update ModelVolume data. - wxString action_name = shift_down - ? _L("Remove selection") - : (m_button_down == Button::Left - ? _L("Add supports") - : _L("Block supports")); - activate_internal_undo_redo_stack(true); - Plater::TakeSnapshot(wxGetApp().plater(), action_name); - update_model_object(); - - m_button_down = Button::None; - return true; - } - - return false; } -void GLGizmoFdmSupports::update_vertex_buffers(const TriangleMesh* mesh, - int mesh_id, - FacetSupportType type, - const std::vector* new_facets) -{ - std::vector& ivas = m_ivas[mesh_id][type == FacetSupportType::ENFORCER ? 0 : 1]; - // lambda to push facet into vertex buffer - auto push_facet = [this, &mesh, &mesh_id](size_t idx, GLIndexedVertexArray& iva) { - for (int i=0; i<3; ++i) - iva.push_geometry( - mesh->its.vertices[mesh->its.indices[idx](i)].cast(), - m_c->raycaster()->raycasters()[mesh_id]->get_triangle_normal(idx).cast() - ); - size_t num = iva.triangle_indices_size; - iva.push_triangle(num, num+1, num+2); - }; - - - if (ivas.size() == MaxVertexBuffers || ! new_facets) { - // If there are too many or they should be regenerated, make one large - // GLVertexBufferArray. - ivas.clear(); // destructors release geometry - ivas.push_back(GLIndexedVertexArray()); - - bool pushed = false; - for (size_t facet_idx=0; facet_idxempty()) - ivas.back().finalize_geometry(true); - else - ivas.pop_back(); - } - -} - - -void GLGizmoFdmSupports::select_facets_by_angle(float threshold_deg, bool overwrite, bool block) +void GLGizmoFdmSupports::select_facets_by_angle(float threshold_deg, bool block) { float threshold = (M_PI/180.)*threshold_deg; const Selection& selection = m_parent.get_selection(); @@ -599,13 +279,12 @@ void GLGizmoFdmSupports::select_facets_by_angle(float threshold_deg, bool overwr int idx = -1; for (const stl_facet& facet : mv->mesh().stl.facet_start) { ++idx; - if (facet.normal.dot(down) > dot_limit && (overwrite || m_selected_facets[mesh_id][idx] == FacetSupportType::NONE)) - m_selected_facets[mesh_id][idx] = block - ? FacetSupportType::BLOCKER - : FacetSupportType::ENFORCER; + if (facet.normal.dot(down) > dot_limit) + m_triangle_selectors[mesh_id]->set_facet(idx, + block + ? EnforcerBlockerType::BLOCKER + : EnforcerBlockerType::ENFORCER); } - update_vertex_buffers(&mv->mesh(), mesh_id, FacetSupportType::ENFORCER); - update_vertex_buffers(&mv->mesh(), mesh_id, FacetSupportType::BLOCKER); } activate_internal_undo_redo_stack(true); @@ -618,241 +297,54 @@ void GLGizmoFdmSupports::select_facets_by_angle(float threshold_deg, bool overwr } -void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_limit) + +void GLGizmoFdmSupports::update_model_object() const { - if (! m_c->selection_info()->model_object()) - return; - - const float approx_height = m_imgui->scaled(18.0f); - y = std::min(y, bottom_limit - approx_height); - m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); - - if (! m_setting_angle) { - m_imgui->begin(on_get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); - - // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that: - const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x, m_imgui->calc_text_size(m_desc.at("reset_direction")).x) + m_imgui->scaled(1.5f); - const float cursor_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.f); - const float button_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.f); - const float minimal_slider_width = m_imgui->scaled(4.f); - - float caption_max = 0.f; - float total_text_max = 0.; - for (const std::string& t : {"enforce", "block", "remove"}) { - caption_max = std::max(caption_max, m_imgui->calc_text_size(m_desc.at(t+"_caption")).x); - total_text_max = std::max(total_text_max, caption_max + m_imgui->calc_text_size(m_desc.at(t)).x); - } - caption_max += m_imgui->scaled(1.f); - total_text_max += m_imgui->scaled(1.f); - - float window_width = minimal_slider_width + std::max(cursor_slider_left, clipping_slider_left); - window_width = std::max(window_width, total_text_max); - window_width = std::max(window_width, button_width); - - auto draw_text_with_caption = [this, &caption_max](const wxString& caption, const wxString& text) { - static const ImVec4 ORANGE(1.0f, 0.49f, 0.22f, 1.0f); - ImGui::PushStyleColor(ImGuiCol_Text, ORANGE); - m_imgui->text(caption); - ImGui::PopStyleColor(); - ImGui::SameLine(caption_max); - m_imgui->text(text); - }; - - for (const std::string& t : {"enforce", "block", "remove"}) - draw_text_with_caption(m_desc.at(t + "_caption"), m_desc.at(t)); - - m_imgui->text(""); - - if (m_imgui->button("Autoset by angle...")) { - m_setting_angle = true; - } - - ImGui::SameLine(); - - if (m_imgui->button(m_desc.at("remove_all"))) { - ModelObject* mo = m_c->selection_info()->model_object(); - int idx = -1; - for (ModelVolume* mv : mo->volumes) { - ++idx; - if (mv->is_model_part()) { - m_selected_facets[idx].assign(m_selected_facets[idx].size(), FacetSupportType::NONE); - mv->m_supported_facets.clear(); - update_vertex_buffers(&mv->mesh(), idx, FacetSupportType::ENFORCER); - update_vertex_buffers(&mv->mesh(), idx, FacetSupportType::BLOCKER); - m_parent.set_as_dirty(); - } - } - } - - const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; - - m_imgui->text(m_desc.at("cursor_size")); - ImGui::SameLine(clipping_slider_left); - ImGui::PushItemWidth(window_width - clipping_slider_left); - ImGui::SliderFloat(" ", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f"); - if (ImGui::IsItemHovered()) { - ImGui::BeginTooltip(); - ImGui::PushTextWrapPos(max_tooltip_width); - ImGui::TextUnformatted(_L("Alt + Mouse wheel").ToUTF8().data()); - ImGui::PopTextWrapPos(); - ImGui::EndTooltip(); - } - - ImGui::Separator(); - if (m_c->object_clipper()->get_position() == 0.f) - m_imgui->text(m_desc.at("clipping_of_view")); - else { - if (m_imgui->button(m_desc.at("reset_direction"))) { - wxGetApp().CallAfter([this](){ - m_c->object_clipper()->set_position(-1., false); - }); - } - } - - ImGui::SameLine(clipping_slider_left); - ImGui::PushItemWidth(window_width - clipping_slider_left); - float clp_dist = m_c->object_clipper()->get_position(); - if (ImGui::SliderFloat(" ", &clp_dist, 0.f, 1.f, "%.2f")) - m_c->object_clipper()->set_position(clp_dist, true); - if (ImGui::IsItemHovered()) { - ImGui::BeginTooltip(); - ImGui::PushTextWrapPos(max_tooltip_width); - ImGui::TextUnformatted(_L("Ctrl + Mouse wheel").ToUTF8().data()); - ImGui::PopTextWrapPos(); - ImGui::EndTooltip(); - } - - m_imgui->end(); - if (m_setting_angle) { - m_parent.show_slope(false); - m_parent.set_slope_range({90.f - m_angle_threshold_deg, 90.f - m_angle_threshold_deg}); - m_parent.use_slope(true); - m_parent.set_as_dirty(); - } + bool updated = false; + ModelObject* mo = m_c->selection_info()->model_object(); + int idx = -1; + for (ModelVolume* mv : mo->volumes) { + if (! mv->is_model_part()) + continue; + ++idx; + updated |= mv->supported_facets.set(*m_triangle_selectors[idx].get()); } - else { - std::string name = "Autoset custom supports"; - m_imgui->begin(wxString(name), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); - m_imgui->text("Threshold:"); - ImGui::SameLine(); - if (m_imgui->slider_float("", &m_angle_threshold_deg, 0.f, 90.f, "%.f")) - m_parent.set_slope_range({90.f - m_angle_threshold_deg, 90.f - m_angle_threshold_deg}); - m_imgui->checkbox(wxString("Overwrite already selected facets"), m_overwrite_selected); - if (m_imgui->button("Enforce")) - select_facets_by_angle(m_angle_threshold_deg, m_overwrite_selected, false); - ImGui::SameLine(); - if (m_imgui->button("Block")) - select_facets_by_angle(m_angle_threshold_deg, m_overwrite_selected, true); - ImGui::SameLine(); - if (m_imgui->button("Cancel")) - m_setting_angle = false; - m_imgui->end(); - if (! m_setting_angle) { - m_parent.use_slope(false); - m_parent.set_as_dirty(); - } + + if (updated) + m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); +} + + + +void GLGizmoFdmSupports::update_from_model_object() +{ + wxBusyCursor wait; + + const ModelObject* mo = m_c->selection_info()->model_object(); + m_triangle_selectors.clear(); + + int volume_id = -1; + for (const ModelVolume* mv : mo->volumes) { + if (! mv->is_model_part()) + continue; + + ++volume_id; + + // This mesh does not account for the possible Z up SLA offset. + const TriangleMesh* mesh = &mv->mesh(); + + m_triangle_selectors.emplace_back(std::make_unique(*mesh)); + m_triangle_selectors.back()->deserialize(mv->supported_facets.get_data()); } } -bool GLGizmoFdmSupports::on_is_activable() const + + +PainterGizmoType GLGizmoFdmSupports::get_painter_type() const { - const Selection& selection = m_parent.get_selection(); - - if (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptFFF - || !selection.is_single_full_instance()) - return false; - - // Check that none of the selected volumes is outside. Only SLA auxiliaries (supports) are allowed outside. - const Selection::IndicesList& list = selection.get_volume_idxs(); - for (const auto& idx : list) - if (selection.get_volume(idx)->is_outside) - return false; - - return true; + return PainterGizmoType::FDM_SUPPORTS; } -bool GLGizmoFdmSupports::on_is_selectable() const -{ - return (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptFFF ); -} - -std::string GLGizmoFdmSupports::on_get_name() const -{ - return (_(L("FDM Support Editing")) + " [L]").ToUTF8().data(); -} - - -CommonGizmosDataID GLGizmoFdmSupports::on_get_requirements() const -{ - return CommonGizmosDataID( - int(CommonGizmosDataID::SelectionInfo) - | int(CommonGizmosDataID::InstancesHider) - | int(CommonGizmosDataID::Raycaster) - | int(CommonGizmosDataID::HollowedMesh) - | int(CommonGizmosDataID::ObjectClipper) - | int(CommonGizmosDataID::SupportsClipper)); -} - - -void GLGizmoFdmSupports::on_set_state() -{ - if (m_state == m_old_state) - return; - - if (m_state == On && m_old_state != On) { // the gizmo was just turned on - if (! m_parent.get_gizmos_manager().is_serializing()) { - wxGetApp().CallAfter([this]() { - activate_internal_undo_redo_stack(true); - }); - } - } - if (m_state == Off && m_old_state != Off) { // the gizmo was just turned Off - // we are actually shutting down - if (m_setting_angle) { - m_setting_angle = false; - m_parent.use_slope(false); - } - activate_internal_undo_redo_stack(false); - m_old_mo_id = -1; - m_ivas.clear(); - m_selected_facets.clear(); - } - m_old_state = m_state; -} - - - -void GLGizmoFdmSupports::on_start_dragging() -{ - -} - - -void GLGizmoFdmSupports::on_stop_dragging() -{ - -} - - - -void GLGizmoFdmSupports::on_load(cereal::BinaryInputArchive&) -{ - // We should update the gizmo from current ModelObject, but it is not - // possible at this point. That would require having updated selection and - // common gizmos data, which is not done at this point. Instead, save - // a flag to do the update in set_fdm_support_data, which will be called - // soon after. - m_schedule_update = true; -} - - - -void GLGizmoFdmSupports::on_save(cereal::BinaryOutputArchive&) const -{ - -} - - } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index c4f5b153ec..fc97707873 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -1,111 +1,47 @@ #ifndef slic3r_GLGizmoFdmSupports_hpp_ #define slic3r_GLGizmoFdmSupports_hpp_ -#include "GLGizmoBase.hpp" - -#include "slic3r/GUI/3DScene.hpp" - -#include "libslic3r/ObjectID.hpp" - -#include - +#include "GLGizmoPainterBase.hpp" namespace Slic3r { -enum class FacetSupportType : int8_t; - namespace GUI { -enum class SLAGizmoEventType : unsigned char; -class ClippingPlane; - -class GLGizmoFdmSupports : public GLGizmoBase +class GLGizmoFdmSupports : public GLGizmoPainterBase { -private: - ObjectID m_old_mo_id; - size_t m_old_volumes_size = 0; - - GLUquadricObj* m_quadric; - - float m_cursor_radius = 2.f; - static constexpr float CursorRadiusMin = 0.f; - static constexpr float CursorRadiusMax = 8.f; - static constexpr float CursorRadiusStep = 0.2f; - - // For each model-part volume, store a list of statuses of - // individual facets (one of the enum values above). - std::vector> m_selected_facets; - - // Vertex buffer arrays for each model-part volume. There is a vector of - // arrays so that adding triangles can be done without regenerating all - // other triangles. Enforcers and blockers are of course separate. - std::vector, 2>> m_ivas; - - void update_vertex_buffers(const TriangleMesh* mesh, - int mesh_id, - FacetSupportType type, // enforcers / blockers - const std::vector* new_facets = nullptr); // nullptr -> regenerate all - - public: - GLGizmoFdmSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); - ~GLGizmoFdmSupports() override; - void set_fdm_support_data(ModelObject* model_object, const Selection& selection); - bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down); + GLGizmoFdmSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoPainterBase(parent, icon_filename, sprite_id) {} + void render_painter_gizmo() const override; + +protected: + void on_render_input_window(float x, float y, float bottom_limit) override; + std::string on_get_name() const override; private: bool on_init() override; - void on_render() const override; - void on_render_for_picking() const override {} - void render_triangles(const Selection& selection) const; - void render_cursor_circle() const; + void update_model_object() const override; + void update_from_model_object() override; - void update_model_object() const; - void update_from_model_object(); - void activate_internal_undo_redo_stack(bool activate); + void on_opening() override {} + void on_shutdown() override; + PainterGizmoType get_painter_type() const override; - void select_facets_by_angle(float threshold, bool overwrite, bool block); - bool m_overwrite_selected = false; + void select_facets_by_angle(float threshold, bool block); float m_angle_threshold_deg = 45.f; - - bool is_mesh_point_clipped(const Vec3d& point) const; - - float m_clipping_plane_distance = 0.f; - std::unique_ptr m_clipping_plane; bool m_setting_angle = false; - bool m_internal_stack_active = false; - bool m_schedule_update = false; // This map holds all translated description texts, so they can be easily referenced during layout calculations // etc. When language changes, GUI is recreated and this class constructed again, so the change takes effect. std::map m_desc; - - enum class Button { - None, - Left, - Right - }; - - Button m_button_down = Button::None; - EState m_old_state = Off; // to be able to see that the gizmo has just been closed (see on_set_state) - -protected: - void on_set_state() override; - void on_start_dragging() override; - void on_stop_dragging() override; - void on_render_input_window(float x, float y, float bottom_limit) override; - std::string on_get_name() const override; - bool on_is_activable() const override; - bool on_is_selectable() const override; - void on_load(cereal::BinaryInputArchive& ar) override; - void on_save(cereal::BinaryOutputArchive& ar) const override; - CommonGizmosDataID on_get_requirements() const override; }; + } // namespace GUI } // namespace Slic3r + #endif // slic3r_GLGizmoFdmSupports_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index c9e8b9d2ba..fc5edff6d0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -28,7 +28,6 @@ bool GLGizmoFlatten::on_init() void GLGizmoFlatten::on_set_state() { - } CommonGizmosDataID GLGizmoFlatten::on_get_requirements() const @@ -38,7 +37,7 @@ CommonGizmosDataID GLGizmoFlatten::on_get_requirements() const std::string GLGizmoFlatten::on_get_name() const { - return (_(L("Place on face")) + " [F]").ToUTF8().data(); + return (_L("Place on face") + " [F]").ToUTF8().data(); } bool GLGizmoFlatten::on_is_activable() const @@ -48,8 +47,7 @@ bool GLGizmoFlatten::on_is_activable() const void GLGizmoFlatten::on_start_dragging() { - if (m_hover_id != -1) - { + if (m_hover_id != -1) { assert(m_planes_valid); m_normal = m_planes[m_hover_id].normal; m_starting_center = m_parent.get_selection().get_bounding_box().center(); @@ -65,16 +63,14 @@ void GLGizmoFlatten::on_render() const glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glEnable(GL_BLEND)); - if (selection.is_single_full_instance()) - { + if (selection.is_single_full_instance()) { const Transform3d& m = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(); glsafe(::glPushMatrix()); glsafe(::glTranslatef(0.f, 0.f, selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z())); glsafe(::glMultMatrixd(m.data())); if (this->is_plane_update_necessary()) const_cast(this)->update_planes(); - for (int i = 0; i < (int)m_planes.size(); ++i) - { + for (int i = 0; i < (int)m_planes.size(); ++i) { if (i == m_hover_id) glsafe(::glColor4f(0.9f, 0.9f, 0.9f, 0.75f)); else @@ -97,16 +93,14 @@ void GLGizmoFlatten::on_render_for_picking() const glsafe(::glDisable(GL_DEPTH_TEST)); glsafe(::glDisable(GL_BLEND)); - if (selection.is_single_full_instance()) - { + if (selection.is_single_full_instance() && !wxGetKeyState(WXK_CONTROL)) { const Transform3d& m = selection.get_volume(*selection.get_volume_idxs().begin())->get_instance_transformation().get_matrix(); glsafe(::glPushMatrix()); glsafe(::glTranslatef(0.f, 0.f, selection.get_volume(*selection.get_volume_idxs().begin())->get_sla_shift_z())); glsafe(::glMultMatrixd(m.data())); if (this->is_plane_update_necessary()) const_cast(this)->update_planes(); - for (int i = 0; i < (int)m_planes.size(); ++i) - { + for (int i = 0; i < (int)m_planes.size(); ++i) { glsafe(::glColor4fv(picking_color_component(i).data())); m_planes[i].vbo.render(); } @@ -129,8 +123,7 @@ void GLGizmoFlatten::update_planes() { const ModelObject* mo = m_c->selection_info()->model_object(); TriangleMesh ch; - for (const ModelVolume* vol : mo->volumes) - { + for (const ModelVolume* vol : mo->volumes) { if (vol->type() != ModelVolumeType::MODEL_PART) continue; TriangleMesh vol_ch = vol->get_convex_hull(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index 658db64cab..3d0d9c79ad 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -9,7 +9,7 @@ #include "slic3r/GUI/GUI_ObjectSettings.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/Plater.hpp" -#include "slic3r/GUI/PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/Model.hpp" @@ -130,7 +130,7 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) cons const sla::DrainHole& drain_hole = drain_holes[i]; const bool& point_selected = m_selected[i]; - if (is_mesh_point_clipped((drain_hole.pos+HoleStickOutLength*drain_hole.normal).cast())) + if (is_mesh_point_clipped(drain_hole.pos.cast())) continue; // First decide about the color of the point. @@ -174,10 +174,10 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) cons glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis()(0), aa.axis()(1), aa.axis()(2))); glsafe(::glPushMatrix()); glsafe(::glTranslated(0., 0., -drain_hole.height)); - ::gluCylinder(m_quadric, drain_hole.radius, drain_hole.radius, drain_hole.height, 24, 1); - glsafe(::glTranslated(0., 0., drain_hole.height)); + ::gluCylinder(m_quadric, drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength, 24, 1); + glsafe(::glTranslated(0., 0., drain_hole.height + sla::HoleStickOutLength)); ::gluDisk(m_quadric, 0.0, drain_hole.radius, 24, 1); - glsafe(::glTranslated(0., 0., -drain_hole.height)); + glsafe(::glTranslated(0., 0., -drain_hole.height - sla::HoleStickOutLength)); glsafe(::glRotatef(180.f, 1.f, 0.f, 0.f)); ::gluDisk(m_quadric, 0.0, drain_hole.radius, 24, 1); glsafe(::glPopMatrix()); @@ -307,13 +307,8 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos if (unproject_on_mesh(mouse_position, pos_and_normal)) { // we got an intersection Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Add drainage hole"))); - Vec3d scaling = mo->instances[active_inst]->get_scaling_factor(); - Vec3f normal_transformed(pos_and_normal.second(0)/scaling(0), - pos_and_normal.second(1)/scaling(1), - pos_and_normal.second(2)/scaling(2)); - - mo->sla_drain_holes.emplace_back(pos_and_normal.first + HoleStickOutLength * pos_and_normal.second/* normal_transformed.normalized()*/, - -pos_and_normal.second, m_new_hole_radius, m_new_hole_height); + mo->sla_drain_holes.emplace_back(pos_and_normal.first, + -pos_and_normal.second, m_new_hole_radius, m_new_hole_height); m_selected.push_back(false); assert(m_selected.size() == mo->sla_drain_holes.size()); m_parent.set_as_dirty(); @@ -447,7 +442,7 @@ void GLGizmoHollow::on_update(const UpdateData& data) std::pair pos_and_normal; if (! unproject_on_mesh(data.mouse_pos.cast(), pos_and_normal)) return; - drain_holes[m_hover_id].pos = pos_and_normal.first + HoleStickOutLength * pos_and_normal.second; + drain_holes[m_hover_id].pos = pos_and_normal.first; drain_holes[m_hover_id].normal = -pos_and_normal.second; } } @@ -471,7 +466,7 @@ GLGizmoHollow::get_config_options(const std::vector& keys) const if (! mo) return out; - const DynamicPrintConfig& object_cfg = mo->config; + const DynamicPrintConfig& object_cfg = mo->config.get(); const DynamicPrintConfig& print_cfg = wxGetApp().preset_bundle->sla_prints.get_edited_preset().config; std::unique_ptr default_cfg = nullptr; @@ -561,7 +556,7 @@ RENDER_AGAIN: auto opts = get_config_options({"hollowing_enable"}); m_enable_hollowing = static_cast(opts[0].first)->value; if (m_imgui->checkbox(m_desc["enable"], m_enable_hollowing)) { - mo->config.opt("hollowing_enable", true)->value = m_enable_hollowing; + mo->config.set("hollowing_enable", m_enable_hollowing); wxGetApp().obj_list()->update_and_show_object_settings_item(); config_changed = true; } @@ -623,14 +618,14 @@ RENDER_AGAIN: } if (slider_edited || slider_released) { if (slider_released) { - mo->config.opt("hollowing_min_thickness", true)->value = m_offset_stash; - mo->config.opt("hollowing_quality", true)->value = m_quality_stash; - mo->config.opt("hollowing_closing_distance", true)->value = m_closing_d_stash; + mo->config.set("hollowing_min_thickness", m_offset_stash); + mo->config.set("hollowing_quality", m_quality_stash); + mo->config.set("hollowing_closing_distance", m_closing_d_stash); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Hollowing parameter change"))); } - mo->config.opt("hollowing_min_thickness", true)->value = offset; - mo->config.opt("hollowing_quality", true)->value = quality; - mo->config.opt("hollowing_closing_distance", true)->value = closing_d; + mo->config.set("hollowing_min_thickness", offset); + mo->config.set("hollowing_quality", quality); + mo->config.set("hollowing_closing_distance", closing_d); if (slider_released) { wxGetApp().obj_list()->update_and_show_object_settings_item(); config_changed = true; @@ -661,9 +656,7 @@ RENDER_AGAIN: m_imgui->text(m_desc["hole_depth"]); ImGui::SameLine(diameter_slider_left); - m_new_hole_height -= HoleStickOutLength; ImGui::SliderFloat(" ", &m_new_hole_height, 0.f, 10.f, "%.1f mm"); - m_new_hole_height += HoleStickOutLength; clicked |= ImGui::IsItemClicked(); edited |= ImGui::IsItemEdited(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp new file mode 100644 index 0000000000..5c7ca189be --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -0,0 +1,667 @@ +// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. +#include "GLGizmoPainterBase.hpp" +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" + +#include + +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Camera.hpp" +#include "slic3r/GUI/Plater.hpp" +#include "libslic3r/PresetBundle.hpp" +#include "libslic3r/Model.hpp" + + + +namespace Slic3r { +namespace GUI { + + +GLGizmoPainterBase::GLGizmoPainterBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoBase(parent, icon_filename, sprite_id) +{ + // Make sphere and save it into a vertex buffer. + const TriangleMesh sphere_mesh = make_sphere(1., (2*M_PI)/24.); + for (size_t i=0; i(), + sphere_mesh.stl.facet_start[i].normal.cast()); + for (const stl_triangle_vertex_indices& indices : sphere_mesh.its.indices) + m_vbo_sphere.push_triangle(indices(0), indices(1), indices(2)); + m_vbo_sphere.finalize_geometry(true); +} + + + +void GLGizmoPainterBase::activate_internal_undo_redo_stack(bool activate) +{ + if (activate && ! m_internal_stack_active) { + wxString str = get_painter_type() == PainterGizmoType::FDM_SUPPORTS + ? _L("Supports gizmo turned on") + : _L("Seam gizmo turned on"); + Plater::TakeSnapshot(wxGetApp().plater(), str); + wxGetApp().plater()->enter_gizmos_stack(); + m_internal_stack_active = true; + } + if (! activate && m_internal_stack_active) { + wxString str = get_painter_type() == PainterGizmoType::SEAM + ? _L("Seam gizmo turned off") + : _L("Supports gizmo turned off"); + wxGetApp().plater()->leave_gizmos_stack(); + Plater::TakeSnapshot(wxGetApp().plater(), str); + m_internal_stack_active = false; + } +} + + + +void GLGizmoPainterBase::set_painter_gizmo_data(const Selection& selection) +{ + if (m_state != On) + return; + + const ModelObject* mo = m_c->selection_info() ? m_c->selection_info()->model_object() : nullptr; + + if (mo && selection.is_from_single_instance() + && (m_schedule_update || mo->id() != m_old_mo_id || mo->volumes.size() != m_old_volumes_size)) + { + update_from_model_object(); + m_old_mo_id = mo->id(); + m_old_volumes_size = mo->volumes.size(); + m_schedule_update = false; + } +} + + + +void GLGizmoPainterBase::render_triangles(const Selection& selection) const +{ + const ModelObject* mo = m_c->selection_info()->model_object(); + + glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); + ScopeGuard offset_fill_guard([]() { glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); } ); + glsafe(::glPolygonOffset(-5.0, -5.0)); + + // Take care of the clipping plane. The normal of the clipping plane is + // saved with opposite sign than we need to pass to OpenGL (FIXME) + bool clipping_plane_active = m_c->object_clipper()->get_position() != 0.; + if (clipping_plane_active) { + const ClippingPlane* clp = m_c->object_clipper()->get_clipping_plane(); + double clp_data[4]; + memcpy(clp_data, clp->get_data(), 4 * sizeof(double)); + for (int i=0; i<3; ++i) + clp_data[i] = -1. * clp_data[i]; + + glsafe(::glClipPlane(GL_CLIP_PLANE0, (GLdouble*)clp_data)); + glsafe(::glEnable(GL_CLIP_PLANE0)); + } + + int mesh_id = -1; + for (const ModelVolume* mv : mo->volumes) { + if (! mv->is_model_part()) + continue; + + ++mesh_id; + + const Transform3d trafo_matrix = + mo->instances[selection.get_instance_idx()]->get_transformation().get_matrix() * + mv->get_matrix(); + + bool is_left_handed = trafo_matrix.matrix().determinant() < 0.; + if (is_left_handed) + glsafe(::glFrontFace(GL_CW)); + + glsafe(::glPushMatrix()); + glsafe(::glMultMatrixd(trafo_matrix.data())); + + m_triangle_selectors[mesh_id]->render(m_imgui); + + glsafe(::glPopMatrix()); + if (is_left_handed) + glsafe(::glFrontFace(GL_CCW)); + } + if (clipping_plane_active) + glsafe(::glDisable(GL_CLIP_PLANE0)); +} + + +void GLGizmoPainterBase::render_cursor() const +{ + // First check that the mouse pointer is on an object. + const ModelObject* mo = m_c->selection_info()->model_object(); + const Selection& selection = m_parent.get_selection(); + const ModelInstance* mi = mo->instances[selection.get_instance_idx()]; + const Camera& camera = wxGetApp().plater()->get_camera(); + + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + for (const ModelVolume* mv : mo->volumes) { + if (mv->is_model_part()) + trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); + } + // Raycast and return if there's no hit. + update_raycast_cache(m_parent.get_local_mouse_position(), camera, trafo_matrices); + if (m_rr.mesh_id == -1) + return; + + + if (m_cursor_type == TriangleSelector::SPHERE) + render_cursor_sphere(trafo_matrices[m_rr.mesh_id]); + else + render_cursor_circle(); +} + + + +void GLGizmoPainterBase::render_cursor_circle() const +{ + const Camera& camera = wxGetApp().plater()->get_camera(); + float zoom = (float)camera.get_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; + + Size cnv_size = m_parent.get_canvas_size(); + float cnv_half_width = 0.5f * (float)cnv_size.get_width(); + float cnv_half_height = 0.5f * (float)cnv_size.get_height(); + if ((cnv_half_width == 0.0f) || (cnv_half_height == 0.0f)) + return; + Vec2d mouse_pos(m_parent.get_local_mouse_position()(0), m_parent.get_local_mouse_position()(1)); + Vec2d center(mouse_pos(0) - cnv_half_width, cnv_half_height - mouse_pos(1)); + center = center * inv_zoom; + + glsafe(::glLineWidth(1.5f)); + float color[3]; + color[0] = 0.f; + color[1] = 1.f; + color[2] = 0.3f; + glsafe(::glColor3fv(color)); + glsafe(::glDisable(GL_DEPTH_TEST)); + + glsafe(::glPushMatrix()); + glsafe(::glLoadIdentity()); + // ensure that the circle is renderered inside the frustrum + glsafe(::glTranslated(0.0, 0.0, -(camera.get_near_z() + 0.5))); + // ensure that the overlay fits the frustrum near z plane + double gui_scale = camera.get_gui_scale(); + glsafe(::glScaled(gui_scale, gui_scale, 1.0)); + + glsafe(::glPushAttrib(GL_ENABLE_BIT)); + glsafe(::glLineStipple(4, 0xAAAA)); + glsafe(::glEnable(GL_LINE_STIPPLE)); + + ::glBegin(GL_LINE_LOOP); + for (double angle=0; angle<2*M_PI; angle+=M_PI/20.) + ::glVertex2f(GLfloat(center.x()+m_cursor_radius*cos(angle)), GLfloat(center.y()+m_cursor_radius*sin(angle))); + glsafe(::glEnd()); + + glsafe(::glPopAttrib()); + glsafe(::glPopMatrix()); + glsafe(::glEnable(GL_DEPTH_TEST)); +} + + +void GLGizmoPainterBase::render_cursor_sphere(const Transform3d& trafo) const +{ + const Transform3d complete_scaling_matrix_inverse = Geometry::Transformation(trafo).get_matrix(true, true, false, true).inverse(); + const bool is_left_handed = Geometry::Transformation(trafo).is_left_handed(); + + glsafe(::glPushMatrix()); + glsafe(::glMultMatrixd(trafo.data())); + // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. + glsafe(::glTranslatef(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2))); + glsafe(::glMultMatrixd(complete_scaling_matrix_inverse.data())); + glsafe(::glScaled(m_cursor_radius, m_cursor_radius, m_cursor_radius)); + + if (is_left_handed) + glFrontFace(GL_CW); + + float render_color[4] = { 0.f, 0.f, 0.f, 0.25f }; + if (m_button_down == Button::Left) + render_color[2] = 1.f; + else if (m_button_down == Button::Right) + render_color[0] = 1.f; + glsafe(::glColor4fv(render_color)); + + m_vbo_sphere.render(); + + if (is_left_handed) + glFrontFace(GL_CCW); + + glsafe(::glPopMatrix()); +} + + +bool GLGizmoPainterBase::is_mesh_point_clipped(const Vec3d& point, const Transform3d& trafo) const +{ + if (m_c->object_clipper()->get_position() == 0.) + return false; + + auto sel_info = m_c->selection_info(); + Vec3d transformed_point = trafo * point; + transformed_point(2) += sel_info->get_sla_shift(); + return m_c->object_clipper()->get_clipping_plane()->is_point_clipped(transformed_point); +} + + +// Following function is called from GLCanvas3D to inform the gizmo about a mouse/keyboard event. +// The gizmo has an opportunity to react - if it does, it should return true so that the Canvas3D is +// aware that the event was reacted to and stops trying to make different sense of it. If the gizmo +// concludes that the event was not intended for it, it should return false. +bool GLGizmoPainterBase::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down) +{ + if (action == SLAGizmoEventType::MouseWheelUp + || action == SLAGizmoEventType::MouseWheelDown) { + if (control_down) { + double pos = m_c->object_clipper()->get_position(); + pos = action == SLAGizmoEventType::MouseWheelDown + ? std::max(0., pos - 0.01) + : std::min(1., pos + 0.01); + m_c->object_clipper()->set_position(pos, true); + return true; + } + else if (alt_down) { + m_cursor_radius = action == SLAGizmoEventType::MouseWheelDown + ? std::max(m_cursor_radius - CursorRadiusStep, CursorRadiusMin) + : std::min(m_cursor_radius + CursorRadiusStep, CursorRadiusMax); + m_parent.set_as_dirty(); + return true; + } + } + + if (action == SLAGizmoEventType::ResetClippingPlane) { + m_c->object_clipper()->set_position(-1., false); + return true; + } + + if (action == SLAGizmoEventType::LeftDown + || action == SLAGizmoEventType::RightDown + || (action == SLAGizmoEventType::Dragging && m_button_down != Button::None)) { + + if (m_triangle_selectors.empty()) + return false; + + EnforcerBlockerType new_state = EnforcerBlockerType::NONE; + if (! shift_down) { + if (action == SLAGizmoEventType::Dragging) + new_state = m_button_down == Button::Left + ? EnforcerBlockerType::ENFORCER + : EnforcerBlockerType::BLOCKER; + else + new_state = action == SLAGizmoEventType::LeftDown + ? EnforcerBlockerType::ENFORCER + : EnforcerBlockerType::BLOCKER; + } + + const Camera& camera = wxGetApp().plater()->get_camera(); + const Selection& selection = m_parent.get_selection(); + const ModelObject* mo = m_c->selection_info()->model_object(); + const ModelInstance* mi = mo->instances[selection.get_instance_idx()]; + const Transform3d& instance_trafo = mi->get_transformation().get_matrix(); + + // List of mouse positions that will be used as seeds for painting. + std::vector mouse_positions{mouse_position}; + + // In case current mouse position is far from the last one, + // add several positions from between into the list, so there + // are no gaps in the painted region. + { + if (m_last_mouse_click == Vec2d::Zero()) + m_last_mouse_click = mouse_position; + // resolution describes minimal distance limit using circle radius + // as a unit (e.g., 2 would mean the patches will be touching). + double resolution = 0.7; + double diameter_px = resolution * m_cursor_radius * camera.get_zoom(); + int patches_in_between = int(((mouse_position - m_last_mouse_click).norm() - diameter_px) / diameter_px); + if (patches_in_between > 0) { + Vec2d diff = (mouse_position - m_last_mouse_click)/(patches_in_between+1); + for (int i=1; i<=patches_in_between; ++i) + mouse_positions.emplace_back(m_last_mouse_click + i*diff); + } + } + m_last_mouse_click = Vec2d::Zero(); // only actual hits should be saved + + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + for (const ModelVolume* mv : mo->volumes) { + if (mv->is_model_part()) + trafo_matrices.emplace_back(instance_trafo * mv->get_matrix()); + } + + // Now "click" into all the prepared points and spill paint around them. + for (const Vec2d& mp : mouse_positions) { + update_raycast_cache(mp, camera, trafo_matrices); + + bool dragging_while_painting = (action == SLAGizmoEventType::Dragging && m_button_down != Button::None); + + // The mouse button click detection is enabled when there is a valid hit. + // Missing the object entirely + // shall not capture the mouse. + if (m_rr.mesh_id != -1) { + if (m_button_down == Button::None) + m_button_down = ((action == SLAGizmoEventType::LeftDown) ? Button::Left : Button::Right); + } + + if (m_rr.mesh_id == -1) { + // In case we have no valid hit, we can return. The event will be stopped when + // dragging while painting (to prevent scene rotations and moving the object) + return dragging_while_painting; + } + + const Transform3d& trafo_matrix = trafo_matrices[m_rr.mesh_id]; + + // Calculate direction from camera to the hit (in mesh coords): + Vec3f camera_pos = (trafo_matrix.inverse() * camera.get_position()).cast(); + + assert(m_rr.mesh_id < int(m_triangle_selectors.size())); + m_triangle_selectors[m_rr.mesh_id]->select_patch(m_rr.hit, m_rr.facet, camera_pos, + m_cursor_radius, m_cursor_type, new_state, trafo_matrix); + m_last_mouse_click = mouse_position; + } + + return true; + } + + if ((action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::RightUp) + && m_button_down != Button::None) { + // Take snapshot and update ModelVolume data. + wxString action_name; + if (get_painter_type() == PainterGizmoType::FDM_SUPPORTS) { + if (shift_down) + action_name = _L("Remove selection"); + else { + if (m_button_down == Button::Left) + action_name = _L("Add supports"); + else + action_name = _L("Block supports"); + } + } + if (get_painter_type() == PainterGizmoType::SEAM) { + if (shift_down) + action_name = _L("Remove selection"); + else { + if (m_button_down == Button::Left) + action_name = _L("Enforce seam"); + else + action_name = _L("Block seam"); + } + } + + activate_internal_undo_redo_stack(true); + Plater::TakeSnapshot(wxGetApp().plater(), action_name); + update_model_object(); + + m_button_down = Button::None; + m_last_mouse_click = Vec2d::Zero(); + return true; + } + + return false; +} + + + +void GLGizmoPainterBase::update_raycast_cache(const Vec2d& mouse_position, + const Camera& camera, + const std::vector& trafo_matrices) const +{ + if (m_rr.mouse_position == mouse_position) { + // Same query as last time - the answer is already in the cache. + return; + } + + Vec3f normal = Vec3f::Zero(); + Vec3f hit = Vec3f::Zero(); + size_t facet = 0; + Vec3f closest_hit = Vec3f::Zero(); + double closest_hit_squared_distance = std::numeric_limits::max(); + size_t closest_facet = 0; + int closest_hit_mesh_id = -1; + + // Cast a ray on all meshes, pick the closest hit and save it for the respective mesh + for (int mesh_id = 0; mesh_id < int(trafo_matrices.size()); ++mesh_id) { + + if (m_c->raycaster()->raycasters()[mesh_id]->unproject_on_mesh( + mouse_position, + trafo_matrices[mesh_id], + camera, + hit, + normal, + m_c->object_clipper()->get_clipping_plane(), + &facet)) + { + // In case this hit is clipped, skip it. + if (is_mesh_point_clipped(hit.cast(), trafo_matrices[mesh_id])) + continue; + + // Is this hit the closest to the camera so far? + double hit_squared_distance = (camera.get_position()-trafo_matrices[mesh_id]*hit.cast()).squaredNorm(); + if (hit_squared_distance < closest_hit_squared_distance) { + closest_hit_squared_distance = hit_squared_distance; + closest_facet = facet; + closest_hit_mesh_id = mesh_id; + closest_hit = hit; + } + } + } + + m_rr = {mouse_position, closest_hit_mesh_id, closest_hit, closest_facet}; +} + +bool GLGizmoPainterBase::on_is_activable() const +{ + const Selection& selection = m_parent.get_selection(); + + if (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptFFF + || !selection.is_single_full_instance()) + return false; + + // Check that none of the selected volumes is outside. Only SLA auxiliaries (supports) are allowed outside. + const Selection::IndicesList& list = selection.get_volume_idxs(); + for (const auto& idx : list) + if (selection.get_volume(idx)->is_outside) + return false; + + return true; +} + +bool GLGizmoPainterBase::on_is_selectable() const +{ + return (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptFFF + && wxGetApp().get_mode() != comSimple ); +} + + +CommonGizmosDataID GLGizmoPainterBase::on_get_requirements() const +{ + return CommonGizmosDataID( + int(CommonGizmosDataID::SelectionInfo) + | int(CommonGizmosDataID::InstancesHider) + | int(CommonGizmosDataID::Raycaster) + | int(CommonGizmosDataID::ObjectClipper)); +} + + +void GLGizmoPainterBase::on_set_state() +{ + if (m_state == m_old_state) + return; + + if (m_state == On && m_old_state != On) { // the gizmo was just turned on + on_opening(); + if (! m_parent.get_gizmos_manager().is_serializing()) { + wxGetApp().CallAfter([this]() { + activate_internal_undo_redo_stack(true); + }); + } + } + if (m_state == Off && m_old_state != Off) { // the gizmo was just turned Off + // we are actually shutting down + on_shutdown(); + activate_internal_undo_redo_stack(false); + m_old_mo_id = -1; + //m_iva.release_geometry(); + m_triangle_selectors.clear(); + } + m_old_state = m_state; +} + + + +void GLGizmoPainterBase::on_load(cereal::BinaryInputArchive&) +{ + // We should update the gizmo from current ModelObject, but it is not + // possible at this point. That would require having updated selection and + // common gizmos data, which is not done at this point. Instead, save + // a flag to do the update in set_painter_gizmo_data, which will be called + // soon after. + m_schedule_update = true; +} + + + +void TriangleSelectorGUI::render(ImGuiWrapper* imgui) +{ + int enf_cnt = 0; + int blc_cnt = 0; + + m_iva_enforcers.release_geometry(); + m_iva_blockers.release_geometry(); + + for (const Triangle& tr : m_triangles) { + if (! tr.valid || tr.is_split() || tr.get_state() == EnforcerBlockerType::NONE) + continue; + + GLIndexedVertexArray& va = tr.get_state() == EnforcerBlockerType::ENFORCER + ? m_iva_enforcers + : m_iva_blockers; + int& cnt = tr.get_state() == EnforcerBlockerType::ENFORCER + ? enf_cnt + : blc_cnt; + + for (int i=0; i<3; ++i) + va.push_geometry(double(m_vertices[tr.verts_idxs[i]].v[0]), + double(m_vertices[tr.verts_idxs[i]].v[1]), + double(m_vertices[tr.verts_idxs[i]].v[2]), + 0., 0., 1.); + va.push_triangle(cnt, + cnt+1, + cnt+2); + cnt += 3; + } + + m_iva_enforcers.finalize_geometry(true); + m_iva_blockers.finalize_geometry(true); + + if (m_iva_enforcers.has_VBOs()) { + ::glColor4f(0.f, 0.f, 1.f, 0.4f); + m_iva_enforcers.render(); + } + + + if (m_iva_blockers.has_VBOs()) { + ::glColor4f(1.f, 0.f, 0.f, 0.4f); + m_iva_blockers.render(); + } + + +#ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG + if (imgui) + render_debug(imgui); + else + assert(false); // If you want debug output, pass ptr to ImGuiWrapper. +#endif +} + + + +#ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG +void TriangleSelectorGUI::render_debug(ImGuiWrapper* imgui) +{ + imgui->begin(std::string("TriangleSelector dialog (DEV ONLY)"), + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); + static float edge_limit = 1.f; + imgui->text("Edge limit (mm): "); + imgui->slider_float("", &edge_limit, 0.1f, 8.f); + set_edge_limit(edge_limit); + imgui->checkbox("Show split triangles: ", m_show_triangles); + imgui->checkbox("Show invalid triangles: ", m_show_invalid); + + int valid_triangles = m_triangles.size() - m_invalid_triangles; + imgui->text("Valid triangles: " + std::to_string(valid_triangles) + + "/" + std::to_string(m_triangles.size())); + imgui->text("Vertices: " + std::to_string(m_vertices.size())); + if (imgui->button("Force garbage collection")) + garbage_collect(); + + if (imgui->button("Serialize - deserialize")) { + auto map = serialize(); + deserialize(map); + } + + imgui->end(); + + if (! m_show_triangles) + return; + + enum vtype { + ORIGINAL = 0, + SPLIT, + INVALID + }; + + for (auto& va : m_varrays) + va.release_geometry(); + + std::array cnts; + + ::glScalef(1.01f, 1.01f, 1.01f); + + for (int tr_id=0; tr_idpush_geometry(double(m_vertices[tr.verts_idxs[i]].v[0]), + double(m_vertices[tr.verts_idxs[i]].v[1]), + double(m_vertices[tr.verts_idxs[i]].v[2]), + 0., 0., 1.); + va->push_triangle(*cnt, + *cnt+1, + *cnt+2); + *cnt += 3; + } + + ::glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + for (vtype i : {ORIGINAL, SPLIT, INVALID}) { + GLIndexedVertexArray& va = m_varrays[i]; + va.finalize_geometry(true); + if (va.has_VBOs()) { + switch (i) { + case ORIGINAL : ::glColor3f(0.f, 0.f, 1.f); break; + case SPLIT : ::glColor3f(1.f, 0.f, 0.f); break; + case INVALID : ::glColor3f(1.f, 1.f, 0.f); break; + } + va.render(); + } + } + ::glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); +} +#endif + + + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp new file mode 100644 index 0000000000..6f8cbec603 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -0,0 +1,150 @@ +#ifndef slic3r_GLGizmoPainterBase_hpp_ +#define slic3r_GLGizmoPainterBase_hpp_ + +#include "GLGizmoBase.hpp" + +#include "slic3r/GUI/3DScene.hpp" + +#include "libslic3r/ObjectID.hpp" +#include "libslic3r/TriangleSelector.hpp" + +#include + + + + +namespace Slic3r { + +enum class EnforcerBlockerType : int8_t; + +namespace GUI { + +enum class SLAGizmoEventType : unsigned char; +class ClippingPlane; +struct Camera; + +enum class PainterGizmoType { + FDM_SUPPORTS, + SEAM +}; + + +class TriangleSelectorGUI : public TriangleSelector { +public: + explicit TriangleSelectorGUI(const TriangleMesh& mesh) + : TriangleSelector(mesh) {} + + // Render current selection. Transformation matrices are supposed + // to be already set. + void render(ImGuiWrapper* imgui = nullptr); + +#ifdef PRUSASLICER_TRIANGLE_SELECTOR_DEBUG + void render_debug(ImGuiWrapper* imgui); + bool m_show_triangles{false}; + bool m_show_invalid{false}; +#endif + +private: + GLIndexedVertexArray m_iva_enforcers; + GLIndexedVertexArray m_iva_blockers; + std::array m_varrays; +}; + + +// Following class is a base class for a gizmo with ability to paint on mesh +// using circular blush (such as FDM supports gizmo and seam painting gizmo). +// The purpose is not to duplicate code related to mesh painting. +class GLGizmoPainterBase : public GLGizmoBase +{ +private: + ObjectID m_old_mo_id; + size_t m_old_volumes_size = 0; + virtual void on_render() const {} + virtual void on_render_for_picking() const {} + +public: + GLGizmoPainterBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); + ~GLGizmoPainterBase() override {} + void set_painter_gizmo_data(const Selection& selection); + bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down); + + // Following function renders the triangles and cursor. Having this separated + // from usual on_render method allows to render them before transparent objects, + // so they can be seen inside them. The usual on_render is called after all + // volumes (including transparent ones) are rendered. + virtual void render_painter_gizmo() const = 0; + +protected: + void render_triangles(const Selection& selection) const; + void render_cursor() const; + void render_cursor_circle() const; + void render_cursor_sphere(const Transform3d& trafo) const; + virtual void update_model_object() const = 0; + virtual void update_from_model_object() = 0; + void activate_internal_undo_redo_stack(bool activate); + void set_cursor_type(TriangleSelector::CursorType); + + float m_cursor_radius = 2.f; + static constexpr float CursorRadiusMin = 0.4f; // cannot be zero + static constexpr float CursorRadiusMax = 8.f; + static constexpr float CursorRadiusStep = 0.2f; + + // For each model-part volume, store status and division of the triangles. + std::vector> m_triangle_selectors; + + TriangleSelector::CursorType m_cursor_type = TriangleSelector::SPHERE; + + +private: + bool is_mesh_point_clipped(const Vec3d& point, const Transform3d& trafo) const; + void update_raycast_cache(const Vec2d& mouse_position, + const Camera& camera, + const std::vector& trafo_matrices) const; + + GLIndexedVertexArray m_vbo_sphere; + + bool m_internal_stack_active = false; + bool m_schedule_update = false; + Vec2d m_last_mouse_click = Vec2d::Zero(); + + enum class Button { + None, + Left, + Right + }; + + Button m_button_down = Button::None; + EState m_old_state = Off; // to be able to see that the gizmo has just been closed (see on_set_state) + + // Following cache holds result of a raycast query. The queries are asked + // during rendering the sphere cursor and painting, this saves repeated + // raycasts when the mouse position is the same as before. + struct RaycastResult { + Vec2d mouse_position; + int mesh_id; + Vec3f hit; + size_t facet; + }; + mutable RaycastResult m_rr; + +protected: + void on_set_state() override; + void on_start_dragging() override {} + void on_stop_dragging() override {} + + virtual void on_opening() = 0; + virtual void on_shutdown() = 0; + virtual PainterGizmoType get_painter_type() const = 0; + + bool on_is_activable() const override; + bool on_is_selectable() const override; + void on_load(cereal::BinaryInputArchive& ar) override; + void on_save(cereal::BinaryOutputArchive& ar) const override {} + CommonGizmosDataID on_get_requirements() const override; +}; + + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_GLGizmoPainterBase_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index f3e5656860..77366c6335 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -1,9 +1,15 @@ // Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoRotate.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" #include +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/GUI.hpp" +#include "libslic3r/PresetBundle.hpp" + +#include "libslic3r/SLA/Rotfinder.hpp" namespace Slic3r { namespace GUI { @@ -194,6 +200,64 @@ void GLGizmoRotate::on_render_for_picking() const glsafe(::glPopMatrix()); } + + +GLGizmoRotate3D::RotoptimzeWindow::RotoptimzeWindow(ImGuiWrapper * imgui, + State & state, + const Alignment &alignment) + : m_imgui{imgui} +{ + imgui->begin(_L("Rotation"), ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_AlwaysAutoResize | + ImGuiWindowFlags_NoCollapse); + + // adjust window position to avoid overlap the view toolbar + float win_h = ImGui::GetWindowHeight(); + float x = alignment.x, y = alignment.y; + y = std::min(y, alignment.bottom_limit - win_h); + ImGui::SetWindowPos(ImVec2(x, y), ImGuiCond_Always); + + static constexpr const char * button_txt = L("Optimize orientation"); + static constexpr const char * slider_txt = L("Accuracy"); + + float button_width = imgui->calc_text_size(_(button_txt)).x; + ImGui::PushItemWidth(100.); + //if (imgui->button(_(button_txt))) { + if (ImGui::ArrowButton(_(button_txt).c_str(), ImGuiDir_Down)){ + std::cout << "Blip" << std::endl; + } + + ImGui::SliderFloat(_(slider_txt).c_str(), &state.accuracy, 0.01f, 1.f, "%.1f"); + + static const std::vector options = { + _L("Least supports").ToStdString(), + _L("Suface quality").ToStdString() + }; + +// if (imgui->combo(_L("Choose method"), options, state.method) ) { +// std::cout << "method: " << state.method << std::endl; +// } + + +} + +GLGizmoRotate3D::RotoptimzeWindow::~RotoptimzeWindow() +{ + m_imgui->end(); +} + +void GLGizmoRotate3D::on_render_input_window(float x, float y, float bottom_limit) +{ + if (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA) + return; + +// TODO: + +// m_rotoptimizewin_state.mobj = ?; +// RotoptimzeWindow popup{m_imgui, m_rotoptimizewin_state, {x, y, bottom_limit}}; + +} + void GLGizmoRotate::render_circle() const { ::glBegin(GL_LINE_LOOP); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp index 7365a20c36..c418c4b316 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp @@ -52,12 +52,12 @@ public: std::string get_tooltip() const override; protected: - virtual bool on_init(); - virtual std::string on_get_name() const { return ""; } - virtual void on_start_dragging(); - virtual void on_update(const UpdateData& data); - virtual void on_render() const; - virtual void on_render_for_picking() const; + bool on_init() override; + std::string on_get_name() const override { return ""; } + void on_start_dragging() override; + void on_update(const UpdateData& data) override; + void on_render() const override; + void on_render_for_picking() const override; private: void render_circle() const; @@ -94,46 +94,79 @@ public: } protected: - virtual bool on_init(); - virtual std::string on_get_name() const; - virtual void on_set_state() + bool on_init() override; + std::string on_get_name() const override; + void on_set_state() override { for (GLGizmoRotate& g : m_gizmos) g.set_state(m_state); } - virtual void on_set_hover_id() + void on_set_hover_id() override { for (int i = 0; i < 3; ++i) m_gizmos[i].set_hover_id((m_hover_id == i) ? 0 : -1); } - virtual void on_enable_grabber(unsigned int id) + void on_enable_grabber(unsigned int id) override { if (id < 3) m_gizmos[id].enable_grabber(0); } - virtual void on_disable_grabber(unsigned int id) + void on_disable_grabber(unsigned int id) override { if (id < 3) m_gizmos[id].disable_grabber(0); } - virtual bool on_is_activable() const; - virtual void on_start_dragging(); - virtual void on_stop_dragging(); - virtual void on_update(const UpdateData& data) + bool on_is_activable() const override; + void on_start_dragging() override; + void on_stop_dragging() override; + void on_update(const UpdateData& data) override { for (GLGizmoRotate& g : m_gizmos) { g.update(data); } } - virtual void on_render() const; - virtual void on_render_for_picking() const + void on_render() const override; + void on_render_for_picking() const override { for (const GLGizmoRotate& g : m_gizmos) { g.render_for_picking(); } } + + void on_render_input_window(float x, float y, float bottom_limit) override; + +private: + + class RotoptimzeWindow { + ImGuiWrapper *m_imgui = nullptr; + + public: + + struct State { + enum Metods { mMinSupportPoints, mLegacy }; + + float accuracy = 1.f; + int method = mMinSupportPoints; + ModelObject *mobj = nullptr; + }; + + struct Alignment { float x, y, bottom_limit; }; + + RotoptimzeWindow(ImGuiWrapper * imgui, + State & state, + const Alignment &bottom_limit); + + ~RotoptimzeWindow(); + + RotoptimzeWindow(const RotoptimzeWindow&) = delete; + RotoptimzeWindow(RotoptimzeWindow &&) = delete; + RotoptimzeWindow& operator=(const RotoptimzeWindow &) = delete; + RotoptimzeWindow& operator=(RotoptimzeWindow &&) = delete; + }; + + RotoptimzeWindow::State m_rotoptimizewin_state = {}; }; } // namespace GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp new file mode 100644 index 0000000000..f76cb42b6e --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -0,0 +1,262 @@ +#include "GLGizmoSeam.hpp" + +#include "libslic3r/Model.hpp" + +//#include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/Plater.hpp" + + +#include + + +namespace Slic3r { + +namespace GUI { + + + +bool GLGizmoSeam::on_init() +{ + m_shortcut_key = WXK_CONTROL_P; + + m_desc["clipping_of_view"] = _L("Clipping of view") + ": "; + m_desc["reset_direction"] = _L("Reset direction"); + m_desc["cursor_size"] = _L("Cursor size") + ": "; + m_desc["cursor_type"] = _L("Cursor type") + ": "; + m_desc["enforce_caption"] = _L("Left mouse button") + ": "; + m_desc["enforce"] = _L("Enforce seam"); + m_desc["block_caption"] = _L("Right mouse button") + " "; + m_desc["block"] = _L("Block seam"); + m_desc["remove_caption"] = _L("Shift + Left mouse button") + ": "; + m_desc["remove"] = _L("Remove selection"); + m_desc["remove_all"] = _L("Remove all selection"); + m_desc["circle"] = _L("Circle"); + m_desc["sphere"] = _L("Sphere"); + + return true; +} + + + +std::string GLGizmoSeam::on_get_name() const +{ + return (_(L("Seam Editing")) + " [P]").ToUTF8().data(); +} + + + +void GLGizmoSeam::render_painter_gizmo() const +{ + const Selection& selection = m_parent.get_selection(); + + glsafe(::glEnable(GL_BLEND)); + glsafe(::glEnable(GL_DEPTH_TEST)); + + render_triangles(selection); + + m_c->object_clipper()->render_cut(); + render_cursor(); + + glsafe(::glDisable(GL_BLEND)); +} + + + +void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) +{ + if (! m_c->selection_info()->model_object()) + return; + + const float approx_height = m_imgui->scaled(14.0f); + y = std::min(y, bottom_limit - approx_height); + m_imgui->set_next_window_pos(x, y, ImGuiCond_Always); + m_imgui->begin(on_get_name(), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); + + // First calculate width of all the texts that are could possibly be shown. We will decide set the dialog width based on that: + const float clipping_slider_left = std::max(m_imgui->calc_text_size(m_desc.at("clipping_of_view")).x, + m_imgui->calc_text_size(m_desc.at("reset_direction")).x) + + m_imgui->scaled(1.5f); + const float cursor_size_slider_left = m_imgui->calc_text_size(m_desc.at("cursor_size")).x + m_imgui->scaled(1.f); + const float cursor_type_radio_left = m_imgui->calc_text_size(m_desc.at("cursor_type")).x + m_imgui->scaled(1.f); + const float cursor_type_radio_width1 = m_imgui->calc_text_size(m_desc["circle"]).x + + m_imgui->scaled(2.5f); + const float cursor_type_radio_width2 = m_imgui->calc_text_size(m_desc["sphere"]).x + + m_imgui->scaled(2.5f); + const float button_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.f); + const float minimal_slider_width = m_imgui->scaled(4.f); + + float caption_max = 0.f; + float total_text_max = 0.; + for (const std::string& t : {"enforce", "block", "remove"}) { + caption_max = std::max(caption_max, m_imgui->calc_text_size(m_desc.at(t+"_caption")).x); + total_text_max = std::max(total_text_max, caption_max + m_imgui->calc_text_size(m_desc.at(t)).x); + } + caption_max += m_imgui->scaled(1.f); + total_text_max += m_imgui->scaled(1.f); + + float window_width = minimal_slider_width + std::max(cursor_size_slider_left, clipping_slider_left); + window_width = std::max(window_width, total_text_max); + window_width = std::max(window_width, button_width); + window_width = std::max(window_width, cursor_type_radio_left + cursor_type_radio_width1 + cursor_type_radio_width2); + + auto draw_text_with_caption = [this, &caption_max](const wxString& caption, const wxString& text) { + static const ImVec4 ORANGE(1.0f, 0.49f, 0.22f, 1.0f); + m_imgui->text_colored(ORANGE, caption); + ImGui::SameLine(caption_max); + m_imgui->text(text); + }; + + for (const std::string& t : {"enforce", "block", "remove"}) + draw_text_with_caption(m_desc.at(t + "_caption"), m_desc.at(t)); + + m_imgui->text(""); + + if (m_imgui->button(m_desc.at("remove_all"))) { + Plater::TakeSnapshot(wxGetApp().plater(), wxString(_L("Reset selection"))); + ModelObject* mo = m_c->selection_info()->model_object(); + int idx = -1; + for (ModelVolume* mv : mo->volumes) { + if (mv->is_model_part()) { + ++idx; + m_triangle_selectors[idx]->reset(); + } + } + + update_model_object(); + m_parent.set_as_dirty(); + } + + const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; + + m_imgui->text(m_desc.at("cursor_size")); + ImGui::SameLine(cursor_size_slider_left); + ImGui::PushItemWidth(window_width - cursor_size_slider_left); + ImGui::SliderFloat(" ", &m_cursor_radius, CursorRadiusMin, CursorRadiusMax, "%.2f"); + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Alt + Mouse wheel").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + + ImGui::AlignTextToFramePadding(); + m_imgui->text(m_desc.at("cursor_type")); + ImGui::SameLine(cursor_type_radio_left + m_imgui->scaled(0.f)); + ImGui::PushItemWidth(cursor_type_radio_width1); + + bool sphere_sel = m_cursor_type == TriangleSelector::CursorType::SPHERE; + if (m_imgui->radio_button(m_desc["sphere"], sphere_sel)) + sphere_sel = true; + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Paints all facets inside, regardless of their orientation.").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + ImGui::SameLine(cursor_type_radio_left + cursor_type_radio_width2 + m_imgui->scaled(0.f)); + ImGui::PushItemWidth(cursor_type_radio_width2); + + if (m_imgui->radio_button(m_desc["circle"], ! sphere_sel)) + sphere_sel = false; + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Ignores facets facing away from the camera.").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + m_cursor_type = sphere_sel + ? TriangleSelector::CursorType::SPHERE + : TriangleSelector::CursorType::CIRCLE; + + + + ImGui::Separator(); + if (m_c->object_clipper()->get_position() == 0.f) + m_imgui->text(m_desc.at("clipping_of_view")); + else { + if (m_imgui->button(m_desc.at("reset_direction"))) { + wxGetApp().CallAfter([this](){ + m_c->object_clipper()->set_position(-1., false); + }); + } + } + + ImGui::SameLine(clipping_slider_left); + ImGui::PushItemWidth(window_width - clipping_slider_left); + float clp_dist = m_c->object_clipper()->get_position(); + if (ImGui::SliderFloat(" ", &clp_dist, 0.f, 1.f, "%.2f")) + m_c->object_clipper()->set_position(clp_dist, true); + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(max_tooltip_width); + ImGui::TextUnformatted(_L("Ctrl + Mouse wheel").ToUTF8().data()); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + + m_imgui->end(); +} + + + +void GLGizmoSeam::update_model_object() const +{ + bool updated = false; + ModelObject* mo = m_c->selection_info()->model_object(); + int idx = -1; + for (ModelVolume* mv : mo->volumes) { + if (! mv->is_model_part()) + continue; + ++idx; + updated |= mv->seam_facets.set(*m_triangle_selectors[idx].get()); + } + + if (updated) + m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); +} + + + +void GLGizmoSeam::update_from_model_object() +{ + wxBusyCursor wait; + + const ModelObject* mo = m_c->selection_info()->model_object(); + m_triangle_selectors.clear(); + + int volume_id = -1; + for (const ModelVolume* mv : mo->volumes) { + if (! mv->is_model_part()) + continue; + + ++volume_id; + + // This mesh does not account for the possible Z up SLA offset. + const TriangleMesh* mesh = &mv->mesh(); + + m_triangle_selectors.emplace_back(std::make_unique(*mesh)); + m_triangle_selectors.back()->deserialize(mv->seam_facets.get_data()); + } +} + + +PainterGizmoType GLGizmoSeam::get_painter_type() const +{ + return PainterGizmoType::SEAM; +} + + + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp new file mode 100644 index 0000000000..dfadec0da7 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -0,0 +1,43 @@ +#ifndef slic3r_GLGizmoSeam_hpp_ +#define slic3r_GLGizmoSeam_hpp_ + +#include "GLGizmoPainterBase.hpp" + +namespace Slic3r { + +namespace GUI { + +class GLGizmoSeam : public GLGizmoPainterBase +{ +public: + GLGizmoSeam(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoPainterBase(parent, icon_filename, sprite_id) {} + + void render_painter_gizmo() const override; + +protected: + void on_render_input_window(float x, float y, float bottom_limit) override; + std::string on_get_name() const override; + PainterGizmoType get_painter_type() const override; + +private: + bool on_init() override; + + void update_model_object() const override; + void update_from_model_object() override; + + void on_opening() override {} + void on_shutdown() override {} + + // This map holds all translated description texts, so they can be easily referenced during layout calculations + // etc. When language changes, GUI is recreated and this class constructed again, so the change takes effect. + std::map m_desc; +}; + + + +} // namespace GUI +} // namespace Slic3r + + +#endif // slic3r_GLGizmoSeam_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 908fe27b11..e626aa7f86 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -16,7 +16,7 @@ #include "slic3r/GUI/GUI_ObjectSettings.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/Plater.hpp" -#include "slic3r/GUI/PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/SLAPrint.hpp" @@ -222,7 +222,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) render_color[3] = 0.7f; glsafe(::glColor4fv(render_color)); for (const sla::DrainHole& drain_hole : m_c->selection_info()->model_object()->sla_drain_holes) { - if (is_mesh_point_clipped((drain_hole.pos+HoleStickOutLength*drain_hole.normal).cast())) + if (is_mesh_point_clipped(drain_hole.pos.cast())) continue; // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. @@ -241,10 +241,10 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis()(0), aa.axis()(1), aa.axis()(2))); glsafe(::glPushMatrix()); glsafe(::glTranslated(0., 0., -drain_hole.height)); - ::gluCylinder(m_quadric, drain_hole.radius, drain_hole.radius, drain_hole.height, 24, 1); - glsafe(::glTranslated(0., 0., drain_hole.height)); + ::gluCylinder(m_quadric, drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength, 24, 1); + glsafe(::glTranslated(0., 0., drain_hole.height + sla::HoleStickOutLength)); ::gluDisk(m_quadric, 0.0, drain_hole.radius, 24, 1); - glsafe(::glTranslated(0., 0., -drain_hole.height)); + glsafe(::glTranslated(0., 0., -drain_hole.height - sla::HoleStickOutLength)); glsafe(::glRotatef(180.f, 1.f, 0.f, 0.f)); ::gluDisk(m_quadric, 0.0, drain_hole.radius, 24, 1); glsafe(::glPopMatrix()); @@ -546,7 +546,7 @@ std::vector GLGizmoSlaSupports::get_config_options(const st if (! mo) return out; - const DynamicPrintConfig& object_cfg = mo->config; + const DynamicPrintConfig& object_cfg = mo->config.get(); const DynamicPrintConfig& print_cfg = wxGetApp().preset_bundle->sla_prints.get_edited_preset().config; std::unique_ptr default_cfg = nullptr; @@ -753,15 +753,15 @@ RENDER_AGAIN: m_density_stash = density; } if (slider_edited) { - mo->config.opt("support_points_minimal_distance", true)->value = minimal_point_distance; - mo->config.opt("support_points_density_relative", true)->value = (int)density; + mo->config.set("support_points_minimal_distance", minimal_point_distance); + mo->config.set("support_points_density_relative", (int)density); } if (slider_released) { - mo->config.opt("support_points_minimal_distance", true)->value = m_minimal_point_distance_stash; - mo->config.opt("support_points_density_relative", true)->value = (int)m_density_stash; + mo->config.set("support_points_minimal_distance", m_minimal_point_distance_stash); + mo->config.set("support_points_density_relative", (int)m_density_stash); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Support parameter change"))); - mo->config.opt("support_points_minimal_distance", true)->value = minimal_point_distance; - mo->config.opt("support_points_density_relative", true)->value = (int)density; + mo->config.set("support_points_minimal_distance", minimal_point_distance); + mo->config.set("support_points_density_relative", (int)density); wxGetApp().obj_list()->update_and_show_object_settings_item(); } @@ -889,16 +889,18 @@ void GLGizmoSlaSupports::on_set_state() return; if (m_state == On && m_old_state != On) { // the gizmo was just turned on - // This function can be called from undo/redo, when selection (and hence - // common gizmos data are not yet deserialized. The CallAfter should put - // this off until after the update is done. - wxGetApp().CallAfter([this]() { - Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("SLA gizmo turned on"))); + if (! m_parent.get_gizmos_manager().is_serializing()) { + // Only take the snapshot when the USER opens the gizmo. Common gizmos + // data are not yet available, the CallAfter will postpone taking the + // snapshot until they are. No, it does not feel right. + wxGetApp().CallAfter([this]() { + Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("SLA gizmo turned on"))); + }); + } - // Set default head diameter from config. - const DynamicPrintConfig& cfg = wxGetApp().preset_bundle->sla_prints.get_edited_preset().config; - m_new_point_head_diameter = static_cast(cfg.option("support_head_front_diameter"))->value; - }); + // Set default head diameter from config. + const DynamicPrintConfig& cfg = wxGetApp().preset_bundle->sla_prints.get_edited_preset().config; + m_new_point_head_diameter = static_cast(cfg.option("support_head_front_diameter"))->value; } if (m_state == Off && m_old_state != Off) { // the gizmo was just turned Off bool will_ask = m_editing_mode && unsaved_changes(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index 28f317c269..a34c7562e7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -8,7 +8,7 @@ #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/Plater.hpp" -#include "slic3r/GUI/PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" #include @@ -295,11 +295,9 @@ void ObjectClipper::on_update() if (has_hollowed) meshes.push_back(get_pool()->hollowed_mesh()->get_hollowed_mesh()); - if (meshes.empty()) { + if (meshes.empty()) for (const ModelVolume* mv : mo->volumes) - if (mv->is_model_part()) - meshes.push_back(&mv->mesh()); - } + meshes.push_back(&mv->mesh()); if (meshes != m_old_meshes) { m_clippers.clear(); @@ -335,9 +333,6 @@ void ObjectClipper::render_cut() const size_t clipper_id = 0; for (const ModelVolume* mv : mo->volumes) { - if (! mv->is_model_part()) - continue; - Geometry::Transformation vol_trafo = mv->get_transformation(); Geometry::Transformation trafo = inst_trafo * vol_trafo; trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., sel_info->get_sla_shift())); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp index 31c473bac7..aedf782e89 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp @@ -15,8 +15,6 @@ namespace GUI { class GLCanvas3D; -static constexpr float HoleStickOutLength = 1.f; - enum class SLAGizmoEventType : unsigned char { LeftDown = 1, LeftUp, diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 511c68735c..739edec4c6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -5,7 +5,6 @@ #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_ObjectManipulation.hpp" -#include "slic3r/GUI/PresetBundle.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/Utils/UndoRedo.hpp" @@ -17,8 +16,10 @@ #include "slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp" #include "slic3r/GUI/Gizmos/GLGizmoCut.hpp" #include "slic3r/GUI/Gizmos/GLGizmoHollow.hpp" +#include "slic3r/GUI/Gizmos/GLGizmoSeam.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/PresetBundle.hpp" #include @@ -104,6 +105,7 @@ bool GLGizmosManager::init() m_gizmos.emplace_back(new GLGizmoHollow(m_parent, "hollow.svg", 5)); m_gizmos.emplace_back(new GLGizmoSlaSupports(m_parent, "sla_supports.svg", 6)); m_gizmos.emplace_back(new GLGizmoFdmSupports(m_parent, "sla_supports.svg", 7)); + m_gizmos.emplace_back(new GLGizmoSeam(m_parent, "seam.svg", 8)); m_common_gizmos_data.reset(new CommonGizmosDataPool(&m_parent)); @@ -144,8 +146,11 @@ void GLGizmosManager::refresh_on_off_state() if (m_serializing || m_current == Undefined || m_gizmos.empty()) return; - if (m_current != Undefined && ! m_gizmos[m_current]->is_activable()) + if (m_current != Undefined + && (! m_gizmos[m_current]->is_activable() || ! m_gizmos[m_current]->is_selectable())) { activate_gizmo(Undefined); + update_data(); + } } void GLGizmosManager::reset_all_states() @@ -204,9 +209,10 @@ void GLGizmosManager::update_data() enable_grabber(Scale, i, enable_scale_xyz); } - m_common_gizmos_data->update(get_current() - ? get_current()->get_requirements() - : CommonGizmosDataID(0)); + if (m_common_gizmos_data) + m_common_gizmos_data->update(get_current() + ? get_current()->get_requirements() + : CommonGizmosDataID(0)); if (selection.is_single_full_instance()) { @@ -217,7 +223,7 @@ void GLGizmosManager::update_data() ModelObject* model_object = selection.get_model()->objects[selection.get_object_idx()]; set_flattening_data(model_object); set_sla_support_data(model_object); - set_fdm_support_data(model_object); + set_painter_gizmo_data(); } else if (selection.is_single_volume() || selection.is_single_modifier()) { @@ -226,7 +232,7 @@ void GLGizmosManager::update_data() set_rotation(Vec3d::Zero()); set_flattening_data(nullptr); set_sla_support_data(nullptr); - set_fdm_support_data(nullptr); + set_painter_gizmo_data(); } else if (is_wipe_tower) { @@ -235,7 +241,7 @@ void GLGizmosManager::update_data() set_rotation(Vec3d(0., 0., (M_PI/180.) * dynamic_cast(config.option("wipe_tower_rotation_angle"))->value)); set_flattening_data(nullptr); set_sla_support_data(nullptr); - set_fdm_support_data(nullptr); + set_painter_gizmo_data(); } else { @@ -243,7 +249,7 @@ void GLGizmosManager::update_data() set_rotation(Vec3d::Zero()); set_flattening_data(selection.is_from_single_object() ? selection.get_model()->objects[selection.get_object_idx()] : nullptr); set_sla_support_data(selection.is_from_single_instance() ? selection.get_model()->objects[selection.get_object_idx()] : nullptr); - set_fdm_support_data(selection.is_from_single_instance() ? selection.get_model()->objects[selection.get_object_idx()] : nullptr); + set_painter_gizmo_data(); } } @@ -378,12 +384,13 @@ void GLGizmosManager::set_sla_support_data(ModelObject* model_object) gizmo_supports->set_sla_support_data(model_object, m_parent.get_selection()); } -void GLGizmosManager::set_fdm_support_data(ModelObject* model_object) +void GLGizmosManager::set_painter_gizmo_data() { if (!m_enabled || m_gizmos.empty()) return; - dynamic_cast(m_gizmos[FdmSupports].get())->set_fdm_support_data(model_object, m_parent.get_selection()); + dynamic_cast(m_gizmos[FdmSupports].get())->set_painter_gizmo_data(m_parent.get_selection()); + dynamic_cast(m_gizmos[Seam].get())->set_painter_gizmo_data(m_parent.get_selection()); } // Returns true if the gizmo used the event to do something, false otherwise. @@ -398,6 +405,8 @@ bool GLGizmosManager::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_p return dynamic_cast(m_gizmos[Hollow].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == FdmSupports) return dynamic_cast(m_gizmos[FdmSupports].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); + else if (m_current == Seam) + return dynamic_cast(m_gizmos[Seam].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else return false; } @@ -428,6 +437,19 @@ void GLGizmosManager::render_current_gizmo() const m_gizmos[m_current]->render(); } +void GLGizmosManager::render_painter_gizmo() const +{ + // This function shall only be called when current gizmo is + // derived from GLGizmoPainterBase. + + if (!m_enabled || m_current == Undefined) + return; + + auto* gizmo = dynamic_cast(get_current()); + assert(gizmo); // check the precondition + gizmo->render_painter_gizmo(); +} + void GLGizmosManager::render_current_gizmo_for_picking_pass() const { if (! m_enabled || m_current == Undefined) @@ -461,7 +483,7 @@ bool GLGizmosManager::on_mouse_wheel(wxMouseEvent& evt) { bool processed = false; - if (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports) { + if (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) { float rot = (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta(); if (gizmo_event((rot > 0.f ? SLAGizmoEventType::MouseWheelUp : SLAGizmoEventType::MouseWheelDown), Vec2d::Zero(), evt.ShiftDown(), evt.AltDown(), evt.ControlDown())) processed = true; @@ -482,22 +504,22 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) int selected_object_idx = selection.get_object_idx(); bool processed = false; + // when control is down we allow scene pan and rotation even when clicking over some object + bool control_down = evt.CmdDown(); + // mouse anywhere if (evt.Moving()) m_tooltip = update_hover_state(mouse_pos); - else if (evt.LeftUp()) - { - if (m_mouse_capture.left) - { + else if (evt.LeftUp()) { + if (m_mouse_capture.left) { processed = true; m_mouse_capture.left = false; } - else if (is_dragging()) - { + else if (is_dragging()) { switch (m_current) { - case Move: m_parent.do_move(L("Gizmo-Move")); break; - case Scale: m_parent.do_scale(L("Gizmo-Scale")); break; - case Rotate: m_parent.do_rotate(L("Gizmo-Rotate")); break; + case Move: { m_parent.do_move(L("Gizmo-Move")); break; } + case Scale: { m_parent.do_scale(L("Gizmo-Scale")); break; } + case Rotate: { m_parent.do_rotate(L("Gizmo-Rotate")); break; } default: break; } @@ -516,41 +538,34 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) // else // return false; } - else if (evt.MiddleUp()) - { - if (m_mouse_capture.middle) - { + else if (evt.MiddleUp()) { + if (m_mouse_capture.middle) { processed = true; m_mouse_capture.middle = false; } else return false; } - else if (evt.RightUp()) - { - if (pending_right_up) - { + else if (evt.RightUp()) { + if (pending_right_up) { pending_right_up = false; return true; } - if (m_mouse_capture.right) - { + if (m_mouse_capture.right) { processed = true; m_mouse_capture.right = false; } // else // return false; } - else if (evt.Dragging() && !is_dragging()) - { + else if (evt.Dragging() && !is_dragging()) { if (m_mouse_capture.any()) // if the button down was done on this toolbar, prevent from dragging into the scene processed = true; // else // return false; } - else if (evt.Dragging() && is_dragging()) - { + else if (evt.Dragging() && is_dragging()) { if (!m_parent.get_wxglcanvas()->HasCapture()) m_parent.get_wxglcanvas()->CaptureMouse(); @@ -573,7 +588,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) if (evt.AltDown()) transformation_type.set_independent(); selection.scale(get_scale(), transformation_type); - if (evt.ControlDown()) + if (control_down) selection.translate(get_scale_offset(), true); wxGetApp().obj_manipul()->set_dirty(); break; @@ -596,15 +611,13 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) processed = true; } - if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined) - { + if (get_gizmo_idx_from_mouse(mouse_pos) == Undefined) { // mouse is outside the toolbar m_tooltip = ""; - if (evt.LeftDown()) - { - if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports) - && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown())) + if (evt.LeftDown() && (!control_down || grabber_contains_mouse())) { + if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) + && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown())) // the gizmo got the event and took some action, there is no need to do anything more processed = true; else if (!selection.is_empty() && grabber_contains_mouse()) { @@ -622,70 +635,67 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) processed = true; } } - else if (evt.RightDown() && (selected_object_idx != -1) && (m_current == SlaSupports || m_current == Hollow) - && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) - { + else if (evt.RightDown() && selected_object_idx != -1 && (m_current == SlaSupports || m_current == Hollow) + && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { // we need to set the following right up as processed to avoid showing the context menu if the user release the mouse over the object pending_right_up = true; // event was taken care of by the SlaSupports gizmo processed = true; } - else if (evt.RightDown() && (selected_object_idx != -1) && m_current == FdmSupports - && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) - { - // event was taken care of by the FdmSupports gizmo + else if (evt.RightDown() && !control_down && selected_object_idx != -1 && (m_current == FdmSupports || m_current == Seam) + && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { + // event was taken care of by the FdmSupports / Seam gizmo processed = true; } - else if (evt.Dragging() && (m_parent.get_move_volume_id() != -1) && (m_current == SlaSupports || m_current == Hollow)) + else if (evt.Dragging() && m_parent.get_move_volume_id() != -1 + && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam)) // don't allow dragging objects with the Sla gizmo on processed = true; - else if (evt.Dragging() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports ) - && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown())) - { + else if (evt.Dragging() && !control_down && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) + && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown())) { // the gizmo got the event and took some action, no need to do anything more here m_parent.set_as_dirty(); processed = true; } - else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports) && !m_parent.is_mouse_dragging()) - { + else if (evt.Dragging() && control_down && (evt.LeftIsDown() || evt.RightIsDown())) { + // CTRL has been pressed while already dragging -> stop current action + if (evt.LeftIsDown()) + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); + else if (evt.RightIsDown()) + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); + } + else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) && !m_parent.is_mouse_dragging()) { // in case SLA/FDM gizmo is selected, we just pass the LeftUp event and stop processing - neither // object moving or selecting is suppressed in that case - gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()); + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); processed = true; } - else if (evt.LeftUp() && (m_current == Flatten) && (m_gizmos[m_current]->get_hover_id() != -1)) - { + else if (evt.LeftUp() && m_current == Flatten && m_gizmos[m_current]->get_hover_id() != -1) { // to avoid to loose the selection when user clicks an the white faces of a different object while the Flatten gizmo is active processed = true; } - else if (evt.RightUp() && m_current == FdmSupports && !m_parent.is_mouse_dragging()) - { - gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()); + else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam) && !m_parent.is_mouse_dragging()) { + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); processed = true; } } - else - { + else { // mouse inside toolbar - if (evt.LeftDown() || evt.LeftDClick()) - { + if (evt.LeftDown() || evt.LeftDClick()) { m_mouse_capture.left = true; m_mouse_capture.parent = &m_parent; processed = true; - if (!selection.is_empty()) - { + if (!selection.is_empty()) { update_on_off_state(mouse_pos); update_data(); m_parent.set_as_dirty(); } } - else if (evt.MiddleDown()) - { + else if (evt.MiddleDown()) { m_mouse_capture.middle = true; m_mouse_capture.parent = &m_parent; } - else if (evt.RightDown()) - { + else if (evt.RightDown()) { m_mouse_capture.right = true; m_mouse_capture.parent = &m_parent; } @@ -748,7 +758,7 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) case 'r' : case 'R' : { - if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports) && gizmo_event(SLAGizmoEventType::ResetClippingPlane)) + if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam) && gizmo_event(SLAGizmoEventType::ResetClippingPlane)) processed = true; break; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 4ad46a2a92..7f47167e9e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -67,6 +67,7 @@ public: Hollow, SlaSupports, FdmSupports, + Seam, Undefined }; @@ -203,7 +204,7 @@ public: void set_sla_support_data(ModelObject* model_object); - void set_fdm_support_data(ModelObject* model_object); + void set_painter_gizmo_data(); bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position = Vec2d::Zero(), bool shift_down = false, bool alt_down = false, bool control_down = false); ClippingPlane get_clipping_plane() const; @@ -211,6 +212,7 @@ public: void render_current_gizmo() const; void render_current_gizmo_for_picking_pass() const; + void render_painter_gizmo() const; void render_overlay() const; diff --git a/src/slic3r/GUI/I18N.hpp b/src/slic3r/GUI/I18N.hpp index 25e46930ba..7bad6880e9 100644 --- a/src/slic3r/GUI/I18N.hpp +++ b/src/slic3r/GUI/I18N.hpp @@ -12,7 +12,7 @@ #ifndef L // !!! If you needed to translate some wxString, -// !!! please use _(L(string)) +// !!! please use _L(string) // !!! _() - is a standard wxWidgets macro to translate // !!! L() is used only for marking localizable string // !!! It will be used in "xgettext" to create a Locating Message Catalog. diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 51a9a6d4eb..d759f4b9af 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -23,7 +23,7 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" -#include "3DScene.hpp" +#include "3DScene.hpp"+ #include "GUI.hpp" #include "I18N.hpp" #include "Search.hpp" @@ -37,13 +37,30 @@ namespace GUI { static const std::map font_icons = { - {ImGui::PrintIconMarker , "cog" }, - {ImGui::PrinterIconMarker , "printer" }, - {ImGui::PrinterSlaIconMarker, "sla_printer"}, - {ImGui::FilamentIconMarker , "spool" }, - {ImGui::MaterialIconMarker , "resin" } + {ImGui::PrintIconMarker , "cog" }, + {ImGui::PrinterIconMarker , "printer" }, + {ImGui::PrinterSlaIconMarker , "sla_printer" }, + {ImGui::FilamentIconMarker , "spool" }, + {ImGui::MaterialIconMarker , "resin" }, + {ImGui::CloseIconMarker , "notification_close" }, + {ImGui::CloseIconHoverMarker , "notification_close_hover" }, + //{ImGui::TimerDotMarker , "timer_dot" }, + //{ImGui::TimerDotEmptyMarker , "timer_dot_empty" }, + {ImGui::MinimalizeMarker , "notification_minimalize" }, + {ImGui::MinimalizeHoverMarker , "notification_minimalize_hover" }, + {ImGui::WarningMarker , "notification_warning" }, + {ImGui::ErrorMarker , "notification_error" } }; +const ImVec4 ImGuiWrapper::COL_GREY_DARK = { 0.333f, 0.333f, 0.333f, 1.0f }; +const ImVec4 ImGuiWrapper::COL_GREY_LIGHT = { 0.4f, 0.4f, 0.4f, 1.0f }; +const ImVec4 ImGuiWrapper::COL_ORANGE_DARK = { 0.757f, 0.404f, 0.216f, 1.0f }; +const ImVec4 ImGuiWrapper::COL_ORANGE_LIGHT = { 1.0f, 0.49f, 0.216f, 1.0f }; +const ImVec4 ImGuiWrapper::COL_WINDOW_BACKGROUND = { 0.133f, 0.133f, 0.133f, 0.8f }; +const ImVec4 ImGuiWrapper::COL_BUTTON_BACKGROUND = COL_ORANGE_DARK; +const ImVec4 ImGuiWrapper::COL_BUTTON_HOVERED = COL_ORANGE_LIGHT; +const ImVec4 ImGuiWrapper::COL_BUTTON_ACTIVE = ImGuiWrapper::COL_BUTTON_HOVERED; + ImGuiWrapper::ImGuiWrapper() : m_glyph_ranges(nullptr) , m_font_cjk(false) @@ -176,6 +193,9 @@ bool ImGuiWrapper::update_mouse_data(wxMouseEvent& evt) io.MouseDown[0] = evt.LeftIsDown(); io.MouseDown[1] = evt.RightIsDown(); io.MouseDown[2] = evt.MiddleIsDown(); + float wheel_delta = static_cast(evt.GetWheelDelta()); + if (wheel_delta != 0.0f) + io.MouseWheel = static_cast(evt.GetWheelRotation()) / wheel_delta; unsigned buttons = (evt.LeftIsDown() ? 1 : 0) | (evt.RightIsDown() ? 2 : 0) | (evt.MiddleIsDown() ? 4 : 0); m_mouse_buttons = buttons; @@ -262,6 +282,11 @@ void ImGuiWrapper::set_next_window_bg_alpha(float alpha) ImGui::SetNextWindowBgAlpha(alpha); } +void ImGuiWrapper::set_next_window_size(float x, float y, ImGuiCond cond) +{ + ImGui::SetNextWindowSize(ImVec2(x, y), cond); +} + bool ImGuiWrapper::begin(const std::string &name, int flags) { return ImGui::Begin(name.c_str(), nullptr, (ImGuiWindowFlags)flags); @@ -293,12 +318,23 @@ bool ImGuiWrapper::button(const wxString &label) return ImGui::Button(label_utf8.c_str()); } +bool ImGuiWrapper::button(const wxString& label, float width, float height) +{ + auto label_utf8 = into_u8(label); + return ImGui::Button(label_utf8.c_str(), ImVec2(width, height)); +} + bool ImGuiWrapper::radio_button(const wxString &label, bool active) { auto label_utf8 = into_u8(label); return ImGui::RadioButton(label_utf8.c_str(), active); } +bool ImGuiWrapper::image_button() +{ + return false; +} + bool ImGuiWrapper::input_double(const std::string &label, const double &value, const std::string &format) { return ImGui::InputDouble(label.c_str(), const_cast(&value), 0.0f, 0.0f, format.c_str()); @@ -337,7 +373,7 @@ bool ImGuiWrapper::checkbox(const wxString &label, bool &value) void ImGuiWrapper::text(const char *label) { - ImGui::Text(label, NULL); + ImGui::Text("%s", label); } void ImGuiWrapper::text(const std::string &label) @@ -351,6 +387,22 @@ void ImGuiWrapper::text(const wxString &label) this->text(label_utf8.c_str()); } +void ImGuiWrapper::text_colored(const ImVec4& color, const char* label) +{ + ImGui::TextColored(color, "%s", label); +} + +void ImGuiWrapper::text_colored(const ImVec4& color, const std::string& label) +{ + this->text_colored(color, label.c_str()); +} + +void ImGuiWrapper::text_colored(const ImVec4& color, const wxString& label) +{ + auto label_utf8 = into_u8(label); + this->text_colored(color, label_utf8.c_str()); +} + bool ImGuiWrapper::slider_float(const char* label, float* v, float v_min, float v_max, const char* format/* = "%.3f"*/, float power/* = 1.0f*/) { return ImGui::SliderFloat(label, v, v_min, v_max, format, power); @@ -373,10 +425,10 @@ bool ImGuiWrapper::combo(const wxString& label, const std::vector& text(label); ImGui::SameLine(); - int selection_out = -1; + int selection_out = selection; bool res = false; - const char *selection_str = selection < (int)options.size() ? options[selection].c_str() : ""; + const char *selection_str = selection < int(options.size()) && selection >= 0 ? options[selection].c_str() : ""; if (ImGui::BeginCombo("", selection_str)) { for (int i = 0; i < (int)options.size(); i++) { if (ImGui::Selectable(options[i].c_str(), i == selection)) { @@ -751,6 +803,12 @@ void ImGuiWrapper::search_list(const ImVec2& size_, bool (*items_getter)(int, co check_box(_L("Search in English"), view_params.english); } +void ImGuiWrapper::title(const std::string& str) +{ + text(str); + ImGui::Separator(); +} + void ImGuiWrapper::disabled_begin(bool disabled) { wxCHECK_RET(!m_disabled, "ImGUI: Unbalanced disabled_begin() call"); @@ -869,7 +927,7 @@ void ImGuiWrapper::init_font(bool compress) if (font == nullptr) { font = io.Fonts->AddFontDefault(); if (font == nullptr) { - throw std::runtime_error("ImGui: Could not load deafult font"); + throw Slic3r::RuntimeError("ImGui: Could not load deafult font"); } } @@ -970,23 +1028,13 @@ void ImGuiWrapper::init_style() { ImGuiStyle &style = ImGui::GetStyle(); - auto set_color = [&](ImGuiCol_ col, unsigned hex_color) { - style.Colors[col] = ImVec4( - ((hex_color >> 24) & 0xff) / 255.0f, - ((hex_color >> 16) & 0xff) / 255.0f, - ((hex_color >> 8) & 0xff) / 255.0f, - (hex_color & 0xff) / 255.0f); + auto set_color = [&](ImGuiCol_ entity, ImVec4 color) { + style.Colors[entity] = color; }; - static const unsigned COL_WINDOW_BACKGROND = 0x222222cc; - static const unsigned COL_GREY_DARK = 0x555555ff; - static const unsigned COL_GREY_LIGHT = 0x666666ff; - static const unsigned COL_ORANGE_DARK = 0xc16737ff; - static const unsigned COL_ORANGE_LIGHT = 0xff7d38ff; - // Window style.WindowRounding = 4.0f; - set_color(ImGuiCol_WindowBg, COL_WINDOW_BACKGROND); + set_color(ImGuiCol_WindowBg, COL_WINDOW_BACKGROUND); set_color(ImGuiCol_TitleBgActive, COL_ORANGE_DARK); // Generics @@ -998,9 +1046,9 @@ void ImGuiWrapper::init_style() set_color(ImGuiCol_TextSelectedBg, COL_ORANGE_DARK); // Buttons - set_color(ImGuiCol_Button, COL_ORANGE_DARK); - set_color(ImGuiCol_ButtonHovered, COL_ORANGE_LIGHT); - set_color(ImGuiCol_ButtonActive, COL_ORANGE_LIGHT); + set_color(ImGuiCol_Button, COL_BUTTON_BACKGROUND); + set_color(ImGuiCol_ButtonHovered, COL_BUTTON_HOVERED); + set_color(ImGuiCol_ButtonActive, COL_BUTTON_ACTIVE); // Checkbox set_color(ImGuiCol_CheckMark, COL_ORANGE_LIGHT); @@ -1016,6 +1064,13 @@ void ImGuiWrapper::init_style() // Separator set_color(ImGuiCol_Separator, COL_ORANGE_LIGHT); + + // Tabs + set_color(ImGuiCol_Tab, COL_ORANGE_DARK); + set_color(ImGuiCol_TabHovered, COL_ORANGE_LIGHT); + set_color(ImGuiCol_TabActive, COL_ORANGE_LIGHT); + set_color(ImGuiCol_TabUnfocused, COL_GREY_DARK); + set_color(ImGuiCol_TabUnfocusedActive, COL_GREY_LIGHT); } void ImGuiWrapper::render_draw_data(ImDrawData *draw_data) diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index bf542e1381..5484e46c6f 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -57,6 +57,7 @@ public: void set_next_window_pos(float x, float y, int flag, float pivot_x = 0.0f, float pivot_y = 0.0f); void set_next_window_bg_alpha(float alpha); + void set_next_window_size(float x, float y, ImGuiCond cond); bool begin(const std::string &name, int flags = 0); bool begin(const wxString &name, int flags = 0); @@ -65,7 +66,9 @@ public: void end(); bool button(const wxString &label); + bool button(const wxString& label, float width, float height); bool radio_button(const wxString &label, bool active); + bool image_button(); bool input_double(const std::string &label, const double &value, const std::string &format = "%.3f"); bool input_double(const wxString &label, const double &value, const std::string &format = "%.3f"); bool input_vec3(const std::string &label, const Vec3d &value, float width, const std::string &format = "%.3f"); @@ -73,6 +76,9 @@ public: void text(const char *label); void text(const std::string &label); void text(const wxString &label); + void text_colored(const ImVec4& color, const char* label); + void text_colored(const ImVec4& color, const std::string& label); + void text_colored(const ImVec4& color, const wxString& label); bool slider_float(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); bool slider_float(const std::string& label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); bool slider_float(const wxString& label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); @@ -80,6 +86,7 @@ public: bool undo_redo_list(const ImVec2& size, const bool is_undo, bool (*items_getter)(const bool, int, const char**), int& hovered, int& selected, int& mouse_wheel); void search_list(const ImVec2& size, bool (*items_getter)(int, const char** label, const char** tooltip), char* search_str, Search::OptionViewParameters& view_params, int& selected, bool& edited, int& mouse_wheel, bool is_localized); + void title(const std::string& str); void disabled_begin(bool disabled); void disabled_end(); @@ -89,6 +96,15 @@ public: bool want_text_input() const; bool want_any_input() const; + static const ImVec4 COL_GREY_DARK; + static const ImVec4 COL_GREY_LIGHT; + static const ImVec4 COL_ORANGE_DARK; + static const ImVec4 COL_ORANGE_LIGHT; + static const ImVec4 COL_WINDOW_BACKGROUND; + static const ImVec4 COL_BUTTON_BACKGROUND; + static const ImVec4 COL_BUTTON_HOVERED; + static const ImVec4 COL_BUTTON_ACTIVE; + private: void init_font(bool compress); void init_input(); diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp index d5ecbcd0fc..4aaecd2b28 100644 --- a/src/slic3r/GUI/InstanceCheck.cpp +++ b/src/slic3r/GUI/InstanceCheck.cpp @@ -11,10 +11,12 @@ #include "boost/nowide/convert.hpp" #include +#include #include #include #include #include +#include #ifdef _WIN32 #include @@ -29,25 +31,29 @@ namespace instance_check_internal { struct CommandLineAnalysis { - bool should_send; - std::string cl_string; + std::optional should_send; + std::string cl_string; }; static CommandLineAnalysis process_command_line(int argc, char** argv) { - CommandLineAnalysis ret { false }; - if (argc < 2) - return ret; - ret.cl_string = escape_string_cstyle(argv[0]); + CommandLineAnalysis ret; + //if (argc < 2) + // return ret; + std::vector arguments { argv[0] }; for (size_t i = 1; i < argc; ++i) { const std::string token = argv[i]; - if (token == "--single-instance" || token == "--single-instance=1") { + // Processing of boolean command line arguments shall match DynamicConfig::read_cli(). + if (token == "--single-instance") ret.should_send = true; - } else { - ret.cl_string += " : "; - ret.cl_string += escape_string_cstyle(token); - } + else if (token == "--no-single-instance") + ret.should_send = false; + else + arguments.emplace_back(token); } - BOOST_LOG_TRIVIAL(debug) << "single instance: "<< ret.should_send << ". other params: " << ret.cl_string; + ret.cl_string = escape_strings_cstyle(arguments); + BOOST_LOG_TRIVIAL(debug) << "single instance: " << + (ret.should_send.has_value() ? (*ret.should_send ? "true" : "false") : "undefined") << + ". other params: " << ret.cl_string; return ret; } @@ -64,21 +70,26 @@ namespace instance_check_internal //BOOST_LOG_TRIVIAL(error) << "ewp: version: " << l_version_wstring; TCHAR wndText[1000]; TCHAR className[1000]; - GetClassName(hwnd, className, 1000); - GetWindowText(hwnd, wndText, 1000); + int err; + err = GetClassName(hwnd, className, 1000); + if (err == 0) + return true; + err = GetWindowText(hwnd, wndText, 1000); + if (err == 0) + return true; std::wstring classNameString(className); std::wstring wndTextString(wndText); - if (wndTextString.find(L"PrusaSlicer") != std::wstring::npos && classNameString == L"wxWindowNR") { + if (wndTextString.find(L"PrusaSlicer") == 0 && classNameString == L"wxWindowNR") { //check if other instances has same instance hash //if not it is not same version(binary) as this version - HANDLE handle = GetProp(hwnd, L"Instance_Hash_Minor"); - size_t other_instance_hash = PtrToUint(handle); - size_t other_instance_hash_major; + HANDLE handle = GetProp(hwnd, L"Instance_Hash_Minor"); + unsigned long long other_instance_hash = PtrToUint(handle); + unsigned long long other_instance_hash_major; + unsigned long long my_instance_hash = GUI::wxGetApp().get_instance_hash_int(); handle = GetProp(hwnd, L"Instance_Hash_Major"); other_instance_hash_major = PtrToUint(handle); other_instance_hash_major = other_instance_hash_major << 32; other_instance_hash += other_instance_hash_major; - size_t my_instance_hash = GUI::wxGetApp().get_instance_hash_int(); if(my_instance_hash == other_instance_hash) { BOOST_LOG_TRIVIAL(debug) << "win enum - found correct instance"; @@ -95,19 +106,19 @@ namespace instance_check_internal { if (!EnumWindows(EnumWindowsProc, 0)) { std::wstring wstr = boost::nowide::widen(message); - //LPWSTR command_line_args = wstr.c_str();//GetCommandLine(); - LPWSTR command_line_args = new wchar_t[wstr.size() + 1]; + std::unique_ptr command_line_args = std::make_unique(const_cast(wstr.c_str())); + /*LPWSTR command_line_args = new wchar_t[wstr.size() + 1]; copy(wstr.begin(), wstr.end(), command_line_args); - command_line_args[wstr.size()] = 0; + command_line_args[wstr.size()] = 0;*/ + //Create a COPYDATASTRUCT to send the information //cbData represents the size of the information we want to send. //lpData represents the information we want to send. //dwData is an ID defined by us(this is a type of ID different than WM_COPYDATA). COPYDATASTRUCT data_to_send = { 0 }; data_to_send.dwData = 1; - data_to_send.cbData = sizeof(TCHAR) * (wcslen(command_line_args) + 1); - data_to_send.lpData = command_line_args; - + data_to_send.cbData = sizeof(TCHAR) * (wcslen(*command_line_args.get()) + 1); + data_to_send.lpData = *command_line_args.get(); SendMessage(l_prusa_slicer_hwnd, WM_COPYDATA, 0, (LPARAM)&data_to_send); return true; } @@ -126,6 +137,13 @@ namespace instance_check_internal fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 1; + + if (! boost::filesystem::is_directory(path)) { + BOOST_LOG_TRIVIAL(debug) << "get_lock(): datadir does not exist yet, creating..."; + if (! boost::filesystem::create_directories(path)) + BOOST_LOG_TRIVIAL(debug) << "get_lock(): unable to create datadir !!!"; + } + if ((fdlock = open(dest_dir.c_str(), O_WRONLY | O_CREAT, 0666)) == -1) return true; @@ -168,7 +186,7 @@ namespace instance_check_internal const char* sigval = message_text.c_str(); //std::string interface_name = "com.prusa3d.prusaslicer.InstanceCheck"; std::string interface_name = "com.prusa3d.prusaslicer.InstanceCheck.Object" + version; - std::string method_name = "AnotherInstace"; + std::string method_name = "AnotherInstance"; //std::string object_name = "/com/prusa3d/prusaslicer/InstanceCheck"; std::string object_name = "/com/prusa3d/prusaslicer/InstanceCheck/Object" + version; @@ -198,7 +216,7 @@ namespace instance_check_internal dbus_connection_unref(conn); return true; } - //the AnotherInstace method is not sending reply. + //the AnotherInstance method is not sending reply. dbus_message_set_no_reply(msg, TRUE); //append arguments to message @@ -221,7 +239,7 @@ namespace instance_check_internal BOOST_LOG_TRIVIAL(trace) << "DBus message sent."; // free the message and close the connection - dbus_message_unref(msg); + dbus_message_unref(msg); dbus_connection_unref(conn); return true; } @@ -232,17 +250,26 @@ namespace instance_check_internal } //namespace instance_check_internal bool instance_check(int argc, char** argv, bool app_config_single_instance) -{ - std::size_t hashed_path = std::hash{}(boost::filesystem::system_complete(argv[0]).string()); +{ + std::size_t hashed_path = +#ifdef _WIN32 + std::hash{}(boost::filesystem::system_complete(argv[0]).string()); +#else + std::hash{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0])).string()); +#endif // win32 + std::string lock_name = std::to_string(hashed_path); GUI::wxGetApp().set_instance_hash(hashed_path); BOOST_LOG_TRIVIAL(debug) <<"full path: "<< lock_name; instance_check_internal::CommandLineAnalysis cla = instance_check_internal::process_command_line(argc, argv); + if (! cla.should_send.has_value()) + cla.should_send = app_config_single_instance; #ifdef _WIN32 GUI::wxGetApp().init_single_instance_checker(lock_name + ".lock", data_dir() + "/cache/"); - if ((cla.should_send || app_config_single_instance) && GUI::wxGetApp().single_instance_checker()->IsAnotherRunning()) { + if (cla.should_send.value() && GUI::wxGetApp().single_instance_checker()->IsAnotherRunning()) { #else // mac & linx - if (instance_check_internal::get_lock(lock_name + ".lock", data_dir() + "/cache/") && (cla.should_send || app_config_single_instance)) { + // get_lock() creates the lockfile therefore *cla.should_send is checked after + if (instance_check_internal::get_lock(lock_name + ".lock", data_dir() + "/cache/") && *cla.should_send) { #endif instance_check_internal::send_message(cla.cl_string, lock_name); BOOST_LOG_TRIVIAL(info) << "instance check: Another instance found. This instance will terminate."; @@ -252,6 +279,26 @@ bool instance_check(int argc, char** argv, bool app_config_single_instance) return false; } +#ifdef __APPLE__ +bool unlock_lockfile(const std::string& name, const std::string& path) +{ + std::string dest_dir = path + name; + //BOOST_LOG_TRIVIAL(debug) << "full lock path: " << dest_dir; + struct flock fl; + int fdlock; + fl.l_type = F_UNLCK; + fl.l_whence = SEEK_SET; + fl.l_start = 0; + fl.l_len = 1; + if ((fdlock = open(dest_dir.c_str(), O_WRONLY | O_CREAT, 0666)) == -1) + return false; + + if (fcntl(fdlock, F_SETLK, &fl) == -1) + return false; + + return true; +} +#endif //__APPLE__ namespace GUI { wxDEFINE_EVENT(EVT_LOAD_MODEL_OTHER_INSTANCE, LoadFromOtherInstanceEvent); @@ -345,7 +392,7 @@ void OtherInstanceMessageHandler::print_window_info(HWND hwnd) namespace MessageHandlerInternal { // returns ::path to possible model or empty ::path if input string is not existing path - static boost::filesystem::path get_path(std::string possible_path) + static boost::filesystem::path get_path(const std::string& possible_path) { BOOST_LOG_TRIVIAL(debug) << "message part:" << possible_path; @@ -367,32 +414,27 @@ namespace MessageHandlerInternal } } //namespace MessageHandlerInternal -void OtherInstanceMessageHandler::handle_message(const std::string& message) { - std::vector paths; - auto next_space = message.find(" : "); - size_t last_space = 0; - int counter = 0; - +void OtherInstanceMessageHandler::handle_message(const std::string& message) +{ BOOST_LOG_TRIVIAL(info) << "message from other instance: " << message; - while (next_space != std::string::npos) - { - if (counter != 0) { - std::string possible_path = message.substr(last_space, next_space - last_space); - boost::filesystem::path p = MessageHandlerInternal::get_path(std::move(possible_path)); - if(!p.string().empty()) - paths.emplace_back(p); - } - last_space = next_space + 3; - next_space = message.find(" : ", last_space); - counter++; + std::vector args; + bool parsed = unescape_strings_cstyle(message, args); + assert(parsed); + if (! parsed) { + BOOST_LOG_TRIVIAL(error) << "message from other instance is incorrectly formatted: " << message; + return; } - if (counter != 0 ) { - boost::filesystem::path p = MessageHandlerInternal::get_path(message.substr(last_space)); - if (!p.string().empty()) + + std::vector paths; + // Skip the first argument, it is the path to the slicer executable. + auto it = args.begin(); + for (++ it; it != args.end(); ++ it) { + boost::filesystem::path p = MessageHandlerInternal::get_path(*it); + if (! p.string().empty()) paths.emplace_back(p); } - if (!paths.empty()) { + if (! paths.empty()) { //wxEvtHandler* evt_handler = wxGetApp().plater(); //assert here? //if (evt_handler) { wxPostEvent(m_callback_evt_handler, LoadFromOtherInstanceEvent(GUI::EVT_LOAD_MODEL_OTHER_INSTANCE, std::vector(std::move(paths)))); @@ -419,7 +461,7 @@ namespace MessageHandlerDBusInternal " " " " " " - " " + " " " " " " " " @@ -434,7 +476,7 @@ namespace MessageHandlerDBusInternal static void handle_method_another_instance(DBusConnection *connection, DBusMessage *request) { DBusError err; - char* text= ""; + char* text = nullptr; wxEvtHandler* evt_handler; dbus_error_init(&err); @@ -461,7 +503,7 @@ namespace MessageHandlerDBusInternal if (0 == strcmp("org.freedesktop.DBus.Introspectable", interface_name) && 0 == strcmp("Introspect", member_name)) { respond_to_introspect(connection, message); return DBUS_HANDLER_RESULT_HANDLED; - } else if (0 == strcmp(our_interface.c_str(), interface_name) && 0 == strcmp("AnotherInstace", member_name)) { + } else if (0 == strcmp(our_interface.c_str(), interface_name) && 0 == strcmp("AnotherInstance", member_name)) { handle_method_another_instance(connection, message); return DBUS_HANDLER_RESULT_HANDLED; } diff --git a/src/slic3r/GUI/InstanceCheck.hpp b/src/slic3r/GUI/InstanceCheck.hpp index 781cb139be..9fb74b0a94 100644 --- a/src/slic3r/GUI/InstanceCheck.hpp +++ b/src/slic3r/GUI/InstanceCheck.hpp @@ -28,6 +28,8 @@ bool instance_check(int argc, char** argv, bool app_config_single_instance); // apple implementation of inner functions of instance_check // in InstanceCheckMac.mm void send_message_mac(const std::string& msg, const std::string& version); + +bool unlock_lockfile(const std::string& name, const std::string& path); #endif //__APPLE__ namespace GUI { @@ -89,6 +91,8 @@ private: void unregister_for_messages(); // Opaque pointer to RemovableDriveManagerMM void* m_impl_osx; +public: + void bring_instance_forward(); #endif //__APPLE__ }; diff --git a/src/slic3r/GUI/InstanceCheckMac.h b/src/slic3r/GUI/InstanceCheckMac.h index ed9d17418f..30943c4d53 100644 --- a/src/slic3r/GUI/InstanceCheckMac.h +++ b/src/slic3r/GUI/InstanceCheckMac.h @@ -5,4 +5,5 @@ -(instancetype) init; -(void) add_observer:(NSString *)version; -(void) message_update:(NSNotification *)note; +-(void) bring_forward; @end diff --git a/src/slic3r/GUI/InstanceCheckMac.mm b/src/slic3r/GUI/InstanceCheckMac.mm index 67bf64980b..9969b1a7b2 100644 --- a/src/slic3r/GUI/InstanceCheckMac.mm +++ b/src/slic3r/GUI/InstanceCheckMac.mm @@ -19,7 +19,13 @@ -(void)message_update:(NSNotification *)msg { - //NSLog(@"recieved msg %@", msg); + [self bring_forward]; + //pass message + Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(std::string([msg.userInfo[@"data"] UTF8String])); +} + +-(void) bring_forward +{ //demiaturize all windows for(NSWindow* win in [NSApp windows]) { @@ -30,8 +36,6 @@ } //bring window to front [[NSApplication sharedApplication] activateIgnoringOtherApps : YES]; - //pass message - Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(std::string([msg.userInfo[@"data"] UTF8String])); } @end @@ -67,6 +71,13 @@ void OtherInstanceMessageHandler::unregister_for_messages() NSLog(@"warning: unregister instance InstanceCheck notifications not required"); } } + +void OtherInstanceMessageHandler::bring_instance_forward() +{ + if (m_impl_osx) { + [m_impl_osx bring_forward]; + } +} }//namespace GUI }//namespace Slicer diff --git a/src/slic3r/GUI/Jobs/Job.cpp b/src/slic3r/GUI/Jobs/Job.cpp index cc2cb75f13..fedb6f4aca 100644 --- a/src/slic3r/GUI/Jobs/Job.cpp +++ b/src/slic3r/GUI/Jobs/Job.cpp @@ -1,6 +1,7 @@ #include #include "Job.hpp" +#include #include namespace Slic3r { diff --git a/src/slic3r/GUI/Jobs/Job.hpp b/src/slic3r/GUI/Jobs/Job.hpp index 130ca2ed9a..aea7692e7f 100644 --- a/src/slic3r/GUI/Jobs/Job.hpp +++ b/src/slic3r/GUI/Jobs/Job.hpp @@ -3,7 +3,8 @@ #include -#include +#include "libslic3r/libslic3r.h" + #include #include "ProgressIndicator.hpp" diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp index c847c84b48..978ccf8fcf 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp @@ -4,6 +4,7 @@ #include "libslic3r/SLA/Rotfinder.hpp" #include "libslic3r/MinAreaBoundingBox.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/SLAPrint.hpp" #include "slic3r/GUI/Plater.hpp" @@ -12,26 +13,41 @@ namespace Slic3r { namespace GUI { void RotoptimizeJob::process() { int obj_idx = m_plater->get_selected_object_idx(); - if (obj_idx < 0) { return; } + if (obj_idx < 0 || int(m_plater->sla_print().objects().size()) <= obj_idx) + return; ModelObject *o = m_plater->model().objects[size_t(obj_idx)]; + const SLAPrintObject *po = m_plater->sla_print().objects()[size_t(obj_idx)]; - auto r = sla::find_best_rotation( - *o, - .005f, + if (!o || !po) return; + + TriangleMesh mesh = o->raw_mesh(); + mesh.require_shared_vertices(); + +// for (auto inst : o->instances) { +// Transform3d tr = Transform3d::Identity(); +// tr.rotate(Eigen::AngleAxisd(inst->get_rotation(Z), Vec3d::UnitZ())); +// tr.rotate(Eigen::AngleAxisd(inst->get_rotation(Y), Vec3d::UnitY())); +// tr.rotate(Eigen::AngleAxisd(inst->get_rotation(X), Vec3d::UnitX())); + +// double score = sla::get_model_supportedness(*po, tr); + +// std::cout << "Model supportedness before: " << score << std::endl; +// } + + Vec2d r = sla::find_best_rotation(*po, 0.75f, [this](unsigned s) { if (s < 100) - update_status(int(s), - _(L("Searching for optimal orientation"))); + update_status(int(s), _(L("Searching for optimal orientation"))); }, - [this]() { return was_canceled(); }); + [this] () { return was_canceled(); }); double mindist = 6.0; // FIXME if (!was_canceled()) { for(ModelInstance * oi : o->instances) { - oi->set_rotation({r[X], r[Y], r[Z]}); + oi->set_rotation({r[X], r[Y], 0.}); auto trmatrix = oi->get_transformation().get_matrix(); Polygon trchull = o->convex_hull_2d(trmatrix); diff --git a/src/slic3r/GUI/Jobs/SLAImportJob.cpp b/src/slic3r/GUI/Jobs/SLAImportJob.cpp index 4e9f08ff23..adecae6ac0 100644 --- a/src/slic3r/GUI/Jobs/SLAImportJob.cpp +++ b/src/slic3r/GUI/Jobs/SLAImportJob.cpp @@ -1,14 +1,14 @@ #include "SLAImportJob.hpp" +#include "libslic3r/Format/SL1.hpp" + #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" -#include "slic3r/GUI/AppConfig.hpp" #include "slic3r/GUI/Plater.hpp" -#include "slic3r/GUI/PresetBundle.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" -#include "slic3r/Utils/SLAImport.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/PresetBundle.hpp" #include #include @@ -219,8 +219,10 @@ void SLAImportJob::finalize() wxGetApp().load_current_presets(); } - if (!p->mesh.empty()) - p->plater->sidebar().obj_list()->load_mesh_object(p->mesh, name); + if (!p->mesh.empty()) { + bool is_centered = false; + p->plater->sidebar().obj_list()->load_mesh_object(p->mesh, name, is_centered); + } reset(); } diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 556b610e91..7c70693150 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -1,3 +1,4 @@ +#include "libslic3r/libslic3r.h" #include "KBShortcutsDialog.hpp" #include "I18N.hpp" #include "libslic3r/Utils.hpp" @@ -6,6 +7,9 @@ #include #include "GUI_App.hpp" #include "wxExtensions.hpp" +#if ENABLE_GCODE_VIEWER +#include "MainFrame.hpp" +#endif // ENABLE_GCODE_VIEWER #define NOTEBOOK_TOP 1 #define NOTEBOOK_LEFT 2 @@ -29,12 +33,12 @@ namespace Slic3r { namespace GUI { KBShortcutsDialog::KBShortcutsDialog() - : DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("Keyboard Shortcuts")), -#if ENABLE_SCROLLABLE - wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +#if ENABLE_GCODE_VIEWER + : DPIDialog(NULL, wxID_ANY, wxString(wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) + " - " + _L("Keyboard Shortcuts"), #else - wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) -#endif // ENABLE_SCROLLABLE + : DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Keyboard Shortcuts"), +#endif // ENABLE_GCODE_VIEWER + wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); @@ -63,15 +67,10 @@ KBShortcutsDialog::KBShortcutsDialog() main_sizer->Add(book, 1, wxEXPAND | wxALL, 10); fill_shortcuts(); - for (size_t i = 0; i < m_full_shortcuts.size(); ++i) - { -#if ENABLE_SCROLLABLE + for (size_t i = 0; i < m_full_shortcuts.size(); ++i) { wxPanel* page = create_page(book, m_full_shortcuts[i], font, bold_font); m_pages.push_back(page); book->AddPage(page, m_full_shortcuts[i].first, i == 0); -#else - book->AddPage(create_page(book, m_full_shortcuts[i], font, bold_font), m_full_shortcuts[i].first, i == 0); -#endif // ENABLE_SCROLLABLE } wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK); @@ -98,114 +97,122 @@ void KBShortcutsDialog::fill_shortcuts() const std::string& ctrl = GUI::shortkey_ctrl_prefix(); const std::string& alt = GUI::shortkey_alt_prefix(); - Shortcuts commands_shortcuts = { - // File - { ctrl + "N", L("New project, clear plater") }, - { ctrl + "O", L("Open project STL/OBJ/AMF/3MF with config, clear plater") }, - { ctrl + "S", L("Save project (3mf)") }, - { ctrl + alt + "S", L("Save project as (3mf)") }, - { ctrl + "R", L("(Re)slice") }, - // File>Import - { ctrl + "I", L("Import STL/OBJ/AMF/3MF without config, keep plater") }, - { ctrl + "L", L("Import Config from ini/amf/3mf/gcode") }, - { ctrl + alt + "L", L("Load Config from ini/amf/3mf/gcode and merge") }, - // File>Export - { ctrl + "G", L("Export G-code") }, - { ctrl + "Shift+" + "G", L("Send G-code") }, - { ctrl + "E", L("Export config") }, - { ctrl + "U", L("Export to SD card / Flash drive") }, - { ctrl + "T", L("Eject SD card / Flash drive") }, - // Edit - { ctrl + "A", L("Select all objects") }, - { "Esc", L("Deselect all") }, - { "Del", L("Delete selected") }, - { ctrl + "Del", L("Delete all") }, - { ctrl + "Z", L("Undo") }, - { ctrl + "Y", L("Redo") }, - { ctrl + "C", L("Copy to clipboard") }, - { ctrl + "V", L("Paste from clipboard") }, - { "F5", L("Reload plater from disk") }, - { ctrl + "F", L("Search") }, - // Window - { ctrl + "1", L("Select Plater Tab") }, - { ctrl + "2", L("Select Print Settings Tab") }, - { ctrl + "3", L("Select Filament Settings Tab") }, - { ctrl + "4", L("Select Printer Settings Tab") }, - { ctrl + "5", L("Switch to 3D") }, - { ctrl + "6", L("Switch to Preview") }, - { ctrl + "J", L("Print host upload queue") }, - // View - { "0-6", L("Camera view") }, - { "E", L("Show/Hide object/instance labels") }, -#if ENABLE_SLOPE_RENDERING - { "D", L("Turn On/Off facets' slope rendering") }, -#endif // ENABLE_SLOPE_RENDERING - // Configuration - { ctrl + "P", L("Preferences") }, - // Help - { "?", L("Show keyboard shortcuts list") } - }; +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER + Shortcuts commands_shortcuts = { + // File + { ctrl + "N", L("New project, clear plater") }, + { ctrl + "O", L("Open project STL/OBJ/AMF/3MF with config, clear plater") }, + { ctrl + "S", L("Save project (3mf)") }, + { ctrl + alt + "S", L("Save project as (3mf)") }, + { ctrl + "R", L("(Re)slice") }, + // File>Import + { ctrl + "I", L("Import STL/OBJ/AMF/3MF without config, keep plater") }, + { ctrl + "L", L("Import Config from ini/amf/3mf/gcode") }, + { ctrl + alt + "L", L("Load Config from ini/amf/3mf/gcode and merge") }, + // File>Export + { ctrl + "G", L("Export G-code") }, + { ctrl + "Shift+" + "G", L("Send G-code") }, + { ctrl + "E", L("Export config") }, + { ctrl + "U", L("Export to SD card / Flash drive") }, + { ctrl + "T", L("Eject SD card / Flash drive") }, + // Edit + { ctrl + "A", L("Select all objects") }, + { "Esc", L("Deselect all") }, + { "Del", L("Delete selected") }, + { ctrl + "Del", L("Delete all") }, + { ctrl + "Z", L("Undo") }, + { ctrl + "Y", L("Redo") }, + { ctrl + "C", L("Copy to clipboard") }, + { ctrl + "V", L("Paste from clipboard") }, + { "F5", L("Reload plater from disk") }, + { ctrl + "F", L("Search") }, + // Window + { ctrl + "1", L("Select Plater Tab") }, + { ctrl + "2", L("Select Print Settings Tab") }, + { ctrl + "3", L("Select Filament Settings Tab") }, + { ctrl + "4", L("Select Printer Settings Tab") }, + { ctrl + "5", L("Switch to 3D") }, + { ctrl + "6", L("Switch to Preview") }, + { ctrl + "J", L("Print host upload queue") }, + // View + { "0-6", L("Camera view") }, + { "E", L("Show/Hide object/instance labels") }, + // Configuration + { ctrl + "P", L("Preferences") }, + // Help + { "?", L("Show keyboard shortcuts list") } + }; - m_full_shortcuts.push_back(std::make_pair(_(L("Commands")), commands_shortcuts)); + m_full_shortcuts.push_back(std::make_pair(_L("Commands"), commands_shortcuts)); - Shortcuts plater_shortcuts = { - { "A", L("Arrange") }, - { "Shift+A", L("Arrange selection") }, - { "+", L("Add Instance of the selected object") }, - { "-", L("Remove Instance of the selected object") }, - { ctrl, L("Press to select multiple objects\nor move multiple objects with mouse") }, - { "Shift+", L("Press to activate selection rectangle") }, - { alt, L("Press to activate deselection rectangle") }, - { L("Arrow Up"), L("Move selection 10 mm in positive Y direction") }, - { L("Arrow Down"), L("Move selection 10 mm in negative Y direction") }, - { L("Arrow Left"), L("Move selection 10 mm in negative X direction") }, - { L("Arrow Right"), L("Move selection 10 mm in positive X direction") }, - { std::string("Shift+") + L("Any arrow"), L("Movement step set to 1 mm") }, - { ctrl + L("Any arrow"), L("Movement in camera space") }, - { L("Page Up"), L("Rotate selection 45 degrees CCW") }, - { L("Page Down"), L("Rotate selection 45 degrees CW") }, - { "M", L("Gizmo move") }, - { "S", L("Gizmo scale") }, - { "R", L("Gizmo rotate") }, - { "C", L("Gizmo cut") }, - { "F", L("Gizmo Place face on bed") }, - { "H", L("Gizmo SLA hollow") }, - { "L", L("Gizmo SLA support points") }, - { "Esc", L("Unselect gizmo or clear selection") }, - { "K", L("Change camera type (perspective, orthographic)") }, - { "B", L("Zoom to Bed") }, - { "Z", L("Zoom to selected object\nor all objects in scene, if none selected") }, - { "I", L("Zoom in") }, - { "O", L("Zoom out") }, + Shortcuts plater_shortcuts = { + { "A", L("Arrange") }, + { "Shift+A", L("Arrange selection") }, + { "+", L("Add Instance of the selected object") }, + { "-", L("Remove Instance of the selected object") }, + { ctrl, L("Press to select multiple objects\nor move multiple objects with mouse") }, + { "Shift+", L("Press to activate selection rectangle") }, + { alt, L("Press to activate deselection rectangle") }, + { L("Arrow Up"), L("Move selection 10 mm in positive Y direction") }, + { L("Arrow Down"), L("Move selection 10 mm in negative Y direction") }, + { L("Arrow Left"), L("Move selection 10 mm in negative X direction") }, + { L("Arrow Right"), L("Move selection 10 mm in positive X direction") }, + { std::string("Shift+") + L("Any arrow"), L("Movement step set to 1 mm") }, + { ctrl + L("Any arrow"), L("Movement in camera space") }, + { L("Page Up"), L("Rotate selection 45 degrees CCW") }, + { L("Page Down"), L("Rotate selection 45 degrees CW") }, + { "M", L("Gizmo move") }, + { "S", L("Gizmo scale") }, + { "R", L("Gizmo rotate") }, + { "C", L("Gizmo cut") }, + { "F", L("Gizmo Place face on bed") }, + { "H", L("Gizmo SLA hollow") }, + { "L", L("Gizmo SLA support points") }, + { "Esc", L("Unselect gizmo or clear selection") }, + { "K", L("Change camera type (perspective, orthographic)") }, + { "B", L("Zoom to Bed") }, + { "Z", L("Zoom to selected object\nor all objects in scene, if none selected") }, + { "I", L("Zoom in") }, + { "O", L("Zoom out") }, + { "Tab", L("Switch between Editor/Preview") }, + { "Shift+Tab", L("Collapse/Expand the sidebar") }, #ifdef __linux__ - { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") }, + { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") }, #endif // __linux__ #if ENABLE_RENDER_PICKING_PASS - // Don't localize debugging texts. - { "T", "Toggle picking pass texture rendering on/off" }, + // Don't localize debugging texts. + { "P", "Toggle picking pass texture rendering on/off" }, #endif // ENABLE_RENDER_PICKING_PASS - }; + }; - m_full_shortcuts.push_back(std::make_pair(_(L("Plater")), plater_shortcuts)); + m_full_shortcuts.push_back(std::make_pair(_L("Plater"), plater_shortcuts)); - Shortcuts gizmos_shortcuts = { - { "Shift+", L("Press to snap by 5% in Gizmo scale\nor to snap by 1mm in Gizmo move") }, - { "F", L("Scale selection to fit print volume\nin Gizmo scale") }, - { ctrl, L("Press to activate one direction scaling in Gizmo scale") }, - { alt, L("Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\nselected objects around their own center") }, - }; + Shortcuts gizmos_shortcuts = { + { ctrl, L("All gizmos: Press to rotate view with mouse left or to pan view with mouse right") }, + { "Shift+", L("Gizmo move: Press to snap by 1mm") }, + { "Shift+", L("Gizmo scale: Press to snap by 5%") }, + { "F", L("Gizmo scale: Scale selection to fit print volume") }, + { ctrl, L("Gizmo scale: Press to activate one direction scaling") }, + { alt, L("Gizmo scale: Press to scale selected objects around their own center") }, + { alt, L("Gizmo rotate: Press to rotate selected objects around their own center") }, + }; - m_full_shortcuts.push_back(std::make_pair(_(L("Gizmos")), gizmos_shortcuts)); + m_full_shortcuts.push_back(std::make_pair(_L("Gizmos"), gizmos_shortcuts)); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER Shortcuts preview_shortcuts = { { L("Arrow Up"), L("Upper Layer") }, { L("Arrow Down"), L("Lower Layer") }, { "U", L("Upper Layer") }, { "D", L("Lower Layer") }, - { "L", L("Show/Hide Legend") } + { "L", L("Show/Hide Legend/Estimated printing time") }, }; - m_full_shortcuts.push_back(std::make_pair(_(L("Preview")), preview_shortcuts)); + m_full_shortcuts.push_back(std::make_pair(_L("Preview"), preview_shortcuts)); Shortcuts layers_slider_shortcuts = { { L("Arrow Up"), L("Move current slider thumb Up") }, @@ -213,10 +220,23 @@ void KBShortcutsDialog::fill_shortcuts() { L("Arrow Left"), L("Set upper thumb to current slider thumb") }, { L("Arrow Right"), L("Set lower thumb to current slider thumb") }, { "+", L("Add color change marker for current layer") }, - { "-", L("Delete color change marker for current layer") } + { "-", L("Delete color change marker for current layer") }, + { "Shift+", L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") }, + { ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") }, }; - m_full_shortcuts.push_back(std::make_pair(_(L("Layers Slider")), layers_slider_shortcuts)); + m_full_shortcuts.push_back(std::make_pair(_L("Layers Slider"), layers_slider_shortcuts)); + +#if ENABLE_GCODE_VIEWER + Shortcuts sequential_slider_shortcuts = { + { L("Arrow Left"), L("Move current slider thumb Left") }, + { L("Arrow Right"), L("Move current slider thumb Right") }, + { "Shift+", L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") }, + { ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") }, + }; + + m_full_shortcuts.push_back(std::make_pair(_L("Sequential Slider"), sequential_slider_shortcuts)); +#endif // ENABLE_GCODE_VIEWER } wxPanel* KBShortcutsDialog::create_header(wxWindow* parent, const wxFont& bold_font) @@ -234,12 +254,16 @@ wxPanel* KBShortcutsDialog::create_header(wxWindow* parent, const wxFont& bold_f sizer->AddStretchSpacer(); // logo +#if ENABLE_GCODE_VIEWER + m_logo_bmp = ScalableBitmap(this, wxGetApp().is_editor() ? "PrusaSlicer_32px.png" : "PrusaSlicer-gcodeviewer_32px.png", 32); +#else m_logo_bmp = ScalableBitmap(this, "PrusaSlicer_32px.png", 32); +#endif // ENABLE_GCODE_VIEWER m_header_bitmap = new wxStaticBitmap(panel, wxID_ANY, m_logo_bmp.bmp()); sizer->Add(m_header_bitmap, 0, wxEXPAND | wxLEFT | wxRIGHT, 10); // text - wxStaticText* text = new wxStaticText(panel, wxID_ANY, _(L("Keyboard shortcuts"))); + wxStaticText* text = new wxStaticText(panel, wxID_ANY, _L("Keyboard shortcuts")); text->SetFont(header_font); sizer->Add(text, 0, wxALIGN_CENTER_VERTICAL); @@ -254,13 +278,9 @@ wxPanel* KBShortcutsDialog::create_page(wxWindow* parent, const std::pairSetScrollbars(20, 20, 50, 50); page->SetInitialSize(wxSize(850, 450)); -#else - wxPanel* page = new wxPanel(parent); -#endif // ENABLE_SCROLLABLE #if (BOOK_TYPE == LISTBOOK_TOP) || (BOOK_TYPE == LISTBOOK_LEFT) wxStaticBoxSizer* sizer = new wxStaticBoxSizer(wxVERTICAL, page, " " + shortcuts.first + " "); @@ -272,22 +292,23 @@ wxPanel* KBShortcutsDialog::create_page(wxWindow* parent, const std::pair= items_count) - break; + if (id < items_count) { + const auto& [shortcut, description] = shortcuts.second[id]; + auto key = new wxStaticText(page, wxID_ANY, _(shortcut)); + key->SetFont(bold_font); + grid_sizer->Add(key, 0, wxALIGN_CENTRE_VERTICAL); - const auto& [shortcut, description] = shortcuts.second[id]; - auto key = new wxStaticText(page, wxID_ANY, _(shortcut)); - key->SetFont(bold_font); - grid_sizer->Add(key, 0, wxALIGN_CENTRE_VERTICAL); - - auto desc = new wxStaticText(page, wxID_ANY, _(description)); - desc->SetFont(font); - grid_sizer->Add(desc, 0, wxALIGN_CENTRE_VERTICAL); + auto desc = new wxStaticText(page, wxID_ANY, _(description)); + desc->SetFont(font); + grid_sizer->Add(desc, 0, wxALIGN_CENTRE_VERTICAL); + } + else { + grid_sizer->Add(new wxStaticText(page, wxID_ANY, ""), 0, wxALIGN_CENTRE_VERTICAL); + grid_sizer->Add(new wxStaticText(page, wxID_ANY, ""), 0, wxALIGN_CENTRE_VERTICAL); + } } } diff --git a/src/slic3r/GUI/KBShortcutsDialog.hpp b/src/slic3r/GUI/KBShortcutsDialog.hpp index 70820ae774..a8ec4e4267 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.hpp +++ b/src/slic3r/GUI/KBShortcutsDialog.hpp @@ -8,8 +8,6 @@ #include "GUI_Utils.hpp" #include "wxExtensions.hpp" -#define ENABLE_SCROLLABLE 1 - namespace Slic3r { namespace GUI { @@ -22,9 +20,7 @@ class KBShortcutsDialog : public DPIDialog ShortcutsVec m_full_shortcuts; ScalableBitmap m_logo_bmp; wxStaticBitmap* m_header_bitmap; -#if ENABLE_SCROLLABLE std::vector m_pages; -#endif // ENABLE_SCROLLABLE public: KBShortcutsDialog(); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 10d9d800f9..2e334c5590 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -8,6 +8,7 @@ #include #include //#include +#include #include #include @@ -15,12 +16,11 @@ #include "libslic3r/Print.hpp" #include "libslic3r/Polygon.hpp" #include "libslic3r/SLAPrint.hpp" +#include "libslic3r/PresetBundle.hpp" #include "Tab.hpp" -#include "PresetBundle.hpp" #include "ProgressStatusBar.hpp" #include "3DScene.hpp" -#include "AppConfig.hpp" #include "PrintHostDialogs.hpp" #include "wxExtensions.hpp" #include "GUI_ObjectList.hpp" @@ -30,6 +30,7 @@ #include "I18N.hpp" #include "GLCanvas3D.hpp" #include "Plater.hpp" +#include "../Utils/Process.hpp" #include #include "GUI_App.hpp" @@ -42,44 +43,51 @@ namespace Slic3r { namespace GUI { -#if ENABLE_LAYOUT_NO_RESTART enum class ERescaleTarget { Mainframe, SettingsDialog }; -static void rescale_dialog_after_dpi_change(MainFrame& mainframe, SettingsDialog& dialog, ERescaleTarget target) +#ifdef __APPLE__ +class PrusaSlicerTaskBarIcon : public wxTaskBarIcon { - int mainframe_dpi = get_dpi_for_window(&mainframe); - int dialog_dpi = get_dpi_for_window(&dialog); - if (mainframe_dpi != dialog_dpi) { - if (target == ERescaleTarget::SettingsDialog) { - dialog.enable_force_rescale(); -#if wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) - dialog.GetEventHandler()->AddPendingEvent(wxDPIChangedEvent(wxSize(mainframe_dpi, mainframe_dpi), wxSize(dialog_dpi, dialog_dpi))); -#else - dialog.GetEventHandler()->AddPendingEvent(DpiChangedEvent(EVT_DPI_CHANGED_SLICER, dialog_dpi, dialog.GetRect())); -#endif // wxVERSION_EQUAL_OR_GREATER_THAN - } else { -#if wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) - mainframe.GetEventHandler()->AddPendingEvent(wxDPIChangedEvent(wxSize(dialog_dpi, dialog_dpi), wxSize(mainframe_dpi, mainframe_dpi))); -#else - mainframe.enable_force_rescale(); - mainframe.GetEventHandler()->AddPendingEvent(DpiChangedEvent(EVT_DPI_CHANGED_SLICER, mainframe_dpi, mainframe.GetRect())); -#endif // wxVERSION_EQUAL_OR_GREATER_THAN +public: + PrusaSlicerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} + wxMenu *CreatePopupMenu() override { + wxMenu *menu = new wxMenu; + if(wxGetApp().app_config->get("single_instance") == "1") { + // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, + // as starting new instances would interfere with the locking mechanism of "single_instance" support. + //FIXME Vojtech thinks the condition is wrong. + append_menu_item(menu, wxID_ANY, _L("Open new instance"), _L("Open a new PrusaSlicer instance"), + [this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); } + append_menu_item(menu, wxID_ANY, _L("G-code preview") + dots, _L("Open G-code viewer"), + [this](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); + return menu; } -} -#endif // ENABLE_LAYOUT_NO_RESTART +}; +class GCodeViewerTaskBarIcon : public wxTaskBarIcon +{ +public: + GCodeViewerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} + wxMenu *CreatePopupMenu() override { + wxMenu *menu = new wxMenu; + append_menu_item(menu, wxID_ANY, _L("Open PrusaSlicer"), _L("Open a new PrusaSlicer instance"), + [this](wxCommandEvent&) { start_new_slicer(nullptr, true); }, "", nullptr); + append_menu_item(menu, wxID_ANY, _L("G-code preview") + dots, _L("Open new G-code viewer"), + [this](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); + return menu; + } +}; +#endif // __APPLE__ MainFrame::MainFrame() : DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "mainframe"), m_printhost_queue_dlg(new PrintHostQueueDialog(this)) , m_recent_projects(9) -#if ENABLE_LAYOUT_NO_RESTART , m_settings_dialog(this) -#endif // ENABLE_LAYOUT_NO_RESTART { // Fonts were created by the DPIFrame constructor for the monitor, on which the window opened. wxGetApp().update_fonts(this); @@ -89,33 +97,97 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S #endif // Font is already set in DPIFrame constructor */ + +#ifdef __APPLE__ + // Initialize the docker task bar icon. + switch (wxGetApp().get_app_mode()) { + default: + case GUI_App::EAppMode::Editor: + m_taskbar_icon = std::make_unique(wxTBI_DOCK); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG), "PrusaSlicer"); + break; + case GUI_App::EAppMode::GCodeViewer: + m_taskbar_icon = std::make_unique(wxTBI_DOCK); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer_128px.png"), wxBITMAP_TYPE_PNG), "G-code Viewer"); + break; + } +#endif // __APPLE__ + // Load the icon either from the exe, or from the ico file. #if _WIN32 { +#if ENABLE_GCODE_VIEWER + wxString src_path; + wxFileName::SplitPath(wxStandardPaths::Get().GetExecutablePath(), &src_path, nullptr, nullptr, wxPATH_NATIVE); + switch (wxGetApp().get_app_mode()) { + default: + case GUI_App::EAppMode::Editor: { src_path += "\\prusa-slicer.exe"; break; } + case GUI_App::EAppMode::GCodeViewer: { src_path += "\\prusa-gcodeviewer.exe"; break; } + } + wxIconLocation icon_location; + icon_location.SetFileName(src_path); + SetIcon(icon_location); +#else TCHAR szExeFileName[MAX_PATH]; GetModuleFileName(nullptr, szExeFileName, MAX_PATH); SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO)); +#endif // ENABLE_GCODE_VIEWER } #else - SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); +#if ENABLE_GCODE_VIEWER + switch (wxGetApp().get_app_mode()) + { + default: + case GUI_App::EAppMode::Editor: + { +#endif // ENABLE_GCODE_VIEWER + SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); +#if ENABLE_GCODE_VIEWER + break; + } + case GUI_App::EAppMode::GCodeViewer: + { + SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer_128px.png"), wxBITMAP_TYPE_PNG)); + break; + } + } +#endif // ENABLE_GCODE_VIEWER #endif // _WIN32 // initialize status bar - m_statusbar = std::make_shared(this); + m_statusbar = std::make_shared(this); m_statusbar->set_font(GUI::wxGetApp().normal_font()); - m_statusbar->embed(this); - m_statusbar->set_status_text(_(L("Version")) + " " + - SLIC3R_VERSION + - _(L(" - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases"))); - - /* Load default preset bitmaps before a tabpanel initialization, - * but after filling of an em_unit value - */ - wxGetApp().preset_bundle->load_default_preset_bitmaps(); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER + m_statusbar->embed(this); + m_statusbar->set_status_text(_L("Version") + " " + + SLIC3R_VERSION + + _L(" - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases")); // initialize tabpanel and menubar init_tabpanel(); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_gcode_viewer()) + init_menubar_as_gcodeviewer(); + else + init_menubar_as_editor(); + +#if _WIN32 + // This is needed on Windows to fake the CTRL+# of the window menu when using the numpad + wxAcceleratorEntry entries[6]; + entries[0].Set(wxACCEL_CTRL, WXK_NUMPAD1, wxID_HIGHEST + 1); + entries[1].Set(wxACCEL_CTRL, WXK_NUMPAD2, wxID_HIGHEST + 2); + entries[2].Set(wxACCEL_CTRL, WXK_NUMPAD3, wxID_HIGHEST + 3); + entries[3].Set(wxACCEL_CTRL, WXK_NUMPAD4, wxID_HIGHEST + 4); + entries[4].Set(wxACCEL_CTRL, WXK_NUMPAD5, wxID_HIGHEST + 5); + entries[5].Set(wxACCEL_CTRL, WXK_NUMPAD6, wxID_HIGHEST + 6); + wxAcceleratorTable accel(6, entries); + SetAcceleratorTable(accel); +#endif // _WIN32 +#else init_menubar(); +#endif // ENABLE_GCODE_VIEWER // set default tooltip timer in msec // SetAutoPop supposedly accepts long integers but some bug doesn't allow for larger values @@ -124,43 +196,15 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S m_loaded = true; -#if !ENABLE_LAYOUT_NO_RESTART -#ifdef __APPLE__ - // Using SetMinSize() on Mac messes up the window position in some cases - // cf. https://groups.google.com/forum/#!topic/wx-users/yUKPBBfXWO0 - // So, if we haven't possibility to set MinSize() for the MainFrame, - // set the MinSize() as a half of regular for the m_plater and m_tabpanel, when settings layout is in slNew mode - // Otherwise, MainFrame will be maximized by height - if (slNew) { - wxSize size = wxGetApp().get_min_size(); - size.SetHeight(int(0.5*size.GetHeight())); - m_plater->SetMinSize(size); - m_tabpanel->SetMinSize(size); - } -#endif -#endif // !ENABLE_LAYOUT_NO_RESTART - // initialize layout m_main_sizer = new wxBoxSizer(wxVERTICAL); wxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(m_main_sizer, 1, wxEXPAND); -#if ENABLE_LAYOUT_NO_RESTART SetSizer(sizer); // initialize layout from config update_layout(); sizer->SetSizeHints(this); Fit(); -#else - if (m_plater && m_layout != slOld) - sizer->Add(m_plater, 1, wxEXPAND); - - if (m_tabpanel && m_layout != slDlg) - sizer->Add(m_tabpanel, 1, wxEXPAND); - - sizer->SetSizeHints(this); - SetSizer(sizer); - Fit(); -#endif // !ENABLE_LAYOUT_NO_RESTART const wxSize min_size = wxGetApp().get_min_size(); //wxSize(76*wxGetApp().em_unit(), 49*wxGetApp().em_unit()); #ifdef __APPLE__ @@ -176,65 +220,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S update_title(); // declare events - Bind(wxEVT_CREATE, [this](wxWindowCreateEvent& event) { - -#ifdef _WIN32 - //static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED }; - //static GUID GUID_DEVINTERFACE_DISK = { 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b }; - //static GUID GUID_DEVINTERFACE_VOLUME = { 0x71a27cdd, 0x812a, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f }; - static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; - - // Register USB HID (Human Interface Devices) notifications to trigger the 3DConnexion enumeration. - DEV_BROADCAST_DEVICEINTERFACE NotificationFilter = { 0 }; - NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); - NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; - NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_HID; - m_hDeviceNotify = ::RegisterDeviceNotification(this->GetHWND(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); - -// or register for file handle change? -// DEV_BROADCAST_HANDLE NotificationFilter = { 0 }; -// NotificationFilter.dbch_size = sizeof(DEV_BROADCAST_HANDLE); -// NotificationFilter.dbch_devicetype = DBT_DEVTYP_HANDLE; - - // Using Win32 Shell API to register for media insert / removal events. - LPITEMIDLIST ppidl; - if (SHGetSpecialFolderLocation(this->GetHWND(), CSIDL_DESKTOP, &ppidl) == NOERROR) { - SHChangeNotifyEntry shCNE; - shCNE.pidl = ppidl; - shCNE.fRecursive = TRUE; - // Returns a positive integer registration identifier (ID). - // Returns zero if out of memory or in response to invalid parameters. - m_ulSHChangeNotifyRegister = SHChangeNotifyRegister(this->GetHWND(), // Hwnd to receive notification - SHCNE_DISKEVENTS, // Event types of interest (sources) - SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED, - //SHCNE_UPDATEITEM, // Events of interest - use SHCNE_ALLEVENTS for all events - WM_USER_MEDIACHANGED, // Notification message to be sent upon the event - 1, // Number of entries in the pfsne array - &shCNE); // Array of SHChangeNotifyEntry structures that - // contain the notifications. This array should - // always be set to one when calling SHChnageNotifyRegister - // or SHChangeNotifyDeregister will not work properly. - assert(m_ulSHChangeNotifyRegister != 0); // Shell notification failed - } else { - // Failed to get desktop location - assert(false); - } - - { - static constexpr int device_count = 1; - RAWINPUTDEVICE devices[device_count] = { 0 }; - // multi-axis mouse (SpaceNavigator, etc.) - devices[0].usUsagePage = 0x01; - devices[0].usUsage = 0x08; - if (! RegisterRawInputDevices(devices, device_count, sizeof(RAWINPUTDEVICE))) - BOOST_LOG_TRIVIAL(error) << "RegisterRawInputDevices failed"; - } -#endif // _WIN32 - - // propagate event - event.Skip(); - }); - Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& event) { if (event.CanVeto() && !wxGetApp().check_unsaved_changes()) { event.Veto(); @@ -245,6 +230,8 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S event.Skip(); }); + //FIXME it seems this method is not called on application start-up, at least not on Windows. Why? + // The same applies to wxEVT_CREATE, it is not being called on startup on Windows. Bind(wxEVT_ACTIVATE, [this](wxActivateEvent& event) { if (m_plater != nullptr && event.GetActive()) m_plater->on_activate(); @@ -252,20 +239,18 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S }); wxGetApp().persist_window_geometry(this, true); -#if ENABLE_LAYOUT_NO_RESTART wxGetApp().persist_window_geometry(&m_settings_dialog, true); -#else - if (m_settings_dialog != nullptr) - wxGetApp().persist_window_geometry(m_settings_dialog, true); -#endif // ENABLE_LAYOUT_NO_RESTART update_ui_from_settings(); // FIXME (?) - if (m_plater != nullptr) + if (m_plater != nullptr) { +#if ENABLE_GCODE_VIEWER + m_plater->get_collapse_toolbar().set_enabled(wxGetApp().app_config->get("show_collapse_button") == "1"); +#endif // ENABLE_GCODE_VIEWER m_plater->show_action_buttons(true); + } } -#if ENABLE_LAYOUT_NO_RESTART void MainFrame::update_layout() { auto restore_to_creation = [this]() { @@ -292,9 +277,6 @@ void MainFrame::update_layout() m_plater_page = nullptr; } - if (m_layout == ESettingsLayout::Dlg) - rescale_dialog_after_dpi_change(*this, m_settings_dialog, ERescaleTarget::Mainframe); - clean_sizer(m_main_sizer); clean_sizer(m_settings_dialog.GetSizer()); @@ -307,9 +289,16 @@ void MainFrame::update_layout() Layout(); }; +#if ENABLE_GCODE_VIEWER + ESettingsLayout layout = wxGetApp().is_gcode_viewer() ? ESettingsLayout::GCodeViewer : + (wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : + wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : + wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old); +#else ESettingsLayout layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old : wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New : wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old; +#endif // ENABLE_GCODE_VIEWER if (m_layout == layout) return; @@ -322,6 +311,17 @@ void MainFrame::update_layout() if (m_layout != ESettingsLayout::Unknown) restore_to_creation(); +#ifdef __WXMSW__ + enum class State { + noUpdate, + fromDlg, + toDlg + }; + State update_scaling_state = //m_layout == ESettingsLayout::Unknown ? State::noUpdate : // don't scale settings dialog from the application start + m_layout == ESettingsLayout::Dlg ? State::fromDlg : + layout == ESettingsLayout::Dlg ? State::toDlg : State::noUpdate; +#endif //__WXMSW__ + m_layout = layout; // From the very beginning the Print settings should be selected @@ -330,6 +330,10 @@ void MainFrame::update_layout() // Set new settings switch (m_layout) { + case ESettingsLayout::Unknown: + { + break; + } case ESettingsLayout::Old: { m_plater->Reparent(m_tabpanel); @@ -354,14 +358,52 @@ void MainFrame::update_layout() m_main_sizer->Add(m_plater, 1, wxEXPAND); m_tabpanel->Reparent(&m_settings_dialog); m_settings_dialog.GetSizer()->Add(m_tabpanel, 1, wxEXPAND); - - rescale_dialog_after_dpi_change(*this, m_settings_dialog, ERescaleTarget::SettingsDialog); - m_tabpanel->Show(); m_plater->Show(); break; } +#if ENABLE_GCODE_VIEWER + case ESettingsLayout::GCodeViewer: + { + m_main_sizer->Add(m_plater, 1, wxEXPAND); + m_plater->set_bed_shape({ { 0.0, 0.0 }, { 200.0, 0.0 }, { 200.0, 200.0 }, { 0.0, 200.0 } }, "", "", true); + m_plater->get_collapse_toolbar().set_enabled(false); + m_plater->collapse_sidebar(true); + m_plater->Show(); + break; } +#endif // ENABLE_GCODE_VIEWER + } + +#ifdef __WXMSW__ + if (update_scaling_state != State::noUpdate) + { + int mainframe_dpi = get_dpi_for_window(this); + int dialog_dpi = get_dpi_for_window(&m_settings_dialog); + if (mainframe_dpi != dialog_dpi) { + wxSize oldDPI = update_scaling_state == State::fromDlg ? wxSize(dialog_dpi, dialog_dpi) : wxSize(mainframe_dpi, mainframe_dpi); + wxSize newDPI = update_scaling_state == State::toDlg ? wxSize(dialog_dpi, dialog_dpi) : wxSize(mainframe_dpi, mainframe_dpi); + + if (update_scaling_state == State::fromDlg) + this->enable_force_rescale(); + else + (&m_settings_dialog)->enable_force_rescale(); + + wxWindow* win { nullptr }; + if (update_scaling_state == State::fromDlg) + win = this; + else + win = &m_settings_dialog; + +#if wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) + m_tabpanel->MSWUpdateOnDPIChange(oldDPI, newDPI); + win->GetEventHandler()->AddPendingEvent(wxDPIChangedEvent(oldDPI, newDPI)); +#else + win->GetEventHandler()->AddPendingEvent(DpiChangedEvent(EVT_DPI_CHANGED_SLICER, newDPI, win->GetRect())); +#endif // wxVERSION_EQUAL_OR_GREATER_THAN + } + } +#endif //__WXMSW__ //#ifdef __APPLE__ // // Using SetMinSize() on Mac messes up the window position in some cases @@ -380,7 +422,6 @@ void MainFrame::update_layout() Layout(); Thaw(); } -#endif // ENABLE_LAYOUT_NO_RESTART // Called when closing the application and when switching the application language. void MainFrame::shutdown() @@ -396,6 +437,20 @@ void MainFrame::shutdown() } #endif // _WIN32 +#if ENABLE_GCODE_VIEWER + if (m_plater != nullptr) { + m_plater->stop_jobs(); + + // Unbinding of wxWidgets event handling in canvases needs to be done here because on MAC, + // when closing the application using Command+Q, a mouse event is triggered after this lambda is completed, + // causing a crash + m_plater->unbind_canvas_event_handlers(); + + // Cleanup of canvases' volumes needs to be done here or a crash may happen on some Linux Debian flavours + // see: https://github.com/prusa3d/PrusaSlicer/issues/3964 + m_plater->reset_canvas_volumes(); + } +#else if (m_plater) m_plater->stop_jobs(); @@ -407,6 +462,7 @@ void MainFrame::shutdown() // Cleanup of canvases' volumes needs to be done here or a crash may happen on some Linux Debian flavours // see: https://github.com/prusa3d/PrusaSlicer/issues/3964 if (m_plater) m_plater->reset_canvas_volumes(); +#endif // ENABLE_GCODE_VIEWER // Weird things happen as the Paint messages are floating around the windows being destructed. // Avoid the Paint messages by hiding the main window. @@ -414,26 +470,17 @@ void MainFrame::shutdown() // In addition, there were some crashes due to the Paint events sent to already destructed windows. this->Show(false); -#if ENABLE_LAYOUT_NO_RESTART if (m_settings_dialog.IsShown()) // call Close() to trigger call to lambda defined into GUI_App::persist_window_geometry() m_settings_dialog.Close(); -#else - if (m_settings_dialog != nullptr) - { - if (m_settings_dialog->IsShown()) - // call Close() to trigger call to lambda defined into GUI_App::persist_window_geometry() - m_settings_dialog->Close(); - m_settings_dialog->Destroy(); + if (m_plater != nullptr) { + // Stop the background thread (Windows and Linux). + // Disconnect from a 3DConnextion driver (OSX). + m_plater->get_mouse3d_controller().shutdown(); + // Store the device parameter database back to appconfig. + m_plater->get_mouse3d_controller().save_config(*wxGetApp().app_config); } -#endif // ENABLE_LAYOUT_NO_RESTART - - // Stop the background thread (Windows and Linux). - // Disconnect from a 3DConnextion driver (OSX). - m_plater->get_mouse3d_controller().shutdown(); - // Store the device parameter database back to appconfig. - m_plater->get_mouse3d_controller().save_config(*wxGetApp().app_config); // Stop the background thread of the removable drive manager, so that no new updates will be sent to the Plater. wxGetApp().removable_drive_manager()->shutdown(); @@ -455,8 +502,7 @@ void MainFrame::shutdown() void MainFrame::update_title() { wxString title = wxEmptyString; - if (m_plater != nullptr) - { + if (m_plater != nullptr) { // m_plater->get_project_filename() produces file name including path, but excluding extension. // Don't try to remove the extension, it would remove part of the file name after the last dot! wxString project = from_path(into_path(m_plater->get_project_filename()).filename()); @@ -464,7 +510,11 @@ void MainFrame::update_title() title += (project + " - "); } +#if ENABLE_GCODE_VIEWER + std::string build_id = wxGetApp().is_editor() ? SLIC3R_BUILD_ID : GCODEVIEWER_BUILD_ID; +#else std::string build_id = SLIC3R_BUILD_ID; +#endif // ENABLE_GCODE_VIEWER size_t idx_plus = build_id.find('+'); if (idx_plus != build_id.npos) { // Parse what is behind the '+'. If there is a number, then it is a build number after the label, and full build ID is shown. @@ -479,14 +529,19 @@ void MainFrame::update_title() #endif } } - title += (wxString(build_id) + " " + _(L("based on Slic3r"))); +#if ENABLE_GCODE_VIEWER + title += wxString(build_id); + if (wxGetApp().is_editor()) + title += (" " + _L("based on Slic3r")); +#else + title += (wxString(build_id) + " " + _L("based on Slic3r")); +#endif // ENABLE_GCODE_VIEWER SetTitle(title); } void MainFrame::init_tabpanel() { -#if ENABLE_LAYOUT_NO_RESTART // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on Windows 10 // with multiple high resolution displays connected. m_tabpanel = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); @@ -495,27 +550,6 @@ void MainFrame::init_tabpanel() #endif m_tabpanel->Hide(); m_settings_dialog.set_tabpanel(m_tabpanel); -#else - m_layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? slOld : - wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? slNew : - wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? slDlg : slOld; - - // From the very beginning the Print settings should be selected - m_last_selected_tab = m_layout == slDlg ? 0 : 1; - - if (m_layout == slDlg) { - m_settings_dialog = new SettingsDialog(this); - m_tabpanel = m_settings_dialog->get_tabpanel(); - } - else { - // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on Windows 10 - // with multiple high resolution displays connected. - m_tabpanel = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); -#ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList - m_tabpanel->SetFont(Slic3r::GUI::wxGetApp().normal_font()); -#endif - } -#endif // ENABLE_LAYOUT_NO_RESTART m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, [this](wxEvent&) { wxWindow* panel = m_tabpanel->GetCurrentPage(); @@ -533,23 +567,12 @@ void MainFrame::init_tabpanel() m_last_selected_tab = m_tabpanel->GetSelection(); } else - select_tab(0); // select Plater + select_tab(size_t(0)); // select Plater }); -#if ENABLE_LAYOUT_NO_RESTART m_plater = new Plater(this, this); m_plater->Hide(); -#else - if (m_layout == slOld) { - m_plater = new Plater(m_tabpanel, this); - m_tabpanel->AddPage(m_plater, _L("Plater")); - } - else { - m_plater = new Plater(this, this); - if (m_layout == slNew) - m_tabpanel->AddPage(new wxPanel(m_tabpanel), _L("Plater")); // empty panel just for Plater tab - } -#endif // ENABLE_LAYOUT_NO_RESTART + wxGetApp().plater_ = m_plater; wxGetApp().obj_list()->create_popup_menus(); @@ -561,7 +584,10 @@ void MainFrame::init_tabpanel() // or when the preset's "modified" status changes. Bind(EVT_TAB_PRESETS_CHANGED, &MainFrame::on_presets_changed, this); // #ys_FIXME_to_delete - create_preset_tabs(); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER + create_preset_tabs(); if (m_plater) { // load initial config @@ -576,6 +602,62 @@ void MainFrame::init_tabpanel() } } +#ifdef WIN32 +void MainFrame::register_win32_callbacks() +{ + //static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED }; + //static GUID GUID_DEVINTERFACE_DISK = { 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b }; + //static GUID GUID_DEVINTERFACE_VOLUME = { 0x71a27cdd, 0x812a, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f }; + static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; + + // Register USB HID (Human Interface Devices) notifications to trigger the 3DConnexion enumeration. + DEV_BROADCAST_DEVICEINTERFACE NotificationFilter = { 0 }; + NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); + NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; + NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_HID; + m_hDeviceNotify = ::RegisterDeviceNotification(this->GetHWND(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); + +// or register for file handle change? +// DEV_BROADCAST_HANDLE NotificationFilter = { 0 }; +// NotificationFilter.dbch_size = sizeof(DEV_BROADCAST_HANDLE); +// NotificationFilter.dbch_devicetype = DBT_DEVTYP_HANDLE; + + // Using Win32 Shell API to register for media insert / removal events. + LPITEMIDLIST ppidl; + if (SHGetSpecialFolderLocation(this->GetHWND(), CSIDL_DESKTOP, &ppidl) == NOERROR) { + SHChangeNotifyEntry shCNE; + shCNE.pidl = ppidl; + shCNE.fRecursive = TRUE; + // Returns a positive integer registration identifier (ID). + // Returns zero if out of memory or in response to invalid parameters. + m_ulSHChangeNotifyRegister = SHChangeNotifyRegister(this->GetHWND(), // Hwnd to receive notification + SHCNE_DISKEVENTS, // Event types of interest (sources) + SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED, + //SHCNE_UPDATEITEM, // Events of interest - use SHCNE_ALLEVENTS for all events + WM_USER_MEDIACHANGED, // Notification message to be sent upon the event + 1, // Number of entries in the pfsne array + &shCNE); // Array of SHChangeNotifyEntry structures that + // contain the notifications. This array should + // always be set to one when calling SHChnageNotifyRegister + // or SHChangeNotifyDeregister will not work properly. + assert(m_ulSHChangeNotifyRegister != 0); // Shell notification failed + } else { + // Failed to get desktop location + assert(false); + } + + { + static constexpr int device_count = 1; + RAWINPUTDEVICE devices[device_count] = { 0 }; + // multi-axis mouse (SpaceNavigator, etc.) + devices[0].usUsagePage = 0x01; + devices[0].usUsage = 0x08; + if (! RegisterRawInputDevices(devices, device_count, sizeof(RAWINPUTDEVICE))) + BOOST_LOG_TRIVIAL(error) << "RegisterRawInputDevices failed"; + } +} +#endif // _WIN32 + void MainFrame::create_preset_tabs() { wxGetApp().update_label_colours_from_appconfig(); @@ -596,6 +678,22 @@ void MainFrame::add_created_tab(Tab* panel) m_tabpanel->AddPage(panel, panel->title()); } +bool MainFrame::is_active_and_shown_tab(Tab* tab) +{ + int page_id = m_tabpanel->FindPage(tab); + + if (m_tabpanel->GetSelection() != page_id) + return false; + + if (m_layout == ESettingsLayout::Dlg) + return m_settings_dialog.IsShown(); + + if (m_layout == ESettingsLayout::New) + return m_main_sizer->IsShown(m_tabpanel); + + return true; +} + bool MainFrame::can_start_new_project() const { return (m_plater != nullptr) && !m_plater->model().objects.empty(); @@ -691,7 +789,6 @@ bool MainFrame::can_slice() const bool MainFrame::can_change_view() const { -#if ENABLE_LAYOUT_NO_RESTART switch (m_layout) { default: { return false; } @@ -701,16 +798,10 @@ bool MainFrame::can_change_view() const int page_id = m_tabpanel->GetSelection(); return page_id != wxNOT_FOUND && dynamic_cast(m_tabpanel->GetPage((size_t)page_id)) != nullptr; } +#if ENABLE_GCODE_VIEWER + case ESettingsLayout::GCodeViewer: { return true; } +#endif // ENABLE_GCODE_VIEWER } -#else - if (m_layout == slNew) - return m_plater->IsShown(); - if (m_layout == slDlg) - return true; - // slOld layout mode - int page_id = m_tabpanel->GetSelection(); - return page_id != wxNOT_FOUND && dynamic_cast(m_tabpanel->GetPage((size_t)page_id)) != nullptr; -#endif // ENABLE_LAYOUT_NO_RESTART } bool MainFrame::can_select() const @@ -747,20 +838,11 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) #endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT this->SetFont(this->normal_font()); - /* Load default preset bitmaps before a tabpanel initialization, - * but after filling of an em_unit value - */ - wxGetApp().preset_bundle->load_default_preset_bitmaps(); - // update Plater wxGetApp().plater()->msw_rescale(); // update Tabs -#if ENABLE_LAYOUT_NO_RESTART if (m_layout != ESettingsLayout::Dlg) // Do not update tabs if the Settings are in the separated dialog -#else - if (m_layout != slDlg) // Update tabs later, from the SettingsDialog, when the Settings are in the separated dialog -#endif // ENABLE_LAYOUT_NO_RESTART for (auto tab : wxGetApp().tabs_list) tab->msw_rescale(); @@ -788,11 +870,6 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) this->SetSize(sz); this->Maximize(is_maximized); - -#if ENABLE_LAYOUT_NO_RESTART - if (m_layout == ESettingsLayout::Dlg) - rescale_dialog_after_dpi_change(*this, m_settings_dialog, ERescaleTarget::SettingsDialog); -#endif // ENABLE_LAYOUT_NO_RESTART } void MainFrame::on_sys_color_changed() @@ -802,8 +879,6 @@ void MainFrame::on_sys_color_changed() // update label colors in respect to the system mode wxGetApp().init_label_colours(); - wxGetApp().preset_bundle->load_default_preset_bitmaps(); - // update Plater wxGetApp().plater()->sys_color_changed(); @@ -817,7 +892,89 @@ void MainFrame::on_sys_color_changed() msw_rescale_menu(menu_bar->GetMenu(id)); } +#if ENABLE_GCODE_VIEWER +#ifdef _MSC_VER + // \xA0 is a non-breaking space. It is entered here to spoil the automatic accelerators, + // as the simple numeric accelerators spoil all numeric data entry. +static const wxString sep = "\t\xA0"; +static const wxString sep_space = "\xA0"; +#else +static const wxString sep = " - "; +static const wxString sep_space = ""; +#endif + +static wxMenu* generate_help_menu() +{ + wxMenu* helpMenu = new wxMenu(); + append_menu_item(helpMenu, wxID_ANY, _L("Prusa 3D &Drivers"), _L("Open the Prusa3D drivers download page in your browser"), + [](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/downloads"); }); + append_menu_item(helpMenu, wxID_ANY, _L("Software &Releases"), _L("Open the software releases page in your browser"), + [](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/PrusaSlicer/releases"); }); +//# my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{ +//# wxTheApp->check_version(1); +//# }); +//# $versioncheck->Enable(wxTheApp->have_version_check); + append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s &Website"), SLIC3R_APP_NAME), + wxString::Format(_L("Open the %s website in your browser"), SLIC3R_APP_NAME), + [](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/slicerweb"); }); +// append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s &Manual"), SLIC3R_APP_NAME), +// wxString::Format(_L("Open the %s manual in your browser"), SLIC3R_APP_NAME), +// [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://manual.slic3r.org/"); }); + helpMenu->AppendSeparator(); + append_menu_item(helpMenu, wxID_ANY, _L("System &Info"), _L("Show system information"), + [](wxCommandEvent&) { wxGetApp().system_info(); }); + append_menu_item(helpMenu, wxID_ANY, _L("Show &Configuration Folder"), _L("Show user configuration folder (datadir)"), + [](wxCommandEvent&) { Slic3r::GUI::desktop_open_datadir_folder(); }); + append_menu_item(helpMenu, wxID_ANY, _L("Report an I&ssue"), wxString::Format(_L("Report an issue on %s"), SLIC3R_APP_NAME), + [](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/slic3r/issues/new"); }); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER + append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), SLIC3R_APP_NAME), _L("Show about dialog"), + [](wxCommandEvent&) { Slic3r::GUI::about(); }); +#if ENABLE_GCODE_VIEWER + else + append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), GCODEVIEWER_APP_NAME), _L("Show about dialog"), + [](wxCommandEvent&) { Slic3r::GUI::about(); }); +#endif // ENABLE_GCODE_VIEWER + helpMenu->AppendSeparator(); + append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of the keyboard shortcuts"), + [](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); }); +#if ENABLE_THUMBNAIL_GENERATOR_DEBUG + helpMenu->AppendSeparator(); + append_menu_item(helpMenu, wxID_ANY, "DEBUG gcode thumbnails", "DEBUG ONLY - read the selected gcode file and generates png for the contained thumbnails", + [](wxCommandEvent&) { wxGetApp().gcode_thumbnails_debug(); }); +#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG + + return helpMenu; +} + +static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame, std::function can_change_view) +{ + // The camera control accelerators are captured by GLCanvas3D::on_char(). + append_menu_item(view_menu, wxID_ANY, _L("Iso") + sep + "&0", _L("Iso View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("iso"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + view_menu->AppendSeparator(); + //TRN To be shown in the main menu View->Top + append_menu_item(view_menu, wxID_ANY, _L("Top") + sep + "&1", _L("Top View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("top"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + //TRN To be shown in the main menu View->Bottom + append_menu_item(view_menu, wxID_ANY, _L("Bottom") + sep + "&2", _L("Bottom View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("bottom"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + append_menu_item(view_menu, wxID_ANY, _L("Front") + sep + "&3", _L("Front View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("front"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + append_menu_item(view_menu, wxID_ANY, _L("Rear") + sep + "&4", _L("Rear View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("rear"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + append_menu_item(view_menu, wxID_ANY, _L("Left") + sep + "&5", _L("Left View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("left"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + append_menu_item(view_menu, wxID_ANY, _L("Right") + sep + "&6", _L("Right View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("right"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); +} + +void MainFrame::init_menubar_as_editor() +#else void MainFrame::init_menubar() +#endif // ENABLE_GCODE_VIEWER { #ifdef __APPLE__ wxMenuBar::SetAutoWindowMenu(false); @@ -826,15 +983,15 @@ void MainFrame::init_menubar() // File menu wxMenu* fileMenu = new wxMenu; { - append_menu_item(fileMenu, wxID_ANY, _(L("&New Project")) + "\tCtrl+N", _(L("Start a new project")), + append_menu_item(fileMenu, wxID_ANY, _L("&New Project") + "\tCtrl+N", _L("Start a new project"), [this](wxCommandEvent&) { if (m_plater) m_plater->new_project(); }, "", nullptr, [this](){return m_plater != nullptr && can_start_new_project(); }, this); - append_menu_item(fileMenu, wxID_ANY, _(L("&Open Project")) + dots + "\tCtrl+O", _(L("Open a project file")), + append_menu_item(fileMenu, wxID_ANY, _L("&Open Project") + dots + "\tCtrl+O", _L("Open a project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, "open", nullptr, [this](){return m_plater != nullptr; }, this); wxMenu* recent_projects_menu = new wxMenu(); - wxMenuItem* recent_projects_submenu = append_submenu(fileMenu, recent_projects_menu, wxID_ANY, _(L("Recent projects")), ""); + wxMenuItem* recent_projects_submenu = append_submenu(fileMenu, recent_projects_menu, wxID_ANY, _L("Recent projects"), ""); m_recent_projects.UseMenu(recent_projects_menu); Bind(wxEVT_MENU, [this](wxCommandEvent& evt) { size_t file_id = evt.GetId() - wxID_FILE1; @@ -843,7 +1000,7 @@ void MainFrame::init_menubar() m_plater->load_project(filename); else { - wxMessageDialog msg(this, _(L("The selected project is no longer available.\nDo you want to remove it from the recent projects list?")), _(L("Error")), wxYES_NO | wxYES_DEFAULT); + wxMessageDialog msg(this, _L("The selected project is no longer available.\nDo you want to remove it from the recent projects list?"), _L("Error"), wxYES_NO | wxYES_DEFAULT); if (msg.ShowModal() == wxID_YES) { m_recent_projects.RemoveFileFromHistory(file_id); @@ -868,13 +1025,13 @@ void MainFrame::init_menubar() Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_recent_projects.GetCount() > 0); }, recent_projects_submenu->GetId()); - append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")), + append_menu_item(fileMenu, wxID_ANY, _L("&Save Project") + "\tCtrl+S", _L("Save current project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename(".3mf"))); }, "save", nullptr, [this](){return m_plater != nullptr && can_save(); }, this); #ifdef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _(L("Save Project &as")) + dots + "\tCtrl+Shift+S", _(L("Save current project file as")), + append_menu_item(fileMenu, wxID_ANY, _L("Save Project &as") + dots + "\tCtrl+Shift+S", _L("Save current project file as"), #else - append_menu_item(fileMenu, wxID_ANY, _(L("Save Project &as")) + dots + "\tCtrl+Alt+S", _(L("Save current project file as")), + append_menu_item(fileMenu, wxID_ANY, _L("Save Project &as") + dots + "\tCtrl+Alt+S", _L("Save current project file as"), #endif // __APPLE__ [this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(); }, "save", nullptr, [this](){return m_plater != nullptr && can_save(); }, this); @@ -882,7 +1039,7 @@ void MainFrame::init_menubar() fileMenu->AppendSeparator(); wxMenu* import_menu = new wxMenu(); - append_menu_item(import_menu, wxID_ANY, _(L("Import STL/OBJ/AM&F/3MF")) + dots + "\tCtrl+I", _(L("Load a model")), + append_menu_item(import_menu, wxID_ANY, _L("Import STL/OBJ/AM&F/3MF") + dots + "\tCtrl+I", _L("Load a model"), [this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, "import_plater", nullptr, [this](){return m_plater != nullptr; }, this); @@ -890,59 +1047,62 @@ void MainFrame::init_menubar() [this](wxCommandEvent&) { if (m_plater) m_plater->add_model(true); }, "import_plater", nullptr, [this](){return m_plater != nullptr; }, this); - append_menu_item(import_menu, wxID_ANY, _(L("Import SL1 archive")) + dots, _(L("Load an SL1 output archive")), + append_menu_item(import_menu, wxID_ANY, _L("Import SL1 archive") + dots, _L("Load an SL1 output archive"), [this](wxCommandEvent&) { if (m_plater) m_plater->import_sl1_archive(); }, "import_plater", nullptr, [this](){return m_plater != nullptr; }, this); import_menu->AppendSeparator(); - append_menu_item(import_menu, wxID_ANY, _(L("Import &Config")) + dots + "\tCtrl+L", _(L("Load exported configuration file")), + append_menu_item(import_menu, wxID_ANY, _L("Import &Config") + dots + "\tCtrl+L", _L("Load exported configuration file"), [this](wxCommandEvent&) { load_config_file(); }, "import_config", nullptr, - [this]() {return true; }, this); - append_menu_item(import_menu, wxID_ANY, _(L("Import Config from &project")) + dots +"\tCtrl+Alt+L", _(L("Load configuration from project file")), + []() {return true; }, this); + append_menu_item(import_menu, wxID_ANY, _L("Import Config from &project") + dots +"\tCtrl+Alt+L", _L("Load configuration from project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->extract_config_from_project(); }, "import_config", nullptr, - [this]() {return true; }, this); + []() {return true; }, this); import_menu->AppendSeparator(); - append_menu_item(import_menu, wxID_ANY, _(L("Import Config &Bundle")) + dots, _(L("Load presets from a bundle")), + append_menu_item(import_menu, wxID_ANY, _L("Import Config &Bundle") + dots, _L("Load presets from a bundle"), [this](wxCommandEvent&) { load_configbundle(); }, "import_config_bundle", nullptr, - [this]() {return true; }, this); - append_submenu(fileMenu, import_menu, wxID_ANY, _(L("&Import")), ""); + []() {return true; }, this); + append_submenu(fileMenu, import_menu, wxID_ANY, _L("&Import"), ""); wxMenu* export_menu = new wxMenu(); - wxMenuItem* item_export_gcode = append_menu_item(export_menu, wxID_ANY, _(L("Export &G-code")) + dots +"\tCtrl+G", _(L("Export current plate as G-code")), - [this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(); }, "export_gcode", nullptr, + wxMenuItem* item_export_gcode = append_menu_item(export_menu, wxID_ANY, _L("Export &G-code") + dots +"\tCtrl+G", _L("Export current plate as G-code"), + [this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(false); }, "export_gcode", nullptr, [this](){return can_export_gcode(); }, this); m_changeable_menu_items.push_back(item_export_gcode); - wxMenuItem* item_send_gcode = append_menu_item(export_menu, wxID_ANY, _(L("S&end G-code")) + dots +"\tCtrl+Shift+G", _(L("Send to print current plate as G-code")), + wxMenuItem* item_send_gcode = append_menu_item(export_menu, wxID_ANY, _L("S&end G-code") + dots +"\tCtrl+Shift+G", _L("Send to print current plate as G-code"), [this](wxCommandEvent&) { if (m_plater) m_plater->send_gcode(); }, "export_gcode", nullptr, [this](){return can_send_gcode(); }, this); m_changeable_menu_items.push_back(item_send_gcode); - append_menu_item(export_menu, wxID_ANY, _(L("Export G-code to SD card / Flash drive")) + dots + "\tCtrl+U", _(L("Export current plate as G-code to SD card / Flash drive")), + append_menu_item(export_menu, wxID_ANY, _L("Export G-code to SD card / Flash drive") + dots + "\tCtrl+U", _L("Export current plate as G-code to SD card / Flash drive"), [this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(true); }, "export_to_sd", nullptr, [this]() {return can_export_gcode_sd(); }, this); export_menu->AppendSeparator(); - append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &STL")) + dots, _(L("Export current plate as STL")), + append_menu_item(export_menu, wxID_ANY, _L("Export plate as &STL") + dots, _L("Export current plate as STL"), [this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, "export_plater", nullptr, [this](){return can_export_model(); }, this); - append_menu_item(export_menu, wxID_ANY, _(L("Export plate as STL &including supports")) + dots, _(L("Export current plate as STL including supports")), + append_menu_item(export_menu, wxID_ANY, _L("Export plate as STL &including supports") + dots, _L("Export current plate as STL including supports"), [this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, "export_plater", nullptr, [this](){return can_export_supports(); }, this); - append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &AMF")) + dots, _(L("Export current plate as AMF")), + append_menu_item(export_menu, wxID_ANY, _L("Export plate as &AMF") + dots, _L("Export current plate as AMF"), [this](wxCommandEvent&) { if (m_plater) m_plater->export_amf(); }, "export_plater", nullptr, [this](){return can_export_model(); }, this); export_menu->AppendSeparator(); - append_menu_item(export_menu, wxID_ANY, _(L("Export &toolpaths as OBJ")) + dots, _(L("Export toolpaths as OBJ")), + append_menu_item(export_menu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"), [this](wxCommandEvent&) { if (m_plater) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr, [this]() {return can_export_toolpaths(); }, this); export_menu->AppendSeparator(); - append_menu_item(export_menu, wxID_ANY, _(L("Export &Config")) +dots +"\tCtrl+E", _(L("Export current configuration to file")), + append_menu_item(export_menu, wxID_ANY, _L("Export &Config") + dots +"\tCtrl+E", _L("Export current configuration to file"), [this](wxCommandEvent&) { export_config(); }, "export_config", nullptr, - [this]() {return true; }, this); - append_menu_item(export_menu, wxID_ANY, _(L("Export Config &Bundle")) + dots, _(L("Export all presets to file")), + []() {return true; }, this); + append_menu_item(export_menu, wxID_ANY, _L("Export Config &Bundle") + dots, _L("Export all presets to file"), [this](wxCommandEvent&) { export_configbundle(); }, "export_config_bundle", nullptr, - [this]() {return true; }, this); - append_submenu(fileMenu, export_menu, wxID_ANY, _(L("&Export")), ""); + []() {return true; }, this); + append_menu_item(export_menu, wxID_ANY, _L("Export Config Bundle With Physical Printers") + dots, _L("Export all presets including physical printers to file"), + [this](wxCommandEvent&) { export_configbundle(true); }, "export_config_bundle", nullptr, + []() {return true; }, this); + append_submenu(fileMenu, export_menu, wxID_ANY, _L("&Export"), ""); - append_menu_item(fileMenu, wxID_ANY, _(L("Ejec&t SD card / Flash drive")) + dots + "\tCtrl+T", _(L("Eject SD card / Flash drive after the G-code was exported to it.")), + append_menu_item(fileMenu, wxID_ANY, _L("Ejec&t SD card / Flash drive") + dots + "\tCtrl+T", _L("Eject SD card / Flash drive after the G-code was exported to it."), [this](wxCommandEvent&) { if (m_plater) m_plater->eject_drive(); }, "eject_sd", nullptr, [this]() {return can_eject(); }, this); @@ -950,19 +1110,19 @@ void MainFrame::init_menubar() #if 0 m_menu_item_repeat = nullptr; - append_menu_item(fileMenu, wxID_ANY, _(L("Quick Slice")) +dots+ "\tCtrl+U", _(L("Slice a file into a G-code")), + append_menu_item(fileMenu, wxID_ANY, _L("Quick Slice") +dots+ "\tCtrl+U", _L("Slice a file into a G-code"), [this](wxCommandEvent&) { wxTheApp->CallAfter([this]() { quick_slice(); m_menu_item_repeat->Enable(is_last_input_file()); }); }, "cog_go.png"); - append_menu_item(fileMenu, wxID_ANY, _(L("Quick Slice and Save As")) +dots +"\tCtrl+Alt+U", _(L("Slice a file into a G-code, save as")), + append_menu_item(fileMenu, wxID_ANY, _L("Quick Slice and Save As") +dots +"\tCtrl+Alt+U", _L("Slice a file into a G-code, save as"), [this](wxCommandEvent&) { wxTheApp->CallAfter([this]() { quick_slice(qsSaveAs); m_menu_item_repeat->Enable(is_last_input_file()); }); }, "cog_go.png"); - m_menu_item_repeat = append_menu_item(fileMenu, wxID_ANY, _(L("Repeat Last Quick Slice")) +"\tCtrl+Shift+U", _(L("Repeat last quick slice")), + m_menu_item_repeat = append_menu_item(fileMenu, wxID_ANY, _L("Repeat Last Quick Slice") +"\tCtrl+Shift+U", _L("Repeat last quick slice"), [this](wxCommandEvent&) { wxTheApp->CallAfter([this]() { quick_slice(qsReslice); @@ -970,18 +1130,22 @@ void MainFrame::init_menubar() m_menu_item_repeat->Enable(false); fileMenu->AppendSeparator(); #endif - m_menu_item_reslice_now = append_menu_item(fileMenu, wxID_ANY, _(L("(Re)Slice No&w")) + "\tCtrl+R", _(L("Start new slicing process")), + m_menu_item_reslice_now = append_menu_item(fileMenu, wxID_ANY, _L("(Re)Slice No&w") + "\tCtrl+R", _L("Start new slicing process"), [this](wxCommandEvent&) { reslice_now(); }, "re_slice", nullptr, - [this](){return m_plater != nullptr && can_reslice(); }, this); + [this]() { return m_plater != nullptr && can_reslice(); }, this); fileMenu->AppendSeparator(); - append_menu_item(fileMenu, wxID_ANY, _(L("&Repair STL file")) + dots, _(L("Automatically repair an STL file")), + append_menu_item(fileMenu, wxID_ANY, _L("&Repair STL file") + dots, _L("Automatically repair an STL file"), [this](wxCommandEvent&) { repair_stl(); }, "wrench", nullptr, - [this]() {return true; }, this); + []() { return true; }, this); fileMenu->AppendSeparator(); - append_menu_item(fileMenu, wxID_EXIT, _(L("&Quit")), wxString::Format(_(L("Quit %s")), SLIC3R_APP_NAME), - [this](wxCommandEvent&) { Close(false); }); + append_menu_item(fileMenu, wxID_ANY, _L("&G-code preview") + dots, _L("Open G-code viewer"), + [this](wxCommandEvent&) { start_new_gcodeviewer_open_file(this); }, "", nullptr); + fileMenu->AppendSeparator(); + append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME), + [this](wxCommandEvent&) { Close(false); }, "exit"); } +#if !ENABLE_GCODE_VIEWER #ifdef _MSC_VER // \xA0 is a non-breaking space. It is entered here to spoil the automatic accelerators, // as the simple numeric accelerators spoil all numeric data entry. @@ -991,6 +1155,7 @@ void MainFrame::init_menubar() wxString sep = " - "; wxString sep_space = ""; #endif +#endif // !ENABLE_GCODE_VIEWER // Edit menu wxMenu* editMenu = nullptr; @@ -1003,77 +1168,78 @@ void MainFrame::init_menubar() #else wxString hotkey_delete = "Del"; #endif - append_menu_item(editMenu, wxID_ANY, _(L("&Select all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A", - _(L("Selects all objects")), [this](wxCommandEvent&) { m_plater->select_all(); }, + append_menu_item(editMenu, wxID_ANY, _L("&Select all") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A", + _L("Selects all objects"), [this](wxCommandEvent&) { m_plater->select_all(); }, "", nullptr, [this](){return can_select(); }, this); - append_menu_item(editMenu, wxID_ANY, _(L("D&eselect all")) + sep + "Esc", - _(L("Deselects all objects")), [this](wxCommandEvent&) { m_plater->deselect_all(); }, + append_menu_item(editMenu, wxID_ANY, _L("D&eselect all") + sep + "Esc", + _L("Deselects all objects"), [this](wxCommandEvent&) { m_plater->deselect_all(); }, "", nullptr, [this](){return can_deselect(); }, this); editMenu->AppendSeparator(); - append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete, - _(L("Deletes the current selection")),[this](wxCommandEvent&) { m_plater->remove_selected(); }, + append_menu_item(editMenu, wxID_ANY, _L("&Delete selected") + sep + hotkey_delete, + _L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); }, "remove_menu", nullptr, [this](){return can_delete(); }, this); - append_menu_item(editMenu, wxID_ANY, _(L("Delete &all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete, - _(L("Deletes all objects")), [this](wxCommandEvent&) { m_plater->reset_with_confirm(); }, + append_menu_item(editMenu, wxID_ANY, _L("Delete &all") + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete, + _L("Deletes all objects"), [this](wxCommandEvent&) { m_plater->reset_with_confirm(); }, "delete_all_menu", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); - append_menu_item(editMenu, wxID_ANY, _(L("&Undo")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "Z", - _(L("Undo")), [this](wxCommandEvent&) { m_plater->undo(); }, + append_menu_item(editMenu, wxID_ANY, _L("&Undo") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "Z", + _L("Undo"), [this](wxCommandEvent&) { m_plater->undo(); }, "undo_menu", nullptr, [this](){return m_plater->can_undo(); }, this); - append_menu_item(editMenu, wxID_ANY, _(L("&Redo")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "Y", - _(L("Redo")), [this](wxCommandEvent&) { m_plater->redo(); }, + append_menu_item(editMenu, wxID_ANY, _L("&Redo") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "Y", + _L("Redo"), [this](wxCommandEvent&) { m_plater->redo(); }, "redo_menu", nullptr, [this](){return m_plater->can_redo(); }, this); editMenu->AppendSeparator(); - append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C", - _(L("Copy selection to clipboard")), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, + append_menu_item(editMenu, wxID_ANY, _L("&Copy") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C", + _L("Copy selection to clipboard"), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, "copy_menu", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); - append_menu_item(editMenu, wxID_ANY, _(L("&Paste")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V", - _(L("Paste clipboard")), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, + append_menu_item(editMenu, wxID_ANY, _L("&Paste") + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V", + _L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, "paste_menu", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); editMenu->AppendSeparator(); - append_menu_item(editMenu, wxID_ANY, _(L("Re&load from disk")) + sep + "F5", - _(L("Reload the plater from disk")), [this](wxCommandEvent&) { m_plater->reload_all_from_disk(); }, + append_menu_item(editMenu, wxID_ANY, _L("Re&load from disk") + sep + "F5", + _L("Reload the plater from disk"), [this](wxCommandEvent&) { m_plater->reload_all_from_disk(); }, "", nullptr, [this]() {return !m_plater->model().objects.empty(); }, this); editMenu->AppendSeparator(); - append_menu_item(editMenu, wxID_ANY, _(L("Searc&h")) + "\tCtrl+F", - _(L("Find option")), [this](wxCommandEvent&) { m_plater->search(/*m_tabpanel->GetCurrentPage() == */m_plater->IsShown()); }, - "search", nullptr, [this]() {return true; }, this); + append_menu_item(editMenu, wxID_ANY, _L("Searc&h") + "\tCtrl+F", + _L("Find option"), [this](wxCommandEvent&) { m_plater->search(/*m_tabpanel->GetCurrentPage() == */m_plater->IsShown()); }, + "search", nullptr, []() {return true; }, this); } // Window menu auto windowMenu = new wxMenu(); { if (m_plater) { - append_menu_item(windowMenu, wxID_HIGHEST + 1, _(L("&Plater Tab")) + "\tCtrl+1", _(L("Show the plater")), - [this](wxCommandEvent&) { select_tab(0); }, "plater", nullptr, - [this]() {return true; }, this); + append_menu_item(windowMenu, wxID_HIGHEST + 1, _L("&Plater Tab") + "\tCtrl+1", _L("Show the plater"), + [this](wxCommandEvent&) { select_tab(size_t(0)); }, "plater", nullptr, + []() {return true; }, this); windowMenu->AppendSeparator(); } - append_menu_item(windowMenu, wxID_HIGHEST + 2, _(L("P&rint Settings Tab")) + "\tCtrl+2", _(L("Show the print settings")), + append_menu_item(windowMenu, wxID_HIGHEST + 2, _L("P&rint Settings Tab") + "\tCtrl+2", _L("Show the print settings"), [this/*, tab_offset*/](wxCommandEvent&) { select_tab(1); }, "cog", nullptr, - [this]() {return true; }, this); - wxMenuItem* item_material_tab = append_menu_item(windowMenu, wxID_HIGHEST + 3, _(L("&Filament Settings Tab")) + "\tCtrl+3", _(L("Show the filament settings")), + []() {return true; }, this); + wxMenuItem* item_material_tab = append_menu_item(windowMenu, wxID_HIGHEST + 3, _L("&Filament Settings Tab") + "\tCtrl+3", _L("Show the filament settings"), [this/*, tab_offset*/](wxCommandEvent&) { select_tab(2); }, "spool", nullptr, - [this]() {return true; }, this); + []() {return true; }, this); m_changeable_menu_items.push_back(item_material_tab); - wxMenuItem* item_printer_tab = append_menu_item(windowMenu, wxID_HIGHEST + 4, _(L("Print&er Settings Tab")) + "\tCtrl+4", _(L("Show the printer settings")), + wxMenuItem* item_printer_tab = append_menu_item(windowMenu, wxID_HIGHEST + 4, _L("Print&er Settings Tab") + "\tCtrl+4", _L("Show the printer settings"), [this/*, tab_offset*/](wxCommandEvent&) { select_tab(3); }, "printer", nullptr, - [this]() {return true; }, this); + []() {return true; }, this); m_changeable_menu_items.push_back(item_printer_tab); if (m_plater) { windowMenu->AppendSeparator(); - append_menu_item(windowMenu, wxID_HIGHEST + 5, _(L("3&D")) + "\tCtrl+5", _(L("Show the 3D editing view")), + append_menu_item(windowMenu, wxID_HIGHEST + 5, _L("3&D") + "\tCtrl+5", _L("Show the 3D editing view"), [this](wxCommandEvent&) { m_plater->select_view_3D("3D"); }, "editor_menu", nullptr, [this](){return can_change_view(); }, this); - append_menu_item(windowMenu, wxID_HIGHEST + 6, _(L("Pre&view")) + "\tCtrl+6", _(L("Show the 3D slices preview")), + append_menu_item(windowMenu, wxID_HIGHEST + 6, _L("Pre&view") + "\tCtrl+6", _L("Show the 3D slices preview"), [this](wxCommandEvent&) { m_plater->select_view_3D("Preview"); }, "preview_menu", nullptr, [this](){return can_change_view(); }, this); } +#if !ENABLE_GCODE_VIEWER #if _WIN32 // This is needed on Windows to fake the CTRL+# of the window menu when using the numpad wxAcceleratorEntry entries[6]; @@ -1086,83 +1252,84 @@ void MainFrame::init_menubar() wxAcceleratorTable accel(6, entries); SetAcceleratorTable(accel); #endif // _WIN32 +#endif // !ENABLE_GCODE_VIEWER windowMenu->AppendSeparator(); - append_menu_item(windowMenu, wxID_ANY, _(L("Print &Host Upload Queue")) + "\tCtrl+J", _(L("Display the Print Host Upload Queue window")), - [this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, - [this]() {return true; }, this); + append_menu_item(windowMenu, wxID_ANY, _L("Print &Host Upload Queue") + "\tCtrl+J", _L("Display the Print Host Upload Queue window"), + [this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, []() {return true; }, this); + + windowMenu->AppendSeparator(); + append_menu_item(windowMenu, wxID_ANY, _L("Open new instance") + "\tCtrl+I", _L("Open a new PrusaSlicer instance"), + [this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, [this]() {return m_plater != nullptr && wxGetApp().app_config->get("single_instance") != "1"; }, this); + } // View menu wxMenu* viewMenu = nullptr; if (m_plater) { viewMenu = new wxMenu(); +#if ENABLE_GCODE_VIEWER + add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this)); +#else // The camera control accelerators are captured by GLCanvas3D::on_char(). - append_menu_item(viewMenu, wxID_ANY, _(L("Iso")) + sep + "&0", _(L("Iso View")),[this](wxCommandEvent&) { select_view("iso"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Iso") + sep + "&0", _L("Iso View"), [this](wxCommandEvent&) { select_view("iso"); }, "", nullptr, [this](){return can_change_view(); }, this); viewMenu->AppendSeparator(); //TRN To be shown in the main menu View->Top - append_menu_item(viewMenu, wxID_ANY, _(L("Top")) + sep + "&1", _(L("Top View")), [this](wxCommandEvent&) { select_view("top"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Top") + sep + "&1", _L("Top View"), [this](wxCommandEvent&) { select_view("top"); }, "", nullptr, [this](){return can_change_view(); }, this); //TRN To be shown in the main menu View->Bottom - append_menu_item(viewMenu, wxID_ANY, _(L("Bottom")) + sep + "&2", _(L("Bottom View")), [this](wxCommandEvent&) { select_view("bottom"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Bottom") + sep + "&2", _L("Bottom View"), [this](wxCommandEvent&) { select_view("bottom"); }, "", nullptr, [this](){return can_change_view(); }, this); - append_menu_item(viewMenu, wxID_ANY, _(L("Front")) + sep + "&3", _(L("Front View")), [this](wxCommandEvent&) { select_view("front"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Front") + sep + "&3", _L("Front View"), [this](wxCommandEvent&) { select_view("front"); }, "", nullptr, [this](){return can_change_view(); }, this); - append_menu_item(viewMenu, wxID_ANY, _(L("Rear")) + sep + "&4", _(L("Rear View")), [this](wxCommandEvent&) { select_view("rear"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Rear") + sep + "&4", _L("Rear View"), [this](wxCommandEvent&) { select_view("rear"); }, "", nullptr, [this](){return can_change_view(); }, this); - append_menu_item(viewMenu, wxID_ANY, _(L("Left")) + sep + "&5", _(L("Left View")), [this](wxCommandEvent&) { select_view("left"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Left") + sep + "&5", _L("Left View"), [this](wxCommandEvent&) { select_view("left"); }, "", nullptr, [this](){return can_change_view(); }, this); - append_menu_item(viewMenu, wxID_ANY, _(L("Right")) + sep + "&6", _(L("Right View")), [this](wxCommandEvent&) { select_view("right"); }, + append_menu_item(viewMenu, wxID_ANY, _L("Right") + sep + "&6", _L("Right View"), [this](wxCommandEvent&) { select_view("right"); }, "", nullptr, [this](){return can_change_view(); }, this); +#endif // ENABLE_GCODE_VIEWER viewMenu->AppendSeparator(); -#if ENABLE_SLOPE_RENDERING - wxMenu* options_menu = new wxMenu(); - append_menu_check_item(options_menu, wxID_ANY, _(L("Show &labels")) + sep + "E", _(L("Show object/instance labels in 3D scene")), + append_menu_check_item(viewMenu, wxID_ANY, _L("Show &labels") + sep + "E", _L("Show object/instance labels in 3D scene"), [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); - append_menu_check_item(options_menu, wxID_ANY, _(L("Show &slope")) + sep + "D", _(L("Objects coloring using faces' slope")), - [this](wxCommandEvent&) { m_plater->show_view3D_slope(!m_plater->is_view3D_slope_shown()); }, this, - [this]() { return m_plater->is_view3D_shown() && !m_plater->is_view3D_layers_editing_enabled(); }, [this]() { return m_plater->is_view3D_slope_shown(); }, this); - append_submenu(viewMenu, options_menu, wxID_ANY, _(L("&Options")), ""); -#else - append_menu_check_item(viewMenu, wxID_ANY, _(L("Show &labels")) + sep + "E", _(L("Show object/instance labels in 3D scene")), - [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this, - [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); -#endif // ENABLE_SLOPE_RENDERING - append_menu_check_item(viewMenu, wxID_ANY, _(L("&Collapse sidebar")), _(L("Collapse sidebar")), + append_menu_check_item(viewMenu, wxID_ANY, _L("&Collapse sidebar"), _L("Collapse sidebar"), [this](wxCommandEvent&) { m_plater->collapse_sidebar(!m_plater->is_sidebar_collapsed()); }, this, - [this]() { return true; }, [this]() { return m_plater->is_sidebar_collapsed(); }, this); + []() { return true; }, [this]() { return m_plater->is_sidebar_collapsed(); }, this); } // Help menu +#if ENABLE_GCODE_VIEWER + auto helpMenu = generate_help_menu(); +#else auto helpMenu = new wxMenu(); { - append_menu_item(helpMenu, wxID_ANY, _(L("Prusa 3D &Drivers")), _(L("Open the Prusa3D drivers download page in your browser")), + append_menu_item(helpMenu, wxID_ANY, _L("Prusa 3D &Drivers"), _L("Open the Prusa3D drivers download page in your browser"), [this](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/downloads"); }); - append_menu_item(helpMenu, wxID_ANY, _(L("Software &Releases")), _(L("Open the software releases page in your browser")), - [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/prusa3d/PrusaSlicer/releases"); }); + append_menu_item(helpMenu, wxID_ANY, _L("Software &Releases"), _L("Open the software releases page in your browser"), + [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/PrusaSlicer/releases"); }); //# my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{ //# wxTheApp->check_version(1); //# }); //# $versioncheck->Enable(wxTheApp->have_version_check); - append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("%s &Website")), SLIC3R_APP_NAME), - wxString::Format(_(L("Open the %s website in your browser")), SLIC3R_APP_NAME), + append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s &Website"), SLIC3R_APP_NAME), + wxString::Format(_L("Open the %s website in your browser"), SLIC3R_APP_NAME), [this](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/slicerweb"); }); -// append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("%s &Manual")), SLIC3R_APP_NAME), -// wxString::Format(_(L("Open the %s manual in your browser")), SLIC3R_APP_NAME), +// append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s &Manual"), SLIC3R_APP_NAME), +// wxString::Format(_L("Open the %s manual in your browser"), SLIC3R_APP_NAME), // [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://manual.slic3r.org/"); }); helpMenu->AppendSeparator(); - append_menu_item(helpMenu, wxID_ANY, _(L("System &Info")), _(L("Show system information")), + append_menu_item(helpMenu, wxID_ANY, _L("System &Info"), _L("Show system information"), [this](wxCommandEvent&) { wxGetApp().system_info(); }); - append_menu_item(helpMenu, wxID_ANY, _(L("Show &Configuration Folder")), _(L("Show user configuration folder (datadir)")), + append_menu_item(helpMenu, wxID_ANY, _L("Show &Configuration Folder"), _L("Show user configuration folder (datadir)"), [this](wxCommandEvent&) { Slic3r::GUI::desktop_open_datadir_folder(); }); - append_menu_item(helpMenu, wxID_ANY, _(L("Report an I&ssue")), wxString::Format(_(L("Report an issue on %s")), SLIC3R_APP_NAME), - [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/prusa3d/slic3r/issues/new"); }); - append_menu_item(helpMenu, wxID_ANY, wxString::Format(_(L("&About %s")), SLIC3R_APP_NAME), _(L("Show about dialog")), + append_menu_item(helpMenu, wxID_ANY, _L("Report an I&ssue"), wxString::Format(_L("Report an issue on %s"), SLIC3R_APP_NAME), + [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/slic3r/issues/new"); }); + append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), SLIC3R_APP_NAME), _L("Show about dialog"), [this](wxCommandEvent&) { Slic3r::GUI::about(); }); helpMenu->AppendSeparator(); - append_menu_item(helpMenu, wxID_ANY, _(L("Keyboard Shortcuts")) + sep + "&?", _(L("Show the list of the keyboard shortcuts")), + append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of the keyboard shortcuts"), [this](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); }); #if ENABLE_THUMBNAIL_GENERATOR_DEBUG helpMenu->AppendSeparator(); @@ -1170,43 +1337,118 @@ void MainFrame::init_menubar() [this](wxCommandEvent&) { wxGetApp().gcode_thumbnails_debug(); }); #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG } +#endif // ENABLE_GCODE_VIEWER // menubar // assign menubar to frame after appending items, otherwise special items // will not be handled correctly +#if ENABLE_GCODE_VIEWER + m_menubar = new wxMenuBar(); + m_menubar->Append(fileMenu, _L("&File")); + if (editMenu) m_menubar->Append(editMenu, _L("&Edit")); + m_menubar->Append(windowMenu, _L("&Window")); + if (viewMenu) m_menubar->Append(viewMenu, _L("&View")); + // Add additional menus from C++ + wxGetApp().add_config_menu(m_menubar); + m_menubar->Append(helpMenu, _L("&Help")); + SetMenuBar(m_menubar); +#else auto menubar = new wxMenuBar(); - menubar->Append(fileMenu, _(L("&File"))); - if (editMenu) menubar->Append(editMenu, _(L("&Edit"))); - menubar->Append(windowMenu, _(L("&Window"))); - if (viewMenu) menubar->Append(viewMenu, _(L("&View"))); + menubar->Append(fileMenu, _L("&File")); + if (editMenu) menubar->Append(editMenu, _L("&Edit")); + menubar->Append(windowMenu, _L("&Window")); + if (viewMenu) menubar->Append(viewMenu, _L("&View")); // Add additional menus from C++ wxGetApp().add_config_menu(menubar); - menubar->Append(helpMenu, _(L("&Help"))); + menubar->Append(helpMenu, _L("&Help")); SetMenuBar(menubar); +#endif // ENABLE_GCODE_VIEWER #ifdef __APPLE__ // This fixes a bug on Mac OS where the quit command doesn't emit window close events // wx bug: https://trac.wxwidgets.org/ticket/18328 +#if ENABLE_GCODE_VIEWER + wxMenu* apple_menu = m_menubar->OSXGetAppleMenu(); +#else wxMenu *apple_menu = menubar->OSXGetAppleMenu(); +#endif // ENABLE_GCODE_VIEWER if (apple_menu != nullptr) { apple_menu->Bind(wxEVT_MENU, [this](wxCommandEvent &) { Close(); }, wxID_EXIT); } -#endif +#endif // __APPLE__ if (plater()->printer_technology() == ptSLA) update_menubar(); } +#if ENABLE_GCODE_VIEWER +void MainFrame::init_menubar_as_gcodeviewer() +{ + wxMenu* fileMenu = new wxMenu; + { + append_menu_item(fileMenu, wxID_ANY, _L("&Open G-code") + dots + "\tCtrl+O", _L("Open a G-code file"), + [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->load_gcode(); }, "open", nullptr, + [this]() {return m_plater != nullptr; }, this); + fileMenu->AppendSeparator(); + append_menu_item(fileMenu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"), + [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr, + [this]() {return can_export_toolpaths(); }, this); + append_menu_item(fileMenu, wxID_ANY, _L("Open &PrusaSlicer") + dots, _L("Open PrusaSlicer"), + [this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, + [this]() {return true; }, this); + fileMenu->AppendSeparator(); + append_menu_item(fileMenu, wxID_EXIT, _L("&Quit"), wxString::Format(_L("Quit %s"), SLIC3R_APP_NAME), + [this](wxCommandEvent&) { Close(false); }); + } + + // View menu + wxMenu* viewMenu = nullptr; + if (m_plater != nullptr) { + viewMenu = new wxMenu(); + add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this)); + } + + // helpmenu + auto helpMenu = generate_help_menu(); + + m_menubar = new wxMenuBar(); + m_menubar->Append(fileMenu, _L("&File")); + if (viewMenu != nullptr) m_menubar->Append(viewMenu, _L("&View")); +#if ENABLE_GCODE_VIEWER + // Add additional menus from C++ + wxGetApp().add_config_menu(m_menubar); +#endif // ENABLE_GCODE_VIEWER + m_menubar->Append(helpMenu, _L("&Help")); + SetMenuBar(m_menubar); + +#ifdef __APPLE__ + // This fixes a bug on Mac OS where the quit command doesn't emit window close events + // wx bug: https://trac.wxwidgets.org/ticket/18328 + wxMenu* apple_menu = m_menubar->OSXGetAppleMenu(); + if (apple_menu != nullptr) { + apple_menu->Bind(wxEVT_MENU, [this](wxCommandEvent&) { + Close(); + }, wxID_EXIT); + } +#endif // __APPLE__ +} +#endif // ENABLE_GCODE_VIEWER + void MainFrame::update_menubar() { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_gcode_viewer()) + return; +#endif // ENABLE_GCODE_VIEWER + const bool is_fff = plater()->printer_technology() == ptFFF; - m_changeable_menu_items[miExport] ->SetItemLabel((is_fff ? _(L("Export &G-code")) : _(L("E&xport")) ) + dots + "\tCtrl+G"); - m_changeable_menu_items[miSend] ->SetItemLabel((is_fff ? _(L("S&end G-code")) : _(L("S&end to print"))) + dots + "\tCtrl+Shift+G"); + m_changeable_menu_items[miExport] ->SetItemLabel((is_fff ? _L("Export &G-code") : _L("E&xport")) + dots + "\tCtrl+G"); + m_changeable_menu_items[miSend] ->SetItemLabel((is_fff ? _L("S&end G-code") : _L("S&end to print")) + dots + "\tCtrl+Shift+G"); - m_changeable_menu_items[miMaterialTab] ->SetItemLabel((is_fff ? _(L("&Filament Settings Tab")) : _(L("Mate&rial Settings Tab"))) + "\tCtrl+3"); + m_changeable_menu_items[miMaterialTab] ->SetItemLabel((is_fff ? _L("&Filament Settings Tab") : _L("Mate&rial Settings Tab")) + "\tCtrl+3"); m_changeable_menu_items[miMaterialTab] ->SetBitmap(create_scaled_bitmap(is_fff ? "spool" : "resin")); m_changeable_menu_items[miPrinterTab] ->SetBitmap(create_scaled_bitmap(is_fff ? "printer" : "sla_printer")); @@ -1229,7 +1471,7 @@ void MainFrame::quick_slice(const int qs) // select input file if (!(qs & qsReslice)) { - wxFileDialog dlg(this, _(L("Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):")), + wxFileDialog dlg(this, _L("Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"), wxGetApp().app_config->get_last_dir(), "", file_wildcards(FT_MODEL), wxFD_OPEN | wxFD_FILE_MUST_EXIST); if (dlg.ShowModal() != wxID_OK) @@ -1240,14 +1482,14 @@ void MainFrame::quick_slice(const int qs) } else { if (m_qs_last_input_file.IsEmpty()) { - wxMessageDialog dlg(this, _(L("No previously sliced file.")), - _(L("Error")), wxICON_ERROR | wxOK); + wxMessageDialog dlg(this, _L("No previously sliced file."), + _L("Error"), wxICON_ERROR | wxOK); dlg.ShowModal(); return; } if (std::ifstream(m_qs_last_input_file.ToUTF8().data())) { - wxMessageDialog dlg(this, _(L("Previously sliced file ("))+m_qs_last_input_file+_(L(") not found.")), - _(L("File Not Found")), wxICON_ERROR | wxOK); + wxMessageDialog dlg(this, _L("Previously sliced file (")+m_qs_last_input_file+_L(") not found."), + _L("File Not Found"), wxICON_ERROR | wxOK); dlg.ShowModal(); return; } @@ -1282,7 +1524,7 @@ void MainFrame::quick_slice(const int qs) } else if (qs & qsSaveAs) { // The following line may die if the output_filename_format template substitution fails. - wxFileDialog dlg(this, from_u8((boost::format(_utf8(L("Save %s file as:"))) % ((qs & qsExportSVG) ? _(L("SVG")) : _(L("G-code")))).str()), + wxFileDialog dlg(this, from_u8((boost::format(_utf8(L("Save %s file as:"))) % ((qs & qsExportSVG) ? _L("SVG") : _L("G-code"))).str()), wxGetApp().app_config->get_last_output_dir(get_dir_name(output_file)), get_base_name(input_file), qs & qsExportSVG ? file_wildcards(FT_SVG) : file_wildcards(FT_GCODE), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); @@ -1294,7 +1536,7 @@ void MainFrame::quick_slice(const int qs) wxGetApp().app_config->update_last_output_dir(get_dir_name(output_file)); } else if (qs & qsExportPNG) { - wxFileDialog dlg(this, _(L("Save zip file as:")), + wxFileDialog dlg(this, _L("Save zip file as:"), wxGetApp().app_config->get_last_output_dir(get_dir_name(output_file)), get_base_name(output_file), "*.sl1", wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() != wxID_OK) @@ -1328,9 +1570,9 @@ void MainFrame::quick_slice(const int qs) m_progress_dialog->Destroy(); m_progress_dialog = nullptr; - auto message = input_file_basename + _(L(" was successfully sliced.")); + auto message = input_file_basename + _L(" was successfully sliced."); // wxTheApp->notify(message); - wxMessageDialog(this, message, _(L("Slicing Done!")), wxOK | wxICON_INFORMATION).ShowModal(); + wxMessageDialog(this, message, _L("Slicing Done!"), wxOK | wxICON_INFORMATION).ShowModal(); // }; // Slic3r::GUI::catch_error(this, []() { if (m_progress_dialog) m_progress_dialog->Destroy(); }); } @@ -1345,7 +1587,7 @@ void MainFrame::repair_stl() { wxString input_file; { - wxFileDialog dlg(this, _(L("Select the STL file to repair:")), + wxFileDialog dlg(this, _L("Select the STL file to repair:"), wxGetApp().app_config->get_last_dir(), "", file_wildcards(FT_STL), wxFD_OPEN | wxFD_FILE_MUST_EXIST); if (dlg.ShowModal() != wxID_OK) @@ -1381,7 +1623,7 @@ void MainFrame::export_config() return; } // Ask user for the file name for the config file. - wxFileDialog dlg(this, _(L("Save configuration as:")), + wxFileDialog dlg(this, _L("Save configuration as:"), !m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(), !m_last_config.IsEmpty() ? get_base_name(m_last_config) : "config.ini", file_wildcards(FT_INI), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); @@ -1400,7 +1642,7 @@ void MainFrame::load_config_file() { if (!wxGetApp().check_unsaved_changes()) return; - wxFileDialog dlg(this, _(L("Select configuration to load:")), + wxFileDialog dlg(this, _L("Select configuration to load:"), !m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(), "config.ini", "INI files (*.ini, *.gcode)|*.ini;*.INI;*.gcode;*.g", wxFD_OPEN | wxFD_FILE_MUST_EXIST); wxString file; @@ -1425,7 +1667,7 @@ bool MainFrame::load_config_file(const std::string &path) return true; } -void MainFrame::export_configbundle() +void MainFrame::export_configbundle(bool export_physical_printers /*= false*/) { if (!wxGetApp().check_unsaved_changes()) return; @@ -1436,7 +1678,7 @@ void MainFrame::export_configbundle() return; } // Ask user for a file name. - wxFileDialog dlg(this, _(L("Save presets bundle as:")), + wxFileDialog dlg(this, _L("Save presets bundle as:"), !m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(), SLIC3R_APP_KEY "_config_bundle.ini", file_wildcards(FT_INI), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); @@ -1447,7 +1689,7 @@ void MainFrame::export_configbundle() // Export the config bundle. wxGetApp().app_config->update_config_dir(get_dir_name(file)); try { - wxGetApp().preset_bundle->export_configbundle(file.ToUTF8().data()); + wxGetApp().preset_bundle->export_configbundle(file.ToUTF8().data(), false, export_physical_printers); } catch (const std::exception &ex) { show_error(this, ex.what()); } @@ -1462,7 +1704,7 @@ void MainFrame::load_configbundle(wxString file/* = wxEmptyString, const bool re if (!wxGetApp().check_unsaved_changes()) return; if (file.IsEmpty()) { - wxFileDialog dlg(this, _(L("Select configuration to load:")), + wxFileDialog dlg(this, _L("Select configuration to load:"), !m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(), "config.ini", file_wildcards(FT_INI), wxFD_OPEN | wxFD_FILE_MUST_EXIST); if (dlg.ShowModal() != wxID_OK) @@ -1483,7 +1725,7 @@ void MainFrame::load_configbundle(wxString file/* = wxEmptyString, const bool re // Load the currently selected preset into the GUI, update the preset selection box. wxGetApp().load_current_presets(); - const auto message = wxString::Format(_(L("%d presets successfully imported.")), presets_imported); + const auto message = wxString::Format(_L("%d presets successfully imported."), presets_imported); Slic3r::GUI::show_info(this, message, wxString("Info")); } @@ -1525,76 +1767,95 @@ void MainFrame::load_config(const DynamicPrintConfig& config) #endif } +void MainFrame::select_tab(Tab* tab) +{ + if (!tab) + return; + int page_idx = m_tabpanel->FindPage(tab); + if (page_idx != wxNOT_FOUND && m_layout == ESettingsLayout::Dlg) + page_idx++; + select_tab(size_t(page_idx)); +} + void MainFrame::select_tab(size_t tab/* = size_t(-1)*/) { -#if ENABLE_LAYOUT_NO_RESTART + bool tabpanel_was_hidden = false; + + // Controls on page are created on active page of active tab now. + // We should select/activate tab before its showing to avoid an UI-flickering + auto select = [this, tab](bool was_hidden) { + // when tab == -1, it means we should show the last selected tab + size_t new_selection = tab == (size_t)(-1) ? m_last_selected_tab : (m_layout == ESettingsLayout::Dlg && tab != 0) ? tab - 1 : tab; + + if (m_tabpanel->GetSelection() != (int)new_selection) + m_tabpanel->SetSelection(new_selection); + else if (was_hidden) { + Tab* cur_tab = dynamic_cast(m_tabpanel->GetPage(new_selection)); + if (cur_tab) + cur_tab->OnActivate(); + } + }; + if (m_layout == ESettingsLayout::Dlg) { -#else - if (m_layout == slDlg) { -#endif // ENABLE_LAYOUT_NO_RESTART if (tab==0) { -#if ENABLE_LAYOUT_NO_RESTART if (m_settings_dialog.IsShown()) this->SetFocus(); -#else - if (m_settings_dialog->IsShown()) - this->SetFocus(); -#endif // ENABLE_LAYOUT_NO_RESTART // plater should be focused for correct navigation inside search window if (m_plater->canvas3D()->is_search_pressed()) m_plater->SetFocus(); return; } -#if ENABLE_LAYOUT_NO_RESTART // Show/Activate Settings Dialog #ifdef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList if (m_settings_dialog.IsShown()) m_settings_dialog.Hide(); - + else + tabpanel_was_hidden = true; + + select(tabpanel_was_hidden); m_tabpanel->Show(); m_settings_dialog.Show(); #else - if (m_settings_dialog.IsShown()) + if (m_settings_dialog.IsShown()) { + select(false); m_settings_dialog.SetFocus(); + } else { + tabpanel_was_hidden = true; + select(tabpanel_was_hidden); m_tabpanel->Show(); m_settings_dialog.Show(); } #endif -#else - // Show/Activate Settings Dialog - if (m_settings_dialog->IsShown()) -#ifdef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList - m_settings_dialog->Hide(); -#else - m_settings_dialog->SetFocus(); - else -#endif - m_settings_dialog->Show(); -#endif // ENABLE_LAYOUT_NO_RESTART } -#if ENABLE_LAYOUT_NO_RESTART else if (m_layout == ESettingsLayout::New) { m_main_sizer->Show(m_plater, tab == 0); + tabpanel_was_hidden = !m_main_sizer->IsShown(m_tabpanel); + select(tabpanel_was_hidden); m_main_sizer->Show(m_tabpanel, tab != 0); -#else - else if (m_layout == slNew) { - m_plater->Show(tab == 0); - m_tabpanel->Show(tab != 0); -#endif // ENABLE_LAYOUT_NO_RESTART // plater should be focused for correct navigation inside search window if (tab == 0 && m_plater->canvas3D()->is_search_pressed()) m_plater->SetFocus(); Layout(); } + else + select(false); - // when tab == -1, it means we should show the last selected tab -#if ENABLE_LAYOUT_NO_RESTART - m_tabpanel->SetSelection(tab == (size_t)(-1) ? m_last_selected_tab : (m_layout == ESettingsLayout::Dlg && tab != 0) ? tab - 1 : tab); -#else - m_tabpanel->SetSelection(tab == (size_t)(-1) ? m_last_selected_tab : (m_layout == slDlg && tab != 0) ? tab-1 : tab); -#endif // ENABLE_LAYOUT_NO_RESTART + // When we run application in ESettingsLayout::New or ESettingsLayout::Dlg mode, tabpanel is hidden from the very beginning + // and as a result Tab::update_changed_tree_ui() function couldn't update m_is_nonsys_values values, + // which are used for update TreeCtrl and "revert_buttons". + // So, force the call of this function for Tabs, if tab panel was hidden + if (tabpanel_was_hidden) + for (auto cur_tab : wxGetApp().tabs_list) + cur_tab->update_changed_tree_ui(); + + //// when tab == -1, it means we should show the last selected tab + //size_t new_selection = tab == (size_t)(-1) ? m_last_selected_tab : (m_layout == ESettingsLayout::Dlg && tab != 0) ? tab - 1 : tab; + //if (m_tabpanel->GetSelection() != new_selection) + // m_tabpanel->SetSelection(new_selection); + //if (tabpanel_was_hidden) + // static_cast(m_tabpanel->GetPage(new_selection))->OnActivate(); } // Set a camera direction, zoom to all objects. @@ -1672,7 +1933,7 @@ void MainFrame::add_to_recent_projects(const wxString& filename) // // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. -void MainFrame::update_ui_from_settings() +void MainFrame::update_ui_from_settings(bool apply_free_camera_correction) { // const bool bp_on = wxGetApp().app_config->get("background_processing") == "1"; // m_menu_item_reslice_now->Enable(!bp_on); @@ -1681,7 +1942,7 @@ void MainFrame::update_ui_from_settings() // m_plater->sidebar().Layout(); if (m_plater) - m_plater->update_ui_from_settings(); + m_plater->update_ui_from_settings(apply_free_camera_correction); for (auto tab: wxGetApp().tabs_list) tab->update_ui_from_settings(); } @@ -1709,7 +1970,19 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX, "settings_dialog"), m_main_frame(mainframe) { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_gcode_viewer()) + return; +#endif // ENABLE_GCODE_VIEWER + +#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__) + // ys_FIXME! temporary workaround for correct font scaling + // Because of from wxWidgets 3.1.3 auto rescaling is implemented for the Fonts, + // From the very beginning set dialog font to the wxSYS_DEFAULT_GUI_FONT + this->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); +#else this->SetFont(wxGetApp().normal_font()); +#endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); // Load the icon either from the exe, or from the ico file. @@ -1723,40 +1996,12 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) SetIcon(wxIcon(var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); #endif // _WIN32 -#if !ENABLE_LAYOUT_NO_RESTART - // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on Windows 10 - // with multiple high resolution displays connected. - m_tabpanel = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxGetApp().get_min_size(), wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); -#ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList - m_tabpanel->SetFont(Slic3r::GUI::wxGetApp().normal_font()); -#endif - - m_tabpanel->Bind(wxEVT_KEY_UP, [this](wxKeyEvent& evt) { - if ((evt.GetModifiers() & wxMOD_CONTROL) != 0) { - switch (evt.GetKeyCode()) { - case '1': { m_main_frame->select_tab(0); break; } - case '2': { m_main_frame->select_tab(1); break; } - case '3': { m_main_frame->select_tab(2); break; } - case '4': { m_main_frame->select_tab(3); break; } -#ifdef __APPLE__ - case 'f': -#else /* __APPLE__ */ - case WXK_CONTROL_F: -#endif /* __APPLE__ */ - case 'F': { m_main_frame->plater()->search(false); break; } - default:break; - } - } - }); -#endif // !ENABLE_LAYOUT_NO_RESTART - -#if ENABLE_LAYOUT_NO_RESTART this->Bind(wxEVT_SHOW, [this](wxShowEvent& evt) { auto key_up_handker = [this](wxKeyEvent& evt) { if ((evt.GetModifiers() & wxMOD_CONTROL) != 0) { switch (evt.GetKeyCode()) { - case '1': { m_main_frame->select_tab(0); break; } + case '1': { m_main_frame->select_tab(size_t(0)); break; } case '2': { m_main_frame->select_tab(1); break; } case '3': { m_main_frame->select_tab(2); break; } case '4': { m_main_frame->select_tab(3); break; } @@ -1780,13 +2025,9 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) m_tabpanel->Unbind(wxEVT_KEY_UP, key_up_handker); } }); -#endif // ENABLE_LAYOUT_NO_RESTART // initialize layout auto sizer = new wxBoxSizer(wxVERTICAL); -#if !ENABLE_LAYOUT_NO_RESTART - sizer->Add(m_tabpanel, 1, wxEXPAND); -#endif // !ENABLE_LAYOUT_NO_RESTART sizer->SetSizeHints(this); SetSizer(sizer); Fit(); @@ -1805,6 +2046,11 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) void SettingsDialog::on_dpi_changed(const wxRect& suggested_rect) { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_gcode_viewer()) + return; +#endif // ENABLE_GCODE_VIEWER + const int& em = em_unit(); const wxSize& size = wxSize(85 * em, 50 * em); diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 4514b8f50f..611ea7991c 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -7,6 +7,9 @@ #include #include #include +#ifdef __APPLE__ +#include +#endif // __APPLE__ #include #include @@ -54,12 +57,8 @@ class SettingsDialog : public DPIDialog MainFrame* m_main_frame { nullptr }; public: SettingsDialog(MainFrame* mainframe); - ~SettingsDialog() {} -#if ENABLE_LAYOUT_NO_RESTART + ~SettingsDialog() = default; void set_tabpanel(wxNotebook* tabpanel) { m_tabpanel = tabpanel; } -#else - wxNotebook* get_tabpanel() { return m_tabpanel; } -#endif // ENABLE_LAYOUT_NO_RESTART protected: void on_dpi_changed(const wxRect& suggested_rect) override; @@ -72,6 +71,10 @@ class MainFrame : public DPIFrame wxString m_qs_last_input_file = wxEmptyString; wxString m_qs_last_output_file = wxEmptyString; wxString m_last_config = wxEmptyString; +#if ENABLE_GCODE_VIEWER + wxMenuBar* m_menubar{ nullptr }; +#endif // ENABLE_GCODE_VIEWER + #if 0 wxMenuItem* m_menu_item_repeat { nullptr }; // doesn't used now #endif @@ -119,23 +122,18 @@ class MainFrame : public DPIFrame wxFileHistory m_recent_projects; -#if ENABLE_LAYOUT_NO_RESTART enum class ESettingsLayout { Unknown, Old, New, Dlg, +#if ENABLE_GCODE_VIEWER + GCodeViewer +#endif // ENABLE_GCODE_VIEWER }; ESettingsLayout m_layout{ ESettingsLayout::Unknown }; -#else - enum SettingsLayout { - slOld = 0, - slNew, - slDlg, - } m_layout; -#endif // ENABLE_LAYOUT_NO_RESTART protected: virtual void on_dpi_changed(const wxRect &suggested_rect); @@ -145,9 +143,7 @@ public: MainFrame(); ~MainFrame() = default; -#if ENABLE_LAYOUT_NO_RESTART void update_layout(); -#endif // ENABLE_LAYOUT_NO_RESTART // Called when closing the application and when switching the application language. void shutdown(); @@ -159,12 +155,22 @@ public: void init_tabpanel(); void create_preset_tabs(); void add_created_tab(Tab* panel); + bool is_active_and_shown_tab(Tab* tab); + // Register Win32 RawInput callbacks (3DConnexion) and removable media insert / remove callbacks. + // Called from wxEVT_ACTIVATE, as wxEVT_CREATE was not reliable (bug in wxWidgets?). + void register_win32_callbacks(); +#if ENABLE_GCODE_VIEWER + void init_menubar_as_editor(); + void init_menubar_as_gcodeviewer(); +#else void init_menubar(); +#endif // ENABLE_GCODE_VIEWER void update_menubar(); - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); bool is_loaded() const { return m_loaded; } bool is_last_input_file() const { return !m_qs_last_input_file.IsEmpty(); } + bool is_dlg_layout() const { return m_layout == ESettingsLayout::Dlg; } void quick_slice(const int qs = qsUndef); void reslice_now(); @@ -174,11 +180,12 @@ public: void load_config_file(); // Open a config file. Return true if loaded. bool load_config_file(const std::string &path); - void export_configbundle(); + void export_configbundle(bool export_physical_printers = false); void load_configbundle(wxString file = wxEmptyString); void load_config(const DynamicPrintConfig& config); // Select tab in m_tabpanel // When tab == -1, will be selected last selected tab + void select_tab(Tab* tab); void select_tab(size_t tab = size_t(-1)); void select_view(const std::string& direction); // Propagate changed configuration from the Tab to the Plater and save changes to the AppConfig @@ -190,15 +197,15 @@ public: Plater* m_plater { nullptr }; wxNotebook* m_tabpanel { nullptr }; -#if ENABLE_LAYOUT_NO_RESTART SettingsDialog m_settings_dialog; wxWindow* m_plater_page{ nullptr }; -#else - SettingsDialog* m_settings_dialog { nullptr }; -#endif // ENABLE_LAYOUT_NO_RESTART wxProgressDialog* m_progress_dialog { nullptr }; std::shared_ptr m_statusbar; +#ifdef __APPLE__ + std::unique_ptr m_taskbar_icon; +#endif // __APPLE__ + #ifdef _WIN32 void* m_hDeviceNotify { nullptr }; uint32_t m_ulSHChangeNotifyRegister { 0 }; diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index 581f50a882..ee0abe76f9 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -134,7 +134,7 @@ bool MeshRaycaster::unproject_on_mesh(const Vec2d& mouse_pos, const Transform3d& Vec3d direction; line_from_mouse_pos(mouse_pos, trafo, camera, point, direction); - std::vector hits = m_emesh.query_ray_hits(point, direction); + std::vector hits = m_emesh.query_ray_hits(point, direction); if (hits.empty()) return false; // no intersection found @@ -184,7 +184,7 @@ std::vector MeshRaycaster::get_unobscured_idxs(const Geometry::Transfo bool is_obscured = false; // Cast a ray in the direction of the camera and look for intersection with the mesh: - std::vector hits; + std::vector hits; // Offset the start of the ray by EPSILON to account for numerical inaccuracies. hits = m_emesh.query_ray_hits((inverse_trafo * pt + direction_to_camera_mesh * EPSILON).cast(), direction_to_camera.cast()); diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp index 2758577a25..60dcb30c81 100644 --- a/src/slic3r/GUI/MeshUtils.hpp +++ b/src/slic3r/GUI/MeshUtils.hpp @@ -3,7 +3,7 @@ #include "libslic3r/Point.hpp" #include "libslic3r/Geometry.hpp" -#include "libslic3r/SLA/EigenMesh3D.hpp" +#include "libslic3r/SLA/IndexedMesh.hpp" #include "admesh/stl.h" #include "slic3r/GUI/3DScene.hpp" @@ -147,7 +147,7 @@ public: Vec3f get_triangle_normal(size_t facet_idx) const; private: - sla::EigenMesh3D m_emesh; + sla::IndexedMesh m_emesh; std::vector m_normals; }; diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index baa9356b69..4c5ee20762 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -1,12 +1,12 @@ #include "libslic3r/libslic3r.h" +#include "libslic3r/PresetBundle.hpp" #include "Mouse3DController.hpp" #include "Camera.hpp" #include "GUI_App.hpp" -#include "PresetBundle.hpp" -#include "AppConfig.hpp" #include "GLCanvas3D.hpp" #include "Plater.hpp" +#include "NotificationManager.hpp" #include @@ -239,8 +239,7 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const // when the user clicks on [X] or [Close] button we need to trigger // an extra frame to let the dialog disappear - if (m_settings_dialog_closed_by_user) - { + if (m_settings_dialog_closed_by_user) { m_show_settings_dialog = false; m_settings_dialog_closed_by_user = false; canvas.request_extra_frame(); @@ -261,13 +260,10 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const static ImVec2 last_win_size(0.0f, 0.0f); bool shown = true; - if (imgui.begin(_(L("3Dconnexion settings")), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse)) - { - if (shown) - { + if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse)) { + if (shown) { ImVec2 win_size = ImGui::GetWindowSize(); - if ((last_win_size.x != win_size.x) || (last_win_size.y != win_size.y)) - { + if (last_win_size.x != win_size.x || last_win_size.y != win_size.y) { // when the user clicks on [X] button, the next time the dialog is shown // has a dummy size, so we trigger an extra frame to let it have the correct size last_win_size = win_size; @@ -275,59 +271,51 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const } const ImVec4& color = ImGui::GetStyleColorVec4(ImGuiCol_Separator); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text(_(L("Device:"))); - ImGui::PopStyleColor(); + imgui.text_colored(color, _L("Device:")); ImGui::SameLine(); imgui.text(m_device_str); ImGui::Separator(); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text(_(L("Speed:"))); - ImGui::PopStyleColor(); + imgui.text_colored(color, _L("Speed:")); float translation_scale = (float)params_copy.translation.scale / Params::DefaultTranslationScale; - if (imgui.slider_float(_(L("Translation")) + "##1", &translation_scale, 0.1f, 10.0f, "%.1f")) { + if (imgui.slider_float(_L("Translation") + "##1", &translation_scale, 0.1f, 10.0f, "%.1f")) { params_copy.translation.scale = Params::DefaultTranslationScale * (double)translation_scale; params_changed = true; } float rotation_scale = params_copy.rotation.scale / Params::DefaultRotationScale; - if (imgui.slider_float(_(L("Rotation")) + "##1", &rotation_scale, 0.1f, 10.0f, "%.1f")) { + if (imgui.slider_float(_L("Rotation") + "##1", &rotation_scale, 0.1f, 10.0f, "%.1f")) { params_copy.rotation.scale = Params::DefaultRotationScale * rotation_scale; params_changed = true; } float zoom_scale = params_copy.zoom.scale / Params::DefaultZoomScale; - if (imgui.slider_float(_(L("Zoom")), &zoom_scale, 0.1f, 10.0f, "%.1f")) { + if (imgui.slider_float(_L("Zoom"), &zoom_scale, 0.1f, 10.0f, "%.1f")) { params_copy.zoom.scale = Params::DefaultZoomScale * zoom_scale; params_changed = true; } ImGui::Separator(); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text(_(L("Deadzone:"))); - ImGui::PopStyleColor(); + imgui.text_colored(color, _L("Deadzone:")); float translation_deadzone = (float)params_copy.translation.deadzone; - if (imgui.slider_float(_(L("Translation")) + "/" + _(L("Zoom")), &translation_deadzone, 0.0f, (float)Params::MaxTranslationDeadzone, "%.2f")) { + if (imgui.slider_float(_L("Translation") + "/" + _L("Zoom"), &translation_deadzone, 0.0f, (float)Params::MaxTranslationDeadzone, "%.2f")) { params_copy.translation.deadzone = (double)translation_deadzone; params_changed = true; } float rotation_deadzone = params_copy.rotation.deadzone; - if (imgui.slider_float(_(L("Rotation")) + "##2", &rotation_deadzone, 0.0f, Params::MaxRotationDeadzone, "%.2f")) { + if (imgui.slider_float(_L("Rotation") + "##2", &rotation_deadzone, 0.0f, Params::MaxRotationDeadzone, "%.2f")) { params_copy.rotation.deadzone = rotation_deadzone; params_changed = true; } ImGui::Separator(); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text(_(L("Options:"))); - ImGui::PopStyleColor(); + imgui.text_colored(color, _L("Options:")); bool swap_yz = params_copy.swap_yz; - if (imgui.checkbox("Swap Y/Z axes", swap_yz)) { + if (imgui.checkbox(_L("Swap Y/Z axes"), swap_yz)) { params_copy.swap_yz = swap_yz; params_changed = true; } @@ -335,25 +323,20 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT ImGui::Separator(); ImGui::Separator(); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text("DEBUG:"); - imgui.text("Vectors:"); - ImGui::PopStyleColor(); + imgui.text_colored(color, "DEBUG:"); + imgui.text_colored(color, "Vectors:"); Vec3f translation = m_state.get_first_vector_of_type(State::QueueItem::TranslationType).cast(); Vec3f rotation = m_state.get_first_vector_of_type(State::QueueItem::RotationType).cast(); ImGui::InputFloat3("Translation##3", translation.data(), "%.3f", ImGuiInputTextFlags_ReadOnly); ImGui::InputFloat3("Rotation##3", rotation.data(), "%.3f", ImGuiInputTextFlags_ReadOnly); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text("Queue size:"); - ImGui::PopStyleColor(); + imgui.text_colored(color, "Queue size:"); int input_queue_size_current[2] = { int(m_state.input_queue_size_current()), int(m_state.input_queue_max_size_achieved) }; ImGui::InputInt2("Current##4", input_queue_size_current, ImGuiInputTextFlags_ReadOnly); int input_queue_size_param = int(params_copy.input_queue_max_size); - if (ImGui::InputInt("Max size", &input_queue_size_param, 1, 1, ImGuiInputTextFlags_ReadOnly)) - { + if (ImGui::InputInt("Max size", &input_queue_size_param, 1, 1, ImGuiInputTextFlags_ReadOnly)) { if (input_queue_size_param > 0) { params_copy.input_queue_max_size = input_queue_size_param; params_changed = true; @@ -361,23 +344,19 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const } ImGui::Separator(); - ImGui::PushStyleColor(ImGuiCol_Text, color); - imgui.text("Camera:"); - ImGui::PopStyleColor(); + imgui.text_colored(color, "Camera:"); Vec3f target = wxGetApp().plater()->get_camera().get_target().cast(); ImGui::InputFloat3("Target", target.data(), "%.3f", ImGuiInputTextFlags_ReadOnly); #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT ImGui::Separator(); - if (imgui.button(_(L("Close")))) - { + if (imgui.button(_L("Close"))) { // the user clicked on the [Close] button m_settings_dialog_closed_by_user = true; canvas.set_as_dirty(); } } - else - { + else { // the user clicked on the [X] button m_settings_dialog_closed_by_user = true; canvas.set_as_dirty(); @@ -424,6 +403,8 @@ void Mouse3DController::disconnected() m_params_by_device[m_device_str] = m_params_ui; m_device_str.clear(); m_connected = false; + wxGetApp().plater()->get_notification_manager()->push_notification(NotificationType::Mouse3dDisconnected, *(wxGetApp().plater()->get_current_canvas3D())); + wxGetApp().plater()->CallAfter([]() { Plater *plater = wxGetApp().plater(); if (plater != nullptr) { diff --git a/src/slic3r/GUI/Mouse3DController.hpp b/src/slic3r/GUI/Mouse3DController.hpp index 2c1d0bb6f0..b3dce9f349 100644 --- a/src/slic3r/GUI/Mouse3DController.hpp +++ b/src/slic3r/GUI/Mouse3DController.hpp @@ -33,11 +33,11 @@ class Mouse3DController struct Params { static constexpr double DefaultTranslationScale = 2.5; - static constexpr double MaxTranslationDeadzone = 0.2; - static constexpr double DefaultTranslationDeadzone = 0.5 * MaxTranslationDeadzone; + static constexpr double MaxTranslationDeadzone = 0.0; + static constexpr double DefaultTranslationDeadzone = 0.5 * MaxTranslationDeadzone; static constexpr float DefaultRotationScale = 1.0f; - static constexpr float MaxRotationDeadzone = 0.2f; - static constexpr float DefaultRotationDeadzone = 0.5f * MaxRotationDeadzone; + static constexpr float MaxRotationDeadzone = 0.0f; + static constexpr float DefaultRotationDeadzone = 0.5f * MaxRotationDeadzone; static constexpr double DefaultZoomScale = 0.1; template diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp new file mode 100644 index 0000000000..cb499b3c6e --- /dev/null +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -0,0 +1,933 @@ +#include "NotificationManager.hpp" + +#include "GUI_App.hpp" +#include "Plater.hpp" +#include "GLCanvas3D.hpp" +#include "ImGuiWrapper.hpp" + +#include "wxExtensions.hpp" + +#include +#include +#include + +#include + +static constexpr float GAP_WIDTH = 10.0f; +static constexpr float SPACE_RIGHT_PANEL = 10.0f; + +namespace Slic3r { +namespace GUI { + +wxDEFINE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); +wxDEFINE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent); +wxDEFINE_EVENT(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, PresetUpdateAvailableClickedEvent); + +namespace Notifications_Internal{ + static inline void push_style_color(ImGuiCol idx, const ImVec4& col, bool fading_out, float current_fade_opacity) + { + if (fading_out) + ImGui::PushStyleColor(idx, ImVec4(col.x, col.y, col.z, col.w * current_fade_opacity)); + else + ImGui::PushStyleColor(idx, col); + } +} + +#if 1 +// Reuse ImGUI Windows. +int NotificationManager::NotificationIDProvider::allocate_id() +{ + int id; + if (m_released_ids.empty()) + id = ++m_next_id; + else { + id = m_released_ids.back(); + m_released_ids.pop_back(); + } + return id; +} +void NotificationManager::NotificationIDProvider::release_id(int id) +{ + m_released_ids.push_back(id); +} +#else +// Don't reuse ImGUI Windows, allocate a new ID every time. +int NotificationManager::NotificationIDProvider::allocate_id() { return ++ m_next_id; } +void NotificationManager::NotificationIDProvider::release_id(int) {} +#endif + +//------PopNotification-------- +NotificationManager::PopNotification::PopNotification(const NotificationData &n, NotificationIDProvider &id_provider, wxEvtHandler* evt_handler) : + m_data (n) + , m_id_provider (id_provider) + , m_remaining_time (n.duration) + , m_last_remaining_time (n.duration) + , m_counting_down (n.duration != 0) + , m_text1 (n.text1) + , m_hypertext (n.hypertext) + , m_text2 (n.text2) + , m_evt_handler (evt_handler) +{ + //init(); +} +NotificationManager::PopNotification::RenderResult NotificationManager::PopNotification::render(GLCanvas3D& canvas, const float& initial_y, bool move_from_overlay, float overlay_width) +{ + if (!m_initialized) { + init(); + } + if (m_finished) + return RenderResult::Finished; + if (m_close_pending) { + // request of extra frame will be done in caller function by ret val ClosePending + m_finished = true; + return RenderResult::ClosePending; + } + if (m_hidden) { + m_top_y = initial_y - GAP_WIDTH; + return RenderResult::Static; + } + RenderResult ret_val = m_counting_down ? RenderResult::Countdown : RenderResult::Static; + Size cnv_size = canvas.get_canvas_size(); + ImGuiWrapper& imgui = *wxGetApp().imgui(); + bool shown = true; + ImVec2 mouse_pos = ImGui::GetMousePos(); + float right_gap = SPACE_RIGHT_PANEL + (move_from_overlay ? overlay_width + m_line_height * 5 : 0); + + if (m_line_height != ImGui::CalcTextSize("A").y) + init(); + + set_next_window_size(imgui); + + //top y of window + m_top_y = initial_y + m_window_height; + //top right position + + ImVec2 win_pos(1.0f * (float)cnv_size.get_width() - right_gap, 1.0f * (float)cnv_size.get_height() - m_top_y); + imgui.set_next_window_pos(win_pos.x, win_pos.y, ImGuiCond_Always, 1.0f, 0.0f); + imgui.set_next_window_size(m_window_width, m_window_height, ImGuiCond_Always); + + //find if hovered + if (mouse_pos.x < win_pos.x && mouse_pos.x > win_pos.x - m_window_width && mouse_pos.y > win_pos.y&& mouse_pos.y < win_pos.y + m_window_height) + { + ImGui::SetNextWindowFocus(); + ret_val = RenderResult::Hovered; + //reset fading + m_fading_out = false; + m_current_fade_opacity = 1.f; + m_remaining_time = m_data.duration; + m_countdown_frame = 0; + } + + if (m_counting_down && m_remaining_time < 0) + m_close_pending = true; + + if (m_close_pending) { + // request of extra frame will be done in caller function by ret val ClosePending + m_finished = true; + return RenderResult::ClosePending; + } + + // color change based on fading out + bool fading_pop = false; + if (m_fading_out) { + if (!m_paused) + m_current_fade_opacity -= 1.f / ((m_fading_time + 1.f) * 60.f); + Notifications_Internal::push_style_color(ImGuiCol_WindowBg, ImGui::GetStyleColorVec4(ImGuiCol_WindowBg), m_fading_out, m_current_fade_opacity); + Notifications_Internal::push_style_color(ImGuiCol_Text, ImGui::GetStyleColorVec4(ImGuiCol_Text), m_fading_out, m_current_fade_opacity); + fading_pop = true; + } + // background color + if (m_is_gray) { + ImVec4 backcolor(0.7f, 0.7f, 0.7f, 0.5f); + Notifications_Internal::push_style_color(ImGuiCol_WindowBg, backcolor, m_fading_out, m_current_fade_opacity); + } else if (m_data.level == NotificationLevel::ErrorNotification) { + ImVec4 backcolor = ImGui::GetStyleColorVec4(ImGuiCol_WindowBg); + backcolor.x += 0.3f; + Notifications_Internal::push_style_color(ImGuiCol_WindowBg, backcolor, m_fading_out, m_current_fade_opacity); + } else if (m_data.level == NotificationLevel::WarningNotification) { + ImVec4 backcolor = ImGui::GetStyleColorVec4(ImGuiCol_WindowBg); + backcolor.x += 0.3f; + backcolor.y += 0.15f; + Notifications_Internal::push_style_color(ImGuiCol_WindowBg, backcolor, m_fading_out, m_current_fade_opacity); + } + + //name of window - probably indentifies window and is shown so last_end add whitespaces according to id + if (! m_id) + m_id = m_id_provider.allocate_id(); + std::string name; + { + // Create a unique ImGUI window name. The name may be recycled using a name of an already released notification. + char buf[32]; + sprintf(buf, "!!Ntfctn%d", m_id); + name = buf; + } + if (imgui.begin(name, &shown, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar )) { + if (shown) { + + ImVec2 win_size = ImGui::GetWindowSize(); + + + //FIXME: dont forget to us this for texts + //GUI::format(_utf8(L())); + + /* + //countdown numbers + ImGui::SetCursorPosX(15); + ImGui::SetCursorPosY(15); + imgui.text(std::to_string(m_remaining_time).c_str()); + */ + if(m_counting_down) + render_countdown(imgui, win_size.x, win_size.y, win_pos.x, win_pos.y); + render_left_sign(imgui); + render_text(imgui, win_size.x, win_size.y, win_pos.x, win_pos.y); + render_close_button(imgui, win_size.x, win_size.y, win_pos.x, win_pos.y); + if (m_multiline && m_lines_count > 3) + render_minimize_button(imgui, win_pos.x, win_pos.y); + } else { + // the user clicked on the [X] button ( ImGuiWindowFlags_NoTitleBar means theres no [X] button) + m_close_pending = true; + canvas.set_as_dirty(); + } + } + imgui.end(); + + if (fading_pop) { + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + } + if (m_is_gray) + ImGui::PopStyleColor(); + else if (m_data.level == NotificationLevel::ErrorNotification) + ImGui::PopStyleColor(); + else if (m_data.level == NotificationLevel::WarningNotification) + ImGui::PopStyleColor(); + return ret_val; +} +void NotificationManager::PopNotification::init() +{ + std::string text = m_text1 + " " + m_hypertext; + int last_end = 0; + m_lines_count = 0; + + //determine line width + m_line_height = ImGui::CalcTextSize("A").y; + + m_left_indentation = m_line_height; + if (m_data.level == NotificationLevel::ErrorNotification || m_data.level == NotificationLevel::WarningNotification) { + std::string text; + text = (m_data.level == NotificationLevel::ErrorNotification ? ImGui::ErrorMarker : ImGui::WarningMarker); + float picture_width = ImGui::CalcTextSize(text.c_str()).x; + m_left_indentation = picture_width + m_line_height / 2; + } + m_window_width_offset = m_left_indentation + m_line_height * 2; + m_window_width = m_line_height * 25; + + // count lines + m_endlines.clear(); + while (last_end < text.length() - 1) + { + int next_hard_end = text.find_first_of('\n', last_end); + if (next_hard_end > 0 && ImGui::CalcTextSize(text.substr(last_end, next_hard_end - last_end).c_str()).x < m_window_width - m_window_width_offset) { + //next line is ended by '/n' + m_endlines.push_back(next_hard_end); + last_end = next_hard_end + 1; + } + else { + // find next suitable endline + if (ImGui::CalcTextSize(text.substr(last_end).c_str()).x >= m_window_width - 3.5f * m_line_height) {// m_window_width_offset) { + // more than one line till end + int next_space = text.find_first_of(' ', last_end); + if (next_space > 0) { + int next_space_candidate = text.find_first_of(' ', next_space + 1); + while (next_space_candidate > 0 && ImGui::CalcTextSize(text.substr(last_end, next_space_candidate - last_end).c_str()).x < m_window_width - m_window_width_offset) { + next_space = next_space_candidate; + next_space_candidate = text.find_first_of(' ', next_space + 1); + } + m_endlines.push_back(next_space); + last_end = next_space + 1; + } + } + else { + m_endlines.push_back(text.length()); + last_end = text.length(); + } + + } + m_lines_count++; + } + m_initialized = true; +} +void NotificationManager::PopNotification::set_next_window_size(ImGuiWrapper& imgui) +{ + m_window_height = m_multiline ? + m_lines_count * m_line_height : + 2 * m_line_height; + m_window_height += 1 * m_line_height; // top and bottom +} + +void NotificationManager::PopNotification::render_text(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + float x_offset = m_left_indentation; + std::string fulltext = m_text1 + m_hypertext; //+ m_text2; + ImVec2 text_size = ImGui::CalcTextSize(fulltext.c_str()); + // text posistions are calculated by lines count + // large texts has "more" button or are displayed whole + // smaller texts are divided as one liners and two liners + if (m_lines_count > 2) { + if (m_multiline) { + + int last_end = 0; + float starting_y = m_line_height/2;//10; + float shift_y = m_line_height;// -m_line_height / 20; + for (size_t i = 0; i < m_lines_count; i++) { + std::string line = m_text1.substr(last_end , m_endlines[i] - last_end); + last_end = m_endlines[i] + 1; + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(starting_y + i * shift_y); + imgui.text(line.c_str()); + } + //hyperlink text + if (!m_hypertext.empty()) + { + render_hypertext(imgui, x_offset + ImGui::CalcTextSize(m_text1.substr(m_endlines[m_lines_count - 2] + 1, m_endlines[m_lines_count - 1] - m_endlines[m_lines_count - 2] - 1).c_str()).x, starting_y + (m_lines_count - 1) * shift_y, m_hypertext); + } + + + } else { + // line1 + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(win_size.y / 2 - win_size.y / 6 - m_line_height / 2); + imgui.text(m_text1.substr(0, m_endlines[0]).c_str()); + // line2 + std::string line = m_text1.substr(m_endlines[0] + 1, m_endlines[1] - m_endlines[0] - 1); + if (ImGui::CalcTextSize(line.c_str()).x > m_window_width - m_window_width_offset - ImGui::CalcTextSize((".." + _u8L("More")).c_str()).x) + { + line = line.substr(0, line.length() - 6); + line += ".."; + }else + line += " "; + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(win_size.y / 2 + win_size.y / 6 - m_line_height / 2); + imgui.text(line.c_str()); + // "More" hypertext + render_hypertext(imgui, x_offset + ImGui::CalcTextSize(line.c_str()).x, win_size.y / 2 + win_size.y / 6 - m_line_height / 2, _u8L("More"), true); + } + } else { + //text 1 + float cursor_y = win_size.y / 2 - text_size.y / 2; + float cursor_x = x_offset; + if(m_lines_count > 1) { + // line1 + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(win_size.y / 2 - win_size.y / 6 - m_line_height / 2); + imgui.text(m_text1.substr(0, m_endlines[0]).c_str()); + // line2 + std::string line = m_text1.substr(m_endlines[0] + 1); + cursor_y = win_size.y / 2 + win_size.y / 6 - m_line_height / 2; + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(cursor_y); + imgui.text(line.c_str()); + cursor_x = x_offset + ImGui::CalcTextSize(line.c_str()).x; + } else { + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(cursor_y); + imgui.text(m_text1.c_str()); + cursor_x = x_offset + ImGui::CalcTextSize(m_text1.c_str()).x; + } + //hyperlink text + if (!m_hypertext.empty()) + { + render_hypertext(imgui, cursor_x + 4, cursor_y, m_hypertext); + } + + //notification text 2 + //text 2 is suposed to be after the hyperlink - currently it is not used + /* + if (!m_text2.empty()) + { + ImVec2 part_size = ImGui::CalcTextSize(m_hypertext.c_str()); + ImGui::SetCursorPosX(win_size.x / 2 + text_size.x / 2 - part_size.x + 8 - x_offset); + ImGui::SetCursorPosY(cursor_y); + imgui.text(m_text2.c_str()); + } + */ + } +} + +void NotificationManager::PopNotification::render_hypertext(ImGuiWrapper& imgui, const float text_x, const float text_y, const std::string text, bool more) +{ + //invisible button + ImVec2 part_size = ImGui::CalcTextSize(text.c_str()); + ImGui::SetCursorPosX(text_x -4); + ImGui::SetCursorPosY(text_y -5); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + if (imgui.button(" ", part_size.x + 6, part_size.y + 10)) + { + if (more) + { + m_multiline = true; + set_next_window_size(imgui); + } + else { + on_text_click(); + m_close_pending = true; + } + } + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + + //hover color + ImVec4 orange_color = ImVec4(.99f, .313f, .0f, 1.0f);//ImGui::GetStyleColorVec4(ImGuiCol_Button); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly)) + orange_color.y += 0.2f; + + //text + Notifications_Internal::push_style_color(ImGuiCol_Text, orange_color, m_fading_out, m_current_fade_opacity); + ImGui::SetCursorPosX(text_x); + ImGui::SetCursorPosY(text_y); + imgui.text(text.c_str()); + ImGui::PopStyleColor(); + + //underline + ImVec2 lineEnd = ImGui::GetItemRectMax(); + lineEnd.y -= 2; + ImVec2 lineStart = lineEnd; + lineStart.x = ImGui::GetItemRectMin().x; + ImGui::GetWindowDrawList()->AddLine(lineStart, lineEnd, IM_COL32((int)(orange_color.x * 255), (int)(orange_color.y * 255), (int)(orange_color.z * 255), (int)(orange_color.w * 255.f * (m_fading_out ? m_current_fade_opacity : 1.f)))); + +} + +void NotificationManager::PopNotification::render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImVec4 orange_color = ImGui::GetStyleColorVec4(ImGuiCol_Button); + orange_color.w = 0.8f; + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + Notifications_Internal::push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_fading_out, m_current_fade_opacity); + Notifications_Internal::push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_fading_out, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + + //button - if part if treggered + std::string button_text; + button_text = ImGui::CloseIconMarker; + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), + ImVec2(win_pos.x, win_pos.y + win_size.y - (m_multiline? 2 * m_line_height : 0)), + true)) + { + button_text = ImGui::CloseIconHoverMarker; + } + ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.25f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y/2); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + m_close_pending = true; + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - win_size.x / 10.f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", win_size.x / 10.f, win_size.y - (m_multiline ? 2 * m_line_height : 0))) + { + m_close_pending = true; + } + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); +} +void NotificationManager::PopNotification::render_countdown(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + /* + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + + //countdown dots + std::string dot_text; + dot_text = m_remaining_time <= (float)m_data.duration / 4 * 3 ? ImGui::TimerDotEmptyMarker : ImGui::TimerDotMarker; + ImGui::SetCursorPosX(win_size.x - m_line_height); + //ImGui::SetCursorPosY(win_size.y / 2 - 24); + ImGui::SetCursorPosY(0); + imgui.text(dot_text.c_str()); + + dot_text = m_remaining_time < m_data.duration / 2 ? ImGui::TimerDotEmptyMarker : ImGui::TimerDotMarker; + ImGui::SetCursorPosX(win_size.x - m_line_height); + //ImGui::SetCursorPosY(win_size.y / 2 - 9); + ImGui::SetCursorPosY(win_size.y / 2 - m_line_height / 2); + imgui.text(dot_text.c_str()); + + dot_text = m_remaining_time <= m_data.duration / 4 ? ImGui::TimerDotEmptyMarker : ImGui::TimerDotMarker; + ImGui::SetCursorPosX(win_size.x - m_line_height); + //ImGui::SetCursorPosY(win_size.y / 2 + 6); + ImGui::SetCursorPosY(win_size.y - m_line_height); + imgui.text(dot_text.c_str()); + */ + if (!m_fading_out && m_remaining_time <= m_data.duration / 4) { + m_fading_out = true; + m_fading_time = m_remaining_time; + } + + if (m_last_remaining_time != m_remaining_time) { + m_last_remaining_time = m_remaining_time; + m_countdown_frame = 0; + } + /* + //countdown line + ImVec4 orange_color = ImGui::GetStyleColorVec4(ImGuiCol_Button); + float invisible_length = ((float)(m_data.duration - m_remaining_time) / (float)m_data.duration * win_size_x); + invisible_length -= win_size_x / ((float)m_data.duration * 60.f) * (60 - m_countdown_frame); + ImVec2 lineEnd = ImVec2(win_pos_x - invisible_length, win_pos_y + win_size_y - 5); + ImVec2 lineStart = ImVec2(win_pos_x - win_size_x, win_pos_y + win_size_y - 5); + ImGui::GetWindowDrawList()->AddLine(lineStart, lineEnd, IM_COL32((int)(orange_color.x * 255), (int)(orange_color.y * 255), (int)(orange_color.z * 255), (int)(orange_color.picture_width * 255.f * (m_fading_out ? m_current_fade_opacity : 1.f))), 2.f); + if (!m_paused) + m_countdown_frame++; + */ +} +void NotificationManager::PopNotification::render_left_sign(ImGuiWrapper& imgui) +{ + if (m_data.level == NotificationLevel::ErrorNotification || m_data.level == NotificationLevel::WarningNotification) { + std::string text; + text = (m_data.level == NotificationLevel::ErrorNotification ? ImGui::ErrorMarker : ImGui::WarningMarker); + ImGui::SetCursorPosX(m_line_height / 3); + ImGui::SetCursorPosY(m_window_height / 2 - m_line_height / 2); + imgui.text(text.c_str()); + } +} +void NotificationManager::PopNotification::render_minimize_button(ImGuiWrapper& imgui, const float win_pos_x, const float win_pos_y) +{ + ImVec4 orange_color = ImGui::GetStyleColorVec4(ImGuiCol_Button); + orange_color.w = 0.8f; + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + Notifications_Internal::push_style_color(ImGuiCol_ButtonActive, ImGui::GetStyleColorVec4(ImGuiCol_WindowBg), m_fading_out, m_current_fade_opacity); + Notifications_Internal::push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_fading_out, m_current_fade_opacity); + Notifications_Internal::push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_fading_out, m_current_fade_opacity); + + + //button - if part if treggered + std::string button_text; + button_text = ImGui::MinimalizeMarker; + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos_x - m_window_width / 10.f, win_pos_y + m_window_height - 2 * m_line_height + 1), + ImVec2(win_pos_x, win_pos_y + m_window_height), + true)) + { + button_text = ImGui::MinimalizeHoverMarker; + } + ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(m_window_width - m_line_height * 2.25f); + ImGui::SetCursorPosY(m_window_height - button_size.y - 5); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + m_multiline = false; + } + + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); + ImGui::PopStyleColor(); +} +void NotificationManager::PopNotification::on_text_click() +{ + switch (m_data.type) { + case NotificationType::ExportToRemovableFinished : + assert(m_evt_handler != nullptr); + if (m_evt_handler != nullptr) + wxPostEvent(m_evt_handler, EjectDriveNotificationClickedEvent(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED)); + break; + case NotificationType::SlicingComplete : + //wxGetApp().plater()->export_gcode(false); + assert(m_evt_handler != nullptr); + if (m_evt_handler != nullptr) + wxPostEvent(m_evt_handler, ExportGcodeNotificationClickedEvent(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED)); + break; + case NotificationType::PresetUpdateAvailable : + //wxGetApp().plater()->export_gcode(false); + assert(m_evt_handler != nullptr); + if (m_evt_handler != nullptr) + wxPostEvent(m_evt_handler, PresetUpdateAvailableClickedEvent(EVT_PRESET_UPDATE_AVAILABLE_CLICKED)); + break; + case NotificationType::NewAppAvailable: + wxLaunchDefaultBrowser("https://github.com/prusa3d/PrusaSlicer/releases"); + break; + default: + break; + } +} +void NotificationManager::PopNotification::update(const NotificationData& n) +{ + m_text1 = n.text1; + m_hypertext = n.hypertext; + m_text2 = n.text2; + init(); +} +bool NotificationManager::PopNotification::compare_text(const std::string& text) +{ + std::string t1(m_text1); + std::string t2(text); + t1.erase(std::remove_if(t1.begin(), t1.end(), ::isspace), t1.end()); + t2.erase(std::remove_if(t2.begin(), t2.end(), ::isspace), t2.end()); + if (t1.compare(t2) == 0) + return true; + return false; +} + +NotificationManager::SlicingCompleteLargeNotification::SlicingCompleteLargeNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler, bool large) : + NotificationManager::PopNotification(n, id_provider, evt_handler) +{ + set_large(large); +} +void NotificationManager::SlicingCompleteLargeNotification::render_text(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + if (!m_is_large) + PopNotification::render_text(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + else { + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + + ImVec2 text1_size = ImGui::CalcTextSize(m_text1.c_str()); + float x_offset = m_left_indentation; + std::string fulltext = m_text1 + m_hypertext + m_text2; + ImVec2 text_size = ImGui::CalcTextSize(fulltext.c_str()); + float cursor_y = win_size.y / 2 - text_size.y / 2; + if (m_has_print_info) { + x_offset = 20; + cursor_y = win_size.y / 2 + win_size.y / 6 - text_size.y / 2; + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(cursor_y); + imgui.text(m_print_info.c_str()); + cursor_y = win_size.y / 2 - win_size.y / 6 - text_size.y / 2; + } + ImGui::SetCursorPosX(x_offset); + ImGui::SetCursorPosY(cursor_y); + imgui.text(m_text1.c_str()); + + render_hypertext(imgui, x_offset + text1_size.x + 4, cursor_y, m_hypertext); + } +} +void NotificationManager::SlicingCompleteLargeNotification::set_print_info(const std::string &info) +{ + m_print_info = info; + m_has_print_info = true; + if (m_is_large) + m_lines_count = 2; +} +void NotificationManager::SlicingCompleteLargeNotification::set_large(bool l) +{ + m_is_large = l; + m_counting_down = !l; + m_hypertext = l ? _u8L("Export G-Code.") : std::string(); + m_hidden = !l; +} +//------NotificationManager-------- +NotificationManager::NotificationManager(wxEvtHandler* evt_handler) : + m_evt_handler(evt_handler) +{ +} +void NotificationManager::push_notification(const NotificationType type, GLCanvas3D& canvas, int timestamp) +{ + auto it = std::find_if(basic_notifications.begin(), basic_notifications.end(), + boost::bind(&NotificationData::type, _1) == type); + assert(it != basic_notifications.end()); + if (it != basic_notifications.end()) + push_notification_data( *it, canvas, timestamp); +} +void NotificationManager::push_notification(const std::string& text, GLCanvas3D& canvas, int timestamp) +{ + push_notification_data({ NotificationType::CustomNotification, NotificationLevel::RegularNotification, 10, text }, canvas, timestamp ); +} +void NotificationManager::push_notification(const std::string& text, NotificationManager::NotificationLevel level, GLCanvas3D& canvas, int timestamp) +{ + int duration = 0; + switch (level) { + case NotificationLevel::RegularNotification: duration = 10; break; + case NotificationLevel::ErrorNotification: break; + case NotificationLevel::ImportantNotification: break; + default: + assert(false); + return; + } + push_notification_data({ NotificationType::CustomNotification, level, duration, text }, canvas, timestamp); +} +void NotificationManager::push_slicing_error_notification(const std::string& text, GLCanvas3D& canvas) +{ + set_all_slicing_errors_gray(false); + push_notification_data({ NotificationType::SlicingError, NotificationLevel::ErrorNotification, 0, _u8L("ERROR:") + "\n" + text }, canvas, 0); + close_notification_of_type(NotificationType::SlicingComplete); +} +void NotificationManager::push_slicing_warning_notification(const std::string& text, bool gray, GLCanvas3D& canvas, ObjectID oid, int warning_step) +{ + NotificationData data { NotificationType::SlicingWarning, NotificationLevel::WarningNotification, 0, _u8L("WARNING:") + "\n" + text }; + + auto notification = std::make_unique(data, m_id_provider, m_evt_handler); + notification->object_id = oid; + notification->warning_step = warning_step; + if (push_notification_data(std::move(notification), canvas, 0)) { + m_pop_notifications.back()->set_gray(gray); + } +} +void NotificationManager::push_plater_error_notification(const std::string& text, GLCanvas3D& canvas) +{ + push_notification_data({ NotificationType::PlaterError, NotificationLevel::ErrorNotification, 0, _u8L("ERROR:") + "\n" + text }, canvas, 0); +} +void NotificationManager::push_plater_warning_notification(const std::string& text, GLCanvas3D& canvas) +{ + push_notification_data({ NotificationType::PlaterWarning, NotificationLevel::WarningNotification, 0, _u8L("WARNING:") + "\n" + text }, canvas, 0); + // dissaper if in preview + set_in_preview(m_in_preview); +} +void NotificationManager::close_plater_error_notification(const std::string& text) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::PlaterError && notification->compare_text(_u8L("ERROR:") + "\n" + text)) { + notification->close(); + } + } +} +void NotificationManager::close_plater_warning_notification(const std::string& text) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::PlaterWarning && notification->compare_text(_u8L("WARNING:") + "\n" + text)) { + notification->close(); + } + } +} +void NotificationManager::set_all_slicing_errors_gray(bool g) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::SlicingError) { + notification->set_gray(g); + } + } +} +void NotificationManager::set_all_slicing_warnings_gray(bool g) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::SlicingWarning) { + notification->set_gray(g); + } + } +} +/* +void NotificationManager::set_slicing_warning_gray(const std::string& text, bool g) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::SlicingWarning && notification->compare_text(text)) { + notification->set_gray(g); + } + } +} +*/ +void NotificationManager::close_slicing_errors_and_warnings() +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::SlicingError || notification->get_type() == NotificationType::SlicingWarning) { + notification->close(); + } + } +} +void NotificationManager::push_slicing_complete_notification(GLCanvas3D& canvas, int timestamp, bool large) +{ + std::string hypertext; + int time = 10; + if (has_slicing_error_notification()) + return; + if (large) { + hypertext = _u8L("Export G-Code."); + time = 0; + } + NotificationData data{ NotificationType::SlicingComplete, NotificationLevel::RegularNotification, time, _u8L("Slicing finished."), hypertext }; + push_notification_data(std::make_unique(data, m_id_provider, m_evt_handler, large), + canvas, timestamp); +} +void NotificationManager::set_slicing_complete_print_time(const std::string &info) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::SlicingComplete) { + dynamic_cast(notification.get())->set_print_info(info); + break; + } + } +} +void NotificationManager::set_slicing_complete_large(bool large) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::SlicingComplete) { + dynamic_cast(notification.get())->set_large(large); + break; + } + } +} +void NotificationManager::close_notification_of_type(const NotificationType type) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == type) { + notification->close(); + } + } +} +void NotificationManager::remove_slicing_warnings_of_released_objects(const std::vector& living_oids) +{ + for (std::unique_ptr ¬ification : m_pop_notifications) + if (notification->get_type() == NotificationType::SlicingWarning) { + if (! std::binary_search(living_oids.begin(), living_oids.end(), + static_cast(notification.get())->object_id)) + notification->close(); + } +} +bool NotificationManager::push_notification_data(const NotificationData ¬ification_data, GLCanvas3D& canvas, int timestamp) +{ + return push_notification_data(std::make_unique(notification_data, m_id_provider, m_evt_handler), canvas, timestamp); +} +bool NotificationManager::push_notification_data(std::unique_ptr notification, GLCanvas3D& canvas, int timestamp) +{ + // if timestamped notif, push only new one + if (timestamp != 0) { + if (m_used_timestamps.find(timestamp) == m_used_timestamps.end()) { + m_used_timestamps.insert(timestamp); + } else { + return false; + } + } + if (this->activate_existing(notification.get())) { + m_pop_notifications.back()->update(notification->get_data()); + canvas.request_extra_frame(); + return false; + } else { + m_pop_notifications.emplace_back(std::move(notification)); + canvas.request_extra_frame(); + return true; + } +} +void NotificationManager::render_notifications(GLCanvas3D& canvas, float overlay_width) +{ + float last_x = 0.0f; + float current_height = 0.0f; + bool request_next_frame = false; + bool render_main = false; + bool hovered = false; + sort_notifications(); + // iterate thru notifications and render them / erease them + for (auto it = m_pop_notifications.begin(); it != m_pop_notifications.end();) { + if ((*it)->get_finished()) { + it = m_pop_notifications.erase(it); + } else { + (*it)->set_paused(m_hovered); + PopNotification::RenderResult res = (*it)->render(canvas, last_x, m_move_from_overlay, overlay_width); + if (res != PopNotification::RenderResult::Finished) { + last_x = (*it)->get_top() + GAP_WIDTH; + current_height = std::max(current_height, (*it)->get_current_top()); + render_main = true; + } + if (res == PopNotification::RenderResult::Countdown || res == PopNotification::RenderResult::ClosePending || res == PopNotification::RenderResult::Finished) + request_next_frame = true; + if (res == PopNotification::RenderResult::Hovered) + hovered = true; + ++it; + } + } + m_hovered = hovered; + + //actualizate timers and request frame if needed + wxWindow* p = dynamic_cast (wxGetApp().plater()); + while (p->GetParent()) + p = p->GetParent(); + wxTopLevelWindow* top_level_wnd = dynamic_cast(p); + if (!top_level_wnd->IsActive()) + return; + + { + // Control the fade-out. + // time in seconds + long now = wxGetLocalTime(); + // Pausing fade-out when the mouse is over some notification. + if (!m_hovered && m_last_time < now) + { + if (now - m_last_time == 1) + { + for (auto ¬ification : m_pop_notifications) + { + notification->substract_remaining_time(); + } + } + m_last_time = now; + } + } + + if (request_next_frame) + //FIXME this is very expensive for fade-out control. + // If any of the notifications is fading out, 100% of the CPU/GPU is consumed. + canvas.request_extra_frame(); +} + +void NotificationManager::sort_notifications() +{ + // Stable sorting, so that the order of equal ranges is stable. + std::stable_sort(m_pop_notifications.begin(), m_pop_notifications.end(), [](const std::unique_ptr &n1, const std::unique_ptr &n2) { + int n1l = (int)n1->get_data().level; + int n2l = (int)n2->get_data().level; + if (n1l == n2l && n1->get_is_gray() && !n2->get_is_gray()) + return true; + return (n1l < n2l); + }); +} + +bool NotificationManager::activate_existing(const NotificationManager::PopNotification* notification) +{ + NotificationType new_type = notification->get_type(); + const std::string &new_text = notification->get_data().text1; + for (auto it = m_pop_notifications.begin(); it != m_pop_notifications.end(); ++it) { + if ((*it)->get_type() == new_type && !(*it)->get_finished()) { + if (new_type == NotificationType::CustomNotification || new_type == NotificationType::PlaterWarning) { + if (!(*it)->compare_text(new_text)) + continue; + } else if (new_type == NotificationType::SlicingWarning) { + auto w1 = dynamic_cast(notification); + auto w2 = dynamic_cast(it->get()); + if (w1 != nullptr && w2 != nullptr) { + if (!(*it)->compare_text(new_text) || w1->object_id != w2->object_id) { + continue; + } + } else { + continue; + } + } + + if (it != m_pop_notifications.end() - 1) + std::rotate(it, it + 1, m_pop_notifications.end()); + return true; + } + } + return false; +} + +void NotificationManager::set_in_preview(bool preview) +{ + m_in_preview = preview; + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::PlaterWarning) + notification->hide(preview); + } +} + +bool NotificationManager::has_slicing_error_notification() +{ + return std::any_of(m_pop_notifications.begin(), m_pop_notifications.end(), [](auto &n) { + return n->get_type() == NotificationType::SlicingError; + }); +} + +}//namespace GUI +}//namespace Slic3r diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp new file mode 100644 index 0000000000..49de00a9f4 --- /dev/null +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -0,0 +1,332 @@ +#ifndef slic3r_GUI_NotificationManager_hpp_ +#define slic3r_GUI_NotificationManager_hpp_ + +#include "Event.hpp" +#include "I18N.hpp" + +#include + +#include +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +using EjectDriveNotificationClickedEvent = SimpleEvent; +wxDECLARE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); +using ExportGcodeNotificationClickedEvent = SimpleEvent; +wxDECLARE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent); +using PresetUpdateAvailableClickedEvent = SimpleEvent; +wxDECLARE_EVENT(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, PresetUpdateAvailableClickedEvent); + +class GLCanvas3D; +class ImGuiWrapper; + +enum class NotificationType +{ + CustomNotification, + // Notification on end of slicing and G-code processing (the full G-code preview is available). + // Contains a hyperlink to export the G-code to a removable media. + SlicingComplete, +// SlicingNotPossible, + // Notification on end of export to a removable media, with hyperling to eject the external media. + ExportToRemovableFinished, + // Works on OSX only. + //FIXME Do we want to have it on Linux and Windows? Is it possible to get the Disconnect event on Windows? + Mouse3dDisconnected, +// Mouse3dConnected, +// NewPresetsAviable, + // Notification on the start of PrusaSlicer, when a new PrusaSlicer version is published. + // Contains a hyperlink to open a web browser pointing to the PrusaSlicer download location. + NewAppAvailable, + // Notification on the start of PrusaSlicer, when updates of system profiles are detected. + // Contains a hyperlink to execute installation of the new system profiles. + PresetUpdateAvailable, +// LoadingFailed, + // Not used - instead Slicing error is used for both slicing and validate errors. +// ValidateError, + // Slicing error produced by BackgroundSlicingProcess::validate() or by the BackgroundSlicingProcess background + // thread thowing a SlicingError exception. + SlicingError, + // Slicing warnings, issued by the slicing process. + // Slicing warnings are registered for a particular Print milestone or a PrintObject and its milestone. + SlicingWarning, + // Object partially outside the print volume. Cannot slice. + PlaterError, + // Object fully outside the print volume, or extrusion outside the print volume. Slicing is not disabled. + PlaterWarning +}; + +class NotificationManager +{ +public: + enum class NotificationLevel : int + { + // The notifications will be presented in the order of importance, thus these enum values + // are sorted by the importance. + // "Good to know" notification, usually but not always with a quick fade-out. + RegularNotification = 1, + // Information notification without a fade-out or with a longer fade-out. + ImportantNotification, + // Warning, no fade-out. + WarningNotification, + // Error, no fade-out. + ErrorNotification, + }; + + NotificationManager(wxEvtHandler* evt_handler); + + // Push a prefabricated notification from basic_notifications (see the table at the end of this file). + void push_notification(const NotificationType type, GLCanvas3D& canvas, int timestamp = 0); + // Push a NotificationType::CustomNotification with NotificationLevel::RegularNotification and 10s fade out interval. + void push_notification(const std::string& text, GLCanvas3D& canvas, int timestamp = 0); + // Push a NotificationType::CustomNotification with provided notification level and 10s for RegularNotification. + // ErrorNotification and ImportantNotification are never faded out. + void push_notification(const std::string& text, NotificationLevel level, GLCanvas3D& canvas, int timestamp = 0); + // Creates Slicing Error notification with a custom text and no fade out. + void push_slicing_error_notification(const std::string& text, GLCanvas3D& canvas); + // Creates Slicing Warning notification with a custom text and no fade out. + void push_slicing_warning_notification(const std::string& text, bool gray, GLCanvas3D& canvas, ObjectID oid, int warning_step); + // marks slicing errors as gray + void set_all_slicing_errors_gray(bool g); + // marks slicing warings as gray + void set_all_slicing_warnings_gray(bool g); +// void set_slicing_warning_gray(const std::string& text, bool g); + // immediately stops showing slicing errors + void close_slicing_errors_and_warnings(); + // Release those slicing warnings, which refer to an ObjectID, which is not in the list. + // living_oids is expected to be sorted. + void remove_slicing_warnings_of_released_objects(const std::vector& living_oids); + // Object partially outside of the printer working space, cannot print. No fade out. + void push_plater_error_notification(const std::string& text, GLCanvas3D& canvas); + // Object fully out of the printer working space and such. No fade out. + void push_plater_warning_notification(const std::string& text, GLCanvas3D& canvas); + // Closes error or warning of the same text + void close_plater_error_notification(const std::string& text); + void close_plater_warning_notification(const std::string& text); + // Creates special notification slicing complete. + // If large = true (Plater side bar is closed), then printing time and export button is shown + // at the notification and fade-out is disabled. Otherwise the fade out time is set to 10s. + void push_slicing_complete_notification(GLCanvas3D& canvas, int timestamp, bool large); + // Add a print time estimate to an existing SlicingComplete notification. + void set_slicing_complete_print_time(const std::string &info); + // Called when the side bar changes its visibility, as the "slicing complete" notification supplements + // the "slicing info" normally shown at the side bar. + void set_slicing_complete_large(bool large); + // renders notifications in queue and deletes expired ones + void render_notifications(GLCanvas3D& canvas, float overlay_width); + // finds and closes all notifications of given type + void close_notification_of_type(const NotificationType type); + // Which view is active? Plater or G-code preview? Hide warnings in G-code preview. + void set_in_preview(bool preview); + // Move to left to avoid colision with variable layer height gizmo + void set_move_from_overlay(bool move) { m_move_from_overlay = move; } + +private: + // duration 0 means not disapearing + struct NotificationData { + NotificationType type; + NotificationLevel level; + // Fade out time + const int duration; + const std::string text1; + const std::string hypertext; + const std::string text2; + }; + + // Cache of IDs to identify and reuse ImGUI windows. + class NotificationIDProvider + { + public: + int allocate_id(); + void release_id(int id); + + private: + // Next ID used for naming the ImGUI windows. + int m_next_id{ 1 }; + // IDs of ImGUI windows, which were released and they are ready for reuse. + std::vector m_released_ids; + }; + + //Pop notification - shows only once to user. + class PopNotification + { + public: + enum class RenderResult + { + Finished, + ClosePending, + Static, + Countdown, + Hovered + }; + PopNotification(const NotificationData &n, NotificationIDProvider &id_provider, wxEvtHandler* evt_handler); + virtual ~PopNotification() { if (m_id) m_id_provider.release_id(m_id); } + RenderResult render(GLCanvas3D& canvas, const float& initial_y, bool move_from_overlay, float overlay_width); + // close will dissapear notification on next render + void close() { m_close_pending = true; } + // data from newer notification of same type + void update(const NotificationData& n); + bool get_finished() const { return m_finished; } + // returns top after movement + float get_top() const { return m_top_y; } + //returns top in actual frame + float get_current_top() const { return m_top_y; } + const NotificationType get_type() const { return m_data.type; } + const NotificationData get_data() const { return m_data; } + const bool get_is_gray() const { return m_is_gray; } + // Call equals one second down + void substract_remaining_time() { m_remaining_time--; } + void set_gray(bool g) { m_is_gray = g; } + void set_paused(bool p) { m_paused = p; } + bool compare_text(const std::string& text); + void hide(bool h) { m_hidden = h; } + + protected: + // Call after every size change + void init(); + // Calculetes correct size but not se it in imgui! + virtual void set_next_window_size(ImGuiWrapper& imgui); + virtual void render_text(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x , const float win_pos_y); + void render_close_button(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x , const float win_pos_y); + void render_countdown(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x , const float win_pos_y); + void render_hypertext(ImGuiWrapper& imgui, + const float text_x, const float text_y, + const std::string text, + bool more = false); + void render_left_sign(ImGuiWrapper& imgui); + void render_minimize_button(ImGuiWrapper& imgui, + const float win_pos_x, const float win_pos_y); + void on_text_click(); + + const NotificationData m_data; + + // For reusing ImGUI windows. + NotificationIDProvider &m_id_provider; + int m_id { 0 }; + bool m_initialized { false }; + // Main text + std::string m_text1; + // Clickable text + std::string m_hypertext; + // Aditional text after hypertext - currently not used + std::string m_text2; + // Countdown variables + long m_remaining_time; + bool m_counting_down; + long m_last_remaining_time; + bool m_paused { false }; + int m_countdown_frame { 0 }; + bool m_fading_out { false }; + // total time left when fading beggins + float m_fading_time { 0.0f }; + float m_current_fade_opacity { 1.f }; + // If hidden the notif is alive but not visible to user + bool m_hidden { false }; + // m_finished = true - does not render, marked to delete + bool m_finished { false }; + // Will go to m_finished next render + bool m_close_pending { false }; + // variables to count positions correctly + float m_window_width_offset; + float m_left_indentation; + // Total size of notification window - varies based on monitor + float m_window_height { 56.0f }; + float m_window_width { 450.0f }; + //Distance from bottom of notifications to top of this notification + float m_top_y { 0.0f }; + + // Height of text + // Used as basic scaling unit! + float m_line_height; + std::vector m_endlines; + // Gray are f.e. eorrors when its uknown if they are still valid + bool m_is_gray { false }; + //if multiline = true, notification is showing all lines(>2) + bool m_multiline { false }; + int m_lines_count{ 1 }; + // Target for wxWidgets events sent by clicking on the hyperlink available at some notifications. + wxEvtHandler* m_evt_handler; + }; + + class SlicingCompleteLargeNotification : public PopNotification + { + public: + SlicingCompleteLargeNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler, bool largeds); + void set_large(bool l); + bool get_large() { return m_is_large; } + + void set_print_info(const std::string &info); + protected: + virtual void render_text(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y) + override; + + bool m_is_large; + bool m_has_print_info { false }; + std::string m_print_info { std::string() }; + }; + + class SlicingWarningNotification : public PopNotification + { + public: + SlicingWarningNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler) : PopNotification(n, id_provider, evt_handler) {} + ObjectID object_id; + int warning_step; + }; + + //pushes notification into the queue of notifications that are rendered + //can be used to create custom notification + bool push_notification_data(const NotificationData& notification_data, GLCanvas3D& canvas, int timestamp); + bool push_notification_data(std::unique_ptr notification, GLCanvas3D& canvas, int timestamp); + //finds older notification of same type and moves it to the end of queue. returns true if found + bool activate_existing(const NotificationManager::PopNotification* notification); + // Put the more important notifications to the bottom of the list. + void sort_notifications(); + // If there is some error notification active, then the "Export G-code" notification after the slicing is finished is suppressed. + bool has_slicing_error_notification(); + + // Target for wxWidgets events sent by clicking on the hyperlink available at some notifications. + wxEvtHandler* m_evt_handler; + // Cache of IDs to identify and reuse ImGUI windows. + NotificationIDProvider m_id_provider; + std::deque> m_pop_notifications; + // Last render time in seconds for fade out control. + long m_last_time { 0 }; + // When mouse hovers over some notification, the fade-out of all notifications is suppressed. + bool m_hovered { false }; + //timestamps used for slicing finished - notification could be gone so it needs to be stored here + std::unordered_set m_used_timestamps; + // True if G-code preview is active. False if the Plater is active. + bool m_in_preview { false }; + // True if the layer editing is enabled in Plater, so that the notifications are shifted left of it. + bool m_move_from_overlay { false }; + + //prepared (basic) notifications + const std::vector basic_notifications = { +// {NotificationType::SlicingNotPossible, NotificationLevel::RegularNotification, 10, _u8L("Slicing is not possible.")}, + {NotificationType::ExportToRemovableFinished, NotificationLevel::ImportantNotification, 0, _u8L("Exporting finished."), _u8L("Eject drive.") }, + {NotificationType::Mouse3dDisconnected, NotificationLevel::RegularNotification, 10, _u8L("3D Mouse disconnected.") }, +// {NotificationType::Mouse3dConnected, NotificationLevel::RegularNotification, 5, _u8L("3D Mouse connected.") }, +// {NotificationType::NewPresetsAviable, NotificationLevel::ImportantNotification, 20, _u8L("New Presets are available."), _u8L("See here.") }, + {NotificationType::PresetUpdateAvailable, NotificationLevel::ImportantNotification, 20, _u8L("Configuration update is available."), _u8L("See more.")}, + {NotificationType::NewAppAvailable, NotificationLevel::ImportantNotification, 20, _u8L("New version is available."), _u8L("See Releases page.")}, + //{NotificationType::NewAppAvailable, NotificationLevel::ImportantNotification, 20, _u8L("New vesion of PrusaSlicer is available.", _u8L("Download page.") }, + //{NotificationType::LoadingFailed, NotificationLevel::RegularNotification, 20, _u8L("Loading of model has Failed") }, + //{NotificationType::DeviceEjected, NotificationLevel::RegularNotification, 10, _u8L("Removable device has been safely ejected")} // if we want changeble text (like here name of device), we need to do it as CustomNotification + }; +}; + +}//namespace GUI +}//namespace Slic3r + +#endif //slic3r_GUI_NotificationManager_hpp_ \ No newline at end of file diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 336475d2e0..79fedfa527 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1549,245 +1549,6 @@ void ObjectDataViewModel::DeleteWarningIcon(const wxDataViewItem& item, const bo DeleteWarningIcon(child); } } -/* -} -} -*/ -//----------------------------------------------------------------------------- -// DataViewBitmapText -//----------------------------------------------------------------------------- - -wxIMPLEMENT_DYNAMIC_CLASS(DataViewBitmapText, wxObject) - -IMPLEMENT_VARIANT_OBJECT(DataViewBitmapText) - -// --------------------------------------------------------- -// BitmapTextRenderer -// --------------------------------------------------------- - -#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING -BitmapTextRenderer::BitmapTextRenderer(wxDataViewCellMode mode /*= wxDATAVIEW_CELL_EDITABLE*/, - int align /*= wxDVR_DEFAULT_ALIGNMENT*/): -wxDataViewRenderer(wxT("PrusaDataViewBitmapText"), mode, align) -{ - SetMode(mode); - SetAlignment(align); -} -#endif // ENABLE_NONCUSTOM_DATA_VIEW_RENDERING - -bool BitmapTextRenderer::SetValue(const wxVariant &value) -{ - m_value << value; - return true; -} - -bool BitmapTextRenderer::GetValue(wxVariant& WXUNUSED(value)) const -{ - return false; -} - -#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING && wxUSE_ACCESSIBILITY -wxString BitmapTextRenderer::GetAccessibleDescription() const -{ - return m_value.GetText(); -} -#endif // wxUSE_ACCESSIBILITY && ENABLE_NONCUSTOM_DATA_VIEW_RENDERING - -bool BitmapTextRenderer::Render(wxRect rect, wxDC *dc, int state) -{ - int xoffset = 0; - - const wxBitmap& icon = m_value.GetBitmap(); - if (icon.IsOk()) - { -#ifdef __APPLE__ - wxSize icon_sz = icon.GetScaledSize(); -#else - wxSize icon_sz = icon.GetSize(); -#endif - dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon_sz.y) / 2); - xoffset = icon_sz.x + 4; - } - - RenderText(m_value.GetText(), xoffset, rect, dc, state); - - return true; -} - -wxSize BitmapTextRenderer::GetSize() const -{ - if (!m_value.GetText().empty()) - { - wxSize size = GetTextExtent(m_value.GetText()); - - if (m_value.GetBitmap().IsOk()) - size.x += m_value.GetBitmap().GetWidth() + 4; - return size; - } - return wxSize(80, 20); -} - - -wxWindow* BitmapTextRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) -{ - wxDataViewCtrl* const dv_ctrl = GetOwner()->GetOwner(); - ObjectDataViewModel* const model = dynamic_cast(dv_ctrl->GetModel()); - - if ( !(model->GetItemType(dv_ctrl->GetSelection()) & (itVolume | itObject)) ) - return nullptr; - - DataViewBitmapText data; - data << value; - - m_was_unusable_symbol = false; - - wxPoint position = labelRect.GetPosition(); - if (data.GetBitmap().IsOk()) { - const int bmp_width = data.GetBitmap().GetWidth(); - position.x += bmp_width; - labelRect.SetWidth(labelRect.GetWidth() - bmp_width); - } - - wxTextCtrl* text_editor = new wxTextCtrl(parent, wxID_ANY, data.GetText(), - position, labelRect.GetSize(), wxTE_PROCESS_ENTER); - text_editor->SetInsertionPointEnd(); - text_editor->SelectAll(); - - return text_editor; -} - -bool BitmapTextRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) -{ - wxTextCtrl* text_editor = wxDynamicCast(ctrl, wxTextCtrl); - if (!text_editor || text_editor->GetValue().IsEmpty()) - return false; - - std::string chosen_name = Slic3r::normalize_utf8_nfc(text_editor->GetValue().ToUTF8()); - const char* unusable_symbols = "<>:/\\|?*\""; - for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { - if (chosen_name.find_first_of(unusable_symbols[i]) != std::string::npos) { - m_was_unusable_symbol = true; - return false; - } - } - - // The icon can't be edited so get its old value and reuse it. - wxVariant valueOld; - GetView()->GetModel()->GetValue(valueOld, m_item, colName); - - DataViewBitmapText bmpText; - bmpText << valueOld; - - // But replace the text with the value entered by user. - bmpText.SetText(text_editor->GetValue()); - - value << bmpText; - return true; -} - -// ---------------------------------------------------------------------------- -// BitmapChoiceRenderer -// ---------------------------------------------------------------------------- - -bool BitmapChoiceRenderer::SetValue(const wxVariant& value) -{ - m_value << value; - return true; -} - -bool BitmapChoiceRenderer::GetValue(wxVariant& value) const -{ - value << m_value; - return true; -} - -bool BitmapChoiceRenderer::Render(wxRect rect, wxDC* dc, int state) -{ - int xoffset = 0; - - const wxBitmap& icon = m_value.GetBitmap(); - if (icon.IsOk()) - { - dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon.GetHeight()) / 2); - xoffset = icon.GetWidth() + 4; - - if (rect.height==0) - rect.height= icon.GetHeight(); - } - - RenderText(m_value.GetText(), xoffset, rect, dc, state); - - return true; -} - -wxSize BitmapChoiceRenderer::GetSize() const -{ - wxSize sz = GetTextExtent(m_value.GetText()); - - if (m_value.GetBitmap().IsOk()) - sz.x += m_value.GetBitmap().GetWidth() + 4; - - return sz; -} - - -wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) -{ - wxDataViewCtrl* const dv_ctrl = GetOwner()->GetOwner(); - ObjectDataViewModel* const model = dynamic_cast(dv_ctrl->GetModel()); - - if (!(model->GetItemType(dv_ctrl->GetSelection()) & (itVolume | itLayer | itObject))) - return nullptr; - - std::vector icons = get_extruder_color_icons(); - if (icons.empty()) - return nullptr; - - DataViewBitmapText data; - data << value; - - auto c_editor = new wxBitmapComboBox(parent, wxID_ANY, wxEmptyString, - labelRect.GetTopLeft(), wxSize(labelRect.GetWidth(), -1), - 0, nullptr , wxCB_READONLY); - - int i=0; - for (wxBitmap* bmp : icons) { - if (i==0) { - c_editor->Append(_(L("default")), *bmp); - ++i; - } - - c_editor->Append(wxString::Format("%d", i), *bmp); - ++i; - } - c_editor->SetSelection(atoi(data.GetText().c_str())); - - // to avoid event propagation to other sidebar items - c_editor->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { - evt.StopPropagation(); - // FinishEditing grabs new selection and triggers config update. We better call - // it explicitly, automatic update on KILL_FOCUS didn't work on Linux. - this->FinishEditing(); - }); - - return c_editor; -} - -bool BitmapChoiceRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) -{ - wxBitmapComboBox* c = (wxBitmapComboBox*)ctrl; - int selection = c->GetSelection(); - if (selection < 0) - return false; - - DataViewBitmapText bmpText; - - bmpText.SetText(c->GetString(selection)); - bmpText.SetBitmap(c->GetItemBitmap(selection)); - - value << bmpText; - return true; -} } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index c184842664..12480139d2 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -2,9 +2,10 @@ #define slic3r_GUI_ObjectDataViewModel_hpp_ #include - #include +#include "ExtraRenderers.hpp" + namespace Slic3r { enum class ModelVolumeType : int; @@ -14,143 +15,6 @@ namespace GUI { typedef double coordf_t; typedef std::pair t_layer_height_range; -// ---------------------------------------------------------------------------- -// DataViewBitmapText: helper class used by BitmapTextRenderer -// ---------------------------------------------------------------------------- - -class DataViewBitmapText : public wxObject -{ -public: - DataViewBitmapText( const wxString &text = wxEmptyString, - const wxBitmap& bmp = wxNullBitmap) : - m_text(text), - m_bmp(bmp) - { } - - DataViewBitmapText(const DataViewBitmapText &other) - : wxObject(), - m_text(other.m_text), - m_bmp(other.m_bmp) - { } - - void SetText(const wxString &text) { m_text = text; } - wxString GetText() const { return m_text; } - void SetBitmap(const wxBitmap &bmp) { m_bmp = bmp; } - const wxBitmap &GetBitmap() const { return m_bmp; } - - bool IsSameAs(const DataViewBitmapText& other) const { - return m_text == other.m_text && m_bmp.IsSameAs(other.m_bmp); - } - - bool operator==(const DataViewBitmapText& other) const { - return IsSameAs(other); - } - - bool operator!=(const DataViewBitmapText& other) const { - return !IsSameAs(other); - } - -private: - wxString m_text; - wxBitmap m_bmp; - - wxDECLARE_DYNAMIC_CLASS(DataViewBitmapText); -}; -DECLARE_VARIANT_OBJECT(DataViewBitmapText) - -// ---------------------------------------------------------------------------- -// BitmapTextRenderer -// ---------------------------------------------------------------------------- -#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING -class BitmapTextRenderer : public wxDataViewRenderer -#else -class BitmapTextRenderer : public wxDataViewCustomRenderer -#endif //ENABLE_NONCUSTOM_DATA_VIEW_RENDERING -{ -public: - BitmapTextRenderer(wxWindow* parent, - wxDataViewCellMode mode = -#ifdef __WXOSX__ - wxDATAVIEW_CELL_INERT -#else - wxDATAVIEW_CELL_EDITABLE -#endif - - , int align = wxDVR_DEFAULT_ALIGNMENT -#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING - ); -#else - ) : - wxDataViewCustomRenderer(wxT("DataViewBitmapText"), mode, align), - m_parent(parent) - {} -#endif //ENABLE_NONCUSTOM_DATA_VIEW_RENDERING - - bool SetValue(const wxVariant& value); - bool GetValue(wxVariant& value) const; -#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING && wxUSE_ACCESSIBILITY - virtual wxString GetAccessibleDescription() const override; -#endif // wxUSE_ACCESSIBILITY && ENABLE_NONCUSTOM_DATA_VIEW_RENDERING - - virtual bool Render(wxRect cell, wxDC* dc, int state) override; - virtual wxSize GetSize() const override; - - bool HasEditorCtrl() const override - { -#ifdef __WXOSX__ - return false; -#else - return true; -#endif - } - wxWindow* CreateEditorCtrl(wxWindow* parent, - wxRect labelRect, - const wxVariant& value) override; - bool GetValueFromEditorCtrl(wxWindow* ctrl, - wxVariant& value) override; - bool WasCanceled() const { return m_was_unusable_symbol; } - -private: - DataViewBitmapText m_value; - bool m_was_unusable_symbol{ false }; - wxWindow* m_parent{ nullptr }; -}; - - -// ---------------------------------------------------------------------------- -// BitmapChoiceRenderer -// ---------------------------------------------------------------------------- - -class BitmapChoiceRenderer : public wxDataViewCustomRenderer -{ -public: - BitmapChoiceRenderer(wxDataViewCellMode mode = -#ifdef __WXOSX__ - wxDATAVIEW_CELL_INERT -#else - wxDATAVIEW_CELL_EDITABLE -#endif - , int align = wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL - ) : wxDataViewCustomRenderer(wxT("DataViewBitmapText"), mode, align) {} - - bool SetValue(const wxVariant& value); - bool GetValue(wxVariant& value) const; - - virtual bool Render(wxRect cell, wxDC* dc, int state) override; - virtual wxSize GetSize() const override; - - bool HasEditorCtrl() const override { return true; } - wxWindow* CreateEditorCtrl(wxWindow* parent, - wxRect labelRect, - const wxVariant& value) override; - bool GetValueFromEditorCtrl(wxWindow* ctrl, - wxVariant& value) override; - -private: - DataViewBitmapText m_value; -}; - - // ---------------------------------------------------------------------------- // ObjectDataViewModelNode: a node inside ObjectDataViewModel // ---------------------------------------------------------------------------- diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index bdb005b1e2..4f1e00793b 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -28,6 +28,13 @@ namespace Slic3r { namespace GUI { +// A safe wrapper around glGetString to report a "N/A" string in case glGetString returns nullptr. +inline std::string gl_get_string_safe(GLenum param, const std::string& default_value) +{ + const char* value = (const char*)::glGetString(param); + return std::string((value != nullptr) ? value : default_value); +} + const std::string& OpenGLManager::GLInfo::get_version() const { if (!m_detected) @@ -85,21 +92,10 @@ float OpenGLManager::GLInfo::get_max_anisotropy() const void OpenGLManager::GLInfo::detect() const { - const char* data = (const char*)::glGetString(GL_VERSION); - if (data != nullptr) - m_version = data; - - data = (const char*)::glGetString(GL_SHADING_LANGUAGE_VERSION); - if (data != nullptr) - m_glsl_version = data; - - data = (const char*)::glGetString(GL_VENDOR); - if (data != nullptr) - m_vendor = data; - - data = (const char*)::glGetString(GL_RENDERER); - if (data != nullptr) - m_renderer = data; + m_version = gl_get_string_safe(GL_VERSION, "N/A"); + m_glsl_version = gl_get_string_safe(GL_SHADING_LANGUAGE_VERSION, "N/A"); + m_vendor = gl_get_string_safe(GL_VENDOR, "N/A"); + m_renderer = gl_get_string_safe(GL_RENDERER, "N/A"); glsafe(::glGetIntegerv(GL_MAX_TEXTURE_SIZE, &m_max_tex_size)); @@ -114,13 +110,13 @@ void OpenGLManager::GLInfo::detect() const m_detected = true; } -bool OpenGLManager::GLInfo::is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const +static bool version_greater_or_equal_to(const std::string& version, unsigned int major, unsigned int minor) { - if (!m_detected) - detect(); + if (version == "N/A") + return false; std::vector tokens; - boost::split(tokens, m_version, boost::is_any_of(" "), boost::token_compress_on); + boost::split(tokens, version, boost::is_any_of(" "), boost::token_compress_on); if (tokens.empty()) return false; @@ -145,6 +141,22 @@ bool OpenGLManager::GLInfo::is_version_greater_or_equal_to(unsigned int major, u return gl_minor >= minor; } +bool OpenGLManager::GLInfo::is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const +{ + if (!m_detected) + detect(); + + return version_greater_or_equal_to(m_version, major, minor); +} + +bool OpenGLManager::GLInfo::is_glsl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const +{ + if (!m_detected) + detect(); + + return version_greater_or_equal_to(m_glsl_version, major, minor); +} + std::string OpenGLManager::GLInfo::to_string(bool format_as_html, bool extensions) const { if (!m_detected) @@ -159,15 +171,15 @@ std::string OpenGLManager::GLInfo::to_string(bool format_as_html, bool extension std::string line_end = format_as_html ? "
" : "\n"; out << h2_start << "OpenGL installation" << h2_end << line_end; - out << b_start << "GL version: " << b_end << (m_version.empty() ? "N/A" : m_version) << line_end; - out << b_start << "Vendor: " << b_end << (m_vendor.empty() ? "N/A" : m_vendor) << line_end; - out << b_start << "Renderer: " << b_end << (m_renderer.empty() ? "N/A" : m_renderer) << line_end; - out << b_start << "GLSL version: " << b_end << (m_glsl_version.empty() ? "N/A" : m_glsl_version) << line_end; + out << b_start << "GL version: " << b_end << m_version << line_end; + out << b_start << "Vendor: " << b_end << m_vendor << line_end; + out << b_start << "Renderer: " << b_end << m_renderer << line_end; + out << b_start << "GLSL version: " << b_end << m_glsl_version << line_end; if (extensions) { std::vector extensions_list; - std::string extensions_str = (const char*)::glGetString(GL_EXTENSIONS); + std::string extensions_str = gl_get_string_safe(GL_EXTENSIONS, ""); boost::split(extensions_list, extensions_str, boost::is_any_of(" "), boost::token_compress_off); if (!extensions_list.empty()) @@ -199,6 +211,8 @@ OpenGLManager::OSInfo OpenGLManager::s_os_info; OpenGLManager::~OpenGLManager() { + m_shaders_manager.shutdown(); + #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ // This is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 with newer wxWidgets @@ -220,10 +234,8 @@ OpenGLManager::~OpenGLManager() bool OpenGLManager::init_gl() { - if (!m_gl_initialized) - { - if (glewInit() != GLEW_OK) - { + if (!m_gl_initialized) { + if (glewInit() != GLEW_OK) { BOOST_LOG_TRIVIAL(error) << "Unable to init glew library"; return false; } @@ -240,19 +252,30 @@ bool OpenGLManager::init_gl() else s_framebuffers_type = EFramebufferType::Unknown; - if (! s_gl_info.is_version_greater_or_equal_to(2, 0)) { - // Complain about the OpenGL version. + bool valid_version = s_gl_info.is_version_greater_or_equal_to(2, 0); + if (!valid_version) { + // Complain about the OpenGL version. wxString message = from_u8((boost::format( _utf8(L("PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n" "while OpenGL version %s, render %s, vendor %s was detected."))) % s_gl_info.get_version() % s_gl_info.get_renderer() % s_gl_info.get_vendor()).str()); - message += "\n"; + message += "\n"; message += _L("You may need to update your graphics card driver."); #ifdef _WIN32 - message += "\n"; + message += "\n"; message += _L("As a workaround, you may run PrusaSlicer with a software rendered 3D graphics by running prusa-slicer.exe with the --sw_renderer parameter."); #endif wxMessageBox(message, wxString("PrusaSlicer - ") + _L("Unsupported OpenGL version"), wxOK | wxICON_ERROR); } + + if (valid_version) { + // load shaders + auto [result, error] = m_shaders_manager.init(); + if (!result) { + wxString message = from_u8((boost::format( + _utf8(L("Unable to load the following shaders:\n%s"))) % error).str()); + wxMessageBox(message, wxString("PrusaSlicer - ") + _L("Error loading shaders"), wxOK | wxICON_ERROR); + } + } } return true; @@ -260,8 +283,7 @@ bool OpenGLManager::init_gl() wxGLContext* OpenGLManager::init_glcontext(wxGLCanvas& canvas) { - if (m_context == nullptr) - { + if (m_context == nullptr) { m_context = new wxGLContext(&canvas); #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 diff --git a/src/slic3r/GUI/OpenGLManager.hpp b/src/slic3r/GUI/OpenGLManager.hpp index 9d7ee5babb..c89cdf3a61 100644 --- a/src/slic3r/GUI/OpenGLManager.hpp +++ b/src/slic3r/GUI/OpenGLManager.hpp @@ -1,6 +1,8 @@ #ifndef slic3r_OpenGLManager_hpp_ #define slic3r_OpenGLManager_hpp_ +#include "GLShadersManager.hpp" + class wxWindow; class wxGLCanvas; class wxGLContext; @@ -41,6 +43,7 @@ public: float get_max_anisotropy() const; bool is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const; + bool is_glsl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const; std::string to_string(bool format_as_html, bool extensions) const; @@ -70,6 +73,7 @@ private: bool m_gl_initialized{ false }; wxGLContext* m_context{ nullptr }; + GLShadersManager m_shaders_manager; static GLInfo s_gl_info; #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ @@ -86,9 +90,11 @@ public: ~OpenGLManager(); bool init_gl(); - wxGLContext* init_glcontext(wxGLCanvas& canvas); + GLShaderProgram* get_shader(const std::string& shader_name) { return m_shaders_manager.get_shader(shader_name); } + GLShaderProgram* get_current_shader() { return m_shaders_manager.get_current_shader(); } + static bool are_compressed_textures_supported() { return s_compressed_textures_supported; } static bool can_multisample() { return s_multisample == EMultisampleState::Enabled; } static bool are_framebuffers_supported() { return (s_framebuffers_type != EFramebufferType::Unknown); } diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 819c214a85..f1215474d6 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -7,6 +7,7 @@ #include #include #include +#include "libslic3r/Exception.hpp" #include "libslic3r/Utils.hpp" #include "I18N.hpp" @@ -64,7 +65,7 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co break; case coNone: break; default: - throw /*//!ConfigGUITypeError("")*/std::logic_error("This control doesn't exist till now"); break; + throw Slic3r::LogicError("This control doesn't exist till now"); break; } } // Grab a reference to fields for convenience @@ -109,30 +110,9 @@ OptionsGroup::OptionsGroup( wxWindow* _parent, const wxString& title, m_show_modified_btns(is_tab_opt), staticbox(title!=""), extra_column(extra_clmn) { - if (staticbox) { - stb = new wxStaticBox(_parent, wxID_ANY, _(title)); - if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); - stb->SetFont(wxOSX ? wxGetApp().normal_font() : wxGetApp().bold_font()); - } else - stb = nullptr; - sizer = (staticbox ? new wxStaticBoxSizer(stb, wxVERTICAL) : new wxBoxSizer(wxVERTICAL)); - auto num_columns = 1U; - if (label_width != 0) num_columns++; - if (extra_column != nullptr) num_columns++; - m_grid_sizer = new wxFlexGridSizer(0, num_columns, 1,0); - static_cast(m_grid_sizer)->SetFlexibleDirection(wxBOTH/*wxHORIZONTAL*/); - static_cast(m_grid_sizer)->AddGrowableCol(label_width == 0 ? 0 : !extra_column ? 1 : 2 ); -#if 0//#ifdef __WXGTK__ - m_panel = new wxPanel( _parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - sizer->Fit(m_panel); - sizer->Add(m_panel, 0, wxEXPAND | wxALL, wxOSX||!staticbox ? 0: 5); -#else - sizer->Add(m_grid_sizer, 0, wxEXPAND | wxALL, wxOSX||!staticbox ? 0: 5); -#endif /* __WXGTK__ */ - } -void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& field) +void OptionsGroup::add_undo_buttons_to_sizer(wxSizer* sizer, const t_field& field) { if (!m_show_modified_btns) { field->m_Undo_btn->set_as_hidden(); @@ -146,16 +126,31 @@ void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& fiel sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL); } -void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = nullptr*/) { - if ( line.full_width && ( - line.sizer != nullptr || - line.widget != nullptr || - !line.get_extra_widgets().empty() ) +void OptionsGroup::append_line(const Line& line) +{ + m_lines.emplace_back(line); + + if (line.full_width && ( + line.widget != nullptr || + !line.get_extra_widgets().empty()) + ) + return; + + auto option_set = line.get_options(); + for (auto opt : option_set) + m_options.emplace(opt.opt_id, opt); + + // add mode value for current line to m_options_mode + if (!option_set.empty()) + m_options_mode.push_back(option_set[0].opt.mode); +} + +void OptionsGroup::activate_line(Line& line) +{ + if (line.full_width && ( + line.widget != nullptr || + !line.get_extra_widgets().empty()) ) { - if (line.sizer != nullptr) { - sizer->Add(line.sizer, 0, wxEXPAND | wxALL, wxOSX ? 0 : 15); - return; - } if (line.widget != nullptr) { sizer->Add(line.widget(this->ctrl_parent()), 0, wxEXPAND | wxALL, wxOSX ? 0 : 15); return; @@ -174,23 +169,13 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n } auto option_set = line.get_options(); - for (auto opt : option_set) - m_options.emplace(opt.opt_id, opt); // Set sidetext width for a better alignment of options in line // "m_show_modified_btns==true" means that options groups are in tabs if (option_set.size() > 1 && m_show_modified_btns) { sidetext_width = Field::def_width_thinner(); - /* Temporary commented till UI-review will be completed - if (m_show_modified_btns) // means that options groups are in tabs - sublabel_width = Field::def_width(); - */ } - // add mode value for current line to m_options_mode - if (!option_set.empty()) - m_options_mode.push_back(option_set[0].opt.mode); - // if we have a single option with no label, no sidetext just add it directly to sizer if (option_set.size() == 1 && label_width == 0 && option_set.front().opt.full_width && option_set.front().opt.label.empty() && @@ -209,7 +194,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n const auto& field = build_field(option); auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); - add_undo_buttuns_to_sizer(btn_sizer, field); + add_undo_buttons_to_sizer(btn_sizer, field); tmp_sizer->Add(btn_sizer, 0, wxEXPAND | wxALL, 0); if (is_window_field(field)) tmp_sizer->Add(field->getWindow(), 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); @@ -220,16 +205,16 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n auto grid_sizer = m_grid_sizer; #if 0//#ifdef __WXGTK__ - m_panel->SetSizer(m_grid_sizer); - m_panel->Layout(); + m_panel->SetSizer(m_grid_sizer); + m_panel->Layout(); #endif /* __WXGTK__ */ // if we have an extra column, build it - if (extra_column) - { - m_extra_column_item_ptrs.push_back(extra_column(this->ctrl_parent(), line)); - grid_sizer->Add(m_extra_column_item_ptrs.back(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 3); - } + if (extra_column) + { + m_extra_column_item_ptrs.push_back(extra_column(this->ctrl_parent(), line)); + grid_sizer->Add(m_extra_column_item_ptrs.back(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 3); + } // Build a label if we have it wxStaticText* label=nullptr; @@ -243,8 +228,8 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n // Text is properly aligned only when Ellipsize is checked. label_style |= staticbox ? 0 : wxST_ELLIPSIZE_END; #endif /* __WXGTK__ */ - label = new wxStaticText(this->ctrl_parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ": "), - wxDefaultPosition, wxSize(label_width*wxGetApp().em_unit(), -1), label_style); + label = new wxStaticText(this->ctrl_parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ": "), + wxDefaultPosition, wxSize(label_width * wxGetApp().em_unit(), -1), label_style); label->SetBackgroundStyle(wxBG_STYLE_PAINT); label->SetFont(wxGetApp().normal_font()); label->Wrap(label_width*wxGetApp().em_unit()); // avoid a Linux/GTK bug @@ -269,16 +254,16 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n label->SetToolTip(line.label_tooltip); } - if (full_Label != nullptr) - *full_Label = label; // Initiate the pointer to the control of the full label, if we need this one. - // If there's a widget, build it and add the result to the sizer. + if (line.full_Label != nullptr) + *line.full_Label = label; // Initiate the pointer to the control of the full label, if we need this one. + // If there's a widget, build it and add the result to the sizer. if (line.widget != nullptr) { auto wgt = line.widget(this->ctrl_parent()); // If widget doesn't have label, don't use border grid_sizer->Add(wgt, 0, wxEXPAND | wxBOTTOM | wxTOP, (wxOSX || line.label.IsEmpty()) ? 0 : 5); return; } - + // If we're here, we have more than one option or a single option with sidetext // so we need a horizontal sizer to arrange these things auto sizer = new wxBoxSizer(wxHORIZONTAL); @@ -290,11 +275,11 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n const auto& option = option_set.front(); const auto& field = build_field(option, label); - add_undo_buttuns_to_sizer(sizer, field); - if (is_window_field(field)) - sizer->Add(field->getWindow(), option.opt.full_width ? 1 : 0, //(option.opt.full_width ? wxEXPAND : 0) | - wxBOTTOM | wxTOP | (option.opt.full_width ? wxEXPAND : wxALIGN_CENTER_VERTICAL), (wxOSX || !staticbox) ? 0 : 2); - if (is_sizer_field(field)) + add_undo_buttons_to_sizer(sizer, field); + if (is_window_field(field)) + sizer->Add(field->getWindow(), option.opt.full_width ? 1 : 0, //(option.opt.full_width ? wxEXPAND : 0) | + wxBOTTOM | wxTOP | (option.opt.full_width ? wxEXPAND : wxALIGN_CENTER_VERTICAL), (wxOSX || !staticbox) ? 0 : 2); + if (is_sizer_field(field)) sizer->Add(field->getSizer(), 1, /*(*/option.opt.full_width ? wxEXPAND : /*0) |*/ wxALIGN_CENTER_VERTICAL, 0); return; } @@ -306,8 +291,8 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n if (!option.label.empty()) { //! To correct translation by context have to use wxGETTEXT_IN_CONTEXT macro from wxWidget 3.1.1 wxString str_label = (option.label == L_CONTEXT("Top", "Layers") || option.label == L_CONTEXT("Bottom", "Layers")) ? - _CTX(option.label, "Layers") : - _(option.label); + _CTX(option.label, "Layers") : + _(option.label); label = new wxStaticText(this->ctrl_parent(), wxID_ANY, str_label + ": ", wxDefaultPosition, //wxDefaultSize); wxSize(sublabel_width != -1 ? sublabel_width * wxGetApp().em_unit() : -1, -1), wxALIGN_RIGHT); label->SetBackgroundStyle(wxBG_STYLE_PAINT); @@ -318,7 +303,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n // add field const Option& opt_ref = opt; auto& field = build_field(opt_ref, label); - add_undo_buttuns_to_sizer(sizer_tmp, field); + add_undo_buttons_to_sizer(sizer_tmp, field); if (option_set.size() == 1 && option_set.front().opt.full_width) { const auto v_sizer = new wxBoxSizer(wxVERTICAL); @@ -329,10 +314,10 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n break;//return; } - is_sizer_field(field) ? + is_sizer_field(field) ? sizer_tmp->Add(field->getSizer(), 0, wxALIGN_CENTER_VERTICAL, 0) : sizer_tmp->Add(field->getWindow(), 0, wxALIGN_CENTER_VERTICAL, 0); - + // add sidetext if any if (!option.sidetext.empty() || sidetext_width > 0) { auto sidetext = new wxStaticText( this->ctrl_parent(), wxID_ANY, _(option.sidetext), wxDefaultPosition, @@ -369,6 +354,74 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n } } +// create all controls for the option group from the m_lines +bool OptionsGroup::activate(std::function throw_if_canceled) +{ + if (sizer)//(!sizer->IsEmpty()) + return false; + + try { + if (staticbox) { + stb = new wxStaticBox(m_parent, wxID_ANY, _(title)); + if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); + stb->SetFont(wxOSX ? wxGetApp().normal_font() : wxGetApp().bold_font()); + } + else + stb = nullptr; + sizer = (staticbox ? new wxStaticBoxSizer(stb, wxVERTICAL) : new wxBoxSizer(wxVERTICAL)); + + auto num_columns = 1U; + size_t grow_col = 1; + + if (label_width == 0) + grow_col = 0; + else + num_columns++; + + if (extra_column) { + num_columns++; + grow_col++; + } + + m_grid_sizer = new wxFlexGridSizer(0, num_columns, 1, 0); + static_cast(m_grid_sizer)->SetFlexibleDirection(wxBOTH); + static_cast(m_grid_sizer)->AddGrowableCol(grow_col); + + sizer->Add(m_grid_sizer, 0, wxEXPAND | wxALL, wxOSX || !staticbox ? 0 : 5); + + // activate lines + for (Line& line: m_lines) { + throw_if_canceled(); + activate_line(line); + } + } catch (UIBuildCanceled&) { + auto p = sizer; + this->clear(); + p->Clear(true); + delete p; + throw; + } + + return true; +} +// delete all controls from the option group +void OptionsGroup::clear() +{ + if (!sizer) + return; + + m_grid_sizer = nullptr; + sizer = nullptr; + + for (Line& line : m_lines) + if(line.full_Label) + *line.full_Label = nullptr; + + m_extra_column_item_ptrs.clear(); + m_near_label_widget_ptrs.clear(); + m_fields.clear(); +} + Line OptionsGroup::create_single_option_line(const Option& option) const { // Line retval{ _(option.opt.label), _(option.opt.tooltip) }; wxString tooltip = _(option.opt.tooltip); @@ -413,7 +466,7 @@ Option ConfigOptionsGroup::get_option(const std::string& opt_key, int opt_index m_opt_map.emplace(opt_id, pair); if (m_show_modified_btns) // fill group and category values just fro options from Settings Tab - wxGetApp().sidebar().get_searcher().add_key(opt_id, title, config_category); + wxGetApp().sidebar().get_searcher().add_key(opt_id, title, this->config_category()); return Option(*m_config->def()->get(opt_key), opt_id); } @@ -429,13 +482,11 @@ void ConfigOptionsGroup::on_change_OG(const t_config_option_key& opt_id, const b return; } - auto itOption = it->second; - std::string opt_key = itOption.first; - int opt_index = itOption.second; + auto itOption = it->second; + const std::string &opt_key = itOption.first; + int opt_index = itOption.second; - auto option = m_options.at(opt_id).opt; - - change_opt_value(*m_config, opt_key, value, opt_index == -1 ? 0 : opt_index); + this->change_opt_value(opt_key, value, opt_index == -1 ? 0 : opt_index); } OptionsGroup::on_change_OG(opt_id, value); @@ -466,9 +517,10 @@ void ConfigOptionsGroup::back_to_config_value(const DynamicPrintConfig& config, } else if (m_opt_map.find(opt_key) == m_opt_map.end() || // This option don't have corresponded field - opt_key == "bed_shape" || opt_key == "compatible_printers" || opt_key == "compatible_prints" ) { + opt_key == "bed_shape" || opt_key == "filament_ramming_parameters" || + opt_key == "compatible_printers" || opt_key == "compatible_prints" ) { value = get_config_value(config, opt_key); - change_opt_value(*m_config, opt_key, value); + this->change_opt_value(opt_key, value); return; } else @@ -519,15 +571,31 @@ void ConfigOptionsGroup::Show(const bool show) #endif /* __WXGTK__ */ } -bool ConfigOptionsGroup::update_visibility(ConfigOptionMode mode) { +bool ConfigOptionsGroup::is_visible(ConfigOptionMode mode) +{ if (m_options_mode.empty()) return true; - int opt_mode_size = m_options_mode.size(); - if (m_grid_sizer->GetEffectiveRowsCount() != opt_mode_size && - opt_mode_size == 1) + if (m_options_mode.size() == 1) return m_options_mode[0] <= mode; - Show(true); + size_t hidden_row_cnt = 0; + for (auto opt_mode : m_options_mode) + if (opt_mode > mode) + hidden_row_cnt++; + + return hidden_row_cnt != m_options_mode.size(); +} + +bool ConfigOptionsGroup::update_visibility(ConfigOptionMode mode) +{ + if (m_options_mode.empty() || !m_grid_sizer) + return true; + int opt_mode_size = m_options_mode.size(); + if (m_grid_sizer->GetEffectiveRowsCount() != opt_mode_size && + opt_mode_size == 1) + return m_options_mode[0] <= mode; + + Show(true); int coef = 0; int hidden_row_cnt = 0; @@ -568,7 +636,7 @@ void ConfigOptionsGroup::msw_rescale() const int em = em_unit(parent()); // rescale width of label column - if (!m_options_mode.empty() && label_width > 1) + if (m_grid_sizer && !m_options_mode.empty() && label_width > 1) { const int cols = m_grid_sizer->GetCols(); const int rows = m_grid_sizer->GetEffectiveRowsCount(); @@ -619,7 +687,7 @@ boost::any ConfigOptionsGroup::config_value(const std::string& opt_key, int opt_ // Aggregate the strings the old way. // Currently used for the post_process config value only. if (opt_index != -1) - throw std::out_of_range("Can't deserialize option indexed value"); + throw Slic3r::OutOfRange("Can't deserialize option indexed value"); // return join(';', m_config->get(opt_key)}); return get_config_value(*m_config, opt_key); } @@ -699,6 +767,10 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config ret = config.option(opt_key)->values; break; } + if (opt_key == "filament_ramming_parameters") { + ret = config.opt_string(opt_key, static_cast(idx)); + break; + } if (config.option(opt_key)->values.empty()) ret = text_value; else if (opt->gui_flags.compare("serialized") == 0) { @@ -729,31 +801,37 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config opt_key == "fill_pattern" ) { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("ironing_type") == 0 ) { + else if (opt_key == "ironing_type") { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("gcode_flavor") == 0 ) { + else if (opt_key == "gcode_flavor") { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("support_material_pattern") == 0) { + else if (opt_key == "machine_limits_usage") { + ret = static_cast(config.option>(opt_key)->value); + } + else if (opt_key == "support_material_pattern") { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("seam_position") == 0) { + else if (opt_key == "seam_position") { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("host_type") == 0) { + else if (opt_key == "host_type") { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("display_orientation") == 0) { + else if (opt_key == "display_orientation") { ret = static_cast(config.option>(opt_key)->value); } - else if (opt_key.compare("support_pillar_connection_mode") == 0) { + else if (opt_key == "support_pillar_connection_mode") { ret = static_cast(config.option>(opt_key)->value); } + else if (opt_key == "printhost_authorization_type") { + ret = static_cast(config.option>(opt_key)->value); + } } break; case coPoints: - if (opt_key.compare("bed_shape") == 0) + if (opt_key == "bed_shape") ret = config.option(opt_key)->values; else ret = config.option(opt_key)->get_at(idx); @@ -780,6 +858,25 @@ Field* ConfigOptionsGroup::get_fieldc(const t_config_option_key& opt_key, int op return opt_id.empty() ? nullptr : get_field(opt_id); } +// Change an option on m_config, possibly call ModelConfig::touch(). +void ConfigOptionsGroup::change_opt_value(const t_config_option_key& opt_key, const boost::any& value, int opt_index /*= 0*/) + +{ + Slic3r::GUI::change_opt_value(const_cast(*m_config), opt_key, value, opt_index); + if (m_modelconfig) + m_modelconfig->touch(); +} + +ogStaticText::ogStaticText(wxWindow* parent, const wxString& text) : + wxStaticText(parent, wxID_ANY, text, wxDefaultPosition, wxDefaultSize) +{ + if (!text.IsEmpty()) { + Wrap(60 * wxGetApp().em_unit()); + GetParent()->Layout(); + } +} + + void ogStaticText::SetText(const wxString& value, bool wrap/* = true*/) { SetLabel(value); diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp index 2e6f9aa0f4..3ea94fa362 100644 --- a/src/slic3r/GUI/OptionsGroup.hpp +++ b/src/slic3r/GUI/OptionsGroup.hpp @@ -24,6 +24,9 @@ namespace Slic3r { namespace GUI { +// Thrown if the building of a parameter page is canceled. +class UIBuildCanceled : public std::exception {}; + /// Widget type describes a function object that returns a wxWindow (our widget) and accepts a wxWidget (parent window). using widget_t = std::function;//!std::function; @@ -48,7 +51,7 @@ public: wxString label {wxString("")}; wxString label_tooltip {wxString("")}; size_t full_width {0}; - wxSizer* sizer {nullptr}; + wxStaticText** full_Label {nullptr}; widget_t widget {nullptr}; std::function near_label_widget{ nullptr }; @@ -119,7 +122,15 @@ public: return this->stb ? (wxWindow*)this->stb : this->parent(); } - void append_line(const Line& line, wxStaticText** full_Label = nullptr); + void append_line(const Line& line); + // create controls for the option group + void activate_line(Line& line); + + // create all controls for the option group from the m_lines + bool activate(std::function throw_if_canceled = [](){}); + // delete all controls from the option group + void clear(); + Line create_single_option_line(const Option& option) const; void append_single_option_line(const Option& option) { append_line(create_single_option_line(option)); } @@ -149,6 +160,13 @@ public: return true; } + void show_field(const t_config_option_key& opt_key, bool show = true) { + Field* field = get_field(opt_key); + field->getWindow()->Show(show); + field->getLabel()->Show(show); + } + void hide_field(const t_config_option_key& opt_key) { show_field(opt_key, false); } + void set_name(const wxString& new_name) { stb->SetLabel(new_name); } @@ -163,11 +181,7 @@ public: void clear_fields_except_of(const std::vector left_fields); - void hide_labels() { - label_width = 0; - m_grid_sizer->SetCols(m_grid_sizer->GetEffectiveColsCount()-1); - static_cast(m_grid_sizer)->AddGrowableCol(!extra_column ? 0 : 1); - } + void hide_labels() { label_width = 0; } OptionsGroup( wxWindow* _parent, const wxString& title, bool is_tab_opt = false, column_t extra_clmn = nullptr); @@ -181,6 +195,8 @@ protected: std::vector m_extra_column_item_ptrs; std::vector m_near_label_widget_ptrs; + std::vector m_lines; + /// Field list, contains unique_ptrs of the derived type. /// using types that need to know what it is beyond the public interface /// need to cast based on the related ConfigOptionDef. @@ -203,7 +219,7 @@ protected: const t_field& build_field(const t_config_option_key& id, const ConfigOptionDef& opt, wxStaticText* label = nullptr); const t_field& build_field(const t_config_option_key& id, wxStaticText* label = nullptr); const t_field& build_field(const Option& opt, wxStaticText* label = nullptr); - void add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& field); + void add_undo_buttons_to_sizer(wxSizer* sizer, const t_field& field); virtual void on_kill_focus(const std::string& opt_key) {}; virtual void on_set_focus(const std::string& opt_key); @@ -214,18 +230,18 @@ protected: class ConfigOptionsGroup: public OptionsGroup { public: - ConfigOptionsGroup( wxWindow* parent, const wxString& title, DynamicPrintConfig* _config = nullptr, + ConfigOptionsGroup( wxWindow* parent, const wxString& title, DynamicPrintConfig* config = nullptr, bool is_tab_opt = false, column_t extra_clmn = nullptr) : - OptionsGroup(parent, title, is_tab_opt, extra_clmn), m_config(_config) {} + OptionsGroup(parent, title, is_tab_opt, extra_clmn), m_config(config) {} + ConfigOptionsGroup( wxWindow* parent, const wxString& title, ModelConfig* config, + bool is_tab_opt = false, column_t extra_clmn = nullptr) : + OptionsGroup(parent, title, is_tab_opt, extra_clmn), m_config(&config->get()), m_modelconfig(config) {} - /// reference to libslic3r config, non-owning pointer (?). - DynamicPrintConfig* m_config {nullptr}; - bool m_full_labels {0}; - t_opt_map m_opt_map; + const std::string& config_category() const throw() { return m_config_category; } + const t_opt_map& opt_map() const throw() { return m_opt_map; } - std::string config_category; - - void set_config(DynamicPrintConfig* config) { m_config = config; } + void set_config_category(const std::string &category) { this->m_config_category = category; } + void set_config(DynamicPrintConfig* config) { m_config = config; m_modelconfig = nullptr; } Option get_option(const std::string& opt_key, int opt_index = -1); Line create_single_option_line(const std::string& title, int idx = -1) /*const*/{ Option option = get_option(title, idx); @@ -252,6 +268,7 @@ public: // return value shows visibility : false => all options are hidden void Hide(); void Show(const bool show); + bool is_visible(ConfigOptionMode mode); bool update_visibility(ConfigOptionMode mode); void msw_rescale(); void sys_color_changed(); @@ -259,13 +276,28 @@ public: // return option value from config boost::any get_config_value(const DynamicPrintConfig& config, const std::string& opt_key, int opt_index = -1); Field* get_fieldc(const t_config_option_key& opt_key, int opt_index); + +private: + // Reference to libslic3r config or ModelConfig::get(), non-owning pointer. + // The reference is const, so that the spots which modify m_config are clearly + // demarcated by const_cast and m_config_changed_callback is called afterwards. + const DynamicPrintConfig* m_config {nullptr}; + // If the config is modelconfig, then ModelConfig::touch() has to be called after value change. + ModelConfig* m_modelconfig { nullptr }; + bool m_full_labels{ 0 }; + t_opt_map m_opt_map; + std::string m_config_category; + + // Change an option on m_config, possibly call ModelConfig::touch(). + void change_opt_value(const t_config_option_key& opt_key, const boost::any& value, int opt_index = 0); }; // Static text shown among the options. class ogStaticText :public wxStaticText{ public: ogStaticText() {} - ogStaticText(wxWindow* parent, const char *text) : wxStaticText(parent, wxID_ANY, text, wxDefaultPosition, wxDefaultSize) {} +// ogStaticText(wxWindow* parent, const char *text) : wxStaticText(parent, wxID_ANY, text, wxDefaultPosition, wxDefaultSize) {} + ogStaticText(wxWindow* parent, const wxString& text); ~ogStaticText() {} void SetText(const wxString& value, bool wrap = true); diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp new file mode 100644 index 0000000000..7456ee8001 --- /dev/null +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -0,0 +1,570 @@ +#include "PhysicalPrinterDialog.hpp" +#include "PresetComboBoxes.hpp" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "libslic3r/libslic3r.h" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/PresetBundle.hpp" + +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "format.hpp" +#include "Tab.hpp" +#include "wxExtensions.hpp" +#include "PrintHostDialogs.hpp" +#include "../Utils/ASCIIFolding.hpp" +#include "../Utils/PrintHost.hpp" +#include "../Utils/FixModelByWin10.hpp" +#include "../Utils/UndoRedo.hpp" +#include "RemovableDriveManager.hpp" +#include "BitmapCache.hpp" +#include "BonjourDialog.hpp" + +using Slic3r::GUI::format_wxstr; + +//static const std::pair THUMBNAIL_SIZE_3MF = { 256, 256 }; + +namespace Slic3r { +namespace GUI { + +#define BORDER_W 10 + +//------------------------------------------ +// PresetForPrinter +//------------------------------------------ + +PresetForPrinter::PresetForPrinter(PhysicalPrinterDialog* parent, const std::string& preset_name) : + m_parent(parent) +{ + m_sizer = new wxBoxSizer(wxVERTICAL); + + m_delete_preset_btn = new ScalableButton(parent, wxID_ANY, "cross", "", wxDefaultSize, wxDefaultPosition, /*wxBU_LEFT | */wxBU_EXACTFIT); + m_delete_preset_btn->SetFont(wxGetApp().normal_font()); + m_delete_preset_btn->SetToolTip(_L("Delete this preset from this printer device")); + m_delete_preset_btn->Bind(wxEVT_BUTTON, &PresetForPrinter::DeletePreset, this); + + m_presets_list = new PresetComboBox(parent, Preset::TYPE_PRINTER); + m_presets_list->set_printer_technology(parent->get_printer_technology()); + + m_presets_list->set_selection_changed_function([this](int selection) { + std::string selected_string = Preset::remove_suffix_modified(m_presets_list->GetString(selection).ToUTF8().data()); + Preset* preset = wxGetApp().preset_bundle->printers.find_preset(selected_string); + assert(preset); + Preset& edited_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); + if (preset->name == edited_preset.name) + preset = &edited_preset; + + // if created physical printer doesn't have any settings, use the settings from the selected preset + if (m_parent->get_printer()->has_empty_config()) { + // update Print Host upload from the selected preset + m_parent->get_printer()->update_from_preset(*preset); + // update values in parent (PhysicalPrinterDialog) + m_parent->update(); + } + + // update PrinterTechnology if it was changed + if (m_presets_list->set_printer_technology(preset->printer_technology())) + m_parent->set_printer_technology(preset->printer_technology()); + + update_full_printer_name(); + }); + m_presets_list->update(preset_name); + + m_info_line = new wxStaticText(parent, wxID_ANY, _L("This printer will be shown in the presets list as") + ":"); + + m_full_printer_name = new wxStaticText(parent, wxID_ANY, ""); + m_full_printer_name->SetFont(wxGetApp().bold_font()); + + wxBoxSizer* preset_sizer = new wxBoxSizer(wxHORIZONTAL); + preset_sizer->Add(m_presets_list , 1, wxEXPAND); + preset_sizer->Add(m_delete_preset_btn , 0, wxEXPAND | wxLEFT, BORDER_W); + + wxBoxSizer* name_sizer = new wxBoxSizer(wxHORIZONTAL); + name_sizer->Add(m_info_line, 0, wxEXPAND); + name_sizer->Add(m_full_printer_name, 0, wxEXPAND | wxLEFT, BORDER_W); + + m_sizer->Add(preset_sizer , 0, wxEXPAND); + m_sizer->Add(name_sizer, 0, wxEXPAND); +} + +PresetForPrinter::~PresetForPrinter() +{ + m_presets_list->Destroy(); + m_delete_preset_btn->Destroy(); + m_info_line->Destroy(); + m_full_printer_name->Destroy(); +} + +void PresetForPrinter::DeletePreset(wxEvent& event) +{ + m_parent->DeletePreset(this); +} + +void PresetForPrinter::update_full_printer_name() +{ + wxString printer_name = m_parent->get_printer_name(); + wxString preset_name = m_presets_list->GetString(m_presets_list->GetSelection()); + + m_full_printer_name->SetLabelText(printer_name + " * " + preset_name); +} + +std::string PresetForPrinter::get_preset_name() +{ + return into_u8(m_presets_list->GetString(m_presets_list->GetSelection())); +} + +void PresetForPrinter::SuppressDelete() +{ + m_delete_preset_btn->Enable(false); + + // this case means that now we have only one related preset for the printer + // So, allow any selection + m_presets_list->set_printer_technology(ptAny); + m_presets_list->update(); +} + +void PresetForPrinter::AllowDelete() +{ + if (!m_delete_preset_btn->IsEnabled()) + m_delete_preset_btn->Enable(); + + m_presets_list->set_printer_technology(m_parent->get_printer_technology()); + m_presets_list->update(); +} + +void PresetForPrinter::msw_rescale() +{ + m_presets_list->msw_rescale(); + m_delete_preset_btn->msw_rescale(); +} + + +//------------------------------------------ +// PhysicalPrinterDialog +//------------------------------------------ + +PhysicalPrinterDialog::PhysicalPrinterDialog(wxString printer_name) : + DPIDialog(NULL, wxID_ANY, _L("Physical Printer"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), -1), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), + m_printer("", wxGetApp().preset_bundle->physical_printers.default_config()) +{ + SetFont(wxGetApp().normal_font()); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + + m_default_name = _L("Type here the name of your printer device"); + bool new_printer = true; + + if (printer_name.IsEmpty()) + printer_name = m_default_name; + else { + std::string full_name = into_u8(printer_name); + printer_name = from_u8(PhysicalPrinter::get_short_name(full_name)); + new_printer = false; + } + + wxStaticText* label_top = new wxStaticText(this, wxID_ANY, _L("Descriptive name for the printer device") + ":"); + + m_add_preset_btn = new ScalableButton(this, wxID_ANY, "add_copies", "", wxDefaultSize, wxDefaultPosition, /*wxBU_LEFT | */wxBU_EXACTFIT); + m_add_preset_btn->SetFont(wxGetApp().normal_font()); + m_add_preset_btn->SetToolTip(_L("Add preset for this printer device")); + m_add_preset_btn->Bind(wxEVT_BUTTON, &PhysicalPrinterDialog::AddPreset, this); + + m_printer_name = new wxTextCtrl(this, wxID_ANY, printer_name, wxDefaultPosition, wxDefaultSize); + m_printer_name->Bind(wxEVT_TEXT, [this](wxEvent&) { this->update_full_printer_names(); }); + + PhysicalPrinterCollection& printers = wxGetApp().preset_bundle->physical_printers; + PhysicalPrinter* printer = printers.find_printer(into_u8(printer_name)); + if (!printer) { + const Preset& preset = wxGetApp().preset_bundle->printers.get_edited_preset(); + m_printer = PhysicalPrinter(into_u8(printer_name), m_printer.config, preset); + // if printer_name is empty it means that new printer is created, so enable all items in the preset list + m_presets.emplace_back(new PresetForPrinter(this, preset.name)); + } + else + { + const std::set& preset_names = printer->get_preset_names(); + for (const std::string& preset_name : preset_names) + m_presets.emplace_back(new PresetForPrinter(this, preset_name)); + m_printer = *printer; + } + + if (m_presets.size() == 1) + m_presets.front()->SuppressDelete(); + + update_full_printer_names(); + + m_config = &m_printer.config; + + m_optgroup = new ConfigOptionsGroup(this, _L("Print Host upload"), m_config); + build_printhost_settings(m_optgroup); + + wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); + wxButton* btnOK = static_cast(this->FindWindowById(wxID_OK, this)); + btnOK->Bind(wxEVT_BUTTON, &PhysicalPrinterDialog::OnOK, this); + + wxBoxSizer* nameSizer = new wxBoxSizer(wxHORIZONTAL); + nameSizer->Add(m_printer_name, 1, wxEXPAND); + nameSizer->Add(m_add_preset_btn, 0, wxEXPAND | wxLEFT, BORDER_W); + + m_presets_sizer = new wxBoxSizer(wxVERTICAL); + for (PresetForPrinter* preset : m_presets) + m_presets_sizer->Add(preset->sizer(), 1, wxEXPAND | wxTOP, BORDER_W); + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + topSizer->Add(label_top , 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, BORDER_W); + topSizer->Add(nameSizer , 0, wxEXPAND | wxLEFT | wxRIGHT, BORDER_W); + topSizer->Add(m_presets_sizer , 0, wxEXPAND | wxLEFT | wxRIGHT, BORDER_W); + topSizer->Add(m_optgroup->sizer , 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, BORDER_W); + topSizer->Add(btns , 0, wxEXPAND | wxALL, BORDER_W); + + SetSizer(topSizer); + topSizer->SetSizeHints(this); + + if (new_printer) { + m_printer_name->SetFocus(); + m_printer_name->SelectAll(); + } + + this->CenterOnScreen(); +} + +PhysicalPrinterDialog::~PhysicalPrinterDialog() +{ + for (PresetForPrinter* preset : m_presets) { + delete preset; + preset = nullptr; + } +} + +void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgroup) +{ + m_optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) { + if (opt_key == "printhost_authorization_type") + this->update(); + }; + + m_optgroup->append_single_option_line("host_type"); + + auto create_sizer_with_btn = [this](wxWindow* parent, ScalableButton** btn, const std::string& icon_name, const wxString& label) { + *btn = new ScalableButton(parent, wxID_ANY, icon_name, label, wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT); + (*btn)->SetFont(wxGetApp().normal_font()); + + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(*btn); + return sizer; + }; + + auto printhost_browse = [=](wxWindow* parent) + { + auto sizer = create_sizer_with_btn(parent, &m_printhost_browse_btn, "browse", _L("Browse") + " " + dots); + m_printhost_browse_btn->Bind(wxEVT_BUTTON, [=](wxCommandEvent& e) { + BonjourDialog dialog(this, Preset::printer_technology(m_printer.config)); + if (dialog.show_and_lookup()) { + m_optgroup->set_value("print_host", std::move(dialog.get_selected()), true); + m_optgroup->get_field("print_host")->field_changed(); + } + }); + + return sizer; + }; + + auto print_host_test = [=](wxWindow* parent) { + auto sizer = create_sizer_with_btn(parent, &m_printhost_test_btn, "test", _L("Test")); + + m_printhost_test_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { + std::unique_ptr host(PrintHost::get_print_host(m_config)); + if (!host) { + const wxString text = _L("Could not get a valid Printer Host reference"); + show_error(this, text); + return; + } + wxString msg; + if (host->test(msg)) { + show_info(this, host->get_test_ok_msg(), _L("Success!")); + } + else { + show_error(this, host->get_test_failed_msg(msg)); + } + }); + + return sizer; + }; + + // Set a wider width for a better alignment + Option option = m_optgroup->get_option("print_host"); + option.opt.width = Field::def_width_wider(); + Line host_line = m_optgroup->create_single_option_line(option); + host_line.append_widget(printhost_browse); + host_line.append_widget(print_host_test); + m_optgroup->append_line(host_line); + + m_optgroup->append_single_option_line("printhost_authorization_type"); + + option = m_optgroup->get_option("printhost_apikey"); + option.opt.width = Field::def_width_wider(); + m_optgroup->append_single_option_line(option); + + const auto ca_file_hint = _u8L("HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."); + + if (Http::ca_file_supported()) { + option = m_optgroup->get_option("printhost_cafile"); + option.opt.width = Field::def_width_wider(); + Line cafile_line = m_optgroup->create_single_option_line(option); + + auto printhost_cafile_browse = [=](wxWindow* parent) { + auto sizer = create_sizer_with_btn(parent, &m_printhost_cafile_browse_btn, "browse", _L("Browse") + " " + dots); + m_printhost_cafile_browse_btn->Bind(wxEVT_BUTTON, [this, m_optgroup](wxCommandEvent e) { + static const auto filemasks = _L("Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"); + wxFileDialog openFileDialog(this, _L("Open CA certificate file"), "", "", filemasks, wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (openFileDialog.ShowModal() != wxID_CANCEL) { + m_optgroup->set_value("printhost_cafile", std::move(openFileDialog.GetPath()), true); + m_optgroup->get_field("printhost_cafile")->field_changed(); + } + }); + + return sizer; + }; + + cafile_line.append_widget(printhost_cafile_browse); + m_optgroup->append_line(cafile_line); + + Line cafile_hint{ "", "" }; + cafile_hint.full_width = 1; + cafile_hint.widget = [this, ca_file_hint](wxWindow* parent) { + auto txt = new wxStaticText(parent, wxID_ANY, ca_file_hint); + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(txt); + return sizer; + }; + m_optgroup->append_line(cafile_hint); + } + else { + Line line{ "", "" }; + line.full_width = 1; + + line.widget = [ca_file_hint](wxWindow* parent) { + std::string info = _u8L("HTTPS CA File") + ":\n\t" + + (boost::format(_u8L("On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.")) % SLIC3R_APP_NAME).str() + + "\n\t" + _u8L("To use a custom CA file, please import your CA file into Certificate Store / Keychain."); + + //auto txt = new wxStaticText(parent, wxID_ANY, from_u8((boost::format("%1%\n\n\t%2%") % info % ca_file_hint).str())); + auto txt = new wxStaticText(parent, wxID_ANY, from_u8((boost::format("%1%\n\t%2%") % info % ca_file_hint).str())); + txt->SetFont(wxGetApp().normal_font()); + auto sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(txt, 1, wxEXPAND); + return sizer; + }; + + m_optgroup->append_line(line); + } + + for (const std::string& opt_key : std::vector{ "printhost_user", "printhost_password" }) { + option = m_optgroup->get_option(opt_key); + option.opt.width = Field::def_width_wider(); + m_optgroup->append_single_option_line(option); + } + + m_optgroup->activate(); + update(); +} + +void PhysicalPrinterDialog::update() +{ + m_optgroup->reload_config(); + + const PrinterTechnology tech = Preset::printer_technology(*m_config); + // Only offer the host type selection for FFF, for SLA it's always the SL1 printer (at the moment) + if (tech == ptFFF) { + m_optgroup->show_field("host_type"); + m_optgroup->hide_field("printhost_authorization_type"); + for (const std::string& opt_key : std::vector{ "printhost_user", "printhost_password" }) + m_optgroup->hide_field(opt_key); + } + else { + m_optgroup->set_value("host_type", int(PrintHostType::htOctoPrint), false); + m_optgroup->hide_field("host_type"); + + m_optgroup->show_field("printhost_authorization_type"); + + AuthorizationType auth_type = m_config->option>("printhost_authorization_type")->value; + m_optgroup->show_field("printhost_apikey", auth_type == AuthorizationType::atKeyPassword); + + for (const std::string& opt_key : std::vector{ "printhost_user", "printhost_password" }) + m_optgroup->show_field(opt_key, auth_type == AuthorizationType::atUserPassword); + } + + this->Layout(); +} + + +wxString PhysicalPrinterDialog::get_printer_name() +{ + return m_printer_name->GetValue(); +} + +void PhysicalPrinterDialog::update_full_printer_names() +{ + for (PresetForPrinter* preset : m_presets) + preset->update_full_printer_name(); + + this->Layout(); +} + +void PhysicalPrinterDialog::set_printer_technology(PrinterTechnology pt) +{ + m_config->set_key_value("printer_technology", new ConfigOptionEnum(pt)); + update(); +} + +PrinterTechnology PhysicalPrinterDialog::get_printer_technology() +{ + return m_printer.printer_technology(); +} + +void PhysicalPrinterDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + const int& em = em_unit(); + + m_add_preset_btn->msw_rescale(); + m_printhost_browse_btn->msw_rescale(); + m_printhost_test_btn->msw_rescale(); + if (m_printhost_cafile_browse_btn) + m_printhost_cafile_browse_btn->msw_rescale(); + + m_optgroup->msw_rescale(); + + msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL }); + + for (PresetForPrinter* preset : m_presets) + preset->msw_rescale(); + + const wxSize& size = wxSize(45 * em, 35 * em); + SetMinSize(size); + + Fit(); + Refresh(); +} + +void PhysicalPrinterDialog::OnOK(wxEvent& event) +{ + wxString printer_name = m_printer_name->GetValue(); + if (printer_name.IsEmpty()) { + warning_catcher(this, _L("The supplied name is empty. It can't be saved.")); + return; + } + if (printer_name == m_default_name) { + warning_catcher(this, _L("You should to change a name of your printer device. It can't be saved.")); + return; + } + + PhysicalPrinterCollection& printers = wxGetApp().preset_bundle->physical_printers; + const PhysicalPrinter* existing = printers.find_printer(into_u8(printer_name), false); + if (existing && into_u8(printer_name) != printers.get_selected_printer_name()) + { + wxString msg_text = from_u8((boost::format(_u8L("Printer with name \"%1%\" already exists.")) % existing->name/*printer_name*/).str()); + msg_text += "\n" + _L("Replace?"); + wxMessageDialog dialog(nullptr, msg_text, _L("Warning"), wxICON_WARNING | wxYES | wxNO); + + if (dialog.ShowModal() == wxID_NO) + return; + + m_printer.name = existing->name; + } + + std::set repeat_presets; + m_printer.reset_presets(); + for (PresetForPrinter* preset : m_presets) { + if (!m_printer.add_preset(preset->get_preset_name())) + repeat_presets.emplace(preset->get_preset_name()); + } + + if (!repeat_presets.empty()) + { + wxString repeatable_presets = "\n"; + for (const std::string& preset_name : repeat_presets) + repeatable_presets += " " + from_u8(preset_name) + "\n"; + repeatable_presets += "\n"; + + wxString msg_text = from_u8((boost::format(_u8L("Next printer preset(s) is(are) duplicated:%1%" + "Should I add it(they) just once for the printer \"%2%\" and close the Editing Dialog?")) % repeatable_presets % printer_name).str()); + wxMessageDialog dialog(nullptr, msg_text, _L("Warning"), wxICON_WARNING | wxYES | wxNO); + if (dialog.ShowModal() == wxID_NO) + return; + } + + std::string renamed_from; + // temporary save previous printer name if it was edited + if (m_printer.name != into_u8(m_default_name) && + m_printer.name != into_u8(printer_name)) + renamed_from = m_printer.name; + + //update printer name, if it was changed + m_printer.set_name(into_u8(printer_name)); + + // save new physical printer + printers.save_printer(m_printer, renamed_from); + + if (m_printer.preset_names.find(printers.get_selected_printer_preset_name()) == m_printer.preset_names.end()) { + // select first preset for this printer + printers.select_printer(m_printer); + // refresh preset list on Printer Settings Tab + wxGetApp().get_tab(Preset::TYPE_PRINTER)->select_preset(printers.get_selected_printer_preset_name()); + } + else + wxGetApp().get_tab(Preset::TYPE_PRINTER)->update_preset_choice(); + + event.Skip(); +} + +void PhysicalPrinterDialog::AddPreset(wxEvent& event) +{ + m_presets.emplace_back(new PresetForPrinter(this)); + // enable DELETE button for the first preset, if was disabled + m_presets.front()->AllowDelete(); + + m_presets_sizer->Add(m_presets.back()->sizer(), 1, wxEXPAND | wxTOP, BORDER_W); + update_full_printer_names(); + + this->Fit(); +} + +void PhysicalPrinterDialog::DeletePreset(PresetForPrinter* preset_for_printer) +{ + if (m_presets.size() == 1) { + wxString msg_text = _L("It's not possible to delete last related preset for the printer."); + wxMessageDialog dialog(nullptr, msg_text, _L("Infornation"), wxICON_INFORMATION | wxOK); + dialog.ShowModal(); + return; + } + + assert(preset_for_printer); + auto it = std::find(m_presets.begin(), m_presets.end(), preset_for_printer); + if (it == m_presets.end()) + return; + + const int remove_id = it - m_presets.begin(); + m_presets_sizer->Remove(remove_id); + delete preset_for_printer; + m_presets.erase(it); + + if (m_presets.size() == 1) + m_presets.front()->SuppressDelete(); + + this->Layout(); + this->Fit(); +} + + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp new file mode 100644 index 0000000000..3d0cf2d9f2 --- /dev/null +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -0,0 +1,105 @@ +#ifndef slic3r_PhysicalPrinterDialog_hpp_ +#define slic3r_PhysicalPrinterDialog_hpp_ + +#include + +#include + +#include "libslic3r/Preset.hpp" +#include "GUI_Utils.hpp" + +class wxString; +class wxTextCtrl; +class wxStaticText; +class ScalableButton; +class wxBoxSizer; + +namespace Slic3r { + +namespace GUI { + +class PresetComboBox; + +//------------------------------------------ +// PresetForPrinter +//------------------------------------------ +//static std::string g_info_string = " (modified)"; +class PhysicalPrinterDialog; +class PresetForPrinter +{ + PhysicalPrinterDialog* m_parent { nullptr }; + + PresetComboBox* m_presets_list { nullptr }; + ScalableButton* m_delete_preset_btn { nullptr }; + wxStaticText* m_info_line { nullptr }; + wxStaticText* m_full_printer_name { nullptr }; + + wxBoxSizer* m_sizer { nullptr }; + + void DeletePreset(wxEvent& event); + +public: + PresetForPrinter(PhysicalPrinterDialog* parent, const std::string& preset_name = ""); + ~PresetForPrinter(); + + wxBoxSizer* sizer() { return m_sizer; } + void update_full_printer_name(); + std::string get_preset_name(); + void SuppressDelete(); + void AllowDelete(); + + void msw_rescale(); + void on_sys_color_changed() {}; +}; + + +//------------------------------------------ +// PhysicalPrinterDialog +//------------------------------------------ + +class ConfigOptionsGroup; +class PhysicalPrinterDialog : public DPIDialog +{ + PhysicalPrinter m_printer; + wxString m_default_name; + DynamicPrintConfig* m_config { nullptr }; + + wxTextCtrl* m_printer_name { nullptr }; + std::vector m_presets; + + ConfigOptionsGroup* m_optgroup { nullptr }; + + ScalableButton* m_add_preset_btn {nullptr}; + ScalableButton* m_printhost_browse_btn {nullptr}; + ScalableButton* m_printhost_test_btn {nullptr}; + ScalableButton* m_printhost_cafile_browse_btn {nullptr}; + + wxBoxSizer* m_presets_sizer {nullptr}; + + void build_printhost_settings(ConfigOptionsGroup* optgroup); + void OnOK(wxEvent& event); + void AddPreset(wxEvent& event); + +public: + PhysicalPrinterDialog(wxString printer_name); + ~PhysicalPrinterDialog(); + + void update(); + wxString get_printer_name(); + void update_full_printer_names(); + PhysicalPrinter* get_printer() {return &m_printer; } + void set_printer_technology(PrinterTechnology pt); + PrinterTechnology get_printer_technology(); + + void DeletePreset(PresetForPrinter* preset_for_printer); + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + void on_sys_color_changed() override {}; +}; + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index ec13610b8c..80071c9727 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -33,7 +32,11 @@ #include "libslic3r/Format/STL.hpp" #include "libslic3r/Format/AMF.hpp" #include "libslic3r/Format/3mf.hpp" +#if ENABLE_GCODE_VIEWER +#include "libslic3r/GCode/GCodeProcessor.hpp" +#else #include "libslic3r/GCode/PreviewData.hpp" +#endif // ENABLE_GCODE_VIEWER #include "libslic3r/GCode/ThumbnailData.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/SLA/Hollowing.hpp" @@ -44,6 +47,7 @@ #include "libslic3r/PrintConfig.hpp" #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Utils.hpp" +#include "libslic3r/PresetBundle.hpp" #include "GUI.hpp" #include "GUI_App.hpp" @@ -66,7 +70,6 @@ #include "Jobs/ArrangeJob.hpp" #include "Jobs/RotoptimizeJob.hpp" #include "Jobs/SLAImportJob.hpp" -#include "PresetBundle.hpp" #include "BackgroundSlicingProcess.hpp" #include "ProgressStatusBar.hpp" #include "PrintHostDialogs.hpp" @@ -75,8 +78,12 @@ #include "../Utils/PrintHost.hpp" #include "../Utils/FixModelByWin10.hpp" #include "../Utils/UndoRedo.hpp" +#include "../Utils/PresetUpdater.hpp" +#include "../Utils/Process.hpp" #include "RemovableDriveManager.hpp" #include "InstanceCheck.hpp" +#include "NotificationManager.hpp" +#include "PresetComboBoxes.hpp" #ifdef __APPLE__ #include "Gizmos/GLGizmosManager.hpp" @@ -101,7 +108,8 @@ namespace GUI { wxDEFINE_EVENT(EVT_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); wxDEFINE_EVENT(EVT_SLICING_UPDATE, SlicingStatusEvent); wxDEFINE_EVENT(EVT_SLICING_COMPLETED, wxCommandEvent); -wxDEFINE_EVENT(EVT_PROCESS_COMPLETED, wxCommandEvent); +wxDEFINE_EVENT(EVT_PROCESS_COMPLETED, SlicingProcessCompletedEvent); +wxDEFINE_EVENT(EVT_EXPORT_BEGAN, wxCommandEvent); // Sidebar widgets @@ -253,153 +261,6 @@ void SlicedInfo::SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const w info_vec[idx].second->Show(show); } -PresetComboBox::PresetComboBox(wxWindow *parent, Preset::Type preset_type) : -PresetBitmapComboBox(parent, wxSize(15 * wxGetApp().em_unit(), -1)), - preset_type(preset_type), - last_selected(wxNOT_FOUND), - m_em_unit(wxGetApp().em_unit()) -{ - SetFont(wxGetApp().normal_font()); -#ifdef _WIN32 - // Workaround for ignoring CBN_EDITCHANGE events, which are processed after the content of the combo box changes, so that - // the index of the item inside CBN_EDITCHANGE may no more be valid. - EnableTextChangedEvents(false); -#endif /* _WIN32 */ - Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &evt) { - auto selected_item = evt.GetSelection(); - - auto marker = reinterpret_cast(this->GetClientData(selected_item)); - if (marker >= LABEL_ITEM_MARKER && marker < LABEL_ITEM_MAX) { - this->SetSelection(this->last_selected); - evt.StopPropagation(); - if (marker >= LABEL_ITEM_WIZARD_PRINTERS) { - ConfigWizard::StartPage sp = ConfigWizard::SP_WELCOME; - switch (marker) { - case LABEL_ITEM_WIZARD_PRINTERS: sp = ConfigWizard::SP_PRINTERS; break; - case LABEL_ITEM_WIZARD_FILAMENTS: sp = ConfigWizard::SP_FILAMENTS; break; - case LABEL_ITEM_WIZARD_MATERIALS: sp = ConfigWizard::SP_MATERIALS; break; - } - wxTheApp->CallAfter([sp]() { wxGetApp().run_wizard(ConfigWizard::RR_USER, sp); }); - } - } else if ( this->last_selected != selected_item || - wxGetApp().get_tab(this->preset_type)->get_presets()->current_is_dirty() ) { - this->last_selected = selected_item; - evt.SetInt(this->preset_type); - evt.Skip(); - } else { - evt.StopPropagation(); - } - }); - - if (preset_type == Slic3r::Preset::TYPE_FILAMENT) - { - Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &event) { - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - const Preset* selected_preset = preset_bundle->filaments.find_preset(preset_bundle->filament_presets[extruder_idx]); - // Wide icons are shown if the currently selected preset is not compatible with the current printer, - // and red flag is drown in front of the selected preset. - bool wide_icons = selected_preset != nullptr && !selected_preset->is_compatible; - float scale = m_em_unit*0.1f; - - int shifl_Left = wide_icons ? int(scale * 16 + 0.5) : 0; -#if defined(wxBITMAPCOMBOBOX_OWNERDRAWN_BASED) - shifl_Left += int(scale * 4 + 0.5f); // IMAGE_SPACING_RIGHT = 4 for wxBitmapComboBox -> Space left of image -#endif - int icon_right_pos = shifl_Left + int(scale * (24+4) + 0.5); - int mouse_pos = event.GetLogicalPosition(wxClientDC(this)).x; - if (mouse_pos < shifl_Left || mouse_pos > icon_right_pos ) { - // Let the combo box process the mouse click. - event.Skip(); - return; - } - - // Swallow the mouse click and open the color picker. - - // get current color - DynamicPrintConfig* cfg = wxGetApp().get_tab(Preset::TYPE_PRINTER)->get_config(); - auto colors = static_cast(cfg->option("extruder_colour")->clone()); - wxColour clr(colors->values[extruder_idx]); - if (!clr.IsOk()) - clr = wxColour(0,0,0); // Don't set alfa to transparence - - auto data = new wxColourData(); - data->SetChooseFull(1); - data->SetColour(clr); - - wxColourDialog dialog(this, data); - dialog.CenterOnParent(); - if (dialog.ShowModal() == wxID_OK) - { - colors->values[extruder_idx] = dialog.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); - - DynamicPrintConfig cfg_new = *cfg; - cfg_new.set_key_value("extruder_colour", colors); - - wxGetApp().get_tab(Preset::TYPE_PRINTER)->load_config(cfg_new); - preset_bundle->update_plater_filament_ui(extruder_idx, this); - wxGetApp().plater()->on_config_change(cfg_new); - } - }); - } - - edit_btn = new ScalableButton(parent, wxID_ANY, "cog"); - edit_btn->SetToolTip(_L("Click to edit preset")); - - edit_btn->Bind(wxEVT_BUTTON, ([preset_type, this](wxCommandEvent) - { - Tab* tab = wxGetApp().get_tab(preset_type); - if (!tab) - return; - - int page_id = wxGetApp().tab_panel()->FindPage(tab); - if (page_id == wxNOT_FOUND) - return; - - wxGetApp().tab_panel()->SetSelection(page_id); - - // Switch to Settings NotePad - wxGetApp().mainframe->select_tab(); - - /* In a case of a multi-material printing, for editing another Filament Preset - * it's needed to select this preset for the "Filament settings" Tab - */ - if (preset_type == Preset::TYPE_FILAMENT && wxGetApp().extruders_edited_cnt() > 1) - { - const std::string& selected_preset = GetString(GetSelection()).ToUTF8().data(); - - // Call select_preset() only if there is new preset and not just modified - if ( !boost::algorithm::ends_with(selected_preset, Preset::suffix_modified()) ) - { - const std::string& preset_name = wxGetApp().preset_bundle->filaments.get_preset_name_by_alias(selected_preset); - tab->select_preset(/*selected_preset*/preset_name); - } - } - })); -} - -PresetComboBox::~PresetComboBox() -{ - if (edit_btn) - edit_btn->Destroy(); -} - - -void PresetComboBox::set_label_marker(int item, LabelItemType label_item_type) -{ - this->SetClientData(item, (void*)label_item_type); -} - -void PresetComboBox::check_selection(int selection) -{ - this->last_selected = selection; -} - -void PresetComboBox::msw_rescale() -{ - m_em_unit = wxGetApp().em_unit(); - edit_btn->msw_rescale(); -} - // Frequently changed parameters class FreqChangedParams : public OG_Settings @@ -445,11 +306,12 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) : if (!tab_print) return; if (opt_key == "fill_density") { - value = m_og->get_config_value(*config, opt_key); - tab_print->set_value(opt_key, value); + tab_print->update_dirty(); + tab_print->reload_config(); tab_print->update(); } - else{ + else + { DynamicPrintConfig new_conf = *config; if (opt_key == "brim") { double new_val; @@ -490,8 +352,6 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) : } tab_print->load_config(new_conf); } - - tab_print->update_dirty(); }; @@ -579,9 +439,9 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) : return sizer; }; line.append_widget(wiping_dialog_btn); - m_og->append_line(line); + m_og->activate(); // Frequently changed parameters for SLA_technology m_og_sla = std::make_shared(parent, ""); @@ -589,7 +449,7 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) : DynamicPrintConfig* config_sla = &wxGetApp().preset_bundle->sla_prints.get_edited_preset().config; m_og_sla->set_config(config_sla); - m_og_sla->m_on_change = [config_sla, this](t_config_option_key opt_key, boost::any value) { + m_og_sla->m_on_change = [config_sla](t_config_option_key opt_key, boost::any value) { Tab* tab = wxGetApp().get_tab(Preset::TYPE_SLA_PRINT); if (!tab) return; @@ -653,6 +513,8 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) : m_og_sla->append_line(line); + m_og_sla->activate(); + m_sizer = new wxBoxSizer(wxVERTICAL); m_sizer->Add(m_og->sizer, 0, wxEXPAND); m_sizer->Add(m_og_sla->sizer, 0, wxEXPAND); @@ -697,12 +559,12 @@ struct Sidebar::priv ModeSizer *mode_sizer; wxFlexGridSizer *sizer_presets; - PresetComboBox *combo_print; - std::vector combos_filament; + PlaterPresetComboBox *combo_print; + std::vector combos_filament; wxBoxSizer *sizer_filaments; - PresetComboBox *combo_sla_print; - PresetComboBox *combo_sla_material; - PresetComboBox *combo_printer; + PlaterPresetComboBox *combo_sla_print; + PlaterPresetComboBox *combo_sla_material; + PlaterPresetComboBox *combo_printer; wxBoxSizer *sizer_params; FreqChangedParams *frequently_changed_parameters{ nullptr }; @@ -716,7 +578,7 @@ struct Sidebar::priv wxButton *btn_export_gcode; wxButton *btn_reslice; ScalableButton *btn_send_gcode; - ScalableButton *btn_remove_device; + ScalableButton *btn_eject_device; ScalableButton* btn_export_gcode_removable; //exports to removable drives (appears only if removable drive is connected) bool is_collapsed {false}; @@ -801,10 +663,10 @@ Sidebar::Sidebar(Plater *parent) p->sizer_filaments = new wxBoxSizer(wxVERTICAL); - auto init_combo = [this](PresetComboBox **combo, wxString label, Preset::Type preset_type, bool filament) { + auto init_combo = [this](PlaterPresetComboBox **combo, wxString label, Preset::Type preset_type, bool filament) { auto *text = new wxStaticText(p->presets_panel, wxID_ANY, label + " :"); text->SetFont(wxGetApp().small_font()); - *combo = new PresetComboBox(p->presets_panel, preset_type); + *combo = new PlaterPresetComboBox(p->presets_panel, preset_type); auto combo_and_btn_sizer = new wxBoxSizer(wxHORIZONTAL); combo_and_btn_sizer->Add(*combo, 1, wxEXPAND); @@ -889,12 +751,12 @@ Sidebar::Sidebar(Plater *parent) }; init_scalable_btn(&p->btn_send_gcode , "export_gcode", _L("Send to printer") + "\tCtrl+Shift+G"); - init_scalable_btn(&p->btn_remove_device, "eject_sd" , _L("Remove device") + "\tCtrl+T"); + init_scalable_btn(&p->btn_eject_device, "eject_sd" , _L("Remove device") + "\tCtrl+T"); init_scalable_btn(&p->btn_export_gcode_removable, "export_to_sd", _L("Export to SD card / Flash drive") + "\tCtrl+U"); // regular buttons "Slice now" and "Export G-code" - const int scaled_height = p->btn_remove_device->GetBitmapHeight() + 4; + const int scaled_height = p->btn_eject_device->GetBitmapHeight() + 4; auto init_btn = [this](wxButton **btn, wxString label, const int button_height) { *btn = new wxButton(this, wxID_ANY, label, wxDefaultPosition, wxSize(-1, button_height), wxBU_EXACTFIT); @@ -912,7 +774,7 @@ Sidebar::Sidebar(Plater *parent) complect_btns_sizer->Add(p->btn_export_gcode, 1, wxEXPAND); complect_btns_sizer->Add(p->btn_send_gcode); complect_btns_sizer->Add(p->btn_export_gcode_removable); - complect_btns_sizer->Add(p->btn_remove_device); + complect_btns_sizer->Add(p->btn_eject_device); btns_sizer->Add(p->btn_reslice, 0, wxEXPAND | wxTOP, margin_5); @@ -929,20 +791,20 @@ Sidebar::Sidebar(Plater *parent) { const bool export_gcode_after_slicing = wxGetKeyState(WXK_SHIFT); if (export_gcode_after_slicing) - p->plater->export_gcode(); + p->plater->export_gcode(true); else p->plater->reslice(); p->plater->select_view_3D("Preview"); }); p->btn_send_gcode->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { p->plater->send_gcode(); }); - p->btn_remove_device->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { p->plater->eject_drive(); }); + p->btn_eject_device->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { p->plater->eject_drive(); }); p->btn_export_gcode_removable->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { p->plater->export_gcode(true); }); } Sidebar::~Sidebar() {} -void Sidebar::init_filament_combo(PresetComboBox **combo, const int extr_idx) { - *combo = new PresetComboBox(p->presets_panel, Slic3r::Preset::TYPE_FILAMENT); +void Sidebar::init_filament_combo(PlaterPresetComboBox **combo, const int extr_idx) { + *combo = new PlaterPresetComboBox(p->presets_panel, Slic3r::Preset::TYPE_FILAMENT); // # copy icons from first choice // $choice->SetItemBitmap($_, $choices->[0]->GetItemBitmap($_)) for 0..$#presets; @@ -977,18 +839,18 @@ void Sidebar::update_all_preset_comboboxes() // Update the print choosers to only contain the compatible presets, update the dirty flags. if (print_tech == ptFFF) - preset_bundle.prints.update_plater_ui(p->combo_print); + p->combo_print->update(); else { - preset_bundle.sla_prints.update_plater_ui(p->combo_sla_print); - preset_bundle.sla_materials.update_plater_ui(p->combo_sla_material); + p->combo_sla_print->update(); + p->combo_sla_material->update(); } // Update the printer choosers, update the dirty flags. - preset_bundle.printers.update_plater_ui(p->combo_printer); + p->combo_printer->update(); // Update the filament choosers to only contain the compatible presets, update the color preview, // update the dirty flags. if (print_tech == ptFFF) { - for (size_t i = 0; i < p->combos_filament.size(); ++i) - preset_bundle.update_plater_filament_ui(i, p->combos_filament[i]); + for (PlaterPresetComboBox* cb : p->combos_filament) + cb->update(); } } @@ -1010,23 +872,22 @@ void Sidebar::update_presets(Preset::Type preset_type) preset_bundle.set_filament_preset(0, name); } - for (size_t i = 0; i < filament_cnt; i++) { - preset_bundle.update_plater_filament_ui(i, p->combos_filament[i]); - } + for (size_t i = 0; i < filament_cnt; i++) + p->combos_filament[i]->update(); break; } case Preset::TYPE_PRINT: - preset_bundle.prints.update_plater_ui(p->combo_print); + p->combo_print->update(); break; case Preset::TYPE_SLA_PRINT: - preset_bundle.sla_prints.update_plater_ui(p->combo_sla_print); + p->combo_sla_print->update(); break; case Preset::TYPE_SLA_MATERIAL: - preset_bundle.sla_materials.update_plater_ui(p->combo_sla_material); + p->combo_sla_material->update(); break; case Preset::TYPE_PRINTER: @@ -1062,18 +923,14 @@ void Sidebar::msw_rescale() p->mode_sizer->msw_rescale(); - // Rescale preset comboboxes in respect to the current em_unit ... - for (PresetComboBox* combo : std::vector { p->combo_print, + for (PlaterPresetComboBox* combo : std::vector { p->combo_print, p->combo_sla_print, p->combo_sla_material, p->combo_printer } ) combo->msw_rescale(); - for (PresetComboBox* combo : p->combos_filament) + for (PlaterPresetComboBox* combo : p->combos_filament) combo->msw_rescale(); - // ... then refill them and set min size to correct layout of the sidebar - update_all_preset_comboboxes(); - p->frequently_changed_parameters->msw_rescale(); p->object_list->msw_rescale(); p->object_manipulation->msw_rescale(); @@ -1083,9 +940,9 @@ void Sidebar::msw_rescale() p->object_info->msw_rescale(); p->btn_send_gcode->msw_rescale(); - p->btn_remove_device->msw_rescale(); + p->btn_eject_device->msw_rescale(); p->btn_export_gcode_removable->msw_rescale(); - const int scaled_height = p->btn_remove_device->GetBitmap().GetHeight() + 4; + const int scaled_height = p->btn_eject_device->GetBitmap().GetHeight() + 4; p->btn_export_gcode->SetMinSize(wxSize(-1, scaled_height)); p->btn_reslice ->SetMinSize(wxSize(-1, scaled_height)); @@ -1094,27 +951,21 @@ void Sidebar::msw_rescale() void Sidebar::sys_color_changed() { - // Update preset comboboxes in respect to the system color ... - // combo->msw_rescale() updates icon on button, so use it - for (PresetComboBox* combo : std::vector{ p->combo_print, + for (PlaterPresetComboBox* combo : std::vector{ p->combo_print, p->combo_sla_print, p->combo_sla_material, p->combo_printer }) combo->msw_rescale(); - for (PresetComboBox* combo : p->combos_filament) + for (PlaterPresetComboBox* combo : p->combos_filament) combo->msw_rescale(); - // ... then refill them and set min size to correct layout of the sidebar - update_all_preset_comboboxes(); - p->object_list->sys_color_changed(); p->object_manipulation->sys_color_changed(); -// p->object_settings->msw_rescale(); p->object_layers->sys_color_changed(); // btn...->msw_rescale() updates icon on button, so use it p->btn_send_gcode->msw_rescale(); - p->btn_remove_device->msw_rescale(); + p->btn_eject_device->msw_rescale(); p->btn_export_gcode_removable->msw_rescale(); p->scrolled->Layout(); @@ -1131,7 +982,7 @@ void Sidebar::jump_to_option(size_t selected) wxGetApp().get_tab(opt.type)->activate_option(boost::nowide::narrow(opt.opt_key), boost::nowide::narrow(opt.category)); // Switch to the Settings NotePad - wxGetApp().mainframe->select_tab(); +// wxGetApp().mainframe->select_tab(); } ObjectManipulation* Sidebar::obj_manipul() @@ -1316,48 +1167,78 @@ void Sidebar::update_sliced_info_sizer() wxString::Format("%.2f", ps.total_cost); p->sliced_info->SetTextAndShow(siCost, info_text, new_label); +#if ENABLE_GCODE_VIEWER if (ps.estimated_normal_print_time == "N/A" && ps.estimated_silent_print_time == "N/A") p->sliced_info->SetTextAndShow(siEstimatedTime, "N/A"); else { - new_label = _L("Estimated printing time") +":"; + info_text = ""; + new_label = _L("Estimated printing time") + ":"; + if (ps.estimated_normal_print_time != "N/A") { + new_label += format_wxstr("\n - %1%", _L("normal mode")); + info_text += format_wxstr("\n%1%", short_time(ps.estimated_normal_print_time)); + + // uncomment next line to not disappear slicing finished notif when colapsing sidebar before time estimate + //if (p->plater->is_sidebar_collapsed()) + p->plater->get_notification_manager()->set_slicing_complete_large(p->plater->is_sidebar_collapsed()); + p->plater->get_notification_manager()->set_slicing_complete_print_time("Estimated printing time: " + ps.estimated_normal_print_time); + + } + if (ps.estimated_silent_print_time != "N/A") { + new_label += format_wxstr("\n - %1%", _L("stealth mode")); + info_text += format_wxstr("\n%1%", short_time(ps.estimated_silent_print_time)); + } + p->sliced_info->SetTextAndShow(siEstimatedTime, info_text, new_label); + } +#else + if (ps.estimated_normal_print_time == "N/A" && ps.estimated_silent_print_time == "N/A") + p->sliced_info->SetTextAndShow(siEstimatedTime, "N/A"); + else { + new_label = _L("Estimated printing time") + ":"; info_text = ""; wxString str_color = _L("Color"); wxString str_pause = _L("Pause"); - auto fill_labels = [str_color, str_pause](const std::vector>& times, - wxString& new_label, wxString& info_text) - { - int color_change_count = 0; - for (auto time : times) - if (time.first == CustomGCode::ColorChange) - color_change_count++; - - for (int i = (int)times.size() - 1; i >= 0; --i) + auto fill_labels = [str_color, str_pause](const std::vector>& times, + wxString& new_label, wxString& info_text) { - if (i == 0 || times[i - 1].first == CustomGCode::PausePrint) - new_label += format_wxstr("\n - %1%%2%", str_color + " ", color_change_count); - else if (times[i - 1].first == CustomGCode::ColorChange) - new_label += format_wxstr("\n - %1%%2%", str_color + " ", color_change_count--); + int color_change_count = 0; + for (auto time : times) + if (time.first == CustomGCode::ColorChange) + color_change_count++; - if (i != (int)times.size() - 1 && times[i].first == CustomGCode::PausePrint) - new_label += format_wxstr(" -> %1%", str_pause); + for (int i = (int)times.size() - 1; i >= 0; --i) + { + if (i == 0 || times[i - 1].first == CustomGCode::PausePrint) + new_label += format_wxstr("\n - %1%%2%", str_color + " ", color_change_count); + else if (times[i - 1].first == CustomGCode::ColorChange) + new_label += format_wxstr("\n - %1%%2%", str_color + " ", color_change_count--); - info_text += format_wxstr("\n%1%", times[i].second); - } - }; + if (i != (int)times.size() - 1 && times[i].first == CustomGCode::PausePrint) + new_label += format_wxstr(" -> %1%", str_pause); + + info_text += format_wxstr("\n%1%", times[i].second); + } + }; if (ps.estimated_normal_print_time != "N/A") { new_label += format_wxstr("\n - %1%", _L("normal mode")); info_text += format_wxstr("\n%1%", ps.estimated_normal_print_time); fill_labels(ps.estimated_normal_custom_gcode_print_times, new_label, info_text); + + // uncomment next line to not disappear slicing finished notif when colapsing sidebar before time estimate + //if (p->plater->is_sidebar_collapsed()) + p->plater->get_notification_manager()->set_slicing_complete_large(p->plater->is_sidebar_collapsed()); + p->plater->get_notification_manager()->set_slicing_complete_print_time("Estimated printing time: " + ps.estimated_normal_print_time); + } if (ps.estimated_silent_print_time != "N/A") { new_label += format_wxstr("\n - %1%", _L("stealth mode")); info_text += format_wxstr("\n%1%", ps.estimated_silent_print_time); fill_labels(ps.estimated_silent_custom_gcode_print_times, new_label, info_text); } - p->sliced_info->SetTextAndShow(siEstimatedTime, info_text, new_label); + p->sliced_info->SetTextAndShow(siEstimatedTime, info_text, new_label); } +#endif // !ENABLE_GCODE_VIEWER // if there is a wipe tower, insert number of toolchanges info into the array: p->sliced_info->SetTextAndShow(siWTNumbetOfToolchanges, is_wipe_tower ? wxString::Format("%.d", ps.total_toolchanges) : "N/A"); @@ -1366,6 +1247,8 @@ void Sidebar::update_sliced_info_sizer() p->sliced_info->SetTextAndShow(siMateril_unit, "N/A"); } } + + Layout(); } void Sidebar::show_sliced_info_sizer(const bool show) @@ -1385,15 +1268,16 @@ void Sidebar::enable_buttons(bool enable) p->btn_reslice->Enable(enable); p->btn_export_gcode->Enable(enable); p->btn_send_gcode->Enable(enable); - p->btn_remove_device->Enable(enable); + p->btn_eject_device->Enable(enable); p->btn_export_gcode_removable->Enable(enable); } -bool Sidebar::show_reslice(bool show) const { return p->btn_reslice->Show(show); } -bool Sidebar::show_export(bool show) const { return p->btn_export_gcode->Show(show); } -bool Sidebar::show_send(bool show) const { return p->btn_send_gcode->Show(show); } -bool Sidebar::show_disconnect(bool show) const { return p->btn_remove_device->Show(show); } -bool Sidebar::show_export_removable(bool show)const { return p->btn_export_gcode_removable->Show(show); } +bool Sidebar::show_reslice(bool show) const { return p->btn_reslice->Show(show); } +bool Sidebar::show_export(bool show) const { return p->btn_export_gcode->Show(show); } +bool Sidebar::show_send(bool show) const { return p->btn_send_gcode->Show(show); } +bool Sidebar::show_export_removable(bool show) const { return p->btn_export_gcode_removable->Show(show); } +bool Sidebar::show_eject(bool show) const { return p->btn_eject_device->Show(show); } +bool Sidebar::get_eject_shown() const { return p->btn_eject_device->IsShown(); } bool Sidebar::is_multifilament() { @@ -1447,7 +1331,10 @@ void Sidebar::collapse(bool collapse) p->plater->Layout(); // save collapsing state to the AppConfig - wxGetApp().app_config->set("collapsed_sidebar", collapse ? "1" : "0"); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) +#endif // ENABLE_GCODE_VIEWER + wxGetApp().app_config->set("collapsed_sidebar", collapse ? "1" : "0"); } @@ -1458,7 +1345,7 @@ void Sidebar::update_ui_from_settings() update_sliced_info_sizer(); } -std::vector& Sidebar::combos_filament() +std::vector& Sidebar::combos_filament() { return p->combos_filament; } @@ -1486,21 +1373,62 @@ private: Plater *plater; static const std::regex pattern_drop; +#if ENABLE_GCODE_VIEWER + static const std::regex pattern_gcode_drop; +#endif // ENABLE_GCODE_VIEWER }; const std::regex PlaterDropTarget::pattern_drop(".*[.](stl|obj|amf|3mf|prusa)", std::regex::icase); +#if ENABLE_GCODE_VIEWER +const std::regex PlaterDropTarget::pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase); +#endif // ENABLE_GCODE_VIEWER bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames) { std::vector paths; - for (const auto &filename : filenames) { - fs::path path(into_path(filename)); - if (std::regex_match(path.string(), pattern_drop)) { - paths.push_back(std::move(path)); - } else { + +#if ENABLE_GCODE_VIEWER +#ifdef WIN32 + // hides the system icon + this->MSWUpdateDragImageOnLeave(); +#endif // WIN32 + + if (wxGetApp().is_gcode_viewer()) { + // gcode section + for (const auto& filename : filenames) { + fs::path path(into_path(filename)); + if (std::regex_match(path.string(), pattern_gcode_drop)) + paths.push_back(std::move(path)); + } + + if (paths.size() > 1) { + wxMessageDialog((wxWindow*)plater, _L("You can open only one .gcode file at a time."), + wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal(); return false; } + else if (paths.size() == 1) { + plater->load_gcode(from_path(paths.front())); + return true; + } + return false; } +#endif // ENABLE_GCODE_VIEWER + + // editor section + for (const auto &filename : filenames) { + fs::path path(into_path(filename)); + if (std::regex_match(path.string(), pattern_drop)) + paths.push_back(std::move(path)); +#if ENABLE_GCODE_VIEWER + else if (std::regex_match(path.string(), pattern_gcode_drop)) + start_new_gcodeviewer(&filename); +#endif // ENABLE_GCODE_VIEWER + else + return false; + } + if (paths.empty()) + // Likely all paths processed were gcodes, for which a G-code viewer instance has hopefully been started. + return false; wxString snapshot_label; assert(! paths.empty()); @@ -1527,13 +1455,10 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi // because right now the plater is not cleared, we set the project file (from the latest imported .3mf or .amf file) // only if not set yet // if res is empty no data has been loaded - if (!res.empty() && plater->get_project_filename().empty()) - { - for (std::vector::const_reverse_iterator it = paths.rbegin(); it != paths.rend(); ++it) - { + if (!res.empty() && plater->get_project_filename().empty()) { + for (std::vector::const_reverse_iterator it = paths.rbegin(); it != paths.rend(); ++it) { std::string filename = (*it).filename().string(); - if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) - { + if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) { plater->set_project_filename(from_path(*it)); break; } @@ -1574,7 +1499,11 @@ struct Plater::priv Slic3r::SLAPrint sla_print; Slic3r::Model model; PrinterTechnology printer_technology = ptFFF; +#if ENABLE_GCODE_VIEWER + Slic3r::GCodeProcessor::Result gcode_result; +#else Slic3r::GCodePreviewData gcode_preview_data; +#endif // ENABLE_GCODE_VIEWER // GUI elements wxSizer* panel_sizer{ nullptr }; @@ -1591,6 +1520,7 @@ struct Plater::priv GLToolbar view_toolbar; GLToolbar collapse_toolbar; Preview *preview; + NotificationManager* notification_manager { nullptr }; BackgroundSlicingProcess background_process; bool suppressed_backround_processing_update { false }; @@ -1669,14 +1599,9 @@ struct Plater::priv void show_view3D_labels(bool show) { if (current_panel == view3D) view3D->get_canvas3d()->show_labels(show); } bool is_sidebar_collapsed() const { return sidebar->is_collapsed(); } - void collapse_sidebar(bool show) { sidebar->collapse(show); } - -#if ENABLE_SLOPE_RENDERING - bool is_view3D_slope_shown() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_slope_shown(); } - void show_view3D_slope(bool show) { if (current_panel == view3D) view3D->get_canvas3d()->show_slope(show); } + void collapse_sidebar(bool collapse); bool is_view3D_layers_editing_enabled() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_layers_editing_enabled(); } -#endif // ENABLE_SLOPE_RENDERING void set_current_canvas_as_dirty(); GLCanvas3D* get_current_canvas3D(); @@ -1686,8 +1611,16 @@ struct Plater::priv bool init_view_toolbar(); bool init_collapse_toolbar(); +#if ENABLE_GCODE_VIEWER + void update_preview_bottom_toolbar(); + void update_preview_moves_slider(); + void enable_preview_moves_slider(bool enable); + + void reset_gcode_toolpaths(); +#endif // ENABLE_GCODE_VIEWER + void reset_all_gizmos(); - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); void update_main_toolbar_tooltips(); std::shared_ptr statusbar(); std::string get_config(const std::string &key) const; @@ -1774,8 +1707,19 @@ struct Plater::priv void on_select_preset(wxCommandEvent&); void on_slicing_update(SlicingStatusEvent&); void on_slicing_completed(wxCommandEvent&); - void on_process_completed(wxCommandEvent&); + void on_process_completed(SlicingProcessCompletedEvent&); + void on_export_began(wxCommandEvent&); void on_layer_editing_toggled(bool enable); + void on_slicing_began(); + + void clear_warnings(); + void add_warning(const Slic3r::PrintStateBase::Warning &warning, size_t oid); + // Update notification manager with the current state of warnings produced by the background process (slicing). + void actualize_slicing_warnings(const PrintBase &print); + // Displays dialog window with list of warnings. + // Returns true if user clicks OK. + // Returns true if current_warnings vector is empty without showning the dialog + bool warnings_dialog(); void on_action_add(SimpleEvent&); void on_action_split_objects(SimpleEvent&); @@ -1796,7 +1740,7 @@ struct Plater::priv // triangulate the bed and store the triangles into m_bed.m_triangles, // fills the m_bed.m_grid_lines and sets m_bed.m_origin. // Sets m_bed.m_polygon to limit the object placement. - void set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model); + void set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom = false); bool can_delete() const; bool can_delete_all() const; @@ -1816,6 +1760,8 @@ struct Plater::priv void msw_rescale_object_menu(); + void bring_instance_forward() const; + // returns the path to project file with the given extension (none if extension == wxEmptyString) // extension should contain the leading dot, i.e.: ".3mf" wxString get_project_filename(const wxString& extension = wxEmptyString) const; @@ -1824,9 +1770,10 @@ struct Plater::priv // Caching last value of show_action_buttons parameter for show_action_buttons(), so that a callback which does not know this state will not override it. mutable bool ready_to_slice = { false }; // Flag indicating that the G-code export targets a removable device, therefore the show_action_buttons() needs to be called at any case when the background processing finishes. - bool writing_to_removable_device = { false }; + bool writing_to_removable_device { false }; + bool show_ExportToRemovableFinished_notification { false }; bool inside_snapshot_capture() { return m_prevent_snapshots != 0; } - + bool process_completed_with_error { false }; private: bool init_object_menu(); bool init_common_menu(wxMenu* menu, const bool is_part = false); @@ -1854,6 +1801,11 @@ private: * */ std::string m_last_fff_printer_profile_name; std::string m_last_sla_printer_profile_name; + + // vector of all warnings generated by last slicing + std::vector> current_warnings; + bool show_warning_dialog { false }; + }; const std::regex Plater::priv::pattern_bundle(".*[.](amf|amf[.]xml|zip[.]amf|3mf|prusa)", std::regex::icase); @@ -1887,7 +1839,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) background_process.set_fff_print(&fff_print); background_process.set_sla_print(&sla_print); +#if ENABLE_GCODE_VIEWER + background_process.set_gcode_result(&gcode_result); +#else background_process.set_gcode_preview_data(&gcode_preview_data); +#endif // ENABLE_GCODE_VIEWER background_process.set_thumbnail_cb([this](ThumbnailsList& thumbnails, const Vec2ds& sizes, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) { std::packaged_task task([this](ThumbnailsList& thumbnails, const Vec2ds& sizes, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) { @@ -1899,6 +1855,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) }); background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED); background_process.set_finished_event(EVT_PROCESS_COMPLETED); + background_process.set_export_began_event(EVT_EXPORT_BEGAN); // Default printer technology for default config. background_process.select_technology(this->printer_technology); // Register progress callback from the Print class to the Plater. @@ -1911,7 +1868,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) this->q->Bind(EVT_SLICING_UPDATE, &priv::on_slicing_update, this); view3D = new View3D(q, &model, config, &background_process); +#if ENABLE_GCODE_VIEWER + preview = new Preview(q, &model, config, &background_process, &gcode_result, [this]() { schedule_background_process(); }); +#else preview = new Preview(q, &model, config, &background_process, &gcode_preview_data, [this]() { schedule_background_process(); }); +#endif // ENABLE_GCODE_VIEWER #ifdef __APPLE__ // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size @@ -1942,84 +1903,104 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // Events: - // Preset change event - sidebar->Bind(wxEVT_COMBOBOX, &priv::on_select_preset, this); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER + // Preset change event + sidebar->Bind(wxEVT_COMBOBOX, &priv::on_select_preset, this); + sidebar->Bind(EVT_OBJ_LIST_OBJECT_SELECT, [this](wxEvent&) { priv::selection_changed(); }); + sidebar->Bind(EVT_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { this->schedule_background_process(); }); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER - sidebar->Bind(EVT_OBJ_LIST_OBJECT_SELECT, [this](wxEvent&) { priv::selection_changed(); }); - sidebar->Bind(EVT_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { this->schedule_background_process(); }); + wxGLCanvas* view3D_canvas = view3D->get_wxglcanvas(); - wxGLCanvas* view3D_canvas = view3D->get_wxglcanvas(); - - // 3DScene events: - view3D_canvas->Bind(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { this->schedule_background_process(); }); - view3D_canvas->Bind(EVT_GLCANVAS_OBJECT_SELECT, &priv::on_object_select, this); - view3D_canvas->Bind(EVT_GLCANVAS_RIGHT_CLICK, &priv::on_right_click, this); - view3D_canvas->Bind(EVT_GLCANVAS_REMOVE_OBJECT, [q](SimpleEvent&) { q->remove_selected(); }); - view3D_canvas->Bind(EVT_GLCANVAS_ARRANGE, [this](SimpleEvent&) { this->q->arrange(); }); - view3D_canvas->Bind(EVT_GLCANVAS_SELECT_ALL, [this](SimpleEvent&) { this->q->select_all(); }); - view3D_canvas->Bind(EVT_GLCANVAS_QUESTION_MARK, [](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); }); - view3D_canvas->Bind(EVT_GLCANVAS_INCREASE_INSTANCES, [this](Event &evt) - { if (evt.data == 1) this->q->increase_instances(); else if (this->can_decrease_instances()) this->q->decrease_instances(); }); - view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_MOVED, [this](SimpleEvent&) { update(); }); - view3D_canvas->Bind(EVT_GLCANVAS_FORCE_UPDATE, [this](SimpleEvent&) { update(); }); - view3D_canvas->Bind(EVT_GLCANVAS_WIPETOWER_MOVED, &priv::on_wipetower_moved, this); - view3D_canvas->Bind(EVT_GLCANVAS_WIPETOWER_ROTATED, &priv::on_wipetower_rotated, this); - view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_ROTATED, [this](SimpleEvent&) { update(); }); - view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_SCALED, [this](SimpleEvent&) { update(); }); - view3D_canvas->Bind(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, [this](Event &evt) { this->sidebar->enable_buttons(evt.data); }); - view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_GEOMETRY, &priv::on_update_geometry, this); - view3D_canvas->Bind(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, &priv::on_3dcanvas_mouse_dragging_finished, this); - view3D_canvas->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); }); - view3D_canvas->Bind(EVT_GLCANVAS_RESETGIZMOS, [this](SimpleEvent&) { reset_all_gizmos(); }); - view3D_canvas->Bind(EVT_GLCANVAS_UNDO, [this](SimpleEvent&) { this->undo(); }); - view3D_canvas->Bind(EVT_GLCANVAS_REDO, [this](SimpleEvent&) { this->redo(); }); - view3D_canvas->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); - view3D_canvas->Bind(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE, [this](SimpleEvent&) { this->view3D->get_canvas3d()->reset_layer_height_profile(); }); - view3D_canvas->Bind(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, [this](Event& evt) { this->view3D->get_canvas3d()->adaptive_layer_height_profile(evt.data); }); - view3D_canvas->Bind(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, [this](HeightProfileSmoothEvent& evt) { this->view3D->get_canvas3d()->smooth_layer_height_profile(evt.data); }); - view3D_canvas->Bind(EVT_GLCANVAS_RELOAD_FROM_DISK, [this](SimpleEvent&) { this->reload_all_from_disk(); }); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER + // 3DScene events: + view3D_canvas->Bind(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { this->schedule_background_process(); }); + view3D_canvas->Bind(EVT_GLCANVAS_OBJECT_SELECT, &priv::on_object_select, this); + view3D_canvas->Bind(EVT_GLCANVAS_RIGHT_CLICK, &priv::on_right_click, this); + view3D_canvas->Bind(EVT_GLCANVAS_REMOVE_OBJECT, [q](SimpleEvent&) { q->remove_selected(); }); + view3D_canvas->Bind(EVT_GLCANVAS_ARRANGE, [this](SimpleEvent&) { this->q->arrange(); }); + view3D_canvas->Bind(EVT_GLCANVAS_SELECT_ALL, [this](SimpleEvent&) { this->q->select_all(); }); + view3D_canvas->Bind(EVT_GLCANVAS_QUESTION_MARK, [](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); }); + view3D_canvas->Bind(EVT_GLCANVAS_INCREASE_INSTANCES, [this](Event& evt) + { if (evt.data == 1) this->q->increase_instances(); else if (this->can_decrease_instances()) this->q->decrease_instances(); }); + view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_MOVED, [this](SimpleEvent&) { update(); }); + view3D_canvas->Bind(EVT_GLCANVAS_FORCE_UPDATE, [this](SimpleEvent&) { update(); }); + view3D_canvas->Bind(EVT_GLCANVAS_WIPETOWER_MOVED, &priv::on_wipetower_moved, this); + view3D_canvas->Bind(EVT_GLCANVAS_WIPETOWER_ROTATED, &priv::on_wipetower_rotated, this); + view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_ROTATED, [this](SimpleEvent&) { update(); }); + view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_SCALED, [this](SimpleEvent&) { update(); }); + view3D_canvas->Bind(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, [this](Event& evt) { this->sidebar->enable_buttons(evt.data); }); + view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_GEOMETRY, &priv::on_update_geometry, this); + view3D_canvas->Bind(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, &priv::on_3dcanvas_mouse_dragging_finished, this); + view3D_canvas->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); }); + view3D_canvas->Bind(EVT_GLCANVAS_RESETGIZMOS, [this](SimpleEvent&) { reset_all_gizmos(); }); + view3D_canvas->Bind(EVT_GLCANVAS_UNDO, [this](SimpleEvent&) { this->undo(); }); + view3D_canvas->Bind(EVT_GLCANVAS_REDO, [this](SimpleEvent&) { this->redo(); }); + view3D_canvas->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); + view3D_canvas->Bind(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE, [this](SimpleEvent&) { this->view3D->get_canvas3d()->reset_layer_height_profile(); }); + view3D_canvas->Bind(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, [this](Event& evt) { this->view3D->get_canvas3d()->adaptive_layer_height_profile(evt.data); }); + view3D_canvas->Bind(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, [this](HeightProfileSmoothEvent& evt) { this->view3D->get_canvas3d()->smooth_layer_height_profile(evt.data); }); + view3D_canvas->Bind(EVT_GLCANVAS_RELOAD_FROM_DISK, [this](SimpleEvent&) { this->reload_all_from_disk(); }); - // 3DScene/Toolbar: - view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this); - view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [q](SimpleEvent&) { q->reset_with_confirm(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_ARRANGE, [this](SimpleEvent&) { this->q->arrange(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_COPY, [q](SimpleEvent&) { q->copy_selection_to_clipboard(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_PASTE, [q](SimpleEvent&) { q->paste_from_clipboard(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_MORE, [q](SimpleEvent&) { q->increase_instances(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_FEWER, [q](SimpleEvent&) { q->decrease_instances(); }); - view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_OBJECTS, &priv::on_action_split_objects, this); - view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_VOLUMES, &priv::on_action_split_volumes, this); - view3D_canvas->Bind(EVT_GLTOOLBAR_LAYERSEDITING, &priv::on_action_layersediting, this); - view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [this](SimpleEvent&) - { - set_bed_shape(config->option("bed_shape")->values, - config->option("bed_custom_texture")->value, - config->option("bed_custom_model")->value); - }); + // 3DScene/Toolbar: + view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this); + view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [q](SimpleEvent&) { q->reset_with_confirm(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_ARRANGE, [this](SimpleEvent&) { this->q->arrange(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_COPY, [q](SimpleEvent&) { q->copy_selection_to_clipboard(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_PASTE, [q](SimpleEvent&) { q->paste_from_clipboard(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_MORE, [q](SimpleEvent&) { q->increase_instances(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_FEWER, [q](SimpleEvent&) { q->decrease_instances(); }); + view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_OBJECTS, &priv::on_action_split_objects, this); + view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_VOLUMES, &priv::on_action_split_volumes, this); + view3D_canvas->Bind(EVT_GLTOOLBAR_LAYERSEDITING, &priv::on_action_layersediting, this); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); // Preview events: preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_QUESTION_MARK, [this](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); }); - preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [this](SimpleEvent&) - { - set_bed_shape(config->option("bed_shape")->values, - config->option("bed_custom_texture")->value, - config->option("bed_custom_model")->value); - }); + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); }); + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); +#if ENABLE_GCODE_VIEWER + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, [this](wxKeyEvent& evt) { preview->move_layers_slider(evt); }); + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_layers_slider(evt); }); +#else preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, [this](wxKeyEvent& evt) { preview->move_double_slider(evt); }); preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_double_slider(evt); }); +#endif // ENABLE_GCODE_VIEWER - q->Bind(EVT_SLICING_COMPLETED, &priv::on_slicing_completed, this); - q->Bind(EVT_PROCESS_COMPLETED, &priv::on_process_completed, this); - q->Bind(EVT_GLVIEWTOOLBAR_3D, [q](SimpleEvent&) { q->select_view_3D("3D"); }); - q->Bind(EVT_GLVIEWTOOLBAR_PREVIEW, [q](SimpleEvent&) { q->select_view_3D("Preview"); }); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER + q->Bind(EVT_SLICING_COMPLETED, &priv::on_slicing_completed, this); + q->Bind(EVT_PROCESS_COMPLETED, &priv::on_process_completed, this); + q->Bind(EVT_EXPORT_BEGAN, &priv::on_export_began, this); + q->Bind(EVT_GLVIEWTOOLBAR_3D, [q](SimpleEvent&) { q->select_view_3D("3D"); }); + q->Bind(EVT_GLVIEWTOOLBAR_PREVIEW, [q](SimpleEvent&) { q->select_view_3D("Preview"); }); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER // Drop target: q->SetDropTarget(new PlaterDropTarget(q)); // if my understanding is right, wxWindow takes the owenership q->Layout(); +#if ENABLE_GCODE_VIEWER + set_current_panel(wxGetApp().is_editor() ? (wxPanel*)view3D : (wxPanel*)preview); + if (wxGetApp().is_gcode_viewer()) + preview->hide_layers_slider(); +#else set_current_panel(view3D); +#endif // ENABLE_GCODE_VIEWER // updates camera type from .ini file camera.set_type(get_config("use_perspective_camera")); @@ -2038,23 +2019,39 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) }); #endif /* _WIN32 */ - this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) { - if (evt.data.second) { - this->show_action_buttons(this->ready_to_slice); - Slic3r::GUI::show_info(this->q, format_wxstr(_L("Unmounting successful. The device %s(%s) can now be safely removed from the computer."), - evt.data.first.name, evt.data.first.path)); - } else - Slic3r::GUI::show_info(this->q, format_wxstr(_L("Ejecting of device %s(%s) has failed."), - evt.data.first.name, evt.data.first.path)); - }); - this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this](RemovableDrivesChangedEvent &) { this->show_action_buttons(this->ready_to_slice); }); - // Start the background thread and register this window as a target for update events. - wxGetApp().removable_drive_manager()->init(this->q); + notification_manager = new NotificationManager(this->q); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER + this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); + this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); + this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [this](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); + this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this, q](RemovableDriveEjectEvent &evt) { + if (evt.data.second) { + this->show_action_buttons(this->ready_to_slice); + notification_manager->push_notification(format(_L("Unmounting successful. The device %s(%s) can now be safely removed from the computer."),evt.data.first.name, evt.data.first.path), + NotificationManager::NotificationLevel::RegularNotification, *q->get_current_canvas3D()); + } else { + notification_manager->push_notification(format(_L("Ejecting of device %s(%s) has failed."), evt.data.first.name, evt.data.first.path), + NotificationManager::NotificationLevel::ErrorNotification, *q->get_current_canvas3D()); + } + }); + this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this, q](RemovableDrivesChangedEvent &) { + this->show_action_buttons(this->ready_to_slice); + if (!this->sidebar->get_eject_shown()) { + notification_manager->close_notification_of_type(NotificationType::ExportToRemovableFinished); + } + }); + // Start the background thread and register this window as a target for update events. + wxGetApp().removable_drive_manager()->init(this->q); #ifdef _WIN32 - // Trigger enumeration of removable media on Win32 notification. - this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); - this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + // Trigger enumeration of removable media on Win32 notification. + this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); #endif /* _WIN32 */ +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER // Initialize the Undo / Redo stack with a first snapshot. this->take_snapshot(_L("New Project")); @@ -2064,29 +2061,19 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) this->load_files(evt.data, true, true); }); this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) { - BOOST_LOG_TRIVIAL(debug) << "prusaslicer window going forward"; - //this code maximize app window on Fedora - { - wxGetApp().mainframe->Iconize(false); - if (wxGetApp().mainframe->IsMaximized()) - wxGetApp().mainframe->Maximize(true); - else - wxGetApp().mainframe->Maximize(false); - } - //this code maximize window on Ubuntu - { - wxGetApp().mainframe->Restore(); - wxGetApp().GetTopWindow()->SetFocus(); // focus on my window - wxGetApp().GetTopWindow()->Raise(); // bring window to front - wxGetApp().GetTopWindow()->Show(true); // show the window - } - + bring_instance_forward(); }); wxGetApp().other_instance_message_handler()->init(this->q); // collapse sidebar according to saved value - bool is_collapsed = wxGetApp().app_config->get("collapsed_sidebar") == "1"; - sidebar->collapse(is_collapsed); +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_editor()) { +#endif // ENABLE_GCODE_VIEWER + bool is_collapsed = wxGetApp().app_config->get("collapsed_sidebar") == "1"; + sidebar->collapse(is_collapsed); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER } Plater::priv::~priv() @@ -2134,6 +2121,10 @@ void Plater::priv::select_view_3D(const std::string& name) set_current_panel(view3D); else if (name == "Preview") set_current_panel(preview); + +#if ENABLE_GCODE_VIEWER + wxGetApp().update_ui_from_settings(false); +#endif // ENABLE_GCODE_VIEWER } void Plater::priv::select_next_view_3D() @@ -2144,6 +2135,20 @@ void Plater::priv::select_next_view_3D() set_current_panel(view3D); } +void Plater::priv::collapse_sidebar(bool collapse) +{ + sidebar->collapse(collapse); + + // Now update the tooltip in the toolbar. + std::string new_tooltip = collapse + ? _utf8(L("Expand sidebar")) + : _utf8(L("Collapse sidebar")); + new_tooltip += " [Shift+Tab]"; + int id = collapse_toolbar.get_item_id("collapse_sidebar"); + collapse_toolbar.set_tooltip(id, new_tooltip); +} + + void Plater::priv::reset_all_gizmos() { view3D->get_canvas3d()->reset_all_gizmos(); @@ -2151,10 +2156,10 @@ void Plater::priv::reset_all_gizmos() // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. -void Plater::priv::update_ui_from_settings() +void Plater::priv::update_ui_from_settings(bool apply_free_camera_correction) { camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); - if (wxGetApp().app_config->get("use_free_camera") != "1") + if (apply_free_camera_correction && wxGetApp().app_config->get("use_free_camera") != "1") camera.recover_from_free_camera(); view3D->get_canvas3d()->update_ui_from_settings(); @@ -2269,6 +2274,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (!config.empty()) { Preset::normalize(config); wxGetApp().preset_bundle->load_config_model(filename.string(), std::move(config)); + if (printer_technology == ptFFF) + CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, &wxGetApp().preset_bundle->project_config); wxGetApp().load_current_presets(); is_project_file = true; } @@ -2646,8 +2653,10 @@ void Plater::priv::deselect_all() void Plater::priv::remove(size_t obj_idx) { +#if !ENABLE_GCODE_VIEWER // Prevent toolpaths preview from rendering while we modify the Print object preview->set_enabled(false); +#endif // !ENABLE_GCODE_VIEWER if (view3D->is_layers_editing_enabled()) view3D->enable_layers_editing(false); @@ -2675,14 +2684,23 @@ void Plater::priv::reset() { Plater::TakeSnapshot snapshot(q, _L("Reset Project")); + clear_warnings(); + set_project_filename(wxEmptyString); +#if !ENABLE_GCODE_VIEWER // Prevent toolpaths preview from rendering while we modify the Print object preview->set_enabled(false); +#endif // !ENABLE_GCODE_VIEWER if (view3D->is_layers_editing_enabled()) view3D->enable_layers_editing(false); +#if ENABLE_GCODE_VIEWER + reset_gcode_toolpaths(); + gcode_result.reset(); +#endif // ENABLE_GCODE_VIEWER + // Stop and reset the Print content. this->background_process.reset(); model.clear_objects(); @@ -2828,10 +2846,19 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool this->sidebar->show_sliced_info_sizer(false); // Reset preview canvases. If the print has been invalidated, the preview canvases will be cleared. // Otherwise they will be just refreshed. +#if ENABLE_GCODE_VIEWER + if (this->preview != nullptr) { + // If the preview is not visible, the following line just invalidates the preview, + // but the G-code paths or SLA preview are calculated first once the preview is made visible. + reset_gcode_toolpaths(); + this->preview->reload_print(); + } +#else if (this->preview != nullptr) // If the preview is not visible, the following line just invalidates the preview, // but the G-code paths or SLA preview are calculated first once the preview is made visible. this->preview->reload_print(); +#endif // ENABLE_GCODE_VIEWER // In FDM mode, we need to reload the 3D scene because of the wipe tower preview box. // In SLA mode, we need to reload the 3D scene every time to show the support structures. if (this->printer_technology == ptSLA || (this->printer_technology == ptFFF && this->config->opt_bool("wipe_tower"))) @@ -2844,22 +2871,13 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool // The state of the Print changed, and it is non-zero. Let's validate it and give the user feedback on errors. std::string err = this->background_process.validate(); if (err.empty()) { + notification_manager->set_all_slicing_errors_gray(true); if (invalidated != Print::APPLY_STATUS_UNCHANGED && this->background_processing_enabled()) return_state |= UPDATE_BACKGROUND_PROCESS_RESTART; } else { - // The print is not valid. - // Only show the error message immediately, if the top level parent of this window is active. - auto p = dynamic_cast(this->q); - while (p->GetParent()) - p = p->GetParent(); - auto *top_level_wnd = dynamic_cast(p); - if (! postpone_error_messages && top_level_wnd && top_level_wnd->IsActive()) { - // The error returned from the Print needs to be translated into the local language. - GUI::show_error(this->q, err); - } else { - // Show the error message once the main window gets activated. - this->delayed_error_message = err; - } + // The print is not valid. + // Show error as notification. + notification_manager->push_slicing_error_notification(err, *q->get_current_canvas3D()); return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; } } else if (! this->delayed_error_message.empty()) { @@ -2867,6 +2885,13 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; } + //actualizate warnings + if (invalidated != Print::APPLY_STATUS_UNCHANGED) { + actualize_slicing_warnings(*this->background_process.current_print()); + show_warning_dialog = false; + process_completed_with_error = false; + } + if (invalidated != Print::APPLY_STATUS_UNCHANGED && was_running && ! this->background_process.running() && (return_state & UPDATE_BACKGROUND_PROCESS_RESTART) == 0) { // The background processing was killed and it will not be restarted. @@ -2929,6 +2954,8 @@ bool Plater::priv::restart_background_process(unsigned int state) this->statusbar()->set_status_text(_L("Cancelling")); this->background_process.stop(); }); + if (!show_warning_dialog) + on_slicing_began(); return true; } } @@ -2955,6 +2982,7 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova if ((state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) != 0) return; + show_warning_dialog = true; if (! output_path.empty()) { background_process.schedule_export(output_path.string(), output_path_on_removable_media); } else { @@ -3269,16 +3297,14 @@ void Plater::priv::set_current_panel(wxPanel* panel) if (current_panel == panel) return; + wxPanel* old_panel = current_panel; current_panel = panel; // to reduce flickering when changing view, first set as visible the new current panel - for (wxPanel* p : panels) - { - if (p == current_panel) - { + for (wxPanel* p : panels) { + if (p == current_panel) { #ifdef __WXMAC__ // On Mac we need also to force a render to avoid flickering when changing view - if (force_render) - { + if (force_render) { if (p == view3D) dynamic_cast(p)->get_canvas3d()->render(); else if (p == preview) @@ -3289,21 +3315,22 @@ void Plater::priv::set_current_panel(wxPanel* panel) } } // then set to invisible the other - for (wxPanel* p : panels) - { + for (wxPanel* p : panels) { if (p != current_panel) p->Hide(); } panel_sizer->Layout(); - if (current_panel == view3D) - { - if (view3D->is_reload_delayed()) - { + if (current_panel == view3D) { + if (old_panel == preview) + preview->get_canvas3d()->unbind_event_handlers(); + + view3D->get_canvas3d()->bind_event_handlers(); + + if (view3D->is_reload_delayed()) { // Delayed loading of the 3D scene. - if (this->printer_technology == ptSLA) - { + if (this->printer_technology == ptSLA) { // Update the SLAPrint from the current Model, so that the reload_scene() // pulls the correct data. this->update_restart_background_process(true, false); @@ -3314,9 +3341,15 @@ void Plater::priv::set_current_panel(wxPanel* panel) // sets the canvas as dirty to force a render at the 1st idle event (wxWidgets IsShownOnScreen() is buggy and cannot be used reliably) view3D->set_as_dirty(); view_toolbar.select_item("3D"); + if(notification_manager != nullptr) + notification_manager->set_in_preview(false); } - else if (current_panel == preview) - { + else if (current_panel == preview) { + if (old_panel == view3D) + view3D->get_canvas3d()->unbind_event_handlers(); + + preview->get_canvas3d()->bind_event_handlers(); + // see: Plater::priv::object_list_changed() // FIXME: it may be better to have a single function making this check and let it be called wherever needed bool export_in_progress = this->background_process.is_export_scheduled(); @@ -3328,6 +3361,8 @@ void Plater::priv::set_current_panel(wxPanel* panel) preview->set_as_dirty(); view_toolbar.select_item("Preview"); + if (notification_manager != nullptr) + notification_manager->set_in_preview(true); } current_panel->SetFocusFromKbd(); @@ -3336,7 +3371,7 @@ void Plater::priv::set_current_panel(wxPanel* panel) void Plater::priv::on_select_preset(wxCommandEvent &evt) { auto preset_type = static_cast(evt.GetInt()); - auto *combo = static_cast(evt.GetEventObject()); + auto *combo = static_cast(evt.GetEventObject()); // see https://github.com/prusa3d/PrusaSlicer/issues/3889 // Under OSX: in case of use of a same names written in different case (like "ENDER" and "Ender"), @@ -3355,19 +3390,27 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) //! instead of //! combo->GetStringSelection().ToUTF8().data()); - const std::string preset_name = wxGetApp().preset_bundle->get_preset_name_by_alias(preset_type, + std::string preset_name = wxGetApp().preset_bundle->get_preset_name_by_alias(preset_type, Preset::remove_suffix_modified(combo->GetString(selection).ToUTF8().data())); if (preset_type == Preset::TYPE_FILAMENT) { wxGetApp().preset_bundle->set_filament_preset(idx, preset_name); } + bool select_preset = !combo->selection_is_changed_according_to_physical_printers(); // TODO: ? if (preset_type == Preset::TYPE_FILAMENT && sidebar->is_multifilament()) { // Only update the plater UI for the 2nd and other filaments. - wxGetApp().preset_bundle->update_plater_filament_ui(idx, combo); + combo->update(); } - else { + else if (select_preset) { + if (preset_type == Preset::TYPE_PRINTER) { + PhysicalPrinterCollection& physical_printers = wxGetApp().preset_bundle->physical_printers; + if(combo->is_selected_physical_printer()) + preset_name = physical_printers.get_selected_printer_preset_name(); + else + physical_printers.unselect_printer(); + } wxWindowUpdateLocker noUpdates(sidebar->presets_panel()); wxGetApp().get_tab(preset_type)->select_preset(preset_name); } @@ -3433,11 +3476,19 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt) state = print_object->step_state_with_warnings(static_cast(warning_step)); } // Now process state.warnings. + for (auto const& warning : state.warnings) { + if (warning.current) { + notification_manager->push_slicing_warning_notification(warning.message, false, *q->get_current_canvas3D(), object_id, warning_step); + add_warning(warning, object_id.id); + } + } } } -void Plater::priv::on_slicing_completed(wxCommandEvent &) +void Plater::priv::on_slicing_completed(wxCommandEvent & evt) { + notification_manager->push_slicing_complete_notification(*q->get_current_canvas3D(), evt.GetInt(), is_sidebar_collapsed()); + switch (this->printer_technology) { case ptFFF: this->update_fff_scene(); @@ -3450,9 +3501,68 @@ void Plater::priv::on_slicing_completed(wxCommandEvent &) break; default: break; } -} -void Plater::priv::on_process_completed(wxCommandEvent &evt) +} +void Plater::priv::on_export_began(wxCommandEvent& evt) +{ + if (show_warning_dialog) + warnings_dialog(); + if (this->writing_to_removable_device) + this->show_ExportToRemovableFinished_notification = true; +} +void Plater::priv::on_slicing_began() +{ + clear_warnings(); + notification_manager->close_notification_of_type(NotificationType::SlicingComplete); +} +void Plater::priv::add_warning(const Slic3r::PrintStateBase::Warning& warning, size_t oid) +{ + for (auto const& it : current_warnings) { + if (warning.message_id == it.first.message_id) { + if (warning.message_id != 0 || (warning.message_id == 0 && warning.message == it.first.message)) + return; + } + } + current_warnings.emplace_back(std::pair(warning, oid)); +} +void Plater::priv::actualize_slicing_warnings(const PrintBase &print) +{ + std::vector ids = print.print_object_ids(); + if (ids.empty()) { + clear_warnings(); + return; + } + ids.emplace_back(print.id()); + std::sort(ids.begin(), ids.end()); + notification_manager->remove_slicing_warnings_of_released_objects(ids); + notification_manager->set_all_slicing_warnings_gray(true); +} +void Plater::priv::clear_warnings() +{ + notification_manager->close_slicing_errors_and_warnings(); + this->current_warnings.clear(); +} +bool Plater::priv::warnings_dialog() +{ + if (current_warnings.empty()) + return true; + std::string text = _u8L("There are active warnings concerning sliced models:\n"); + bool empt = true; + for (auto const& it : current_warnings) { + int next_n = it.first.message.find_first_of('\n', 0); + text += "\n"; + if (next_n != std::string::npos) + text += it.first.message.substr(0, next_n); + else + text += it.first.message; + } + //text += "\n\nDo you still wish to export?"; + wxMessageDialog msg_wingow(this->q, text, wxString(SLIC3R_APP_NAME " ") + _L("generated warnings"), wxOK); + const auto res = msg_wingow.ShowModal(); + return res == wxID_OK; + +} +void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt) { // Stop the background task, wait until the thread goes into the "Idle" state. // At this point of time the thread should be either finished or canceled, @@ -3461,28 +3571,30 @@ void Plater::priv::on_process_completed(wxCommandEvent &evt) this->statusbar()->reset_cancel_callback(); this->statusbar()->stop_busy(); - const bool canceled = evt.GetInt() < 0; - const bool error = evt.GetInt() == 0; - const bool success = evt.GetInt() > 0; // Reset the "export G-code path" name, so that the automatic background processing will be enabled again. this->background_process.reset_export(); - if (error) { - wxString message = evt.GetString(); - if (message.IsEmpty()) - message = _L("Export failed"); - if (q->m_tracking_popup_menu) - // We don't want to pop-up a message box when tracking a pop-up menu. - // We postpone the error message instead. - q->m_tracking_popup_menu_error_message = message; - else - show_error(q, message); - this->statusbar()->set_status_text(message); + if (evt.error()) { + std::string message = evt.format_error_message(); + if (evt.critical_error()) { + if (q->m_tracking_popup_menu) + // We don't want to pop-up a message box when tracking a pop-up menu. + // We postpone the error message instead. + q->m_tracking_popup_menu_error_message = message; + else + show_error(q, message); + } else + notification_manager->push_slicing_error_notification(message, *q->get_current_canvas3D()); + this->statusbar()->set_status_text(from_u8(message)); + const wxString invalid_str = _L("Invalid data"); + for (auto btn : { ActionButtonType::abReslice, ActionButtonType::abSendGCode, ActionButtonType::abExport }) + sidebar->set_btn_label(btn, invalid_str); + process_completed_with_error = true; } - if (canceled) + if (evt.cancelled()) this->statusbar()->set_status_text(_L("Cancelled")); - this->sidebar->show_sliced_info_sizer(success); + this->sidebar->show_sliced_info_sizer(evt.success()); // This updates the "Slice now", "Export G-code", "Arrange" buttons status. // Namely, it refreshes the "Out of print bed" property of all the ModelObjects, and it enables @@ -3503,15 +3615,22 @@ void Plater::priv::on_process_completed(wxCommandEvent &evt) default: break; } - - if (canceled) { + if (evt.cancelled()) { if (wxGetApp().get_mode() == comSimple) sidebar->set_btn_label(ActionButtonType::abReslice, "Slice now"); show_action_buttons(true); + } else { + if(wxGetApp().get_mode() == comSimple) { + show_action_buttons(false); + } + // If writing to removable drive was scheduled, show notification with eject button + if (this->writing_to_removable_device && this->show_ExportToRemovableFinished_notification) { + show_action_buttons(false); + notification_manager->push_notification(NotificationType::ExportToRemovableFinished, *q->get_current_canvas3D()); + } } - else if (this->writing_to_removable_device || wxGetApp().get_mode() == comSimple) - show_action_buttons(false); - this->writing_to_removable_device = false; + this->show_ExportToRemovableFinished_notification = false; + this->writing_to_removable_device = false; } void Plater::priv::on_layer_editing_toggled(bool enable) @@ -3539,6 +3658,7 @@ void Plater::priv::on_action_split_volumes(SimpleEvent&) void Plater::priv::on_action_layersediting(SimpleEvent&) { view3D->enable_layers_editing(!view3D->is_layers_editing_enabled()); + notification_manager->set_move_from_overlay(view3D->is_layers_editing_enabled()); } void Plater::priv::on_object_select(SimpleEvent& evt) @@ -3900,6 +4020,11 @@ void Plater::priv::reset_canvas_volumes() bool Plater::priv::init_view_toolbar() { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_gcode_viewer()) + return true; +#endif // ENABLE_GCODE_VIEWER + if (view_toolbar.get_items_count() > 0) // already initialized return true; @@ -3945,6 +4070,11 @@ bool Plater::priv::init_view_toolbar() bool Plater::priv::init_collapse_toolbar() { +#if ENABLE_GCODE_VIEWER + if (wxGetApp().is_gcode_viewer()) + return true; +#endif // ENABLE_GCODE_VIEWER + if (collapse_toolbar.get_items_count() > 0) // already initialized return true; @@ -3970,24 +4100,42 @@ bool Plater::priv::init_collapse_toolbar() item.name = "collapse_sidebar"; item.icon_filename = "collapse.svg"; - item.tooltip = wxGetApp().plater()->is_sidebar_collapsed() ? _utf8(L("Expand right panel")) : _utf8(L("Collapse right panel")); item.sprite_id = 0; - item.left.action_callback = [this, item]() { - std::string new_tooltip = wxGetApp().plater()->is_sidebar_collapsed() ? - _utf8(L("Collapse right panel")) : _utf8(L("Expand right panel")); - - int id = collapse_toolbar.get_item_id("collapse_sidebar"); - collapse_toolbar.set_tooltip(id, new_tooltip); - + item.left.action_callback = []() { wxGetApp().plater()->collapse_sidebar(!wxGetApp().plater()->is_sidebar_collapsed()); }; if (!collapse_toolbar.add_item(item)) return false; + // Now "collapse" sidebar to current state. This is done so the tooltip + // is updated before the toolbar is first used. + wxGetApp().plater()->collapse_sidebar(wxGetApp().plater()->is_sidebar_collapsed()); return true; } +#if ENABLE_GCODE_VIEWER +void Plater::priv::update_preview_bottom_toolbar() +{ + preview->update_bottom_toolbar(); +} + +void Plater::priv::update_preview_moves_slider() +{ + preview->update_moves_slider(); +} + +void Plater::priv::enable_preview_moves_slider(bool enable) +{ + preview->enable_moves_slider(enable); +} + +void Plater::priv::reset_gcode_toolpaths() +{ + preview->get_canvas3d()->reset_gcode_toolpaths(); +} +#endif // ENABLE_GCODE_VIEWER + bool Plater::priv::can_set_instance_to_object() const { const int obj_idx = get_selected_object_idx(); @@ -4062,11 +4210,10 @@ bool Plater::priv::can_reload_from_disk() const return !paths.empty(); } -void Plater::priv::set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model) +void Plater::priv::set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom) { - bool new_shape = bed.set_shape(shape, custom_texture, custom_model); - if (new_shape) - { + bool new_shape = bed.set_shape(shape, custom_texture, custom_model, force_as_custom); + if (new_shape) { if (view3D) view3D->bed_shape_changed(); if (preview) preview->bed_shape_changed(); } @@ -4142,7 +4289,12 @@ void Plater::priv::show_action_buttons(const bool ready_to_slice) const this->ready_to_slice = ready_to_slice; wxWindowUpdateLocker noUpdater(sidebar); - const auto prin_host_opt = config->option("print_host"); + + DynamicPrintConfig* selected_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config(); + if (!selected_printer_config) + selected_printer_config = config; + + const auto prin_host_opt = selected_printer_config->option("print_host"); const bool send_gcode_shown = prin_host_opt != nullptr && !prin_host_opt->value.empty(); // when a background processing is ON, export_btn and/or send_btn are showing @@ -4153,7 +4305,7 @@ void Plater::priv::show_action_buttons(const bool ready_to_slice) const sidebar->show_export(true) | sidebar->show_send(send_gcode_shown) | sidebar->show_export_removable(removable_media_status.has_removable_drives) | - sidebar->show_disconnect(removable_media_status.has_eject)) + sidebar->show_eject(removable_media_status.has_eject)) sidebar->Layout(); } else @@ -4165,7 +4317,7 @@ void Plater::priv::show_action_buttons(const bool ready_to_slice) const sidebar->show_export(!ready_to_slice) | sidebar->show_send(send_gcode_shown && !ready_to_slice) | sidebar->show_export_removable(!ready_to_slice && removable_media_status.has_removable_drives) | - sidebar->show_disconnect(!ready_to_slice && removable_media_status.has_eject)) + sidebar->show_eject(!ready_to_slice && removable_media_status.has_eject)) sidebar->Layout(); } } @@ -4400,6 +4552,34 @@ void Plater::priv::update_after_undo_redo(const UndoRedo::Snapshot& snapshot, bo BOOST_LOG_TRIVIAL(info) << "Undo / Redo snapshot reloaded. Undo / Redo stack memory: " << Slic3r::format_memsize_MB(this->undo_redo_stack().memsize()) << log_memory_info(); } +void Plater::priv::bring_instance_forward() const +{ +#ifdef __APPLE__ + wxGetApp().other_instance_message_handler()->bring_instance_forward(); + return; +#endif //__APPLE__ + if (main_frame == nullptr) { + BOOST_LOG_TRIVIAL(debug) << "Couldnt bring instance forward - mainframe is null"; + return; + } + BOOST_LOG_TRIVIAL(debug) << "prusaslicer window going forward"; + //this code maximize app window on Fedora + { + main_frame->Iconize(false); + if (main_frame->IsMaximized()) + main_frame->Maximize(true); + else + main_frame->Maximize(false); + } + //this code maximize window on Ubuntu + { + main_frame->Restore(); + wxGetApp().GetTopWindow()->SetFocus(); // focus on my window + wxGetApp().GetTopWindow()->Raise(); // bring window to front + wxGetApp().GetTopWindow()->Show(true); // show the window + } +} + void Sidebar::set_btn_label(const ActionButtonType btn_type, const wxString& label) const { switch (btn_type) @@ -4514,6 +4694,51 @@ void Plater::extract_config_from_project() load_files(input_paths, false, true); } +#if ENABLE_GCODE_VIEWER +void Plater::load_gcode() +{ + // Ask user for a gcode file name. + wxString input_file; + wxGetApp().load_gcode(this, input_file); + // And finally load the gcode file. + load_gcode(input_file); +} + +void Plater::load_gcode(const wxString& filename) +{ + if (filename.empty() || + (!filename.Lower().EndsWith(".gcode") && !filename.Lower().EndsWith(".g")) || + m_last_loaded_gcode == filename) + return; + + m_last_loaded_gcode = filename; + + // cleanup view before to start loading/processing + p->gcode_result.reset(); + reset_gcode_toolpaths(); + p->preview->reload_print(false); + p->get_current_canvas3D()->render(); + + wxBusyCursor wait; + + // process gcode + GCodeProcessor processor; + processor.enable_producers(true); + processor.enable_machine_envelope_processing(true); + processor.process_file(filename.ToUTF8().data()); + p->gcode_result = std::move(processor.extract_result()); + + // show results + p->preview->reload_print(false); + p->preview->get_canvas3d()->zoom_to_gcode(); +} + +void Plater::refresh_print() +{ + p->preview->refresh_print(); +} +#endif // ENABLE_GCODE_VIEWER + std::vector Plater::load_files(const std::vector& input_files, bool load_model, bool load_config, bool imperial_units /*= false*/) { return p->load_files(input_files, load_model, load_config, imperial_units); } // To be called when providing a list of files to the GUI slic3r on command line. @@ -4530,7 +4755,7 @@ void Plater::update() { p->update(); } void Plater::stop_jobs() { p->m_ui_jobs.stop_all(); } -void Plater::update_ui_from_settings() { p->update_ui_from_settings(); } +void Plater::update_ui_from_settings(bool apply_free_camera_correction) { p->update_ui_from_settings(apply_free_camera_correction); } void Plater::select_view(const std::string& direction) { p->select_view(direction); } @@ -4546,12 +4771,7 @@ void Plater::show_view3D_labels(bool show) { p->show_view3D_labels(show); } bool Plater::is_sidebar_collapsed() const { return p->is_sidebar_collapsed(); } void Plater::collapse_sidebar(bool show) { p->collapse_sidebar(show); } -#if ENABLE_SLOPE_RENDERING -bool Plater::is_view3D_slope_shown() const { return p->is_view3D_slope_shown(); } -void Plater::show_view3D_slope(bool show) { p->show_view3D_slope(show); } - bool Plater::is_view3D_layers_editing_enabled() const { return p->is_view3D_layers_editing_enabled(); } -#endif // ENABLE_SLOPE_RENDERING void Plater::select_all() { p->select_all(); } void Plater::deselect_all() { p->deselect_all(); } @@ -4672,7 +4892,7 @@ void Plater::convert_unit(bool from_imperial_unit) if (obj_idxs.empty() && volume_idxs.empty()) return; - TakeSnapshot snapshot(this, from_imperial_unit ? _L("Convert from imperial units") : _L("Convert to imperial units")); + TakeSnapshot snapshot(this, from_imperial_unit ? _L("Convert from imperial units") : _L("Revert conversion from imperial units")); wxBusyCursor wait; ModelObjectPtrs objects; @@ -4728,6 +4948,9 @@ void Plater::export_gcode(bool prefer_removable) if (p->model.objects.empty()) return; + if (p->process_completed_with_error)//here + return; + // If possible, remove accents from accented latin characters. // This function is useful for generating file names to be processed by legacy firmwares. fs::path default_output_file; @@ -4770,12 +4993,13 @@ void Plater::export_gcode(bool prefer_removable) if (! output_path.empty()) { bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); + p->writing_to_removable_device = path_on_removable_media; p->export_gcode(output_path, path_on_removable_media, PrintHostJob()); // Storing a path to AppConfig either as path to removable media or a path to internal media. // is_path_on_removable_drive() is called with the "true" parameter to update its internal database as the user may have shuffled the external drives // while the dialog was open. appconfig.update_last_output_dir(output_path.parent_path().string(), path_on_removable_media); - p->writing_to_removable_device = path_on_removable_media; + } } @@ -4987,7 +5211,6 @@ void Plater::export_toolpaths_to_obj() const p->preview->get_canvas3d()->export_toolpaths_to_obj(into_u8(path).c_str()); } - void Plater::reslice() { // Stop arrange and (or) optimize rotation tasks. @@ -5012,6 +5235,9 @@ void Plater::reslice() if ((state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) != 0) return; +#if ENABLE_GCODE_VIEWER + bool clean_gcode_toolpaths = true; +#endif // ENABLE_GCODE_VIEWER if (p->background_process.running()) { if (wxGetApp().get_mode() == comSimple) @@ -5024,9 +5250,19 @@ void Plater::reslice() } else if (!p->background_process.empty() && !p->background_process.idle()) p->show_action_buttons(true); +#if ENABLE_GCODE_VIEWER + else + clean_gcode_toolpaths = false; + + if (clean_gcode_toolpaths) + reset_gcode_toolpaths(); + // update type of preview + p->preview->update_view_type(!clean_gcode_toolpaths); +#else // update type of preview p->preview->update_view_type(true); +#endif // ENABLE_GCODE_VIEWER } void Plater::reslice_SLA_supports(const ModelObject &object, bool postpone_error_messages) @@ -5069,7 +5305,9 @@ void Plater::send_gcode() { if (p->model.objects.empty()) { return; } - PrintHostJob upload_job(p->config); + // if physical_printer is selected, send gcode for this printer + DynamicPrintConfig* physical_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config(); + PrintHostJob upload_job(physical_printer_config ? physical_printer_config : p->config); if (upload_job.empty()) { return; } // Obtain default output path @@ -5180,12 +5418,12 @@ void Plater::on_extruders_change(size_t num_extruders) size_t i = choices.size(); while ( i < num_extruders ) { - PresetComboBox* choice/*{ nullptr }*/; + PlaterPresetComboBox* choice/*{ nullptr }*/; sidebar().init_filament_combo(&choice, i); choices.push_back(choice); // initialize selection - wxGetApp().preset_bundle->update_plater_filament_ui(i, choice); + choice->update(); ++i; } @@ -5231,8 +5469,12 @@ void Plater::on_config_change(const DynamicPrintConfig &config) this->set_printer_technology(config.opt_enum(opt_key)); // print technology is changed, so we should to update a search list p->sidebar->update_searcher(); + p->sidebar->show_sliced_info_sizer(false); +#if ENABLE_GCODE_VIEWER + p->reset_gcode_toolpaths(); +#endif // ENABLE_GCODE_VIEWER } - else if ((opt_key == "bed_shape") || (opt_key == "bed_custom_texture") || (opt_key == "bed_custom_model")) { + else if (opt_key == "bed_shape" || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model") { bed_shape_changed = true; update_scheduled = true; } @@ -5262,9 +5504,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) } if (bed_shape_changed) - p->set_bed_shape(p->config->option("bed_shape")->values, - p->config->option("bed_custom_texture")->value, - p->config->option("bed_custom_model")->value); + set_bed_shape(); if (update_scheduled) update(); @@ -5275,11 +5515,24 @@ void Plater::on_config_change(const DynamicPrintConfig &config) void Plater::set_bed_shape() const { - p->set_bed_shape(p->config->option("bed_shape")->values, +#if ENABLE_GCODE_VIEWER + set_bed_shape(p->config->option("bed_shape")->values, + p->config->option("bed_custom_texture")->value, + p->config->option("bed_custom_model")->value); +#else + p->set_bed_shape(p->config->option("bed_shape")->values, p->config->option("bed_custom_texture")->value, p->config->option("bed_custom_model")->value); +#endif // ENABLE_GCODE_VIEWER } +#if ENABLE_GCODE_VIEWER +void Plater::set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom) const +{ + p->set_bed_shape(shape, custom_texture, custom_model, force_as_custom); +} +#endif // ENABLE_GCODE_VIEWER + void Plater::force_filament_colors_update() { bool update_scheduled = false; @@ -5440,24 +5693,39 @@ PrinterTechnology Plater::printer_technology() const const DynamicPrintConfig * Plater::config() const { return p->config; } +#if ENABLE_GCODE_VIEWER +bool Plater::set_printer_technology(PrinterTechnology printer_technology) +#else void Plater::set_printer_technology(PrinterTechnology printer_technology) +#endif // ENABLE_GCODE_VIEWER { p->printer_technology = printer_technology; +#if ENABLE_GCODE_VIEWER + bool ret = p->background_process.select_technology(printer_technology); + if (ret) { + // Update the active presets. + } +#else if (p->background_process.select_technology(printer_technology)) { // Update the active presets. } +#endif // ENABLE_GCODE_VIEWER //FIXME for SLA synchronize //p->background_process.apply(Model)! p->label_btn_export = printer_technology == ptFFF ? L("Export G-code") : L("Export"); p->label_btn_send = printer_technology == ptFFF ? L("Send G-code") : L("Send to printer"); - if (wxGetApp().mainframe) + if (wxGetApp().mainframe != nullptr) wxGetApp().mainframe->update_menubar(); p->update_main_toolbar_tooltips(); p->sidebar->get_searcher().set_printer_technology(printer_technology); + +#if ENABLE_GCODE_VIEWER + return ret; +#endif // ENABLE_GCODE_VIEWER } void Plater::changed_object(int obj_idx) @@ -5605,11 +5873,25 @@ bool Plater::init_view_toolbar() return p->init_view_toolbar(); } +#if ENABLE_GCODE_VIEWER +void Plater::enable_view_toolbar(bool enable) +{ + p->view_toolbar.set_enabled(enable); +} +#endif // ENABLE_GCODE_VIEWER + bool Plater::init_collapse_toolbar() { return p->init_collapse_toolbar(); } +#if ENABLE_GCODE_VIEWER +void Plater::enable_collapse_toolbar(bool enable) +{ + p->collapse_toolbar.set_enabled(enable); +} +#endif // ENABLE_GCODE_VIEWER + const Camera& Plater::get_camera() const { return p->camera; @@ -5663,6 +5945,28 @@ GLToolbar& Plater::get_collapse_toolbar() return p->collapse_toolbar; } +#if ENABLE_GCODE_VIEWER +void Plater::update_preview_bottom_toolbar() +{ + p->update_preview_bottom_toolbar(); +} + +void Plater::update_preview_moves_slider() +{ + p->update_preview_moves_slider(); +} + +void Plater::enable_preview_moves_slider(bool enable) +{ + p->enable_preview_moves_slider(enable); +} + +void Plater::reset_gcode_toolpaths() +{ + p->reset_gcode_toolpaths(); +} +#endif // ENABLE_GCODE_VIEWER + const Mouse3DController& Plater::get_mouse3d_controller() const { return p->mouse3d_controller; @@ -5673,6 +5977,16 @@ Mouse3DController& Plater::get_mouse3d_controller() return p->mouse3d_controller; } +const NotificationManager* Plater::get_notification_manager() const +{ + return p->notification_manager; +} + +NotificationManager* Plater::get_notification_manager() +{ + return p->notification_manager; +} + bool Plater::can_delete() const { return p->can_delete(); } bool Plater::can_delete_all() const { return p->can_delete_all(); } bool Plater::can_increase_instances() const { return p->can_increase_instances(); } @@ -5720,6 +6034,9 @@ bool Plater::can_undo() const { return p->undo_redo_stack().has_undo_snapshot(); bool Plater::can_redo() const { return p->undo_redo_stack().has_redo_snapshot(); } bool Plater::can_reload_from_disk() const { return p->can_reload_from_disk(); } const UndoRedo::Stack& Plater::undo_redo_stack_main() const { return p->undo_redo_stack_main(); } +#if ENABLE_GCODE_VIEWER +void Plater::clear_undo_redo_stack_main() { p->undo_redo_stack_main().clear(); } +#endif // ENABLE_GCODE_VIEWER void Plater::enter_gizmos_stack() { p->enter_gizmos_stack(); } void Plater::leave_gizmos_stack() { p->leave_gizmos_stack(); } bool Plater::inside_snapshot_capture() { return p->inside_snapshot_capture(); } @@ -5742,6 +6059,10 @@ bool Plater::PopupMenu(wxMenu *menu, const wxPoint& pos) } return out; } +void Plater::bring_instance_forward() +{ + p->bring_instance_forward(); +} SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() : m_was_scheduled(wxGetApp().plater()->is_background_process_update_scheduled()) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 5d60e006b0..e7b7c8442a 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -6,14 +6,12 @@ #include #include -#include -#include "Preset.hpp" #include "Selection.hpp" +#include "libslic3r/Preset.hpp" #include "libslic3r/BoundingBox.hpp" #include "Jobs/Job.hpp" -#include "wxExtensions.hpp" #include "Search.hpp" class wxButton; @@ -47,49 +45,17 @@ class ObjectLayers; class ObjectList; class GLCanvas3D; class Mouse3DController; +class NotificationManager; struct Camera; class Bed3D; class GLToolbar; +class PlaterPresetComboBox; using t_optgroups = std::vector >; class Plater; enum class ActionButtonType : int; -class PresetComboBox : public PresetBitmapComboBox -{ -public: - PresetComboBox(wxWindow *parent, Preset::Type preset_type); - ~PresetComboBox(); - - ScalableButton* edit_btn { nullptr }; - - enum LabelItemType { - LABEL_ITEM_MARKER = 0xffffff01, - LABEL_ITEM_WIZARD_PRINTERS, - LABEL_ITEM_WIZARD_FILAMENTS, - LABEL_ITEM_WIZARD_MATERIALS, - - LABEL_ITEM_MAX, - }; - - void set_label_marker(int item, LabelItemType label_item_type = LABEL_ITEM_MARKER); - void set_extruder_idx(const int extr_idx) { extruder_idx = extr_idx; } - int get_extruder_idx() const { return extruder_idx; } - int em_unit() const { return m_em_unit; } - void check_selection(int selection); - - void msw_rescale(); - -private: - typedef std::size_t Marker; - - Preset::Type preset_type; - int last_selected; - int extruder_idx = -1; - int m_em_unit; -}; - class Sidebar : public wxPanel { ConfigOptionMode m_mode; @@ -101,7 +67,7 @@ public: Sidebar &operator=(const Sidebar &) = delete; ~Sidebar(); - void init_filament_combo(PresetComboBox **combo, const int extr_idx); + void init_filament_combo(PlaterPresetComboBox **combo, const int extr_idx); void remove_unused_filament_combos(const size_t current_extruder_count); void update_all_preset_comboboxes(); void update_presets(Slic3r::Preset::Type preset_type); @@ -130,8 +96,9 @@ public: bool show_reslice(bool show) const; bool show_export(bool show) const; bool show_send(bool show) const; - bool show_disconnect(bool show)const; + bool show_eject(bool show)const; bool show_export_removable(bool show) const; + bool get_eject_shown() const; bool is_multifilament(); void update_mode(); bool is_collapsed(); @@ -139,7 +106,7 @@ public: void update_searcher(); void update_ui_from_settings(); - std::vector& combos_filament(); + std::vector& combos_filament(); Search::OptionsSearcher& get_searcher(); std::string& get_search_line(); @@ -173,6 +140,11 @@ public: void add_model(bool imperial_units = false); void import_sl1_archive(); void extract_config_from_project(); +#if ENABLE_GCODE_VIEWER + void load_gcode(); + void load_gcode(const wxString& filename); + void refresh_print(); +#endif // ENABLE_GCODE_VIEWER std::vector load_files(const std::vector& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false); // To be called when providing a list of files to the GUI slic3r on command line. @@ -193,16 +165,11 @@ public: bool is_sidebar_collapsed() const; void collapse_sidebar(bool show); -#if ENABLE_SLOPE_RENDERING - bool is_view3D_slope_shown() const; - void show_view3D_slope(bool show); - bool is_view3D_layers_editing_enabled() const; -#endif // ENABLE_SLOPE_RENDERING // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. - void update_ui_from_settings(); + void update_ui_from_settings(bool apply_free_camera_correction = true); void select_all(); void deselect_all(); @@ -220,7 +187,7 @@ public: void cut(size_t obj_idx, size_t instance_idx, coordf_t z, bool keep_upper = true, bool keep_lower = true, bool rotate_lower = false); - void export_gcode(bool prefer_removable = true); + void export_gcode(bool prefer_removable); void export_stl(bool extended = false, bool selection_only = false); void export_amf(); void export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path()); @@ -252,6 +219,9 @@ public: bool search_string_getter(int idx, const char** label, const char** tooltip); // For the memory statistics. const Slic3r::UndoRedo::Stack& undo_redo_stack_main() const; +#if ENABLE_GCODE_VIEWER + void clear_undo_redo_stack_main(); +#endif // ENABLE_GCODE_VIEWER // Enter / leave the Gizmos specific Undo / Redo stack. To be used by the SLA support point editing gizmo. void enter_gizmos_stack(); void leave_gizmos_stack(); @@ -289,7 +259,11 @@ public: PrinterTechnology printer_technology() const; const DynamicPrintConfig * config() const; +#if ENABLE_GCODE_VIEWER + bool set_printer_technology(PrinterTechnology printer_technology); +#else void set_printer_technology(PrinterTechnology printer_technology); +#endif // ENABLE_GCODE_VIEWER void copy_selection_to_clipboard(); void paste_from_clipboard(); @@ -315,7 +289,13 @@ public: void sys_color_changed(); bool init_view_toolbar(); +#if ENABLE_GCODE_VIEWER + void enable_view_toolbar(bool enable); +#endif // ENABLE_GCODE_VIEWER bool init_collapse_toolbar(); +#if ENABLE_GCODE_VIEWER + void enable_collapse_toolbar(bool enable); +#endif // ENABLE_GCODE_VIEWER const Camera& get_camera() const; Camera& get_camera(); @@ -334,10 +314,27 @@ public: const GLToolbar& get_collapse_toolbar() const; GLToolbar& get_collapse_toolbar(); +#if ENABLE_GCODE_VIEWER + void update_preview_bottom_toolbar(); + void update_preview_moves_slider(); + void enable_preview_moves_slider(bool enable); + + void reset_gcode_toolpaths(); + void reset_last_loaded_gcode() { m_last_loaded_gcode = ""; } +#endif // ENABLE_GCODE_VIEWER + const Mouse3DController& get_mouse3d_controller() const; Mouse3DController& get_mouse3d_controller(); void set_bed_shape() const; +#if ENABLE_GCODE_VIEWER + void set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom = false) const; +#endif // ENABLE_GCODE_VIEWER + + const NotificationManager* get_notification_manager() const; + NotificationManager* get_notification_manager(); + + void bring_instance_forward(); // ROII wrapper for suppressing the Undo / Redo snapshot to be taken. class SuppressSnapshots @@ -388,6 +385,10 @@ private: bool m_tracking_popup_menu = false; wxString m_tracking_popup_menu_error_message; +#if ENABLE_GCODE_VIEWER + wxString m_last_loaded_gcode; +#endif // ENABLE_GCODE_VIEWER + void suppress_snapshots(); void allow_snapshots(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 02e4a899d2..fb0ca410df 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -1,14 +1,15 @@ #include "Preferences.hpp" -#include "AppConfig.hpp" #include "OptionsGroup.hpp" #include "GUI_App.hpp" +#include "Plater.hpp" #include "I18N.hpp" +#include "libslic3r/AppConfig.hpp" namespace Slic3r { namespace GUI { PreferencesDialog::PreferencesDialog(wxWindow* parent) : - DPIDialog(parent, wxID_ANY, _(L("Preferences")), wxDefaultPosition, + DPIDialog(parent, wxID_ANY, _L("Preferences"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) { #ifdef __WXOSX__ @@ -20,10 +21,13 @@ PreferencesDialog::PreferencesDialog(wxWindow* parent) : void PreferencesDialog::build() { auto app_config = get_app_config(); - m_optgroup_general = std::make_shared(this, _(L("General"))); + m_optgroup_general = std::make_shared(this, _L("General")); m_optgroup_general->label_width = 40; m_optgroup_general->m_on_change = [this](t_config_option_key opt_key, boost::any value) { - m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; + if (opt_key == "default_action_on_close_application" || opt_key == "default_action_on_select_preset") + m_values[opt_key] = boost::any_cast(value) ? "none" : "discard"; + else + m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; }; // TODO @@ -36,81 +40,96 @@ void PreferencesDialog::build() // readonly = > !wxTheApp->have_version_check, // )); +#if ENABLE_GCODE_VIEWER + bool is_editor = wxGetApp().is_editor(); +#endif // ENABLE_GCODE_VIEWER + ConfigOptionDef def; - def.label = L("Remember output directory"); - def.type = coBool; - def.tooltip = L("If this is enabled, Slic3r will prompt the last output directory " - "instead of the one containing the input files."); - def.set_default_value(new ConfigOptionBool{ app_config->has("remember_output_path") ? app_config->get("remember_output_path") == "1" : true }); - Option option(def, "remember_output_path"); - m_optgroup_general->append_single_option_line(option); - - def.label = L("Auto-center parts"); - def.type = coBool; - def.tooltip = L("If this is enabled, Slic3r will auto-center objects " - "around the print bed center."); - def.set_default_value(new ConfigOptionBool{ app_config->get("autocenter") == "1" }); - option = Option (def,"autocenter"); - m_optgroup_general->append_single_option_line(option); - - def.label = L("Background processing"); - def.type = coBool; - def.tooltip = L("If this is enabled, Slic3r will pre-process objects as soon " - "as they\'re loaded in order to save time when exporting G-code."); - def.set_default_value(new ConfigOptionBool{ app_config->get("background_processing") == "1" }); - option = Option (def,"background_processing"); - m_optgroup_general->append_single_option_line(option); - - // Please keep in sync with ConfigWizard - def.label = L("Check for application updates"); - def.type = coBool; - def.tooltip = L("If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."); - def.set_default_value(new ConfigOptionBool(app_config->get("version_check") == "1")); - option = Option (def, "version_check"); - m_optgroup_general->append_single_option_line(option); - - // Please keep in sync with ConfigWizard - def.label = L("Export sources full pathnames to 3mf and amf"); - def.type = coBool; - def.tooltip = L("If enabled, allows the Reload from disk command to automatically find and load the files when invoked."); - def.set_default_value(new ConfigOptionBool(app_config->get("export_sources_full_pathnames") == "1")); - option = Option(def, "export_sources_full_pathnames"); - m_optgroup_general->append_single_option_line(option); - - // Please keep in sync with ConfigWizard - def.label = L("Update built-in Presets automatically"); - def.type = coBool; - def.tooltip = L("If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."); - def.set_default_value(new ConfigOptionBool(app_config->get("preset_update") == "1")); - option = Option (def, "preset_update"); - m_optgroup_general->append_single_option_line(option); - - def.label = L("Suppress \" - default - \" presets"); - def.type = coBool; - def.tooltip = L("Suppress \" - default - \" presets in the Print / Filament / Printer " - "selections once there are any other valid presets available."); - def.set_default_value(new ConfigOptionBool{ app_config->get("no_defaults") == "1" }); - option = Option (def,"no_defaults"); - m_optgroup_general->append_single_option_line(option); - - def.label = L("Show incompatible print and filament presets"); - def.type = coBool; - def.tooltip = L("When checked, the print and filament presets are shown in the preset editor " - "even if they are marked as incompatible with the active printer"); - def.set_default_value(new ConfigOptionBool{ app_config->get("show_incompatible_presets") == "1" }); - option = Option (def,"show_incompatible_presets"); - m_optgroup_general->append_single_option_line(option); - - def.label = L("Single Instance"); - def.type = coBool; -#if __APPLE__ - def.tooltip = L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."); +#if ENABLE_GCODE_VIEWER + Option option(def, ""); + if (is_editor) { +#endif // ENABLE_GCODE_VIEWER + def.label = L("Remember output directory"); + def.type = coBool; + def.tooltip = L("If this is enabled, Slic3r will prompt the last output directory " + "instead of the one containing the input files."); + def.set_default_value(new ConfigOptionBool{ app_config->has("remember_output_path") ? app_config->get("remember_output_path") == "1" : true }); +#if ENABLE_GCODE_VIEWER + option = Option(def, "remember_output_path"); #else - def.tooltip = L("If this is enabled, when staring PrusaSlicer and another instance of same PrusaSlicer is running, that instance will be reactivated instead."); + Option option(def, "remember_output_path"); +#endif // ENABLE_GCODE_VIEWER + m_optgroup_general->append_single_option_line(option); + + def.label = L("Auto-center parts"); + def.type = coBool; + def.tooltip = L("If this is enabled, Slic3r will auto-center objects " + "around the print bed center."); + def.set_default_value(new ConfigOptionBool{ app_config->get("autocenter") == "1" }); + option = Option(def, "autocenter"); + m_optgroup_general->append_single_option_line(option); + + def.label = L("Background processing"); + def.type = coBool; + def.tooltip = L("If this is enabled, Slic3r will pre-process objects as soon " + "as they\'re loaded in order to save time when exporting G-code."); + def.set_default_value(new ConfigOptionBool{ app_config->get("background_processing") == "1" }); + option = Option(def, "background_processing"); + m_optgroup_general->append_single_option_line(option); + + // Please keep in sync with ConfigWizard + def.label = L("Check for application updates"); + def.type = coBool; + def.tooltip = L("If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."); + def.set_default_value(new ConfigOptionBool(app_config->get("version_check") == "1")); + option = Option(def, "version_check"); + m_optgroup_general->append_single_option_line(option); + + // Please keep in sync with ConfigWizard + def.label = L("Export sources full pathnames to 3mf and amf"); + def.type = coBool; + def.tooltip = L("If enabled, allows the Reload from disk command to automatically find and load the files when invoked."); + def.set_default_value(new ConfigOptionBool(app_config->get("export_sources_full_pathnames") == "1")); + option = Option(def, "export_sources_full_pathnames"); + m_optgroup_general->append_single_option_line(option); + + // Please keep in sync with ConfigWizard + def.label = L("Update built-in Presets automatically"); + def.type = coBool; + def.tooltip = L("If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."); + def.set_default_value(new ConfigOptionBool(app_config->get("preset_update") == "1")); + option = Option(def, "preset_update"); + m_optgroup_general->append_single_option_line(option); + + def.label = L("Suppress \" - default - \" presets"); + def.type = coBool; + def.tooltip = L("Suppress \" - default - \" presets in the Print / Filament / Printer " + "selections once there are any other valid presets available."); + def.set_default_value(new ConfigOptionBool{ app_config->get("no_defaults") == "1" }); + option = Option(def, "no_defaults"); + m_optgroup_general->append_single_option_line(option); + + def.label = L("Show incompatible print and filament presets"); + def.type = coBool; + def.tooltip = L("When checked, the print and filament presets are shown in the preset editor " + "even if they are marked as incompatible with the active printer"); + def.set_default_value(new ConfigOptionBool{ app_config->get("show_incompatible_presets") == "1" }); + option = Option(def, "show_incompatible_presets"); + m_optgroup_general->append_single_option_line(option); + + def.label = L("Single Instance"); + def.type = coBool; +#if __APPLE__ + def.tooltip = L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."); +#else + def.tooltip = L("If this is enabled, when staring PrusaSlicer and another instance of same PrusaSlicer is running, that instance will be reactivated instead."); #endif - def.set_default_value(new ConfigOptionBool{ app_config->has("single_instance") ? app_config->get("single_instance") == "1" : false }); - option = Option(def, "single_instance"); - m_optgroup_general->append_single_option_line(option); + def.set_default_value(new ConfigOptionBool{ app_config->has("single_instance") ? app_config->get("single_instance") == "1" : false }); + option = Option(def, "single_instance"); + m_optgroup_general->append_single_option_line(option); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER #if __APPLE__ def.label = L("Use Retina resolution for the 3D scene"); @@ -131,7 +150,32 @@ void PreferencesDialog::build() option = Option(def, "use_inches"); m_optgroup_general->append_single_option_line(option); */ - m_optgroup_camera = std::make_shared(this, _(L("Camera"))); + + def.label = L("Ask for unsaved changes when closing application"); + def.type = coBool; + def.tooltip = L("Always ask for unsaved changes when closing application"); + def.set_default_value(new ConfigOptionBool{ app_config->get("default_action_on_close_application") == "none" }); + option = Option(def, "default_action_on_close_application"); + m_optgroup_general->append_single_option_line(option); + + def.label = L("Ask for unsaved changes when selecting new preset"); + def.type = coBool; + def.tooltip = L("Always ask for unsaved changes when selecting new preset"); + def.set_default_value(new ConfigOptionBool{ app_config->get("default_action_on_select_preset") == "none" }); + option = Option(def, "default_action_on_select_preset"); + m_optgroup_general->append_single_option_line(option); + + // Show/Hide splash screen + def.label = L("Show splash screen"); + def.type = coBool; + def.tooltip = L("Show splash screen"); + def.set_default_value(new ConfigOptionBool{ app_config->get("show_splash_screen") == "1" }); + option = Option(def, "show_splash_screen"); + m_optgroup_general->append_single_option_line(option); + + m_optgroup_general->activate(); + + m_optgroup_camera = std::make_shared(this, _L("Camera")); m_optgroup_camera->label_width = 40; m_optgroup_camera->m_on_change = [this](t_config_option_key opt_key, boost::any value) { m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; @@ -151,7 +195,9 @@ void PreferencesDialog::build() option = Option(def, "use_free_camera"); m_optgroup_camera->append_single_option_line(option); - m_optgroup_gui = std::make_shared(this, _(L("GUI"))); + m_optgroup_camera->activate(); + + m_optgroup_gui = std::make_shared(this, _L("GUI")); m_optgroup_gui->label_width = 40; m_optgroup_gui->m_on_change = [this](t_config_option_key opt_key, boost::any value) { m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; @@ -161,46 +207,79 @@ void PreferencesDialog::build() } }; - def.label = L("Show sidebar collapse/expand button"); +#if ENABLE_GCODE_VIEWER + if (is_editor) { +#endif // ENABLE_GCODE_VIEWER + def.label = L("Show sidebar collapse/expand button"); + def.type = coBool; + def.tooltip = L("If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"); + def.set_default_value(new ConfigOptionBool{ app_config->get("show_collapse_button") == "1" }); + option = Option(def, "show_collapse_button"); + m_optgroup_gui->append_single_option_line(option); + + def.label = L("Use custom size for toolbar icons"); + def.type = coBool; + def.tooltip = L("If enabled, you can change size of toolbar icons manually."); + def.set_default_value(new ConfigOptionBool{ app_config->get("use_custom_toolbar_size") == "1" }); + option = Option(def, "use_custom_toolbar_size"); + m_optgroup_gui->append_single_option_line(option); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + + def.label = L("Sequential slider applied only to top layer"); def.type = coBool; - def.tooltip = L("If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"); - def.set_default_value(new ConfigOptionBool{ app_config->get("show_collapse_button") == "1" }); - option = Option(def, "show_collapse_button"); + def.tooltip = L("If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer, " + "if disabled, changes made using the sequential slider, in preview, apply to the whole gcode."); + def.set_default_value(new ConfigOptionBool{ app_config->get("seq_top_layer_only") == "1" }); + option = Option(def, "seq_top_layer_only"); m_optgroup_gui->append_single_option_line(option); - def.label = L("Use custom size for toolbar icons"); - def.type = coBool; - def.tooltip = L("If enabled, you can change size of toolbar icons manually."); - def.set_default_value(new ConfigOptionBool{ app_config->get("use_custom_toolbar_size") == "1" }); - option = Option(def, "use_custom_toolbar_size"); - m_optgroup_gui->append_single_option_line(option); + m_optgroup_gui->activate(); - create_icon_size_slider(); - m_icon_size_sizer->ShowItems(app_config->get("use_custom_toolbar_size") == "1"); +#if ENABLE_GCODE_VIEWER + if (is_editor) { +#endif // ENABLE_GCODE_VIEWER + create_icon_size_slider(); + m_icon_size_sizer->ShowItems(app_config->get("use_custom_toolbar_size") == "1"); - create_settings_mode_widget(); + create_settings_mode_widget(); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER + if (is_editor) { +#endif // ENABLE_GCODE_VIEWER #if ENABLE_ENVIRONMENT_MAP - m_optgroup_render = std::make_shared(this, _(L("Render"))); - m_optgroup_render->label_width = 40; - m_optgroup_render->m_on_change = [this](t_config_option_key opt_key, boost::any value) { - m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; - }; + m_optgroup_render = std::make_shared(this, _L("Render")); + m_optgroup_render->label_width = 40; + m_optgroup_render->m_on_change = [this](t_config_option_key opt_key, boost::any value) { + m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; + }; - def.label = L("Use environment map"); - def.type = coBool; - def.tooltip = L("If enabled, renders object using the environment map."); - def.set_default_value(new ConfigOptionBool{ app_config->get("use_environment_map") == "1" }); - option = Option(def, "use_environment_map"); - m_optgroup_render->append_single_option_line(option); + def.label = L("Use environment map"); + def.type = coBool; + def.tooltip = L("If enabled, renders object using the environment map."); + def.set_default_value(new ConfigOptionBool{ app_config->get("use_environment_map") == "1" }); + option = Option(def, "use_environment_map"); + m_optgroup_render->append_single_option_line(option); + + m_optgroup_render->activate(); #endif // ENABLE_ENVIRONMENT_MAP +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER auto sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(m_optgroup_general->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); sizer->Add(m_optgroup_camera->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); sizer->Add(m_optgroup_gui->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); #if ENABLE_ENVIRONMENT_MAP - sizer->Add(m_optgroup_render->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); +#if ENABLE_GCODE_VIEWER + if (m_optgroup_render != nullptr) +#endif // ENABLE_GCODE_VIEWER + sizer->Add(m_optgroup_render->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); #endif // ENABLE_ENVIRONMENT_MAP SetFont(wxGetApp().normal_font()); @@ -217,11 +296,15 @@ void PreferencesDialog::build() void PreferencesDialog::accept() { if (m_values.find("no_defaults") != m_values.end()) { - warning_catcher(this, wxString::Format(_(L("You need to restart %s to make the changes effective.")), SLIC3R_APP_NAME)); + warning_catcher(this, wxString::Format(_L("You need to restart %s to make the changes effective."), SLIC3R_APP_NAME)); } auto app_config = get_app_config(); + m_seq_top_layer_only_changed = false; + if (auto it = m_values.find("seq_top_layer_only"); it != m_values.end()) + m_seq_top_layer_only_changed = app_config->get("seq_top_layer_only") != it->second; + m_settings_layout_changed = false; for (const std::string& key : {"old_settings_layout_mode", "new_settings_layout_mode", @@ -234,29 +317,12 @@ void PreferencesDialog::accept() } } -#if !ENABLE_LAYOUT_NO_RESTART - if (m_settings_layout_changed) { - // the dialog needs to be destroyed before the call to recreate_gui() - // or sometimes the application crashes into wxDialogBase() destructor - // so we put it into an inner scope - wxMessageDialog dialog(nullptr, - _L("Switching the settings layout mode will trigger application restart.\n" - "You will lose content of the plater.") + "\n\n" + - _L("Do you want to proceed?"), - wxString(SLIC3R_APP_NAME) + " - " + _L("Switching the settings layout mode"), - wxICON_QUESTION | wxOK | wxCANCEL); - - if (dialog.ShowModal() == wxID_CANCEL) - { - int selection = app_config->get("old_settings_layout_mode") == "1" ? 0 : - app_config->get("new_settings_layout_mode") == "1" ? 1 : - app_config->get("dlg_settings_layout_mode") == "1" ? 2 : 0; - - m_layout_mode_box->SetSelection(selection); - return; - } + for (const std::string& key : {"default_action_on_close_application", "default_action_on_select_preset"}) + { + auto it = m_values.find(key); + if (it != m_values.end() && it->second != "none" && app_config->get(key) != "none") + m_values.erase(it); // we shouldn't change value, if some of those parameters was selected, and then deselected } -#endif // !ENABLE_LAYOUT_NO_RESTART for (std::map::iterator it = m_values.begin(); it != m_values.end(); ++it) app_config->set(it->first, it->second); @@ -307,7 +373,7 @@ void PreferencesDialog::create_icon_size_slider() // we should use system default background parent->SetBackgroundStyle(wxBG_STYLE_ERASE); - auto label = new wxStaticText(parent, wxID_ANY, _(L("Icon size in a respect to the default size")) + " (%) :"); + auto label = new wxStaticText(parent, wxID_ANY, _L("Icon size in a respect to the default size") + " (%) :"); m_icon_size_sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL| wxRIGHT | (isOSX ? 0 : wxLEFT), em); @@ -322,7 +388,7 @@ void PreferencesDialog::create_icon_size_slider() slider->SetTickFreq(10); slider->SetPageSize(10); - slider->SetToolTip(_(L("Select toolbar icon size in respect to the default one."))); + slider->SetToolTip(_L("Select toolbar icon size in respect to the default one.")); m_icon_size_sizer->Add(slider, 1, wxEXPAND); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index f61c4d932d..68574fbcca 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -27,11 +27,13 @@ class PreferencesDialog : public DPIDialog wxRadioBox* m_layout_mode_box; bool isOSX {false}; bool m_settings_layout_changed {false}; + bool m_seq_top_layer_only_changed{ false }; public: PreferencesDialog(wxWindow* parent); ~PreferencesDialog() {} - bool settings_layout_changed() { return m_settings_layout_changed; } + bool settings_layout_changed() const { return m_settings_layout_changed; } + bool seq_top_layer_only_changed() const { return m_seq_top_layer_only_changed; } void build(); void accept(); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp new file mode 100644 index 0000000000..f71cbd17b7 --- /dev/null +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -0,0 +1,1052 @@ +#include "PresetComboBoxes.hpp" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libslic3r/libslic3r.h" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/PresetBundle.hpp" + +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "Plater.hpp" +#include "MainFrame.hpp" +#include "format.hpp" +#include "Tab.hpp" +#include "ConfigWizard.hpp" +#include "../Utils/ASCIIFolding.hpp" +#include "../Utils/FixModelByWin10.hpp" +#include "../Utils/UndoRedo.hpp" +#include "BitmapCache.hpp" +#include "PhysicalPrinterDialog.hpp" +#include "SavePresetDialog.hpp" + +using Slic3r::GUI::format_wxstr; + +namespace Slic3r { +namespace GUI { + +#define BORDER_W 10 + +// --------------------------------- +// *** PresetComboBox *** +// --------------------------------- + +/* For PresetComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina + * (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean + * "please scale this to such and such" but rather + * "the wxImage is already sized for backing scale such and such". ) + * Unfortunately, the constructor changes the size of wxBitmap too. + * Thus We need to use unscaled size value for bitmaps that we use + * to avoid scaled size of control items. + * For this purpose control drawing methods and + * control size calculation methods (virtual) are overridden. + **/ + +PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const wxSize& size) : + wxBitmapComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, size, 0, nullptr, wxCB_READONLY), + m_type(preset_type), + m_last_selected(wxNOT_FOUND), + m_em_unit(em_unit(this)), + m_preset_bundle(wxGetApp().preset_bundle) +{ + SetFont(wxGetApp().normal_font()); +#ifdef _WIN32 + // Workaround for ignoring CBN_EDITCHANGE events, which are processed after the content of the combo box changes, so that + // the index of the item inside CBN_EDITCHANGE may no more be valid. + EnableTextChangedEvents(false); +#endif /* _WIN32 */ + + switch (m_type) + { + case Preset::TYPE_PRINT: { + m_collection = &m_preset_bundle->prints; + m_main_bitmap_name = "cog"; + break; + } + case Preset::TYPE_FILAMENT: { + m_collection = &m_preset_bundle->filaments; + m_main_bitmap_name = "spool"; + break; + } + case Preset::TYPE_SLA_PRINT: { + m_collection = &m_preset_bundle->sla_prints; + m_main_bitmap_name = "cog"; + break; + } + case Preset::TYPE_SLA_MATERIAL: { + m_collection = &m_preset_bundle->sla_materials; + m_main_bitmap_name = "resin"; + break; + } + case Preset::TYPE_PRINTER: { + m_collection = &m_preset_bundle->printers; + m_main_bitmap_name = "printer"; + break; + } + default: break; + } + + m_bitmapCompatible = ScalableBitmap(this, "flag_green"); + m_bitmapIncompatible = ScalableBitmap(this, "flag_red"); + + // parameters for an icon's drawing + fill_width_height(); + + Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { + // see https://github.com/prusa3d/PrusaSlicer/issues/3889 + // Under OSX: in case of use of a same names written in different case (like "ENDER" and "Ender") + // m_presets_choice->GetSelection() will return first item, because search in PopupListCtrl is case-insensitive. + // So, use GetSelection() from event parameter + auto selected_item = evt.GetSelection(); + + auto marker = reinterpret_cast(this->GetClientData(selected_item)); + if (marker >= LABEL_ITEM_DISABLED && marker < LABEL_ITEM_MAX) + this->SetSelection(this->m_last_selected); + else if (on_selection_changed && (m_last_selected != selected_item || m_collection->current_is_dirty())) { + m_last_selected = selected_item; + on_selection_changed(selected_item); + evt.StopPropagation(); + } + evt.Skip(); + }); +} + +PresetComboBox::~PresetComboBox() +{ +} + +BitmapCache& PresetComboBox::bitmap_cache() +{ + static BitmapCache bmps; + return bmps; +} + +void PresetComboBox::set_label_marker(int item, LabelItemType label_item_type) +{ + this->SetClientData(item, (void*)label_item_type); +} + +bool PresetComboBox::set_printer_technology(PrinterTechnology pt) +{ + if (printer_technology != pt) { + printer_technology = pt; + return true; + } + return false; +} + +void PresetComboBox::invalidate_selection() +{ + m_last_selected = INT_MAX; // this value means that no one item is selected +} + +void PresetComboBox::validate_selection(bool predicate/*=false*/) +{ + if (predicate || + // just in case: mark m_last_selected as a first added element + m_last_selected == INT_MAX) + m_last_selected = GetCount() - 1; +} + +void PresetComboBox::update_selection() +{ + /* If selected_preset_item is still equal to INT_MAX, it means that + * there is no presets added to the list. + * So, select last combobox item ("Add/Remove preset") + */ + validate_selection(); + + SetSelection(m_last_selected); + SetToolTip(GetString(m_last_selected)); +} + +void PresetComboBox::update(std::string select_preset_name) +{ + Freeze(); + Clear(); + invalidate_selection(); + + const std::deque& presets = m_collection->get_presets(); + + std::map> nonsys_presets; + std::map incomp_presets; + + wxString selected = ""; + if (!presets.front().is_visible) + set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); + + for (size_t i = presets.front().is_visible ? 0 : m_collection->num_default_presets(); i < presets.size(); ++i) + { + const Preset& preset = presets[i]; + if (!preset.is_visible || !preset.is_compatible) + continue; + + // marker used for disable incompatible printer models for the selected physical printer + bool is_enabled = m_type == Preset::TYPE_PRINTER && printer_technology != ptAny ? preset.printer_technology() == printer_technology : true; + if (select_preset_name.empty() && is_enabled) + select_preset_name = preset.name; + + std::string bitmap_key = "cb"; + if (m_type == Preset::TYPE_PRINTER) { + bitmap_key += "_printer"; + if (preset.printer_technology() == ptSLA) + bitmap_key += "_sla"; + } + std::string main_icon_name = m_type == Preset::TYPE_PRINTER && preset.printer_technology() == ptSLA ? "sla_printer" : m_main_bitmap_name; + + wxBitmap* bmp = get_bmp(bitmap_key, main_icon_name, "lock_closed", is_enabled, preset.is_compatible, preset.is_system || preset.is_default); + assert(bmp); + + if (!is_enabled) + incomp_presets.emplace(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), bmp); + else if (preset.is_default || preset.is_system) + { + Append(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp); + validate_selection(preset.name == select_preset_name); + } + else + { + nonsys_presets.emplace(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), std::pair(bmp, is_enabled)); + if (preset.name == select_preset_name || (select_preset_name.empty() && is_enabled)) + selected = wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()); + } + if (i + 1 == m_collection->num_default_presets()) + set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); + } + if (!nonsys_presets.empty()) + { + set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); + for (std::map>::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { + int item_id = Append(it->first, *it->second.first); + bool is_enabled = it->second.second; + if (!is_enabled) + set_label_marker(item_id, LABEL_ITEM_DISABLED); + validate_selection(it->first == selected); + } + } + if (!incomp_presets.empty()) + { + set_label_marker(Append(separator(L("Incompatible presets")), wxNullBitmap)); + for (std::map::iterator it = incomp_presets.begin(); it != incomp_presets.end(); ++it) { + set_label_marker(Append(it->first, *it->second), LABEL_ITEM_DISABLED); + } + } + + update_selection(); + Thaw(); +} + +void PresetComboBox::edit_physical_printer() +{ + if (!m_preset_bundle->physical_printers.has_selection()) + return; + + PhysicalPrinterDialog dlg(this->GetString(this->GetSelection())); + if (dlg.ShowModal() == wxID_OK) + update(); +} + +void PresetComboBox::add_physical_printer() +{ + if (PhysicalPrinterDialog(wxEmptyString).ShowModal() == wxID_OK) + update(); +} + +bool PresetComboBox::del_physical_printer(const wxString& note_string/* = wxEmptyString*/) +{ + const std::string& printer_name = m_preset_bundle->physical_printers.get_selected_full_printer_name(); + if (printer_name.empty()) + return false; + + wxString msg; + if (!note_string.IsEmpty()) + msg += note_string + "\n"; + msg += format_wxstr(_L("Are you sure you want to delete \"%1%\" printer?"), printer_name); + + if (wxMessageDialog(this, msg, _L("Delete Physical Printer"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal() != wxID_YES) + return false; + + m_preset_bundle->physical_printers.delete_selected_printer(); + + this->update(); + + if (dynamic_cast(this) != nullptr) + wxGetApp().get_tab(m_type)->update_preset_choice(); + else if (dynamic_cast(this) != nullptr) + { + wxGetApp().get_tab(m_type)->update_btns_enabling(); + wxGetApp().plater()->sidebar().update_presets(m_type); + } + + return true; +} + +void PresetComboBox::update() +{ + this->update(into_u8(this->GetString(this->GetSelection()))); +} + +void PresetComboBox::msw_rescale() +{ + m_em_unit = em_unit(this); + + m_bitmapIncompatible.msw_rescale(); + m_bitmapCompatible.msw_rescale(); + + // parameters for an icon's drawing + fill_width_height(); + + // update the control to redraw the icons + update(); +} + +void PresetComboBox::fill_width_height() +{ + // To avoid asserts, each added bitmap to wxBitmapCombobox should be the same size, so + // set a bitmap's height to m_bitmapCompatible->GetHeight() and norm_icon_width to m_bitmapCompatible->GetWidth() + icon_height = m_bitmapCompatible.GetBmpHeight(); + norm_icon_width = m_bitmapCompatible.GetBmpWidth(); + + /* It's supposed that standard size of an icon is 16px*16px for 100% scaled display. + * So set sizes for solid_colored icons used for filament preset + * and scale them in respect to em_unit value + */ + const float scale_f = (float)m_em_unit * 0.1f; + + thin_icon_width = lroundf(8 * scale_f); // analogue to 8px; + wide_icon_width = norm_icon_width + thin_icon_width; + + space_icon_width = lroundf(2 * scale_f); + thin_space_icon_width = 2 * space_icon_width; + wide_space_icon_width = 3 * space_icon_width; +} + +wxString PresetComboBox::separator(const std::string& label) +{ + return wxString::FromUTF8(separator_head()) + _(label) + wxString::FromUTF8(separator_tail()); +} + +wxBitmap* PresetComboBox::get_bmp( std::string bitmap_key, bool wide_icons, const std::string& main_icon_name, + bool is_compatible/* = true*/, bool is_system/* = false*/, bool is_single_bar/* = false*/, + std::string filament_rgb/* = ""*/, std::string extruder_rgb/* = ""*/) +{ + // If the filament preset is not compatible and there is a "red flag" icon loaded, show it left + // to the filament color image. + if (wide_icons) + bitmap_key += is_compatible ? ",cmpt" : ",ncmpt"; + + bitmap_key += is_system ? ",syst" : ",nsyst"; + bitmap_key += ",h" + std::to_string(icon_height); + + wxBitmap* bmp = bitmap_cache().find(bitmap_key); + if (bmp == nullptr) { + // Create the bitmap with color bars. + std::vector bmps; + if (wide_icons) + // Paint a red flag for incompatible presets. + bmps.emplace_back(is_compatible ? bitmap_cache().mkclear(norm_icon_width, icon_height) : m_bitmapIncompatible.bmp()); + + if (m_type == Preset::TYPE_FILAMENT && !filament_rgb.empty()) + { + unsigned char rgb[3]; + // Paint the color bars. + bitmap_cache().parse_color(filament_rgb, rgb); + bmps.emplace_back(bitmap_cache().mksolid(is_single_bar ? wide_icon_width : norm_icon_width, icon_height, rgb)); + if (!is_single_bar) { + bitmap_cache().parse_color(extruder_rgb, rgb); + bmps.emplace_back(bitmap_cache().mksolid(thin_icon_width, icon_height, rgb)); + } + // Paint a lock at the system presets. + bmps.emplace_back(bitmap_cache().mkclear(space_icon_width, icon_height)); + } + else + { + // Paint the color bars. + bmps.emplace_back(bitmap_cache().mkclear(thin_space_icon_width, icon_height)); + bmps.emplace_back(create_scaled_bitmap(main_icon_name)); + // Paint a lock at the system presets. + bmps.emplace_back(bitmap_cache().mkclear(wide_space_icon_width, icon_height)); + } + bmps.emplace_back(is_system ? create_scaled_bitmap("lock_closed") : bitmap_cache().mkclear(norm_icon_width, icon_height)); + bmp = bitmap_cache().insert(bitmap_key, bmps); + } + + return bmp; +} + +wxBitmap* PresetComboBox::get_bmp( std::string bitmap_key, const std::string& main_icon_name, const std::string& next_icon_name, + bool is_enabled/* = true*/, bool is_compatible/* = true*/, bool is_system/* = false*/) +{ + bitmap_key += !is_enabled ? "_disabled" : ""; + bitmap_key += is_compatible ? ",cmpt" : ",ncmpt"; + bitmap_key += is_system ? ",syst" : ",nsyst"; + bitmap_key += ",h" + std::to_string(icon_height); + + wxBitmap* bmp = bitmap_cache().find(bitmap_key); + if (bmp == nullptr) { + // Create the bitmap with color bars. + std::vector bmps; + bmps.emplace_back(m_type == Preset::TYPE_PRINTER ? create_scaled_bitmap(main_icon_name, this, 16, !is_enabled) : + is_compatible ? m_bitmapCompatible.bmp() : m_bitmapIncompatible.bmp()); + // Paint a lock at the system presets. + bmps.emplace_back(is_system ? create_scaled_bitmap(next_icon_name, this, 16, !is_enabled) : bitmap_cache().mkclear(norm_icon_width, icon_height)); + bmp = bitmap_cache().insert(bitmap_key, bmps); + } + + return bmp; +} + +bool PresetComboBox::is_selected_physical_printer() +{ + auto selected_item = this->GetSelection(); + auto marker = reinterpret_cast(this->GetClientData(selected_item)); + return marker == LABEL_ITEM_PHYSICAL_PRINTER; +} + +bool PresetComboBox::selection_is_changed_according_to_physical_printers() +{ + if (m_type != Preset::TYPE_PRINTER || !is_selected_physical_printer()) + return false; + + PhysicalPrinterCollection& physical_printers = m_preset_bundle->physical_printers; + + std::string selected_string = this->GetString(this->GetSelection()).ToUTF8().data(); + + std::string old_printer_full_name, old_printer_preset; + if (physical_printers.has_selection()) { + old_printer_full_name = physical_printers.get_selected_full_printer_name(); + old_printer_preset = physical_printers.get_selected_printer_preset_name(); + } + else + old_printer_preset = m_collection->get_edited_preset().name; + // Select related printer preset on the Printer Settings Tab + physical_printers.select_printer(selected_string); + std::string preset_name = physical_printers.get_selected_printer_preset_name(); + + // if new preset wasn't selected, there is no need to call update preset selection + if (old_printer_preset == preset_name) { + // we need just to update according Plater<->Tab PresetComboBox + if (dynamic_cast(this)!=nullptr) { + wxGetApp().get_tab(m_type)->update_preset_choice(); + // Synchronize config.ini with the current selections. + m_preset_bundle->export_selections(*wxGetApp().app_config); + } + else if (dynamic_cast(this)!=nullptr) + wxGetApp().sidebar().update_presets(m_type); + + this->update(); + return true; + } + + Tab* tab = wxGetApp().get_tab(Preset::TYPE_PRINTER); + if (tab) + tab->select_preset(preset_name, false, old_printer_full_name); + return true; +} + +#ifdef __APPLE__ +bool PresetComboBox::OnAddBitmap(const wxBitmap& bitmap) +{ + if (bitmap.IsOk()) + { + // we should use scaled! size values of bitmap + int width = (int)bitmap.GetScaledWidth(); + int height = (int)bitmap.GetScaledHeight(); + + if (m_usedImgSize.x < 0) + { + // If size not yet determined, get it from this image. + m_usedImgSize.x = width; + m_usedImgSize.y = height; + + // Adjust control size to vertically fit the bitmap + wxWindow* ctrl = GetControl(); + ctrl->InvalidateBestSize(); + wxSize newSz = ctrl->GetBestSize(); + wxSize sz = ctrl->GetSize(); + if (newSz.y > sz.y) + ctrl->SetSize(sz.x, newSz.y); + else + DetermineIndent(); + } + + wxCHECK_MSG(width == m_usedImgSize.x && height == m_usedImgSize.y, + false, + "you can only add images of same size"); + + return true; + } + + return false; +} + +void PresetComboBox::OnDrawItem(wxDC& dc, + const wxRect& rect, + int item, + int flags) const +{ + const wxBitmap& bmp = *(wxBitmap*)m_bitmaps[item]; + if (bmp.IsOk()) + { + // we should use scaled! size values of bitmap + wxCoord w = bmp.GetScaledWidth(); + wxCoord h = bmp.GetScaledHeight(); + + const int imgSpacingLeft = 4; + + // Draw the image centered + dc.DrawBitmap(bmp, + rect.x + (m_usedImgSize.x - w) / 2 + imgSpacingLeft, + rect.y + (rect.height - h) / 2, + true); + } + + wxString text = GetString(item); + if (!text.empty()) + dc.DrawText(text, + rect.x + m_imgAreaWidth + 1, + rect.y + (rect.height - dc.GetCharHeight()) / 2); +} +#endif + + +// --------------------------------- +// *** PlaterPresetComboBox *** +// --------------------------------- + +PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset_type) : + PresetComboBox(parent, preset_type, wxSize(15 * wxGetApp().em_unit(), -1)) +{ + Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &evt) { + auto selected_item = evt.GetSelection(); + + auto marker = reinterpret_cast(this->GetClientData(selected_item)); + if (marker >= LABEL_ITEM_MARKER && marker < LABEL_ITEM_MAX) { + this->SetSelection(this->m_last_selected); + evt.StopPropagation(); + if (marker == LABEL_ITEM_WIZARD_PRINTERS) + show_add_menu(); + else + { + ConfigWizard::StartPage sp = ConfigWizard::SP_WELCOME; + switch (marker) { + case LABEL_ITEM_WIZARD_FILAMENTS: sp = ConfigWizard::SP_FILAMENTS; break; + case LABEL_ITEM_WIZARD_MATERIALS: sp = ConfigWizard::SP_MATERIALS; break; + default: break; + } + wxTheApp->CallAfter([sp]() { wxGetApp().run_wizard(ConfigWizard::RR_USER, sp); }); + } + } else if (marker == LABEL_ITEM_PHYSICAL_PRINTER || this->m_last_selected != selected_item || m_collection->current_is_dirty() ) { + this->m_last_selected = selected_item; + evt.SetInt(this->m_type); + evt.Skip(); + } else { + evt.StopPropagation(); + } + }); + + if (m_type == Preset::TYPE_FILAMENT) + { + Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &event) { + const Preset* selected_preset = m_collection->find_preset(m_preset_bundle->filament_presets[m_extruder_idx]); + // Wide icons are shown if the currently selected preset is not compatible with the current printer, + // and red flag is drown in front of the selected preset. + bool wide_icons = selected_preset && !selected_preset->is_compatible; + float scale = m_em_unit*0.1f; + + int shifl_Left = wide_icons ? int(scale * 16 + 0.5) : 0; +#if defined(wxBITMAPCOMBOBOX_OWNERDRAWN_BASED) + shifl_Left += int(scale * 4 + 0.5f); // IMAGE_SPACING_RIGHT = 4 for wxBitmapComboBox -> Space left of image +#endif + int icon_right_pos = shifl_Left + int(scale * (24+4) + 0.5); + int mouse_pos = event.GetLogicalPosition(wxClientDC(this)).x; + if (mouse_pos < shifl_Left || mouse_pos > icon_right_pos ) { + // Let the combo box process the mouse click. + event.Skip(); + return; + } + + // Swallow the mouse click and open the color picker. + + // get current color + DynamicPrintConfig* cfg = wxGetApp().get_tab(Preset::TYPE_PRINTER)->get_config(); + auto colors = static_cast(cfg->option("extruder_colour")->clone()); + wxColour clr(colors->values[m_extruder_idx]); + if (!clr.IsOk()) + clr = wxColour(0,0,0); // Don't set alfa to transparence + + auto data = new wxColourData(); + data->SetChooseFull(1); + data->SetColour(clr); + + wxColourDialog dialog(this, data); + dialog.CenterOnParent(); + if (dialog.ShowModal() == wxID_OK) + { + colors->values[m_extruder_idx] = dialog.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + + DynamicPrintConfig cfg_new = *cfg; + cfg_new.set_key_value("extruder_colour", colors); + + wxGetApp().get_tab(Preset::TYPE_PRINTER)->load_config(cfg_new); + this->update(); + wxGetApp().plater()->on_config_change(cfg_new); + } + }); + } + + edit_btn = new ScalableButton(parent, wxID_ANY, "cog"); + edit_btn->SetToolTip(_L("Click to edit preset")); + + edit_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent) + { + // In a case of a physical printer, for its editing open PhysicalPrinterDialog + if (m_type == Preset::TYPE_PRINTER/* && this->is_selected_physical_printer()*/) { + this->show_edit_menu(); + return; + } + + if (!switch_to_tab()) + return; + + /* In a case of a multi-material printing, for editing another Filament Preset + * it's needed to select this preset for the "Filament settings" Tab + */ + if (m_type == Preset::TYPE_FILAMENT && wxGetApp().extruders_edited_cnt() > 1) + { + const std::string& selected_preset = GetString(GetSelection()).ToUTF8().data(); + + // Call select_preset() only if there is new preset and not just modified + if ( !boost::algorithm::ends_with(selected_preset, Preset::suffix_modified()) ) + { + const std::string& preset_name = wxGetApp().preset_bundle->filaments.get_preset_name_by_alias(selected_preset); + wxGetApp().get_tab(m_type)->select_preset(preset_name); + } + } + }); +} + +PlaterPresetComboBox::~PlaterPresetComboBox() +{ + if (edit_btn) + edit_btn->Destroy(); +} + +bool PlaterPresetComboBox::switch_to_tab() +{ + Tab* tab = wxGetApp().get_tab(m_type); + if (!tab) + return false; + + int page_id = wxGetApp().tab_panel()->FindPage(tab); + if (page_id == wxNOT_FOUND) + return false; + + wxGetApp().tab_panel()->SetSelection(page_id); + // Switch to Settings NotePad + wxGetApp().mainframe->select_tab(); + return true; +} + +void PlaterPresetComboBox::show_add_menu() +{ + wxMenu* menu = new wxMenu(); + + append_menu_item(menu, wxID_ANY, _L("Add/Remove presets"), "", + [this](wxCommandEvent&) { + wxTheApp->CallAfter([]() { wxGetApp().run_wizard(ConfigWizard::RR_USER, ConfigWizard::SP_PRINTERS); }); + }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); + + append_menu_item(menu, wxID_ANY, _L("Add physical printer"), "", + [this](wxCommandEvent&) { + PhysicalPrinterDialog dlg(wxEmptyString); + if (dlg.ShowModal() == wxID_OK) + update(); + }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); + + wxGetApp().plater()->PopupMenu(menu); +} + +void PlaterPresetComboBox::show_edit_menu() +{ + wxMenu* menu = new wxMenu(); + + append_menu_item(menu, wxID_ANY, _L("Edit preset"), "", + [this](wxCommandEvent&) { this->switch_to_tab(); }, "cog", menu, []() { return true; }, wxGetApp().plater()); + + if (this->is_selected_physical_printer()) { + append_menu_item(menu, wxID_ANY, _L("Edit physical printer"), "", + [this](wxCommandEvent&) { this->edit_physical_printer(); }, "cog", menu, []() { return true; }, wxGetApp().plater()); + + append_menu_item(menu, wxID_ANY, _L("Delete physical printer"), "", + [this](wxCommandEvent&) { this->del_physical_printer(); }, "cross", menu, []() { return true; }, wxGetApp().plater()); + } + else + append_menu_item(menu, wxID_ANY, _L("Add/Remove presets"), "", + [this](wxCommandEvent&) { + wxTheApp->CallAfter([]() { wxGetApp().run_wizard(ConfigWizard::RR_USER, ConfigWizard::SP_PRINTERS); }); + }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); + + append_menu_item(menu, wxID_ANY, _L("Add physical printer"), "", + [this](wxCommandEvent&) { this->add_physical_printer(); }, "edit_uni", menu, []() { return true; }, wxGetApp().plater()); + + wxGetApp().plater()->PopupMenu(menu); +} + +// Only the compatible presets are shown. +// If an incompatible preset is selected, it is shown as well. +void PlaterPresetComboBox::update() +{ + if (m_type == Preset::TYPE_FILAMENT && + (m_preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA || + m_preset_bundle->filament_presets.size() <= (size_t)m_extruder_idx) ) + return; + + // Otherwise fill in the list from scratch. + this->Freeze(); + this->Clear(); + invalidate_selection(); + + const Preset* selected_filament_preset; + std::string extruder_color; + if (m_type == Preset::TYPE_FILAMENT) + { + unsigned char rgb[3]; + extruder_color = m_preset_bundle->printers.get_edited_preset().config.opt_string("extruder_colour", (unsigned int)m_extruder_idx); + if (!bitmap_cache().parse_color(extruder_color, rgb)) + // Extruder color is not defined. + extruder_color.clear(); + selected_filament_preset = m_collection->find_preset(m_preset_bundle->filament_presets[m_extruder_idx]); + assert(selected_filament_preset); + } + + bool has_selection = m_collection->get_selected_idx() != size_t(-1); + const Preset* selected_preset = m_type == Preset::TYPE_FILAMENT ? selected_filament_preset : has_selection ? &m_collection->get_selected_preset() : nullptr; + // Show wide icons if the currently selected preset is not compatible with the current printer, + // and draw a red flag in front of the selected preset. + bool wide_icons = selected_preset && !selected_preset->is_compatible; + + std::map nonsys_presets; + + wxString selected_user_preset = ""; + wxString tooltip = ""; + const std::deque& presets = m_collection->get_presets(); + + if (!presets.front().is_visible) + this->set_label_marker(this->Append(separator(L("System presets")), wxNullBitmap)); + + for (size_t i = presets.front().is_visible ? 0 : m_collection->num_default_presets(); i < presets.size(); ++i) + { + const Preset& preset = presets[i]; + bool is_selected = m_type == Preset::TYPE_FILAMENT ? + m_preset_bundle->filament_presets[m_extruder_idx] == preset.name : + // The case, when some physical printer is selected + m_type == Preset::TYPE_PRINTER && m_preset_bundle->physical_printers.has_selection() ? false : + i == m_collection->get_selected_idx(); + + if (!preset.is_visible || (!preset.is_compatible && !is_selected)) + continue; + + std::string bitmap_key, filament_rgb, extruder_rgb; + std::string bitmap_type_name = bitmap_key = m_type == Preset::TYPE_PRINTER && preset.printer_technology() == ptSLA ? "sla_printer" : m_main_bitmap_name; + + bool single_bar = false; + if (m_type == Preset::TYPE_FILAMENT) + { + // Assign an extruder color to the selected item if the extruder color is defined. + filament_rgb = is_selected ? selected_filament_preset->config.opt_string("filament_colour", 0) : + preset.config.opt_string("filament_colour", 0); + extruder_rgb = (is_selected && !extruder_color.empty()) ? extruder_color : filament_rgb; + single_bar = filament_rgb == extruder_rgb; + + bitmap_key += single_bar ? filament_rgb : filament_rgb + extruder_rgb; + } + + wxBitmap* bmp = get_bmp(bitmap_key, wide_icons, bitmap_type_name, + preset.is_compatible, preset.is_system || preset.is_default, + single_bar, filament_rgb, extruder_rgb); + assert(bmp); + + const std::string name = preset.alias.empty() ? preset.name : preset.alias; + if (preset.is_default || preset.is_system) { + Append(wxString::FromUTF8((name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp); + validate_selection(is_selected); + if (is_selected) + tooltip = wxString::FromUTF8(preset.name.c_str()); + } + else + { + nonsys_presets.emplace(wxString::FromUTF8((name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), bmp); + if (is_selected) { + selected_user_preset = wxString::FromUTF8((name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()); + tooltip = wxString::FromUTF8(preset.name.c_str()); + } + } + if (i + 1 == m_collection->num_default_presets()) + set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); + } + if (!nonsys_presets.empty()) + { + set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); + for (std::map::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { + Append(it->first, *it->second); + validate_selection(it->first == selected_user_preset); + } + } + + if (m_type == Preset::TYPE_PRINTER) + { + // add Physical printers, if any exists + if (!m_preset_bundle->physical_printers.empty()) { + set_label_marker(Append(separator(L("Physical printers")), wxNullBitmap)); + const PhysicalPrinterCollection& ph_printers = m_preset_bundle->physical_printers; + + for (PhysicalPrinterCollection::ConstIterator it = ph_printers.begin(); it != ph_printers.end(); ++it) { + for (const std::string preset_name : it->get_preset_names()) { + Preset* preset = m_collection->find_preset(preset_name); + if (!preset) + continue; + std::string main_icon_name, bitmap_key = main_icon_name = preset->printer_technology() == ptSLA ? "sla_printer" : m_main_bitmap_name; + wxBitmap* bmp = get_bmp(main_icon_name, wide_icons, main_icon_name); + assert(bmp); + + set_label_marker(Append(wxString::FromUTF8((it->get_full_name(preset_name) + (preset->is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp), LABEL_ITEM_PHYSICAL_PRINTER); + validate_selection(ph_printers.is_selected(it, preset_name)); + } + } + } + } + + if (m_type == Preset::TYPE_PRINTER || m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) { + wxBitmap* bmp = get_bmp("edit_preset_list", wide_icons, "edit_uni"); + assert(bmp); + + if (m_type == Preset::TYPE_FILAMENT) + set_label_marker(Append(separator(L("Add/Remove filaments")), *bmp), LABEL_ITEM_WIZARD_FILAMENTS); + else if (m_type == Preset::TYPE_SLA_MATERIAL) + set_label_marker(Append(separator(L("Add/Remove materials")), *bmp), LABEL_ITEM_WIZARD_MATERIALS); + else + set_label_marker(Append(separator(L("Add/Remove printers")), *bmp), LABEL_ITEM_WIZARD_PRINTERS); + } + + update_selection(); + Thaw(); + + if (!tooltip.IsEmpty()) + SetToolTip(tooltip); + + // Update control min size after rescale (changed Display DPI under MSW) + if (GetMinWidth() != 20 * m_em_unit) + SetMinSize(wxSize(20 * m_em_unit, GetSize().GetHeight())); +} + +void PlaterPresetComboBox::msw_rescale() +{ + PresetComboBox::msw_rescale(); + edit_btn->msw_rescale(); +} + + +// --------------------------------- +// *** TabPresetComboBox *** +// --------------------------------- + +TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type) : + PresetComboBox(parent, preset_type, wxSize(35 * wxGetApp().em_unit(), -1)) +{ + Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { + // see https://github.com/prusa3d/PrusaSlicer/issues/3889 + // Under OSX: in case of use of a same names written in different case (like "ENDER" and "Ender") + // m_presets_choice->GetSelection() will return first item, because search in PopupListCtrl is case-insensitive. + // So, use GetSelection() from event parameter + auto selected_item = evt.GetSelection(); + + auto marker = reinterpret_cast(this->GetClientData(selected_item)); + if (marker >= LABEL_ITEM_DISABLED && marker < LABEL_ITEM_MAX) { + this->SetSelection(this->m_last_selected); + if (marker == LABEL_ITEM_WIZARD_PRINTERS) + wxTheApp->CallAfter([this]() { + wxGetApp().run_wizard(ConfigWizard::RR_USER, ConfigWizard::SP_PRINTERS); + + // update combobox if its parent is a PhysicalPrinterDialog + PhysicalPrinterDialog* parent = dynamic_cast(this->GetParent()); + if (parent != nullptr) + update(); + }); + } + else if (on_selection_changed && (m_last_selected != selected_item || m_collection->current_is_dirty()) ) { + m_last_selected = selected_item; + on_selection_changed(selected_item); + } + + evt.StopPropagation(); + }); +} + +// Update the choice UI from the list of presets. +// If show_incompatible, all presets are shown, otherwise only the compatible presets are shown. +// If an incompatible preset is selected, it is shown as well. +void TabPresetComboBox::update() +{ + Freeze(); + Clear(); + invalidate_selection(); + + const std::deque& presets = m_collection->get_presets(); + + std::map> nonsys_presets; + wxString selected = ""; + if (!presets.front().is_visible) + set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); + size_t idx_selected = m_collection->get_selected_idx(); + + if (m_type == Preset::TYPE_PRINTER && m_preset_bundle->physical_printers.has_selection()) { + std::string sel_preset_name = m_preset_bundle->physical_printers.get_selected_printer_preset_name(); + Preset* preset = m_collection->find_preset(sel_preset_name); + if (!preset) + m_preset_bundle->physical_printers.unselect_printer(); + } + + for (size_t i = presets.front().is_visible ? 0 : m_collection->num_default_presets(); i < presets.size(); ++i) + { + const Preset& preset = presets[i]; + if (!preset.is_visible || (!show_incompatible && !preset.is_compatible && i != idx_selected)) + continue; + + // marker used for disable incompatible printer models for the selected physical printer + bool is_enabled = true; + + std::string bitmap_key = "tab"; + if (m_type == Preset::TYPE_PRINTER) { + bitmap_key += "_printer"; + if (preset.printer_technology() == ptSLA) + bitmap_key += "_sla"; + } + std::string main_icon_name = m_type == Preset::TYPE_PRINTER && preset.printer_technology() == ptSLA ? "sla_printer" : m_main_bitmap_name; + + wxBitmap* bmp = get_bmp(bitmap_key, main_icon_name, "lock_closed", is_enabled, preset.is_compatible, preset.is_system || preset.is_default); + assert(bmp); + + if (preset.is_default || preset.is_system) { + int item_id = Append(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp); + if (!is_enabled) + set_label_marker(item_id, LABEL_ITEM_DISABLED); + validate_selection(i == idx_selected); + } + else + { + std::pair pair(bmp, is_enabled); + nonsys_presets.emplace(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), std::pair(bmp, is_enabled)); + if (i == idx_selected) + selected = wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()); + } + if (i + 1 == m_collection->num_default_presets()) + set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); + } + if (!nonsys_presets.empty()) + { + set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); + for (std::map>::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { + int item_id = Append(it->first, *it->second.first); + bool is_enabled = it->second.second; + if (!is_enabled) + set_label_marker(item_id, LABEL_ITEM_DISABLED); + validate_selection(it->first == selected); + } + } + + if (m_type == Preset::TYPE_PRINTER) + { + // add Physical printers, if any exists + if (!m_preset_bundle->physical_printers.empty()) { + set_label_marker(Append(separator(L("Physical printers")), wxNullBitmap)); + const PhysicalPrinterCollection& ph_printers = m_preset_bundle->physical_printers; + + for (PhysicalPrinterCollection::ConstIterator it = ph_printers.begin(); it != ph_printers.end(); ++it) { + for (const std::string preset_name : it->get_preset_names()) { + Preset* preset = m_collection->find_preset(preset_name); + if (!preset) + continue; + std::string main_icon_name = preset->printer_technology() == ptSLA ? "sla_printer" : m_main_bitmap_name; + + wxBitmap* bmp = get_bmp(main_icon_name, main_icon_name, "", true, true, false); + assert(bmp); + + set_label_marker(Append(wxString::FromUTF8((it->get_full_name(preset_name) + (preset->is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp), LABEL_ITEM_PHYSICAL_PRINTER); + validate_selection(ph_printers.is_selected(it, preset_name)); + } + } + } + + // add "Add/Remove printers" item + std::string icon_name = "edit_uni"; + wxBitmap* bmp = get_bmp("edit_preset_list, tab,", icon_name, ""); + assert(bmp); + + set_label_marker(Append(separator(L("Add/Remove printers")), *bmp), LABEL_ITEM_WIZARD_PRINTERS); + } + + update_selection(); + Thaw(); +} + +void TabPresetComboBox::msw_rescale() +{ + PresetComboBox::msw_rescale(); + wxSize sz = wxSize(35 * m_em_unit, -1); + SetMinSize(sz); + SetSize(sz); +} + +void TabPresetComboBox::update_dirty() +{ + // 1) Update the dirty flag of the current preset. + m_collection->update_dirty(); + + // 2) Update the labels. + wxWindowUpdateLocker noUpdates(this); + for (unsigned int ui_id = 0; ui_id < GetCount(); ++ui_id) { + auto marker = reinterpret_cast(this->GetClientData(ui_id)); + if (marker >= LABEL_ITEM_MARKER) + continue; + + std::string old_label = GetString(ui_id).utf8_str().data(); + std::string preset_name = Preset::remove_suffix_modified(old_label); + std::string ph_printer_name; + + if (marker == LABEL_ITEM_PHYSICAL_PRINTER) { + ph_printer_name = PhysicalPrinter::get_short_name(preset_name); + preset_name = PhysicalPrinter::get_preset_name(preset_name); + } + + const Preset* preset = m_collection->find_preset(preset_name, false); + if (preset) { + std::string new_label = preset->is_dirty ? preset->name + Preset::suffix_modified() : preset->name; + + if (marker == LABEL_ITEM_PHYSICAL_PRINTER) + new_label = ph_printer_name + PhysicalPrinter::separator() + new_label; + + if (old_label != new_label) + SetString(ui_id, wxString::FromUTF8(new_label.c_str())); + } + } +#ifdef __APPLE__ + // wxWidgets on OSX do not upload the text of the combo box line automatically. + // Force it to update by re-selecting. + SetSelection(GetSelection()); +#endif /* __APPLE __ */ +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp new file mode 100644 index 0000000000..2967ff2633 --- /dev/null +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -0,0 +1,197 @@ +#ifndef slic3r_PresetComboBoxes_hpp_ +#define slic3r_PresetComboBoxes_hpp_ + +#include +#include + +#include "libslic3r/Preset.hpp" +#include "wxExtensions.hpp" +#include "GUI_Utils.hpp" + +class wxString; +class wxTextCtrl; +class wxStaticText; +class ScalableButton; +class wxBoxSizer; +class wxComboBox; +class wxStaticBitmap; +class wxRadioBox; + +namespace Slic3r { + +namespace GUI { + +class BitmapCache; + +// --------------------------------- +// *** PresetComboBox *** +// --------------------------------- + +// BitmapComboBox used to presets list on Sidebar and Tabs +class PresetComboBox : public wxBitmapComboBox +{ +public: + PresetComboBox(wxWindow* parent, Preset::Type preset_type, const wxSize& size = wxDefaultSize); + ~PresetComboBox(); + + enum LabelItemType { + LABEL_ITEM_PHYSICAL_PRINTER = 0xffffff01, + LABEL_ITEM_DISABLED, + LABEL_ITEM_MARKER, + LABEL_ITEM_PHYSICAL_PRINTERS, + LABEL_ITEM_WIZARD_PRINTERS, + LABEL_ITEM_WIZARD_FILAMENTS, + LABEL_ITEM_WIZARD_MATERIALS, + + LABEL_ITEM_MAX, + }; + + void set_label_marker(int item, LabelItemType label_item_type = LABEL_ITEM_MARKER); + bool set_printer_technology(PrinterTechnology pt); + + void set_selection_changed_function(std::function sel_changed) { on_selection_changed = sel_changed; } + + bool is_selected_physical_printer(); + + // Return true, if physical printer was selected + // and next internal selection was accomplished + bool selection_is_changed_according_to_physical_printers(); + + void update(std::string select_preset); + + void edit_physical_printer(); + void add_physical_printer(); + bool del_physical_printer(const wxString& note_string = wxEmptyString); + + virtual void update(); + virtual void msw_rescale(); + +protected: + typedef std::size_t Marker; + std::function on_selection_changed { nullptr }; + + Preset::Type m_type; + std::string m_main_bitmap_name; + + PresetBundle* m_preset_bundle {nullptr}; + PresetCollection* m_collection {nullptr}; + + // Caching bitmaps for the all bitmaps, used in preset comboboxes + static BitmapCache& bitmap_cache(); + + // Indicator, that the preset is compatible with the selected printer. + ScalableBitmap m_bitmapCompatible; + // Indicator, that the preset is NOT compatible with the selected printer. + ScalableBitmap m_bitmapIncompatible; + + int m_last_selected; + int m_em_unit; + + // parameters for an icon's drawing + int icon_height; + int norm_icon_width; + int thin_icon_width; + int wide_icon_width; + int space_icon_width; + int thin_space_icon_width; + int wide_space_icon_width; + + PrinterTechnology printer_technology {ptAny}; + + void invalidate_selection(); + void validate_selection(bool predicate = false); + void update_selection(); + +#ifdef __linux__ + static const char* separator_head() { return "------- "; } + static const char* separator_tail() { return " -------"; } +#else // __linux__ + static const char* separator_head() { return "————— "; } + static const char* separator_tail() { return " —————"; } +#endif // __linux__ + static wxString separator(const std::string& label); + + wxBitmap* get_bmp( std::string bitmap_key, bool wide_icons, const std::string& main_icon_name, + bool is_compatible = true, bool is_system = false, bool is_single_bar = false, + std::string filament_rgb = "", std::string extruder_rgb = ""); + + wxBitmap* get_bmp( std::string bitmap_key, const std::string& main_icon_name, const std::string& next_icon_name, + bool is_enabled = true, bool is_compatible = true, bool is_system = false); + +#ifdef __APPLE__ + /* For PresetComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina + * (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean + * "please scale this to such and such" but rather + * "the wxImage is already sized for backing scale such and such". ) + * Unfortunately, the constructor changes the size of wxBitmap too. + * Thus We need to use unscaled size value for bitmaps that we use + * to avoid scaled size of control items. + * For this purpose control drawing methods and + * control size calculation methods (virtual) are overridden. + **/ + virtual bool OnAddBitmap(const wxBitmap& bitmap) override; + virtual void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override; +#endif + +private: + void fill_width_height(); +}; + + +// --------------------------------- +// *** PlaterPresetComboBox *** +// --------------------------------- + +class PlaterPresetComboBox : public PresetComboBox +{ +public: + PlaterPresetComboBox(wxWindow *parent, Preset::Type preset_type); + ~PlaterPresetComboBox(); + + ScalableButton* edit_btn { nullptr }; + + void set_extruder_idx(const int extr_idx) { m_extruder_idx = extr_idx; } + int get_extruder_idx() const { return m_extruder_idx; } + + bool switch_to_tab(); + void show_add_menu(); + void show_edit_menu(); + + void update() override; + void msw_rescale() override; + +private: + int m_extruder_idx = -1; +}; + + +// --------------------------------- +// *** TabPresetComboBox *** +// --------------------------------- + +class TabPresetComboBox : public PresetComboBox +{ + bool show_incompatible {false}; + bool m_enable_all {false}; + +public: + TabPresetComboBox(wxWindow *parent, Preset::Type preset_type); + ~TabPresetComboBox() {} + void set_show_incompatible_presets(bool show_incompatible_presets) { + show_incompatible = show_incompatible_presets; + } + + void update() override; + void update_dirty(); + void msw_rescale() override; + + void set_enable_all(bool enable=true) { m_enable_all = enable; } + + PresetCollection* presets() const { return m_collection; } + Preset::Type type() const { return m_type; } +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/PresetHints.cpp b/src/slic3r/GUI/PresetHints.cpp index 24afeb526e..c40c4c6acb 100644 --- a/src/slic3r/GUI/PresetHints.cpp +++ b/src/slic3r/GUI/PresetHints.cpp @@ -4,7 +4,6 @@ #include "libslic3r/Slicing.hpp" #include "libslic3r/libslic3r.h" -#include "PresetBundle.hpp" #include "PresetHints.hpp" #include diff --git a/src/slic3r/GUI/PresetHints.hpp b/src/slic3r/GUI/PresetHints.hpp index be049c2c87..a61310f408 100644 --- a/src/slic3r/GUI/PresetHints.hpp +++ b/src/slic3r/GUI/PresetHints.hpp @@ -3,7 +3,7 @@ #include -#include "PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" namespace Slic3r { diff --git a/src/slic3r/GUI/PrintHostDialogs.cpp b/src/slic3r/GUI/PrintHostDialogs.cpp index bae60e47f9..96299c3813 100644 --- a/src/slic3r/GUI/PrintHostDialogs.cpp +++ b/src/slic3r/GUI/PrintHostDialogs.cpp @@ -15,11 +15,11 @@ #include "GUI.hpp" #include "GUI_App.hpp" -#include "AppConfig.hpp" #include "MsgDialog.hpp" #include "I18N.hpp" #include "../Utils/PrintHost.hpp" #include "wxExtensions.hpp" +#include "libslic3r/AppConfig.hpp" namespace fs = boost::filesystem; @@ -140,8 +140,6 @@ PrintHostQueueDialog::PrintHostQueueDialog(wxWindow *parent) { const auto em = GetTextExtent("m").x; - SetSize(wxSize(HEIGHT * em, WIDTH * em)); - auto *topsizer = new wxBoxSizer(wxVERTICAL); job_list = new wxDataViewListCtrl(this, wxID_ANY); @@ -168,6 +166,8 @@ PrintHostQueueDialog::PrintHostQueueDialog(wxWindow *parent) topsizer->Add(btnsizer, 0, wxEXPAND); SetSizer(topsizer); + SetSize(wxSize(HEIGHT * em, WIDTH * em)); + job_list->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxDataViewEvent&) { on_list_select(); }); btn_cancel->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index d67ac4a22f..d865fe3476 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -393,6 +393,7 @@ bool RemovableDriveManager::set_and_verify_last_save_path(const std::string &pat #endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS m_last_save_path = this->get_removable_drive_from_path(path); + m_exporting_finished = false; return ! m_last_save_path.empty(); } @@ -407,6 +408,7 @@ RemovableDriveManager::RemovableDrivesStatus RemovableDriveManager::status() } if (! out.has_eject) m_last_save_path.clear(); + out.has_eject = out.has_eject && m_exporting_finished; return out; } diff --git a/src/slic3r/GUI/RemovableDriveManager.hpp b/src/slic3r/GUI/RemovableDriveManager.hpp index e1a8d6faf1..26ee12e40c 100644 --- a/src/slic3r/GUI/RemovableDriveManager.hpp +++ b/src/slic3r/GUI/RemovableDriveManager.hpp @@ -83,7 +83,7 @@ public: // Public to be accessible from RemovableDriveManagerMM::on_device_unmount OSX notification handler. // It would be better to make this method private and friend to RemovableDriveManagerMM, but RemovableDriveManagerMM is an ObjectiveC class. void update(); - + void set_exporting_finished(bool b) { m_exporting_finished = b; } #ifdef _WIN32 // Called by Win32 Volume arrived / detached callback. void volumes_changed(); @@ -121,7 +121,9 @@ private: std::vector::const_iterator find_last_save_path_drive_data() const; // Set with set_and_verify_last_save_path() to a removable drive path to be ejected. std::string m_last_save_path; - + // Verifies that exporting was finished so drive can be ejected. + // Set false by set_and_verify_last_save_path() that is called just before exporting. + bool m_exporting_finished; #if __APPLE__ void register_window_osx(); void unregister_window_osx(); diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp new file mode 100644 index 0000000000..79ce296b8d --- /dev/null +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -0,0 +1,368 @@ +#include "SavePresetDialog.hpp" + +#include +#include +#include +#include + +#include +#include +#include + +#include "libslic3r/PresetBundle.hpp" + +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "format.hpp" +#include "Tab.hpp" + +using Slic3r::GUI::format_wxstr; + +namespace Slic3r { +namespace GUI { + +#define BORDER_W 10 + + +//----------------------------------------------- +// SavePresetDialog::Item +//----------------------------------------------- + +SavePresetDialog::Item::Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent): + m_type(type), + m_parent(parent) +{ + Tab* tab = wxGetApp().get_tab(m_type); + assert(tab); + m_presets = tab->get_presets(); + + const Preset& sel_preset = m_presets->get_selected_preset(); + std::string preset_name = sel_preset.is_default ? "Untitled" : + sel_preset.is_system ? (boost::format(("%1% - %2%")) % sel_preset.name % suffix).str() : + sel_preset.name; + + // if name contains extension + if (boost::iends_with(preset_name, ".ini")) { + size_t len = preset_name.length() - 4; + preset_name.resize(len); + } + + std::vector values; + for (const Preset& preset : *m_presets) { + if (preset.is_default || preset.is_system || preset.is_external) + continue; + values.push_back(preset.name); + } + + wxStaticText* label_top = new wxStaticText(m_parent, wxID_ANY, from_u8((boost::format(_utf8(L("Save %s as:"))) % into_u8(tab->title())).str())); + + m_valid_bmp = new wxStaticBitmap(m_parent, wxID_ANY, create_scaled_bitmap("tick_mark", m_parent)); + + m_combo = new wxComboBox(m_parent, wxID_ANY, from_u8(preset_name), wxDefaultPosition, wxSize(35 * wxGetApp().em_unit(), -1)); + for (const std::string& value : values) + m_combo->Append(from_u8(value)); + + m_combo->Bind(wxEVT_TEXT, [this](wxCommandEvent&) { update(); }); +#ifdef __WXOSX__ + // Under OSX wxEVT_TEXT wasn't invoked after change selection in combobox, + // So process wxEVT_COMBOBOX too + m_combo->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { update(); }); +#endif //__WXOSX__ + + m_valid_label = new wxStaticText(m_parent, wxID_ANY, ""); + m_valid_label->SetFont(wxGetApp().bold_font()); + + wxBoxSizer* combo_sizer = new wxBoxSizer(wxHORIZONTAL); + combo_sizer->Add(m_valid_bmp, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, BORDER_W); + combo_sizer->Add(m_combo, 1, wxEXPAND, BORDER_W); + + sizer->Add(label_top, 0, wxEXPAND | wxTOP| wxBOTTOM, BORDER_W); + sizer->Add(combo_sizer, 0, wxEXPAND | wxBOTTOM, BORDER_W); + sizer->Add(m_valid_label, 0, wxEXPAND | wxLEFT, 3*BORDER_W); + + if (m_type == Preset::TYPE_PRINTER) + m_parent->add_info_for_edit_ph_printer(sizer); + + update(); +} + +void SavePresetDialog::Item::update() +{ + m_preset_name = into_u8(m_combo->GetValue()); + + m_valid_type = Valid; + wxString info_line; + + const char* unusable_symbols = "<>[]:/\\|?*\""; + + const std::string unusable_suffix = PresetCollection::get_suffix_modified();//"(modified)"; + for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { + if (m_preset_name.find_first_of(unusable_symbols[i]) != std::string::npos) { + info_line = _L("The supplied name is not valid;") + "\n" + + _L("the following characters are not allowed:") + " " + unusable_symbols; + m_valid_type = NoValid; + break; + } + } + + if (m_valid_type == Valid && m_preset_name.find(unusable_suffix) != std::string::npos) { + info_line = _L("The supplied name is not valid;") + "\n" + + _L("the following suffix is not allowed:") + "\n\t" + + from_u8(PresetCollection::get_suffix_modified()); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && m_preset_name == "- default -") { + info_line = _L("The supplied name is not available."); + m_valid_type = NoValid; + } + + const Preset* existing = m_presets->find_preset(m_preset_name, false); + if (m_valid_type == Valid && existing && (existing->is_default || existing->is_system)) { + info_line = _L("Cannot overwrite a system profile."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && existing && (existing->is_external)) { + info_line = _L("Cannot overwrite an external profile."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && existing && m_preset_name != m_presets->get_selected_preset_name()) + { + info_line = from_u8((boost::format(_u8L("Preset with name \"%1%\" already exists.")) % m_preset_name).str()); + if (!existing->is_compatible) + info_line += "\n" + _L("And selected preset is imcopatible with selected printer."); + info_line += "\n" + _L("Note: This preset will be replaced after saving"); + m_valid_type = Warning; + } + + if (m_valid_type == Valid && m_preset_name.empty()) { + info_line = _L("The empty name is not available."); + m_valid_type = NoValid; + } + + m_valid_label->SetLabel(info_line); + m_valid_label->Show(!info_line.IsEmpty()); + + update_valid_bmp(); + + if (m_type == Preset::TYPE_PRINTER) + m_parent->update_info_for_edit_ph_printer(m_preset_name); + + m_parent->layout(); +} + +void SavePresetDialog::Item::update_valid_bmp() +{ + std::string bmp_name = m_valid_type == Warning ? "exclamation" : + m_valid_type == NoValid ? "cross" : "tick_mark" ; + m_valid_bmp->SetBitmap(create_scaled_bitmap(bmp_name, m_parent)); +} + +void SavePresetDialog::Item::accept() +{ + if (m_valid_type == Warning) + m_presets->delete_preset(m_preset_name); +} + + +//----------------------------------------------- +// SavePresetDialog +//----------------------------------------------- + +SavePresetDialog::SavePresetDialog(Preset::Type type, std::string suffix) + : DPIDialog(nullptr, wxID_ANY, _L("Save preset"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING | wxRESIZE_BORDER) +{ + build(std::vector{type}, suffix); +} + +SavePresetDialog::SavePresetDialog(std::vector types, std::string suffix) + : DPIDialog(nullptr, wxID_ANY, _L("Save preset"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING | wxRESIZE_BORDER) +{ + build(types, suffix); +} + +SavePresetDialog::~SavePresetDialog() +{ + for (auto item : m_items) { + delete item; + } +} + +void SavePresetDialog::build(std::vector types, std::string suffix) +{ + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__) + // ys_FIXME! temporary workaround for correct font scaling + // Because of from wxWidgets 3.1.3 auto rescaling is implemented for the Fonts, + // From the very beginning set dialog font to the wxSYS_DEFAULT_GUI_FONT + this->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); +#endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT + + if (suffix.empty()) + suffix = _CTX_utf8(L_CONTEXT("Copy", "PresetName"), "PresetName"); + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + m_presets_sizer = new wxBoxSizer(wxVERTICAL); + + // Add first item + for (Preset::Type type : types) + AddItem(type, suffix); + + // Add dialog's buttons + wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); + wxButton* btnOK = static_cast(this->FindWindowById(wxID_OK, this)); + btnOK->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { accept(); }); + btnOK->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(enable_ok_btn()); }); + + topSizer->Add(m_presets_sizer, 0, wxEXPAND | wxALL, BORDER_W); + topSizer->Add(btns, 0, wxEXPAND | wxALL, BORDER_W); + + SetSizer(topSizer); + topSizer->SetSizeHints(this); + + this->CenterOnScreen(); +} + +void SavePresetDialog::AddItem(Preset::Type type, const std::string& suffix) +{ + m_items.emplace_back(new Item{type, suffix, m_presets_sizer, this}); +} + +std::string SavePresetDialog::get_name() +{ + return m_items.front()->preset_name(); +} + +std::string SavePresetDialog::get_name(Preset::Type type) +{ + for (const Item* item : m_items) + if (item->type() == type) + return item->preset_name(); + return ""; +} + +bool SavePresetDialog::enable_ok_btn() const +{ + for (const Item* item : m_items) + if (!item->is_valid()) + return false; + + return true; +} + +void SavePresetDialog::add_info_for_edit_ph_printer(wxBoxSizer* sizer) +{ + PhysicalPrinterCollection& printers = wxGetApp().preset_bundle->physical_printers; + m_ph_printer_name = printers.get_selected_printer_name(); + m_old_preset_name = printers.get_selected_printer_preset_name(); + + wxString msg_text = from_u8((boost::format(_u8L("You have selected physical printer \"%1%\" \n" + "with related printer preset \"%2%\"")) % + m_ph_printer_name % m_old_preset_name).str()); + m_label = new wxStaticText(this, wxID_ANY, msg_text); + m_label->SetFont(wxGetApp().bold_font()); + + wxString choices[] = {"","",""}; + + m_action_radio_box = new wxRadioBox(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, + WXSIZEOF(choices), choices, 3, wxRA_SPECIFY_ROWS); + m_action_radio_box->SetSelection(0); + m_action_radio_box->Bind(wxEVT_RADIOBOX, [this](wxCommandEvent& e) { + m_action = (ActionType)e.GetSelection(); }); + m_action = ChangePreset; + + m_radio_sizer = new wxBoxSizer(wxHORIZONTAL); + m_radio_sizer->Add(m_action_radio_box, 1, wxEXPAND | wxTOP, 2*BORDER_W); + + sizer->Add(m_label, 0, wxEXPAND | wxLEFT | wxTOP, 3*BORDER_W); + sizer->Add(m_radio_sizer, 1, wxEXPAND | wxLEFT, 3*BORDER_W); +} + +void SavePresetDialog::update_info_for_edit_ph_printer(const std::string& preset_name) +{ + bool show = wxGetApp().preset_bundle->physical_printers.has_selection() && m_old_preset_name != preset_name; + + m_label->Show(show); + m_radio_sizer->ShowItems(show); + if (!show) { + this->SetMinSize(wxSize(100,50)); + return; + } + + wxString msg_text = from_u8((boost::format(_u8L("What would you like to do with \"%1%\" preset after saving?")) % preset_name).str()); + m_action_radio_box->SetLabel(msg_text); + + wxString choices[] = { from_u8((boost::format(_u8L("Change \"%1%\" to \"%2%\" for this physical printer \"%3%\"")) % m_old_preset_name % preset_name % m_ph_printer_name).str()), + from_u8((boost::format(_u8L("Add \"%1%\" as a next preset for the the physical printer \"%2%\"")) % preset_name % m_ph_printer_name).str()), + from_u8((boost::format(_u8L("Just switch to \"%1%\" preset")) % preset_name).str()) }; + + int n = 0; + for(const wxString& label: choices) + m_action_radio_box->SetString(n++, label); +} + +void SavePresetDialog::layout() +{ + this->Layout(); + this->Fit(); +} + +void SavePresetDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + const int& em = em_unit(); + + msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL }); + + for (Item* item : m_items) + item->update_valid_bmp(); + + //const wxSize& size = wxSize(45 * em, 35 * em); + SetMinSize(/*size*/wxSize(100, 50)); + + Fit(); + Refresh(); +} + +void SavePresetDialog::update_physical_printers(const std::string& preset_name) +{ + if (m_action == UndefAction) + return; + + PhysicalPrinterCollection& physical_printers = wxGetApp().preset_bundle->physical_printers; + if (!physical_printers.has_selection()) + return; + + std::string printer_preset_name = physical_printers.get_selected_printer_preset_name(); + + if (m_action == Switch) + // unselect physical printer, if it was selected + physical_printers.unselect_printer(); + else + { + PhysicalPrinter printer = physical_printers.get_selected_printer(); + + if (m_action == ChangePreset) + printer.delete_preset(printer_preset_name); + + if (printer.add_preset(preset_name)) + physical_printers.save_printer(printer); + + physical_printers.select_printer(printer.get_full_name(preset_name)); + } +} + +void SavePresetDialog::accept() +{ + for (Item* item : m_items) { + item->accept(); + if (item->type() == Preset::TYPE_PRINTER) + update_physical_printers(item->preset_name()); + } + + EndModal(wxID_OK); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/SavePresetDialog.hpp b/src/slic3r/GUI/SavePresetDialog.hpp new file mode 100644 index 0000000000..61f069c005 --- /dev/null +++ b/src/slic3r/GUI/SavePresetDialog.hpp @@ -0,0 +1,103 @@ +#ifndef slic3r_SavePresetDialog_hpp_ +#define slic3r_SavePresetDialog_hpp_ + +//#include + +#include "libslic3r/Preset.hpp" +#include "wxExtensions.hpp" +#include "GUI_Utils.hpp" + +class wxString; +class wxStaticText; +class wxComboBox; +class wxRadioBox; +class wxStaticBitmap; + +namespace Slic3r { + +namespace GUI { + +class SavePresetDialog : public DPIDialog +{ + enum ActionType + { + ChangePreset, + AddPreset, + Switch, + UndefAction + }; + + struct Item + { + enum ValidationType + { + Valid, + NoValid, + Warning + }; + + Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent); + + void update_valid_bmp(); + void accept(); + + bool is_valid() const { return m_valid_type != NoValid; } + Preset::Type type() const { return m_type; } + std::string preset_name() const { return m_preset_name; } + + private: + Preset::Type m_type; + ValidationType m_valid_type; + std::string m_preset_name; + + SavePresetDialog* m_parent {nullptr}; + wxStaticBitmap* m_valid_bmp {nullptr}; + wxComboBox* m_combo {nullptr}; + wxStaticText* m_valid_label {nullptr}; + + PresetCollection* m_presets {nullptr}; + + void update(); + }; + + std::vector m_items; + + wxBoxSizer* m_presets_sizer {nullptr}; + wxStaticText* m_label {nullptr}; + wxRadioBox* m_action_radio_box {nullptr}; + wxBoxSizer* m_radio_sizer {nullptr}; + ActionType m_action {UndefAction}; + + std::string m_ph_printer_name; + std::string m_old_preset_name; + +public: + + SavePresetDialog(Preset::Type type, std::string suffix = ""); + SavePresetDialog(std::vector types, std::string suffix = ""); + ~SavePresetDialog(); + + void AddItem(Preset::Type type, const std::string& suffix); + + std::string get_name(); + std::string get_name(Preset::Type type); + + bool enable_ok_btn() const; + void add_info_for_edit_ph_printer(wxBoxSizer *sizer); + void update_info_for_edit_ph_printer(const std::string &preset_name); + void layout(); + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + void on_sys_color_changed() override {} + +private: + void build(std::vector types, std::string suffix = ""); + void update_physical_printers(const std::string& preset_name); + void accept(); +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 012af342a8..da9c8fe25d 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -9,10 +9,10 @@ #include "wx/dataview.h" #include "libslic3r/PrintConfig.hpp" +#include "libslic3r/PresetBundle.hpp" #include "GUI_App.hpp" #include "Plater.hpp" #include "Tab.hpp" -#include "PresetBundle.hpp" #define FTS_FUZZY_MATCH_IMPLEMENTATION #include "fts_fuzzy_match.h" @@ -28,12 +28,6 @@ using GUI::into_u8; namespace Search { -// Does our wxWidgets version support markup? -// https://github.com/prusa3d/PrusaSlicer/issues/4282#issuecomment-634676371 -#if wxUSE_MARKUP && wxCHECK_VERSION(3, 1, 1) - #define SEARCH_SUPPORTS_MARKUP -#endif - static char marker_by_type(Preset::Type type, PrinterTechnology pt) { switch(type) { @@ -264,7 +258,7 @@ bool OptionsSearcher::search(const std::string& search, bool force/* = false*/) std::string label_u8 = into_u8(label); std::string label_plain = label_u8; -#ifdef SEARCH_SUPPORTS_MARKUP +#ifdef SUPPORTS_MARKUP boost::replace_all(label_plain, std::string(1, char(ImGui::ColorMarkerStart)), ""); boost::replace_all(label_plain, std::string(1, char(ImGui::ColorMarkerEnd)), ""); #else @@ -327,6 +321,14 @@ const Option& OptionsSearcher::get_option(size_t pos_in_filter) const return options[found[pos_in_filter].option_idx]; } +const Option& OptionsSearcher::get_option(const std::string& opt_key) const +{ + auto it = std::lower_bound(options.begin(), options.end(), Option({ boost::nowide::widen(opt_key) })); + assert(it != options.end()); + + return options[it - options.begin()]; +} + void OptionsSearcher::add_key(const std::string& opt_key, const wxString& group, const wxString& category) { groups_and_categories[opt_key] = GroupAndCategory{group, category}; @@ -442,7 +444,7 @@ SearchDialog::SearchDialog(OptionsSearcher* searcher) wxDataViewTextRenderer* const markupRenderer = new wxDataViewTextRenderer(); -#ifdef SEARCH_SUPPORTS_MARKUP +#ifdef SUPPORTS_MARKUP markupRenderer->EnableMarkup(); #endif diff --git a/src/slic3r/GUI/Search.hpp b/src/slic3r/GUI/Search.hpp index 9701e68088..a57e0d015d 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -14,8 +14,8 @@ #include #include "GUI_Utils.hpp" -#include "Preset.hpp" #include "wxExtensions.hpp" +#include "libslic3r/Preset.hpp" namespace Slic3r { @@ -37,8 +37,8 @@ struct GroupAndCategory { }; struct Option { - bool operator<(const Option& other) const { return other.label > this->label; } - bool operator>(const Option& other) const { return other.label < this->label; } +// bool operator<(const Option& other) const { return other.label > this->label; } + bool operator<(const Option& other) const { return other.opt_key > this->opt_key; } // Fuzzy matching works at a character level. Thus matching with wide characters is a safer bet than with short characters, // though for some languages (Chinese?) it may not work correctly. @@ -116,12 +116,18 @@ public: const FoundOption& operator[](const size_t pos) const noexcept { return found[pos]; } const Option& get_option(size_t pos_in_filter) const; + const Option& get_option(const std::string& opt_key) const; const std::vector& found_options() { return found; } const GroupAndCategory& get_group_and_category (const std::string& opt_key) { return groups_and_categories[opt_key]; } std::string& search_string() { return search_line; } void set_printer_technology(PrinterTechnology pt) { printer_technology = pt; } + + void sort_options_by_opt_key() { + std::sort(options.begin(), options.end(), [](const Option& o1, const Option& o2) { + return o1.opt_key < o2.opt_key; }); + } }; diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 69550748d8..5547589b93 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -16,8 +16,11 @@ #include #include +#if ENABLE_GCODE_VIEWER +#include +#endif // ENABLE_GCODE_VIEWER -static const float UNIFORM_SCALE_COLOR[3] = { 1.0f, 0.38f, 0.0f }; +static const float UNIFORM_SCALE_COLOR[4] = { 0.923f, 0.504f, 0.264f, 1.0f }; namespace Slic3r { namespace GUI { @@ -110,8 +113,10 @@ Selection::Selection() , m_valid(false) , m_scale_factor(1.0f) { +#if !ENABLE_GCODE_VIEWER m_arrow.reset(new GLArrow); m_curved_arrow.reset(new GLCurvedArrow(16)); +#endif // !ENABLE_GCODE_VIEWER this->set_bounding_boxes_dirty(); #if ENABLE_RENDER_SELECTION_CENTER @@ -138,6 +143,10 @@ void Selection::set_volumes(GLVolumePtrs* volumes) // Init shall be called from the OpenGL render function, so that the OpenGL context is initialized! bool Selection::init() { +#if ENABLE_GCODE_VIEWER + m_arrow.init_from(straight_arrow(10.0f, 5.0f, 5.0f, 10.0f, 1.0f)); + m_curved_arrow.init_from(circular_arrow(16, 10.0f, 5.0f, 10.0f, 5.0f, 1.0f)); +#else if (!m_arrow->init()) return false; @@ -147,6 +156,7 @@ bool Selection::init() return false; m_curved_arrow->set_scale(5.0 * Vec3d::Ones()); +#endif //ENABLE_GCODE_VIEWER return true; } @@ -1261,40 +1271,40 @@ void Selection::render_center(bool gizmo_is_dragging) const } #endif // ENABLE_RENDER_SELECTION_CENTER -void Selection::render_sidebar_hints(const std::string& sidebar_field, const Shader& shader) const +void Selection::render_sidebar_hints(const std::string& sidebar_field) const { if (sidebar_field.empty()) return; + GLShaderProgram* shader = nullptr; + if (!boost::starts_with(sidebar_field, "layer")) { - shader.start_using(); + shader = wxGetApp().get_shader("gouraud_light"); + if (shader == nullptr) + return; + + shader->start_using(); glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); - glsafe(::glEnable(GL_LIGHTING)); } glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glPushMatrix()); - if (!boost::starts_with(sidebar_field, "layer")) - { + if (!boost::starts_with(sidebar_field, "layer")) { const Vec3d& center = get_bounding_box().center(); - if (is_single_full_instance() && !wxGetApp().obj_manipul()->get_world_coordinates()) - { + if (is_single_full_instance() && !wxGetApp().obj_manipul()->get_world_coordinates()) { glsafe(::glTranslated(center(0), center(1), center(2))); - if (!boost::starts_with(sidebar_field, "position")) - { + if (!boost::starts_with(sidebar_field, "position")) { Transform3d orient_matrix = Transform3d::Identity(); if (boost::starts_with(sidebar_field, "scale")) orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); - else if (boost::starts_with(sidebar_field, "rotation")) - { + else if (boost::starts_with(sidebar_field, "rotation")) { if (boost::ends_with(sidebar_field, "x")) orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); - else if (boost::ends_with(sidebar_field, "y")) - { + else if (boost::ends_with(sidebar_field, "y")) { const Vec3d& rotation = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_rotation(); if (rotation(0) == 0.0) orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); @@ -1305,21 +1315,16 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field, const Sha glsafe(::glMultMatrixd(orient_matrix.data())); } - } - else if (is_single_volume() || is_single_modifier()) - { + } else if (is_single_volume() || is_single_modifier()) { glsafe(::glTranslated(center(0), center(1), center(2))); Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); if (!boost::starts_with(sidebar_field, "position")) orient_matrix = orient_matrix * (*m_volumes)[*m_list.begin()]->get_volume_transformation().get_matrix(true, false, true, true); glsafe(::glMultMatrixd(orient_matrix.data())); - } - else - { + } else { glsafe(::glTranslated(center(0), center(1), center(2))); - if (requires_local_axes()) - { + if (requires_local_axes()) { Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); glsafe(::glMultMatrixd(orient_matrix.data())); } @@ -1330,20 +1335,15 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field, const Sha render_sidebar_position_hints(sidebar_field); else if (boost::starts_with(sidebar_field, "rotation")) render_sidebar_rotation_hints(sidebar_field); - else if (boost::starts_with(sidebar_field, "scale")) + else if (boost::starts_with(sidebar_field, "scale") || boost::starts_with(sidebar_field, "size")) render_sidebar_scale_hints(sidebar_field); - else if (boost::starts_with(sidebar_field, "size")) - render_sidebar_size_hints(sidebar_field); else if (boost::starts_with(sidebar_field, "layer")) render_sidebar_layers_hints(sidebar_field); glsafe(::glPopMatrix()); if (!boost::starts_with(sidebar_field, "layer")) - { - glsafe(::glDisable(GL_LIGHTING)); - shader.stop_using(); - } + shader->stop_using(); } bool Selection::requires_local_axes() const @@ -1364,12 +1364,12 @@ void Selection::copy_to_clipboard() ModelObject* dst_object = m_clipboard.add_object(); dst_object->name = src_object->name; dst_object->input_file = src_object->input_file; - static_cast(dst_object->config) = static_cast(src_object->config); + dst_object->config.assign_config(src_object->config); dst_object->sla_support_points = src_object->sla_support_points; dst_object->sla_points_status = src_object->sla_points_status; dst_object->sla_drain_holes = src_object->sla_drain_holes; dst_object->layer_config_ranges = src_object->layer_config_ranges; // #ys_FIXME_experiment - dst_object->layer_height_profile = src_object->layer_height_profile; + dst_object->layer_height_profile.assign(src_object->layer_height_profile); dst_object->origin_translation = src_object->origin_translation; for (int i : object.second) @@ -1595,20 +1595,21 @@ void Selection::update_type() } else { + unsigned int sla_volumes_count = 0; + // Note: sla_volumes_count is a count of the selected sla_volumes per object instead of per instance, like a model_volumes_count is + for (unsigned int i : m_list) { + if ((*m_volumes)[i]->volume_idx() < 0) + ++sla_volumes_count; + } + if (m_cache.content.size() == 1) // single object { const ModelObject* model_object = m_model->objects[m_cache.content.begin()->first]; unsigned int model_volumes_count = (unsigned int)model_object->volumes.size(); - unsigned int sla_volumes_count = 0; - for (unsigned int i : m_list) - { - if ((*m_volumes)[i]->volume_idx() < 0) - ++sla_volumes_count; - } - unsigned int volumes_count = model_volumes_count + sla_volumes_count; + unsigned int instances_count = (unsigned int)model_object->instances.size(); unsigned int selected_instances_count = (unsigned int)m_cache.content.begin()->second.size(); - if (volumes_count * instances_count == (unsigned int)m_list.size()) + if (model_volumes_count * instances_count + sla_volumes_count == (unsigned int)m_list.size()) { m_type = SingleFullObject; // ensures the correct mode is selected @@ -1616,7 +1617,7 @@ void Selection::update_type() } else if (selected_instances_count == 1) { - if (volumes_count == (unsigned int)m_list.size()) + if (model_volumes_count + sla_volumes_count == (unsigned int)m_list.size()) { m_type = SingleFullInstance; // ensures the correct mode is selected @@ -1639,7 +1640,7 @@ void Selection::update_type() requires_disable = true; } } - else if ((selected_instances_count > 1) && (selected_instances_count * volumes_count == (unsigned int)m_list.size())) + else if ((selected_instances_count > 1) && (selected_instances_count * model_volumes_count + sla_volumes_count == (unsigned int)m_list.size())) { m_type = MultipleFullInstance; // ensures the correct mode is selected @@ -1656,7 +1657,7 @@ void Selection::update_type() unsigned int instances_count = (unsigned int)model_object->instances.size(); sels_cntr += volumes_count * instances_count; } - if (sels_cntr == (unsigned int)m_list.size()) + if (sels_cntr + sla_volumes_count == (unsigned int)m_list.size()) { m_type = MultipleFullObject; // ensures the correct mode is selected @@ -1943,6 +1944,29 @@ void Selection::render_bounding_box(const BoundingBoxf3& box, float* color) cons glsafe(::glEnd()); } +#if ENABLE_GCODE_VIEWER +void Selection::render_sidebar_position_hints(const std::string& sidebar_field) const +{ + auto set_color = [](Axis axis) { + GLShaderProgram* shader = wxGetApp().get_current_shader(); + if (shader != nullptr) + shader->set_uniform("uniform_color", AXES_COLOR[axis], 4); + }; + + if (boost::ends_with(sidebar_field, "x")) { + set_color(X); + glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0)); + m_arrow.render(); + } else if (boost::ends_with(sidebar_field, "y")) { + set_color(Y); + m_arrow.render(); + } else if (boost::ends_with(sidebar_field, "z")) { + set_color(Z); + glsafe(::glRotated(90.0, 1.0, 0.0, 0.0)); + m_arrow.render(); + } +} +#else void Selection::render_sidebar_position_hints(const std::string& sidebar_field) const { if (boost::ends_with(sidebar_field, "x")) @@ -1958,8 +1982,38 @@ void Selection::render_sidebar_position_hints(const std::string& sidebar_field) render_sidebar_position_hint(Z); } } +#endif // ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_VIEWER void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field) const +{ + auto set_color = [](Axis axis) { + GLShaderProgram* shader = wxGetApp().get_current_shader(); + if (shader != nullptr) + shader->set_uniform("uniform_color", AXES_COLOR[axis], 4); + }; + + auto render_sidebar_rotation_hint = [this]() { + m_curved_arrow.render(); + glsafe(::glRotated(180.0, 0.0, 0.0, 1.0)); + m_curved_arrow.render(); + }; + + if (boost::ends_with(sidebar_field, "x")) { + set_color(X); + glsafe(::glRotated(90.0, 0.0, 1.0, 0.0)); + render_sidebar_rotation_hint(); + } else if (boost::ends_with(sidebar_field, "y")) { + set_color(Y); + glsafe(::glRotated(-90.0, 1.0, 0.0, 0.0)); + render_sidebar_rotation_hint(); + } else if (boost::ends_with(sidebar_field, "z")) { + set_color(Z); + render_sidebar_rotation_hint(); + } +} +#else +void Selection::render_sidebar_rotation_hints(const std::string & sidebar_field) const { if (boost::ends_with(sidebar_field, "x")) { @@ -1974,11 +2028,33 @@ void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field) else if (boost::ends_with(sidebar_field, "z")) render_sidebar_rotation_hint(Z); } +#endif // ENABLE_GCODE_VIEWER void Selection::render_sidebar_scale_hints(const std::string& sidebar_field) const { bool uniform_scale = requires_uniform_scale() || wxGetApp().obj_manipul()->get_uniform_scaling(); + auto render_sidebar_scale_hint = [this, uniform_scale](Axis axis) { + GLShaderProgram* shader = wxGetApp().get_current_shader(); + if (shader != nullptr) + shader->set_uniform("uniform_color", uniform_scale ? UNIFORM_SCALE_COLOR : AXES_COLOR[axis], 4); + + glsafe(::glTranslated(0.0, 5.0, 0.0)); +#if ENABLE_GCODE_VIEWER + m_arrow.render(); +#else + m_arrow->render(); +#endif // ENABLE_GCODE_VIEWER + + glsafe(::glTranslated(0.0, -10.0, 0.0)); + glsafe(::glRotated(180.0, 0.0, 0.0, 1.0)); +#if ENABLE_GCODE_VIEWER + m_arrow.render(); +#else + m_arrow->render(); +#endif // ENABLE_GCODE_VIEWER + }; + if (boost::ends_with(sidebar_field, "x") || uniform_scale) { glsafe(::glPushMatrix()); @@ -2003,11 +2079,6 @@ void Selection::render_sidebar_scale_hints(const std::string& sidebar_field) con } } -void Selection::render_sidebar_size_hints(const std::string& sidebar_field) const -{ - render_sidebar_scale_hints(sidebar_field); -} - void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) const { static const double Margin = 10.0; @@ -2080,6 +2151,7 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) co glsafe(::glDisable(GL_BLEND)); } +#if !ENABLE_GCODE_VIEWER void Selection::render_sidebar_position_hint(Axis axis) const { m_arrow->set_color(AXES_COLOR[axis], 3); @@ -2106,10 +2178,7 @@ void Selection::render_sidebar_scale_hint(Axis axis) const glsafe(::glRotated(180.0, 0.0, 0.0, 1.0)); m_arrow->render(); } - -void Selection::render_sidebar_size_hint(Axis axis, double length) const -{ -} +#endif // !ENABLE_GCODE_VIEWER #ifndef NDEBUG static bool is_rotation_xy_synchronized(const Vec3d &rot_xyz_from, const Vec3d &rot_xyz_to) diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index 7a929926c4..2d87b9873d 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -3,7 +3,9 @@ #include #include "libslic3r/Geometry.hpp" - +#if ENABLE_GCODE_VIEWER +#include "GLModel.hpp" +#endif // ENABLE_GCODE_VIEWER #if ENABLE_RENDER_SELECTION_CENTER class GLUquadric; @@ -19,6 +21,7 @@ class GLVolume; class GLArrow; class GLCurvedArrow; class DynamicPrintConfig; +class GLShaderProgram; using GLVolumePtrs = std::vector; using ModelObjectPtrs = std::vector; @@ -218,10 +221,15 @@ private: GLUquadricObj* m_quadric; #endif // ENABLE_RENDER_SELECTION_CENTER +#if ENABLE_GCODE_VIEWER + GLModel m_arrow; + GLModel m_curved_arrow; +#else // Arrows are saved through pointers to avoid including 3DScene.hpp. // It also allows mutability. std::unique_ptr m_arrow; std::unique_ptr m_curved_arrow; +#endif // ENABLE_GCODE_VIEWER mutable float m_scale_factor; @@ -336,7 +344,7 @@ public: #if ENABLE_RENDER_SELECTION_CENTER void render_center(bool gizmo_is_dragging) const; #endif // ENABLE_RENDER_SELECTION_CENTER - void render_sidebar_hints(const std::string& sidebar_field, const Shader& shader) const; + void render_sidebar_hints(const std::string& sidebar_field) const; bool requires_local_axes() const; @@ -377,12 +385,12 @@ private: void render_sidebar_position_hints(const std::string& sidebar_field) const; void render_sidebar_rotation_hints(const std::string& sidebar_field) const; void render_sidebar_scale_hints(const std::string& sidebar_field) const; - void render_sidebar_size_hints(const std::string& sidebar_field) const; void render_sidebar_layers_hints(const std::string& sidebar_field) const; +#if !ENABLE_GCODE_VIEWER void render_sidebar_position_hint(Axis axis) const; void render_sidebar_rotation_hint(Axis axis) const; void render_sidebar_scale_hint(Axis axis) const; - void render_sidebar_size_hint(Axis axis, double length) const; +#endif // !ENABLE_GCODE_VIEWER public: enum SyncRotationType { diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp index 3bd0fcf9f7..14d4fb0b3c 100644 --- a/src/slic3r/GUI/SysInfoDialog.cpp +++ b/src/slic3r/GUI/SysInfoDialog.cpp @@ -34,9 +34,17 @@ std::string get_main_info(bool format_as_html) std::string line_end = format_as_html ? "
" : "\n"; if (!format_as_html) +#if ENABLE_GCODE_VIEWER + out << b_start << (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) << b_end << line_end; +#else out << b_start << SLIC3R_APP_NAME << b_end << line_end; +#endif // ENABLE_GCODE_VIEWER out << b_start << "Version: " << b_end << SLIC3R_VERSION << line_end; +#if ENABLE_GCODE_VIEWER + out << b_start << "Build: " << b_end << (wxGetApp().is_editor() ? SLIC3R_BUILD_ID : GCODEVIEWER_BUILD_ID) << line_end; +#else out << b_start << "Build: " << b_end << SLIC3R_BUILD_ID << line_end; +#endif // ENABLE_GCODE_VIEWER out << line_end; out << b_start << "Operating System: " << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << line_end; out << b_start << "System Architecture: " << b_end << wxPlatformInfo::Get().GetArchName() << line_end; @@ -78,7 +86,11 @@ std::string get_mem_info(bool format_as_html) } SysInfoDialog::SysInfoDialog() - : DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("System Information")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +#if ENABLE_GCODE_VIEWER + : DPIDialog(NULL, wxID_ANY, (wxGetApp().is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME)) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +#else + : DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +#endif // ENABLE_GCODE_VIEWER { wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); SetBackgroundColour(bgr_clr); @@ -91,7 +103,11 @@ SysInfoDialog::SysInfoDialog() main_sizer->Add(hsizer, 1, wxEXPAND | wxALL, 10); // logo +#if ENABLE_GCODE_VIEWER + m_logo_bmp = ScalableBitmap(this, wxGetApp().is_editor() ? "PrusaSlicer_192px.png" : "PrusaSlicer-gcodeviewer_192px.png", 192); +#else m_logo_bmp = ScalableBitmap(this, "PrusaSlicer_192px.png", 192); +#endif // ENABLE_GCODE_VIEWER m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bmp.bmp()); hsizer->Add(m_logo, 0, wxALIGN_CENTER_VERTICAL); @@ -100,7 +116,11 @@ SysInfoDialog::SysInfoDialog() // title { +#if ENABLE_GCODE_VIEWER + wxStaticText* title = new wxStaticText(this, wxID_ANY, wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME, wxDefaultPosition, wxDefaultSize); +#else wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_APP_NAME, wxDefaultPosition, wxDefaultSize); +#endif // ENABLE_GCODE_VIEWER wxFont title_font = wxGetApp().bold_font(); title_font.SetFamily(wxFONTFAMILY_ROMAN); title_font.SetPointSize(22); @@ -109,7 +129,7 @@ SysInfoDialog::SysInfoDialog() } // main_info_text - wxFont font = wxGetApp().normal_font(); + wxFont font = get_default_font(this); const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue()); auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue()); @@ -154,7 +174,7 @@ SysInfoDialog::SysInfoDialog() } wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK); - m_btn_copy_to_clipboard = new wxButton(this, wxID_ANY, _(L("Copy to Clipboard")), wxDefaultPosition, wxDefaultSize); + m_btn_copy_to_clipboard = new wxButton(this, wxID_ANY, _L("Copy to Clipboard"), wxDefaultPosition, wxDefaultSize); buttons->Insert(0, m_btn_copy_to_clipboard, 0, wxLEFT, 5); m_btn_copy_to_clipboard->Bind(wxEVT_BUTTON, &SysInfoDialog::onCopyToClipboard, this); @@ -175,7 +195,7 @@ void SysInfoDialog::on_dpi_changed(const wxRect &suggested_rect) m_logo_bmp.msw_rescale(); m_logo->SetBitmap(m_logo_bmp.bmp()); - wxFont font = GetFont(); + wxFont font = get_default_font(this); const int fs = font.GetPointSize() - 1; int font_size[] = { static_cast(fs*1.5), static_cast(fs*1.4), static_cast(fs*1.3), fs, fs, fs, fs }; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 84bc5a5726..a650a94738 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1,8 +1,8 @@ // #include "libslic3r/GCodeSender.hpp" #include "slic3r/Utils/Serial.hpp" #include "Tab.hpp" -#include "PresetBundle.hpp" #include "PresetHints.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" @@ -27,14 +27,21 @@ #include #include "wxExtensions.hpp" +#include "PresetComboBoxes.hpp" #include #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" -#include "ConfigWizard.hpp" #include "Plater.hpp" #include "MainFrame.hpp" #include "format.hpp" +#include "PhysicalPrinterDialog.hpp" +#include "UnsavedChangesDialog.hpp" +#include "SavePresetDialog.hpp" + +#ifdef WIN32 + #include +#endif // WIN32 namespace Slic3r { namespace GUI { @@ -65,8 +72,10 @@ void Tab::Highlighter::invalidate() { timer.Stop(); - bbmp->invalidate(); - bbmp = nullptr; + if (bbmp) { + bbmp->invalidate(); + bbmp = nullptr; + } blink_counter = 0; } @@ -100,14 +109,14 @@ Tab::Tab(wxNotebook* parent, const wxString& title, Preset::Type type) : wxGetApp().tabs_list.push_back(this); - m_em_unit = wxGetApp().em_unit(); + m_em_unit = em_unit(m_parent); //wxGetApp().em_unit(); m_config_manipulation = get_config_manipulation(); Bind(wxEVT_SIZE, ([this](wxSizeEvent &evt) { - for (auto page : m_pages) - if (! page.get()->IsShown()) - page->layout_valid = false; + //for (auto page : m_pages) + // if (! page.get()->IsShown()) + // page->layout_valid = false; evt.Skip(); })); @@ -160,10 +169,18 @@ void Tab::create_preset_tab() #endif //__WXOSX__ // preset chooser - m_presets_choice = new PresetBitmapComboBox(panel, wxSize(35 * m_em_unit, -1)); + m_presets_choice = new TabPresetComboBox(panel, m_type); + m_presets_choice->set_selection_changed_function([this](int selection) { + if (!m_presets_choice->selection_is_changed_according_to_physical_printers()) + { + if (m_type == Preset::TYPE_PRINTER && !m_presets_choice->is_selected_physical_printer()) + m_preset_bundle->physical_printers.unselect_printer(); - // search combox -// m_search = new Search::SearchCtrl(panel); + // select preset + std::string preset_name = m_presets_choice->GetString(selection).ToUTF8().data(); + select_preset(Preset::remove_suffix_modified(preset_name)); + } + }); auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); @@ -173,6 +190,8 @@ void Tab::create_preset_tab() add_scaled_button(panel, &m_btn_save_preset, "save"); add_scaled_button(panel, &m_btn_delete_preset, "cross"); + if (m_type == Preset::Type::TYPE_PRINTER) + add_scaled_button(panel, &m_btn_edit_ph_printer, "cog"); m_show_incompatible_presets = false; add_scaled_bitmap(this, m_bmp_show_incompatible_presets, "flag_red"); @@ -183,7 +202,7 @@ void Tab::create_preset_tab() // TRN "Save current Settings" m_btn_save_preset->SetToolTip(from_u8((boost::format(_utf8(L("Save current %s"))) % m_title).str())); m_btn_delete_preset->SetToolTip(_(L("Delete this preset"))); - m_btn_delete_preset->Disable(); + m_btn_delete_preset->Hide(); add_scaled_button(panel, &m_question_btn, "question"); m_question_btn->SetToolTip(_(L("Hover the cursor over buttons to find more information \n" @@ -238,6 +257,10 @@ void Tab::create_preset_tab() m_hsizer->Add(m_btn_save_preset, 0, wxALIGN_CENTER_VERTICAL); m_hsizer->AddSpacer(int(4 * scale_factor)); m_hsizer->Add(m_btn_delete_preset, 0, wxALIGN_CENTER_VERTICAL); + if (m_btn_edit_ph_printer) { + m_hsizer->AddSpacer(int(4 * scale_factor)); + m_hsizer->Add(m_btn_edit_ph_printer, 0, wxALIGN_CENTER_VERTICAL); + } m_hsizer->AddSpacer(int(/*16*/8 * scale_factor)); m_hsizer->Add(m_btn_hide_incompatible_presets, 0, wxALIGN_CENTER_VERTICAL); m_hsizer->AddSpacer(int(8 * scale_factor)); @@ -273,39 +296,39 @@ void Tab::create_preset_tab() m_treectrl->AssignImageList(m_icons); m_treectrl->AddRoot("root"); m_treectrl->SetIndent(0); - m_disable_tree_sel_changed_event = 0; - m_treectrl->Bind(wxEVT_TREE_SEL_CHANGED, &Tab::OnTreeSelChange, this); + // Delay processing of the following handler until the message queue is flushed. + // This helps to process all the cursor key events on Windows in the tree control, + // so that the cursor jumps to the last item. + m_treectrl->Bind(wxEVT_TREE_SEL_CHANGED, [this](wxTreeEvent&) { + if (!m_disable_tree_sel_changed_event && !m_pages.empty()) { + if (m_page_switch_running) + m_page_switch_planned = true; + else { + m_page_switch_running = true; + do { + m_page_switch_planned = false; + m_treectrl->Update(); + } while (this->tree_sel_change_delayed()); + m_page_switch_running = false; + } + } + }); + m_treectrl->Bind(wxEVT_KEY_DOWN, &Tab::OnKeyDown, this); - m_presets_choice->Bind(wxEVT_COMBOBOX, ([this](wxCommandEvent e) { - //! Because of The MSW and GTK version of wxBitmapComboBox derived from wxComboBox, - //! but the OSX version derived from wxOwnerDrawnCombo, instead of: - //! select_preset(m_presets_choice->GetStringSelection().ToUTF8().data()); - //! we doing next: - // int selected_item = m_presets_choice->GetSelection(); + // Initialize the page. +#ifdef __WXOSX__ + auto page_parent = m_tmp_panel; +#else + auto page_parent = this; +#endif - // see https://github.com/prusa3d/PrusaSlicer/issues/3889 - // Under OSX: in case of use of a same names written in different case (like "ENDER" and "Ender") - // m_presets_choice->GetSelection() will return first item, because search in PopupListCtrl is case-insensitive. - // So, use GetSelection() from event parameter - int selected_item = e.GetSelection(); - if (m_selected_preset_item == size_t(selected_item) && !m_presets->current_is_dirty()) - return; - if (selected_item >= 0) { - std::string selected_string = m_presets_choice->GetString(selected_item).ToUTF8().data(); - if (selected_string.find(PresetCollection::separator_head()) == 0 - /*selected_string == "------- System presets -------" || - selected_string == "------- User presets -------"*/) { - m_presets_choice->SetSelection(m_selected_preset_item); - if (wxString::FromUTF8(selected_string.c_str()) == PresetCollection::separator(L("Add a new printer"))) - wxTheApp->CallAfter([]() { wxGetApp().run_wizard(ConfigWizard::RR_USER); }); - return; - } - m_selected_preset_item = selected_item; - select_preset(selected_string); - } - })); + m_page_view = new wxScrolledWindow(page_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_page_sizer = new wxBoxSizer(wxVERTICAL); + m_page_view->SetSizer(m_page_sizer); + m_page_view->SetScrollbars(1, 20, 1, 2); + m_hsizer->Add(m_page_view, 1, wxEXPAND | wxLEFT, 5); m_btn_save_preset->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { save_preset(); })); m_btn_delete_preset->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { delete_preset(); })); @@ -313,6 +336,14 @@ void Tab::create_preset_tab() toggle_show_hide_incompatible(); })); + if (m_btn_edit_ph_printer) + m_btn_edit_ph_printer->Bind(wxEVT_BUTTON, [this](wxCommandEvent e) { + if (m_preset_bundle->physical_printers.has_selection()) + m_presets_choice->edit_physical_printer(); + else + m_presets_choice->add_physical_printer(); + }); + // Fill cache for mode bitmaps m_mode_bitmap_cache.reserve(3); m_mode_bitmap_cache.push_back(ScalableBitmap(this, "mode_simple" , mode_icon_px_size())); @@ -321,7 +352,13 @@ void Tab::create_preset_tab() // Initialize the DynamicPrintConfig by default keys/values. build(); + + // ys_FIXME: Following should not be needed, the function will be called later + // (update_mode->update_visibility->rebuild_page_tree). This does not work, during the + // second call of rebuild_page_tree m_treectrl->GetFirstVisibleItem(); returns zero + // for some unknown reason (and the page is not refreshed until user does a selection). rebuild_page_tree(); + m_completed = true; } @@ -331,7 +368,7 @@ void Tab::add_scaled_button(wxWindow* parent, const wxString& label/* = wxEmptyString*/, long style /*= wxBU_EXACTFIT | wxNO_BORDER*/) { - *btn = new ScalableButton(parent, wxID_ANY, icon_name, label, wxDefaultSize, wxDefaultPosition, style); + *btn = new ScalableButton(parent, wxID_ANY, icon_name, label, wxDefaultSize, wxDefaultPosition, style, true); m_scaled_buttons.push_back(*btn); } @@ -365,6 +402,11 @@ Slic3r::GUI::PageShp Tab::add_options_page(const wxString& title, const std::str icon_idx = ++m_icon_count; m_icon_index[icon] = icon_idx; } + + if (m_category_icon.find(title) == m_category_icon.end()) { + // Add new category to the category_to_icon list. + m_category_icon[title] = icon; + } } // Initialize the page. #ifdef __WXOSX__ @@ -372,16 +414,12 @@ Slic3r::GUI::PageShp Tab::add_options_page(const wxString& title, const std::str #else auto panel = this; #endif - PageShp page(new Page(panel, title, icon_idx, m_mode_bitmap_cache)); + PageShp page(new Page(/*panel*/m_page_view, title, icon_idx, m_mode_bitmap_cache)); // page->SetBackgroundStyle(wxBG_STYLE_SYSTEM); #ifdef __WINDOWS__ // page->SetDoubleBuffered(true); #endif //__WINDOWS__ - page->SetScrollbars(1, 20, 1, 2); - page->Hide(); - m_hsizer->Add(page.get(), 1, wxEXPAND | wxLEFT, 5); - if (!is_extruder_pages) m_pages.push_back(page); @@ -391,19 +429,48 @@ Slic3r::GUI::PageShp Tab::add_options_page(const wxString& title, const std::str void Tab::OnActivate() { -#ifdef __WXOSX__ wxWindowUpdateLocker noUpdates(this); - +#ifdef __WXOSX__ +// wxWindowUpdateLocker noUpdates(this); auto size = GetSizer()->GetSize(); m_tmp_panel->GetSizer()->SetMinSize(size.x + m_size_move, size.y); Fit(); m_size_move *= -1; #endif // __WXOSX__ + +#ifdef __WXMSW__ + // Workaround for tooltips over Tree Controls displayed over excessively long + // tree control items, stealing the window focus. + // + // In case the Tab was reparented from the MainFrame to the floating dialog, + // the tooltip created by the Tree Control before reparenting is not reparented, + // but it still points to the MainFrame. If the tooltip pops up, the MainFrame + // is incorrectly focussed, stealing focus from the floating dialog. + // + // The workaround is to delete the tooltip control. + // Vojtech tried to reparent the tooltip control, but it did not work, + // and if the Tab was later reparented back to MainFrame, the tooltip was displayed + // at an incorrect position, therefore it is safer to just discard the tooltip control + // altogether. + HWND hwnd_tt = TreeView_GetToolTips(m_treectrl->GetHandle()); + if (hwnd_tt) { + HWND hwnd_toplevel = find_toplevel_parent(m_treectrl)->GetHandle(); + HWND hwnd_parent = ::GetParent(hwnd_tt); + if (hwnd_parent != hwnd_toplevel) { + ::DestroyWindow(hwnd_tt); + TreeView_SetToolTips(m_treectrl->GetHandle(), nullptr); + } + } +#endif + + // create controls on active page + activate_selected_page([](){}); + m_hsizer->Layout(); + Refresh(); } void Tab::update_labels_colour() { -// Freeze(); //update options "decoration" for (const auto opt : m_options_list) { @@ -418,8 +485,9 @@ void Tab::update_labels_colour() else color = &m_modified_label_clr; } - if (opt.first == "bed_shape" || opt.first == "compatible_prints" || opt.first == "compatible_printers") { - wxStaticText* label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first); + if (opt.first == "bed_shape" || opt.first == "filament_ramming_parameters" || + opt.first == "compatible_prints" || opt.first == "compatible_printers" ) { + wxStaticText* label = m_colored_Labels.find(opt.first) == m_colored_Labels.end() ? nullptr : m_colored_Labels.at(opt.first); if (label) { label->SetForegroundColour(*color); label->Refresh(true); @@ -431,7 +499,6 @@ void Tab::update_labels_colour() if (field == nullptr) continue; field->set_label_colour_force(color); } -// Thaw(); auto cur_item = m_treectrl->GetFirstVisibleItem(); if (!cur_item || !m_treectrl->IsVisible(cur_item)) @@ -454,6 +521,67 @@ void Tab::update_labels_colour() } } +void Tab::decorate() +{ + for (const auto opt : m_options_list) + { + wxStaticText* label = nullptr; + Field* field = nullptr; + + if (opt.first == "bed_shape" || opt.first == "filament_ramming_parameters" || + opt.first == "compatible_prints" || opt.first == "compatible_printers") + label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first); + + if (!label) + field = get_field(opt.first); + if (!label && !field) + continue; + + bool is_nonsys_value = false; + bool is_modified_value = true; + const ScalableBitmap* sys_icon = &m_bmp_value_lock; + const ScalableBitmap* icon = &m_bmp_value_revert; + + const wxColour* color = m_is_default_preset ? &m_default_text_clr : &m_sys_label_clr; + + const wxString* sys_tt = &m_tt_value_lock; + const wxString* tt = &m_tt_value_revert; + + // value isn't equal to system value + if ((opt.second & osSystemValue) == 0) { + is_nonsys_value = true; + sys_icon = m_bmp_non_system; + sys_tt = m_tt_non_system; + // value is equal to last saved + if ((opt.second & osInitValue) != 0) + color = &m_default_text_clr; + // value is modified + else + color = &m_modified_label_clr; + } + if ((opt.second & osInitValue) != 0) + { + is_modified_value = false; + icon = &m_bmp_white_bullet; + tt = &m_tt_white_bullet; + } + + if (label) { + label->SetForegroundColour(*color); + label->Refresh(true); + continue; + } + + field->m_is_nonsys_value = is_nonsys_value; + field->m_is_modified_value = is_modified_value; + field->set_undo_bitmap(icon); + field->set_undo_to_sys_bitmap(sys_icon); + field->set_undo_tooltip(tt); + field->set_undo_to_sys_tooltip(sys_tt); + field->set_label_colour(color); + } +} + // Update UI according to changes void Tab::update_changed_ui() { @@ -477,58 +605,7 @@ void Tab::update_changed_ui() for (auto opt_key : dirty_options) m_options_list[opt_key] &= ~osInitValue; for (auto opt_key : nonsys_options) m_options_list[opt_key] &= ~osSystemValue; -// Freeze(); - //update options "decoration" - for (const auto opt : m_options_list) - { - bool is_nonsys_value = false; - bool is_modified_value = true; - const ScalableBitmap *sys_icon = &m_bmp_value_lock; - const ScalableBitmap *icon = &m_bmp_value_revert; - - const wxColour *color = m_is_default_preset ? &m_default_text_clr : &m_sys_label_clr; - - const wxString *sys_tt = &m_tt_value_lock; - const wxString *tt = &m_tt_value_revert; - - // value isn't equal to system value - if ((opt.second & osSystemValue) == 0) { - is_nonsys_value = true; - sys_icon = m_bmp_non_system; - sys_tt = m_tt_non_system; - // value is equal to last saved - if ((opt.second & osInitValue) != 0) - color = &m_default_text_clr; - // value is modified - else - color = &m_modified_label_clr; - } - if ((opt.second & osInitValue) != 0) - { - is_modified_value = false; - icon = &m_bmp_white_bullet; - tt = &m_tt_white_bullet; - } - if (opt.first == "bed_shape" || opt.first == "compatible_prints" || opt.first == "compatible_printers") { - wxStaticText* label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first); - if (label) { - label->SetForegroundColour(*color); - label->Refresh(true); - } - continue; - } - - Field* field = get_field(opt.first); - if (field == nullptr) continue; - field->m_is_nonsys_value = is_nonsys_value; - field->m_is_modified_value = is_modified_value; - field->set_undo_bitmap(icon); - field->set_undo_to_sys_bitmap(sys_icon); - field->set_undo_tooltip(tt); - field->set_undo_to_sys_tooltip(sys_tt); - field->set_label_colour(color); - } -// Thaw(); + decorate(); wxTheApp->CallAfter([this]() { if (parent()) //To avoid a crash, parent should be exist for a moment of a tree updating @@ -661,6 +738,9 @@ void Tab::update_changed_tree_ui() get_sys_and_mod_flags(opt_key, sys_page, modified_page); } } + if (m_type == Preset::TYPE_FILAMENT && page->title() == "Advanced") { + get_sys_and_mod_flags("filament_ramming_parameters", sys_page, modified_page); + } if (page->title() == "Dependencies") { if (m_type == Slic3r::Preset::TYPE_PRINTER) { sys_page = m_presets->get_selected_preset_parent() != nullptr; @@ -675,8 +755,8 @@ void Tab::update_changed_tree_ui() { if (!sys_page && modified_page) break; - for (t_opt_map::iterator it = group->m_opt_map.begin(); it != group->m_opt_map.end(); ++it) { - const std::string& opt_key = it->first; + for (const auto &kvp : group->opt_map()) { + const std::string& opt_key = kvp.first; get_sys_and_mod_flags(opt_key, sys_page, modified_page); } } @@ -714,6 +794,8 @@ void Tab::update_undo_buttons() void Tab::on_roll_back_value(const bool to_sys /*= true*/) { + if (!m_active_page) return; + int os; if (to_sys) { if (!m_is_nonsys_values) return; @@ -726,49 +808,47 @@ void Tab::on_roll_back_value(const bool to_sys /*= true*/) m_postpone_update_ui = true; - auto selection = m_treectrl->GetItemText(m_treectrl->GetSelection()); - for (auto page : m_pages) - if (_(page->title()) == selection) { - for (auto group : page->m_optgroups) { - if (group->title == "Capabilities") { - if ((m_options_list["extruders_count"] & os) == 0) - to_sys ? group->back_to_sys_value("extruders_count") : group->back_to_initial_value("extruders_count"); - } - if (group->title == "Size and coordinates") { - if ((m_options_list["bed_shape"] & os) == 0) { - to_sys ? group->back_to_sys_value("bed_shape") : group->back_to_initial_value("bed_shape"); - load_key_value("bed_shape", true/*some value*/, true); - } - - } - if (group->title == "Profile dependencies") { - // "compatible_printers" option doesn't exists in Printer Settimgs Tab - if (m_type != Preset::TYPE_PRINTER && (m_options_list["compatible_printers"] & os) == 0) { - to_sys ? group->back_to_sys_value("compatible_printers") : group->back_to_initial_value("compatible_printers"); - load_key_value("compatible_printers", true/*some value*/, true); - - bool is_empty = m_config->option("compatible_printers")->values.empty(); - m_compatible_printers.checkbox->SetValue(is_empty); - is_empty ? m_compatible_printers.btn->Disable() : m_compatible_printers.btn->Enable(); - } - // "compatible_prints" option exists only in Filament Settimgs and Materials Tabs - if ((m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) && (m_options_list["compatible_prints"] & os) == 0) { - to_sys ? group->back_to_sys_value("compatible_prints") : group->back_to_initial_value("compatible_prints"); - load_key_value("compatible_prints", true/*some value*/, true); - - bool is_empty = m_config->option("compatible_prints")->values.empty(); - m_compatible_prints.checkbox->SetValue(is_empty); - is_empty ? m_compatible_prints.btn->Disable() : m_compatible_prints.btn->Enable(); - } - } - for (auto kvp : group->m_opt_map) { - const std::string& opt_key = kvp.first; - if ((m_options_list[opt_key] & os) == 0) - to_sys ? group->back_to_sys_value(opt_key) : group->back_to_initial_value(opt_key); - } - } - break; + for (auto group : m_active_page->m_optgroups) { + if (group->title == "Capabilities") { + if ((m_options_list["extruders_count"] & os) == 0) + to_sys ? group->back_to_sys_value("extruders_count") : group->back_to_initial_value("extruders_count"); } + if (group->title == "Size and coordinates") { + if ((m_options_list["bed_shape"] & os) == 0) { + to_sys ? group->back_to_sys_value("bed_shape") : group->back_to_initial_value("bed_shape"); + load_key_value("bed_shape", true/*some value*/, true); + } + } + if (group->title == "Toolchange parameters with single extruder MM printers") { + if ((m_options_list["filament_ramming_parameters"] & os) == 0) + to_sys ? group->back_to_sys_value("filament_ramming_parameters") : group->back_to_initial_value("filament_ramming_parameters"); + } + if (group->title == "Profile dependencies") { + // "compatible_printers" option doesn't exists in Printer Settimgs Tab + if (m_type != Preset::TYPE_PRINTER && (m_options_list["compatible_printers"] & os) == 0) { + to_sys ? group->back_to_sys_value("compatible_printers") : group->back_to_initial_value("compatible_printers"); + load_key_value("compatible_printers", true/*some value*/, true); + + bool is_empty = m_config->option("compatible_printers")->values.empty(); + m_compatible_printers.checkbox->SetValue(is_empty); + is_empty ? m_compatible_printers.btn->Disable() : m_compatible_printers.btn->Enable(); + } + // "compatible_prints" option exists only in Filament Settimgs and Materials Tabs + if ((m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) && (m_options_list["compatible_prints"] & os) == 0) { + to_sys ? group->back_to_sys_value("compatible_prints") : group->back_to_initial_value("compatible_prints"); + load_key_value("compatible_prints", true/*some value*/, true); + + bool is_empty = m_config->option("compatible_prints")->values.empty(); + m_compatible_prints.checkbox->SetValue(is_empty); + is_empty ? m_compatible_prints.btn->Disable() : m_compatible_prints.btn->Enable(); + } + } + for (const auto &kvp : group->opt_map()) { + const std::string& opt_key = kvp.first; + if ((m_options_list[opt_key] & os) == 0) + to_sys ? group->back_to_sys_value(opt_key) : group->back_to_initial_value(opt_key); + } + } m_postpone_update_ui = false; update_changed_ui(); @@ -778,14 +858,14 @@ void Tab::on_roll_back_value(const bool to_sys /*= true*/) // comparing the selected preset config with $self->{config}. void Tab::update_dirty() { - m_presets->update_dirty_ui(m_presets_choice); + m_presets_choice->update_dirty(); on_presets_changed(); update_changed_ui(); } void Tab::update_tab_ui() { - m_selected_preset_item = m_presets->update_tab_ui(m_presets_choice, m_show_incompatible_presets, m_em_unit); + m_presets_choice->update(); } // Load a provied DynamicConfig into the tab, modifying the active preset. @@ -808,10 +888,8 @@ void Tab::load_config(const DynamicPrintConfig& config) // Reload current $self->{config} (aka $self->{presets}->edited_preset->config) into the UI fields. void Tab::reload_config() { -// Freeze(); - for (auto page : m_pages) - page->reload_config(); -// Thaw(); + if (m_active_page) + m_active_page->reload_config(); } void Tab::update_mode() @@ -830,16 +908,12 @@ void Tab::update_visibility() { Freeze(); // There is needed Freeze/Thaw to avoid a flashing after Show/Layout - // m_detach_preset_btn will be shown always after call page->update_visibility() - // So let save a "show state" of m_detach_preset_btn before update_visibility - bool was_shown = m_detach_preset_btn->IsShown(); - for (auto page : m_pages) - page->update_visibility(m_mode); - update_page_tree_visibility(); + page->update_visibility(m_mode, page.get() == m_active_page); + rebuild_page_tree(); - // update visibility for detach_preset_btn - m_detach_preset_btn->Show(was_shown); + if (this->m_type == Preset::TYPE_SLA_PRINT) + update_description_lines(); Layout(); Thaw(); @@ -847,20 +921,20 @@ void Tab::update_visibility() void Tab::msw_rescale() { - m_em_unit = wxGetApp().em_unit(); + m_em_unit = em_unit(m_parent); m_mode_sizer->msw_rescale(); + m_presets_choice->msw_rescale(); - m_presets_choice->SetSize(35 * m_em_unit, -1); m_treectrl->SetMinSize(wxSize(20 * m_em_unit, -1)); - update_tab_ui(); - // rescale buttons and cached bitmaps for (const auto btn : m_scaled_buttons) btn->msw_rescale(); for (const auto bmp : m_scaled_bitmaps) bmp->msw_rescale(); + for (const auto ikon : m_blinking_ikons) + ikon.second->msw_rescale(); for (ScalableBitmap& bmp : m_mode_bitmap_cache) bmp.msw_rescale(); @@ -875,8 +949,8 @@ void Tab::msw_rescale() m_treectrl->AssignImageList(m_icons); // rescale options_groups - for (auto page : m_pages) - page->msw_rescale(); + if (m_active_page) + m_active_page->msw_rescale(); Layout(); } @@ -909,14 +983,16 @@ void Tab::sys_color_changed() update_labels_colour(); // update options_groups - for (auto page : m_pages) - page->sys_color_changed(); + if (m_active_page) + m_active_page->msw_rescale(); Layout(); } Field* Tab::get_field(const t_config_option_key& opt_key, int opt_index/* = -1*/) const { + return m_active_page ? m_active_page->get_field(opt_key, opt_index) : nullptr; + Field* field = nullptr; for (auto page : m_pages) { field = page->get_field(opt_key, opt_index); @@ -939,17 +1015,14 @@ Field* Tab::get_field(const t_config_option_key& opt_key, Page** selected_page, return field; } -// Set a key/value pair on this page. Return true if the value has been modified. -// Currently used for distributing extruders_count over preset pages of Slic3r::GUI::Tab::Printer -// after a preset is loaded. -bool Tab::set_value(const t_config_option_key& opt_key, const boost::any& value) { - bool changed = false; - for(auto page: m_pages) { - if (page->set_value(opt_key, value)) - changed = true; - } - return changed; -} +void Tab::toggle_option(const std::string& opt_key, bool toggle, int opt_index/* = -1*/) +{ + if (!m_active_page) + return; + Field* field = m_active_page->get_field(opt_key, opt_index); + if (field) + field->toggle(toggle); +}; // To be called by custom widgets, load a value into a config, // update the preset selection boxes (the dirty flags) @@ -963,7 +1036,7 @@ void Tab::load_key_value(const std::string& opt_key, const boost::any& value, bo // Don't select another profile if this profile happens to become incompatible. m_preset_bundle->update_compatible(PresetSelectCompatibleType::Never); } - m_presets->update_dirty_ui(m_presets_choice); + m_presets_choice->update_dirty(); on_presets_changed(); update(); } @@ -1002,7 +1075,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (opt_key == "pad_around_object") { for (PageShp &pg : m_pages) { - Field * fld = pg->get_field(opt_key); + Field * fld = pg->get_field(opt_key); /// !!! ysFIXME ???? if (fld) fld->set_value(value, false); } } @@ -1046,11 +1119,7 @@ void Tab::update_wiping_button_visibility() { void Tab::activate_option(const std::string& opt_key, const wxString& category) { - Page* page {nullptr}; - Field* field = get_field(opt_key, &page); - - // for option, which doesn't have field but just a text or button - wxString page_title = (!field || !page) ? category : page->title(); + wxString page_title = _(category); auto cur_item = m_treectrl->GetFirstVisibleItem(); if (!cur_item || !m_treectrl->IsVisible(cur_item)) @@ -1058,7 +1127,7 @@ void Tab::activate_option(const std::string& opt_key, const wxString& category) while (cur_item) { auto title = m_treectrl->GetItemText(cur_item); - if (_(page_title) != title) { + if (page_title != title) { cur_item = m_treectrl->GetNextVisible(cur_item); continue; } @@ -1068,10 +1137,8 @@ void Tab::activate_option(const std::string& opt_key, const wxString& category) } // we should to activate a tab with searched option, if it doesn't. - wxNotebook* tap_panel = wxGetApp().tab_panel(); - int page_id = tap_panel->FindPage(this); - if (tap_panel->GetSelection() != page_id) - tap_panel->SetSelection(page_id); + wxGetApp().mainframe->select_tab(this); + Field* field = get_field(opt_key); // focused selected field if (field) { @@ -1100,6 +1167,21 @@ void Tab::apply_searcher() wxGetApp().sidebar().get_searcher().apply(m_config, m_type, m_mode); } +void Tab::cache_config_diff(const std::vector& selected_options) +{ + m_cache_config.apply_only(m_presets->get_edited_preset().config, selected_options); +} + +void Tab::apply_config_from_cache() +{ + if (!m_cache_config.empty()) { + m_presets->get_edited_preset().config.apply(m_cache_config); + m_cache_config.clear(); + + update_dirty(); + } +} + // Call a callback to update the selection of presets on the plater: // To update the content of the selection boxes, @@ -1114,14 +1196,16 @@ void Tab::on_presets_changed() // Instead of PostEvent (EVT_TAB_PRESETS_CHANGED) just call update_presets wxGetApp().plater()->sidebar().update_presets(m_type); - update_preset_description_line(); // Printer selected at the Printer tab, update "compatible" marks at the print and filament selectors. for (auto t: m_dependent_tabs) { + Tab* tab = wxGetApp().get_tab(t); // If the printer tells us that the print or filament/sla_material preset has been switched or invalidated, // refresh the print or filament/sla_material tab page. - wxGetApp().get_tab(t)->load_current_preset(); + // But if there are options, moved from the previously selected preset, update them to edited preset + tab->apply_config_from_cache(); + tab->load_current_preset(); } // clear m_dependent_tabs after first update from select_preset() // to avoid needless preset loading from update() function @@ -1135,7 +1219,9 @@ void Tab::build_preset_description_line(ConfigOptionsGroup* optgroup) }; auto detach_preset_btn = [this](wxWindow* parent) { - add_scaled_button(parent, &m_detach_preset_btn, "lock_open_sys", _(L("Detach from system preset")), wxBU_LEFT | wxBU_EXACTFIT); + //add_scaled_button(parent, &m_detach_preset_btn, "lock_open_sys", _(L("Detach from system preset")), wxBU_LEFT | wxBU_EXACTFIT); + m_detach_preset_btn = new ScalableButton(parent, wxID_ANY, "lock_open_sys", _L("Detach from system preset"), + wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); ScalableButton* btn = m_detach_preset_btn; btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); @@ -1519,27 +1605,46 @@ void TabPrint::reload_config() Tab::reload_config(); } +void TabPrint::update_description_lines() +{ + Tab::update_description_lines(); + + if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptSLA) + return; + + if (m_active_page && m_active_page->title() == "Layers and perimeters" && + m_recommended_thin_wall_thickness_description_line && m_top_bottom_shell_thickness_explanation) + { + m_recommended_thin_wall_thickness_description_line->SetText( + from_u8(PresetHints::recommended_thin_wall_thickness(*m_preset_bundle))); + m_top_bottom_shell_thickness_explanation->SetText( + from_u8(PresetHints::top_bottom_shell_thickness_explanation(*m_preset_bundle))); + } +} + +void TabPrint::toggle_options() +{ + if (!m_active_page) return; + + m_config_manipulation.toggle_print_fff_options(m_config); +} + void TabPrint::update() { if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptSLA) return; // ys_FIXME m_update_cnt++; -// Freeze(); m_config_manipulation.update_print_fff_config(m_config, true); - m_recommended_thin_wall_thickness_description_line->SetText( - from_u8(PresetHints::recommended_thin_wall_thickness(*m_preset_bundle))); - m_top_bottom_shell_thickness_explanation->SetText( - from_u8(PresetHints::top_bottom_shell_thickness_explanation(*m_preset_bundle))); + update_description_lines(); Layout(); -// Thaw(); m_update_cnt--; if (m_update_cnt==0) { - m_config_manipulation.toggle_print_fff_options(m_config); + toggle_options(); // update() could be called during undo/redo execution // Update of objectList can cause a crash in this case (because m_objects doesn't match ObjectList) @@ -1550,13 +1655,12 @@ void TabPrint::update() } } -void TabPrint::OnActivate() +void TabPrint::clear_pages() { - m_recommended_thin_wall_thickness_description_line->SetText( - from_u8(PresetHints::recommended_thin_wall_thickness(*m_preset_bundle))); - m_top_bottom_shell_thickness_explanation->SetText( - from_u8(PresetHints::top_bottom_shell_thickness_explanation(*m_preset_bundle))); - Tab::OnActivate(); + Tab::clear_pages(); + + m_recommended_thin_wall_thickness_description_line = nullptr; + m_top_bottom_shell_thickness_explanation = nullptr; } void TabFilament::add_filament_overrides_page() @@ -1616,10 +1720,9 @@ void TabFilament::add_filament_overrides_page() void TabFilament::update_filament_overrides_page() { - const auto page_it = std::find_if(m_pages.begin(), m_pages.end(), [](const PageShp page) { return page->title() == "Filament Overrides"; }); - if (page_it == m_pages.end()) + if (!m_active_page || m_active_page->title() != "Filament Overrides") return; - PageShp page = *page_it; + Page* page = m_active_page; const auto og_it = std::find_if(page->m_optgroups.begin(), page->m_optgroups.end(), [](const ConfigOptionsGroupShp og) { return og->title == "Retraction"; }); if (og_it == page->m_optgroups.end()) @@ -1742,22 +1845,21 @@ void TabFilament::build() optgroup->append_single_option_line("filament_cooling_initial_speed"); optgroup->append_single_option_line("filament_cooling_final_speed"); - line = optgroup->create_single_option_line("filament_ramming_parameters");// { _(L("Ramming")), "" }; - line.widget = [this](wxWindow* parent) { + create_line_with_widget(optgroup.get(), "filament_ramming_parameters", [this](wxWindow* parent) { auto ramming_dialog_btn = new wxButton(parent, wxID_ANY, _(L("Ramming settings"))+dots, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); ramming_dialog_btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(ramming_dialog_btn); - ramming_dialog_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent& e) - { + ramming_dialog_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { RammingDialog dlg(this,(m_config->option("filament_ramming_parameters"))->get_at(0)); - if (dlg.ShowModal() == wxID_OK) - (m_config->option("filament_ramming_parameters"))->get_at(0) = dlg.get_parameters(); - })); + if (dlg.ShowModal() == wxID_OK) { + load_key_value("filament_ramming_parameters", dlg.get_parameters()); + update_changed_ui(); + } + }); return sizer; - }; - optgroup->append_line(line); + }); add_filament_overrides_page(); @@ -1770,12 +1872,14 @@ void TabFilament::build() optgroup = page->new_optgroup(L("Start G-code"), 0); option = optgroup->get_option("start_filament_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;// 150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("End G-code"), 0); option = optgroup->get_option("end_filament_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;// 150; optgroup->append_single_option_line(option); @@ -1827,6 +1931,40 @@ void TabFilament::update_volumetric_flow_preset_hints() m_volumetric_speed_description_line->SetText(text); } +void TabFilament::update_description_lines() +{ + Tab::update_description_lines(); + + if (!m_active_page) + return; + + if (m_active_page->title() == "Cooling" && m_cooling_description_line) + m_cooling_description_line->SetText(from_u8(PresetHints::cooling_description(m_presets->get_edited_preset()))); + if (m_active_page->title() == "Advanced" && m_volumetric_speed_description_line) + this->update_volumetric_flow_preset_hints(); +} + +void TabFilament::toggle_options() +{ + if (!m_active_page) + return; + + if (m_active_page->title() == "Cooling") + { + bool cooling = m_config->opt_bool("cooling", 0); + bool fan_always_on = cooling || m_config->opt_bool("fan_always_on", 0); + + for (auto el : { "max_fan_speed", "fan_below_layer_time", "slowdown_below_layer_time", "min_print_speed" }) + toggle_option(el, cooling); + + for (auto el : { "min_fan_speed", "disable_fan_first_layers" }) + toggle_option(el, fan_always_on); + } + + if (m_active_page->title() == "Filament Overrides") + update_filament_overrides_page(); +} + void TabFilament::update() { if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptSLA) @@ -1834,21 +1972,10 @@ void TabFilament::update() m_update_cnt++; - wxString text = from_u8(PresetHints::cooling_description(m_presets->get_edited_preset())); - m_cooling_description_line->SetText(text); - this->update_volumetric_flow_preset_hints(); + update_description_lines(); Layout(); - bool cooling = m_config->opt_bool("cooling", 0); - bool fan_always_on = cooling || m_config->opt_bool("fan_always_on", 0); - - for (auto el : { "max_fan_speed", "fan_below_layer_time", "slowdown_below_layer_time", "min_print_speed" }) - get_field(el)->toggle(cooling); - - for (auto el : { "min_fan_speed", "disable_fan_first_layers" }) - get_field(el)->toggle(fan_always_on); - - update_filament_overrides_page(); + toggle_options(); m_update_cnt--; @@ -1856,15 +1983,17 @@ void TabFilament::update() wxGetApp().mainframe->on_config_changed(m_config); } -void TabFilament::OnActivate() +void TabFilament::clear_pages() { - this->update_volumetric_flow_preset_hints(); - Tab::OnActivate(); + Tab::clear_pages(); + + m_volumetric_speed_description_line = nullptr; + m_cooling_description_line = nullptr; } -wxSizer* Tab::description_line_widget(wxWindow* parent, ogStaticText* *StaticText) +wxSizer* Tab::description_line_widget(wxWindow* parent, ogStaticText* *StaticText, wxString text /*= wxEmptyString*/) { - *StaticText = new ogStaticText(parent, ""); + *StaticText = new ogStaticText(parent, text); // auto font = (new wxSystemSettings)->GetFont(wxSYS_DEFAULT_GUI_FONT); (*StaticText)->SetFont(wxGetApp().normal_font()); @@ -1879,132 +2008,6 @@ bool Tab::current_preset_is_dirty() return m_presets->current_is_dirty(); } -void TabPrinter::build_printhost(ConfigOptionsGroup *optgroup) -{ - const PrinterTechnology tech = m_presets->get_selected_preset().printer_technology(); - - // Only offer the host type selection for FFF, for SLA it's always the SL1 printer (at the moment) - if (tech == ptFFF) { - optgroup->append_single_option_line("host_type"); - } - - auto printhost_browse = [=](wxWindow* parent) { - add_scaled_button(parent, &m_printhost_browse_btn, "browse", _(L("Browse")) + " "+ dots, wxBU_LEFT | wxBU_EXACTFIT); - ScalableButton* btn = m_printhost_browse_btn; - btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, [=](wxCommandEvent &e) { - BonjourDialog dialog(parent, tech); - if (dialog.show_and_lookup()) { - optgroup->set_value("print_host", std::move(dialog.get_selected()), true); - optgroup->get_field("print_host")->field_changed(); - } - }); - - return sizer; - }; - - auto print_host_test = [this](wxWindow* parent) { - add_scaled_button(parent, &m_print_host_test_btn, "test", _(L("Test")), wxBU_LEFT | wxBU_EXACTFIT); - ScalableButton* btn = m_print_host_test_btn; - btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { - std::unique_ptr host(PrintHost::get_print_host(m_config)); - if (! host) { - const wxString text = _(L("Could not get a valid Printer Host reference")); - show_error(this, text); - return; - } - wxString msg; - if (host->test(msg)) { - show_info(this, host->get_test_ok_msg(), _(L("Success!"))); - } else { - show_error(this, host->get_test_failed_msg(msg)); - } - }); - - return sizer; - }; - - // Set a wider width for a better alignment - Option option = optgroup->get_option("print_host"); - option.opt.width = Field::def_width_wider(); - Line host_line = optgroup->create_single_option_line(option); - host_line.append_widget(printhost_browse); - host_line.append_widget(print_host_test); - optgroup->append_line(host_line); - option = optgroup->get_option("printhost_apikey"); - option.opt.width = Field::def_width_wider(); - optgroup->append_single_option_line(option); - - const auto ca_file_hint = _utf8(L("HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate.")); - - if (Http::ca_file_supported()) { - option = optgroup->get_option("printhost_cafile"); - option.opt.width = Field::def_width_wider(); - Line cafile_line = optgroup->create_single_option_line(option); - - auto printhost_cafile_browse = [this, optgroup] (wxWindow* parent) { - auto btn = new wxButton(parent, wxID_ANY, " " + _(L("Browse"))+" " +dots, wxDefaultPosition, wxDefaultSize, wxBU_LEFT); - btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - btn->SetBitmap(create_scaled_bitmap("browse")); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, [this, optgroup] (wxCommandEvent e) { - static const auto filemasks = _(L("Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*")); - wxFileDialog openFileDialog(this, _(L("Open CA certificate file")), "", "", filemasks, wxFD_OPEN | wxFD_FILE_MUST_EXIST); - if (openFileDialog.ShowModal() != wxID_CANCEL) { - optgroup->set_value("printhost_cafile", std::move(openFileDialog.GetPath()), true); - optgroup->get_field("printhost_cafile")->field_changed(); - } - }); - - return sizer; - }; - - cafile_line.append_widget(printhost_cafile_browse); - optgroup->append_line(cafile_line); - - Line cafile_hint { "", "" }; - cafile_hint.full_width = 1; - cafile_hint.widget = [this, ca_file_hint](wxWindow* parent) { - auto txt = new wxStaticText(parent, wxID_ANY, ca_file_hint); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(txt); - return sizer; - }; - optgroup->append_line(cafile_hint); - } else { - Line line { "", "" }; - line.full_width = 1; - - line.widget = [ca_file_hint] (wxWindow* parent) { - std::string info = _utf8(L("HTTPS CA File")) + ":\n\t" + - (boost::format(_utf8(L("On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain."))) % SLIC3R_APP_NAME).str() + - "\n\t" + _utf8(L("To use a custom CA file, please import your CA file into Certificate Store / Keychain.")); - - auto txt = new wxStaticText(parent, wxID_ANY, from_u8((boost::format("%1%\n\n\t%2%") % info % ca_file_hint).str())); -/* % (boost::format(_utf8(L("HTTPS CA File:\n\ - \tOn this system, %s uses HTTPS certificates from the system Certificate Store or Keychain.\n\ - \tTo use a custom CA file, please import your CA file into Certificate Store / Keychain."))) % SLIC3R_APP_NAME).str() - % std::string(ca_file_hint.ToUTF8())).str())); -*/ txt->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(txt, 1, wxEXPAND); - return sizer; - }; - - optgroup->append_line(line); - } -} - void TabPrinter::build() { m_presets = &m_preset_bundle->printers; @@ -2015,6 +2018,27 @@ void TabPrinter::build() m_presets->get_selected_preset().printer_technology() == ptSLA ? build_sla() : build_fff(); } +void TabPrinter::build_print_host_upload_group(Page* page) +{ + ConfigOptionsGroupShp optgroup = page->new_optgroup(L("Print Host upload")); + + wxString description_line_text = _L("" + "Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n\n" + "A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, " + "by selecting the \"add or remove printers\" item in the Printer combo box. The Physical Printer profile editor opens " + "also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored " + "into PrusaSlicer/physical_printer directory."); + + Line line = { "", "" }; + line.full_width = 1; + line.widget = [this, description_line_text](wxWindow* parent) { + return description_line_widget(parent, m_presets->get_selected_preset().printer_technology() == ptFFF ? + &m_fff_print_host_upload_description_line : &m_sla_print_host_upload_description_line, + description_line_text); + }; + optgroup->append_line(line); +} + void TabPrinter::build_fff() { if (!m_pages.empty()) @@ -2102,56 +2126,7 @@ void TabPrinter::build_fff() }); }; - -#if 0 - if (!m_no_controller) - { - optgroup = page->new_optgroup(_(L("USB/Serial connection"))); - line = {_(L("Serial port")), ""}; - Option serial_port = optgroup->get_option("serial_port"); - serial_port.side_widget = ([this](wxWindow* parent) { - auto btn = new wxBitmapButton(parent, wxID_ANY, wxBitmap(from_u8(Slic3r::var("arrow_rotate_clockwise.png")), wxBITMAP_TYPE_PNG), - wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - btn->SetToolTip(_(L("Rescan serial ports"))); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent e) {update_serial_ports(); }); - return sizer; - }); - auto serial_test = [this](wxWindow* parent) { - auto btn = m_serial_test_btn = new wxButton(parent, wxID_ANY, - _(L("Test")), wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); - btn->SetFont(Slic3r::GUI::small_font()); - btn->SetBitmap(wxBitmap(from_u8(Slic3r::var("wrench.png")), wxBITMAP_TYPE_PNG)); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(btn); - - btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e) { - auto sender = Slic3r::make_unique(); - auto res = sender->connect( - m_config->opt_string("serial_port"), - m_config->opt_int("serial_speed") - ); - if (res && sender->wait_connected()) { - show_info(parent, _(L("Connection to printer works correctly.")), _(L("Success!"))); - } - else { - show_error(parent, _(L("Connection failed."))); - } - }); - return sizer; - }; - - line.append_option(serial_port); - line.append_option(optgroup->get_option("serial_speed")); - line.append_widget(serial_test); - optgroup->append_line(line); - } -#endif - - optgroup = page->new_optgroup(L("Print Host upload")); - build_printhost(optgroup.get()); + build_print_host_upload_group(page.get()); optgroup = page->new_optgroup(L("Firmware")); optgroup->append_single_option_line("gcode_flavor"); @@ -2185,51 +2160,60 @@ void TabPrinter::build_fff() optgroup = page->new_optgroup(L("Start G-code"), 0); option = optgroup->get_option("start_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("End G-code"), 0); option = optgroup->get_option("end_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Before layer change G-code"), 0); option = optgroup->get_option("before_layer_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("After layer change G-code"), 0); option = optgroup->get_option("layer_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Tool change G-code"), 0); option = optgroup->get_option("toolchange_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Between objects G-code (for sequential printing)"), 0); option = optgroup->get_option("between_objects_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Color Change G-code"), 0); option = optgroup->get_option("color_change_gcode"); + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Pause Print G-code"), 0); option = optgroup->get_option("pause_print_gcode"); + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Template Custom G-code"), 0); option = optgroup->get_option("template_custom_gcode"); + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); @@ -2246,11 +2230,6 @@ void TabPrinter::build_fff() build_preset_description_line(optgroup.get()); build_unregular_pages(); - -#if 0 - if (!m_no_controller) - update_serial_ports(); -#endif } void TabPrinter::build_sla() @@ -2310,8 +2289,7 @@ void TabPrinter::build_sla() optgroup->append_single_option_line("min_initial_exposure_time"); optgroup->append_single_option_line("max_initial_exposure_time"); - optgroup = page->new_optgroup(L("Print Host upload")); - build_printhost(optgroup.get()); + build_print_host_upload_group(page.get()); const int notes_field_height = 25; // 250 @@ -2328,13 +2306,6 @@ void TabPrinter::build_sla() build_preset_description_line(optgroup.get()); } -void TabPrinter::update_serial_ports() -{ - Field *field = get_field("serial_port"); - Choice *choice = static_cast(field); - choice->set_values(Utils::scan_serial_ports()); -} - void TabPrinter::extruders_count_changed(size_t extruders_count) { bool is_count_changed = false; @@ -2373,7 +2344,18 @@ PageShp TabPrinter::build_kinematics_page() { auto page = add_options_page(L("Machine limits"), "cog", true); - if (m_use_silent_mode) { + auto optgroup = page->new_optgroup(L("General")); + { + optgroup->append_single_option_line("machine_limits_usage"); + Line line { "", "" }; + line.full_width = 1; + line.widget = [this](wxWindow* parent) { + return description_line_widget(parent, &m_machine_limits_description_line); + }; + optgroup->append_line(line); + } + + if (m_use_silent_mode) { // Legend for OptionsGroups auto optgroup = page->new_optgroup(""); optgroup->set_show_modified_btns_val(false); @@ -2400,7 +2382,7 @@ PageShp TabPrinter::build_kinematics_page() } std::vector axes{ "x", "y", "z", "e" }; - auto optgroup = page->new_optgroup(L("Maximum feedrates")); + optgroup = page->new_optgroup(L("Maximum feedrates")); for (const std::string &axis : axes) { append_option_line(optgroup, "machine_max_feedrate_" + axis); } @@ -2445,12 +2427,12 @@ void TabPrinter::build_unregular_pages() /* Workaround for correct layout of controls inside the created page: * In some _strange_ way we should we should imitate page resizing. */ - auto layout_page = [this](PageShp page) +/* auto layout_page = [this](PageShp page) { const wxSize& sz = page->GetSize(); page->SetSize(sz.x + 1, sz.y + 1); page->SetSize(sz); - }; + };*/ #endif //__WXMSW__ // Add/delete Kinematics page according to is_marlin_flavor @@ -2467,7 +2449,7 @@ void TabPrinter::build_unregular_pages() if (existed_page < n_before_extruders && is_marlin_flavor) { auto page = build_kinematics_page(); #ifdef __WXMSW__ - layout_page(page); +// layout_page(page); #endif m_pages.insert(m_pages.begin() + n_before_extruders, page); } @@ -2576,8 +2558,10 @@ void TabPrinter::build_unregular_pages() optgroup = page->new_optgroup(L("Preview")); auto reset_to_filament_color = [this, extruder_idx](wxWindow* parent) { - add_scaled_button(parent, &m_reset_to_filament_color, "undo", - _(L("Reset to Filament Color")), wxBU_LEFT | wxBU_EXACTFIT); + //add_scaled_button(parent, &m_reset_to_filament_color, "undo", + // _(L("Reset to Filament Color")), wxBU_LEFT | wxBU_EXACTFIT); + m_reset_to_filament_color = new ScalableButton(parent, wxID_ANY, "undo", _L("Reset to Filament Color"), + wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); ScalableButton* btn = m_reset_to_filament_color; btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); auto sizer = new wxBoxSizer(wxHORIZONTAL); @@ -2603,7 +2587,7 @@ void TabPrinter::build_unregular_pages() optgroup->append_line(line); #ifdef __WXMSW__ - layout_page(page); +// layout_page(page); #endif } @@ -2630,7 +2614,6 @@ void TabPrinter::on_preset_loaded() // update the extruders count field auto *nozzle_diameter = dynamic_cast(m_config->option("nozzle_diameter")); size_t extruders_count = nozzle_diameter->values.size(); - set_value("extruders_count", int(extruders_count)); // update the GUI field according to the number of nozzle diameters supplied extruders_count_changed(extruders_count); } @@ -2642,9 +2625,8 @@ void TabPrinter::update_pages() if (new_printer_technology == m_printer_technology) return; - // hide all old pages - for (auto& el : m_pages) - el.get()->Hide(); + //clear all active pages before switching + clear_pages(); // set m_pages to m_pages_(technology before changing) m_printer_technology == ptFFF ? m_pages.swap(m_pages_fff) : m_pages.swap(m_pages_sla); @@ -2674,95 +2656,79 @@ void TabPrinter::update_pages() rebuild_page_tree(); } -void TabPrinter::update() +void TabPrinter::activate_selected_page(std::function throw_if_canceled) { - m_update_cnt++; - m_presets->get_edited_preset().printer_technology() == ptFFF ? update_fff() : update_sla(); - m_update_cnt--; + Tab::activate_selected_page(throw_if_canceled); - if (m_update_cnt == 0) - wxGetApp().mainframe->on_config_changed(m_config); + // "extruders_count" doesn't update from the update_config(), + // so update it implicitly + if (m_active_page && m_active_page->title() == "General") + m_active_page->set_value("extruders_count", int(m_extruders_count)); } -void TabPrinter::update_fff() +void TabPrinter::clear_pages() { -// Freeze(); + Tab::clear_pages(); + m_reset_to_filament_color = nullptr; +} - bool en; - auto serial_speed = get_field("serial_speed"); - if (serial_speed != nullptr) { - en = !m_config->opt_string("serial_port").empty(); - get_field("serial_speed")->toggle(en); - if (m_config->opt_int("serial_speed") != 0 && en) - m_serial_test_btn->Enable(); - else - m_serial_test_btn->Disable(); - } - - { - std::unique_ptr host(PrintHost::get_print_host(m_config)); - m_print_host_test_btn->Enable(!m_config->opt_string("print_host").empty() && host->can_test()); - m_printhost_browse_btn->Enable(host->has_auto_discovery()); - } +void TabPrinter::toggle_options() +{ + if (!m_active_page || m_presets->get_edited_preset().printer_technology() == ptSLA) + return; bool have_multiple_extruders = m_extruders_count > 1; - get_field("toolchange_gcode")->toggle(have_multiple_extruders); - get_field("single_extruder_multi_material")->toggle(have_multiple_extruders); + if (m_active_page->title() == "Custom G-code") + toggle_option("toolchange_gcode", have_multiple_extruders); + if (m_active_page->title() == "General") { + toggle_option("single_extruder_multi_material", have_multiple_extruders); - bool is_marlin_flavor = m_config->option>("gcode_flavor")->value == gcfMarlin; + bool is_marlin_flavor = m_config->option>("gcode_flavor")->value == gcfMarlin; + // Disable silent mode for non-marlin firmwares. + toggle_option("silent_mode", is_marlin_flavor); + } + wxString extruder_number; + long val; + if (m_active_page->title().StartsWith("Extruder ", &extruder_number) && extruder_number.ToLong(&val) && + val > 0 && (size_t)val <= m_extruders_count) { - Field *sm = get_field("silent_mode"); - if (! is_marlin_flavor) - // Disable silent mode for non-marlin firmwares. - get_field("silent_mode")->toggle(false); - if (is_marlin_flavor) - sm->enable(); - else - sm->disable(); - } - - if (m_use_silent_mode != m_config->opt_bool("silent_mode")) { - m_rebuild_kinematics_page = true; - m_use_silent_mode = m_config->opt_bool("silent_mode"); - } - - for (size_t i = 0; i < m_extruders_count; ++i) { + size_t i = size_t(val - 1); bool have_retract_length = m_config->opt_float("retract_length", i) > 0; // when using firmware retraction, firmware decides retraction length bool use_firmware_retraction = m_config->opt_bool("use_firmware_retraction"); - get_field("retract_length", i)->toggle(!use_firmware_retraction); + toggle_option("retract_length", !use_firmware_retraction, i); // user can customize travel length if we have retraction length or we"re using // firmware retraction - get_field("retract_before_travel", i)->toggle(have_retract_length || use_firmware_retraction); + toggle_option("retract_before_travel", have_retract_length || use_firmware_retraction, i); // user can customize other retraction options if retraction is enabled bool retraction = (have_retract_length || use_firmware_retraction); std::vector vec = { "retract_lift", "retract_layer_change" }; for (auto el : vec) - get_field(el, i)->toggle(retraction); + toggle_option(el, retraction, i); // retract lift above / below only applies if using retract lift vec.resize(0); vec = { "retract_lift_above", "retract_lift_below" }; for (auto el : vec) - get_field(el, i)->toggle(retraction && m_config->opt_float("retract_lift", i) > 0); + toggle_option(el, retraction && (m_config->opt_float("retract_lift", i) > 0), i); // some options only apply when not using firmware retraction vec.resize(0); vec = { "retract_speed", "deretract_speed", "retract_before_wipe", "retract_restart_extra", "wipe" }; for (auto el : vec) - get_field(el, i)->toggle(retraction && !use_firmware_retraction); + toggle_option(el, retraction && !use_firmware_retraction, i); bool wipe = m_config->opt_bool("wipe", i); - get_field("retract_before_wipe", i)->toggle(wipe); + toggle_option("retract_before_wipe", wipe, i); if (use_firmware_retraction && wipe) { wxMessageDialog dialog(parent(), _(L("The Wipe option is not available when using the Firmware Retraction mode.\n" - "\nShall I disable it in order to enable Firmware Retraction?")), + "\nShall I disable it in order to enable Firmware Retraction?")), _(L("Firmware Retraction")), wxICON_WARNING | wxYES | wxNO); DynamicPrintConfig new_conf = *m_config; @@ -2778,14 +2744,45 @@ void TabPrinter::update_fff() load_config(new_conf); } - get_field("retract_length_toolchange", i)->toggle(have_multiple_extruders); + toggle_option("retract_length_toolchange", have_multiple_extruders, i); bool toolchange_retraction = m_config->opt_float("retract_length_toolchange", i) > 0; - get_field("retract_restart_extra_toolchange", i)->toggle - (have_multiple_extruders && toolchange_retraction); + toggle_option("retract_restart_extra_toolchange", have_multiple_extruders && toolchange_retraction, i); } -// Thaw(); + if (m_active_page->title() == "Machine limits") { + assert(m_config->option>("gcode_flavor")->value == gcfMarlin); + const auto *machine_limits_usage = m_config->option>("machine_limits_usage"); + bool enabled = machine_limits_usage->value != MachineLimitsUsage::Ignore; + bool silent_mode = m_config->opt_bool("silent_mode"); + int max_field = silent_mode ? 2 : 1; + for (const std::string &opt : Preset::machine_limits_options()) + for (int i = 0; i < max_field; ++ i) + toggle_option(opt, enabled, i); + update_machine_limits_description(machine_limits_usage->value); + } +} + +void TabPrinter::update() +{ + m_update_cnt++; + m_presets->get_edited_preset().printer_technology() == ptFFF ? update_fff() : update_sla(); + m_update_cnt--; + + Layout(); + + if (m_update_cnt == 0) + wxGetApp().mainframe->on_config_changed(m_config); +} + +void TabPrinter::update_fff() +{ + if (m_use_silent_mode != m_config->opt_bool("silent_mode")) { + m_rebuild_kinematics_page = true; + m_use_silent_mode = m_config->opt_bool("silent_mode"); + } + + toggle_options(); } void TabPrinter::update_sla() @@ -2805,7 +2802,7 @@ void Tab::load_current_preset() { const Preset& preset = m_presets->get_edited_preset(); - (preset.is_default || preset.is_system) ? m_btn_delete_preset->Disable() : m_btn_delete_preset->Enable(true); + update_btns_enabling(); update(); if (m_type == Slic3r::Preset::TYPE_PRINTER) { @@ -2840,6 +2837,13 @@ void Tab::load_current_preset() const PrinterTechnology printer_technology = m_presets->get_edited_preset().printer_technology(); if (printer_technology != static_cast(this)->m_printer_technology) { + // The change of the technology requires to remove some of unrelated Tabs + // During this action, wxNoteBook::RemovePage invoke wxEVT_NOTEBOOK_PAGE_CHANGED + // and as a result a function select_active_page() is called fron Tab::OnActive() + // But we don't need it. So, to avoid activation of the page, set m_active_page to NULL + // till unusable Tabs will be deleted + Page* tmp_page = m_active_page; + m_active_page = nullptr; for (auto tab : wxGetApp().tabs_list) { if (tab->type() == Preset::TYPE_PRINTER) // Printer tab is shown every time continue; @@ -2858,10 +2862,11 @@ void Tab::load_current_preset() } } static_cast(this)->m_printer_technology = printer_technology; + m_active_page = tmp_page; } on_presets_changed(); if (printer_technology == ptFFF) { - static_cast(this)->m_initial_extruders_count = static_cast(this)->m_extruders_count; + static_cast(this)->m_initial_extruders_count = static_cast(m_presets->get_selected_preset().config.option("nozzle_diameter"))->values.size(); //static_cast(this)->m_extruders_count; const Preset* parent_preset = m_presets->get_selected_preset_parent(); static_cast(this)->m_sys_extruders_count = parent_preset == nullptr ? 0 : static_cast(parent_preset->config.option("nozzle_diameter"))->values.size(); @@ -2891,61 +2896,57 @@ void Tab::rebuild_page_tree() const auto selected = sel_item ? m_treectrl->GetItemText(sel_item) : ""; const auto rootItem = m_treectrl->GetRootItem(); - auto have_selection = 0; + wxTreeItemId item; + + // Delete/Append events invoke wxEVT_TREE_SEL_CHANGED event. + // To avoid redundant clear/activate functions call + // suppress activate page before page_tree rebuilding + m_disable_tree_sel_changed_event = true; m_treectrl->DeleteChildren(rootItem); - for (auto p : m_pages) - { - auto itemId = m_treectrl->AppendItem(rootItem, _(p->title()), p->iconID()); - m_treectrl->SetItemTextColour(itemId, p->get_item_colour()); - if (p->title() == selected) { - m_treectrl->SelectItem(itemId); - have_selection = 1; - } - } - if (!have_selection) { - // this is triggered on first load, so we don't disable the sel change event - auto item = m_treectrl->GetFirstVisibleItem(); - if (item) { - m_treectrl->SelectItem(item); - } - } -} - -void Tab::update_page_tree_visibility() -{ - const auto sel_item = m_treectrl->GetSelection(); - const auto selected = sel_item ? m_treectrl->GetItemText(sel_item) : ""; - const auto rootItem = m_treectrl->GetRootItem(); - - auto have_selection = 0; - m_treectrl->DeleteChildren(rootItem); for (auto p : m_pages) { if (!p->get_show()) continue; auto itemId = m_treectrl->AppendItem(rootItem, _(p->title()), p->iconID()); m_treectrl->SetItemTextColour(itemId, p->get_item_colour()); - if (p->title() == selected) { - m_treectrl->SelectItem(itemId); - have_selection = 1; - } + if (p->title() == selected) + item = itemId; } - - if (!have_selection) { + if (!item) { // this is triggered on first load, so we don't disable the sel change event - auto item = m_treectrl->GetFirstVisibleItem(); - if (item) { - m_treectrl->SelectItem(item); - } + item = m_treectrl->GetFirstVisibleItem(); } + // allow activate page before selection of a page_tree item + m_disable_tree_sel_changed_event = false; + if (item) + m_treectrl->SelectItem(item); +} + +void Tab::update_btns_enabling() +{ + // we can delete any preset from the physical printer + // and any user preset + const Preset& preset = m_presets->get_edited_preset(); + m_btn_delete_preset->Show(m_type == Preset::TYPE_PRINTER && m_preset_bundle->physical_printers.has_selection() || + !preset.is_default && !preset.is_system); + + if (m_btn_edit_ph_printer) + m_btn_edit_ph_printer->SetToolTip( m_preset_bundle->physical_printers.has_selection() ? + _L("Edit physical printer") : _L("Add physical printer")); +} + +void Tab::update_preset_choice() +{ + m_presets_choice->update(); + update_btns_enabling(); } // Called by the UI combo box when the user switches profiles, and also to delete the current profile. // Select a preset by a name.If !defined(name), then the default preset is selected. // If the current profile is modified, user is asked to save the changes. -void Tab::select_preset(std::string preset_name, bool delete_current) +void Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, const std::string& last_selected_ph_printer_name/* =""*/) { if (preset_name.empty()) { if (delete_current) { @@ -2971,7 +2972,7 @@ void Tab::select_preset(std::string preset_name, bool delete_current) bool canceled = false; bool technology_changed = false; m_dependent_tabs.clear(); - if (current_dirty && ! may_discard_current_dirty_preset()) { + if (current_dirty && ! may_discard_current_dirty_preset(nullptr, preset_name)) { canceled = true; } else if (print_tab) { // Before switching the print profile to a new one, verify, whether the currently active filament or SLA material @@ -3053,7 +3054,16 @@ void Tab::select_preset(std::string preset_name, bool delete_current) } if (canceled) { + if (m_type == Preset::TYPE_PRINTER) { + if (!last_selected_ph_printer_name.empty() && + m_presets->get_edited_preset().name == PhysicalPrinter::get_preset_name(last_selected_ph_printer_name)) { + // If preset selection was canceled and previously was selected physical printer, we should select it back + m_preset_bundle->physical_printers.select_printer(last_selected_ph_printer_name); + } + } + update_tab_ui(); + // Trigger the on_presets_changed event so that we also restore the previous value in the plater selector, // if this action was initiated from the plater. on_presets_changed(); @@ -3095,6 +3105,14 @@ void Tab::select_preset(std::string preset_name, bool delete_current) else if (printer_technology == ptSLA && m_dependent_tabs.front() != Preset::Type::TYPE_SLA_PRINT) m_dependent_tabs = { Preset::Type::TYPE_SLA_PRINT, Preset::Type::TYPE_SLA_MATERIAL }; } + + // check and apply extruders count for printer preset + if (m_type == Preset::TYPE_PRINTER) + static_cast(this)->apply_extruder_cnt_from_cache(); + + // check if there is something in the cache to move to the new selected preset + apply_config_from_cache(); + load_current_preset(); } } @@ -3104,41 +3122,56 @@ void Tab::select_preset(std::string preset_name, bool delete_current) bool Tab::may_discard_current_dirty_preset(PresetCollection* presets /*= nullptr*/, const std::string& new_printer_name /*= ""*/) { if (presets == nullptr) presets = m_presets; - // Display a dialog showing the dirty options in a human readable form. - const Preset& old_preset = presets->get_edited_preset(); - std::string type_name = presets->name(); - wxString tab = " "; - wxString name = old_preset.is_default ? - from_u8((boost::format(_utf8(L("Default preset (%s)"))) % _utf8(type_name)).str()) : - from_u8((boost::format(_utf8(L("Preset (%s)"))) % _utf8(type_name)).str()) + "\n" + tab + old_preset.name; - // Collect descriptions of the dirty options. - wxString changes; - for (const std::string &opt_key : presets->current_dirty_options()) { - const ConfigOptionDef &opt = m_config->def()->options.at(opt_key); - /*std::string*/wxString name = ""; - if (! opt.category.empty()) - name += _(opt.category) + " > "; - name += !opt.full_label.empty() ? - _(opt.full_label) : - _(opt.label); - changes += tab + /*from_u8*/(name) + "\n"; + UnsavedChangesDialog dlg(m_type, presets, new_printer_name); + if (wxGetApp().app_config->get("default_action_on_select_preset") == "none" && dlg.ShowModal() == wxID_CANCEL) + return false; + + if (dlg.save_preset()) // save selected changes + { + const std::vector& unselected_options = dlg.get_unselected_options(presets->type()); + const std::string& name = dlg.get_preset_name(); + + if (m_type == presets->type()) // save changes for the current preset from this tab + { + // revert unselected options to the old values + presets->get_edited_preset().config.apply_only(presets->get_selected_preset().config, unselected_options); + save_preset(name); + } + else + { + m_preset_bundle->save_changes_for_preset(name, presets->type(), unselected_options); + + // If filament preset is saved for multi-material printer preset, + // there are cases when filament comboboxs are updated for old (non-modified) colors, + // but in full_config a filament_colors option aren't. + if (presets->type() == Preset::TYPE_FILAMENT && wxGetApp().extruders_edited_cnt() > 1) + wxGetApp().plater()->force_filament_colors_update(); + } } - // Show a confirmation dialog with the list of dirty options. - wxString message = name + "\n\n"; - if (new_printer_name.empty()) - message += _(L("has the following unsaved changes:")); - else { - message += (m_type == Slic3r::Preset::TYPE_PRINTER) ? - _(L("is not compatible with printer")) : - _(L("is not compatible with print profile")); - message += wxString("\n") + tab + from_u8(new_printer_name) + "\n\n"; - message += _(L("and it has the following unsaved changes:")); + else if (dlg.transfer_changes()) // move selected changes + { + std::vector selected_options = dlg.get_selected_options(); + if (m_type == presets->type()) // move changes for the current preset from this tab + { + if (m_type == Preset::TYPE_PRINTER) { + auto it = std::find(selected_options.begin(), selected_options.end(), "extruders_count"); + if (it != selected_options.end()) { + // erase "extruders_count" option from the list + selected_options.erase(it); + // cache the extruders count + static_cast(this)->cache_extruder_cnt(); + } + } + + // copy selected options to the cache from edited preset + cache_config_diff(selected_options); + } + else + wxGetApp().get_tab(presets->type())->cache_config_diff(selected_options); } - wxMessageDialog confirm(parent(), - message + "\n" + changes + "\n\n" + _(L("Discard changes and continue anyway?")), - _(L("Unsaved Changes")), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION); - return confirm.ShowModal() == wxID_YES; + + return true; } // If we are switching from the FFF-preset to the SLA, we should to control the printed objects if they have a part(s). @@ -3156,14 +3189,50 @@ bool Tab::may_switch_to_SLA_preset() return true; } -void Tab::OnTreeSelChange(wxTreeEvent& event) +void Tab::clear_pages() { - if (m_disable_tree_sel_changed_event) + // invalidated highlighter, if any exists + m_highlighter.invalidate(); + m_page_sizer->Clear(true); + // clear pages from the controlls + for (auto p : m_pages) + p->clear(); + + // nulling pointers + m_parent_preset_description_line = nullptr; + m_detach_preset_btn = nullptr; + + m_compatible_printers.checkbox = nullptr; + m_compatible_printers.btn = nullptr; + + m_compatible_prints.checkbox = nullptr; + m_compatible_prints.btn = nullptr; + + m_blinking_ikons.clear(); +} + +void Tab::update_description_lines() +{ + if (m_active_page && m_active_page->title() == "Dependencies") + update_preset_description_line(); +} + +void Tab::activate_selected_page(std::function throw_if_canceled) +{ + if (!m_active_page) return; -// There is a bug related to Ubuntu overlay scrollbars, see https://github.com/prusa3d/PrusaSlicer/issues/898 and https://github.com/prusa3d/PrusaSlicer/issues/952. -// The issue apparently manifests when Show()ing a window with overlay scrollbars while the UI is frozen. For this reason, -// we will Thaw the UI prematurely on Linux. This means destroing the no_updates object prematurely. + m_active_page->activate(m_mode, throw_if_canceled); + update_changed_ui(); + update_description_lines(); + toggle_options(); +} + +bool Tab::tree_sel_change_delayed() +{ + // There is a bug related to Ubuntu overlay scrollbars, see https://github.com/prusa3d/PrusaSlicer/issues/898 and https://github.com/prusa3d/PrusaSlicer/issues/952. + // The issue apparently manifests when Show()ing a window with overlay scrollbars while the UI is frozen. For this reason, + // we will Thaw the UI prematurely on Linux. This means destroing the no_updates object prematurely. #ifdef __linux__ std::unique_ptr no_updates(new wxWindowUpdateLocker(this)); #else @@ -3171,13 +3240,10 @@ void Tab::OnTreeSelChange(wxTreeEvent& event) * so on Window is no needed to call a Freeze/Thaw functions. * But under OSX (builds compiled with MacOSX10.14.sdk) wxStaticBitmap rendering is broken without Freeze/Thaw call. */ -#ifdef __WXOSX__ - wxWindowUpdateLocker noUpdates(this); +//#ifdef __WXOSX__ // Use Freeze/Thaw to avoid flickering during clear/activate new page + wxWindowUpdateLocker noUpdates(this); +//#endif #endif -#endif - - if (m_pages.empty()) - return; Page* page = nullptr; const auto sel_item = m_treectrl->GetSelection(); @@ -3190,25 +3256,44 @@ void Tab::OnTreeSelChange(wxTreeEvent& event) m_is_modified_values = page->m_is_modified_values; break; } - if (page == nullptr) return; + if (page == nullptr || m_active_page == page) + return false; - for (auto& el : m_pages) -// if (el.get()->IsShown()) { - el.get()->Hide(); -// break; -// } + // clear pages from the controls + m_active_page = page; + + auto throw_if_canceled = std::function([this](){ +#ifdef WIN32 + wxCheckForInterrupt(m_treectrl); + if (m_page_switch_planned) + throw UIBuildCanceled(); +#endif // WIN32 + }); - #ifdef __linux__ - no_updates.reset(nullptr); - #endif + try { + clear_pages(); + throw_if_canceled(); + + if (wxGetApp().mainframe!=nullptr && wxGetApp().mainframe->is_active_and_shown_tab(this)) + activate_selected_page(throw_if_canceled); + + #ifdef __linux__ + no_updates.reset(nullptr); + #endif + + update_undo_buttons(); + throw_if_canceled(); - update_undo_buttons(); - page->Show(); -// if (! page->layout_valid) { - page->layout_valid = true; m_hsizer->Layout(); + throw_if_canceled(); Refresh(); -// } + } catch (const UIBuildCanceled&) { + if (m_active_page) + m_active_page->clear(); + return true; + } + + return false; } void Tab::OnKeyDown(wxKeyEvent& event) @@ -3223,7 +3308,7 @@ void Tab::OnKeyDown(wxKeyEvent& event) // This removes the "dirty" flag of the preset, possibly creates a new preset under a new name, // and activates the new preset. // Wizard calls save_preset with a name "My Settings", otherwise no name is provided and this method -// opens a Slic3r::GUI::SavePresetWindow dialog. +// opens a Slic3r::GUI::SavePresetDialog dialog. void Tab::save_preset(std::string name /*= ""*/, bool detach) { // since buttons(and choices too) don't get focus on Mac, we set focus manually @@ -3231,59 +3316,11 @@ void Tab::save_preset(std::string name /*= ""*/, bool detach) // focus currently.is there anything better than this ? //! m_treectrl->OnSetFocus(); - std::string suffix = detach ? _utf8(L("Detached")) : _CTX_utf8(L_CONTEXT("Copy", "PresetName"), "PresetName"); - if (name.empty()) { - const Preset &preset = m_presets->get_selected_preset(); - auto default_name = preset.is_default ? "Untitled" : -// preset.is_system ? (boost::format(_CTX_utf8(L_CONTEXT("%1% - Copy", "PresetName"), "PresetName")) % preset.name).str() : - preset.is_system ? (boost::format(("%1% - %2%")) % preset.name % suffix).str() : - preset.name; - - bool have_extention = boost::iends_with(default_name, ".ini"); - if (have_extention) { - size_t len = default_name.length()-4; - default_name.resize(len); - } - //[map $_->name, grep !$_->default && !$_->external, @{$self->{presets}}], - std::vector values; - for (size_t i = 0; i < m_presets->size(); ++i) { - const Preset &preset = m_presets->preset(i); - if (preset.is_default || preset.is_system || preset.is_external) - continue; - values.push_back(preset.name); - } - - SavePresetWindow dlg(parent()); - dlg.build(title(), default_name, values); + SavePresetDialog dlg(m_type, detach ? _u8L("Detached") : ""); if (dlg.ShowModal() != wxID_OK) return; name = dlg.get_name(); - if (name == "") { - show_error(this, _(L("The supplied name is empty. It can't be saved."))); - return; - } - const Preset *existing = m_presets->find_preset(name, false); - if (existing && (existing->is_default || existing->is_system)) { - show_error(this, _(L("Cannot overwrite a system profile."))); - return; - } - if (existing && (existing->is_external)) { - show_error(this, _(L("Cannot overwrite an external profile."))); - return; - } - if (existing && name != preset.name) - { - wxString msg_text = GUI::from_u8((boost::format(_utf8(L("Preset with name \"%1%\" already exists."))) % name).str()); - msg_text += "\n" + _(L("Replace?")); - wxMessageDialog dialog(nullptr, msg_text, _(L("Warning")), wxICON_WARNING | wxYES | wxNO); - - if (dialog.ShowModal() == wxID_NO) - return; - - // Remove the preset from the list. - m_presets->delete_preset(name); - } } // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini @@ -3296,7 +3333,7 @@ void Tab::save_preset(std::string name /*= ""*/, bool detach) // Update the selection boxes at the plater. on_presets_changed(); // If current profile is saved, "delete preset" button have to be enabled - m_btn_delete_preset->Enable(true); + m_btn_delete_preset->Show(); if (m_type == Preset::TYPE_PRINTER) static_cast(this)->m_initial_extruders_count = static_cast(this)->m_extruders_count; @@ -3345,13 +3382,73 @@ void Tab::delete_preset() // Don't let the user delete the ' - default - ' configuration. std::string action = current_preset.is_external ? _utf8(L("remove")) : _utf8(L("delete")); // TRN remove/delete - const wxString msg = from_u8((boost::format(_utf8(L("Are you sure you want to %1% the selected preset?"))) % action).str()); + + PhysicalPrinterCollection& physical_printers = m_preset_bundle->physical_printers; + wxString msg; + if (m_presets_choice->is_selected_physical_printer()) + { + PhysicalPrinter& printer = physical_printers.get_selected_printer(); + if (printer.preset_names.size() == 1) { + if (m_presets_choice->del_physical_printer(_L("It's a last preset for this physical printer."))) + Layout(); + return; + } + + msg = format_wxstr(_L("Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"), current_preset.name, printer.name); + } + else + { + if (m_type == Preset::TYPE_PRINTER && !physical_printers.empty()) + { + // Check preset for delete in physical printers + // Ask a customer about next action, if there is a printer with just one preset and this preset is equal to delete + std::vector ph_printers = physical_printers.get_printers_with_preset(current_preset.name); + std::vector ph_printers_only = physical_printers.get_printers_with_only_preset(current_preset.name); + + if (!ph_printers.empty()) { + msg += _L("Next physical printer(s) has/have selected preset") + ":"; + for (const std::string& printer : ph_printers) + msg += "\n \"" + from_u8(printer) + "\","; + msg.RemoveLast(); + msg += "\n" + _L("Note, that selected preset will be deleted from this/those printer(s) too.")+ "\n\n"; + } + + if (!ph_printers_only.empty()) { + msg += _L("Next physical printer(s) has/have one and only selected preset") + ":"; + for (const std::string& printer : ph_printers_only) + msg += "\n \"" + from_u8(printer) + "\","; + msg.RemoveLast(); + msg += "\n" + _L("Note, that this/those printer(s) will be deleted after deleting of the selected preset.") + "\n\n"; + } + } + + msg += from_u8((boost::format(_u8L("Are you sure you want to %1% the selected preset?")) % action).str()); + } + action = current_preset.is_external ? _utf8(L("Remove")) : _utf8(L("Delete")); // TRN Remove/Delete wxString title = from_u8((boost::format(_utf8(L("%1% Preset"))) % action).str()); //action + _(L(" Preset")); if (current_preset.is_default || wxID_YES != wxMessageDialog(parent(), msg, title, wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal()) return; + + // if we just delete preset from the physical printer + if (m_presets_choice->is_selected_physical_printer()) { + PhysicalPrinter& printer = physical_printers.get_selected_printer(); + + // just delete this preset from the current physical printer + printer.delete_preset(m_presets->get_edited_preset().name); + // select first from the possible presets for this printer + physical_printers.select_printer(printer); + + this->select_preset(physical_printers.get_selected_printer_preset_name()); + return; + } + + // delete selected preset from printers and printer, if it's needed + if (m_type == Preset::TYPE_PRINTER && !physical_printers.empty()) + physical_printers.delete_preset_from_printers(current_preset.name); + // Select will handle of the preset dependencies, of saving & closing the depending profiles, and // finally of deleting the preset. this->select_preset("", true); @@ -3360,6 +3457,7 @@ void Tab::delete_preset() void Tab::toggle_show_hide_incompatible() { m_show_incompatible_presets = !m_show_incompatible_presets; + m_presets_choice->set_show_incompatible_presets(m_show_incompatible_presets); update_show_hide_incompatible_button(); update_tab_ui(); } @@ -3399,7 +3497,8 @@ void Tab::create_line_with_widget(ConfigOptionsGroup* optgroup, const std::strin line.widget = widget; m_colored_Labels[opt_key] = nullptr; - optgroup->append_line(line, &m_colored_Labels[opt_key]); + line.full_Label = &m_colored_Labels[opt_key]; + optgroup->append_line(line); } // Return a callback to create a Tab widget to mark the preferences as compatible / incompatible to the current printer. @@ -3407,7 +3506,8 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep { deps.checkbox = new wxCheckBox(parent, wxID_ANY, _(L("All"))); deps.checkbox->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - add_scaled_button(parent, &deps.btn, "printer_white", from_u8((boost::format(" %s %s") % _utf8(L("Set")) % std::string(dots.ToUTF8())).str()), wxBU_LEFT | wxBU_EXACTFIT); + deps.btn = new ScalableButton(parent, wxID_ANY, "printer_white", from_u8((boost::format(" %s %s") % _utf8(L("Set")) % std::string(dots.ToUTF8())).str()), + wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); deps.btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); BlinkingBitmap* bbmp = new BlinkingBitmap(parent); @@ -3485,8 +3585,8 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep // Return a callback to create a TabPrinter widget to edit bed shape wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) { - ScalableButton* btn; - add_scaled_button(parent, &btn, "printer_white", " " + _(L("Set")) + " " + dots, wxBU_LEFT | wxBU_EXACTFIT); + ScalableButton* btn = new ScalableButton(parent, wxID_ANY, "printer_white", " " + _(L("Set")) + " " + dots, + wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); btn->SetFont(wxGetApp().normal_font()); BlinkingBitmap* bbmp = new BlinkingBitmap(parent); @@ -3533,12 +3633,55 @@ wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) return sizer; } +void TabPrinter::cache_extruder_cnt() +{ + if (m_presets->get_edited_preset().printer_technology() == ptSLA) + return; + + m_cache_extruder_count = m_extruders_count; +} + +void TabPrinter::apply_extruder_cnt_from_cache() +{ + if (m_presets->get_edited_preset().printer_technology() == ptSLA) + return; + + if (m_cache_extruder_count > 0) { + m_presets->get_edited_preset().set_num_extruders(m_cache_extruder_count); + m_cache_extruder_count = 0; + } +} + +void TabPrinter::update_machine_limits_description(const MachineLimitsUsage usage) +{ + wxString text; + switch (usage) { + case MachineLimitsUsage::EmitToGCode: + text = _L("Machine limits will be emitted to G-code and used to estimate print time."); + break; + case MachineLimitsUsage::TimeEstimateOnly: + text = _L("Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, " + "which may therefore not be accurate as the printer may apply a different set of machine limits."); + break; + case MachineLimitsUsage::Ignore: + text = _L("Machine limits are not set, therefore the print time estimate may not be accurate."); + break; + default: assert(false); + } + m_machine_limits_description_line->SetText(text); +} + void Tab::compatible_widget_reload(PresetDependencies &deps) { + Field* field = this->get_field(deps.key_condition); + if (!field) + return; + bool has_any = ! m_config->option(deps.key_list)->values.empty(); has_any ? deps.btn->Enable() : deps.btn->Disable(); deps.checkbox->SetValue(! has_any); - this->get_field(deps.key_condition)->toggle(! has_any); + + field->toggle(! has_any); } void Tab::fill_icon_descriptions() @@ -3605,10 +3748,8 @@ Page::Page(wxWindow* parent, const wxString& title, const int iconID, const std: m_iconID(iconID), m_mode_bitmap_cache(mode_bmp_cache) { - Create(m_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - m_vsizer = new wxBoxSizer(wxVERTICAL); + m_vsizer = (wxBoxSizer*)parent->GetSizer(); m_item_color = &wxGetApp().get_label_clr_default(); - SetSizer(m_vsizer); } void Page::reload_config() @@ -3617,15 +3758,37 @@ void Page::reload_config() group->reload_config(); } -void Page::update_visibility(ConfigOptionMode mode) +void Page::update_visibility(ConfigOptionMode mode, bool update_contolls_visibility) { bool ret_val = false; - for (auto group : m_optgroups) - ret_val = group->update_visibility(mode) || ret_val; + for (auto group : m_optgroups) { + ret_val = (update_contolls_visibility ? + group->update_visibility(mode) : // update visibility for all controlls in group + group->is_visible(mode) // just detect visibility for the group + ) || ret_val; + } m_show = ret_val; } +void Page::activate(ConfigOptionMode mode, std::function throw_if_canceled) +{ + for (auto group : m_optgroups) { + if (!group->activate(throw_if_canceled)) + continue; + m_vsizer->Add(group->sizer, 0, wxEXPAND | wxALL, 10); + group->update_visibility(mode); + group->reload_config(); + throw_if_canceled(); + } +} + +void Page::clear() +{ + for (auto group : m_optgroups) + group->clear(); +} + void Page::msw_rescale() { for (auto group : m_optgroups) @@ -3653,7 +3816,7 @@ bool Page::set_value(const t_config_option_key& opt_key, const boost::any& value bool changed = false; for(auto optgroup: m_optgroups) { if (optgroup->set_value(opt_key, value)) - changed = 1 ; + changed = true ; } return changed; } @@ -3676,15 +3839,15 @@ ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_la }; //! config_ have to be "right" - ConfigOptionsGroupShp optgroup = std::make_shared(this, title, m_config, true, extra_column); - optgroup->config_category = m_title.ToStdString(); + ConfigOptionsGroupShp optgroup = std::make_shared(/*this*/m_parent, title, m_config, true, extra_column); + optgroup->set_config_category(m_title.ToStdString()); if (noncommon_label_width >= 0) optgroup->label_width = noncommon_label_width; #ifdef __WXOSX__ - auto tab = GetParent()->GetParent(); + auto tab = parent()->GetParent()->GetParent();// GetParent()->GetParent(); #else - auto tab = GetParent(); + auto tab = parent()->GetParent();// GetParent(); #endif optgroup->m_on_change = [this, tab](t_config_option_key opt_key, boost::any value) { //! This function will be called from OptionGroup. @@ -3718,71 +3881,11 @@ ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_la ctrl->SetBitmap(reinterpret_cast(ctrl->GetClientData())->bmp()); }; - vsizer()->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 10); m_optgroups.push_back(optgroup); return optgroup; } -void SavePresetWindow::build(const wxString& title, const std::string& default_name, std::vector &values) -{ - // TRN Preset - auto text = new wxStaticText(this, wxID_ANY, from_u8((boost::format(_utf8(L("Save %s as:"))) % into_u8(title)).str()), - wxDefaultPosition, wxDefaultSize); - m_combo = new wxComboBox(this, wxID_ANY, from_u8(default_name), - wxDefaultPosition, wxDefaultSize, 0, 0, wxTE_PROCESS_ENTER); - for (auto value : values) - m_combo->Append(from_u8(value)); - auto buttons = CreateStdDialogButtonSizer(wxOK | wxCANCEL); - - auto sizer = new wxBoxSizer(wxVERTICAL); - sizer->Add(text, 0, wxEXPAND | wxALL, 10); - sizer->Add(m_combo, 0, wxEXPAND | wxLEFT | wxRIGHT, 10); - sizer->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 10); - - wxButton* btn = static_cast(FindWindowById(wxID_OK, this)); - btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { accept(); }); - m_combo->Bind(wxEVT_TEXT_ENTER, [this](wxCommandEvent&) { accept(); }); - - SetSizer(sizer); - sizer->SetSizeHints(this); -} - -void SavePresetWindow::accept() -{ - m_chosen_name = normalize_utf8_nfc(m_combo->GetValue().ToUTF8()); - if (!m_chosen_name.empty()) { - const char* unusable_symbols = "<>[]:/\\|?*\""; - bool is_unusable_symbol = false; - bool is_unusable_suffix = false; - const std::string unusable_suffix = PresetCollection::get_suffix_modified();//"(modified)"; - for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { - if (m_chosen_name.find_first_of(unusable_symbols[i]) != std::string::npos) { - is_unusable_symbol = true; - break; - } - } - if (m_chosen_name.find(unusable_suffix) != std::string::npos) - is_unusable_suffix = true; - - if (is_unusable_symbol) { - show_error(this,_(L("The supplied name is not valid;")) + "\n" + - _(L("the following characters are not allowed:")) + " " + unusable_symbols); - } - else if (is_unusable_suffix) { - show_error(this,_(L("The supplied name is not valid;")) + "\n" + - _(L("the following suffix is not allowed:")) + "\n\t" + - wxString::FromUTF8(unusable_suffix.c_str())); - } - else if (m_chosen_name == "- default -") { - show_error(this, _(L("The supplied name is not available."))); - } - else { - EndModal(wxID_OK); - } - } -} - void TabSLAMaterial::build() { m_presets = &m_preset_bundle->sla_materials; @@ -3919,6 +4022,7 @@ void TabSLAPrint::build() optgroup = page->new_optgroup(L("Support pillar")); optgroup->append_single_option_line("support_pillar_diameter"); + optgroup->append_single_option_line("support_small_pillar_diameter_percent"); optgroup->append_single_option_line("support_max_bridges_on_pillar"); optgroup->append_single_option_line("support_pillar_connection_mode"); @@ -3930,9 +4034,15 @@ void TabSLAPrint::build() optgroup->append_single_option_line("support_base_safety_distance"); // Mirrored parameter from Pad page for toggling elevation on the same page - optgroup->append_single_option_line("pad_around_object"); optgroup->append_single_option_line("support_object_elevation"); + Line line{ "", "" }; + line.full_width = 1; + line.widget = [this](wxWindow* parent) { + return description_line_widget(parent, &m_support_object_elevation_description_line); + }; + optgroup->append_line(line); + optgroup = page->new_optgroup(L("Connection of the support sticks and junctions")); optgroup->append_single_option_line("support_critical_angle"); optgroup->append_single_option_line("support_max_bridge_length"); @@ -3998,6 +4108,34 @@ void TabSLAPrint::reload_config() Tab::reload_config(); } +void TabSLAPrint::update_description_lines() +{ + Tab::update_description_lines(); + + if (m_active_page && m_active_page->title() == "Supports") + { + bool is_visible = m_config->def()->get("support_object_elevation")->mode <= m_mode; + if (m_support_object_elevation_description_line) + { + m_support_object_elevation_description_line->Show(is_visible); + if (is_visible) + { + bool elev = !m_config->opt_bool("pad_enable") || !m_config->opt_bool("pad_around_object"); + m_support_object_elevation_description_line->SetText(elev ? "" : + from_u8((boost::format(_u8L("\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n" + "To enable \"%1%\", please switch off \"%2%\"")) + % _L("Object elevation") % _L("Pad around object") % _L("Pad")).str())); + } + } + } +} + +void TabSLAPrint::toggle_options() +{ + if (m_active_page) + m_config_manipulation.toggle_print_sla_options(m_config); +} + void TabSLAPrint::update() { if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptFFF) @@ -4006,10 +4144,14 @@ void TabSLAPrint::update() m_update_cnt++; m_config_manipulation.update_print_sla_config(m_config, true); + + update_description_lines(); + Layout(); + m_update_cnt--; if (m_update_cnt == 0) { - m_config_manipulation.toggle_print_sla_options(m_config); + toggle_options(); // update() could be called during undo/redo execution // Update of objectList can cause a crash in this case (because m_objects doesn't match ObjectList) @@ -4020,6 +4162,13 @@ void TabSLAPrint::update() } } +void TabSLAPrint::clear_pages() +{ + Tab::clear_pages(); + + m_support_object_elevation_description_line = nullptr; +} + ConfigManipulation Tab::get_config_manipulation() { auto load_config = [this]() @@ -4030,15 +4179,15 @@ ConfigManipulation Tab::get_config_manipulation() update(); }; - auto get_field_ = [this](const t_config_option_key& opt_key, int opt_index) { - return get_field(opt_key, opt_index); + auto cb_toggle_field = [this](const t_config_option_key& opt_key, bool toggle, int opt_index) { + return toggle_option(opt_key, toggle, opt_index); }; auto cb_value_change = [this](const std::string& opt_key, const boost::any& value) { return on_value_change(opt_key, value); }; - return ConfigManipulation(load_config, get_field_, cb_value_change); + return ConfigManipulation(load_config, cb_toggle_field, cb_value_change); } diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 5805809bfb..54c137b2cd 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -33,16 +33,18 @@ #include "Event.hpp" #include "wxExtensions.hpp" #include "ConfigManipulation.hpp" -#include "Preset.hpp" #include "OptionsGroup.hpp" +#include "libslic3r/Preset.hpp" namespace Slic3r { namespace GUI { +class TabPresetComboBox; + // Single Tab page containing a{ vsizer } of{ optgroups } // package Slic3r::GUI::Tab::Page; using ConfigOptionsGroupShp = std::shared_ptr; -class Page : public wxScrolledWindow +class Page// : public wxScrolledWindow { wxWindow* m_parent; wxString m_title; @@ -58,7 +60,6 @@ public: bool m_is_nonsys_values{ true }; // Delayed layout after resizing the main window. - bool layout_valid = false; const std::vector& m_mode_bitmap_cache; public: @@ -71,7 +72,9 @@ public: size_t iconID() const { return m_iconID; } void set_config(DynamicPrintConfig* config_in) { m_config = config_in; } void reload_config(); - void update_visibility(ConfigOptionMode mode); + void update_visibility(ConfigOptionMode mode, bool update_contolls_visibility); + void activate(ConfigOptionMode mode, std::function throw_if_canceled); + void clear(); void msw_rescale(); void sys_color_changed(); Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const; @@ -113,17 +116,21 @@ protected: Preset::Type m_type; std::string m_name; const wxString m_title; - PresetBitmapComboBox* m_presets_choice; + TabPresetComboBox* m_presets_choice; ScalableButton* m_search_btn; ScalableButton* m_btn_save_preset; ScalableButton* m_btn_delete_preset; + ScalableButton* m_btn_edit_ph_printer {nullptr}; ScalableButton* m_btn_hide_incompatible_presets; wxBoxSizer* m_hsizer; wxBoxSizer* m_left_sizer; wxTreeCtrl* m_treectrl; wxImageList* m_icons; - ModeSizer* m_mode_sizer; + wxScrolledWindow* m_page_view {nullptr}; + wxBoxSizer* m_page_sizer {nullptr}; + + ModeSizer* m_mode_sizer; struct PresetDependencies { Preset::Type type = Preset::TYPE_INVALID; @@ -191,8 +198,10 @@ protected: int m_icon_count; std::map m_icon_index; // Map from an icon file name to its index + std::map m_category_icon; // Map from a category name to an icon file name std::vector m_pages; - bool m_disable_tree_sel_changed_event; + Page* m_active_page {nullptr}; + bool m_disable_tree_sel_changed_event {false}; bool m_show_incompatible_presets; std::vector m_dependent_tabs; @@ -206,8 +215,6 @@ protected: bool m_is_nonsys_values{ true }; bool m_postpone_update_ui {false}; - size_t m_selected_preset_item{ 0 }; - void set_type(); int m_em_unit; @@ -220,9 +227,9 @@ protected: void set_timer_owner(wxEvtHandler* owner, int timerid = wxID_ANY); void init(BlinkingBitmap* bmp); void blink(); + void invalidate(); private: - void invalidate(); BlinkingBitmap* bbmp {nullptr}; int blink_counter {0}; @@ -230,12 +237,18 @@ protected: } m_highlighter; + DynamicPrintConfig m_cache_config; + + + bool m_page_switch_running = false; + bool m_page_switch_planned = false; + public: PresetBundle* m_preset_bundle; bool m_show_btn_incompatible_presets = false; PresetCollection* m_presets; DynamicPrintConfig* m_config; - ogStaticText* m_parent_preset_description_line; + ogStaticText* m_parent_preset_description_line = nullptr; ScalableButton* m_detach_preset_btn = nullptr; // map of option name -> wxStaticText (colored label, associated with option) @@ -274,12 +287,17 @@ public: void update_ui_items_related_on_parent_preset(const Preset* selected_preset_parent); void load_current_preset(); void rebuild_page_tree(); - void update_page_tree_visibility(); - // Select a new preset, possibly delete the current one. - void select_preset(std::string preset_name = "", bool delete_current = false); + void update_btns_enabling(); + void update_preset_choice(); + // Select a new preset, possibly delete the current one. + void select_preset(std::string preset_name = "", bool delete_current = false, const std::string& last_selected_ph_printer_name = ""); bool may_discard_current_dirty_preset(PresetCollection* presets = nullptr, const std::string& new_printer_name = ""); bool may_switch_to_SLA_preset(); + virtual void clear_pages(); + virtual void update_description_lines(); + virtual void activate_selected_page(std::function throw_if_canceled); + void OnTreeSelChange(wxTreeEvent& event); void OnKeyDown(wxKeyEvent& event); @@ -289,6 +307,7 @@ public: void update_show_hide_incompatible_button(); void update_ui_from_settings(); void update_labels_colour(); + void decorate(); void update_changed_ui(); void get_sys_and_mod_flags(const std::string& opt_key, bool& sys_page, bool& modified_page); void update_changed_tree_ui(); @@ -302,6 +321,7 @@ public: virtual void on_preset_loaded() {} virtual void build() = 0; virtual void update() = 0; + virtual void toggle_options() = 0; virtual void init_options_list(); void load_initial_data(); void update_dirty(); @@ -314,19 +334,22 @@ public: virtual void sys_color_changed(); Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const; Field* get_field(const t_config_option_key &opt_key, Page** selected_page, int opt_index = -1); - bool set_value(const t_config_option_key& opt_key, const boost::any& value); - wxSizer* description_line_widget(wxWindow* parent, ogStaticText** StaticText); + void toggle_option(const std::string& opt_key, bool toggle, int opt_index = -1); + wxSizer* description_line_widget(wxWindow* parent, ogStaticText** StaticText, wxString text = wxEmptyString); bool current_preset_is_dirty(); DynamicPrintConfig* get_config() { return m_config; } PresetCollection* get_presets() { return m_presets; } - size_t get_selected_preset_item() { return m_selected_preset_item; } void on_value_change(const std::string& opt_key, const boost::any& value); void update_wiping_button_visibility(); void activate_option(const std::string& opt_key, const wxString& category); void apply_searcher(); + void cache_config_diff(const std::vector& selected_options); + void apply_config_from_cache(); + + const std::map& get_category_icon_map() { return m_category_icon; } protected: void create_line_with_widget(ConfigOptionsGroup* optgroup, const std::string& opt_key, widget_t widget); @@ -334,6 +357,8 @@ protected: void compatible_widget_reload(PresetDependencies &deps); void load_key_value(const std::string& opt_key, const boost::any& value, bool saved_value = false); + // return true if cancelled + bool tree_sel_change_delayed(); void on_presets_changed(); void build_preset_description_line(ConfigOptionsGroup* optgroup); void update_preset_description_line(); @@ -353,21 +378,25 @@ public: Tab(parent, _(L("Print Settings")), Slic3r::Preset::TYPE_PRINT) {} ~TabPrint() {} + void build() override; + void reload_config() override; + void update_description_lines() override; + void toggle_options() override; + void update() override; + void clear_pages() override; + bool supports_printer_technology(const PrinterTechnology tech) override { return tech == ptFFF; } + +private: ogStaticText* m_recommended_thin_wall_thickness_description_line = nullptr; ogStaticText* m_top_bottom_shell_thickness_explanation = nullptr; bool m_support_material_overhangs_queried = false; - - void build() override; - void reload_config() override; - void update() override; - void OnActivate() override; - bool supports_printer_technology(const PrinterTechnology tech) override { return tech == ptFFF; } }; class TabFilament : public Tab { - ogStaticText* m_volumetric_speed_description_line; - ogStaticText* m_cooling_description_line; +private: + ogStaticText* m_volumetric_speed_description_line {nullptr}; + ogStaticText* m_cooling_description_line {nullptr}; void add_filament_overrides_page(); void update_filament_overrides_page(); @@ -382,22 +411,29 @@ public: void build() override; void reload_config() override; + void update_description_lines() override; + void toggle_options() override; void update() override; - void OnActivate() override; + void clear_pages() override; bool supports_printer_technology(const PrinterTechnology tech) override { return tech == ptFFF; } }; class TabPrinter : public Tab { +private: bool m_has_single_extruder_MM_page = false; bool m_use_silent_mode = false; void append_option_line(ConfigOptionsGroupShp optgroup, const std::string opt_key); bool m_rebuild_kinematics_page = false; + ogStaticText* m_machine_limits_description_line {nullptr}; + void update_machine_limits_description(const MachineLimitsUsage usage); + + ogStaticText* m_fff_print_host_upload_description_line {nullptr}; + ogStaticText* m_sla_print_host_upload_description_line {nullptr}; std::vector m_pages_fff; std::vector m_pages_sla; - void build_printhost(ConfigOptionsGroup *optgroup); public: wxButton* m_serial_test_btn = nullptr; ScalableButton* m_print_host_test_btn = nullptr; @@ -408,6 +444,7 @@ public: size_t m_extruders_count_old = 0; size_t m_initial_extruders_count; size_t m_sys_extruders_count; + size_t m_cache_extruder_count = 0; PrinterTechnology m_printer_technology = ptFFF; @@ -417,13 +454,16 @@ public: ~TabPrinter() {} void build() override; + void build_print_host_upload_group(Page* page); void build_fff(); void build_sla(); + void activate_selected_page(std::function throw_if_canceled) override; + void clear_pages() override; + void toggle_options() override; void update() override; void update_fff(); void update_sla(); void update_pages(); // update m_pages according to printer technology - void update_serial_ports(); void extruders_count_changed(size_t extruders_count); PageShp build_kinematics_page(); void build_unregular_pages(); @@ -434,6 +474,8 @@ public: bool supports_printer_technology(const PrinterTechnology /* tech */) override { return true; } wxSizer* create_bed_shape_widget(wxWindow* parent); + void cache_extruder_cnt(); + void apply_extruder_cnt_from_cache(); }; class TabSLAMaterial : public Tab @@ -446,6 +488,7 @@ public: void build() override; void reload_config() override; + void toggle_options() override {}; void update() override; void init_options_list() override; bool supports_printer_technology(const PrinterTechnology tech) override { return tech == ptSLA; } @@ -458,27 +501,18 @@ public: // Tab(parent, _(L("Print Settings")), L("sla_print")) {} Tab(parent, _(L("Print Settings")), Slic3r::Preset::TYPE_SLA_PRINT) {} ~TabSLAPrint() {} + + ogStaticText* m_support_object_elevation_description_line = nullptr; + void build() override; void reload_config() override; + void update_description_lines() override; + void toggle_options() override; void update() override; -// void init_options_list() override; + void clear_pages() override; bool supports_printer_technology(const PrinterTechnology tech) override { return tech == ptSLA; } }; -class SavePresetWindow :public wxDialog -{ -public: - SavePresetWindow(wxWindow* parent) :wxDialog(parent, wxID_ANY, _(L("Save preset"))) {} - ~SavePresetWindow() {} - - std::string m_chosen_name; - wxComboBox* m_combo; - - void build(const wxString& title, const std::string& default_name, std::vector &values); - void accept(); - std::string get_name() { return m_chosen_name; } -}; - } // GUI } // Slic3r diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp new file mode 100644 index 0000000000..02c61b4167 --- /dev/null +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -0,0 +1,1198 @@ +#include "UnsavedChangesDialog.hpp" + +#include +#include +#include +#include +#include + +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/PresetBundle.hpp" +#include "format.hpp" +#include "GUI_App.hpp" +#include "Plater.hpp" +#include "Tab.hpp" +#include "ExtraRenderers.hpp" +#include "wxExtensions.hpp" +#include "SavePresetDialog.hpp" +#include "MainFrame.hpp" + +//#define FTS_FUZZY_MATCH_IMPLEMENTATION +//#include "fts_fuzzy_match.h" + +#include "BitmapCache.hpp" + +using boost::optional; + +namespace Slic3r { + +namespace GUI { + +// ---------------------------------------------------------------------------- +// ModelNode: a node inside UnsavedChangesModel +// ---------------------------------------------------------------------------- + +static const std::map type_icon_names = { + {Preset::TYPE_PRINT, "cog" }, + {Preset::TYPE_SLA_PRINT, "cog" }, + {Preset::TYPE_FILAMENT, "spool" }, + {Preset::TYPE_SLA_MATERIAL, "resin" }, + {Preset::TYPE_PRINTER, "printer" }, +}; + +static std::string get_icon_name(Preset::Type type, PrinterTechnology pt) { + return pt == ptSLA && type == Preset::TYPE_PRINTER ? "sla_printer" : type_icon_names.at(type); +} + +static std::string black = "#000000"; +static std::string grey = "#808080"; +static std::string orange = "#ed6b21"; + +static void color_string(wxString& str, const std::string& color) +{ +#if defined(SUPPORTS_MARKUP) && !defined(__APPLE__) + str = from_u8((boost::format("%2%") % color % into_u8(str)).str()); +#endif +} + +static void make_string_bold(wxString& str) +{ +#if defined(SUPPORTS_MARKUP) && !defined(__APPLE__) + str = from_u8((boost::format("%1%") % into_u8(str)).str()); +#endif +} + +// preset(root) node +ModelNode::ModelNode(Preset::Type preset_type, wxWindow* parent_win, const wxString& text, const std::string& icon_name) : + m_parent_win(parent_win), + m_parent(nullptr), + m_preset_type(preset_type), + m_icon_name(icon_name), + m_text(text) +{ + UpdateIcons(); +} + +// category node +ModelNode::ModelNode(ModelNode* parent, const wxString& text, const std::string& icon_name) : + m_parent_win(parent->m_parent_win), + m_parent(parent), + m_icon_name(icon_name), + m_text(text) +{ + UpdateIcons(); +} + +// group node +ModelNode::ModelNode(ModelNode* parent, const wxString& text) : + m_parent_win(parent->m_parent_win), + m_parent(parent), + m_text(text), + m_icon_name("dot_small") +{ + UpdateIcons(); +} + +#ifdef __linux__ +wxIcon ModelNode::get_bitmap(const wxString& color) +#else +wxBitmap ModelNode::get_bitmap(const wxString& color) +#endif // __linux__ +{ + /* It's supposed that standard size of an icon is 48px*16px for 100% scaled display. + * So set sizes for solid_colored icons used for filament preset + * and scale them in respect to em_unit value + */ + const double em = em_unit(m_parent_win); + const int icon_width = lround(6.4 * em); + const int icon_height = lround(1.6 * em); + + BitmapCache bmp_cache; + unsigned char rgb[3]; + BitmapCache::parse_color(into_u8(color), rgb); + // there is no need to scale created solid bitmap +#ifndef __linux__ + return bmp_cache.mksolid(icon_width, icon_height, rgb, true); +#else + wxIcon icon; + icon.CopyFromBitmap(bmp_cache.mksolid(icon_width, icon_height, rgb, true)); + return icon; +#endif // __linux__ +} + +// option node +ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& old_value, const wxString& new_value) : + m_parent(parent), + m_old_color(old_value.StartsWith("#") ? old_value : ""), + m_new_color(new_value.StartsWith("#") ? new_value : ""), + m_container(false), + m_text(text), + m_icon_name("empty"), + m_old_value(old_value), + m_new_value(new_value) +{ + // check if old/new_value is color + if (m_old_color.IsEmpty()) { + if (!m_new_color.IsEmpty()) + m_old_value = _L("Undef"); + } + else { + m_old_color_bmp = get_bitmap(m_old_color); + m_old_value.Clear(); + } + + if (m_new_color.IsEmpty()) { + if (!m_old_color.IsEmpty()) + m_new_value = _L("Undef"); + } + else { + m_new_color_bmp = get_bitmap(m_new_color); + m_new_value.Clear(); + } + + // "color" strings + color_string(m_old_value, black); + color_string(m_new_value, orange); + + UpdateIcons(); +} + +void ModelNode::UpdateEnabling() +{ + auto change_text_color = [](wxString& str, const std::string& clr_from, const std::string& clr_to) + { +#if defined(SUPPORTS_MARKUP) && !defined(__APPLE__) + std::string old_val = into_u8(str); + boost::replace_all(old_val, clr_from, clr_to); + str = from_u8(old_val); +#endif + }; + + if (!m_toggle) { + change_text_color(m_text, black, grey); + change_text_color(m_old_value, black, grey); + change_text_color(m_new_value, orange,grey); + } + else { + change_text_color(m_text, grey, black); + change_text_color(m_old_value, grey, black); + change_text_color(m_new_value, grey, orange); + } + // update icons for the colors + UpdateIcons(); +} + +void ModelNode::UpdateIcons() +{ + // update icons for the colors, if any exists + if (!m_old_color.IsEmpty()) + m_old_color_bmp = get_bitmap(m_toggle ? m_old_color : grey); + if (!m_new_color.IsEmpty()) + m_new_color_bmp = get_bitmap(m_toggle ? m_new_color : grey); + + // update main icon, if any exists + if (m_icon_name.empty()) + return; + +#ifdef __linux__ + m_icon.CopyFromBitmap(create_scaled_bitmap(m_icon_name, m_parent_win, 16, !m_toggle)); +#else + m_icon = create_scaled_bitmap(m_icon_name, m_parent_win, 16, !m_toggle); +#endif //__linux__ +} + + +// ---------------------------------------------------------------------------- +// UnsavedChangesModel +// ---------------------------------------------------------------------------- + +UnsavedChangesModel::UnsavedChangesModel(wxWindow* parent) : + m_parent_win(parent) +{ +} + +UnsavedChangesModel::~UnsavedChangesModel() +{ + for (ModelNode* preset_node : m_preset_nodes) + delete preset_node; +} + +wxDataViewItem UnsavedChangesModel::AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt) +{ + // "color" strings + color_string(preset_name, black); + make_string_bold(preset_name); + + auto preset = new ModelNode(type, m_parent_win, preset_name, get_icon_name(type, pt)); + m_preset_nodes.emplace_back(preset); + + wxDataViewItem child((void*)preset); + wxDataViewItem parent(nullptr); + + ItemAdded(parent, child); + return child; +} + +ModelNode* UnsavedChangesModel::AddOption(ModelNode* group_node, wxString option_name, wxString old_value, wxString new_value) +{ + group_node->Append(std::make_unique(group_node, option_name, old_value, new_value)); + ModelNode* option = group_node->GetChildren().back().get(); + wxDataViewItem group_item = wxDataViewItem((void*)group_node); + ItemAdded(group_item, wxDataViewItem((void*)option)); + + m_ctrl->Expand(group_item); + return option; +} + +ModelNode* UnsavedChangesModel::AddOptionWithGroup(ModelNode* category_node, wxString group_name, wxString option_name, wxString old_value, wxString new_value) +{ + category_node->Append(std::make_unique(category_node, group_name)); + ModelNode* group_node = category_node->GetChildren().back().get(); + ItemAdded(wxDataViewItem((void*)category_node), wxDataViewItem((void*)group_node)); + + return AddOption(group_node, option_name, old_value, new_value); +} + +ModelNode* UnsavedChangesModel::AddOptionWithGroupAndCategory(ModelNode* preset_node, wxString category_name, wxString group_name, + wxString option_name, wxString old_value, wxString new_value, const std::string category_icon_name) +{ + preset_node->Append(std::make_unique(preset_node, category_name, category_icon_name)); + ModelNode* category_node = preset_node->GetChildren().back().get(); + ItemAdded(wxDataViewItem((void*)preset_node), wxDataViewItem((void*)category_node)); + + return AddOptionWithGroup(category_node, group_name, option_name, old_value, new_value); +} + +wxDataViewItem UnsavedChangesModel::AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name, + wxString old_value, wxString new_value, const std::string category_icon_name) +{ + // "color" strings + color_string(category_name, black); + color_string(group_name, black); + color_string(option_name, black); + + // "make" strings bold + make_string_bold(category_name); + make_string_bold(group_name); + + // add items + for (ModelNode* preset : m_preset_nodes) + if (preset->type() == type) + { + for (std::unique_ptr &category : preset->GetChildren()) + if (category->text() == category_name) + { + for (std::unique_ptr &group : category->GetChildren()) + if (group->text() == group_name) + return wxDataViewItem((void*)AddOption(group.get(), option_name, old_value, new_value)); + + return wxDataViewItem((void*)AddOptionWithGroup(category.get(), group_name, option_name, old_value, new_value)); + } + + return wxDataViewItem((void*)AddOptionWithGroupAndCategory(preset, category_name, group_name, option_name, old_value, new_value, category_icon_name)); + } + + return wxDataViewItem(nullptr); +} + +static void update_children(ModelNode* parent) +{ + if (parent->IsContainer()) { + bool toggle = parent->IsToggled(); + for (std::unique_ptr &child : parent->GetChildren()) { + child->Toggle(toggle); + child->UpdateEnabling(); + update_children(child.get()); + } + } +} + +static void update_parents(ModelNode* node) +{ + ModelNode* parent = node->GetParent(); + if (parent) { + bool toggle = false; + for (std::unique_ptr &child : parent->GetChildren()) { + if (child->IsToggled()) { + toggle = true; + break; + } + } + parent->Toggle(toggle); + parent->UpdateEnabling(); + update_parents(parent); + } +} + +void UnsavedChangesModel::UpdateItemEnabling(wxDataViewItem item) +{ + assert(item.IsOk()); + ModelNode* node = (ModelNode*)item.GetID(); + node->UpdateEnabling(); + + update_children(node); + update_parents(node); +} + +bool UnsavedChangesModel::IsEnabledItem(const wxDataViewItem& item) +{ + assert(item.IsOk()); + ModelNode* node = (ModelNode*)item.GetID(); + return node->IsToggled(); +} + +void UnsavedChangesModel::GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const +{ + assert(item.IsOk()); + + ModelNode* node = (ModelNode*)item.GetID(); + switch (col) + { + case colToggle: + variant = node->m_toggle; + break; +#ifdef __linux__ + case colIconText: + variant << wxDataViewIconText(node->m_text, node->m_icon); + break; + case colOldValue: + variant << wxDataViewIconText(node->m_old_value, node->m_old_color_bmp); + break; + case colNewValue: + variant << wxDataViewIconText(node->m_new_value, node->m_new_color_bmp); + break; +#else + case colIconText: + variant << DataViewBitmapText(node->m_text, node->m_icon); + break; + case colOldValue: + variant << DataViewBitmapText(node->m_old_value, node->m_old_color_bmp); + break; + case colNewValue: + variant << DataViewBitmapText(node->m_new_value, node->m_new_color_bmp); + break; +#endif //__linux__ + + default: + wxLogError("UnsavedChangesModel::GetValue: wrong column %d", col); + } +} + +bool UnsavedChangesModel::SetValue(const wxVariant& variant, const wxDataViewItem& item, unsigned int col) +{ + assert(item.IsOk()); + + ModelNode* node = (ModelNode*)item.GetID(); + switch (col) + { + case colToggle: + node->m_toggle = variant.GetBool(); + return true; +#ifdef __linux__ + case colIconText: { + wxDataViewIconText data; + data << variant; + node->m_icon = data.GetIcon(); + node->m_text = data.GetText(); + return true; } + case colOldValue: { + wxDataViewIconText data; + data << variant; + node->m_old_color_bmp = data.GetIcon(); + node->m_old_value = data.GetText(); + return true; } + case colNewValue: { + wxDataViewIconText data; + data << variant; + node->m_new_color_bmp = data.GetIcon(); + node->m_new_value = data.GetText(); + return true; } +#else + case colIconText: { + DataViewBitmapText data; + data << variant; + node->m_icon = data.GetBitmap(); + node->m_text = data.GetText(); + return true; } + case colOldValue: { + DataViewBitmapText data; + data << variant; + node->m_old_color_bmp = data.GetBitmap(); + node->m_old_value = data.GetText(); + return true; } + case colNewValue: { + DataViewBitmapText data; + data << variant; + node->m_new_color_bmp = data.GetBitmap(); + node->m_new_value = data.GetText(); + return true; } +#endif //__linux__ + default: + wxLogError("UnsavedChangesModel::SetValue: wrong column"); + } + return false; +} + +bool UnsavedChangesModel::IsEnabled(const wxDataViewItem& item, unsigned int col) const +{ + assert(item.IsOk()); + if (col == colToggle) + return true; + + // disable unchecked nodes + return ((ModelNode*)item.GetID())->IsToggled(); +} + +wxDataViewItem UnsavedChangesModel::GetParent(const wxDataViewItem& item) const +{ + // the invisible root node has no parent + if (!item.IsOk()) + return wxDataViewItem(nullptr); + + ModelNode* node = (ModelNode*)item.GetID(); + + // "MyMusic" also has no parent + if (node->IsRoot()) + return wxDataViewItem(nullptr); + + return wxDataViewItem((void*)node->GetParent()); +} + +bool UnsavedChangesModel::IsContainer(const wxDataViewItem& item) const +{ + // the invisble root node can have children + if (!item.IsOk()) + return true; + + ModelNode* node = (ModelNode*)item.GetID(); + return node->IsContainer(); +} + +unsigned int UnsavedChangesModel::GetChildren(const wxDataViewItem& parent, wxDataViewItemArray& array) const +{ + ModelNode* node = (ModelNode*)parent.GetID(); + if (!node) { + for (auto preset_node : m_preset_nodes) + array.Add(wxDataViewItem((void*)preset_node)); + return m_preset_nodes.size(); + } + + for (std::unique_ptr &child : node->GetChildren()) + array.Add(wxDataViewItem((void*)child.get())); + + return node->GetChildCount(); +} + + +wxString UnsavedChangesModel::GetColumnType(unsigned int col) const +{ + switch (col) + { + case colToggle: + return "bool"; + case colIconText: + case colOldValue: + case colNewValue: + default: + return "DataViewBitmapText";//"string"; + } +} + +static void rescale_children(ModelNode* parent) +{ + if (parent->IsContainer()) { + for (std::unique_ptr &child : parent->GetChildren()) { + child->UpdateIcons(); + rescale_children(child.get()); + } + } +} + +void UnsavedChangesModel::Rescale() +{ + for (ModelNode* node : m_preset_nodes) { + node->UpdateIcons(); + rescale_children(node); + } +} + + +//------------------------------------------ +// UnsavedChangesDialog +//------------------------------------------ + +UnsavedChangesDialog::UnsavedChangesDialog(const wxString& header) + : DPIDialog(nullptr, wxID_ANY, _L("Closing PrusaSlicer: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + m_app_config_key = "default_action_on_close_application"; + + build(Preset::TYPE_INVALID, nullptr, "", header); + + const std::string& def_action = wxGetApp().app_config->get(m_app_config_key); + if (def_action == "none") + this->CenterOnScreen(); + else { + m_exit_action = def_action == ActSave ? Action::Save : Action::Discard; + if (m_exit_action == Action::Save) + save(nullptr); + } +} + +UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset) + : DPIDialog(nullptr, wxID_ANY, _L("Switching Presets: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + m_app_config_key = "default_action_on_select_preset"; + + build(type, dependent_presets, new_selected_preset); + + const std::string& def_action = wxGetApp().app_config->get(m_app_config_key); + if (def_action == "none") { + if (wxGetApp().mainframe->is_dlg_layout() && wxGetApp().mainframe->m_settings_dialog.HasFocus()) + this->SetPosition(wxGetApp().mainframe->m_settings_dialog.GetPosition()); + this->CenterOnScreen(); + } + else { + m_exit_action = def_action == ActTransfer ? Action::Transfer : + def_action == ActSave ? Action::Save : Action::Discard; + const PresetCollection& printers = wxGetApp().preset_bundle->printers; + if (m_exit_action == Action::Save || + (m_exit_action == Action::Transfer && dependent_presets && (type == dependent_presets->type() ? + dependent_presets->get_edited_preset().printer_technology() != dependent_presets->find_preset(new_selected_preset)->printer_technology() : + printers.get_edited_preset().printer_technology() != printers.find_preset(new_selected_preset)->printer_technology())) ) + save(dependent_presets); + } +} + +void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header) +{ + wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + SetBackgroundColour(bgr_clr); + +#if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__) + // ys_FIXME! temporary workaround for correct font scaling + // Because of from wxWidgets 3.1.3 auto rescaling is implemented for the Fonts, + // From the very beginning set dialog font to the wxSYS_DEFAULT_GUI_FONT + this->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); +#endif // ENABLE_WX_3_1_3_DPI_CHANGED_EVENT + + int border = 10; + int em = em_unit(); + + m_action_line = new wxStaticText(this, wxID_ANY, ""); + m_action_line->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold()); + + m_tree = new wxDataViewCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(em * 60, em * 30), wxBORDER_SIMPLE | wxDV_VARIABLE_LINE_HEIGHT | wxDV_ROW_LINES); + m_tree_model = new UnsavedChangesModel(this); + m_tree->AssociateModel(m_tree_model); + m_tree_model->SetAssociatedControl(m_tree); + + m_tree->AppendToggleColumn(L"\u2714", UnsavedChangesModel::colToggle, wxDATAVIEW_CELL_ACTIVATABLE, 6 * em);//2610,11,12 //2714 + + auto append_bmp_text_column = [this](const wxString& label, unsigned model_column, int width, bool set_expander = false) + { +#ifdef __linux__ + wxDataViewIconTextRenderer* rd = new wxDataViewIconTextRenderer(); +#ifdef SUPPORTS_MARKUP + rd->EnableMarkup(true); +#endif + wxDataViewColumn* column = new wxDataViewColumn(label, rd, model_column, width, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE | wxDATAVIEW_CELL_INERT); +#else + wxDataViewColumn* column = new wxDataViewColumn(label, new BitmapTextRenderer(true, wxDATAVIEW_CELL_INERT), model_column, width, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE); +#endif //__linux__ + m_tree->AppendColumn(column); + if (set_expander) + m_tree->SetExpanderColumn(column); + }; + + append_bmp_text_column("" , UnsavedChangesModel::colIconText, 28 * em); + append_bmp_text_column(_L("Old Value"), UnsavedChangesModel::colOldValue, 12 * em); + append_bmp_text_column(_L("New Value"), UnsavedChangesModel::colNewValue, 12 * em); + + m_tree->Bind(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, &UnsavedChangesDialog::item_value_changed, this); + m_tree->Bind(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, &UnsavedChangesDialog::context_menu, this); + + // Add Buttons + wxFont btn_font = this->GetFont().Scaled(1.4f); + wxBoxSizer* buttons = new wxBoxSizer(wxHORIZONTAL); + + auto add_btn = [this, buttons, btn_font, dependent_presets](ScalableButton** btn, int& btn_id, const std::string& icon_name, Action close_act, const wxString& label, bool process_enable = true) + { + *btn = new ScalableButton(this, btn_id = NewControlId(), icon_name, label, wxDefaultSize, wxDefaultPosition, wxBORDER_DEFAULT, true, 24); + + buttons->Add(*btn, 1, wxLEFT, 5); + (*btn)->SetFont(btn_font); + + (*btn)->Bind(wxEVT_BUTTON, [this, close_act, dependent_presets](wxEvent&) { + update_config(close_act); + if (close_act == Action::Save && !save(dependent_presets)) + return; + close(close_act); + }); + if (process_enable) + (*btn)->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(!m_empty_selection); }); + (*btn)->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { show_info_line(Action::Undef); e.Skip(); }); + }; + + const PresetCollection& printers = wxGetApp().preset_bundle->printers; + if (dependent_presets && (type == dependent_presets->type() ? + dependent_presets->get_edited_preset().printer_technology() == dependent_presets->find_preset(new_selected_preset)->printer_technology() : + printers.get_edited_preset().printer_technology() == printers.find_preset(new_selected_preset)->printer_technology())) + add_btn(&m_transfer_btn, m_move_btn_id, "paste_menu", Action::Transfer, _L("Transfer")); + add_btn(&m_discard_btn, m_continue_btn_id, dependent_presets ? "switch_presets" : "exit", Action::Discard, _L("Discard"), false); + add_btn(&m_save_btn, m_save_btn_id, "save", Action::Save, _L("Save")); + + ScalableButton* cancel_btn = new ScalableButton(this, wxID_CANCEL, "cross", _L("Cancel"), wxDefaultSize, wxDefaultPosition, wxBORDER_DEFAULT, true, 24); + buttons->Add(cancel_btn, 1, wxLEFT|wxRIGHT, 5); + cancel_btn->SetFont(btn_font); + cancel_btn->Bind(wxEVT_BUTTON, [this](wxEvent&) { this->EndModal(wxID_CANCEL); }); + + m_info_line = new wxStaticText(this, wxID_ANY, ""); + m_info_line->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold()); + m_info_line->Hide(); + + m_remember_choice = new wxCheckBox(this, wxID_ANY, _L("Remember my choice")); + m_remember_choice->SetValue(wxGetApp().app_config->get(m_app_config_key) != "none"); + m_remember_choice->Bind(wxEVT_CHECKBOX, [type, this](wxCommandEvent& evt) + { + if (!evt.IsChecked()) + return; + wxString preferences_item = type == Preset::TYPE_INVALID ? _L("Ask for unsaved changes when closing application") : + _L("Ask for unsaved changes when selecting new preset"); + wxString msg = + _L("PrusaSlicer will remember your action.") + "\n\n" + + (type == Preset::TYPE_INVALID ? + _L("You will not be asked about the unsaved changes the next time you close PrusaSlicer.") : + _L("You will not be asked about the unsaved changes the next time you switch a preset.")) + "\n\n" + + format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto be asked about unsaved changes again."), preferences_item); + + wxMessageDialog dialog(nullptr, msg, _L("PrusaSlicer: Don't ask me again"), wxOK | wxCANCEL | wxICON_INFORMATION); + if (dialog.ShowModal() == wxID_CANCEL) + m_remember_choice->SetValue(false); + }); + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + topSizer->Add(m_action_line,0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); + topSizer->Add(m_tree, 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); + topSizer->Add(m_info_line, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 2*border); + topSizer->Add(buttons, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); + topSizer->Add(m_remember_choice, 0, wxEXPAND | wxALL, border); + + update(type, dependent_presets, new_selected_preset, header); + + SetSizer(topSizer); + topSizer->SetSizeHints(this); + + show_info_line(Action::Undef); +} + +void UnsavedChangesDialog::item_value_changed(wxDataViewEvent& event) +{ + if (event.GetColumn() != UnsavedChangesModel::colToggle) + return; + + wxDataViewItem item = event.GetItem(); + + m_tree_model->UpdateItemEnabling(item); + m_tree->Refresh(); + + // update an enabling of the "save/move" buttons + m_empty_selection = get_selected_options().empty(); +} + +void UnsavedChangesDialog::context_menu(wxDataViewEvent& event) +{ + if (!m_has_long_strings) + return; + + wxDataViewItem item = event.GetItem(); + if (!item) + { + wxPoint mouse_pos = wxGetMousePosition() - m_tree->GetScreenPosition(); + wxDataViewColumn* col = nullptr; + m_tree->HitTest(mouse_pos, item, col); + + if (!item) + item = m_tree->GetSelection(); + + if (!item) + return; + } + + auto it = m_items_map.find(item); + if (it == m_items_map.end() || !it->second.is_long) + return; + FullCompareDialog(it->second.opt_name, it->second.old_val, it->second.new_val).ShowModal(); +} + +void UnsavedChangesDialog::show_info_line(Action action, std::string preset_name) +{ + if (action == Action::Undef && !m_has_long_strings) + m_info_line->Hide(); + else { + wxString text; + if (action == Action::Undef) + text = _L("Some fields are too long to fit. Right mouse click reveals the full text."); + else if (action == Action::Discard) + text = _L("All modified options will be reverted."); + else { + if (preset_name.empty()) + text = action == Action::Save ? _L("Save the selected options.") : _L("Transfer the selected options to the newly selected presets."); + else + text = format_wxstr( + action == Action::Save ? + _L("Save the selected options to preset \"%1%\".") : + _L("Transfer the selected options to the newly selected preset \"%1%\"."), + preset_name); + //text += "\n" + _L("Unselected options will be reverted."); + } + m_info_line->SetLabel(text); + m_info_line->Show(); + } + + Layout(); + Refresh(); +} + +void UnsavedChangesDialog::update_config(Action action) +{ + if (!m_remember_choice->GetValue()) + return; + + std::string act = action == Action::Transfer ? ActTransfer : + action == Action::Discard ? ActDiscard : ActSave; + wxGetApp().app_config->set(m_app_config_key, act); +} + +void UnsavedChangesDialog::close(Action action) +{ + m_exit_action = action; + this->EndModal(wxID_CLOSE); +} + +bool UnsavedChangesDialog::save(PresetCollection* dependent_presets) +{ + names_and_types.clear(); + + // save one preset + if (dependent_presets) { + const Preset& preset = dependent_presets->get_edited_preset(); + std::string name = preset.name; + + // for system/default/external presets we should take an edited name + if (preset.is_system || preset.is_default || preset.is_external) { + SavePresetDialog save_dlg(preset.type); + if (save_dlg.ShowModal() != wxID_OK) { + m_exit_action = Action::Discard; + return false; + } + name = save_dlg.get_name(); + } + + names_and_types.emplace_back(make_pair(name, preset.type)); + } + // save all presets + else + { + std::vector types_for_save; + + PrinterTechnology printer_technology = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); + + for (Tab* tab : wxGetApp().tabs_list) + if (tab->supports_printer_technology(printer_technology) && tab->current_preset_is_dirty()) { + const Preset& preset = tab->get_presets()->get_edited_preset(); + if (preset.is_system || preset.is_default || preset.is_external) + types_for_save.emplace_back(preset.type); + + names_and_types.emplace_back(make_pair(preset.name, preset.type)); + } + + + if (!types_for_save.empty()) { + SavePresetDialog save_dlg(types_for_save); + if (save_dlg.ShowModal() != wxID_OK) { + m_exit_action = Action::Discard; + return false; + } + + for (std::pair& nt : names_and_types) { + const std::string& name = save_dlg.get_name(nt.second); + if (!name.empty()) + nt.first = name; + } + } + } + return true; +} + +template +wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false) +{ + const ConfigOptionDef& def = config.def()->options.at(opt_key); + const std::vector& names = def.enum_labels;//ConfigOptionEnum::get_enum_names(); + T val = config.option>(opt_key)->value; + + // Each infill doesn't use all list of infill declared in PrintConfig.hpp. + // So we should "convert" val to the correct one + if (is_infill) { + for (auto key_val : *def.enum_keys_map) + if ((int)key_val.second == (int)val) { + auto it = std::find(def.enum_values.begin(), def.enum_values.end(), key_val.first); + if (it == def.enum_values.end()) + return ""; + return from_u8(_utf8(names[it - def.enum_values.begin()])); + } + return _L("Undef"); + } + return from_u8(_utf8(names[static_cast(val)])); +} + +static int get_id_from_opt_key(std::string opt_key) +{ + int pos = opt_key.find("#"); + if (pos > 0) { + boost::erase_head(opt_key, pos + 1); + return atoi(opt_key.c_str()); + } + return 0; +} + +static std::string get_pure_opt_key(std::string opt_key) +{ + int pos = opt_key.find("#"); + if (pos > 0) + boost::erase_tail(opt_key, opt_key.size() - pos); + return opt_key; +} + +static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& config) +{ + int opt_idx = get_id_from_opt_key(opt_key); + opt_key = get_pure_opt_key(opt_key); + + if (config.option(opt_key)->is_nil()) + return _L("N/A"); + + wxString out; + + const ConfigOptionDef* opt = config.def()->get(opt_key); + bool is_nullable = opt->nullable; + + switch (opt->type) { + case coInt: + return from_u8((boost::format("%1%") % config.opt_int(opt_key)).str()); + case coInts: { + int val = is_nullable ? + config.opt(opt_key)->get_at(opt_idx) : + config.opt(opt_key)->get_at(opt_idx); + return from_u8((boost::format("%1%") % val).str()); + } + case coBool: + return config.opt_bool(opt_key) ? "true" : "false"; + case coBools: { + bool val = is_nullable ? + config.opt(opt_key)->get_at(opt_idx) : + config.opt(opt_key)->get_at(opt_idx); + return val ? "true" : "false"; + } + case coPercent: + return from_u8((boost::format("%1%%%") % int(config.optptr(opt_key)->getFloat())).str()); + case coPercents: { + double val = is_nullable ? + config.opt(opt_key)->get_at(opt_idx) : + config.opt(opt_key)->get_at(opt_idx); + return from_u8((boost::format("%1%%%") % int(val)).str()); + } + case coFloat: + return double_to_string(config.opt_float(opt_key)); + case coFloats: { + double val = is_nullable ? + config.opt(opt_key)->get_at(opt_idx) : + config.opt(opt_key)->get_at(opt_idx); + return double_to_string(val); + } + case coString: + return from_u8(config.opt_string(opt_key)); + case coStrings: { + const ConfigOptionStrings* strings = config.opt(opt_key); + if (strings) { + if (opt_key == "compatible_printers" || opt_key == "compatible_prints") { + if (strings->empty()) + return _L("All"); + for (size_t id = 0; id < strings->size(); id++) + out += from_u8(strings->get_at(id)) + "\n"; + out.RemoveLast(1); + return out; + } + if (!strings->empty()) + return from_u8(strings->get_at(opt_idx)); + } + break; + } + case coFloatOrPercent: { + const ConfigOptionFloatOrPercent* opt = config.opt(opt_key); + if (opt) + out = double_to_string(opt->value) + (opt->percent ? "%" : ""); + return out; + } + case coEnum: { + if (opt_key == "top_fill_pattern" || + opt_key == "bottom_fill_pattern" || + opt_key == "fill_pattern") + return get_string_from_enum(opt_key, config, true); + if (opt_key == "gcode_flavor") + return get_string_from_enum(opt_key, config); + if (opt_key == "machine_limits_usage") + return get_string_from_enum(opt_key, config); + if (opt_key == "ironing_type") + return get_string_from_enum(opt_key, config); + if (opt_key == "support_material_pattern") + return get_string_from_enum(opt_key, config); + if (opt_key == "seam_position") + return get_string_from_enum(opt_key, config); + if (opt_key == "display_orientation") + return get_string_from_enum(opt_key, config); + if (opt_key == "support_pillar_connection_mode") + return get_string_from_enum(opt_key, config); + break; + } + case coPoints: { + if (opt_key == "bed_shape") { + BedShape shape(*config.option(opt_key)); + return shape.get_full_name_with_params(); + } + Vec2d val = config.opt(opt_key)->get_at(opt_idx); + return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); + } + default: + break; + } + return out; +} + +wxString UnsavedChangesDialog::get_short_string(wxString full_string) +{ + int max_len = 30; + if (full_string.IsEmpty() || full_string.StartsWith("#") || + (full_string.Find("\n") == wxNOT_FOUND && full_string.Length() < max_len)) + return full_string; + + m_has_long_strings = true; + + int n_pos = full_string.Find("\n"); + if (n_pos != wxNOT_FOUND && n_pos < max_len) + max_len = n_pos; + + full_string.Truncate(max_len); + return full_string + dots; +} + +void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header) +{ + PresetCollection* presets = dependent_presets; + + // activate buttons and labels + m_save_btn ->Bind(wxEVT_ENTER_WINDOW, [this, presets] (wxMouseEvent& e) { show_info_line(Action::Save, presets ? presets->get_selected_preset().name : ""); e.Skip(); }); + if (m_transfer_btn) { + bool is_empty_name = type != dependent_presets->type(); + m_transfer_btn ->Bind(wxEVT_ENTER_WINDOW, [this, new_selected_preset, is_empty_name] (wxMouseEvent& e) { show_info_line(Action::Transfer, is_empty_name ? "" : new_selected_preset); e.Skip(); }); + } + m_discard_btn ->Bind(wxEVT_ENTER_WINDOW, [this] (wxMouseEvent& e) { show_info_line(Action::Discard); e.Skip(); }); + + + if (type == Preset::TYPE_INVALID) { + m_action_line->SetLabel(header + "\n" + _L("The following presets were modified:")); + } + else { + wxString action_msg; + if (type == dependent_presets->type()) { + action_msg = format_wxstr(_L("Preset \"%1%\" has the following unsaved changes:"), presets->get_edited_preset().name); + } + else { + action_msg = format_wxstr(type == Preset::TYPE_PRINTER ? + _L("Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:") : + _L("Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"), + presets->get_edited_preset().name); + } + m_action_line->SetLabel(action_msg); + } + + update_tree(type, presets); +} + +void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* presets_) +{ + Search::OptionsSearcher& searcher = wxGetApp().sidebar().get_searcher(); + searcher.sort_options_by_opt_key(); + + // list of the presets with unsaved changes + std::vector presets_list; + if (type == Preset::TYPE_INVALID) + { + PrinterTechnology printer_technology = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); + + for (Tab* tab : wxGetApp().tabs_list) + if (tab->supports_printer_technology(printer_technology) && tab->current_preset_is_dirty()) + presets_list.emplace_back(tab->get_presets()); + } + else + presets_list.emplace_back(presets_); + + // Display a dialog showing the dirty options in a human readable form. + for (PresetCollection* presets : presets_list) + { + const DynamicPrintConfig& old_config = presets->get_selected_preset().config; + const PrinterTechnology& old_pt = presets->get_selected_preset().printer_technology(); + const DynamicPrintConfig& new_config = presets->get_edited_preset().config; + type = presets->type(); + + const std::map& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map(); + + m_tree_model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt); + + // Collect dirty options. + const bool deep_compare = (type == Preset::TYPE_PRINTER || type == Preset::TYPE_SLA_MATERIAL); + auto dirty_options = presets->current_dirty_options(deep_compare); + auto dirty_options_ = presets->current_dirty_options(); + + // process changes of extruders count + if (type == Preset::TYPE_PRINTER && old_pt == ptFFF && + old_config.opt("extruder_colour")->values.size() != new_config.opt("extruder_colour")->values.size()) { + wxString local_label = _L("Extruders count"); + wxString old_val = from_u8((boost::format("%1%") % old_config.opt("extruder_colour")->values.size()).str()); + wxString new_val = from_u8((boost::format("%1%") % new_config.opt("extruder_colour")->values.size()).str()); + + ItemData item_data = { "extruders_count", local_label, old_val, new_val, type }; + m_items_map.emplace(m_tree_model->AddOption(type, _L("General"), _L("Capabilities"), local_label, old_val, new_val, category_icon_map.at("General")), item_data); + + } + + for (const std::string& opt_key : dirty_options) { + const Search::Option& option = searcher.get_option(opt_key); + + ItemData item_data = { opt_key, option.label_local, get_string_value(opt_key, old_config), get_string_value(opt_key, new_config), type }; + + wxString old_val = get_short_string(item_data.old_val); + wxString new_val = get_short_string(item_data.new_val); + if (old_val != item_data.old_val || new_val != item_data.new_val) + item_data.is_long = true; + + m_items_map.emplace(m_tree_model->AddOption(type, option.category_local, option.group_local, option.label_local, old_val, new_val, category_icon_map.at(option.category)), item_data); + } + } +} + +std::vector UnsavedChangesDialog::get_unselected_options(Preset::Type type) +{ + std::vector ret; + + for (auto item : m_items_map) { + if (item.second.opt_key == "extruders_count") + continue; + if (item.second.type == type && !m_tree_model->IsEnabledItem(item.first)) + ret.emplace_back(get_pure_opt_key(item.second.opt_key)); + } + + return ret; +} + +std::vector UnsavedChangesDialog::get_selected_options() +{ + std::vector ret; + + for (auto item : m_items_map) + if (m_tree_model->IsEnabledItem(item.first)) + ret.emplace_back(get_pure_opt_key(item.second.opt_key)); + + return ret; +} + +void UnsavedChangesDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + int em = em_unit(); + + msw_buttons_rescale(this, em, { wxID_CANCEL, m_save_btn_id, m_move_btn_id, m_continue_btn_id }); + for (auto btn : { m_save_btn, m_transfer_btn, m_discard_btn } ) + if (btn) btn->msw_rescale(); + + const wxSize& size = wxSize(80 * em, 30 * em); + SetMinSize(size); + + m_tree->GetColumn(UnsavedChangesModel::colToggle )->SetWidth(6 * em); + m_tree->GetColumn(UnsavedChangesModel::colIconText)->SetWidth(30 * em); + m_tree->GetColumn(UnsavedChangesModel::colOldValue)->SetWidth(20 * em); + m_tree->GetColumn(UnsavedChangesModel::colNewValue)->SetWidth(20 * em); + + m_tree_model->Rescale(); + m_tree->Refresh(); + + Fit(); + Refresh(); +} + +void UnsavedChangesDialog::on_sys_color_changed() +{ + for (auto btn : { m_save_btn, m_transfer_btn, m_discard_btn } ) + btn->msw_rescale(); + // msw_rescale updates just icons, so use it + m_tree_model->Rescale(); + m_tree->Refresh(); + + Refresh(); +} + + +//------------------------------------------ +// FullCompareDialog +//------------------------------------------ + +FullCompareDialog::FullCompareDialog(const wxString& option_name, const wxString& old_value, const wxString& new_value) + : wxDialog(nullptr, wxID_ANY, option_name, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + SetBackgroundColour(bgr_clr); + + int border = 10; + + wxStaticBoxSizer* sizer = new wxStaticBoxSizer(wxVERTICAL, this); + + wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, 2, 1, 0); + grid_sizer->SetFlexibleDirection(wxBOTH); + grid_sizer->AddGrowableCol(0,1); + grid_sizer->AddGrowableCol(1,1); + grid_sizer->AddGrowableRow(1,1); + + auto add_header = [grid_sizer, border, this](wxString label) { + wxStaticText* text = new wxStaticText(this, wxID_ANY, label); + text->SetFont(this->GetFont().Bold()); + grid_sizer->Add(text, 0, wxALL, border); + }; + + auto add_value = [grid_sizer, border, this](wxString label, bool is_colored = false) { + wxTextCtrl* text = new wxTextCtrl(this, wxID_ANY, label, wxDefaultPosition, wxSize(300, -1), wxTE_MULTILINE | wxTE_READONLY | wxBORDER_NONE | wxTE_RICH); + text->SetStyle(0, label.Len(), wxTextAttr(is_colored ? wxColour(orange) : wxNullColour, wxNullColour, this->GetFont())); + grid_sizer->Add(text, 1, wxALL | wxEXPAND, border); + }; + + add_header(_L("Old value")); + add_header(_L("New value")); + add_value(old_value); + add_value(new_value, true); + + sizer->Add(grid_sizer, 1, wxEXPAND); + + wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK); + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + topSizer->Add(sizer, 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); + topSizer->Add(buttons, 0, wxEXPAND | wxALL, border); + + SetSizer(topSizer); + topSizer->SetSizeHints(this); +} + + +} + +} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/UnsavedChangesDialog.hpp b/src/slic3r/GUI/UnsavedChangesDialog.hpp new file mode 100644 index 0000000000..c799eba7e1 --- /dev/null +++ b/src/slic3r/GUI/UnsavedChangesDialog.hpp @@ -0,0 +1,277 @@ +#ifndef slic3r_UnsavedChangesDialog_hpp_ +#define slic3r_UnsavedChangesDialog_hpp_ + +#include +#include +#include + +#include "GUI_Utils.hpp" +#include "wxExtensions.hpp" +#include "libslic3r/Preset.hpp" + +class ScalableButton; +class wxStaticText; + +namespace Slic3r { +namespace GUI{ + +// ---------------------------------------------------------------------------- +// ModelNode: a node inside UnsavedChangesModel +// ---------------------------------------------------------------------------- + +class ModelNode; +using ModelNodePtrArray = std::vector>; + +// On all of 3 different platforms Bitmap+Text icon column looks different +// because of Markup text is missed or not implemented. +// As a temporary workaround, we will use: +// MSW - DataViewBitmapText (our custom renderer wxBitmap + wxString, supported Markup text) +// OSX - -//-, but Markup text is not implemented right now +// GTK - wxDataViewIconText (wxWidgets for GTK renderer wxIcon + wxString, supported Markup text) +class ModelNode +{ + wxWindow* m_parent_win{ nullptr }; + + ModelNode* m_parent; + ModelNodePtrArray m_children; + wxBitmap m_empty_bmp; + Preset::Type m_preset_type {Preset::TYPE_INVALID}; + + std::string m_icon_name; + // saved values for colors if they exist + wxString m_old_color; + wxString m_new_color; + + // TODO/FIXME: + // the GTK version of wxDVC (in particular wxDataViewCtrlInternal::ItemAdded) + // needs to know in advance if a node is or _will be_ a container. + // Thus implementing: + // bool IsContainer() const + // { return m_children.size()>0; } + // doesn't work with wxGTK when UnsavedChangesModel::AddToClassical is called + // AND the classical node was removed (a new node temporary without children + // would be added to the control) + bool m_container {true}; + +#ifdef __linux__ + wxIcon get_bitmap(const wxString& color); +#else + wxBitmap get_bitmap(const wxString& color); +#endif //__linux__ + +public: + + bool m_toggle {true}; +#ifdef __linux__ + wxIcon m_icon; + wxIcon m_old_color_bmp; + wxIcon m_new_color_bmp; +#else + wxBitmap m_icon; + wxBitmap m_old_color_bmp; + wxBitmap m_new_color_bmp; +#endif //__linux__ + wxString m_text; + wxString m_old_value; + wxString m_new_value; + + // preset(root) node + ModelNode(Preset::Type preset_type, wxWindow* parent_win, const wxString& text, const std::string& icon_name); + + // category node + ModelNode(ModelNode* parent, const wxString& text, const std::string& icon_name); + + // group node + ModelNode(ModelNode* parent, const wxString& text); + + // option node + ModelNode(ModelNode* parent, const wxString& text, const wxString& old_value, const wxString& new_value); + + bool IsContainer() const { return m_container; } + bool IsToggled() const { return m_toggle; } + void Toggle(bool toggle = true) { m_toggle = toggle; } + bool IsRoot() const { return m_parent == nullptr; } + Preset::Type type() const { return m_preset_type; } + const wxString& text() const { return m_text; } + + ModelNode* GetParent() { return m_parent; } + ModelNodePtrArray& GetChildren() { return m_children; } + ModelNode* GetNthChild(unsigned int n) { return m_children[n].get(); } + unsigned int GetChildCount() const { return m_children.size(); } + + void Append(std::unique_ptr child) { m_children.emplace_back(std::move(child)); } + + void UpdateEnabling(); + void UpdateIcons(); +}; + + +// ---------------------------------------------------------------------------- +// UnsavedChangesModel +// ---------------------------------------------------------------------------- + +class UnsavedChangesModel : public wxDataViewModel +{ + wxWindow* m_parent_win { nullptr }; + std::vector m_preset_nodes; + + wxDataViewCtrl* m_ctrl{ nullptr }; + + ModelNode *AddOption(ModelNode *group_node, + wxString option_name, + wxString old_value, + wxString new_value); + ModelNode *AddOptionWithGroup(ModelNode *category_node, + wxString group_name, + wxString option_name, + wxString old_value, + wxString new_value); + ModelNode *AddOptionWithGroupAndCategory(ModelNode *preset_node, + wxString category_name, + wxString group_name, + wxString option_name, + wxString old_value, + wxString new_value, + const std::string category_icon_name); + +public: + enum { + colToggle, + colIconText, + colOldValue, + colNewValue, + colMax + }; + + UnsavedChangesModel(wxWindow* parent); + ~UnsavedChangesModel(); + + void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; } + + wxDataViewItem AddPreset(Preset::Type type, wxString preset_name, PrinterTechnology pt); + wxDataViewItem AddOption(Preset::Type type, wxString category_name, wxString group_name, wxString option_name, + wxString old_value, wxString new_value, const std::string category_icon_name); + + void UpdateItemEnabling(wxDataViewItem item); + bool IsEnabledItem(const wxDataViewItem& item); + + unsigned int GetColumnCount() const override { return colMax; } + wxString GetColumnType(unsigned int col) const override; + void Rescale(); + + wxDataViewItem GetParent(const wxDataViewItem& item) const override; + unsigned int GetChildren(const wxDataViewItem& parent, wxDataViewItemArray& array) const override; + + void GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const override; + bool SetValue(const wxVariant& variant, const wxDataViewItem& item, unsigned int col) override; + + bool IsEnabled(const wxDataViewItem& item, unsigned int col) const override; + bool IsContainer(const wxDataViewItem& item) const override; + // Is the container just a header or an item with all columns + // In our case it is an item with all columns + bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; } +}; + + +//------------------------------------------ +// UnsavedChangesDialog +//------------------------------------------ +class UnsavedChangesDialog : public DPIDialog +{ + wxDataViewCtrl* m_tree { nullptr }; + UnsavedChangesModel* m_tree_model { nullptr }; + + ScalableButton* m_save_btn { nullptr }; + ScalableButton* m_transfer_btn { nullptr }; + ScalableButton* m_discard_btn { nullptr }; + wxStaticText* m_action_line { nullptr }; + wxStaticText* m_info_line { nullptr }; + wxCheckBox* m_remember_choice { nullptr }; + + bool m_empty_selection { false }; + bool m_has_long_strings { false }; + int m_save_btn_id { wxID_ANY }; + int m_move_btn_id { wxID_ANY }; + int m_continue_btn_id { wxID_ANY }; + + std::string m_app_config_key; + + enum class Action { + Undef, + Transfer, + Discard, + Save + }; + + static constexpr char ActTransfer[] = "transfer"; + static constexpr char ActDiscard[] = "discard"; + static constexpr char ActSave[] = "save"; + + // selected action after Dialog closing + Action m_exit_action {Action::Undef}; + + struct ItemData + { + std::string opt_key; + wxString opt_name; + wxString old_val; + wxString new_val; + Preset::Type type; + bool is_long {false}; + }; + // tree items related to the options + std::map m_items_map; + + // preset names which are modified in SavePresetDialog and related types + std::vector> names_and_types; + +public: + UnsavedChangesDialog(const wxString& header); + UnsavedChangesDialog(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset); + ~UnsavedChangesDialog() {} + + wxString get_short_string(wxString full_string); + + void build(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header = ""); + void update(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header); + void update_tree(Preset::Type type, PresetCollection *presets); + void item_value_changed(wxDataViewEvent &event); + void context_menu(wxDataViewEvent &event); + void show_info_line(Action action, std::string preset_name = ""); + void update_config(Action action); + void close(Action action); + bool save(PresetCollection* dependent_presets); + + bool save_preset() const { return m_exit_action == Action::Save; } + bool transfer_changes() const { return m_exit_action == Action::Transfer; } + bool discard() const { return m_exit_action == Action::Discard; } + + // get full bundle of preset names and types for saving + const std::vector>& get_names_and_types() { return names_and_types; } + // short version of the previous function, for the case, when just one preset is modified + std::string get_preset_name() { return names_and_types[0].first; } + + std::vector get_unselected_options(Preset::Type type); + std::vector get_selected_options(); + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + void on_sys_color_changed() override; +}; + + +//------------------------------------------ +// FullCompareDialog +//------------------------------------------ +class FullCompareDialog : public wxDialog +{ +public: + FullCompareDialog(const wxString& option_name, const wxString& old_value, const wxString& new_value); + ~FullCompareDialog() {} +}; + + +} +} + +#endif //slic3r_UnsavedChangesDialog_hpp_ diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index b3b35d68d7..97a3e38805 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -25,7 +25,7 @@ namespace Slic3r { namespace GUI { -static const char* URL_CHANGELOG = "http://files.prusa3d.com/?latest=slicer-stable&lng=%1%"; +static const char* URL_CHANGELOG = "https://files.prusa3d.com/?latest=slicer-stable&lng=%1%"; static const char* URL_DOWNLOAD = "https://www.prusa3d.com/downloads&lng=%1%"; static const char* URL_DEV = "https://github.com/prusa3d/PrusaSlicer/releases/tag/version_%1%"; diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index ad9f0a121e..e46a1de2e1 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -174,7 +174,6 @@ wxMenuItem* append_menu_check_item(wxMenu* menu, int id, const wxString& string, const unsigned int wxCheckListBoxComboPopup::DefaultWidth = 200; const unsigned int wxCheckListBoxComboPopup::DefaultHeight = 200; -const unsigned int wxCheckListBoxComboPopup::DefaultItemHeight = 18; bool wxCheckListBoxComboPopup::Create(wxWindow* parent) { @@ -198,17 +197,22 @@ wxString wxCheckListBoxComboPopup::GetStringValue() const wxSize wxCheckListBoxComboPopup::GetAdjustedSize(int minWidth, int prefHeight, int maxHeight) { - // matches owner wxComboCtrl's width - // and sets height dinamically in dependence of contained items count + // set width dinamically in dependence of items text + // and set height dinamically in dependence of items count wxComboCtrl* cmb = GetComboCtrl(); - if (cmb != nullptr) - { + if (cmb != nullptr) { wxSize size = GetComboCtrl()->GetSize(); unsigned int count = GetCount(); - if (count > 0) - size.SetHeight(count * DefaultItemHeight); + if (count > 0) { + int max_width = size.x; + for (unsigned int i = 0; i < count; ++i) { + max_width = std::max(max_width, 60 + GetTextExtent(GetString(i)).x); + } + size.SetWidth(max_width); + size.SetHeight(count * cmb->GetCharHeight()); + } else size.SetHeight(DefaultHeight); @@ -300,94 +304,6 @@ void wxCheckListBoxComboPopup::OnListBoxSelection(wxCommandEvent& evt) } -namespace Slic3r { -namespace GUI { - -// *** PresetBitmapComboBox *** - -/* For PresetBitmapComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina - * (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean - * "please scale this to such and such" but rather - * "the wxImage is already sized for backing scale such and such". ) - * Unfortunately, the constructor changes the size of wxBitmap too. - * Thus We need to use unscaled size value for bitmaps that we use - * to avoid scaled size of control items. - * For this purpose control drawing methods and - * control size calculation methods (virtual) are overridden. - **/ - -PresetBitmapComboBox::PresetBitmapComboBox(wxWindow* parent, const wxSize& size) : - wxBitmapComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, size, 0, nullptr, wxCB_READONLY) -{} - -#ifdef __APPLE__ -bool PresetBitmapComboBox::OnAddBitmap(const wxBitmap& bitmap) -{ - if (bitmap.IsOk()) - { - // we should use scaled! size values of bitmap - int width = (int)bitmap.GetScaledWidth(); - int height = (int)bitmap.GetScaledHeight(); - - if (m_usedImgSize.x < 0) - { - // If size not yet determined, get it from this image. - m_usedImgSize.x = width; - m_usedImgSize.y = height; - - // Adjust control size to vertically fit the bitmap - wxWindow* ctrl = GetControl(); - ctrl->InvalidateBestSize(); - wxSize newSz = ctrl->GetBestSize(); - wxSize sz = ctrl->GetSize(); - if (newSz.y > sz.y) - ctrl->SetSize(sz.x, newSz.y); - else - DetermineIndent(); - } - - wxCHECK_MSG(width == m_usedImgSize.x && height == m_usedImgSize.y, - false, - "you can only add images of same size"); - - return true; - } - - return false; -} - -void PresetBitmapComboBox::OnDrawItem(wxDC& dc, - const wxRect& rect, - int item, - int flags) const -{ - const wxBitmap& bmp = *(wxBitmap*)m_bitmaps[item]; - if (bmp.IsOk()) - { - // we should use scaled! size values of bitmap - wxCoord w = bmp.GetScaledWidth(); - wxCoord h = bmp.GetScaledHeight(); - - const int imgSpacingLeft = 4; - - // Draw the image centered - dc.DrawBitmap(bmp, - rect.x + (m_usedImgSize.x - w) / 2 + imgSpacingLeft, - rect.y + (rect.height - h) / 2, - true); - } - - wxString text = GetString(item); - if (!text.empty()) - dc.DrawText(text, - rect.x + m_imgAreaWidth + 1, - rect.y + (rect.height - dc.GetCharHeight()) / 2); -} -#endif -} -} - - // *** wxDataViewTreeCtrlComboPopup *** const unsigned int wxDataViewTreeCtrlComboPopup::DefaultWidth = 270; @@ -520,7 +436,7 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in, if (bmp == nullptr) { // Neither SVG nor PNG has been found, raise error - throw std::runtime_error("Could not load bitmap: " + bmp_name); + throw Slic3r::RuntimeError("Could not load bitmap: " + bmp_name); } return *bmp; @@ -819,11 +735,12 @@ void MenuWithSeparators::SetSecondSeparator() // ---------------------------------------------------------------------------- ScalableBitmap::ScalableBitmap( wxWindow *parent, const std::string& icon_name/* = ""*/, - const int px_cnt/* = 16*/): + const int px_cnt/* = 16*/, + const bool grayscale/* = false*/): m_parent(parent), m_icon_name(icon_name), m_px_cnt(px_cnt) { - m_bmp = create_scaled_bitmap(icon_name, parent, px_cnt); + m_bmp = create_scaled_bitmap(icon_name, parent, px_cnt, grayscale); } wxSize ScalableBitmap::GetBmpSize() const @@ -856,7 +773,7 @@ int ScalableBitmap::GetBmpHeight() const void ScalableBitmap::msw_rescale() { - m_bmp = create_scaled_bitmap(m_icon_name, m_parent, m_px_cnt); + m_bmp = create_scaled_bitmap(m_icon_name, m_parent, m_px_cnt, m_grayscale); } // ---------------------------------------------------------------------------- @@ -869,9 +786,13 @@ ScalableButton::ScalableButton( wxWindow * parent, const wxString& label /* = wxEmptyString*/, const wxSize& size /* = wxDefaultSize*/, const wxPoint& pos /* = wxDefaultPosition*/, - long style /*= wxBU_EXACTFIT | wxNO_BORDER*/) : + long style /*= wxBU_EXACTFIT | wxNO_BORDER*/, + bool use_default_disabled_bitmap/* = false*/, + int bmp_px_cnt/* = 16*/) : + m_parent(parent), m_current_icon_name(icon_name), - m_parent(parent) + m_use_default_disabled_bitmap (use_default_disabled_bitmap), + m_px_cnt(bmp_px_cnt) { Create(parent, id, label, pos, size, style); #ifdef __WXMSW__ @@ -879,7 +800,9 @@ ScalableButton::ScalableButton( wxWindow * parent, SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); #endif // __WXMSW__ - SetBitmap(create_scaled_bitmap(icon_name, parent)); + SetBitmap(create_scaled_bitmap(icon_name, parent, m_px_cnt)); + if (m_use_default_disabled_bitmap) + SetBitmapDisabled(create_scaled_bitmap(m_current_icon_name, m_parent, m_px_cnt, true)); if (size != wxDefaultSize) { @@ -929,11 +852,19 @@ int ScalableButton::GetBitmapHeight() #endif } +void ScalableButton::UseDefaultBitmapDisabled() +{ + m_use_default_disabled_bitmap = true; + SetBitmapDisabled(create_scaled_bitmap(m_current_icon_name, m_parent, m_px_cnt, true)); +} + void ScalableButton::msw_rescale() { SetBitmap(create_scaled_bitmap(m_current_icon_name, m_parent, m_px_cnt)); if (!m_disabled_icon_name.empty()) SetBitmapDisabled(create_scaled_bitmap(m_disabled_icon_name, m_parent, m_px_cnt)); + else if (m_use_default_disabled_bitmap) + SetBitmapDisabled(create_scaled_bitmap(m_current_icon_name, m_parent, m_px_cnt, true)); if (m_width > 0 || m_height>0) { diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index 569257e1b4..2bdc68e32b 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -63,7 +63,6 @@ class wxCheckListBoxComboPopup : public wxCheckListBox, public wxComboPopup { static const unsigned int DefaultWidth; static const unsigned int DefaultHeight; - static const unsigned int DefaultItemHeight; wxString m_text; @@ -95,37 +94,6 @@ public: void OnListBoxSelection(wxCommandEvent& evt); }; -namespace Slic3r { -namespace GUI { -// *** PresetBitmapComboBox *** - -// BitmapComboBox used to presets list on Sidebar and Tabs -class PresetBitmapComboBox: public wxBitmapComboBox -{ -public: - PresetBitmapComboBox(wxWindow* parent, const wxSize& size = wxDefaultSize); - ~PresetBitmapComboBox() {} - -#ifdef __APPLE__ -protected: - /* For PresetBitmapComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina - * (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean - * "please scale this to such and such" but rather - * "the wxImage is already sized for backing scale such and such". ) - * Unfortunately, the constructor changes the size of wxBitmap too. - * Thus We need to use unscaled size value for bitmaps that we use - * to avoid scaled size of control items. - * For this purpose control drawing methods and - * control size calculation methods (virtual) are overridden. - **/ - virtual bool OnAddBitmap(const wxBitmap& bitmap) override; - virtual void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override; -#endif -}; - -} -} - // *** wxDataViewTreeCtrlComboBox *** @@ -161,7 +129,8 @@ public: ScalableBitmap() {}; ScalableBitmap( wxWindow *parent, const std::string& icon_name = "", - const int px_cnt = 16); + const int px_cnt = 16, + const bool grayscale = false); ~ScalableBitmap() {} @@ -182,6 +151,7 @@ private: wxBitmap m_bmp = wxBitmap(); std::string m_icon_name = ""; int m_px_cnt {16}; + bool m_grayscale {false}; }; @@ -239,7 +209,9 @@ public: const wxString& label = wxEmptyString, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition, - long style = wxBU_EXACTFIT | wxNO_BORDER); + long style = wxBU_EXACTFIT | wxNO_BORDER, + bool use_default_disabled_bitmap = false, + int bmp_px_cnt = 16); ScalableButton( wxWindow * parent, @@ -253,6 +225,7 @@ public: void SetBitmap_(const ScalableBitmap& bmp); void SetBitmapDisabled_(const ScalableBitmap &bmp); int GetBitmapHeight(); + void UseDefaultBitmapDisabled(); void msw_rescale(); @@ -263,6 +236,8 @@ private: int m_width {-1}; // should be multiplied to em_unit int m_height{-1}; // should be multiplied to em_unit + bool m_use_default_disabled_bitmap {false}; + // bitmap dimensions int m_px_cnt{ 16 }; }; @@ -364,7 +339,7 @@ class BlinkingBitmap : public wxStaticBitmap { public: BlinkingBitmap() {}; - BlinkingBitmap(wxWindow* parent, const std::string& icon_name = "redo_toolbar"); + BlinkingBitmap(wxWindow* parent, const std::string& icon_name = "search_blink"); ~BlinkingBitmap() {} diff --git a/src/slic3r/Utils/Duet.cpp b/src/slic3r/Utils/Duet.cpp index 4536dd2174..ba93603a1f 100644 --- a/src/slic3r/Utils/Duet.cpp +++ b/src/slic3r/Utils/Duet.cpp @@ -36,12 +36,10 @@ const char* Duet::get_name() const { return "Duet"; } bool Duet::test(wxString &msg) const { - bool connected = connect(msg); - if (connected) { - disconnect(); - } + auto connectionType = connect(msg); + disconnect(connectionType); - return connected; + return connectionType != ConnectionType::error; } wxString Duet::get_test_ok_msg () const @@ -59,33 +57,39 @@ wxString Duet::get_test_failed_msg (wxString &msg) const bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const { wxString connect_msg; - if (!connect(connect_msg)) { + auto connectionType = connect(connect_msg); + if (connectionType == ConnectionType::error) { error_fn(std::move(connect_msg)); return false; } bool res = true; + bool dsf = (connectionType == ConnectionType::dsf); - auto upload_cmd = get_upload_url(upload_data.upload_path.string()); + auto upload_cmd = get_upload_url(upload_data.upload_path.string(), connectionType); BOOST_LOG_TRIVIAL(info) << boost::format("Duet: Uploading file %1%, filepath: %2%, print: %3%, command: %4%") % upload_data.source_path % upload_data.upload_path % upload_data.start_print % upload_cmd; - auto http = Http::post(std::move(upload_cmd)); - http.set_post_body(upload_data.source_path) - .on_complete([&](std::string body, unsigned status) { + auto http = (dsf ? Http::put(std::move(upload_cmd)) : Http::post(std::move(upload_cmd))); + if (dsf) { + http.set_put_body(upload_data.source_path); + } else { + http.set_post_body(upload_data.source_path); + } + http.on_complete([&](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(debug) << boost::format("Duet: File uploaded: HTTP %1%: %2%") % status % body; - int err_code = get_err_code_from_body(body); + int err_code = dsf ? (status == 201 ? 0 : 1) : get_err_code_from_body(body); if (err_code != 0) { BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Request completed but error code was received: %1%") % err_code; error_fn(format_error(body, L("Unknown error occured"), 0)); res = false; } else if (upload_data.start_print) { wxString errormsg; - res = start_print(errormsg, upload_data.upload_path.string()); + res = start_print(errormsg, upload_data.upload_path.string(), connectionType); if (! res) { error_fn(std::move(errormsg)); } @@ -106,20 +110,28 @@ bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn e }) .perform_sync(); - disconnect(); + disconnect(connectionType); return res; } -bool Duet::connect(wxString &msg) const +Duet::ConnectionType Duet::connect(wxString &msg) const { - bool res = false; - auto url = get_connect_url(); + auto res = ConnectionType::error; + auto url = get_connect_url(false); auto http = Http::get(std::move(url)); http.on_error([&](std::string body, std::string error, unsigned status) { - BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error connecting: %1%, HTTP %2%, body: `%3%`") % error % status % body; - msg = format_error(body, error, status); + auto dsfUrl = get_connect_url(true); + auto dsfHttp = Http::get(std::move(dsfUrl)); + dsfHttp.on_error([&](std::string body, std::string error, unsigned status) { + BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error connecting: %1%, HTTP %2%, body: `%3%`") % error % status % body; + msg = format_error(body, error, status); + }) + .on_complete([&](std::string body, unsigned) { + res = ConnectionType::dsf; + }) + .perform_sync(); }) .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("Duet: Got: %1%") % body; @@ -127,7 +139,7 @@ bool Duet::connect(wxString &msg) const int err_code = get_err_code_from_body(body); switch (err_code) { case 0: - res = true; + res = ConnectionType::rrf; break; case 1: msg = format_error(body, L("Wrong password"), 0); @@ -146,8 +158,12 @@ bool Duet::connect(wxString &msg) const return res; } -void Duet::disconnect() const +void Duet::disconnect(ConnectionType connectionType) const { + // we don't need to disconnect from DSF or if it failed anyway + if (connectionType != ConnectionType::rrf) { + return; + } auto url = (boost::format("%1%rr_disconnect") % get_base_url()).str(); @@ -159,20 +175,33 @@ void Duet::disconnect() const .perform_sync(); } -std::string Duet::get_upload_url(const std::string &filename) const +std::string Duet::get_upload_url(const std::string &filename, ConnectionType connectionType) const { - return (boost::format("%1%rr_upload?name=0:/gcodes/%2%&%3%") - % get_base_url() - % Http::url_encode(filename) - % timestamp_str()).str(); + assert(connectionType != ConnectionType::error); + + if (connectionType == ConnectionType::dsf) { + return (boost::format("%1%machine/file/gcodes/%2%") + % get_base_url() + % Http::url_encode(filename)).str(); + } else { + return (boost::format("%1%rr_upload?name=0:/gcodes/%2%&%3%") + % get_base_url() + % Http::url_encode(filename) + % timestamp_str()).str(); + } } -std::string Duet::get_connect_url() const +std::string Duet::get_connect_url(const bool dsfUrl) const { - return (boost::format("%1%rr_connect?password=%2%&%3%") - % get_base_url() - % (password.empty() ? "reprap" : password) - % timestamp_str()).str(); + if (dsfUrl) { + return (boost::format("%1%machine/status") + % get_base_url()).str(); + } else { + return (boost::format("%1%rr_connect?password=%2%&%3%") + % get_base_url() + % (password.empty() ? "reprap" : password) + % timestamp_str()).str(); + } } std::string Duet::get_base_url() const @@ -201,15 +230,27 @@ std::string Duet::timestamp_str() const return std::string(buffer); } -bool Duet::start_print(wxString &msg, const std::string &filename) const +bool Duet::start_print(wxString &msg, const std::string &filename, ConnectionType connectionType) const { - bool res = false; + assert(connectionType != ConnectionType::error); - auto url = (boost::format("%1%rr_gcode?gcode=M32%%20\"%2%\"") + bool res = false; + bool dsf = (connectionType == ConnectionType::dsf); + + auto url = dsf + ? (boost::format("%1%machine/code") + % get_base_url()).str() + : (boost::format("%1%rr_gcode?gcode=M32%%20\"0:/gcodes/%2%\"") % get_base_url() % Http::url_encode(filename)).str(); - auto http = Http::get(std::move(url)); + auto http = (dsf ? Http::post(std::move(url)) : Http::get(std::move(url))); + if (dsf) { + http.set_post_body( + (boost::format("M32 \"0:/gcodes/%1%\"") + % filename).str() + ); + } http.on_error([&](std::string body, std::string error, unsigned status) { BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error starting print: %1%, HTTP %2%, body: `%3%`") % error % status % body; msg = format_error(body, error, status); diff --git a/src/slic3r/Utils/Duet.hpp b/src/slic3r/Utils/Duet.hpp index 702efbddb6..7fdd8ea10c 100644 --- a/src/slic3r/Utils/Duet.hpp +++ b/src/slic3r/Utils/Duet.hpp @@ -14,7 +14,7 @@ class Http; class Duet : public PrintHost { public: - Duet(DynamicPrintConfig *config); + explicit Duet(DynamicPrintConfig *config); ~Duet() override = default; const char* get_name() const override; @@ -29,16 +29,17 @@ public: std::string get_host() const override { return host; } private: + enum class ConnectionType { rrf, dsf, error }; std::string host; std::string password; - std::string get_upload_url(const std::string &filename) const; - std::string get_connect_url() const; + std::string get_upload_url(const std::string &filename, ConnectionType connectionType) const; + std::string get_connect_url(const bool dsfUrl) const; std::string get_base_url() const; std::string timestamp_str() const; - bool connect(wxString &msg) const; - void disconnect() const; - bool start_print(wxString &msg, const std::string &filename) const; + ConnectionType connect(wxString &msg) const; + void disconnect(ConnectionType connectionType) const; + bool start_print(wxString &msg, const std::string &filename, ConnectionType connectionType) const; int get_err_code_from_body(const std::string &body) const; }; diff --git a/src/slic3r/Utils/FixModelByWin10.cpp b/src/slic3r/Utils/FixModelByWin10.cpp index 8de4991d85..bcab6daaf8 100644 --- a/src/slic3r/Utils/FixModelByWin10.cpp +++ b/src/slic3r/Utils/FixModelByWin10.cpp @@ -30,10 +30,10 @@ #include "libslic3r/Model.hpp" #include "libslic3r/Print.hpp" +#include "libslic3r/PresetBundle.hpp" #include "libslic3r/Format/3mf.hpp" #include "../GUI/GUI.hpp" #include "../GUI/I18N.hpp" -#include "../GUI/PresetBundle.hpp" #include #include @@ -209,10 +209,10 @@ typedef std::functionGetResults(model.GetAddressOf()); else - throw std::runtime_error(L("Failed loading the input model.")); + throw Slic3r::RuntimeError(L("Failed loading the input model.")); Microsoft::WRL::ComPtr> meshes; hr = model->get_Meshes(meshes.GetAddressOf()); @@ -245,7 +245,7 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path hr = model->RepairAsync(repairAsync.GetAddressOf()); status = winrt_async_await(repairAsync, throw_on_cancel); if (status != AsyncStatus::Completed) - throw std::runtime_error(L("Mesh repair failed.")); + throw Slic3r::RuntimeError(L("Mesh repair failed.")); repairAsync->GetResults(); on_progress(L("Loading repaired model"), 60); @@ -260,14 +260,14 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path hr = printing3d3mfpackage->SaveModelToPackageAsync(model.Get(), saveToPackageAsync.GetAddressOf()); status = winrt_async_await(saveToPackageAsync, throw_on_cancel); if (status != AsyncStatus::Completed) - throw std::runtime_error(L("Saving mesh into the 3MF container failed.")); + throw Slic3r::RuntimeError(L("Saving mesh into the 3MF container failed.")); hr = saveToPackageAsync->GetResults(); Microsoft::WRL::ComPtr> generatorStreamAsync; hr = printing3d3mfpackage->SaveAsync(generatorStreamAsync.GetAddressOf()); status = winrt_async_await(generatorStreamAsync, throw_on_cancel); if (status != AsyncStatus::Completed) - throw std::runtime_error(L("Saving mesh into the 3MF container failed.")); + throw Slic3r::RuntimeError(L("Saving mesh into the 3MF container failed.")); Microsoft::WRL::ComPtr generatorStream; hr = generatorStreamAsync->GetResults(generatorStream.GetAddressOf()); @@ -299,7 +299,7 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path hr = inputStream->ReadAsync(buffer.Get(), 65536 * 2048, ABI::Windows::Storage::Streams::InputStreamOptions_ReadAhead, asyncRead.GetAddressOf()); status = winrt_async_await(asyncRead, throw_on_cancel); if (status != AsyncStatus::Completed) - throw std::runtime_error(L("Saving mesh into the 3MF container failed.")); + throw Slic3r::RuntimeError(L("Saving mesh into the 3MF container failed.")); hr = buffer->get_Length(&length); if (length == 0) break; @@ -365,7 +365,7 @@ void fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx) model_object->add_instance(); if (!Slic3r::store_3mf(path_src.string().c_str(), &model, nullptr, false)) { boost::filesystem::remove(path_src); - throw std::runtime_error(L("Export of a temporary 3mf file failed")); + throw Slic3r::RuntimeError(L("Export of a temporary 3mf file failed")); } model.clear_objects(); model.clear_materials(); @@ -380,15 +380,15 @@ void fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx) bool loaded = Slic3r::load_3mf(path_dst.string().c_str(), &config, &model, false); boost::filesystem::remove(path_dst); if (! loaded) - throw std::runtime_error(L("Import of the repaired 3mf file failed")); + throw Slic3r::RuntimeError(L("Import of the repaired 3mf file failed")); if (model.objects.size() == 0) - throw std::runtime_error(L("Repaired 3MF file does not contain any object")); + throw Slic3r::RuntimeError(L("Repaired 3MF file does not contain any object")); if (model.objects.size() > 1) - throw std::runtime_error(L("Repaired 3MF file contains more than one object")); + throw Slic3r::RuntimeError(L("Repaired 3MF file contains more than one object")); if (model.objects.front()->volumes.size() == 0) - throw std::runtime_error(L("Repaired 3MF file does not contain any volume")); + throw Slic3r::RuntimeError(L("Repaired 3MF file does not contain any volume")); if (model.objects.front()->volumes.size() > 1) - throw std::runtime_error(L("Repaired 3MF file contains more than one volume")); + throw Slic3r::RuntimeError(L("Repaired 3MF file contains more than one volume")); meshes_repaired.emplace_back(std::move(model.objects.front()->volumes.front()->mesh())); } for (size_t i = 0; i < volumes.size(); ++ i) { diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index a16aac5b5b..31b23defd9 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -35,11 +35,11 @@ struct CurlGlobalInit { static std::unique_ptr instance; std::string message; - + CurlGlobalInit() { #ifdef OPENSSL_CERT_OVERRIDE // defined if SLIC3R_STATIC=ON - + // Look for a set of distro specific directories. Don't change the // order: https://bugzilla.redhat.com/show_bug.cgi?id=1053882 static const char * CA_BUNDLES[] = { @@ -48,17 +48,17 @@ struct CurlGlobalInit "/usr/share/ssl/certs/ca-bundle.crt", "/usr/local/share/certs/ca-root-nss.crt", // FreeBSD "/etc/ssl/cert.pem", - "/etc/ssl/ca-bundle.pem" // OpenSUSE Tumbleweed + "/etc/ssl/ca-bundle.pem" // OpenSUSE Tumbleweed }; - + namespace fs = boost::filesystem; // Env var name for the OpenSSL CA bundle (SSL_CERT_FILE nomally) const char *const SSL_CA_FILE = X509_get_default_cert_file_env(); const char * ssl_cafile = ::getenv(SSL_CA_FILE); - + if (!ssl_cafile) ssl_cafile = X509_get_default_cert_file(); - + int replace = true; if (!ssl_cafile || !fs::exists(fs::path(ssl_cafile))) { const char * bundle = nullptr; @@ -86,15 +86,15 @@ struct CurlGlobalInit } #endif // OPENSSL_CERT_OVERRIDE - + if (CURLcode ec = ::curl_global_init(CURL_GLOBAL_DEFAULT)) { message += _u8L("CURL init has failed. PrusaSlicer will be unable to establish " "network connections. See logs for additional details."); - + BOOST_LOG_TRIVIAL(error) << ::curl_easy_strerror(ec); } } - + ~CurlGlobalInit() { ::curl_global_cleanup(); } }; @@ -120,6 +120,7 @@ struct Http::priv std::string error_buffer; // Used for CURLOPT_ERRORBUFFER size_t limit; bool cancel; + std::unique_ptr putFile; std::thread io_thread; Http::CompleteFn completefn; @@ -138,6 +139,8 @@ struct Http::priv void set_timeout_connect(long timeout); void form_add_file(const char *name, const fs::path &path, const char* filename); void set_post_body(const fs::path &path); + void set_post_body(const std::string &body); + void set_put_body(const fs::path &path); std::string curl_error(CURLcode curlcode); std::string body_size_error(); @@ -154,9 +157,9 @@ Http::priv::priv(const std::string &url) , cancel(false) { Http::tls_global_init(); - + if (curl == nullptr) { - throw std::runtime_error(std::string("Could not construct Curl object")); + throw Slic3r::RuntimeError(std::string("Could not construct Curl object")); } set_timeout_connect(DEFAULT_TIMEOUT_CONNECT); @@ -277,11 +280,28 @@ void Http::priv::form_add_file(const char *name, const fs::path &path, const cha } } +//FIXME may throw! Is the caller aware of it? void Http::priv::set_post_body(const fs::path &path) { std::ifstream file(path.string()); std::string file_content { std::istreambuf_iterator(file), std::istreambuf_iterator() }; - postfields = file_content; + postfields = std::move(file_content); +} + +void Http::priv::set_post_body(const std::string &body) +{ + postfields = body; +} + +void Http::priv::set_put_body(const fs::path &path) +{ + boost::system::error_code ec; + boost::uintmax_t filesize = file_size(path, ec); + if (!ec) { + putFile = std::make_unique(path); + ::curl_easy_setopt(curl, CURLOPT_READDATA, (void *) (putFile.get())); + ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, filesize); + } } std::string Http::priv::curl_error(CURLcode curlcode) @@ -335,6 +355,8 @@ void Http::priv::http_perform() CURLcode res = ::curl_easy_perform(curl); + putFile.reset(); + if (res != CURLE_OK) { if (res == CURLE_ABORTED_BY_CALLBACK) { if (cancel) { @@ -373,6 +395,7 @@ Http::Http(Http &&other) : p(std::move(other.p)) {} Http::~Http() { + assert(! p || ! p->putFile); if (p && p->io_thread.joinable()) { p->io_thread.detach(); } @@ -415,6 +438,16 @@ Http& Http::remove_header(std::string name) return *this; } +// Authorization by HTTP digest, based on RFC2617. +Http& Http::auth_digest(const std::string &user, const std::string &password) +{ + curl_easy_setopt(p->curl, CURLOPT_USERNAME, user.c_str()); + curl_easy_setopt(p->curl, CURLOPT_PASSWORD, password.c_str()); + curl_easy_setopt(p->curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); + + return *this; +} + Http& Http::ca_file(const std::string &name) { if (p && priv::ca_file_supported(p->curl)) { @@ -455,6 +488,18 @@ Http& Http::set_post_body(const fs::path &path) return *this; } +Http& Http::set_post_body(const std::string &body) +{ + if (p) { p->set_post_body(body); } + return *this; +} + +Http& Http::set_put_body(const fs::path &path) +{ + if (p) { p->set_put_body(path);} + return *this; +} + Http& Http::on_complete(CompleteFn fn) { if (p) { p->completefn = std::move(fn); } @@ -509,6 +554,13 @@ Http Http::post(std::string url) return http; } +Http Http::put(std::string url) +{ + Http http{std::move(url)}; + curl_easy_setopt(http.p->curl, CURLOPT_UPLOAD, 1L); + return http; +} + bool Http::ca_file_supported() { ::CURL *curl = ::curl_easy_init(); @@ -521,7 +573,7 @@ std::string Http::tls_global_init() { if (!CurlGlobalInit::instance) CurlGlobalInit::instance = std::make_unique(); - + return CurlGlobalInit::instance->message; } @@ -532,7 +584,7 @@ std::string Http::tls_system_cert_store() #ifdef OPENSSL_CERT_OVERRIDE ret = ::getenv(X509_get_default_cert_file_env()); #endif - + return ret; } diff --git a/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp index f162362796..b629fb328a 100644 --- a/src/slic3r/Utils/Http.hpp +++ b/src/slic3r/Utils/Http.hpp @@ -49,6 +49,7 @@ public: // for a GET and a POST request respectively. static Http get(std::string url); static Http post(std::string url); + static Http put(std::string url); ~Http(); Http(const Http &) = delete; @@ -64,6 +65,8 @@ public: Http& header(std::string name, const std::string &value); // Removes a header field. Http& remove_header(std::string name); + // Authorization by HTTP digest, based on RFC2617. + Http& auth_digest(const std::string &user, const std::string &password); // Sets a CA certificate file for usage with HTTPS. This is only supported on some backends, // specifically, this is supported with OpenSSL and NOT supported with Windows and OS X native certificate store. // See also ca_file_supported(). @@ -80,6 +83,16 @@ public: // This can be used for hosts which do not support multipart requests. Http& set_post_body(const boost::filesystem::path &path); + // Set the POST request body. + // The data is used verbatim, it is not additionally encoded in any way. + // This can be used for hosts which do not support multipart requests. + Http& set_post_body(const std::string &body); + + // Set the file contents as a PUT request body. + // The data is used verbatim, it is not additionally encoded in any way. + // This can be used for hosts which do not support multipart requests. + Http& set_put_body(const boost::filesystem::path &path); + // Callback called on HTTP request complete Http& on_complete(CompleteFn fn); // Callback called on an error occuring at any stage of the requests: Url parsing, DNS lookup, @@ -100,7 +113,7 @@ public: // Tells whether current backend supports seting up a CA file using ca_file() static bool ca_file_supported(); - + // Return empty string on success or error message on fail. static std::string tls_global_init(); static std::string tls_system_cert_store(); diff --git a/src/slic3r/Utils/OctoPrint.cpp b/src/slic3r/Utils/OctoPrint.cpp index ee87f822fa..fad45f8225 100644 --- a/src/slic3r/Utils/OctoPrint.cpp +++ b/src/slic3r/Utils/OctoPrint.cpp @@ -11,7 +11,6 @@ #include -#include "libslic3r/PrintConfig.hpp" #include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/GUI.hpp" #include "Http.hpp" @@ -170,6 +169,13 @@ std::string OctoPrint::make_url(const std::string &path) const } } +SL1Host::SL1Host(DynamicPrintConfig *config) : + OctoPrint(config), + authorization_type(dynamic_cast*>(config->option("printhost_authorization_type"))->value), + username(config->opt_string("printhost_user")), + password(config->opt_string("printhost_password")) +{ +} // SL1Host const char* SL1Host::get_name() const { return "SL1Host"; } @@ -191,4 +197,20 @@ bool SL1Host::validate_version_text(const boost::optional &version_ return version_text ? boost::starts_with(*version_text, "Prusa SLA") : false; } +void SL1Host::set_auth(Http &http) const +{ + switch (authorization_type) { + case atKeyPassword: + http.header("X-Api-Key", get_apikey()); + break; + case atUserPassword: + http.auth_digest(username, password); + break; + } + + if (! get_cafile().empty()) { + http.ca_file(get_cafile()); + } +} + } diff --git a/src/slic3r/Utils/OctoPrint.hpp b/src/slic3r/Utils/OctoPrint.hpp index 965019d859..ed1c61bd60 100644 --- a/src/slic3r/Utils/OctoPrint.hpp +++ b/src/slic3r/Utils/OctoPrint.hpp @@ -6,6 +6,7 @@ #include #include "PrintHost.hpp" +#include "libslic3r/PrintConfig.hpp" namespace Slic3r { @@ -29,6 +30,8 @@ public: bool can_test() const override { return true; } bool can_start_print() const override { return true; } std::string get_host() const override { return host; } + const std::string& get_apikey() const { return apikey; } + const std::string& get_cafile() const { return cafile; } protected: virtual bool validate_version_text(const boost::optional &version_text) const; @@ -38,14 +41,14 @@ private: std::string apikey; std::string cafile; - void set_auth(Http &http) const; + virtual void set_auth(Http &http) const; std::string make_url(const std::string &path) const; }; class SL1Host: public OctoPrint { public: - SL1Host(DynamicPrintConfig *config) : OctoPrint(config) {} + SL1Host(DynamicPrintConfig *config); ~SL1Host() override = default; const char* get_name() const override; @@ -56,6 +59,15 @@ public: protected: bool validate_version_text(const boost::optional &version_text) const override; + +private: + void set_auth(Http &http) const override; + + // Host authorization type. + AuthorizationType authorization_type; + // username and password for HTTP Digest Authentization (RFC RFC2617) + std::string username; + std::string password; }; } diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index c32613c468..e50bbb7fb4 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -19,14 +19,15 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/format.hpp" #include "libslic3r/Utils.hpp" +#include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/I18N.hpp" -#include "slic3r/GUI/PresetBundle.hpp" #include "slic3r/GUI/UpdateDialogs.hpp" #include "slic3r/GUI/ConfigWizard.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/format.hpp" +#include "slic3r/GUI/NotificationManager.hpp" #include "slic3r/Utils/Http.hpp" #include "slic3r/Config/Version.hpp" #include "slic3r/Config/Snapshot.hpp" @@ -154,6 +155,9 @@ struct PresetUpdater::priv bool cancel; std::thread thread; + bool has_waiting_updates { false }; + Updates waiting_updates; + priv(); void set_download_prefs(AppConfig *app_config); @@ -165,6 +169,7 @@ struct PresetUpdater::priv void check_install_indices() const; Updates get_config_updates(const Semver& old_slic3r_version) const; void perform_updates(Updates &&updates, bool snapshot = true) const; + void set_waiting_updates(Updates u); }; PresetUpdater::priv::priv() @@ -304,7 +309,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors) const std::string idx_path = (cache_path / (vendor.id + ".idx")).string(); const std::string idx_path_temp = idx_path + "-update"; //check if idx_url is leading to our site - if (! boost::starts_with(idx_url, "http://files.prusa3d.com/wp-content/uploads/repository/")) + if (! boost::starts_with(idx_url, "https://files.prusa3d.com/wp-content/uploads/repository/")) { BOOST_LOG_TRIVIAL(warning) << "unsafe url path for vendor \"" << vendor.name << "\" rejected: " << idx_url; continue; @@ -326,7 +331,15 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors) continue; } Slic3r::rename_file(idx_path_temp, idx_path); - index = std::move(new_index); + //if we rename path we need to change it in Index object too or create the object again + //index = std::move(new_index); + try { + index.load(idx_path); + } + catch (const std::exception& /* err */) { + BOOST_LOG_TRIVIAL(error) << format("Could not load downloaded index %1% for vendor %2%: invalid index?", idx_path, vendor.name); + continue; + } if (cancel) return; } @@ -632,6 +645,12 @@ void PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) cons } } +void PresetUpdater::priv::set_waiting_updates(Updates u) +{ + waiting_updates = u; + has_waiting_updates = true; +} + PresetUpdater::PresetUpdater() : p(new priv()) {} @@ -690,9 +709,9 @@ void PresetUpdater::slic3r_update_notify() } } -PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver &old_slic3r_version) const +PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, bool no_notification) const { - if (! p->enabled_config_update) { return R_NOOP; } + if (! p->enabled_config_update) { return R_NOOP; } auto updates = p->get_config_updates(old_slic3r_version); if (updates.incompats.size() > 0) { @@ -779,30 +798,38 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver &old_slic3 } // regular update - BOOST_LOG_TRIVIAL(info) << format("Update of %1% bundles available. Asking for confirmation ...", updates.updates.size()); + if (no_notification) { + BOOST_LOG_TRIVIAL(info) << format("Update of %1% bundles available. Asking for confirmation ...", p->waiting_updates.updates.size()); - std::vector updates_msg; - for (const auto &update : updates.updates) { - std::string changelog_url = update.version.config_version.prerelease() == nullptr ? update.changelog_url : std::string(); - updates_msg.emplace_back(update.vendor, update.version.config_version, update.version.comment, std::move(changelog_url)); - } + std::vector updates_msg; + for (const auto& update : updates.updates) { + std::string changelog_url = update.version.config_version.prerelease() == nullptr ? update.changelog_url : std::string(); + updates_msg.emplace_back(update.vendor, update.version.config_version, update.version.comment, std::move(changelog_url)); + } - GUI::MsgUpdateConfig dlg(updates_msg); + GUI::MsgUpdateConfig dlg(updates_msg); - const auto res = dlg.ShowModal(); - if (res == wxID_OK) { - BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update"; - p->perform_updates(std::move(updates)); + const auto res = dlg.ShowModal(); + if (res == wxID_OK) { + BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update"; + p->perform_updates(std::move(updates)); - // Reload global configuration - auto *app_config = GUI::wxGetApp().app_config; - GUI::wxGetApp().preset_bundle->load_presets(*app_config); - GUI::wxGetApp().load_current_presets(); - return R_UPDATE_INSTALLED; + // Reload global configuration + auto* app_config = GUI::wxGetApp().app_config; + GUI::wxGetApp().preset_bundle->load_presets(*app_config); + GUI::wxGetApp().load_current_presets(); + return R_UPDATE_INSTALLED; + } + else { + BOOST_LOG_TRIVIAL(info) << "User refused the update"; + return R_UPDATE_REJECT; + } } else { - BOOST_LOG_TRIVIAL(info) << "User refused the update"; - return R_UPDATE_REJECT; + p->set_waiting_updates(updates); + GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::PresetUpdateAvailable, *(GUI::wxGetApp().plater()->get_current_canvas3D())); } + + // MsgUpdateConfig will show after the notificaation is clicked } else { BOOST_LOG_TRIVIAL(info) << "No configuration updates available."; } @@ -825,5 +852,37 @@ void PresetUpdater::install_bundles_rsrc(std::vector bundles, bool p->perform_updates(std::move(updates), snapshot); } +void PresetUpdater::on_update_notification_confirm() +{ + if (!p->has_waiting_updates) + return; + BOOST_LOG_TRIVIAL(info) << format("Update of %1% bundles available. Asking for confirmation ...", p->waiting_updates.updates.size()); + + std::vector updates_msg; + for (const auto& update : p->waiting_updates.updates) { + std::string changelog_url = update.version.config_version.prerelease() == nullptr ? update.changelog_url : std::string(); + updates_msg.emplace_back(update.vendor, update.version.config_version, update.version.comment, std::move(changelog_url)); + } + + GUI::MsgUpdateConfig dlg(updates_msg); + + const auto res = dlg.ShowModal(); + if (res == wxID_OK) { + BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update"; + p->perform_updates(std::move(p->waiting_updates)); + + // Reload global configuration + auto* app_config = GUI::wxGetApp().app_config; + GUI::wxGetApp().preset_bundle->load_presets(*app_config); + GUI::wxGetApp().load_current_presets(); + p->has_waiting_updates = false; + //return R_UPDATE_INSTALLED; + } + else { + BOOST_LOG_TRIVIAL(info) << "User refused the update"; + //return R_UPDATE_REJECT; + } + +} } diff --git a/src/slic3r/Utils/PresetUpdater.hpp b/src/slic3r/Utils/PresetUpdater.hpp index e186958284..0ca363c613 100644 --- a/src/slic3r/Utils/PresetUpdater.hpp +++ b/src/slic3r/Utils/PresetUpdater.hpp @@ -35,16 +35,20 @@ public: R_INCOMPAT_CONFIGURED, R_UPDATE_INSTALLED, R_UPDATE_REJECT, + R_UPDATE_NOTIFICATION }; // If updating is enabled, check if updates are available in cache, if so, ask about installation. // A false return value implies Slic3r should exit due to incompatibility of configuration. // Providing old slic3r version upgrade profiles on upgrade of an application even in case // that the config index installed from the Internet is equal to the index contained in the installation package. - UpdateResult config_update(const Semver &old_slic3r_version) const; + // no_notification = force modal textbox, otherwise some cases only shows notification + UpdateResult config_update(const Semver &old_slic3r_version, bool no_notification) const; // "Update" a list of bundles from resources (behaves like an online update). void install_bundles_rsrc(std::vector bundles, bool snapshot = true) const; + + void on_update_notification_confirm(); private: struct priv; std::unique_ptr p; diff --git a/src/slic3r/Utils/Process.cpp b/src/slic3r/Utils/Process.cpp new file mode 100644 index 0000000000..bc6961f9af --- /dev/null +++ b/src/slic3r/Utils/Process.cpp @@ -0,0 +1,161 @@ +#include "Process.hpp" + +#include + +#include "../GUI/GUI.hpp" +// for file_wildcards() +#include "../GUI/GUI_App.hpp" +// localization +#include "../GUI/I18N.hpp" + +#include +#include + +#include +#include + +// For starting another PrusaSlicer instance on OSX. +// Fails to compile on Windows on the build server. +#ifdef __APPLE__ + #include + #include +#endif + +#include + +namespace Slic3r { +namespace GUI { + +enum class NewSlicerInstanceType { + Slicer, + GCodeViewer +}; + +// Start a new Slicer process instance either in a Slicer mode or in a G-code mode. +// Optionally load a 3MF, STL or a G-code on start. +static void start_new_slicer_or_gcodeviewer(const NewSlicerInstanceType instance_type, const std::vector paths_to_open, bool single_instance) +{ +#ifdef _WIN32 + wxString path; + wxFileName::SplitPath(wxStandardPaths::Get().GetExecutablePath(), &path, nullptr, nullptr, wxPATH_NATIVE); + path += "\\"; + path += (instance_type == NewSlicerInstanceType::Slicer) ? "prusa-slicer.exe" : "prusa-gcodeviewer.exe"; + std::vector args; + args.reserve(4); + args.emplace_back(path.wc_str()); + if (!paths_to_open.empty()) { + for (const auto& file : paths_to_open) + args.emplace_back(file); + } + if (instance_type == NewSlicerInstanceType::Slicer && single_instance) + args.emplace_back(L"--single-instance"); + args.emplace_back(nullptr); + BOOST_LOG_TRIVIAL(info) << "Trying to spawn a new slicer \"" << into_u8(path) << "\""; + // Don't call with wxEXEC_HIDE_CONSOLE, PrusaSlicer in GUI mode would just show the splash screen. It would not open the main window though, it would + // just hang in the background. + if (wxExecute(const_cast(args.data()), wxEXEC_ASYNC) <= 0) + BOOST_LOG_TRIVIAL(error) << "Failed to spawn a new slicer \"" << into_u8(path); +#else + // Own executable path. + boost::filesystem::path bin_path = into_path(wxStandardPaths::Get().GetExecutablePath()); +#if defined(__APPLE__) + { + // Maybe one day we will be able to run PrusaGCodeViewer, but for now the Apple notarization + // process refuses Apps with multiple binaries and Vojtech does not know any workaround. + // ((instance_type == NewSlicerInstanceType::Slicer) ? "PrusaSlicer" : "PrusaGCodeViewer"); + // Just run PrusaSlicer and give it a --gcodeviewer parameter. + bin_path = bin_path.parent_path() / "PrusaSlicer"; + // On Apple the wxExecute fails, thus we use boost::process instead. + BOOST_LOG_TRIVIAL(info) << "Trying to spawn a new slicer \"" << bin_path.string() << "\""; + try { + std::vector args; + if (instance_type == NewSlicerInstanceType::GCodeViewer) + args.emplace_back("--gcodeviewer"); + if (!paths_to_open.empty()) { + for (const auto& file : paths_to_open) + args.emplace_back(into_u8(file)); + } + if (instance_type == NewSlicerInstanceType::Slicer && single_instance) + args.emplace_back("--single-instance"); + boost::process::spawn(bin_path, args); + } + catch (const std::exception& ex) { + BOOST_LOG_TRIVIAL(error) << "Failed to spawn a new slicer \"" << bin_path.string() << "\": " << ex.what(); + } + } +#else // Linux or Unix + { + std::vector args; + args.reserve(3); +#ifdef __linux + static const char* gcodeviewer_param = "--gcodeviewer"; + { + // If executed by an AppImage, start the AppImage, not the main process. + // see https://docs.appimage.org/packaging-guide/environment-variables.html#id2 + const char* appimage_binary = std::getenv("APPIMAGE"); + if (appimage_binary) { + args.emplace_back(appimage_binary); + if (instance_type == NewSlicerInstanceType::GCodeViewer) + args.emplace_back(gcodeviewer_param); + } + } +#endif // __linux + std::string my_path; + if (args.empty()) { + // Binary path was not set to the AppImage in the Linux specific block above, call the application directly. + my_path = (bin_path.parent_path() / ((instance_type == NewSlicerInstanceType::Slicer) ? "prusa-slicer" : "prusa-gcodeviewer")).string(); + args.emplace_back(my_path.c_str()); + } + std::string to_open; + if (!paths_to_open.empty()) { + for (const auto& file : paths_to_open) { + to_open = into_u8(file); + args.emplace_back(to_open.c_str()); + } + } + if (instance_type == NewSlicerInstanceType::Slicer && single_instance) + args.emplace_back("--single-instance"); + args.emplace_back(nullptr); + BOOST_LOG_TRIVIAL(info) << "Trying to spawn a new slicer \"" << args[0] << "\""; + if (wxExecute(const_cast(args.data()), wxEXEC_ASYNC | wxEXEC_MAKE_GROUP_LEADER) <= 0) + BOOST_LOG_TRIVIAL(error) << "Failed to spawn a new slicer \"" << args[0]; + } +#endif // Linux or Unix +#endif // Win32 +} +static void start_new_slicer_or_gcodeviewer(const NewSlicerInstanceType instance_type, const wxString* path_to_open, bool single_instance) +{ + std::vector paths; + if (path_to_open != nullptr) + paths.emplace_back(path_to_open->wc_str()); + start_new_slicer_or_gcodeviewer(instance_type, paths, single_instance); +} + +void start_new_slicer(const wxString *path_to_open, bool single_instance) +{ + start_new_slicer_or_gcodeviewer(NewSlicerInstanceType::Slicer, path_to_open, single_instance); +} +void start_new_slicer(const std::vector& files, bool single_instance) +{ + start_new_slicer_or_gcodeviewer(NewSlicerInstanceType::Slicer, files, single_instance); +} + +void start_new_gcodeviewer(const wxString *path_to_open) +{ + start_new_slicer_or_gcodeviewer(NewSlicerInstanceType::GCodeViewer, path_to_open, false); +} + +void start_new_gcodeviewer_open_file(wxWindow *parent) +{ + wxFileDialog dialog(parent ? parent : wxGetApp().GetTopWindow(), + _L("Open G-code file:"), + from_u8(wxGetApp().app_config->get_last_dir()), wxString(), + file_wildcards(FT_GCODE), wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (dialog.ShowModal() == wxID_OK) { + wxString path = dialog.GetPath(); + start_new_gcodeviewer(&path); + } +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/Utils/Process.hpp b/src/slic3r/Utils/Process.hpp new file mode 100644 index 0000000000..494b222eb3 --- /dev/null +++ b/src/slic3r/Utils/Process.hpp @@ -0,0 +1,25 @@ +#ifndef GUI_PROCESS_HPP +#define GUI_PROCESS_HPP + +#include + + +class wxWindow; +class wxString; + +namespace Slic3r { +namespace GUI { + +// Start a new slicer instance, optionally with a file to open. +void start_new_slicer(const wxString *path_to_open = nullptr, bool single_instance = false); +void start_new_slicer(const std::vector& files, bool single_instance = false); + +// Start a new G-code viewer instance, optionally with a file to open. +void start_new_gcodeviewer(const wxString *path_to_open = nullptr); +// Open a file dialog, ask the user to select a new G-code to open, start a new G-code viewer. +void start_new_gcodeviewer_open_file(wxWindow *parent = nullptr); + +} // namespace GUI +} // namespace Slic3r + +#endif // GUI_PROCESS_HPP diff --git a/src/slic3r/Utils/Profile.hpp b/src/slic3r/Utils/Profile.hpp new file mode 100644 index 0000000000..5fb1e31167 --- /dev/null +++ b/src/slic3r/Utils/Profile.hpp @@ -0,0 +1,19 @@ +#ifndef slic3r_GUI_Profile_hpp_ +#define slic3r_GUI_Profile_hpp_ + +// Profiling support using the Shiny intrusive profiler +//#define SLIC3R_PROFILE_GUI +#if defined(SLIC3R_PROFILE) && defined(SLIC3R_PROFILE_GUI) + #include + #define SLIC3R_GUI_PROFILE_FUNC() PROFILE_FUNC() + #define SLIC3R_GUI_PROFILE_BLOCK(name) PROFILE_BLOCK(name) + #define SLIC3R_GUI_PROFILE_UPDATE() PROFILE_UPDATE() + #define SLIC3R_GUI_PROFILE_OUTPUT(x) PROFILE_OUTPUT(x) +#else + #define SLIC3R_GUI_PROFILE_FUNC() + #define SLIC3R_GUI_PROFILE_BLOCK(name) + #define SLIC3R_GUI_PROFILE_UPDATE() + #define SLIC3R_GUI_PROFILE_OUTPUT(x) +#endif + +#endif // slic3r_GUI_Profile_hpp_ diff --git a/src/slic3r/Utils/SLAImport.cpp b/src/slic3r/Utils/SLAImport.cpp deleted file mode 100644 index 442025a77d..0000000000 --- a/src/slic3r/Utils/SLAImport.cpp +++ /dev/null @@ -1,314 +0,0 @@ -#include "SLAImport.hpp" - -#include - -#include "libslic3r/SlicesToTriangleMesh.hpp" -#include "libslic3r/MarchingSquares.hpp" -#include "libslic3r/ClipperUtils.hpp" -#include "libslic3r/MTUtils.hpp" -#include "libslic3r/PrintConfig.hpp" -#include "libslic3r/SLA/RasterBase.hpp" -#include "libslic3r/miniz_extension.hpp" - -#include -#include -#include - -#include -#include - -namespace marchsq { - -// Specialize this struct to register a raster type for the Marching squares alg -template<> struct _RasterTraits { - using Rst = wxImage; - - // The type of pixel cell in the raster - using ValueType = uint8_t; - - // Value at a given position - static uint8_t get(const Rst &rst, size_t row, size_t col) - { - return rst.GetRed(col, row); - } - - // Number of rows and cols of the raster - static size_t rows(const Rst &rst) { return rst.GetHeight(); } - static size_t cols(const Rst &rst) { return rst.GetWidth(); } -}; - -} // namespace marchsq - -namespace Slic3r { - -namespace { - -struct ArchiveData { - boost::property_tree::ptree profile, config; - std::vector images; -}; - -static const constexpr char *CONFIG_FNAME = "config.ini"; -static const constexpr char *PROFILE_FNAME = "prusaslicer.ini"; - -boost::property_tree::ptree read_ini(const mz_zip_archive_file_stat &entry, - MZ_Archive & zip) -{ - std::string buf(size_t(entry.m_uncomp_size), '\0'); - - if (!mz_zip_reader_extract_file_to_mem(&zip.arch, entry.m_filename, - buf.data(), buf.size(), 0)) - throw std::runtime_error(zip.get_errorstr()); - - boost::property_tree::ptree tree; - std::stringstream ss(buf); - boost::property_tree::read_ini(ss, tree); - return tree; -} - -sla::EncodedRaster read_png(const mz_zip_archive_file_stat &entry, - MZ_Archive & zip, - const std::string & name) -{ - std::vector buf(entry.m_uncomp_size); - - if (!mz_zip_reader_extract_file_to_mem(&zip.arch, entry.m_filename, - buf.data(), buf.size(), 0)) - throw std::runtime_error(zip.get_errorstr()); - - return sla::EncodedRaster(std::move(buf), - name.empty() ? entry.m_filename : name); -} - -ArchiveData extract_sla_archive(const std::string &zipfname, - const std::string &exclude) -{ - ArchiveData arch; - - // Little RAII - struct Arch: public MZ_Archive { - Arch(const std::string &fname) { - if (!open_zip_reader(&arch, fname)) - throw std::runtime_error(get_errorstr()); - } - - ~Arch() { close_zip_reader(&arch); } - } zip (zipfname); - - mz_uint num_entries = mz_zip_reader_get_num_files(&zip.arch); - - for (mz_uint i = 0; i < num_entries; ++i) - { - mz_zip_archive_file_stat entry; - - if (mz_zip_reader_file_stat(&zip.arch, i, &entry)) - { - std::string name = entry.m_filename; - boost::algorithm::to_lower(name); - - if (boost::algorithm::contains(name, exclude)) continue; - - if (name == CONFIG_FNAME) arch.config = read_ini(entry, zip); - if (name == PROFILE_FNAME) arch.profile = read_ini(entry, zip); - - if (boost::filesystem::path(name).extension().string() == ".png") { - auto it = std::lower_bound( - arch.images.begin(), arch.images.end(), sla::EncodedRaster({}, name), - [](const sla::EncodedRaster &r1, const sla::EncodedRaster &r2) { - return std::less()(r1.extension(), r2.extension()); - }); - - arch.images.insert(it, read_png(entry, zip, name)); - } - } - } - - return arch; -} - -ExPolygons rings_to_expolygons(const std::vector &rings, - double px_w, double px_h) -{ - ExPolygons polys; polys.reserve(rings.size()); - - for (const marchsq::Ring &ring : rings) { - Polygon poly; Points &pts = poly.points; - pts.reserve(ring.size()); - - for (const marchsq::Coord &crd : ring) - pts.emplace_back(scaled(crd.c * px_w), scaled(crd.r * px_h)); - - polys.emplace_back(poly); - } - - // reverse the raster transformations - return union_ex(polys); -} - -template void foreach_vertex(ExPolygon &poly, Fn &&fn) -{ - for (auto &p : poly.contour.points) fn(p); - for (auto &h : poly.holes) - for (auto &p : h.points) fn(p); -} - -void invert_raster_trafo(ExPolygons & expolys, - const sla::RasterBase::Trafo &trafo, - coord_t width, - coord_t height) -{ - for (auto &expoly : expolys) { - if (trafo.mirror_y) - foreach_vertex(expoly, [height](Point &p) {p.y() = height - p.y(); }); - - if (trafo.mirror_x) - foreach_vertex(expoly, [width](Point &p) {p.x() = width - p.x(); }); - - expoly.translate(-trafo.center_x, -trafo.center_y); - - if (trafo.flipXY) - foreach_vertex(expoly, [](Point &p) { std::swap(p.x(), p.y()); }); - - if ((trafo.mirror_x + trafo.mirror_y + trafo.flipXY) % 2) { - expoly.contour.reverse(); - for (auto &h : expoly.holes) h.reverse(); - } - } -} - -struct RasterParams { - sla::RasterBase::Trafo trafo; // Raster transformations - coord_t width, height; // scaled raster dimensions (not resolution) - double px_h, px_w; // pixel dimesions - marchsq::Coord win; // marching squares window size -}; - -RasterParams get_raster_params(const DynamicPrintConfig &cfg) -{ - auto *opt_disp_cols = cfg.option("display_pixels_x"); - auto *opt_disp_rows = cfg.option("display_pixels_y"); - auto *opt_disp_w = cfg.option("display_width"); - auto *opt_disp_h = cfg.option("display_height"); - auto *opt_mirror_x = cfg.option("display_mirror_x"); - auto *opt_mirror_y = cfg.option("display_mirror_y"); - auto *opt_orient = cfg.option>("display_orientation"); - - if (!opt_disp_cols || !opt_disp_rows || !opt_disp_w || !opt_disp_h || - !opt_mirror_x || !opt_mirror_y || !opt_orient) - throw std::runtime_error("Invalid SL1 file"); - - RasterParams rstp; - - rstp.px_w = opt_disp_w->value / (opt_disp_cols->value - 1); - rstp.px_h = opt_disp_h->value / (opt_disp_rows->value - 1); - - sla::RasterBase::Trafo trafo{opt_orient->value == sladoLandscape ? - sla::RasterBase::roLandscape : - sla::RasterBase::roPortrait, - {opt_mirror_x->value, opt_mirror_y->value}}; - - rstp.height = scaled(opt_disp_h->value); - rstp.width = scaled(opt_disp_w->value); - - return rstp; -} - -struct SliceParams { double layerh = 0., initial_layerh = 0.; }; - -SliceParams get_slice_params(const DynamicPrintConfig &cfg) -{ - auto *opt_layerh = cfg.option("layer_height"); - auto *opt_init_layerh = cfg.option("initial_layer_height"); - - if (!opt_layerh || !opt_init_layerh) - throw std::runtime_error("Invalid SL1 file"); - - return SliceParams{opt_layerh->getFloat(), opt_init_layerh->getFloat()}; -} - -std::vector extract_slices_from_sla_archive( - ArchiveData & arch, - const RasterParams & rstp, - std::function progr) -{ - auto jobdir = arch.config.get("jobDir"); - for (auto &c : jobdir) c = std::tolower(c); - - std::vector slices(arch.images.size()); - - struct Status - { - double incr, val, prev; - bool stop = false; - tbb::spin_mutex mutex; - } st {100. / slices.size(), 0., 0.}; - - tbb::parallel_for(size_t(0), arch.images.size(), - [&arch, &slices, &st, &rstp, progr](size_t i) { - // Status indication guarded with the spinlock - { - std::lock_guard lck(st.mutex); - if (st.stop) return; - - st.val += st.incr; - double curr = std::round(st.val); - if (curr > st.prev) { - st.prev = curr; - st.stop = !progr(int(curr)); - } - } - - auto &buf = arch.images[i]; - wxMemoryInputStream stream{buf.data(), buf.size()}; - wxImage img{stream}; - - auto rings = marchsq::execute(img, 128, rstp.win); - ExPolygons expolys = rings_to_expolygons(rings, rstp.px_w, rstp.px_h); - - // Invert the raster transformations indicated in - // the profile metadata - invert_raster_trafo(expolys, rstp.trafo, rstp.width, rstp.height); - - slices[i] = std::move(expolys); - }); - - if (st.stop) slices = {}; - - return slices; -} - -} // namespace - -void import_sla_archive(const std::string &zipfname, DynamicPrintConfig &out) -{ - ArchiveData arch = extract_sla_archive(zipfname, "png"); - out.load(arch.profile); -} - -void import_sla_archive( - const std::string & zipfname, - Vec2i windowsize, - TriangleMesh & out, - DynamicPrintConfig & profile, - std::function progr) -{ - // Ensure minimum window size for marching squares - windowsize.x() = std::max(2, windowsize.x()); - windowsize.y() = std::max(2, windowsize.y()); - - ArchiveData arch = extract_sla_archive(zipfname, "thumbnail"); - profile.load(arch.profile); - - RasterParams rstp = get_raster_params(profile); - rstp.win = {windowsize.y(), windowsize.x()}; - - SliceParams slicp = get_slice_params(profile); - - std::vector slices = - extract_slices_from_sla_archive(arch, rstp, progr); - - if (!slices.empty()) - out = slices_to_triangle_mesh(slices, 0, slicp.layerh, slicp.initial_layerh); -} - -} // namespace Slic3r diff --git a/src/slic3r/Utils/SLAImport.hpp b/src/slic3r/Utils/SLAImport.hpp deleted file mode 100644 index 73995014f4..0000000000 --- a/src/slic3r/Utils/SLAImport.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef SLAIMPORT_HPP -#define SLAIMPORT_HPP - -#include - -#include -#include - -namespace Slic3r { - -class TriangleMesh; -class DynamicPrintConfig; - -void import_sla_archive(const std::string &zipfname, DynamicPrintConfig &out); - -void import_sla_archive( - const std::string & zipfname, - Vec2i windowsize, - TriangleMesh & out, - DynamicPrintConfig & profile, - std::function progr = [](int) { return true; }); - -inline void import_sla_archive( - const std::string & zipfname, - Vec2i windowsize, - TriangleMesh & out, - std::function progr = [](int) { return true; }) -{ - DynamicPrintConfig profile; - import_sla_archive(zipfname, windowsize, out, profile, progr); -} - -} - -#endif // SLAIMPORT_HPP diff --git a/src/slic3r/Utils/Serial.cpp b/src/slic3r/Utils/Serial.cpp index 737e76c0b5..0c1ad1de5b 100644 --- a/src/slic3r/Utils/Serial.cpp +++ b/src/slic3r/Utils/Serial.cpp @@ -1,5 +1,7 @@ #include "Serial.hpp" +#include "libslic3r/Exception.hpp" + #include #include #include @@ -298,7 +300,7 @@ void Serial::set_baud_rate(unsigned baud_rate) auto handle_errno = [](int retval) { if (retval != 0) { - throw std::runtime_error( + throw Slic3r::RuntimeError( (boost::format("Could not set baud rate: %1%") % strerror(errno)).str() ); } @@ -346,7 +348,7 @@ void Serial::set_baud_rate(unsigned baud_rate) handle_errno(::cfsetspeed(&ios, baud_rate)); handle_errno(::tcsetattr(handle, TCSAFLUSH, &ios)); #else - throw std::runtime_error("Custom baud rates are not currently supported on this OS"); + throw Slic3r::RuntimeError("Custom baud rates are not currently supported on this OS"); #endif } } @@ -358,7 +360,7 @@ void Serial::set_DTR(bool on) auto handle = native_handle(); #if defined(_WIN32) && !defined(__SYMBIAN32__) if (! EscapeCommFunction(handle, on ? SETDTR : CLRDTR)) { - throw std::runtime_error("Could not set serial port DTR"); + throw Slic3r::RuntimeError("Could not set serial port DTR"); } #else int status; @@ -369,7 +371,7 @@ void Serial::set_DTR(bool on) } } - throw std::runtime_error( + throw Slic3r::RuntimeError( (boost::format("Could not set serial port DTR: %1%") % strerror(errno)).str() ); #endif diff --git a/src/slic3r/Utils/Thread.hpp b/src/slic3r/Utils/Thread.hpp deleted file mode 100644 index e9c76d2aba..0000000000 --- a/src/slic3r/Utils/Thread.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef THREAD_HPP -#define THREAD_HPP - -#include -#include - -namespace Slic3r { - -template -inline boost::thread create_thread(boost::thread::attributes &attrs, Fn &&fn) -{ - // Duplicating the stack allocation size of Thread Building Block worker - // threads of the thread pool: allocate 4MB on a 64bit system, allocate 2MB - // on a 32bit system by default. - - attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024)); - return boost::thread{attrs, std::forward(fn)}; -} - -template inline boost::thread create_thread(Fn &&fn) -{ - boost::thread::attributes attrs; - return create_thread(attrs, std::forward(fn)); -} - -} - -#endif // THREAD_HPP diff --git a/src/slic3r/Utils/UndoRedo.cpp b/src/slic3r/Utils/UndoRedo.cpp index 9c8d7a8c68..b6d22d1e62 100644 --- a/src/slic3r/Utils/UndoRedo.cpp +++ b/src/slic3r/Utils/UndoRedo.cpp @@ -17,7 +17,7 @@ #define CEREAL_FUTURE_EXPERIMENTAL #include -#include +#include #include #include @@ -307,7 +307,11 @@ private: size_t size; char data[1]; + // The serialized data matches the data stored here. bool matches(const std::string& rhs) { return this->size == rhs.size() && memcmp(this->data, rhs.data(), this->size) == 0; } + + // The timestamp matches the timestamp serialized in the data stored here. + bool matches_timestamp(uint64_t timestamp) { assert(timestamp > 0); assert(this->size > 8); return memcmp(this->data, ×tamp, 8) == 0; } }; Interval m_interval; @@ -350,7 +354,8 @@ public: size_t size() const { return m_data->size; } size_t refcnt() const { return m_data->refcnt; } bool matches(const std::string& data) { return m_data->matches(data); } - size_t memsize() const { + bool matches_timestamp(uint64_t timestamp) { return m_data->matches_timestamp(timestamp); } + size_t memsize() const { return m_data->refcnt == 1 ? // Count just the size of the snapshot data. m_data->size : @@ -398,6 +403,27 @@ public: return memsize; } + // If an object provides a reliable timestamp and the object serializes the timestamp first, + // then we may just check the validity of the timestamp against the last snapshot without + // having to serialize the whole object. This reduces the amount of serialization and memcmp + // when taking a snapshot. + bool try_save_timestamp(size_t active_snapshot_time, size_t current_time, uint64_t timestamp) { + assert(m_history.empty() || m_history.back().end() <= active_snapshot_time); + if (! m_history.empty() && m_history.back().matches_timestamp(timestamp)) { + if (m_history.back().end() < active_snapshot_time) + // Share the previous data by reference counting. + m_history.emplace_back(Interval(current_time, current_time + 1), m_history.back()); + else { + assert(m_history.back().end() == active_snapshot_time); + // Just extend the last interval using the old data. + m_history.back().extend_end(current_time + 1); + } + return true; + } + // The timestamp is not valid, the caller has to call this->save() with the serialized data. + return false; + } + void save(size_t active_snapshot_time, size_t current_time, const std::string &data) { assert(m_history.empty() || m_history.back().end() <= active_snapshot_time); if (m_history.empty() || m_history.back().end() < active_snapshot_time) { @@ -749,13 +775,23 @@ template ObjectID StackImpl::save_mutable_object(const T &object) if (it_object_history == m_objects.end()) it_object_history = m_objects.insert(it_object_history, std::make_pair(object.id(), std::unique_ptr>(new MutableObjectHistory()))); auto *object_history = static_cast*>(it_object_history->second.get()); - // Then serialize the object into a string. - std::ostringstream oss; + bool needs_to_save = true; { - Slic3r::UndoRedo::OutputArchive archive(*this, oss); - archive(object); + // If the timestamp returned is non zero, then it is considered reliable. + // The caller is supposed to serialize the timestamp first. + uint64_t timestamp = object.timestamp(); + if (timestamp > 0) + needs_to_save = ! object_history->try_save_timestamp(m_active_snapshot_time, m_current_time, timestamp); + } + if (needs_to_save) { + // Serialize the object into a string. + std::ostringstream oss; + { + Slic3r::UndoRedo::OutputArchive archive(*this, oss); + archive(object); + } + object_history->save(m_active_snapshot_time, m_current_time, oss.str()); } - object_history->save(m_active_snapshot_time, m_current_time, oss.str()); return object.id(); } @@ -847,7 +883,7 @@ void StackImpl::load_snapshot(size_t timestamp, Slic3r::Model& model, Slic3r::GU // Find the snapshot by time. It must exist. const auto it_snapshot = std::lower_bound(m_snapshots.begin(), m_snapshots.end(), Snapshot(timestamp)); if (it_snapshot == m_snapshots.end() || it_snapshot->timestamp != timestamp) - throw std::runtime_error((boost::format("Snapshot with timestamp %1% does not exist") % timestamp).str()); + throw Slic3r::RuntimeError((boost::format("Snapshot with timestamp %1% does not exist") % timestamp).str()); m_active_snapshot_time = timestamp; model.clear_objects(); diff --git a/tests/fff_print/test_data.cpp b/tests/fff_print/test_data.cpp index 70f82f4a50..8e5f6bafdc 100644 --- a/tests/fff_print/test_data.cpp +++ b/tests/fff_print/test_data.cpp @@ -137,7 +137,7 @@ TriangleMesh mesh(TestMesh m) { {0,1,2}, {2,1,3}, {4,0,5}, {4,1,0}, {6,4,7}, {7,4,5}, {4,8,1}, {0,2,5}, {5,2,9}, {2,10,9}, {10,3,11}, {2,3,10}, {9,10,12}, {13,9,12}, {3,1,8}, {11,3,8}, {10,11,8}, {4,10,8}, {6,12,10}, {4,6,10}, {7,13,12}, {6,7,12}, {7,5,9}, {13,7,9} }); break; default: - throw std::invalid_argument("Slic3r::Test::mesh(): called with invalid mesh ID"); + throw Slic3r::InvalidArgument("Slic3r::Test::mesh(): called with invalid mesh ID"); break; } @@ -244,8 +244,12 @@ std::string gcode(Print & print) boost::filesystem::path temp = boost::filesystem::unique_path(); print.set_status_silent(); print.process(); +#if ENABLE_GCODE_VIEWER + print.export_gcode(temp.string(), nullptr, nullptr); +#else print.export_gcode(temp.string(), nullptr); - std::ifstream t(temp.string()); +#endif // ENABLE_GCODE_VIEWER + std::ifstream t(temp.string()); std::string str((std::istreambuf_iterator(t)), std::istreambuf_iterator()); boost::nowide::remove(temp.string().c_str()); return str; diff --git a/tests/fff_print/test_model.cpp b/tests/fff_print/test_model.cpp index 6cb9266214..45a080f315 100644 --- a/tests/fff_print/test_model.cpp +++ b/tests/fff_print/test_model.cpp @@ -50,7 +50,11 @@ SCENARIO("Model construction", "[Model]") { print.apply(model, config); print.process(); boost::filesystem::path temp = boost::filesystem::unique_path(); +#if ENABLE_GCODE_VIEWER + print.export_gcode(temp.string(), nullptr, nullptr); +#else print.export_gcode(temp.string(), nullptr); +#endif // ENABLE_GCODE_VIEWER REQUIRE(boost::filesystem::exists(temp)); REQUIRE(boost::filesystem::is_regular_file(temp)); REQUIRE(boost::filesystem::file_size(temp) > 0); diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 5a1e8f18b7..501af0c6f3 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -17,6 +17,9 @@ add_executable(${_TEST_NAME}_tests test_marchingsquares.cpp test_timeutils.cpp test_voronoi.cpp + test_optimizers.cpp + test_png_io.cpp + test_timeutils.cpp ) if (TARGET OpenVDB::openvdb) diff --git a/tests/libslic3r/test_optimizers.cpp b/tests/libslic3r/test_optimizers.cpp new file mode 100644 index 0000000000..6e84f6a691 --- /dev/null +++ b/tests/libslic3r/test_optimizers.cpp @@ -0,0 +1,59 @@ +#include +#include + +#include + +#include + +void check_opt_result(double score, double ref, double abs_err, double rel_err) +{ + double abs_diff = std::abs(score - ref); + double rel_diff = std::abs(abs_diff / std::abs(ref)); + + bool abs_reached = abs_diff < abs_err; + bool rel_reached = rel_diff < rel_err; + bool precision_reached = abs_reached || rel_reached; + REQUIRE(precision_reached); +} + +template void test_sin(Opt &&opt) +{ + using namespace Slic3r::opt; + + auto optfunc = [](const auto &in) { + auto [phi] = in; + + return std::sin(phi); + }; + + auto init = initvals({PI}); + auto optbounds = bounds({ {0., 2 * PI}}); + + Result result_min = opt.to_min().optimize(optfunc, init, optbounds); + Result result_max = opt.to_max().optimize(optfunc, init, optbounds); + + check_opt_result(result_min.score, -1., 1e-2, 1e-4); + check_opt_result(result_max.score, 1., 1e-2, 1e-4); +} + +template void test_sphere_func(Opt &&opt) +{ + using namespace Slic3r::opt; + + Result result = opt.to_min().optimize([](const auto &in) { + auto [x, y] = in; + + return x * x + y * y + 1.; + }, initvals({.6, -0.2}), bounds({{-1., 1.}, {-1., 1.}})); + + check_opt_result(result.score, 1., 1e-2, 1e-4); +} + +TEST_CASE("Test brute force optimzer for basic 1D and 2D functions", "[Opt]") { + using namespace Slic3r::opt; + + Optimizer opt; + + test_sin(opt); + test_sphere_func(opt); +} diff --git a/tests/libslic3r/test_png_io.cpp b/tests/libslic3r/test_png_io.cpp new file mode 100644 index 0000000000..51f94be326 --- /dev/null +++ b/tests/libslic3r/test_png_io.cpp @@ -0,0 +1,55 @@ +#define NOMINMAX +#include + +#include + +#include "libslic3r/PNGRead.hpp" +#include "libslic3r/SLA/AGGRaster.hpp" +#include "libslic3r/BoundingBox.hpp" + +using namespace Slic3r; + +static sla::RasterGrayscaleAA create_raster(const sla::RasterBase::Resolution &res) +{ + sla::RasterBase::PixelDim pixdim{1., 1.}; + + auto bb = BoundingBox({0, 0}, {scaled(1.), scaled(1.)}); + sla::RasterBase::Trafo trafo; + trafo.center_x = bb.center().x(); + trafo.center_y = bb.center().y(); + + return sla::RasterGrayscaleAA{res, pixdim, trafo, agg::gamma_threshold(.5)}; +} + +TEST_CASE("PNG read", "[PNG]") { + auto rst = create_raster({100, 100}); + + size_t rstsum = 0; + for (size_t r = 0; r < rst.resolution().height_px; ++r) + for (size_t c = 0; c < rst.resolution().width_px; ++c) + rstsum += rst.read_pixel(c, r); + + SECTION("Correct png buffer should be recognized as such.") { + auto enc_rst = rst.encode(sla::PNGRasterEncoder{}); + REQUIRE(Slic3r::png::is_png({enc_rst.data(), enc_rst.size()})); + } + + SECTION("Fake png buffer should be recognized as such.") { + std::vector fake(10, '\0'); + REQUIRE(!Slic3r::png::is_png({fake.data(), fake.size()})); + } + + SECTION("Decoded PNG buffer resolution should match the original") { + auto enc_rst = rst.encode(sla::PNGRasterEncoder{}); + + png::ImageGreyscale img; + png::decode_png({enc_rst.data(), enc_rst.size()}, img); + + REQUIRE(img.rows == rst.resolution().height_px); + REQUIRE(img.cols == rst.resolution().width_px); + + size_t sum = std::accumulate(img.buf.begin(), img.buf.end(), size_t(0)); + + REQUIRE(sum == rstsum); + } +} diff --git a/tests/sla_print/CMakeLists.txt b/tests/sla_print/CMakeLists.txt index 9d47f3ae4d..dc583f1a1c 100644 --- a/tests/sla_print/CMakeLists.txt +++ b/tests/sla_print/CMakeLists.txt @@ -1,7 +1,8 @@ get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp - sla_print_tests.cpp +add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp + sla_print_tests.cpp sla_test_utils.hpp sla_test_utils.cpp + sla_supptgen_tests.cpp sla_raycast_tests.cpp) target_link_libraries(${_TEST_NAME}_tests test_common libslic3r) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") diff --git a/tests/sla_print/sla_print_tests.cpp b/tests/sla_print/sla_print_tests.cpp index 82df2c1a6f..c1941c8d98 100644 --- a/tests/sla_print/sla_print_tests.cpp +++ b/tests/sla_print/sla_print_tests.cpp @@ -4,6 +4,9 @@ #include "sla_test_utils.hpp" +#include +#include + namespace { const char *const BELOW_PAD_TEST_OBJECTS[] = { @@ -37,9 +40,9 @@ TEST_CASE("Support point generator should be deterministic if seeded", "[SLASupportGeneration], [SLAPointGen]") { TriangleMesh mesh = load_model("A_upsidedown.obj"); - sla::EigenMesh3D emesh{mesh}; + sla::IndexedMesh emesh{mesh}; - sla::SupportConfig supportcfg; + sla::SupportTreeConfig supportcfg; sla::SupportPointGenerator::Config autogencfg; autogencfg.head_diameter = float(2 * supportcfg.head_front_radius_mm); sla::SupportPointGenerator point_gen{emesh, autogencfg, [] {}, [](int) {}}; @@ -124,14 +127,14 @@ TEST_CASE("WingedPadAroundObjectIsValid", "[SLASupportGeneration]") { } TEST_CASE("ElevatedSupportGeometryIsValid", "[SLASupportGeneration]") { - sla::SupportConfig supportcfg; - supportcfg.object_elevation_mm = 5.; + sla::SupportTreeConfig supportcfg; + supportcfg.object_elevation_mm = 10.; - for (auto fname : SUPPORT_TEST_MODELS) test_supports(fname); + for (auto fname : SUPPORT_TEST_MODELS) test_supports(fname, supportcfg); } TEST_CASE("FloorSupportGeometryIsValid", "[SLASupportGeneration]") { - sla::SupportConfig supportcfg; + sla::SupportTreeConfig supportcfg; supportcfg.object_elevation_mm = 0; for (auto &fname: SUPPORT_TEST_MODELS) test_supports(fname, supportcfg); @@ -139,7 +142,7 @@ TEST_CASE("FloorSupportGeometryIsValid", "[SLASupportGeneration]") { TEST_CASE("ElevatedSupportsDoNotPierceModel", "[SLASupportGeneration]") { - sla::SupportConfig supportcfg; + sla::SupportTreeConfig supportcfg; for (auto fname : SUPPORT_TEST_MODELS) test_support_model_collision(fname, supportcfg); @@ -147,7 +150,7 @@ TEST_CASE("ElevatedSupportsDoNotPierceModel", "[SLASupportGeneration]") { TEST_CASE("FloorSupportsDoNotPierceModel", "[SLASupportGeneration]") { - sla::SupportConfig supportcfg; + sla::SupportTreeConfig supportcfg; supportcfg.object_elevation_mm = 0; for (auto fname : SUPPORT_TEST_MODELS) @@ -228,3 +231,23 @@ TEST_CASE("Triangle mesh conversions should be correct", "[SLAConversions]") cntr.from_obj(infile); } } + +TEST_CASE("halfcone test", "[halfcone]") { + sla::DiffBridge br{Vec3d{1., 1., 1.}, Vec3d{10., 10., 10.}, 0.25, 0.5}; + + TriangleMesh m = sla::to_triangle_mesh(sla::get_mesh(br, 45)); + + m.require_shared_vertices(); + m.WriteOBJFile("Halfcone.obj"); +} + +TEST_CASE("Test concurrency") +{ + std::vector vals = grid(0., 100., 10.); + + double ref = std::accumulate(vals.begin(), vals.end(), 0.); + + double s = sla::ccr_par::reduce(vals.begin(), vals.end(), 0., std::plus{}); + + REQUIRE(s == Approx(ref)); +} diff --git a/tests/sla_print/sla_raycast_tests.cpp b/tests/sla_print/sla_raycast_tests.cpp index c82e4569a8..b56909280b 100644 --- a/tests/sla_print/sla_raycast_tests.cpp +++ b/tests/sla_print/sla_raycast_tests.cpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include "sla_test_utils.hpp" @@ -65,7 +65,7 @@ TEST_CASE("Raycaster with loaded drillholes", "[sla_raycast]") cube.merge(*cube_inside); cube.require_shared_vertices(); - sla::EigenMesh3D emesh{cube}; + sla::IndexedMesh emesh{cube}; emesh.load_holes(holes); Vec3d s = center.cast(); diff --git a/tests/sla_print/sla_supptgen_tests.cpp b/tests/sla_print/sla_supptgen_tests.cpp new file mode 100644 index 0000000000..ee9013a44c --- /dev/null +++ b/tests/sla_print/sla_supptgen_tests.cpp @@ -0,0 +1,146 @@ +#include +#include + +#include +#include + +#include "sla_test_utils.hpp" + +namespace Slic3r { namespace sla { + +TEST_CASE("Overhanging point should be supported", "[SupGen]") { + + // Pyramid with 45 deg slope + TriangleMesh mesh = make_pyramid(10.f, 10.f); + mesh.rotate_y(PI); + mesh.require_shared_vertices(); + mesh.WriteOBJFile("Pyramid.obj"); + + sla::SupportPoints pts = calc_support_pts(mesh); + + // The overhang, which is the upside-down pyramid's edge + Vec3f overh{0., 0., -10.}; + + REQUIRE(!pts.empty()); + + float dist = (overh - pts.front().pos).norm(); + + for (const auto &pt : pts) + dist = std::min(dist, (overh - pt.pos).norm()); + + // Should require exactly one support point at the overhang + REQUIRE(pts.size() > 0); + REQUIRE(dist < 1.f); +} + +double min_point_distance(const sla::SupportPoints &pts) +{ + sla::PointIndex index; + + for (size_t i = 0; i < pts.size(); ++i) + index.insert(pts[i].pos.cast(), i); + + auto d = std::numeric_limits::max(); + index.foreach([&d, &index](const sla::PointIndexEl &el) { + auto res = index.nearest(el.first, 2); + for (const sla::PointIndexEl &r : res) + if (r.second != el.second) + d = std::min(d, (el.first - r.first).norm()); + }); + + return d; +} + +TEST_CASE("Overhanging horizontal surface should be supported", "[SupGen]") { + double width = 10., depth = 10., height = 1.; + + TriangleMesh mesh = make_cube(width, depth, height); + mesh.translate(0., 0., 5.); // lift up + mesh.require_shared_vertices(); + mesh.WriteOBJFile("Cuboid.obj"); + + sla::SupportPointGenerator::Config cfg; + sla::SupportPoints pts = calc_support_pts(mesh, cfg); + + double mm2 = width * depth; + + REQUIRE(!pts.empty()); + REQUIRE(pts.size() * cfg.support_force() > mm2 * cfg.tear_pressure()); + REQUIRE(min_point_distance(pts) >= cfg.minimal_distance); +} + +template auto&& center_around_bb(M &&mesh) +{ + auto bb = mesh.bounding_box(); + mesh.translate(-bb.center().template cast()); + + return std::forward(mesh); +} + +TEST_CASE("Overhanging edge should be supported", "[SupGen]") { + float width = 10.f, depth = 10.f, height = 5.f; + + TriangleMesh mesh = make_prism(width, depth, height); + mesh.rotate_y(PI); // rotate on its back + mesh.translate(0., 0., height); + mesh.require_shared_vertices(); + mesh.WriteOBJFile("Prism.obj"); + + sla::SupportPointGenerator::Config cfg; + sla::SupportPoints pts = calc_support_pts(mesh, cfg); + + Linef3 overh{ {0.f, -depth / 2.f, 0.f}, {0.f, depth / 2.f, 0.f}}; + + // Get all the points closer that 1 mm to the overhanging edge: + sla::SupportPoints overh_pts; overh_pts.reserve(pts.size()); + + std::copy_if(pts.begin(), pts.end(), std::back_inserter(overh_pts), + [&overh](const sla::SupportPoint &pt){ + return line_alg::distance_to(overh, Vec3d{pt.pos.cast()}) < 1.; + }); + + REQUIRE(overh_pts.size() * cfg.support_force() > overh.length() * cfg.tear_pressure()); + double ddiff = min_point_distance(pts) - cfg.minimal_distance; + REQUIRE(ddiff > - 0.1 * cfg.minimal_distance); +} + +TEST_CASE("Hollowed cube should be supported from the inside", "[SupGen][Hollowed]") { + TriangleMesh mesh = make_cube(20., 20., 20.); + + hollow_mesh(mesh, HollowingConfig{}); + + mesh.WriteOBJFile("cube_hollowed.obj"); + + auto bb = mesh.bounding_box(); + auto h = float(bb.max.z() - bb.min.z()); + Vec3f mv = bb.center().cast() - Vec3f{0.f, 0.f, 0.5f * h}; + mesh.translate(-mv); + mesh.require_shared_vertices(); + + sla::SupportPointGenerator::Config cfg; + sla::SupportPoints pts = calc_support_pts(mesh, cfg); + sla::remove_bottom_points(pts, mesh.bounding_box().min.z() + EPSILON); + + REQUIRE(!pts.empty()); +} + +TEST_CASE("Two parallel plates should be supported", "[SupGen][Hollowed]") +{ + double width = 20., depth = 20., height = 1.; + + TriangleMesh mesh = center_around_bb(make_cube(width + 5., depth + 5., height)); + TriangleMesh mesh_high = center_around_bb(make_cube(width, depth, height)); + mesh_high.translate(0., 0., 10.); // lift up + mesh.merge(mesh_high); + mesh.require_shared_vertices(); + + mesh.WriteOBJFile("parallel_plates.obj"); + + sla::SupportPointGenerator::Config cfg; + sla::SupportPoints pts = calc_support_pts(mesh, cfg); + sla::remove_bottom_points(pts, mesh.bounding_box().min.z() + EPSILON); + + REQUIRE(!pts.empty()); +} + +}} // namespace Slic3r::sla diff --git a/tests/sla_print/sla_test_utils.cpp b/tests/sla_print/sla_test_utils.cpp index 1eaf796c00..653221cd3f 100644 --- a/tests/sla_print/sla_test_utils.cpp +++ b/tests/sla_print/sla_test_utils.cpp @@ -2,13 +2,13 @@ #include "libslic3r/SLA/AGGRaster.hpp" void test_support_model_collision(const std::string &obj_filename, - const sla::SupportConfig &input_supportcfg, + const sla::SupportTreeConfig &input_supportcfg, const sla::HollowingConfig &hollowingcfg, const sla::DrainHoles &drainholes) { SupportByproducts byproducts; - sla::SupportConfig supportcfg = input_supportcfg; + sla::SupportTreeConfig supportcfg = input_supportcfg; // Set head penetration to a small negative value which should ensure that // the supports will not touch the model body. @@ -38,7 +38,10 @@ void test_support_model_collision(const std::string &obj_filename, Polygons intersections = intersection(sup_slice, mod_slice); - notouch = notouch && intersections.empty(); + double pinhead_r = scaled(input_supportcfg.head_front_radius_mm); + + // TODO:: make it strict without a threshold of PI * pihead_radius ^ 2 + notouch = notouch && area(intersections) < PI * pinhead_r * pinhead_r; } /*if (!notouch) */export_failed_case(support_slices, byproducts); @@ -69,11 +72,12 @@ void export_failed_case(const std::vector &support_slices, const Sup m.merge(byproducts.input_mesh); m.repair(); m.require_shared_vertices(); - m.WriteOBJFile(byproducts.obj_fname.c_str()); + m.WriteOBJFile((Catch::getResultCapture().getCurrentTestName() + "_" + + byproducts.obj_fname).c_str()); } void test_supports(const std::string &obj_filename, - const sla::SupportConfig &supportcfg, + const sla::SupportTreeConfig &supportcfg, const sla::HollowingConfig &hollowingcfg, const sla::DrainHoles &drainholes, SupportByproducts &out) @@ -104,7 +108,7 @@ void test_supports(const std::string &obj_filename, // Create the special index-triangle mesh with spatial indexing which // is the input of the support point and support mesh generators - sla::EigenMesh3D emesh{mesh}; + sla::IndexedMesh emesh{mesh}; #ifdef SLIC3R_HOLE_RAYCASTER if (hollowingcfg.enabled) @@ -129,8 +133,7 @@ void test_supports(const std::string &obj_filename, // If there is no elevation, support points shall be removed from the // bottom of the object. if (std::abs(supportcfg.object_elevation_mm) < EPSILON) { - sla::remove_bottom_points(support_points, zmin, - supportcfg.base_height_mm); + sla::remove_bottom_points(support_points, zmin + supportcfg.base_height_mm); } else { // Should be support points at least on the bottom of the model REQUIRE_FALSE(support_points.empty()); @@ -141,7 +144,8 @@ void test_supports(const std::string &obj_filename, // Generate the actual support tree sla::SupportTreeBuilder treebuilder; - treebuilder.build(sla::SupportableMesh{emesh, support_points, supportcfg}); + sla::SupportableMesh sm{emesh, support_points, supportcfg}; + sla::SupportTreeBuildsteps::execute(treebuilder, sm); check_support_tree_integrity(treebuilder, supportcfg); @@ -157,8 +161,8 @@ void test_supports(const std::string &obj_filename, if (std::abs(supportcfg.object_elevation_mm) < EPSILON) allowed_zmin = zmin - 2 * supportcfg.head_back_radius_mm; - REQUIRE(obb.min.z() >= allowed_zmin); - REQUIRE(obb.max.z() <= zmax); + REQUIRE(obb.min.z() >= Approx(allowed_zmin)); + REQUIRE(obb.max.z() <= Approx(zmax)); // Move out the support tree into the byproducts, we can examine it further // in various tests. @@ -168,15 +172,15 @@ void test_supports(const std::string &obj_filename, } void check_support_tree_integrity(const sla::SupportTreeBuilder &stree, - const sla::SupportConfig &cfg) + const sla::SupportTreeConfig &cfg) { double gnd = stree.ground_level; double H1 = cfg.max_solo_pillar_height_mm; double H2 = cfg.max_dual_pillar_height_mm; for (const sla::Head &head : stree.heads()) { - REQUIRE((!head.is_valid() || head.pillar_id != sla::ID_UNSET || - head.bridge_id != sla::ID_UNSET)); + REQUIRE((!head.is_valid() || head.pillar_id != sla::SupportTreeNode::ID_UNSET || + head.bridge_id != sla::SupportTreeNode::ID_UNSET)); } for (const sla::Pillar &pillar : stree.pillars()) { @@ -204,7 +208,7 @@ void check_support_tree_integrity(const sla::SupportTreeBuilder &stree, }; for (auto &bridge : stree.bridges()) chck_bridge(bridge, max_bridgelen); - REQUIRE(max_bridgelen <= cfg.max_bridge_length_mm); + REQUIRE(max_bridgelen <= Approx(cfg.max_bridge_length_mm)); max_bridgelen = 0; for (auto &bridge : stree.crossbridges()) chck_bridge(bridge, max_bridgelen); @@ -410,3 +414,71 @@ double predict_error(const ExPolygon &p, const sla::RasterBase::PixelDim &pd) return error; } + + +// Make a 3D pyramid +TriangleMesh make_pyramid(float base, float height) +{ + float a = base / 2.f; + + TriangleMesh mesh( + { + {-a, -a, 0}, {a, -a, 0}, {a, a, 0}, + {-a, a, 0}, {0.f, 0.f, height} + }, + { + {0, 1, 2}, + {0, 2, 3}, + {0, 1, 4}, + {1, 2, 4}, + {2, 3, 4}, + {3, 0, 4} + }); + + mesh.repair(); + + return mesh; +} + + TriangleMesh make_prism(double width, double length, double height) +{ + // We need two upward facing triangles + + double x = width / 2., y = length / 2.; + + TriangleMesh mesh( + { + {-x, -y, 0.}, {x, -y, 0.}, {0., -y, height}, + {-x, y, 0.}, {x, y, 0.}, {0., y, height}, + }, + { + {0, 1, 2}, // side 1 + {4, 3, 5}, // side 2 + {1, 4, 2}, {2, 4, 5}, // roof 1 + {0, 2, 5}, {0, 5, 3}, // roof 2 + {3, 4, 1}, {3, 1, 0} // bottom + }); + + return mesh; +} + +sla::SupportPoints calc_support_pts( + const TriangleMesh & mesh, + const sla::SupportPointGenerator::Config &cfg) +{ + // Prepare the slice grid and the slices + std::vector slices; + auto bb = cast(mesh.bounding_box()); + std::vector heights = grid(bb.min.z(), bb.max.z(), 0.1f); + slice_mesh(mesh, heights, slices, CLOSING_RADIUS, [] {}); + + // Prepare the support point calculator + sla::IndexedMesh emesh{mesh}; + sla::SupportPointGenerator spgen{emesh, cfg, []{}, [](int){}}; + + // Calculate the support points + spgen.seed(0); + spgen.execute(slices, heights); + + return spgen.output(); +} diff --git a/tests/sla_print/sla_test_utils.hpp b/tests/sla_print/sla_test_utils.hpp index 3652b1f81c..d10a85b259 100644 --- a/tests/sla_print/sla_test_utils.hpp +++ b/tests/sla_print/sla_test_utils.hpp @@ -67,16 +67,16 @@ struct SupportByproducts const constexpr float CLOSING_RADIUS = 0.005f; void check_support_tree_integrity(const sla::SupportTreeBuilder &stree, - const sla::SupportConfig &cfg); + const sla::SupportTreeConfig &cfg); void test_supports(const std::string &obj_filename, - const sla::SupportConfig &supportcfg, + const sla::SupportTreeConfig &supportcfg, const sla::HollowingConfig &hollowingcfg, const sla::DrainHoles &drainholes, SupportByproducts &out); inline void test_supports(const std::string &obj_filename, - const sla::SupportConfig &supportcfg, + const sla::SupportTreeConfig &supportcfg, SupportByproducts &out) { sla::HollowingConfig hcfg; @@ -85,7 +85,7 @@ inline void test_supports(const std::string &obj_filename, } inline void test_supports(const std::string &obj_filename, - const sla::SupportConfig &supportcfg = {}) + const sla::SupportTreeConfig &supportcfg = {}) { SupportByproducts byproducts; test_supports(obj_filename, supportcfg, byproducts); @@ -97,13 +97,13 @@ void export_failed_case(const std::vector &support_slices, void test_support_model_collision( const std::string &obj_filename, - const sla::SupportConfig &input_supportcfg, + const sla::SupportTreeConfig &input_supportcfg, const sla::HollowingConfig &hollowingcfg, const sla::DrainHoles &drainholes); inline void test_support_model_collision( const std::string &obj_filename, - const sla::SupportConfig &input_supportcfg = {}) + const sla::SupportTreeConfig &input_supportcfg = {}) { sla::HollowingConfig hcfg; hcfg.enabled = false; @@ -185,4 +185,13 @@ long raster_pxsum(const sla::RasterGrayscaleAA &raster); double predict_error(const ExPolygon &p, const sla::RasterBase::PixelDim &pd); +// Make a 3D pyramid +TriangleMesh make_pyramid(float base, float height); + +TriangleMesh make_prism(double width, double length, double height); + +sla::SupportPoints calc_support_pts( + const TriangleMesh & mesh, + const sla::SupportPointGenerator::Config &cfg = {}); + #endif // SLA_TEST_UTILS_HPP diff --git a/version.inc b/version.inc index 30b373bdfd..b71256c949 100644 --- a/version.inc +++ b/version.inc @@ -3,7 +3,7 @@ set(SLIC3R_APP_NAME "PrusaSlicer") set(SLIC3R_APP_KEY "PrusaSlicer") -set(SLIC3R_VERSION "2.3.0-alpha0") +set(SLIC3R_VERSION "2.3.0-alpha1") set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN") set(SLIC3R_RC_VERSION "2,3,0,0") set(SLIC3R_RC_VERSION_DOTS "2.3.0.0") diff --git a/xs/src/perlglue.cpp b/xs/src/perlglue.cpp index c3cd7e6165..47961c6231 100644 --- a/xs/src/perlglue.cpp +++ b/xs/src/perlglue.cpp @@ -15,7 +15,7 @@ REGISTER_CLASS(Filler, "Filler"); REGISTER_CLASS(Flow, "Flow"); REGISTER_CLASS(CoolingBuffer, "GCode::CoolingBuffer"); REGISTER_CLASS(GCode, "GCode"); -REGISTER_CLASS(GCodePreviewData, "GCode::PreviewData"); +//REGISTER_CLASS(GCodePreviewData, "GCode::PreviewData"); // REGISTER_CLASS(GCodeSender, "GCode::Sender"); REGISTER_CLASS(Layer, "Layer"); REGISTER_CLASS(SupportLayer, "Layer::Support"); diff --git a/xs/t/15_config.t b/xs/t/15_config.t index 1f9fc939bc..55b6791015 100644 --- a/xs/t/15_config.t +++ b/xs/t/15_config.t @@ -219,7 +219,7 @@ foreach my $config (Slic3r::Config->new, Slic3r::Config::Static::new_FullPrintCo my $config = Slic3r::Config->new; $config->set('extruder', 2); $config->set('perimeter_extruder', 3); - $config->normalize; + $config->normalize_fdm; ok !$config->has('extruder'), 'extruder option is removed after normalize()'; is $config->get('infill_extruder'), 2, 'undefined extruder is populated with default extruder'; is $config->get('perimeter_extruder'), 3, 'defined extruder is not overwritten by default extruder'; @@ -228,7 +228,7 @@ foreach my $config (Slic3r::Config->new, Slic3r::Config::Static::new_FullPrintCo { my $config = Slic3r::Config->new; $config->set('infill_extruder', 2); - $config->normalize; + $config->normalize_fdm; is $config->get('solid_infill_extruder'), 2, 'undefined solid infill extruder is populated with infill extruder'; } @@ -236,7 +236,7 @@ foreach my $config (Slic3r::Config->new, Slic3r::Config::Static::new_FullPrintCo my $config = Slic3r::Config->new; $config->set('spiral_vase', 1); $config->set('retract_layer_change', [1,0]); - $config->normalize; + $config->normalize_fdm; is_deeply $config->get('retract_layer_change'), [0,0], 'retract_layer_change is disabled with spiral_vase'; } diff --git a/xs/xsp/Config.xsp b/xs/xsp/Config.xsp index 63dc5b312a..b8f996797b 100644 --- a/xs/xsp/Config.xsp +++ b/xs/xsp/Config.xsp @@ -48,7 +48,7 @@ %code{% THIS->apply(*other, true); %}; %name{get_keys} std::vector keys(); void erase(t_config_option_key opt_key); - void normalize(); + void normalize_fdm(); %name{setenv} void setenv_(); double min_object_distance() %code{% RETVAL = Slic3r::min_object_distance(*THIS); %}; static DynamicPrintConfig* load(char *path) diff --git a/xs/xsp/GCode.xsp b/xs/xsp/GCode.xsp index 9e04edd4c6..1536c874b5 100644 --- a/xs/xsp/GCode.xsp +++ b/xs/xsp/GCode.xsp @@ -26,14 +26,14 @@ croak("%s\n", e.what()); } %}; - void do_export_w_preview(Print *print, const char *path, GCodePreviewData *preview_data) - %code%{ - try { - THIS->do_export(print, path, preview_data); - } catch (std::exception& e) { - croak("%s\n", e.what()); - } - %}; +// void do_export_w_preview(Print *print, const char *path, GCodePreviewData *preview_data) +// %code%{ +// try { +// THIS->do_export(print, path, preview_data); +// } catch (std::exception& e) { +// croak("%s\n", e.what()); +// } +// %}; Ref origin() %code{% RETVAL = &(THIS->origin()); %}; @@ -60,26 +60,26 @@ %code{% RETVAL = const_cast(static_cast(static_cast(&THIS->config()))); %}; }; -%name{Slic3r::GCode::PreviewData} class GCodePreviewData { - GCodePreviewData(); - ~GCodePreviewData(); - void reset(); - bool empty() const; - void set_type(int type) - %code%{ - if ((0 <= type) && (type < GCodePreviewData::Extrusion::Num_View_Types)) - THIS->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type; - %}; - int type() %code%{ RETVAL = (int)THIS->extrusion.view_type; %}; - void set_extrusion_flags(int flags) - %code%{ THIS->extrusion.role_flags = (unsigned int)flags; %}; - void set_travel_visible(bool visible) - %code%{ THIS->travel.is_visible = visible; %}; - void set_retractions_visible(bool visible) - %code%{ THIS->retraction.is_visible = visible; %}; - void set_unretractions_visible(bool visible) - %code%{ THIS->unretraction.is_visible = visible; %}; - void set_shells_visible(bool visible) - %code%{ THIS->shell.is_visible = visible; %}; - void set_extrusion_paths_colors(std::vector colors); -}; +//%name{Slic3r::GCode::PreviewData} class GCodePreviewData { +// GCodePreviewData(); +// ~GCodePreviewData(); +// void reset(); +// bool empty() const; +// void set_type(int type) +// %code%{ +// if ((0 <= type) && (type < GCodePreviewData::Extrusion::Num_View_Types)) +// THIS->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type; +// %}; +// int type() %code%{ RETVAL = (int)THIS->extrusion.view_type; %}; +// void set_extrusion_flags(int flags) +// %code%{ THIS->extrusion.role_flags = (unsigned int)flags; %}; +// void set_travel_visible(bool visible) +// %code%{ THIS->travel.is_visible = visible; %}; +// void set_retractions_visible(bool visible) +// %code%{ THIS->retraction.is_visible = visible; %}; +// void set_unretractions_visible(bool visible) +// %code%{ THIS->unretraction.is_visible = visible; %}; +// void set_shells_visible(bool visible) +// %code%{ THIS->shell.is_visible = visible; %}; +// void set_extrusion_paths_colors(std::vector colors); +//}; diff --git a/xs/xsp/Model.xsp b/xs/xsp/Model.xsp index 4fb35578db..93067ebe38 100644 --- a/xs/xsp/Model.xsp +++ b/xs/xsp/Model.xsp @@ -12,7 +12,7 @@ #include "libslic3r/Format/OBJ.hpp" #include "libslic3r/Format/PRUS.hpp" #include "libslic3r/Format/STL.hpp" -#include "slic3r/GUI/PresetBundle.hpp" +#include "libslic3r/PresetBundle.hpp" %} %name{Slic3r::Model} class Model { @@ -118,7 +118,7 @@ load_stl(CLASS, path, object_name) %code%{ RETVAL = THIS->get_model(); %}; Ref config() - %code%{ RETVAL = &THIS->config; %}; + %code%{ RETVAL = &const_cast(THIS->config.get()); %}; std::string get_attribute(std::string name) %code%{ if (THIS->attributes.find(name) != THIS->attributes.end()) RETVAL = THIS->attributes[name]; %}; @@ -202,7 +202,7 @@ ModelMaterial::attributes() void set_input_file(std::string value) %code%{ THIS->input_file = value; %}; Ref config() - %code%{ RETVAL = &THIS->config; %}; + %code%{ RETVAL = &const_cast(THIS->config.get()); %}; Ref model() %code%{ RETVAL = THIS->get_model(); %}; @@ -248,7 +248,7 @@ ModelMaterial::attributes() Ref material(); Ref config() - %code%{ RETVAL = &THIS->config; %}; + %code%{ RETVAL = &const_cast(THIS->config.get()); %}; Ref mesh() %code%{ RETVAL = &THIS->mesh(); %}; diff --git a/xs/xsp/Print.xsp b/xs/xsp/Print.xsp index 0952513ca3..d9872aa7e3 100644 --- a/xs/xsp/Print.xsp +++ b/xs/xsp/Print.xsp @@ -76,10 +76,10 @@ _constant() %code%{ RETVAL = const_cast(&THIS->skirt()); %}; Ref brim() %code%{ RETVAL = const_cast(&THIS->brim()); %}; - std::string estimated_normal_print_time() - %code%{ RETVAL = THIS->print_statistics().estimated_normal_print_time; %}; - std::string estimated_silent_print_time() - %code%{ RETVAL = THIS->print_statistics().estimated_silent_print_time; %}; +// std::string estimated_normal_print_time() +// %code%{ RETVAL = THIS->print_statistics().estimated_normal_print_time; %}; +// std::string estimated_silent_print_time() +// %code%{ RETVAL = THIS->print_statistics().estimated_silent_print_time; %}; double total_used_filament() %code%{ RETVAL = THIS->print_statistics().total_used_filament; %}; double total_extruded_volume() @@ -139,7 +139,18 @@ _constant() %}; bool apply(Model *model, DynamicPrintConfig* config) - %code%{ RETVAL = THIS->apply(*model, *config); %}; + %code%{ + // Touching every config as the Perl bindings does not correctly export ModelConfig, + // therefore the configs have often invalid timestamps. + for (auto obj : model->objects) { + obj->config.touch(); + for (auto vol : obj->volumes) + vol->config.touch(); + } + for (auto mat : model->materials) + mat.second->config.touch(); + RETVAL = THIS->apply(*model, *config); + %}; bool has_infinite_skirt(); std::vector extruders() const; int validate() %code%{ diff --git a/xs/xsp/my.map b/xs/xsp/my.map index fd50d29751..7e51b237c0 100644 --- a/xs/xsp/my.map +++ b/xs/xsp/my.map @@ -191,9 +191,9 @@ GCode* O_OBJECT_SLIC3R Ref O_OBJECT_SLIC3R_T Clone O_OBJECT_SLIC3R_T -GCodePreviewData* O_OBJECT_SLIC3R -Ref O_OBJECT_SLIC3R_T -Clone O_OBJECT_SLIC3R_T +//GCodePreviewData* O_OBJECT_SLIC3R +//Ref O_OBJECT_SLIC3R_T +//Clone O_OBJECT_SLIC3R_T MotionPlanner* O_OBJECT_SLIC3R Ref O_OBJECT_SLIC3R_T diff --git a/xs/xsp/typemap.xspt b/xs/xsp/typemap.xspt index 7e277703b8..385b50f1aa 100644 --- a/xs/xsp/typemap.xspt +++ b/xs/xsp/typemap.xspt @@ -155,9 +155,9 @@ %typemap{Ref}{simple}; %typemap{Clone}{simple}; -%typemap{GCodePreviewData*}; -%typemap{Ref}{simple}; -%typemap{Clone}{simple}; +//%typemap{GCodePreviewData*}; +//%typemap{Ref}{simple}; +//%typemap{Clone}{simple}; %typemap{Points}; %typemap{Pointfs};